All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.parosproxy.paros.extension.option.OptionsViewPanel Maven / Gradle / Ivy

Go to download

The Zed Attack Proxy (ZAP) is an easy to use integrated penetration testing tool for finding vulnerabilities in web applications. It is designed to be used by people with a wide range of security experience and as such is ideal for developers and functional testers who are new to penetration testing. ZAP provides automated scanners as well as a set of tools that allow you to find security vulnerabilities manually.

There is a newer version: 2.16.0
Show newest version
/*
 *
 * Paros and its related class files.
 * 
 * Paros is an HTTP/HTTPS proxy for assessing web application security.
 * Copyright (C) 2003-2004 Chinotec Technologies Company
 * 
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the Clarified Artistic License
 * as published by the Free Software Foundation.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * Clarified Artistic License for more details.
 * 
 * You should have received a copy of the Clarified Artistic License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */
// ZAP: 2012/03/15 Removed the options to change the display of the ManualRequestEditorDialog,
// now they are changed dynamically.
// ZAP: 2012/04/25 Added @Override annotation to all appropriate methods.
// ZAP: 2013/12/13 Added support for a new option 'show tab names'.
// ZAP: 2014/04/25 Issue 642: Add timestamps to Output tab(s)
// ZAP: 2014/10/09 Issue 1359: Options for splash screen
// ZAP: 2014/12/16 Issue 1466: Config option for 'large display' size
// ZAP: 2016/04/04 Do not require a restart to show/hide the tool bar
// ZAP: 2016/04/06 Fix layouts' issues
// ZAP: 2017/01/09 Remove method no longer needed.

package org.parosproxy.paros.extension.option;

import java.awt.CardLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.GraphicsEnvironment;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;

import javax.swing.BorderFactory;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.plaf.basic.BasicComboBoxRenderer;

import org.parosproxy.paros.Constant;
import org.parosproxy.paros.model.Model;
import org.parosproxy.paros.model.OptionsParam;
import org.parosproxy.paros.view.AbstractParamPanel;
import org.parosproxy.paros.view.WorkbenchPanel;
import org.zaproxy.zap.extension.httppanel.view.largerequest.LargeRequestUtil;
import org.zaproxy.zap.extension.httppanel.view.largeresponse.LargeResponseUtil;
import org.zaproxy.zap.utils.FontUtils;
import org.zaproxy.zap.utils.TimeStampUtils;
import org.zaproxy.zap.utils.ZapNumberSpinner;
import org.zaproxy.zap.view.LayoutHelper;

// ZAP: 2011: added more configuration options

public class OptionsViewPanel extends AbstractParamPanel {

	private static final long serialVersionUID = 1L;
	
	private static final String TIME_STAMP_FORMAT_COMBOBOX_TOOL_TIP = Constant.messages.getString("options.display.timestamp.format.combobox.tooltip");
	private static final String TIME_STAMP_FORMAT_DATETIME =  Constant.messages.getString("timestamp.format.datetime");
	private static final String TIME_STAMP_FORMAT_ISO8601 =  Constant.messages.getString("timestamp.format.iso8601");
	private static final String TIME_STAMP_FORMAT_TIMEONLY =  Constant.messages.getString("timestamp.format.timeonly");
	
	private JPanel panelMisc = null;
	
	private JCheckBox chkShowTabNames = null;
	private JCheckBox chkProcessImages = null;
	private JCheckBox chkShowMainToolbar = null;
	private JCheckBox chkAdvancedView = null;
	private JCheckBox chkAskOnExit = null;
	private JCheckBox chkWmUiHandling = null;
	private JCheckBox chkOutputTabTimeStamping = null; 
	private JCheckBox chkShowSplashScreen = null;
	private JCheckBox scaleImages = null;
	private JCheckBox showLocalConnectRequestsCheckbox;
	
	private JComboBox brkPanelViewSelect = null;
	private JComboBox displaySelect = null;
	private JComboBox responsePanelPositionComboBox;
	private JComboBox timeStampsFormatSelect = null; 
	private JComboBox fontName = null;
	
	private ZapNumberSpinner largeRequestSize = null;
	private ZapNumberSpinner largeResponseSize = null;
	private ZapNumberSpinner fontSize = null;
	
