/******************************************************************************* * Copyright (c) 2004, 2010 BREDEX GmbH. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * BREDEX GmbH - initial API and implementation and/or initial documentation *******************************************************************************/ package org.eclipse.jubula.client.ui.rcp.preferences; import java.util.HashSet; import java.util.Set; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.jubula.client.ui.constants.Constants; import org.eclipse.jubula.client.ui.constants.ContextHelpIds; import org.eclipse.jubula.client.ui.preferences.utils.Utils; import org.eclipse.jubula.client.ui.rcp.Plugin; import org.eclipse.jubula.client.core.constants.InputCodeHelper; import org.eclipse.jubula.client.core.constants.InputCodeHelper.UserInput; import org.eclipse.jubula.client.ui.rcp.i18n.Messages; import org.eclipse.jubula.client.ui.rcp.preferences.utils.InputComboUtil; import org.eclipse.jubula.client.ui.rcp.provider.ControlDecorator; import org.eclipse.jubula.client.ui.rcp.widgets.ModifiableTriggerList; import org.eclipse.jubula.client.ui.utils.LayoutUtil; import org.eclipse.jubula.client.ui.widgets.DirectCombo; import org.eclipse.jubula.tools.internal.constants.StringConstants; import org.eclipse.jubula.tools.internal.exception.JBException; import org.eclipse.jubula.tools.internal.i18n.I18n; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; /** * @author BREDEX GmbH * @created 19.06.2006 */ public class ObservationPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { /** 1 column */ private static final int NUM_COLUMNS = 4; /** 10 horizontal spaces */ private static final int HORIZONTAL_SPACING_10 = 10; /** 10 vertical spaces */ private static final int VERTICAL_SPACING_10 = 10; /** margin height = 10 */ private static final int MARGIN_HEIGHT_10 = 10; /** margin width = 10 */ private static final int MARGIN_WIDTH_10 = 10; /** combo for start/stop checkmode shortcut modifier */ private Combo m_startStopCheckMods = null; /** combo for start/stop checkmode shortcut key */ private DirectCombo<UserInput> m_startStopCheckKey = null; /** combo for check component shortcut modifier */ private Combo m_checkCompMods = null; /** combo for check component shortcut key */ private DirectCombo<UserInput> m_checkCompKey = null; /** checkbox for recorded action dialog */ private Button m_showDialog = null; /** container for management of singleLine trigger keys */ private ModifiableTriggerList m_singleLineTrigger; /** container for management of multiLine trigger keys */ private ModifiableTriggerList m_multiLineTrigger; /** * */ public ObservationPreferencePage() { setPreferenceStore(Plugin.getDefault().getPreferenceStore()); } /** * {@inheritDoc} * * @param parent * @return */ protected Control createContents(Composite parent) { /** Add layer to parent widget */ Composite composite = new Composite(parent, SWT.NONE); /** Define laout rules for widget placement */ compositeGridData(composite); createObservModeArea(composite); Plugin.getHelpSystem().setHelp(parent, ContextHelpIds.PREFPAGE_OBSERV); initPreferences(); return composite; } /** * {@inheritDoc} * @param workbench */ public void init(IWorkbench workbench) { setDescription(Messages.ObservationPreferencePageDescription); } /** * @param parent parent of this Combo */ private void createObservModeArea(Composite parent) { InputCodeHelper keys = InputCodeHelper.getInstance(); Composite composite = new Composite(parent, SWT.NONE); compositeGridData(composite); Label keycombLabel = new Label(composite, SWT.NONE); keycombLabel.setText(Messages.ObservationPreferencePageKeycombos); keycombLabel.setFont(LayoutUtil.BOLD_TAHOMA); GridData data = new GridData(); data.horizontalSpan = 4; keycombLabel.setLayoutData(data); Label checkmodeLabel = new Label(composite, SWT.NONE); checkmodeLabel.setText(Messages.ObservationPreferencePageCheckMode); m_startStopCheckMods = new Combo( composite, SWT.DROP_DOWN | SWT.READ_ONLY); m_startStopCheckMods.setItems(keys.getModifierString()); Label pluslabel = new Label(composite, SWT.NONE); pluslabel.setText(StringConstants.SPACE + StringConstants.PLUS + StringConstants.SPACE); m_startStopCheckKey = InputComboUtil.createKeyCombo( composite, SWT.DROP_DOWN | SWT.READ_ONLY); Label checkCompLabel = new Label(composite, SWT.NONE); checkCompLabel.setText(Messages.ObservationPreferencePageCheckComp); m_checkCompMods = new Combo(composite, SWT.DROP_DOWN | SWT.READ_ONLY); m_checkCompMods.setItems(keys.getModifierString()); Label pluslabel2 = new Label(composite, SWT.NONE); pluslabel2.setText(" + "); //$NON-NLS-1$ m_checkCompKey = InputComboUtil.createKeyCombo( composite, SWT.DROP_DOWN | SWT.READ_ONLY); SelectionListener selListener = new SelectionListener() { public void widgetSelected(SelectionEvent e) { checkValidKeys(); } public void widgetDefaultSelected(SelectionEvent e) { // ok } }; m_startStopCheckMods.addSelectionListener(selListener); m_startStopCheckKey.addSelectionListener(selListener); m_checkCompMods.addSelectionListener(selListener); m_checkCompKey.addSelectionListener(selListener); Label dialogLabel = new Label(composite, SWT.NONE); dialogLabel.setText(Messages.ObservationPreferencePageRecActDialog); dialogLabel.setFont(LayoutUtil.BOLD_TAHOMA); GridData data2 = new GridData(); data2.horizontalSpan = 4; dialogLabel.setLayoutData(data2); ControlDecorator.createInfo(dialogLabel, I18n.getString("ControlDecorator.ObervationConsole"), false); //$NON-NLS-1$ m_showDialog = new Button(composite, SWT.CHECK); m_showDialog.setText(Messages.ObservationPreferencePageShowDialog); // createTriggerArea(composite); } /** * @param composite Composite */ private void createTriggerArea(Composite composite) { Label triggerLabel = new Label(composite, SWT.NONE); triggerLabel.setText(Messages.ObservationPreferencePageTrigger); triggerLabel.setFont(LayoutUtil.BOLD_TAHOMA); GridData data3 = new GridData(); data3.horizontalSpan = 4; triggerLabel.setLayoutData(data3); ControlDecorator.createInfo(triggerLabel, I18n.getString("ControlDecorator.ObservationTriggerReplaceText"), false); //$NON-NLS-1$ Set<String> values = new HashSet<String>(); m_singleLineTrigger = new ModifiableTriggerList(composite, SWT.NONE, Messages.ObservationPreferencePageSingleLine, values, true); GridData gridData2 = new GridData(GridData.FILL_VERTICAL); gridData2.horizontalSpan = 2; gridData2.widthHint = 200; gridData2.heightHint = 300; m_singleLineTrigger.setLayoutData(gridData2); Set<String> values2 = new HashSet<String>(); m_multiLineTrigger = new ModifiableTriggerList(composite, SWT.NONE, Messages.ObservationPreferencePageMultiLine, values2, true); GridData gridData3 = new GridData(GridData.FILL_VERTICAL); gridData3.horizontalSpan = 2; gridData3.widthHint = 200; gridData3.heightHint = 300; m_multiLineTrigger.setLayoutData(gridData3); Label keycombLabel = new Label(composite, SWT.NONE); keycombLabel.setText(Messages.ObservationPreferencePageHhint); keycombLabel.setFont(LayoutUtil.BOLD_TAHOMA); GridData data = new GridData(); data.horizontalSpan = 4; keycombLabel.setLayoutData(data); } /** * checks if both combinations not using same * keys */ protected void checkValidKeys() { final String checkModeShortcut = m_startStopCheckMods.getText() + m_startStopCheckKey.getText(); final String checkCompShortcut = m_checkCompMods.getText() + m_checkCompKey.getText(); // All Observation shortcuts must differ if (checkModeShortcut.equals(checkCompShortcut)) { setErrorMessage(Messages.ObservationPreferencePageRecordInvalidKey); setValid(false); } else { setErrorMessage(null); setValid(true); } } /** * @param composite The composite. */ private void compositeGridData(Composite composite) { GridLayout compositeLayout = new GridLayout(); compositeLayout.numColumns = NUM_COLUMNS; compositeLayout.horizontalSpacing = HORIZONTAL_SPACING_10; compositeLayout.verticalSpacing = VERTICAL_SPACING_10; compositeLayout.marginHeight = MARGIN_HEIGHT_10; compositeLayout.marginWidth = MARGIN_WIDTH_10; composite.setLayout(compositeLayout); GridData compositeData = new GridData(GridData.FILL_BOTH); compositeData.grabExcessHorizontalSpace = true; compositeData.grabExcessVerticalSpace = false; composite.setLayoutData(compositeData); } /** * Performs special processing when this page's Restore Defaults button has * been pressed. Sets the contents of the nameEntry field to be the default */ protected void initPreferences() { // sets widgets to default values m_startStopCheckMods.select(InputCodeHelper.getInstance() .getIndexOfModifier(getPreferenceStore().getInt( Constants.CHECKMODE_MODS_KEY))); InputComboUtil.setSelectedKey( m_startStopCheckKey, getPreferenceStore().getInt(Constants.CHECKMODE_KEY_KEY)); m_checkCompMods.select(InputCodeHelper.getInstance().getIndexOfModifier( getPreferenceStore().getInt(Constants.CHECKCOMP_MODS_KEY))); InputComboUtil.setSelectedKey( m_checkCompKey, getPreferenceStore().getInt(Constants.CHECKCOMP_KEY_KEY)); m_showDialog.setSelection(getPreferenceStore(). getBoolean(Constants.SHOWRECORDDIALOG_KEY)); try { m_singleLineTrigger.setValues( Utils.decodeStringToSet(getPreferenceStore().getString( Constants.SINGLELINETRIGGER_KEY), StringConstants.SEMICOLON)); m_multiLineTrigger.setValues( Utils.decodeStringToSet(getPreferenceStore().getString( Constants.MULTILINETRIGGER_KEY), StringConstants.SEMICOLON)); } catch (JBException e) { e.printStackTrace(); } } /** * Performs special processing when this page's Restore Defaults button has * been pressed. Sets the contents of the nameEntry field to be the default */ protected void performDefaults() { // sets widgets to default values m_startStopCheckMods.select(InputCodeHelper.getInstance() .getIndexOfModifier( getDefaultPrefsInt(Constants.CHECKMODE_MODS_KEY))); InputComboUtil.setSelectedKey(m_startStopCheckKey, getDefaultPrefsInt(Constants.CHECKMODE_KEY_KEY)); m_checkCompMods.select(InputCodeHelper.getInstance() .getIndexOfModifier( getDefaultPrefsInt(Constants.CHECKCOMP_MODS_KEY))); InputComboUtil.setSelectedKey(m_checkCompKey, getDefaultPrefsInt(Constants.CHECKCOMP_KEY_KEY)); m_showDialog.setSelection( getDefaultPrefsBool(Constants.SHOWRECORDDIALOG_KEY)); try { m_singleLineTrigger.setValues(Utils.decodeStringToSet( getDefaultPrefsString(Constants.SINGLELINETRIGGER_KEY), StringConstants.SEMICOLON)); m_multiLineTrigger.setValues(Utils.decodeStringToSet( getDefaultPrefsString(Constants.MULTILINETRIGGER_KEY), StringConstants.SEMICOLON)); } catch (JBException e) { e.printStackTrace(); } checkValidKeys(); } /** * @return default value * @param key * preference key */ private boolean getDefaultPrefsBool(String key) { return getPreferenceStore().getDefaultBoolean(key); } /** * @return default value * @param key preference key */ private int getDefaultPrefsInt(String key) { return getPreferenceStore().getDefaultInt(key); } /** * @return default value * @param key * preference key */ private String getDefaultPrefsString(String key) { return getPreferenceStore().getDefaultString(key); } /** * Method declared on IPreferencePage. * * @return performOK */ public boolean performOk() { // read preferences from widgets // set preferences in store getPreferenceStore().setValue(Constants.CHECKMODE_MODS_KEY, InputCodeHelper.getInstance().getModifier()[ m_startStopCheckMods.getSelectionIndex()]); InputComboUtil.setPrefCode(m_startStopCheckKey, getPreferenceStore(), Constants.CHECKMODE_KEY_KEY); getPreferenceStore().setValue( Constants.CHECKCOMP_MODS_KEY, InputCodeHelper.getInstance().getModifier()[m_checkCompMods .getSelectionIndex()]); InputComboUtil.setPrefCode(m_checkCompKey, getPreferenceStore(), Constants.CHECKCOMP_KEY_KEY); getPreferenceStore().setValue(Constants.SHOWRECORDDIALOG_KEY, m_showDialog.getSelection()); storeTriggerList(); return super.performOk(); } /** * Stores the trigger list in the preferences. */ public void storeTriggerList() { String singleStorage = StringConstants.EMPTY; String[] singleTriggers = m_singleLineTrigger.getValues(); singleStorage = Utils.encodeStringArray(singleTriggers, StringConstants.SEMICOLON); Plugin.getDefault().getPreferenceStore().setValue( Constants.SINGLELINETRIGGER_KEY, singleStorage); String multiStorage = StringConstants.EMPTY; String[] multiTriggers = m_multiLineTrigger.getValues(); multiStorage = Utils.encodeStringArray(multiTriggers, StringConstants.SEMICOLON); Plugin.getDefault().getPreferenceStore().setValue( Constants.MULTILINETRIGGER_KEY, multiStorage); } }