/*******************************************************************************
* 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 org.eclipse.jface.preference.IPreferenceStore;
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.rcp.Plugin;
import org.eclipse.jubula.client.ui.rcp.i18n.Messages;
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.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Spinner;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
/**
* @author BREDEX GmbH
* @created 10.01.2005
*/
public class EditorPreferencePage extends PreferencePage
implements IWorkbenchPreferencePage {
/** 1 column */
private static final int NUM_COLUMNS = 1;
/** 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;
/** button for insert node in testCaseEditor */
private Button m_nodeInsertButton;
/** button for add node in testCaseEditor */
private Button m_nodeAddButton;
/** button for counters */
private Button m_showCountersButton;
/** button for save reminder enable */
private Button m_reminderEnableButton;
/** spinner for save reminder interval */
private Spinner m_reminderIntervalSpinner;
/** The preferece store to hold the existing preference values. */
private IPreferenceStore m_store = Plugin.getDefault().getPreferenceStore();
/**
* Default Constructor
*
*/
public EditorPreferencePage() { //
setPreferenceStore(Plugin.getDefault().getPreferenceStore());
}
/**
* Implement the user interface for the preference page. Returns a control
* that should be used as the main control for the page.
* <p>
* User interface defined here supports the definition of preference
* settings used by the management logic.
* </p>
*
* {@inheritDoc}
*/
protected Control createContents(Composite parent) {
/** Add layer to parent widget */
Composite composite = new Composite(parent, SWT.NONE);
/** Define layout rules for widget placement */
compositeGridData(composite);
createShowCountersButton(composite);
createInsertNodeAfterSelectedNodeButton(composite);
createSaveReminderSettings(composite);
updateWidgets();
/** return the widget used as the base for the user interface */
Plugin.getHelpSystem().setHelp(parent, ContextHelpIds.EDITOR_PREF_PAGE);
return composite;
}
/**
* @param composite
* the parent composite
*/
private void createShowCountersButton(Composite composite) {
m_showCountersButton = new Button(composite, SWT.CHECK);
m_showCountersButton
.setText(Messages.EditorPreferencePageShowCountersCheckBox);
m_showCountersButton.setSelection(Plugin.getDefault()
.getPreferenceStore().getBoolean(Constants.SHOWCOUNTERS_KEY));
}
/**
* @param composite
* the parent composite
*/
private void createInsertNodeAfterSelectedNodeButton(Composite composite) {
Group group = new Group(composite, SWT.NONE);
group.setText(Messages.PrefPageBasicNodeInsertionGroup);
RowLayout layout = new RowLayout();
layout.type = SWT.VERTICAL;
group.setLayout(layout);
GridData layoutData = new GridData(GridData.FILL_HORIZONTAL);
layoutData.grabExcessHorizontalSpace = true;
group.setLayoutData(layoutData);
Label label = new Label(group, SWT.NONE);
label.setText(Messages.EditorPreferencePageAddPositionText);
new Label(group, SWT.NONE);
m_nodeAddButton = new Button(group, SWT.RADIO);
m_nodeAddButton.setText(Messages.PrefPageBasicAddNewNode);
m_nodeAddButton
.setSelection(!m_store.getBoolean(Constants.NODE_INSERT_KEY));
m_nodeInsertButton = new Button(group, SWT.RADIO);
m_nodeInsertButton.setText(Messages.PrefPageBasicInsertNewNode);
m_nodeInsertButton
.setSelection(m_store.getBoolean(Constants.NODE_INSERT_KEY));
}
/**
* @param composite
* the parent composite
*/
private void createSaveReminderSettings(Composite composite) {
Group group = new Group(composite, SWT.NONE);
group.setText(Messages.PrefPageBasicSaveReminderGroup);
RowLayout layout = new RowLayout();
layout.type = SWT.VERTICAL;
group.setLayout(layout);
GridData layoutData = new GridData(GridData.FILL_HORIZONTAL);
layoutData.grabExcessHorizontalSpace = true;
group.setLayoutData(layoutData);
Label label = new Label(group, SWT.NONE);
label.setText(Messages.EditorPreferencePageSaveReminderText);
new Label(group, SWT.NONE);
m_reminderEnableButton = new Button(group, SWT.CHECK);
m_reminderEnableButton
.setText(Messages.PrefPageBasicEnableSaveReminder);
m_reminderEnableButton.setSelection(
m_store.getBoolean(Constants.SAVE_REMINDER_ENABLE_KEY));
m_reminderEnableButton.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
updateWidgets();
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
// nothing
}
});
Composite c = new Composite(group, SWT.NONE);
c.setLayout(new RowLayout());
Label l1 = new Label(c, SWT.NONE);
l1.setText(Messages.PrefPageBasicReminderInterval1);
m_reminderIntervalSpinner = new Spinner(c, SWT.BORDER);
m_reminderIntervalSpinner.setMinimum(1);
m_reminderIntervalSpinner.setMaximum(60);
m_reminderIntervalSpinner.setSelection(
m_store.getInt(Constants.SAVE_REMINDER_INTERVAL_KEY));
m_reminderIntervalSpinner.setIncrement(1);
Label l2 = new Label(c, SWT.NONE);
l2.setText(Messages.PrefPageBasicReminderInterval2);
}
/**
* Update the widgets, for example enable or disable the interval spinner.
*/
private void updateWidgets() {
m_reminderIntervalSpinner
.setEnabled(m_reminderEnableButton.getSelection());
}
/**
* @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;
composite.setLayoutData(compositeData);
}
/**
* Initializes the preference page
*
* {@inheritDoc}
*/
public void init(IWorkbench workbench) {
setDescription(Messages.EditorPreferencePageDescription);
}
/**
* 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() {
m_showCountersButton.setSelection(
m_store.getDefaultBoolean(Constants.SHOWCOUNTERS_KEY));
m_nodeInsertButton.setSelection(
m_store.getDefaultBoolean(Constants.NODE_INSERT_KEY));
m_nodeAddButton.setSelection(
!m_store.getDefaultBoolean(Constants.NODE_INSERT_KEY));
m_reminderEnableButton.setSelection(
m_store.getDefaultBoolean(Constants.SAVE_REMINDER_ENABLE_KEY));
m_reminderIntervalSpinner.setSelection(
m_store.getDefaultInt(Constants.SAVE_REMINDER_INTERVAL_KEY));
updateWidgets();
}
/**
* Method declared on IPreferencePage.
*
* @return performOK
*/
public boolean performOk() {
m_store.setValue(Constants.SHOWCOUNTERS_KEY,
m_showCountersButton.getSelection());
m_store.setValue(Constants.NODE_INSERT_KEY,
m_nodeInsertButton.getSelection());
m_store.setValue(Constants.SAVE_REMINDER_ENABLE_KEY,
m_reminderEnableButton.getSelection());
m_store.setValue(Constants.SAVE_REMINDER_INTERVAL_KEY,
m_reminderIntervalSpinner.getSelection());
return super.performOk();
}
/**
* Can be used to implement any special processing, such as notification, if
* required. Logic to actually change preference values should be in the
* <code>performOk</code> method as that method will also be triggered when
* the Apply push button is selected.
* <p>
* If others are interested in tracking preference changes they can use the
* <code>addPropertyChangeListener</code> method available for for an
* <code>IPreferenceStore</code> or <code>Preferences</code>.
* </p>
*/
protected void performApply() {
super.performApply();
}
}