	private JLabel brkPanelViewLabel = null;
	private JLabel advancedViewLabel = null;
	private JLabel wmUiHandlingLabel = null;
	private JLabel askOnExitLabel = null;
	private JLabel displayLabel = null;
	private JLabel showMainToolbarLabel = null;
	private JLabel processImagesLabel = null;
	private JLabel showTabNamesLabel = null;
	private JLabel outputTabTimeStampLabel = null; 
	private JLabel outputTabTimeStampExampleLabel = null; 
	private JLabel showSplashScreenLabel = null;
	private JLabel largeRequestLabel = null;
	private JLabel largeResponseLabel = null;
	private JLabel fontExampleLabel = null;
	
    public OptionsViewPanel() {
        super();
 		initialize();
   }
    
	/**
	 * This method initializes this
	 */
	private void initialize() {
        this.setLayout(new CardLayout());
        this.setName(Constant.messages.getString("view.options.title"));
        this.add(getPanelMisc(), getPanelMisc().getName());

	}
	
	/**
	 * This method initializes panelMisc	
	 * 	
	 * @return javax.swing.JPanel	
	 */    
	private JPanel getPanelMisc() {
		if (panelMisc == null) {
			panelMisc = new JPanel();

			panelMisc.setLayout(new GridBagLayout());
		    if (Model.getSingleton().getOptionsParam().getViewParam().getWmUiHandlingOption() == 0) {
		    	panelMisc.setSize(114, 132);
		    }
			panelMisc.setName(Constant.messages.getString("view.options.misc.title"));

			displayLabel = new JLabel(Constant.messages.getString("view.options.label.display"));
			brkPanelViewLabel = new JLabel(Constant.messages.getString("view.options.label.brkPanelView"));
			advancedViewLabel = new JLabel(Constant.messages.getString("view.options.label.advancedview"));
			wmUiHandlingLabel = new JLabel(Constant.messages.getString("view.options.label.wmuihandler"));
			askOnExitLabel = new JLabel(Constant.messages.getString("view.options.label.askonexit"));
			showMainToolbarLabel = new JLabel(Constant.messages.getString("view.options.label.showMainToolbar"));
			processImagesLabel = new JLabel(Constant.messages.getString("view.options.label.processImages"));
			showTabNamesLabel = new JLabel(Constant.messages.getString("view.options.label.showTabNames"));
			outputTabTimeStampLabel = new JLabel(Constant.messages.getString("options.display.timestamp.format.outputtabtimestamps.label"));
			largeRequestLabel = new JLabel(Constant.messages.getString("view.options.label.largeRequestSize"));
			largeResponseLabel = new JLabel(Constant.messages.getString("view.options.label.largeResponseSize"));
					
			outputTabTimeStampExampleLabel = new JLabel(TimeStampUtils.currentDefaultFormattedTimeStamp());
			showSplashScreenLabel = new JLabel(Constant.messages.getString("view.options.label.showSplashScreen"));
			
			int row = 0;
			displayLabel.setLabelFor(getDisplaySelect());
			panelMisc.add(displayLabel, 
					LayoutHelper.getGBC(0, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));
			panelMisc.add(getDisplaySelect(), 
					LayoutHelper.getGBC(1, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));

			row++;
			JLabel responsePanelPositionLabel = new JLabel(Constant.messages.getString("view.options.label.responsepanelpos"));
			panelMisc.add(responsePanelPositionLabel, 
					LayoutHelper.getGBC(0, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));
			panelMisc.add(getResponsePanelPositionComboBox(), 
					LayoutHelper.getGBC(1, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));

			row++;
			brkPanelViewLabel.setLabelFor(getBrkPanelViewSelect());
			panelMisc.add(brkPanelViewLabel, 
					LayoutHelper.getGBC(0, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));
			panelMisc.add(getBrkPanelViewSelect(), 
					LayoutHelper.getGBC(1, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));

			row++;
			largeRequestLabel.setLabelFor(getLargeRequestSize());
			panelMisc.add(largeRequestLabel, 
					LayoutHelper.getGBC(0, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));
			panelMisc.add(getLargeRequestSize(), 
					LayoutHelper.getGBC(1, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));

			row++;
			largeResponseLabel.setLabelFor(getLargeResponseSize());
			panelMisc.add(largeResponseLabel, 
					LayoutHelper.getGBC(0, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));
			panelMisc.add(getLargeResponseSize(), 
					LayoutHelper.getGBC(1, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));

			
			row++;
			advancedViewLabel.setLabelFor(getChkAdvancedView());
			panelMisc.add(advancedViewLabel, 
					LayoutHelper.getGBC(0, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));
			panelMisc.add(getChkAdvancedView(), 
					LayoutHelper.getGBC(1, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));
			
			row++;
			wmUiHandlingLabel.setLabelFor(getChkWmUiHandling());
			panelMisc.add(wmUiHandlingLabel,  
					LayoutHelper.getGBC(0, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));
			panelMisc.add(getChkWmUiHandling(),  
					LayoutHelper.getGBC(1, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));

			row++;
			askOnExitLabel.setLabelFor(getChkAskOnExit());
			panelMisc.add(askOnExitLabel,  
					LayoutHelper.getGBC(0, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));
			panelMisc.add(getChkAskOnExit(),  
					LayoutHelper.getGBC(1, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));
			
			row++;
			showMainToolbarLabel.setLabelFor(getChkShowMainToolbar());
			panelMisc.add(showMainToolbarLabel,  
					LayoutHelper.getGBC(0, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));
			panelMisc.add(getChkShowMainToolbar(),  
					LayoutHelper.getGBC(1, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));
			
			row++;
			processImagesLabel.setLabelFor(getChkProcessImages());
			panelMisc.add(processImagesLabel,  
					LayoutHelper.getGBC(0, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));
			panelMisc.add(getChkProcessImages(),  
					LayoutHelper.getGBC(1, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));

			row++;
			Insets insets = new Insets(2, 2, 2, 2);
			String labelText = Constant.messages.getString("view.options.label.showlocalconnectrequests");
			JLabel showConnectRequestLabel = new JLabel(labelText);
			showConnectRequestLabel.setLabelFor(getShowLocalConnectRequestsCheckbox());
			panelMisc.add(showConnectRequestLabel, LayoutHelper.getGBC(0, row, 1, 1.0D, insets));
			panelMisc.add(getShowLocalConnectRequestsCheckbox(), LayoutHelper.getGBC(1, row, 1, 1.0D, insets));

			row++;
			showTabNamesLabel.setLabelFor(getShowTabNames());
			panelMisc.add(showTabNamesLabel,  
					LayoutHelper.getGBC(0, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));
			panelMisc.add(getShowTabNames(),  
					LayoutHelper.getGBC(1, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));
			
			row++;
			showSplashScreenLabel.setLabelFor(getShowSplashScreen());
			panelMisc.add(showSplashScreenLabel,  
					LayoutHelper.getGBC(0, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));
			panelMisc.add(getShowSplashScreen(),  
					LayoutHelper.getGBC(1, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));
			
			row++;
			outputTabTimeStampLabel.setLabelFor(getChkOutputTabTimeStamps());
			panelMisc.add(outputTabTimeStampLabel,   
					LayoutHelper.getGBC(0, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));
			panelMisc.add(getChkOutputTabTimeStamps(),   
					LayoutHelper.getGBC(1, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));
			
			row++;
			outputTabTimeStampExampleLabel.setLabelFor(getTimeStampsFormatSelect());
			panelMisc.add(getTimeStampsFormatSelect(),   
					LayoutHelper.getGBC(0, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));
			panelMisc.add(outputTabTimeStampExampleLabel,   
					LayoutHelper.getGBC(1, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));

			row++;
			JLabel fontNameLabel = new JLabel(Constant.messages.getString("view.options.label.fontName")); 
			fontNameLabel.setLabelFor(getFontName());
			panelMisc.add(fontNameLabel,   
					LayoutHelper.getGBC(0, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));
			panelMisc.add(getFontName(),   
					LayoutHelper.getGBC(1, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));

			row++;
			JLabel fontSizeLabel = new JLabel(Constant.messages.getString("view.options.label.fontSize")); 
			fontSizeLabel.setLabelFor(getFontSize());
			panelMisc.add(fontSizeLabel,   
					LayoutHelper.getGBC(0, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));
			panelMisc.add(getFontSize(),   
					LayoutHelper.getGBC(1, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));
			
			row++;
			JLabel fontExampleLabel = new JLabel(Constant.messages.getString("view.options.label.fontExample")); 
			fontExampleLabel.setLabelFor(getFontExampleLabel());
			panelMisc.add(fontExampleLabel,   
					LayoutHelper.getGBC(0, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));
			panelMisc.add(getFontExampleLabel(),   
					LayoutHelper.getGBC(1, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));
			
			row++;
			JLabel scaleImagesLabel = new JLabel(Constant.messages.getString("view.options.label.scaleImages")); 
			fontExampleLabel.setLabelFor(getScaleImages());
			panelMisc.add(scaleImagesLabel,   
					LayoutHelper.getGBC(0, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));
			panelMisc.add(getScaleImages(),   
					LayoutHelper.getGBC(1, row, 1, 1.0D, new java.awt.Insets(2,2,2,2)));
			
			row++;
			panelMisc.add(new JLabel(""),   
					LayoutHelper.getGBC(0, row, 1, 1.0D, 1.0D));

		}
		return panelMisc;
	}

