blob: df59a1ff1e28c7f08834db48745760f9642aa5d0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2009 IBM Corporation and others.
* 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.ui.internal.dialogs;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Locale;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.window.Window;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.accessibility.AccessibleAdapter;
import org.eclipse.swt.accessibility.AccessibleEvent;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
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.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferenceConstants;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.IPreferenceConstants;
import org.eclipse.ui.internal.IWorkbenchConstants;
import org.eclipse.ui.internal.IWorkbenchHelpContextIds;
import org.eclipse.ui.internal.WorkbenchMessages;
import org.eclipse.ui.internal.WorkbenchPlugin;
import org.eclipse.ui.internal.registry.IWorkbenchRegistryConstants;
import org.eclipse.ui.internal.themes.IThemeDescriptor;
import org.eclipse.ui.internal.util.PrefUtil;
import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer;
import org.eclipse.ui.progress.UIJob;
import org.eclipse.ui.themes.ITheme;
import org.eclipse.ui.themes.IThemeManager;
import com.ibm.icu.text.Collator;
/**
* The ViewsPreferencePage is the page used to set preferences for the
* appearance of the workbench. Originally this applied only to views but now
* applies to the overall appearance, hence the name.
*/
public class ViewsPreferencePage extends PreferencePage implements
IWorkbenchPreferencePage {
private Button showTextOnPerspectiveBar;
/*
* change the tab style of the workbench
*/
private Button showTraditionalStyleTabs;
private Button enableAnimations;
private Button useColoredLabels;
private Button editorTopButton;
private Button editorBottomButton;
private Button viewTopButton;
private Button viewBottomButton;
private Button perspLeftButton;
private Button perspTopLeftButton;
private Button perspTopRightButton;
static final String EDITORS_TITLE = WorkbenchMessages.ViewsPreference_editors;
private static final String EDITORS_TOP_TITLE = WorkbenchMessages.ViewsPreference_editors_top;
private static final String EDITORS_BOTTOM_TITLE = WorkbenchMessages.ViewsPreference_editors_bottom;
private static final String VIEWS_TITLE = WorkbenchMessages.ViewsPreference_views;
private static final String VIEWS_TOP_TITLE = WorkbenchMessages.ViewsPreference_views_top;
private static final String VIEWS_BOTTOM_TITLE = WorkbenchMessages.ViewsPreference_views_bottom;
private static final String PERSP_TITLE = WorkbenchMessages.ViewsPreference_perspectiveBar;
private static final String PERSP_LEFT_TITLE = WorkbenchMessages.ViewsPreference_perspectiveBar_left;
private static final String PERSP_TOP_LEFT_TITLE = WorkbenchMessages.ViewsPreference_perspectiveBar_topLeft;
private static final String PERSP_TOP_RIGHT_TITLE = WorkbenchMessages.ViewsPreference_perspectiveBar_topRight;
// These constants aren't my favourite idea, but to get this preference done
// for M9... A better solution might be to have the presentation factory set
// its dependant preference defaults on startup. I've filed bug 63346 to do
// something about this area.
private static final String R21PRESENTATION_ID = "org.eclipse.ui.internal.r21presentationFactory"; //$NON-NLS-1$
private static final String DEFAULT_PRESENTATION_ID = IWorkbenchConstants.DEFAULT_PRESENTATION_ID;
private static final String R30_PRESENTATION_ID = "org.eclipse.ui.presentations.r30"; //$NON-NLS-1$
private static final String INITIAL_VAL = new String();
private static final int INITIAL_LOC_INT = -1;
// remembers whether the hidden fastview bar pref needs to be changed on
// OK/Apply
private String fastViewLoc = INITIAL_VAL;
private String showTextOnPerspBar = INITIAL_VAL;
private int editorAlignment;
private boolean editorAlignmentChanged = false;
private int viewAlignment;
private boolean viewAlignmentChanged = false;
private String perspBarLocation;
private Combo themeCombo;
private Combo presentationCombo;
private IConfigurationElement[] presentationFactories;
private String currentPresentationFactoryId;
private Button overridePresButton;
private IPropertyChangeListener overrideListener;
private boolean restartPosted = false;
private Group editorTabGroup;
private Group viewTabGroup;
private Group perspBarTabGroup;
private Text themeDescriptionText;
/**
* Create a composite that for creating the tab toggle buttons.
*
* @param composite
* Composite
* @param title
* String
*/
private Group createButtonGroup(Composite composite, String title) {
Group buttonComposite = new Group(composite, SWT.NONE);
buttonComposite.setText(title);
FormLayout layout = new FormLayout();
layout.marginWidth = 5; // same as GridData default
layout.marginHeight = 5; // same as GridData default
buttonComposite.setLayout(layout);
buttonComposite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true,
false));
return buttonComposite;
}
/**
* Creates and returns the SWT control for the customized body of this
* preference page under the given parent composite.
* <p>
* This framework method must be implemented by concrete subclasses.
* </p>
*
* @param parent
* the parent composite
* @return Control the new control
*/
protected Control createContents(Composite parent) {
initializeDialogUnits(parent);
PlatformUI.getWorkbench().getHelpSystem().setHelp(parent,
IWorkbenchHelpContextIds.VIEWS_PREFERENCE_PAGE);
IPreferenceStore apiStore = PrefUtil.getAPIPreferenceStore();
editorAlignment = apiStore
.getInt(IWorkbenchPreferenceConstants.EDITOR_TAB_POSITION);
viewAlignment = apiStore
.getInt(IWorkbenchPreferenceConstants.VIEW_TAB_POSITION);
perspBarLocation = apiStore
.getString(IWorkbenchPreferenceConstants.DOCK_PERSPECTIVE_BAR);
Composite composite = new Composite(parent, SWT.NONE);
composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
GridLayout layout = new GridLayout();
layout.marginWidth = 0;
layout.marginHeight = 0;
layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
composite.setLayout(layout);
createPresentationCombo(composite);
createPresentationOverride(composite);
createEditorTabButtonGroup(composite);
createViewTabButtonGroup(composite);
createPerspBarTabButtonGroup(composite);
createShowTextOnPerspectiveBarPref(composite);
createThemeCombo(composite);
createThemeDescriptionText(composite);
createShowTraditionalStyleTabsPref(composite);
createEnableAnimationsPref(composite);
createColoredLabelsPref(composite);
updateOverride();
hookOverrideListener();
applyDialogFont(composite);
return composite;
}
private void createColoredLabelsPref(Composite composite) {
IPreferenceStore apiStore = PrefUtil.getAPIPreferenceStore();
useColoredLabels = createCheckButton(
composite,
WorkbenchMessages.ViewsPreference_useColoredLabels,
apiStore
.getBoolean(IWorkbenchPreferenceConstants.USE_COLORED_LABELS));
}
private void createThemeCombo(Composite composite) {
new Label(composite, SWT.NONE)
.setText(WorkbenchMessages.ViewsPreference_currentTheme);
themeCombo = new Combo(composite, SWT.READ_ONLY);
themeCombo
.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
themeCombo.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
refreshThemeDescriptionText();
}
});
refreshThemeCombo(PlatformUI.getWorkbench().getThemeManager()
.getCurrentTheme().getId());
}
/**
* Create the text box that will contain the current theme description text
* (if any).
*
* @param parent
* the parent <code>Composite</code>.
*/
private void createThemeDescriptionText(Composite parent) {
new Label(parent, SWT.NONE)
.setText(WorkbenchMessages.ViewsPreference_currentThemeDescription);
themeDescriptionText = new Text(parent, SWT.H_SCROLL | SWT.V_SCROLL
| SWT.READ_ONLY | SWT.BORDER | SWT.WRAP);
GridData layoutData = new GridData(SWT.FILL, SWT.FILL, true, true);
// give a height hint that'll show at least two lines (and let the
// scroll bars draw nicely if necessary)
GC gc = new GC(parent);
layoutData.heightHint = Dialog.convertHeightInCharsToPixels(gc
.getFontMetrics(), 2);
gc.dispose();
themeDescriptionText.setLayoutData(layoutData);
refreshThemeDescriptionText();
}
private void refreshThemeDescriptionText() {
String description = null;
int idx = themeCombo.getSelectionIndex();
// idx == 0 is "Default" which has no description
if (idx > 0) {
IThemeDescriptor theme = WorkbenchPlugin.getDefault()
.getThemeRegistry().getThemes()[idx - 1];
description = theme.getDescription();
}
if (description == null) {
description = ""; //$NON-NLS-1$
}
themeDescriptionText.setText(description);
}
private Button createCheckButton(Composite composite, String text,
boolean selection) {
Button button = new Button(composite, SWT.CHECK);
button.setText(text);
button.setSelection(selection);
return button;
}
private void createPresentationOverride(Composite parent) {
IPreferenceStore store = getPreferenceStore();
boolean override = store
.getBoolean(IPreferenceConstants.OVERRIDE_PRESENTATION);
// workaround to catch the case where the show text value was changed
// outside of this page
// turn off text on persp bar
boolean showText = PrefUtil.getAPIPreferenceStore().getBoolean(
IWorkbenchPreferenceConstants.SHOW_TEXT_ON_PERSPECTIVE_BAR);
if (showText && isR21(currentPresentationFactoryId) || !showText
&& isR30(currentPresentationFactoryId)) {
if (!override) {
store
.setValue(IPreferenceConstants.OVERRIDE_PRESENTATION,
true);
override = true;
}
}
// workaround to catch the case where the perspective switcher location
// was changed outside of this page
// turn off text on persp bar
String barLocation = PrefUtil.getAPIPreferenceStore().getString(
IWorkbenchPreferenceConstants.DOCK_PERSPECTIVE_BAR);
if (!barLocation.equals(IWorkbenchPreferenceConstants.LEFT)
&& isR21(currentPresentationFactoryId)
|| !barLocation.equals(IWorkbenchPreferenceConstants.TOP_RIGHT)
&& isR30(currentPresentationFactoryId)) {
if (!override) {
store
.setValue(IPreferenceConstants.OVERRIDE_PRESENTATION,
true);
override = true;
}
}
overridePresButton = createCheckButton(parent,
WorkbenchMessages.ViewsPreference_override, override);
overridePresButton.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
updateOverrideState(overridePresButton.getSelection());
}
public void widgetDefaultSelected(SelectionEvent e) {
updateOverrideState(overridePresButton.getSelection());
}
});
}
private void updateOverrideState(boolean override) {
IPreferenceStore store = getPreferenceStore();
if (store.getBoolean(IPreferenceConstants.OVERRIDE_PRESENTATION) != override) {
store
.setValue(IPreferenceConstants.OVERRIDE_PRESENTATION,
override);
}
// as we are no longer overriding the prefs should match the selected
// presentation
if (!override)
setPresentationPrefs(getSelectedPresentationID());
}
private void createPresentationCombo(Composite parent) {
new Label(parent, SWT.NONE)
.setText(WorkbenchMessages.ViewsPreference_currentPresentation);
presentationCombo = new Combo(parent, SWT.READ_ONLY);
presentationCombo.setLayoutData(new GridData(SWT.FILL, SWT.CENTER,
true, false));
presentationCombo.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
updateSettings();
}
public void widgetDefaultSelected(SelectionEvent e) {
updateSettings();
}
private void updateSettings() {
if (!overridePresButton.getSelection()) {
setPresentationPrefs(getSelectedPresentationID());
}
}
});
refreshPresentationCombo();
setPresentationSelection();
}
/**
* Set the two supplied controls to be beside each other.
*/
private void attachControls(Control leftControl, Control rightControl) {
FormData leftData = new FormData();
leftData.left = new FormAttachment(0, 0);
FormData rightData = new FormData();
rightData.left = new FormAttachment(
leftControl,
convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING));
leftControl.setLayoutData(leftData);
rightControl.setLayoutData(rightData);
}
/**
* Create a composite that contains buttons for selecting tab position for
* the edit selection.
*
* @param composite
* Composite
*/
private void createEditorTabButtonGroup(Composite composite) {
editorTabGroup = createButtonGroup(composite, EDITORS_TITLE);
editorTopButton = new Button(editorTabGroup, SWT.RADIO);
editorTopButton.setText(EDITORS_TOP_TITLE);
editorTopButton.setSelection(editorAlignment == SWT.TOP);
editorTopButton.getAccessible().addAccessibleListener(
new AccessibleAdapter() {
public void getName(AccessibleEvent e) {
e.result = EDITORS_TITLE;
}
});
editorBottomButton = new Button(editorTabGroup, SWT.RADIO);
editorBottomButton.setText(EDITORS_BOTTOM_TITLE);
editorBottomButton.setSelection(editorAlignment == SWT.BOTTOM);
SelectionListener sel = new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
if (e.widget.equals(editorTopButton)) {
if (editorAlignment != SWT.TOP) {
editorAlignment = SWT.TOP;
editorAlignmentChanged = true;
}
} else if (e.widget.equals(editorBottomButton)) {
if (editorAlignment != SWT.BOTTOM) {
editorAlignment = SWT.BOTTOM;
editorAlignmentChanged = true;
}
}
}
};
editorTopButton.addSelectionListener(sel);
editorBottomButton.addSelectionListener(sel);
attachControls(editorTopButton, editorBottomButton);
}
/**
* Create a composite that contains buttons for selecting tab position for
* the view selection.
*
* @param composite
* Composite
*/
private void createViewTabButtonGroup(Composite composite) {
viewTabGroup = createButtonGroup(composite, VIEWS_TITLE);
viewTopButton = new Button(viewTabGroup, SWT.RADIO);
viewTopButton.setText(VIEWS_TOP_TITLE);
viewTopButton.setSelection(this.viewAlignment == SWT.TOP);
viewBottomButton = new Button(viewTabGroup, SWT.RADIO);
viewBottomButton.setText(VIEWS_BOTTOM_TITLE);
viewBottomButton.setSelection(viewAlignment == SWT.BOTTOM);
SelectionListener sel = new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
if (e.widget.equals(viewTopButton)) {
if (viewAlignment != SWT.TOP) {
viewAlignment = SWT.TOP;
viewAlignmentChanged = true;
}
} else if (e.widget.equals(viewBottomButton)) {
if (viewAlignment != SWT.BOTTOM) {
viewAlignment = SWT.BOTTOM;
viewAlignmentChanged = true;
}
}
}
};
viewTopButton.addSelectionListener(sel);
viewBottomButton.addSelectionListener(sel);
attachControls(viewTopButton, viewBottomButton);
}
/**
* Create a composite that contains buttons for selecting perspective
* switcher position.
*
* @param composite
* Composite
*/
private void createPerspBarTabButtonGroup(Composite composite) {
perspBarTabGroup = createButtonGroup(composite, PERSP_TITLE);
perspLeftButton = new Button(perspBarTabGroup, SWT.RADIO);
perspLeftButton.setText(PERSP_LEFT_TITLE);
perspLeftButton.setSelection(IWorkbenchPreferenceConstants.LEFT
.equals(perspBarLocation));
perspLeftButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
perspBarLocation = IWorkbenchPreferenceConstants.LEFT;
}
});
perspTopLeftButton = new Button(perspBarTabGroup, SWT.RADIO);
perspTopLeftButton.setText(PERSP_TOP_LEFT_TITLE);
perspTopLeftButton.setSelection(IWorkbenchPreferenceConstants.TOP_LEFT
.equals(perspBarLocation));
perspTopLeftButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
perspBarLocation = IWorkbenchPreferenceConstants.TOP_LEFT;
}
});
perspTopRightButton = new Button(perspBarTabGroup, SWT.RADIO);
perspTopRightButton.setText(PERSP_TOP_RIGHT_TITLE);
perspTopRightButton
.setSelection(IWorkbenchPreferenceConstants.TOP_RIGHT
.equals(perspBarLocation));
perspTopRightButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
perspBarLocation = IWorkbenchPreferenceConstants.TOP_RIGHT;
}
});
int spacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
FormData leftData = new FormData();
leftData.left = new FormAttachment(0, 0);
FormData topLeftData = new FormData();
topLeftData.left = new FormAttachment(perspLeftButton, spacing);
FormData topRightData = new FormData();
topRightData.left = new FormAttachment(perspTopLeftButton, spacing);
perspLeftButton.setLayoutData(leftData);
perspTopLeftButton.setLayoutData(topLeftData);
perspTopRightButton.setLayoutData(topRightData);
}
/**
* Hook a listener to update the buttons based on an override preference. If
* the preference is false then do not allow editing of these options.
*
*/
private void hookOverrideListener() {
if (overrideListener != null) {
return;
}
IPreferenceStore store = getPreferenceStore();
overrideListener = new IPropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
if (event.getProperty().equals(
IPreferenceConstants.OVERRIDE_PRESENTATION)) {
updateOverride();
}
}
};
store.addPropertyChangeListener(overrideListener);
}
/**
* Dispose resources created by the receiver.
*/
public void dispose() {
super.dispose();
if (overrideListener != null) {
getPreferenceStore().removePropertyChangeListener(overrideListener);
overrideListener = null;
}
}
private void updateOverride() {
boolean override = getPreferenceStore().getBoolean(
IPreferenceConstants.OVERRIDE_PRESENTATION);
editorTabGroup.setEnabled(override);
editorTopButton.setEnabled(override);
editorBottomButton.setEnabled(override);
viewTabGroup.setEnabled(override);
viewTopButton.setEnabled(override);
viewBottomButton.setEnabled(override);
perspBarTabGroup.setEnabled(override);
perspTopLeftButton.setEnabled(override);
perspLeftButton.setEnabled(override);
perspTopRightButton.setEnabled(override);
showTextOnPerspectiveBar.setEnabled(override);
}
private void refreshPresentationCombo() {
// get the active presentation
presentationCombo.removeAll();
refreshPresentationFactories();
for (int i = 0; i < presentationFactories.length; ++i) {
IConfigurationElement el = presentationFactories[i];
String name = el.getAttribute(IWorkbenchConstants.TAG_NAME);
if (!currentPresentationFactoryId.equals(el
.getAttribute(IWorkbenchConstants.TAG_ID))) {
presentationCombo.add(name);
} else {
presentationCombo
.add(NLS
.bind(
WorkbenchMessages.ViewsPreference_currentPresentationFormat,
name));
}
}
}
private void setPresentationSelection() {
for (int i = 0; i < presentationFactories.length; ++i) {
if (currentPresentationFactoryId.equals(presentationFactories[i]
.getAttribute(IWorkbenchConstants.TAG_ID))) {
presentationCombo.select(i);
return;
}
}
// presentationCombo.select(0);
}
/**
* Update this page's list of presentation factories. This should only be
* used when the presentation combo is refreshed, as this array will be used
* to set the selection from the combo.
*/
private void refreshPresentationFactories() {
// update the current selection (used to look for changes on apply)
currentPresentationFactoryId = PrefUtil.getAPIPreferenceStore()
.getString(
IWorkbenchPreferenceConstants.PRESENTATION_FACTORY_ID);
// Workbench.getInstance().getPresentationId();
// update the sorted list of factories
presentationFactories = Platform.getExtensionRegistry()
.getConfigurationElementsFor(PlatformUI.PLUGIN_ID,
IWorkbenchRegistryConstants.PL_PRESENTATION_FACTORIES);
// sort the array by name
Arrays.sort(presentationFactories, new Comparator() {
Collator collator = Collator.getInstance(Locale.getDefault());
public int compare(Object a, Object b) {
IConfigurationElement el1 = (IConfigurationElement) a;
IConfigurationElement el2 = (IConfigurationElement) b;
return collator.compare(el1
.getAttribute(IWorkbenchConstants.TAG_NAME), el2
.getAttribute(IWorkbenchConstants.TAG_NAME));
}
});
}
/**
* Update the preferences associated with the argument presentation factory.
*
* @return boolean
* <code>true<\code> of the presentation has changed and <code>false<\code> otherwise
*/
private boolean updatePresentationPreferences() {
// There are some preference values associated with the R2.1
// presentation that cannot be captured in the presentation
// factory. Perhaps the extension point should contain these
// (a list of attributes?), but for now it is done manually.
if (presentationCombo == null) {
return false;
}
String id = getSelectedPresentationID();
// if it hasn't changed then there's nothing to do
if (id.equals(currentPresentationFactoryId)) {
return false;
}
currentPresentationFactoryId = id;
// apply 2.1 prefs if needed
setPresentationPrefs(id);
// set the new presentation factory id
PrefUtil.getAPIPreferenceStore().putValue(
IWorkbenchPreferenceConstants.PRESENTATION_FACTORY_ID, id);
// a restart is required to update the presentation
return true;
}
private void setPresentationPrefs(String id) {
if (isR21(id)) {
setR21Preferences();
} else if (isR30(id)) {
setR30Preferences();
} else if (isR33(id)) {
setR33Preferences();
}
}
private boolean isR33(String id) {
return DEFAULT_PRESENTATION_ID.equals(id);
}
private boolean isR30(String id) {
return R30_PRESENTATION_ID.equals(id);
}
private boolean isR21(String id) {
return R21PRESENTATION_ID.equals(id);
}
private String getSelectedPresentationID() {
int selection = presentationCombo.getSelectionIndex();
IConfigurationElement element = presentationFactories[selection];
String id = element.getAttribute(IWorkbenchConstants.TAG_ID);
return id;
}
private void setR33Preferences() {
setR30Preferences();
// Turn -on- the new Min/Max behaviour
IPreferenceStore apiStore = PrefUtil.getAPIPreferenceStore();
apiStore.setValue(IWorkbenchPreferenceConstants.ENABLE_NEW_MIN_MAX,
true);
}
private void setR30Preferences() {
IPreferenceStore apiStore = PrefUtil.getAPIPreferenceStore();
// Turn -off- the new min/max behaviour
apiStore.setValue(IWorkbenchPreferenceConstants.ENABLE_NEW_MIN_MAX,
false);
setEditorAlignDefault(apiStore);
setViewAlignDefault(apiStore);
// perspective switcher on the left
perspBarLocation = apiStore
.getDefaultString(IWorkbenchPreferenceConstants.DOCK_PERSPECTIVE_BAR);
perspLeftButton.setSelection(perspBarLocation
.equals(IWorkbenchPreferenceConstants.LEFT));
perspTopLeftButton.setSelection(perspBarLocation
.equals(IWorkbenchPreferenceConstants.TOP_LEFT));
perspTopRightButton.setSelection(perspBarLocation
.equals(IWorkbenchPreferenceConstants.TOP_RIGHT));
// perspective bar should be set to default on OK or Apply
perspBarLocation = INITIAL_VAL;
// turn off text on persp bar
showTextOnPerspectiveBar
.setSelection(apiStore
.getDefaultBoolean(IWorkbenchPreferenceConstants.SHOW_TEXT_ON_PERSPECTIVE_BAR));
// text on perspective bar should be set to default on OK or Apply
showTextOnPerspBar = INITIAL_VAL;
// fast view bar should be set to default on OK or Apply
fastViewLoc = INITIAL_VAL;
}
/**
* Set the view alignment based on apiStore.
* @param apiStore
*/
private void setViewAlignDefault(IPreferenceStore apiStore) {
int oldVal;
// reset the preferences for 3.0 presentation
oldVal = viewAlignment;
viewAlignment = apiStore
.getDefaultInt(IWorkbenchPreferenceConstants.VIEW_TAB_POSITION);
viewTopButton.setSelection(viewAlignment == SWT.TOP);
viewBottomButton.setSelection(viewAlignment == SWT.BOTTOM);
// view tabs should be set to default on OK or Apply
if (oldVal != viewAlignment) {
viewAlignmentChanged = true;
}
viewAlignment = INITIAL_LOC_INT;
}
private void setEditorAlignDefault(IPreferenceStore apiStore) {
// editor tabs on the bottom, really should associate this with the
// presentation
int oldVal = editorAlignment;
editorAlignment = apiStore
.getDefaultInt(IWorkbenchPreferenceConstants.EDITOR_TAB_POSITION);
editorTopButton.setSelection(editorAlignment == SWT.TOP);
editorBottomButton.setSelection(editorAlignment == SWT.BOTTOM);
// editor tabs should be set to default on OK or Apply
if (oldVal != editorAlignment) {
editorAlignmentChanged = true;
}
editorAlignment = INITIAL_LOC_INT;
}
private void setR21Preferences() {
// editor tabs on the bottom, really should associate this with the
// presentation
int oldVal = editorAlignment;
editorAlignment = SWT.TOP;
editorTopButton.setSelection(editorAlignment == SWT.TOP);
editorBottomButton.setSelection(editorAlignment == SWT.BOTTOM);
if (oldVal != editorAlignment) {
editorAlignmentChanged = true;
}
// view tabs on the bottom, really should associate this with the
// presentation
oldVal = viewAlignment;
viewAlignment = SWT.BOTTOM;
viewTopButton.setSelection(viewAlignment == SWT.TOP);
viewBottomButton.setSelection(viewAlignment == SWT.BOTTOM);
if (oldVal != viewAlignment) {
viewAlignmentChanged = true;
}
// perspective switcher on the left, really should associate this with
// the presentation
perspBarLocation = IWorkbenchPreferenceConstants.LEFT;
perspLeftButton.setSelection(perspBarLocation
.equals(IWorkbenchPreferenceConstants.LEFT));
perspTopLeftButton.setSelection(perspBarLocation
.equals(IWorkbenchPreferenceConstants.TOP_LEFT));
perspTopRightButton.setSelection(perspBarLocation
.equals(IWorkbenchPreferenceConstants.TOP_RIGHT));
// turn off text on persp bar, really should associate this with the
// presentation
showTextOnPerspectiveBar.setSelection(false);
showTextOnPerspBar = String.valueOf(false);
// fast view bar on the left (hidden pref, set it directly)
fastViewLoc = IWorkbenchPreferenceConstants.LEFT;
// Turn -off- the new min/max behaviour
IPreferenceStore apiStore = PrefUtil.getAPIPreferenceStore();
apiStore.setValue(IWorkbenchPreferenceConstants.ENABLE_NEW_MIN_MAX,
false);
}
/**
* @param themeToSelect
* the id of the theme to be selected
*/
private void refreshThemeCombo(String themeToSelect) {
themeCombo.removeAll();
ITheme currentTheme = PlatformUI.getWorkbench().getThemeManager()
.getCurrentTheme();
IThemeDescriptor[] descs = WorkbenchPlugin.getDefault()
.getThemeRegistry().getThemes();
String defaultThemeString = PlatformUI.getWorkbench().getThemeManager()
.getTheme(IThemeManager.DEFAULT_THEME).getLabel();
if (currentTheme.getId().equals(IThemeManager.DEFAULT_THEME)) {
defaultThemeString = NLS.bind(
WorkbenchMessages.ViewsPreference_currentThemeFormat,
new Object[] { defaultThemeString });
}
themeCombo.add(defaultThemeString);
String themeString;
int selection = 0;
for (int i = 0; i < descs.length; i++) {
themeString = descs[i].getName();
if (descs[i].getId().equals(currentTheme.getId())) {
themeString = NLS.bind(
WorkbenchMessages.ViewsPreference_currentThemeFormat,
new Object[] { themeString });
}
if (themeToSelect.equals(descs[i].getId())) {
selection = i + 1;
}
themeCombo.add(themeString);
}
themeCombo.select(selection);
}
/**
* Create the button and text that support setting the preference for
* showing text labels on the perspective switching bar.
*/
protected void createShowTextOnPerspectiveBarPref(Composite composite) {
IPreferenceStore apiStore = PrefUtil.getAPIPreferenceStore();
showTextOnPerspectiveBar = createCheckButton(
composite,
WorkbenchMessages.WorkbenchPreference_showTextOnPerspectiveBar,
apiStore
.getBoolean(IWorkbenchPreferenceConstants.SHOW_TEXT_ON_PERSPECTIVE_BAR));
}
/**
* Create the button and text that support setting the preference for
* showing text labels on the perspective switching bar
*/
protected void createShowTraditionalStyleTabsPref(Composite composite) {
IPreferenceStore apiStore = PrefUtil.getAPIPreferenceStore();
showTraditionalStyleTabs = createCheckButton(
composite,
WorkbenchMessages.ViewsPreference_traditionalTabs,
apiStore
.getBoolean(IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS));
}
protected void createEnableAnimationsPref(Composite composite) {
IPreferenceStore apiStore = PrefUtil.getAPIPreferenceStore();
enableAnimations = createCheckButton(
composite,
WorkbenchMessages.ViewsPreference_enableAnimations,
apiStore
.getBoolean(IWorkbenchPreferenceConstants.ENABLE_ANIMATIONS));
}
/**
* Returns preference store that belongs to the our plugin.
*
* @return IPreferenceStore the preference store for this plugin
*/
protected IPreferenceStore doGetPreferenceStore() {
return WorkbenchPlugin.getDefault().getPreferenceStore();
}
/**
* Initializes this preference page for the given workbench.
* <p>
* This method is called automatically as the preference page is being
* created and initialized. Clients must not call this method.
* </p>
*
* @param workbench
* the workbench
*/
public void init(IWorkbench workbench) {
currentPresentationFactoryId = PrefUtil.getAPIPreferenceStore()
.getString(
IWorkbenchPreferenceConstants.PRESENTATION_FACTORY_ID);
}
/**
* The default button has been pressed.
*/
protected void performDefaults() {
IPreferenceStore store = getPreferenceStore();
IPreferenceStore apiStore = PrefUtil.getAPIPreferenceStore();
showTextOnPerspectiveBar
.setSelection(apiStore
.getDefaultBoolean(IWorkbenchPreferenceConstants.SHOW_TEXT_ON_PERSPECTIVE_BAR));
showTraditionalStyleTabs
.setSelection(apiStore
.getDefaultBoolean(IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS));
enableAnimations
.setSelection(apiStore
.getDefaultBoolean(IWorkbenchPreferenceConstants.ENABLE_ANIMATIONS));
useColoredLabels
.setSelection(apiStore
.getDefaultBoolean(IWorkbenchPreferenceConstants.USE_COLORED_LABELS));
String presID = apiStore
.getDefaultString(IWorkbenchPreferenceConstants.PRESENTATION_FACTORY_ID);
currentPresentationFactoryId = presID;
setPresentationSelection();
boolean overridePrefs = store
.getDefaultBoolean(IPreferenceConstants.OVERRIDE_PRESENTATION);
overridePresButton.setSelection(overridePrefs);
updateOverrideState(overridePrefs);
setEditorAlignDefault(apiStore);
setViewAlignDefault(apiStore);
perspBarLocation = apiStore
.getDefaultString(IWorkbenchPreferenceConstants.DOCK_PERSPECTIVE_BAR);
perspLeftButton.setSelection(IWorkbenchPreferenceConstants.LEFT
.equals(perspBarLocation));
perspTopLeftButton.setSelection(IWorkbenchPreferenceConstants.TOP_LEFT
.equals(perspBarLocation));
perspTopRightButton
.setSelection(IWorkbenchPreferenceConstants.TOP_RIGHT
.equals(perspBarLocation));
refreshThemeCombo(PlatformUI.getWorkbench().getThemeManager().getTheme(
IThemeManager.DEFAULT_THEME).getId());
refreshThemeDescriptionText();
WorkbenchPlugin.getDefault().savePluginPreferences();
super.performDefaults();
}
/**
* The user has pressed Ok. Store/apply this page's values appropriately.
*/
public boolean performOk() {
IPreferenceStore store = getPreferenceStore();
IPreferenceStore apiStore = PrefUtil.getAPIPreferenceStore();
boolean override = store
.getBoolean(IPreferenceConstants.OVERRIDE_PRESENTATION);
// apply the presentation selection first since it might change some of
// the other values
boolean restart = updatePresentationPreferences();
if (showTextOnPerspBar.equals(INITIAL_VAL) && !override) {
apiStore
.setToDefault(IWorkbenchPreferenceConstants.SHOW_TEXT_ON_PERSPECTIVE_BAR);
} else {
apiStore.setValue(
IWorkbenchPreferenceConstants.SHOW_TEXT_ON_PERSPECTIVE_BAR,
showTextOnPerspectiveBar.getSelection());
}
if (editorAlignmentChanged) {
if (editorAlignment == INITIAL_LOC_INT) {
apiStore
.setToDefault(IWorkbenchPreferenceConstants.EDITOR_TAB_POSITION);
} else if (!override) {
// store the editor tab value to setting
apiStore.setValue(
IWorkbenchPreferenceConstants.EDITOR_TAB_POSITION,
editorAlignment);
} else {
// store the editor tab value to setting
apiStore.setValue(
IWorkbenchPreferenceConstants.EDITOR_TAB_POSITION,
editorAlignment);
}
restart = true;
}
if (viewAlignmentChanged) {
if (viewAlignment == INITIAL_LOC_INT) {
apiStore
.setToDefault(IWorkbenchPreferenceConstants.VIEW_TAB_POSITION);
} else if (!override) {
// store the view tab value to setting
apiStore.setValue(IWorkbenchPreferenceConstants.VIEW_TAB_POSITION,
viewAlignment);
} else {
// store the view tab value to setting
apiStore.setValue(IWorkbenchPreferenceConstants.VIEW_TAB_POSITION,
viewAlignment);
}
restart = true;
}
if (perspBarLocation.equals(INITIAL_VAL)) {
apiStore
.setToDefault(IWorkbenchPreferenceConstants.DOCK_PERSPECTIVE_BAR);
} else if (!override) {
// store the perspective bar text enabled setting
apiStore.setValue(
IWorkbenchPreferenceConstants.DOCK_PERSPECTIVE_BAR,
perspBarLocation);
} else {
// store the perspective bar text enabled setting
apiStore.setValue(
IWorkbenchPreferenceConstants.DOCK_PERSPECTIVE_BAR,
perspBarLocation);
}
if (fastViewLoc.equals(INITIAL_VAL)) {
apiStore
.setToDefault(IWorkbenchPreferenceConstants.INITIAL_FAST_VIEW_BAR_LOCATION);
} else {
apiStore
.setValue(
IWorkbenchPreferenceConstants.INITIAL_FAST_VIEW_BAR_LOCATION,
fastViewLoc);
}
int idx = themeCombo.getSelectionIndex();
if (idx <= 0) {
PlatformUI.getWorkbench().getThemeManager().setCurrentTheme(
IThemeManager.DEFAULT_THEME);
refreshThemeCombo(IThemeManager.DEFAULT_THEME);
} else {
IThemeDescriptor applyTheme = WorkbenchPlugin.getDefault()
.getThemeRegistry().getThemes()[idx - 1];
PlatformUI.getWorkbench().getThemeManager().setCurrentTheme(
applyTheme.getId());
refreshThemeCombo(applyTheme.getId());
}
refreshThemeDescriptionText();
apiStore.setValue(
IWorkbenchPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS,
showTraditionalStyleTabs.getSelection());
apiStore.setValue(IWorkbenchPreferenceConstants.ENABLE_ANIMATIONS,
enableAnimations.getSelection());
apiStore.setValue(IWorkbenchPreferenceConstants.USE_COLORED_LABELS,
useColoredLabels.getSelection());
PrefUtil.savePrefs();
// we can get here through performApply, in that case only post one
// restart
if (restart && !restartPosted) {
if (getContainer() instanceof IWorkbenchPreferenceContainer) {
IWorkbenchPreferenceContainer container = (IWorkbenchPreferenceContainer) getContainer();
UIJob job = new UIJob(
WorkbenchMessages.ViewsPreference_restartRequestJobName) {
public IStatus runInUIThread(IProgressMonitor monitor) {
// make sure they really want to do this
int really = new MessageDialog(
null,
WorkbenchMessages.ViewsPreference_presentationConfirm_title,
null,
WorkbenchMessages.ViewsPreference_presentationConfirm_message,
MessageDialog.QUESTION,
new String[] {
WorkbenchMessages.ViewsPreference_presentationConfirm_yes,
WorkbenchMessages.ViewsPreference_presentationConfirm_no },
1).open();
if (really == Window.OK) {
PlatformUI.getWorkbench().restart();
}
return Status.OK_STATUS;
}
};
job.setSystem(true);
container.registerUpdateJob(job);
restartPosted = true;
}
}
return true;
}
}