2121
2222import java .awt .CardLayout ;
2323import java .awt .Component ;
24+ import java .awt .Dimension ;
2425import java .awt .Graphics ;
2526import java .awt .GridBagConstraints ;
2627import java .awt .Toolkit ;
28+ import java .awt .event .ItemEvent ;
2729import java .awt .event .KeyEvent ;
30+ import javax .swing .Box ;
2831import javax .swing .Icon ;
32+ import javax .swing .ImageIcon ;
2933import javax .swing .JComboBox ;
3034import javax .swing .JLabel ;
3135import javax .swing .JPanel ;
4347import org .parosproxy .paros .view .View ;
4448import org .zaproxy .zap .utils .SortedComboBoxModel ;
4549import org .zaproxy .zap .utils .TableExportButton ;
50+ import org .zaproxy .zap .view .ZapToggleButton ;
4651
4752public class TechPanel extends AbstractPanel {
4853
@@ -63,6 +68,7 @@ public class TechPanel extends AbstractPanel {
6368 private TechTableModel techModel = new TechTableModel ();
6469
6570 private TableExportButton <JXTable > exportButton = null ;
71+ private ZapToggleButton enableButton = null ;
6672
6773 private static final Icon TRANSPARENT_ICON =
6874 new Icon () {
@@ -147,57 +153,20 @@ private javax.swing.JToolBar getPanelToolbar() {
147153 if (panelToolbar == null ) {
148154
149155 panelToolbar = new javax .swing .JToolBar ();
150- panelToolbar .setLayout (new java .awt .GridBagLayout ());
151156 panelToolbar .setEnabled (true );
152157 panelToolbar .setFloatable (false );
153158 panelToolbar .setRollover (true );
154159 panelToolbar .setPreferredSize (new java .awt .Dimension (800 , 30 ));
155160 panelToolbar .setFont (new java .awt .Font ("Dialog" , java .awt .Font .PLAIN , 12 ));
156161 panelToolbar .setName ("WappTechToolbar" );
157162
158- GridBagConstraints gridBagConstraints0 = new GridBagConstraints ();
159- GridBagConstraints gridBagConstraints1 = new GridBagConstraints ();
160- GridBagConstraints gridBagConstraints2 = new GridBagConstraints ();
161- GridBagConstraints gridBagConstraints3 = new GridBagConstraints ();
162- GridBagConstraints gridBagConstraintsx = new GridBagConstraints ();
163-
164- gridBagConstraints0 .gridx = 0 ;
165- gridBagConstraints0 .gridy = 0 ;
166- gridBagConstraints0 .insets = new java .awt .Insets (0 , 0 , 0 , 0 );
167- gridBagConstraints0 .anchor = java .awt .GridBagConstraints .WEST ;
168-
169- gridBagConstraints1 .gridx = 1 ;
170- gridBagConstraints1 .gridy = 0 ;
171- gridBagConstraints1 .insets = new java .awt .Insets (0 , 0 , 0 , 0 );
172- gridBagConstraints1 .anchor = java .awt .GridBagConstraints .WEST ;
173-
174- gridBagConstraints2 .gridx = 2 ;
175- gridBagConstraints2 .gridy = 0 ;
176- gridBagConstraints2 .insets = new java .awt .Insets (0 , 0 , 0 , 0 );
177- gridBagConstraints2 .anchor = java .awt .GridBagConstraints .WEST ;
178-
179- gridBagConstraints3 .gridx = 3 ;
180- gridBagConstraints3 .gridy = 0 ;
181- gridBagConstraints3 .insets = new java .awt .Insets (0 , 0 , 0 , 0 );
182- gridBagConstraints3 .anchor = java .awt .GridBagConstraints .WEST ;
183-
184- gridBagConstraintsx .gridx = 3 ;
185- gridBagConstraintsx .gridy = 0 ;
186- gridBagConstraintsx .weightx = 1.0 ;
187- gridBagConstraintsx .weighty = 1.0 ;
188- gridBagConstraintsx .insets = new java .awt .Insets (0 , 0 , 0 , 0 );
189- gridBagConstraintsx .anchor = java .awt .GridBagConstraints .EAST ;
190- gridBagConstraintsx .fill = java .awt .GridBagConstraints .HORIZONTAL ;
191-
192- JLabel t1 = new JLabel ();
193-
194163 panelToolbar .add (
195- new JLabel (Constant .messages .getString ("wappalyzer.toolbar.site.label" )),
196- gridBagConstraints1 );
197- panelToolbar .add (getSiteSelect (), gridBagConstraints2 );
198- panelToolbar .add (getExportButton (), gridBagConstraints3 );
164+ new JLabel (Constant .messages .getString ("wappalyzer.toolbar.site.label" )));
165+ panelToolbar . add ( getSiteSelect () );
166+ panelToolbar .add (getExportButton () );
167+ panelToolbar .add (getEnableToggleButton () );
199168
200- panelToolbar .add (t1 , gridBagConstraintsx );
169+ panelToolbar .add (Box . createHorizontalGlue () );
201170 }
202171 return panelToolbar ;
203172 }
@@ -270,6 +239,7 @@ private JComboBox<String> getSiteSelect() {
270239 if (siteSelect == null ) {
271240 siteSelect = new JComboBox <>(siteModel );
272241 siteSelect .addItem (Constant .messages .getString ("params.toolbar.site.select" ));
242+ siteSelect .setPreferredSize (new Dimension (250 , 22 ));
273243 siteSelect .setSelectedIndex (0 );
274244
275245 siteSelect .addActionListener (
@@ -343,4 +313,40 @@ private TableExportButton<JXTable> getExportButton() {
343313 }
344314 return exportButton ;
345315 }
316+
317+ private ZapToggleButton getEnableToggleButton () {
318+ if (enableButton == null ) {
319+ enableButton =
320+ new ZapToggleButton (
321+ Constant .messages .getString ("wappalyzer.toolbar.toggle.state.enabled" ),
322+ true );
323+ enableButton .setIcon (
324+ new ImageIcon (
325+ TechPanel .class .getResource (
326+ ExtensionWappalyzer .RESOURCE + "/off.png" )));
327+ enableButton .setToolTipText (
328+ Constant .messages .getString (
329+ "wappalyzer.toolbar.toggle.state.disabled.tooltip" ));
330+ enableButton .setSelectedIcon (
331+ new ImageIcon (
332+ TechPanel .class .getResource (ExtensionWappalyzer .RESOURCE + "/on.png" )));
333+ enableButton .setSelectedToolTipText (
334+ Constant .messages .getString ("wappalyzer.toolbar.toggle.state.enabled.tooltip" ));
335+ enableButton .addItemListener (
336+ event -> {
337+ if (event .getStateChange () == ItemEvent .SELECTED ) {
338+ enableButton .setText (
339+ Constant .messages .getString (
340+ "wappalyzer.toolbar.toggle.state.enabled" ));
341+ extension .getPassiveScanner ().setEnabled (true );
342+ } else {
343+ enableButton .setText (
344+ Constant .messages .getString (
345+ "wappalyzer.toolbar.toggle.state.disabled" ));
346+ extension .getPassiveScanner ().setEnabled (false );
347+ }
348+ });
349+ }
350+ return enableButton ;
351+ }
346352}
0 commit comments