	private JCheckBox getShowTabNames() {
		if (chkShowTabNames == null) {
			chkShowTabNames = new JCheckBox();
			chkShowTabNames.setVerticalAlignment(javax.swing.SwingConstants.TOP);
			chkShowTabNames.setVerticalTextPosition(javax.swing.SwingConstants.TOP);
		}
		return chkShowTabNames;
	}

	private JCheckBox getShowSplashScreen() {
		if (chkShowSplashScreen == null) {
			chkShowSplashScreen = new JCheckBox();
			chkShowSplashScreen.setVerticalAlignment(javax.swing.SwingConstants.TOP);
			chkShowSplashScreen.setVerticalTextPosition(javax.swing.SwingConstants.TOP);
		}
		return chkShowSplashScreen;
	}

	private JCheckBox getChkProcessImages() {
		if (chkProcessImages == null) {
			chkProcessImages = new JCheckBox();
			chkProcessImages.setVerticalAlignment(javax.swing.SwingConstants.TOP);
			chkProcessImages.setVerticalTextPosition(javax.swing.SwingConstants.TOP);
		}
		return chkProcessImages;
	}
	
	private JCheckBox getChkShowMainToolbar() {
		if (chkShowMainToolbar == null) {
			chkShowMainToolbar = new JCheckBox();
			chkShowMainToolbar.setVerticalAlignment(javax.swing.SwingConstants.TOP);
			chkShowMainToolbar.setVerticalTextPosition(javax.swing.SwingConstants.TOP);
		}
		return chkShowMainToolbar;
	}

