--- /dev/null
+package org.simantics.workbench.internal.dialogs;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.internal.IWorkbenchHelpContextIds;
+import org.eclipse.ui.internal.dialogs.StartupPreferencePage;
+import org.eclipse.ui.internal.ide.IDEInternalPreferences;
+import org.eclipse.ui.internal.ide.IDEWorkbenchMessages;
+import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
+
+/**
+ * Extends the Startup and Shutdown preference page with IDE-specific settings.
+ *
+ * Note: want IDE settings to appear in main Workbench preference page (via subclassing),
+ * however the superclass, StartupPreferencePage, is internal
+ * @since 3.0
+ */
+public class IDEStartupPreferencePage extends StartupPreferencePage implements
+IWorkbenchPreferencePage {
+
+ private Button refreshButton;
+
+ private Button exitPromptButton;
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.preference.PreferencePage
+ */
+ @Override
+ protected Control createContents(Composite parent) {
+
+ PlatformUI.getWorkbench().getHelpSystem().setHelp(parent,
+ IWorkbenchHelpContextIds.STARTUP_PREFERENCE_PAGE);
+
+ Composite composite = createComposite(parent);
+
+ createRefreshWorkspaceOnStartupPref(composite);
+ createExitPromptPref(composite);
+
+ Label space = new Label(composite,SWT.NONE);
+ space.setLayoutData(new GridData());
+
+ createEarlyStartupSelection(composite);
+
+ return composite;
+ }
+
+ /**
+ * The default button has been pressed.
+ */
+ @Override
+ protected void performDefaults() {
+ IPreferenceStore store = getIDEPreferenceStore();
+
+ refreshButton
+ .setSelection(store
+ .getDefaultBoolean(IDEInternalPreferences.REFRESH_WORKSPACE_ON_STARTUP));
+ exitPromptButton
+ .setSelection(store
+ .getDefaultBoolean(IDEInternalPreferences.EXIT_PROMPT_ON_CLOSE_LAST_WINDOW));
+
+ super.performDefaults();
+ }
+
+ /**
+ * The user has pressed Ok. Store/apply this page's values appropriately.
+ */
+ @SuppressWarnings("deprecation")
+ @Override
+ public boolean performOk() {
+ IPreferenceStore store = getIDEPreferenceStore();
+
+ // store the refresh workspace on startup setting
+ store.setValue(IDEInternalPreferences.REFRESH_WORKSPACE_ON_STARTUP,
+ refreshButton.getSelection());
+
+ // store the exit prompt on last window close setting
+ store.setValue(IDEInternalPreferences.EXIT_PROMPT_ON_CLOSE_LAST_WINDOW,
+ exitPromptButton.getSelection());
+
+ IDEWorkbenchPlugin.getDefault().savePluginPreferences();
+
+ return super.performOk();
+ }
+
+ protected void createRefreshWorkspaceOnStartupPref(Composite composite) {
+ refreshButton = new Button(composite, SWT.CHECK);
+ refreshButton.setText(IDEWorkbenchMessages.StartupPreferencePage_refreshButton);
+ refreshButton.setFont(composite.getFont());
+ refreshButton.setSelection(getIDEPreferenceStore().getBoolean(
+ IDEInternalPreferences.REFRESH_WORKSPACE_ON_STARTUP));
+ }
+
+ protected void createExitPromptPref(Composite composite) {
+ exitPromptButton = new Button(composite, SWT.CHECK);
+ exitPromptButton.setText(IDEWorkbenchMessages.StartupPreferencePage_exitPromptButton);
+ exitPromptButton.setFont(composite.getFont());
+ exitPromptButton.setSelection(getIDEPreferenceStore().getBoolean(
+ IDEInternalPreferences.EXIT_PROMPT_ON_CLOSE_LAST_WINDOW));
+ }
+
+ /**
+ * Returns the IDE preference store.
+ */
+ protected IPreferenceStore getIDEPreferenceStore() {
+ return IDEWorkbenchPlugin.getDefault().getPreferenceStore();
+ }
+}