--- /dev/null
+package org.simantics.workbench.internal.dialogs;
+
+import java.io.IOException;
+
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.preference.IPersistentPreferenceStore;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.swt.SWT;
+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;
+import org.simantics.utils.ui.ErrorLogger;
+import org.simantics.workbench.internal.Activator;
+import org.simantics.workbench.internal.Messages;
+import org.simantics.workbench.internal.preferences.SimanticsPreferences;
+
+/**
+ * Generic workbench main preference page.
+ */
+public class SimanticsPreferencePage extends PreferencePage implements
+IWorkbenchPreferencePage {
+
+ private Button showDatabaseControlsButton;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.preference.PreferencePage
+ */
+ protected Control createContents(Composite parent) {
+
+ Composite composite = createComposite(parent);
+
+ createButtons(composite);
+
+ createSpace(composite);
+
+ applyDialogFont(composite);
+
+ return composite;
+ }
+
+ /**
+ * Create the buttons at the top of the preference page.
+ * @param composite
+ */
+ protected void createButtons(Composite composite) {
+ createDatabaseControlPref(composite);
+ }
+
+ /**
+ * Create the widget for the heap status preference.
+ *
+ * @param composite
+ */
+ protected void createDatabaseControlPref(Composite composite) {
+ showDatabaseControlsButton = new Button(composite, SWT.CHECK);
+ showDatabaseControlsButton.setText(Messages.SimanticsPreferencePage_ShowDatabaseControlsButton);
+ showDatabaseControlsButton.setToolTipText(Messages.SimanticsPreferencePage_ShowDatabaseControlsTooltip);
+ showDatabaseControlsButton.setSelection(getPreferenceStore().getBoolean(SimanticsPreferences.SHOW_DATABASE_CONTROLS));
+ }
+
+ /**
+ * Creates the composite which will contain all the preference controls for
+ * this page.
+ *
+ * @param parent
+ * the parent composite
+ * @return the composite for this page
+ */
+ protected Composite createComposite(Composite parent) {
+ Composite composite = new Composite(parent, SWT.NONE);
+ GridLayout layout = new GridLayout();
+ layout.marginWidth = 0;
+ layout.marginHeight = 0;
+ composite.setLayout(layout);
+ composite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL));
+ return composite;
+ }
+
+ /**
+ * Utility method that creates a radio button instance and sets the default
+ * layout data.
+ *
+ * @param parent
+ * the parent for the new button
+ * @param label
+ * the label for the new button
+ * @return the newly-created button
+ */
+ protected static Button createRadioButton(Composite parent, String label) {
+ Button button = new Button(parent, SWT.RADIO | SWT.LEFT);
+ button.setText(label);
+ return button;
+ }
+
+ /**
+ * Utility method that creates a combo box
+ *
+ * @param parent
+ * the parent for the new label
+ * @return the new widget
+ */
+ protected static Combo createCombo(Composite parent) {
+ Combo combo = new Combo(parent, SWT.READ_ONLY);
+ GridData data = new GridData(GridData.FILL_HORIZONTAL);
+ data.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH;
+ combo.setLayoutData(data);
+ return combo;
+ }
+
+ /**
+ * Creates a tab of one horizontal spans.
+ *
+ * @param parent
+ * the parent in which the tab should be created
+ */
+ protected static void createSpace(Composite parent) {
+ Label vfiller = new Label(parent, SWT.LEFT);
+ GridData gridData = new GridData();
+ gridData = new GridData();
+ gridData.horizontalAlignment = GridData.BEGINNING;
+ gridData.grabExcessHorizontalSpace = false;
+ gridData.verticalAlignment = GridData.CENTER;
+ gridData.grabExcessVerticalSpace = false;
+ vfiller.setLayoutData(gridData);
+ }
+
+ /**
+ * Returns preference store that belongs to the our plugin.
+ *
+ * @return the preference store for this plugin
+ */
+ protected IPreferenceStore doGetPreferenceStore() {
+ return Activator.getDefault().getPreferenceStore();
+ }
+
+ /**
+ * @see IWorkbenchPreferencePage
+ */
+ public void init(IWorkbench aWorkbench) {
+ }
+
+ /**
+ * The default button has been pressed.
+ */
+ protected void performDefaults() {
+ IPreferenceStore store = getPreferenceStore();
+ boolean showDatabaseControls = store.getDefaultBoolean(SimanticsPreferences.SHOW_DATABASE_CONTROLS);
+ showDatabaseControlsButton.setSelection(showDatabaseControls);
+ super.performDefaults();
+ }
+
+ /**
+ * The user has pressed Ok. Store/apply this page's values appropriately.
+ */
+ public boolean performOk() {
+ IPreferenceStore store = getPreferenceStore();
+ store.setValue(SimanticsPreferences.SHOW_DATABASE_CONTROLS, showDatabaseControlsButton.getSelection());
+ if (store instanceof IPersistentPreferenceStore) {
+ try {
+ ((IPersistentPreferenceStore) store).save();
+ } catch (IOException e) {
+ ErrorLogger.defaultLogError(e);
+ }
+ }
+ return true;
+ }
+
+}