	private JCheckBox getChkWmUiHandling() {
		if (chkWmUiHandling == null) {
			chkWmUiHandling = new JCheckBox();
			chkWmUiHandling.setVerticalAlignment(javax.swing.SwingConstants.TOP);
			chkWmUiHandling.setVerticalTextPosition(javax.swing.SwingConstants.TOP);
		}
		return chkWmUiHandling;
	}

	private JCheckBox getChkAskOnExit() {
		if (chkAskOnExit == null) {
			chkAskOnExit = new JCheckBox();
			chkAskOnExit.setVerticalAlignment(javax.swing.SwingConstants.TOP);
			chkAskOnExit.setVerticalTextPosition(javax.swing.SwingConstants.TOP);
		}
		return chkAskOnExit;
	}
	
	private JComboBox getDisplaySelect() {
		if (displaySelect == null) {
			displaySelect = new JComboBox<>();
			displaySelect.addItem(Constant.messages.getString("view.options.label.display.left"));
			displaySelect.addItem(Constant.messages.getString("view.options.label.display.bottom"));
			displaySelect.addItem(Constant.messages.getString("view.options.label.display.full"));
		}
		return displaySelect;
	}

	private JComboBox getResponsePanelPositionComboBox() {
		if (responsePanelPositionComboBox == null) {
			responsePanelPositionComboBox = new JComboBox<>();
			responsePanelPositionComboBox.addItem(
					new ResponsePanelPositionUI(
							Constant.messages.getString("view.options.label.responsepanelpos.tabs"),
							WorkbenchPanel.ResponsePanelPosition.TABS_SIDE_BY_SIDE));
			responsePanelPositionComboBox.addItem(
					new ResponsePanelPositionUI(
							Constant.messages.getString("view.options.label.responsepanelpos.sideBySide"),
							WorkbenchPanel.ResponsePanelPosition.PANELS_SIDE_BY_SIDE));
			responsePanelPositionComboBox.addItem(
					new ResponsePanelPositionUI(
							Constant.messages.getString("view.options.label.responsepanelpos.above"),
							WorkbenchPanel.ResponsePanelPosition.PANEL_ABOVE));
		}
		return responsePanelPositionComboBox;
	}
	
	private JComboBox getBrkPanelViewSelect() {
		if (brkPanelViewSelect == null) {
			brkPanelViewSelect = new JComboBox<>();
			brkPanelViewSelect.addItem(Constant.messages.getString("view.options.label.brkPanelView.toolbaronly"));
			brkPanelViewSelect.addItem(Constant.messages.getString("view.options.label.brkPanelView.breakonly"));
			brkPanelViewSelect.addItem(Constant.messages.getString("view.options.label.brkPanelView.both"));
		}
		return brkPanelViewSelect; 
	}
	
	private JCheckBox getChkAdvancedView() {
		if (chkAdvancedView == null) {
			chkAdvancedView = new JCheckBox();
			chkAdvancedView.setVerticalAlignment(javax.swing.SwingConstants.TOP);
			chkAdvancedView.setVerticalTextPosition(javax.swing.SwingConstants.TOP);
		}
		
		return chkAdvancedView;
	}
	
	private JCheckBox getChkOutputTabTimeStamps() {
		if (chkOutputTabTimeStamping == null) {
			chkOutputTabTimeStamping = new JCheckBox();
			chkOutputTabTimeStamping.setVerticalAlignment(javax.swing.SwingConstants.TOP);
			chkOutputTabTimeStamping.setVerticalTextPosition(javax.swing.SwingConstants.TOP);
			chkOutputTabTimeStamping.addItemListener(new java.awt.event.ItemListener(){
	        	@Override
	        	public void itemStateChanged(ItemEvent e) {
	        			timeStampsFormatSelect.setEnabled(e.getStateChange() == ItemEvent.SELECTED);
				};
			});
		}
		return chkOutputTabTimeStamping;
	}
	
	
	private JComboBox getTimeStampsFormatSelect() {
		if (timeStampsFormatSelect == null) {
			String[] timeStampFormatStrings = {TIME_STAMP_FORMAT_DATETIME, TIME_STAMP_FORMAT_ISO8601, TIME_STAMP_FORMAT_TIMEONLY};
			timeStampsFormatSelect = new JComboBox(timeStampFormatStrings);
			timeStampsFormatSelect.setToolTipText(TIME_STAMP_FORMAT_COMBOBOX_TOOL_TIP);
			timeStampsFormatSelect.setSelectedItem(getTimeStampsFormatSelect().getSelectedItem());
			timeStampsFormatSelect.setEditable(true);
			if (chkOutputTabTimeStamping.isSelected()) //The drop-down should only be enabled if time stamping is turned on
				timeStampsFormatSelect.setEnabled(true);
			else
				timeStampsFormatSelect.setEnabled(false);
			timeStampsFormatSelect.addActionListener(new java.awt.event.ActionListener() {
			
            @Override
            public void actionPerformed(java.awt.event.ActionEvent e) {
                String selectedDateFormat = (String)getTimeStampsFormatSelect().getSelectedItem();
                outputTabTimeStampExampleLabel.setText(TimeStampUtils.currentFormattedTimeStamp(selectedDateFormat)); 
            };
        });	
		}
		return timeStampsFormatSelect; 
	}
	
	private JCheckBox getShowLocalConnectRequestsCheckbox() {
		if (showLocalConnectRequestsCheckbox == null) {
			showLocalConnectRequestsCheckbox = new JCheckBox();
		}
		return showLocalConnectRequestsCheckbox;
	}

	private ZapNumberSpinner getLargeRequestSize() {
		if (largeRequestSize == null) {
			largeRequestSize = new ZapNumberSpinner(-1, LargeRequestUtil.DEFAULT_MIN_CONTENT_LENGTH, Integer.MAX_VALUE);
		}
		return largeRequestSize;
	}

	private ZapNumberSpinner getLargeResponseSize() {
		if (largeResponseSize == null) {
			largeResponseSize = new ZapNumberSpinner(-1, LargeResponseUtil.DEFAULT_MIN_CONTENT_LENGTH, Integer.MAX_VALUE);
		}
		return largeResponseSize;
	}
	
	private ZapNumberSpinner getFontSize() {
		if (fontSize == null) {
			fontSize = new ZapNumberSpinner(-1, 8, 100);
			if (! FontUtils.canChangeSize()) {
				fontSize.setEnabled(false);
			}
			fontSize.addChangeListener(new ChangeListener() {
				@Override
				public void stateChanged(ChangeEvent e) {
					// Show what the default font will look like
					setExampleFont();
				}});
		}
		return fontSize;
	}
	
	private void setExampleFont() {
		String name;
		if (getFontName().getSelectedItem() == null) {
			name = "";
		} else {
			name = (String)getFontName().getSelectedItem();
		}
		Font font = FontUtils.getFont(name);
		int size = getFontSize().getValue();
		if (size == -1) {
			size = FontUtils.getSystemDefaultFont().getSize();
		}

		getFontExampleLabel().setFont(font.deriveFont((float)size));
		
	}
	
	@SuppressWarnings("unchecked")
	private JComboBox getFontName() {
		if (fontName == null) {
			fontName = new JComboBox();
			fontName.setRenderer(new JComboBoxFontRenderer());
			String fonts[] = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();
			fontName.addItem(" ");	// Default to system font
			for (String font : fonts) {
				fontName.addItem(font);
			}
			if (! FontUtils.canChangeSize()) {
				fontName.setEnabled(false);
			}
			fontName.addActionListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent e) {
					// Show what the default font will look like
					setExampleFont();
				}});
		}
		return fontName;
	}

	private JLabel getFontExampleLabel() {
		if (fontExampleLabel == null) {
			fontExampleLabel = new JLabel(Constant.messages.getString("view.options.label.exampleText"));
			fontExampleLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
		}
		return fontExampleLabel;
	}
	
	private JCheckBox getScaleImages() {
		if (scaleImages == null) {
			scaleImages = new JCheckBox();
			if (! FontUtils.canChangeSize()) {
				scaleImages.setEnabled(false);
			}
		}
		return scaleImages;
	}
	
	@Override
	public void initParam(Object obj) {
	    OptionsParam options = (OptionsParam) obj;
	    getShowTabNames().setSelected(options.getViewParam().getShowTabNames());
	    getShowSplashScreen().setSelected(options.getViewParam().isShowSplashScreen());
	    getChkProcessImages().setSelected(options.getViewParam().getProcessImages() > 0);
	    displaySelect.setSelectedIndex(options.getViewParam().getDisplayOption());
	    selectResponstPanelPosition(options.getViewParam().getResponsePanelPosition());
	    brkPanelViewSelect.setSelectedIndex(options.getViewParam().getBrkPanelViewOption());
	    getChkShowMainToolbar().setSelected(options.getViewParam().isShowMainToolbar());
	    chkAdvancedView.setSelected(options.getViewParam().getAdvancedViewOption() > 0);
	    chkAskOnExit.setSelected(options.getViewParam().getAskOnExitOption() > 0);
	    chkWmUiHandling.setSelected(options.getViewParam().getWmUiHandlingOption() > 0);
	    getChkOutputTabTimeStamps().setSelected(options.getViewParam().isOutputTabTimeStampingEnabled()); 
	    timeStampsFormatSelect.setSelectedItem(options.getViewParam().getOutputTabTimeStampsFormat());
	    getShowLocalConnectRequestsCheckbox().setSelected(options.getViewParam().isShowLocalConnectRequests());
	    largeRequestSize.setValue(options.getViewParam().getLargeRequestSize());
	    largeResponseSize.setValue(options.getViewParam().getLargeResponseSize());
	    getFontSize().setValue(options.getViewParam().getFontSize());
	    getFontName().setSelectedItem(options.getViewParam().getFontName());
	    getScaleImages().setSelected(options.getViewParam().isScaleImages());
	}
	
	private void selectResponstPanelPosition(String positionName) {
		for (int i = 0; i < getResponsePanelPositionComboBox().getItemCount(); i++) {
			ResponsePanelPositionUI item = getResponsePanelPositionComboBox().getItemAt(i);
			if (item.getPosition().name().equals(positionName)) {
				getResponsePanelPositionComboBox().setSelectedIndex(i);
				break;
			}
		}

		if (getResponsePanelPositionComboBox().getSelectedIndex() == -1) {
			getResponsePanelPositionComboBox().setSelectedIndex(0);
		}
	}

	@Override
	public void saveParam (Object obj) throws Exception {
	    OptionsParam options = (OptionsParam) obj;
	    options.getViewParam().setShowTabNames(getShowTabNames().isSelected());
	    options.getViewParam().setShowSplashScreen(getShowSplashScreen().isSelected());
	    options.getViewParam().setProcessImages((getChkProcessImages().isSelected()) ? 1 : 0);
	    options.getViewParam().setDisplayOption(displaySelect.getSelectedIndex());
	    ResponsePanelPositionUI selectedItem = (ResponsePanelPositionUI) getResponsePanelPositionComboBox().getSelectedItem();
	    options.getViewParam().setResponsePanelPosition(selectedItem.getPosition().name());
	    options.getViewParam().setBrkPanelViewOption(brkPanelViewSelect.getSelectedIndex());
	    options.getViewParam().setShowMainToolbar(getChkShowMainToolbar().isSelected());
	    options.getViewParam().setAdvancedViewOption(getChkAdvancedView().isSelected() ? 1 : 0);
	    options.getViewParam().setAskOnExitOption(getChkAskOnExit().isSelected() ? 1 : 0);
	    options.getViewParam().setWmUiHandlingOption(getChkWmUiHandling().isSelected() ? 1 : 0);
	    options.getViewParam().setOutputTabTimeStampingEnabled(getChkOutputTabTimeStamps().isSelected()); 
	    options.getViewParam().setOutputTabTimeStampsFormat((String) getTimeStampsFormatSelect().getSelectedItem()); 
	    options.getViewParam().setShowLocalConnectRequests(getShowLocalConnectRequestsCheckbox().isSelected());
	    options.getViewParam().setLargeRequestSize(getLargeRequestSize().getValue());
	    options.getViewParam().setLargeResponseSize(getLargeResponseSize().getValue());
	    options.getViewParam().setFontSize(getFontSize().getValue());
	    options.getViewParam().setFontName((String)getFontName().getSelectedItem());
	    options.getViewParam().setScaleImages(getScaleImages().isSelected());
	}

	@Override
	public String getHelpIndex() {
		// ZAP: added help index
		return "ui.dialogs.options.view";
	}
	
	@SuppressWarnings("serial")
	private class JComboBoxFontRenderer extends BasicComboBoxRenderer {
	    protected DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer();

	    @Override
	    @SuppressWarnings("rawtypes")
		public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
	        JLabel renderer = (JLabel) defaultRenderer.getListCellRendererComponent(list, value, index, isSelected,cellHasFocus);
	        Font font = FontUtils.getFont((String)value);
	        if (font != null) {
	        	renderer.setFont(FontUtils.getFont((String)value));
	        } else {
	        	renderer.setFont(FontUtils.getFont(FontUtils.Size.standard));
	        }
	        return renderer;
	    }
	}

	private static class ResponsePanelPositionUI {

		private final String name;
		private final WorkbenchPanel.ResponsePanelPosition position;

		public ResponsePanelPositionUI(String name, WorkbenchPanel.ResponsePanelPosition position) {
			this.name = name;
			this.position = position;
		}

		public WorkbenchPanel.ResponsePanelPosition getPosition() {
			return position;
		}

		@Override
		public String toString() {
			return name;
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy