de.loskutov.eclipseskins.preferences.SkinsPreferencePage.java Source code

Java tutorial

Introduction

Here is the source code for de.loskutov.eclipseskins.preferences.SkinsPreferencePage.java

Source

/*******************************************************************************
 * Copyright (c) 2005 Andrei Loskutov.
 * 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:
 *    Andrei Loskutov - refactoring, themes and full presentation feature set
 *    Fabio Zadrozny - option for esc not to close detached windows
 *******************************************************************************/
package de.loskutov.eclipseskins.preferences;

import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
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.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.WorkbenchPage;
import org.eclipse.ui.themes.ITheme;

import de.loskutov.eclipseskins.PresentationPlugin;
import de.loskutov.eclipseskins.ThemeConstants;
import de.loskutov.eclipseskins.ui.UIUtils;

/**
 * @author Andrei
 */
public class SkinsPreferencePage extends PreferencePage implements IWorkbenchPreferencePage, SelectionListener {

    private static final class IntModifyListener implements ModifyListener {
        private final int defaultValue;
        private final Text text;
        private final int minValue;
        private final int maxValue;

        IntModifyListener(Text text, int defaultValue, int minValue, int maxValue) {
            super();
            this.text = text;
            this.defaultValue = defaultValue;
            this.minValue = minValue;
            this.maxValue = maxValue;
        }

        public void modifyText(ModifyEvent e) {
            String number = ((Text) e.widget).getText();
            if (number != null) {
                number = number.trim();
            }
            try {
                int value = Integer.parseInt(number);
                if (value < minValue || value > maxValue) {
                    text.setText("" + defaultValue);
                }
            } catch (NumberFormatException ex) {
                // ignore
            }
        }
    }

    private static final String TOOLTIP_SUFFIX = "Tip"; //$NON-NLS-1$
    private static final int DEFAULT_MAX_TAB_WIDTH = 16;
    private static final int DEFAULT_MOVE_TAB_AMOUNT = 9;
    private static final int DEFAULT_BORDER_SIZE = 1;
    private static final int DEFAULT_PADDING_X = 2;
    private static final int DEFAULT_PADDING_Y = 2;
    private static final int DEFAULT_TOOLBAR_FIX = 0;

    protected Text tabWidthText;
    protected Text moveTabAmount;
    protected Text borderSize;
    protected Text tabPaddingX;
    protected Text tabPaddingY;
    protected Button useMaxTabWidth;
    protected Button showFileExt;
    protected Button showViewIcon;
    protected Button hideViewTitle;
    protected Button showEditorIcon;
    protected Button cropInTheMiddle;
    protected Button minimizeToCoolbar;
    protected Button closeTabOnMiddleClick;
    protected Button useFastTabSwitch;
    protected Button copyFullTabTitle;
    protected ITheme lastUsedTheme;
    private TabFolder tabFolder;
    private Button alwaysSortEditorTabs;
    private Button alwaysSortViewTabs;
    private Button escClosesDetachedViews;
    private Text gtkToolbarFix;

    public SkinsPreferencePage() {
        super();
        setPreferenceStore(PresentationPlugin.getDefault().getPreferenceStore());
    }

    public void dispose() {
        if (tabFolder != null) {
            tabFolder.dispose();
            tabFolder = null;
        }
        lastUsedTheme = null;

        super.dispose();
    }

    /*
     * @see PreferencePage#createContents(Composite)
     */
    protected Control createContents(Composite parent) {

        tabFolder = new TabFolder(parent, SWT.TOP);

        createTabUI();
        createTabMisc();
        return tabFolder;
    }

    private void createTabUI() {
        Composite defPanel = createContainer(tabFolder);

        TabItem tabUI = new TabItem(tabFolder, SWT.NONE);
        tabUI.setText("UI settings");
        tabUI.setControl(defPanel);

        //-------------------------------------------------------------------------------

        lastUsedTheme = PlatformUI.getWorkbench().getThemeManager().getCurrentTheme();
        Group userPrefsComposite = new Group(defPanel, SWT.SHADOW_ETCHED_IN);
        GridLayout layout = new GridLayout();
        userPrefsComposite.setLayout(layout);
        GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
        userPrefsComposite.setLayoutData(gridData);

        userPrefsComposite.setText(PresentationPlugin.getResourceString("customUserPrefs")); //$NON-NLS-1$

        IPreferenceStore prefs = getPreferenceStore();
        minimizeToCoolbar = createLabeledCheck("minimizeToCoolbar", //$NON-NLS-1$
                prefs.getBoolean(ThemeConstants.ENABLE_NEW_MIN_MAX), userPrefsComposite);

        closeTabOnMiddleClick = createLabeledCheck("closeTabOnMiddleClick", //$NON-NLS-1$
                prefs.getBoolean(ThemeConstants.CLOSE_TAB_ON_MIDDLE_CLICK), userPrefsComposite);
        useFastTabSwitch = createLabeledCheck("useFastTabSwitch", //$NON-NLS-1$
                prefs.getBoolean(ThemeConstants.USE_FAST_TAB_SWITCH), userPrefsComposite);

        copyFullTabTitle = createLabeledCheck("copyFullTabTitle", //$NON-NLS-1$
                prefs.getBoolean(ThemeConstants.COPY_FULL_TAB_TITLE), userPrefsComposite);

        alwaysSortEditorTabs = createLabeledCheck("alwaysSortEditorTabs", //$NON-NLS-1$
                prefs.getBoolean(ThemeConstants.ALWAYS_SORT_EDITOR_TABS), userPrefsComposite);

        alwaysSortViewTabs = createLabeledCheck("alwaysSortViewTabs", //$NON-NLS-1$
                prefs.getBoolean(ThemeConstants.ALWAYS_SORT_VIEW_TABS), userPrefsComposite);

        escClosesDetachedViews = createLabeledCheck("escClosesDetachedViews", //$NON-NLS-1$
                prefs.getBoolean(ThemeConstants.ESC_CLOSES_DETACHED_VIEWS), userPrefsComposite);

        Group wrappedTabsComposite = new Group(defPanel, SWT.SHADOW_ETCHED_IN);
        layout = new GridLayout();
        wrappedTabsComposite.setLayout(layout);
        gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL);
        wrappedTabsComposite.setLayoutData(gridData);

        wrappedTabsComposite.setText(PresentationPlugin.getResourceString("customThemePrefs")); //$NON-NLS-1$

        tabWidthText = createLabeledText("maxTabWidth", //$NON-NLS-1$
                "" + getMergedIntPreference(ThemeConstants.MAX_TAB_WIDTH, lastUsedTheme), wrappedTabsComposite,
                false);
        tabWidthText.setTextLimit(2);

        useMaxTabWidth = createLabeledCheck("useMaxTabWidth", //$NON-NLS-1$
                getMergedBooleanPreference(ThemeConstants.USE_MAX_TAB_WIDTH, lastUsedTheme), wrappedTabsComposite);

        showFileExt = createLabeledCheck("showFileExtensions", //$NON-NLS-1$
                getMergedBooleanPreference(ThemeConstants.SHOW_FILE_EXTENSIONS, lastUsedTheme),
                wrappedTabsComposite);

        showViewIcon = createLabeledCheck("showViewIcon", //$NON-NLS-1$
                getMergedBooleanPreference(ThemeConstants.SHOW_VIEW_ICON, lastUsedTheme), wrappedTabsComposite);

        hideViewTitle = createLabeledCheck("hideViewTitle", //$NON-NLS-1$
                getMergedBooleanPreference(ThemeConstants.HIDE_VIEW_TITLE, lastUsedTheme), wrappedTabsComposite);

        SelectionAdapter selectionAdapter = new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                if (hideViewTitle.getSelection() && !showViewIcon.getSelection()) {
                    showViewIcon.setSelection(true);
                }
            }
        };

        hideViewTitle.addSelectionListener(selectionAdapter);
        showViewIcon.addSelectionListener(selectionAdapter);

        showEditorIcon = createLabeledCheck("showEditorIcon", //$NON-NLS-1$
                getMergedBooleanPreference(ThemeConstants.SHOW_EDITOR_ICON, lastUsedTheme), wrappedTabsComposite);

        cropInTheMiddle = createLabeledCheck("cropInTheMiddle", //$NON-NLS-1$
                getMergedBooleanPreference(ThemeConstants.CROP_IN_THE_MIDDLE, lastUsedTheme), wrappedTabsComposite);

        moveTabAmount = createLabeledText("tabMoveAmount", //$NON-NLS-1$
                "" + getMergedIntPreference(ThemeConstants.MOVE_TAB_AMOUNT, lastUsedTheme), wrappedTabsComposite,
                false);
        moveTabAmount.setTextLimit(2);

        borderSize = createLabeledText("borderSize", //$NON-NLS-1$
                "" + getMergedIntPreference(ThemeConstants.BORDER_SIZE, lastUsedTheme), wrappedTabsComposite,
                false);
        borderSize.setTextLimit(2);

        tabPaddingX = createLabeledText("tabPaddingX", //$NON-NLS-1$
                "" + getMergedIntPreference(ThemeConstants.TAB_PADDING_X, lastUsedTheme), wrappedTabsComposite,
                false);
        tabPaddingX.setTextLimit(2);

        tabPaddingY = createLabeledText("tabPaddingY", //$NON-NLS-1$
                "" + getMergedIntPreference(ThemeConstants.TAB_PADDING_Y, lastUsedTheme), wrappedTabsComposite,
                false);
        tabPaddingY.setTextLimit(2);
        if (UIUtils.isGtk) {
            gtkToolbarFix = createLabeledText("gtkToolbarFix", //$NON-NLS-1$
                    "" + getMergedIntPreference(ThemeConstants.GTK_TOOLBAR_FIX, lastUsedTheme),
                    wrappedTabsComposite, false);
            gtkToolbarFix.setTextLimit(2);
            gtkToolbarFix.addModifyListener(new IntModifyListener(gtkToolbarFix, DEFAULT_TOOLBAR_FIX, 0, 22));
        }
        borderSize.addModifyListener(new IntModifyListener(borderSize, DEFAULT_BORDER_SIZE, 0, 100));
        moveTabAmount.addModifyListener(new IntModifyListener(moveTabAmount, DEFAULT_MOVE_TAB_AMOUNT, 1, 1000));
        tabWidthText.addModifyListener(new IntModifyListener(tabWidthText, DEFAULT_MAX_TAB_WIDTH, 1, 1000));
        tabPaddingX.addModifyListener(new IntModifyListener(tabPaddingX, DEFAULT_PADDING_X, 0, 100));
        tabPaddingY.addModifyListener(new IntModifyListener(tabPaddingY, DEFAULT_PADDING_Y, 0, 100));

        useMaxTabWidth.addSelectionListener(new SelectionListener() {
            public void widgetSelected(SelectionEvent e) {
                tabWidthText.setEditable(useMaxTabWidth.getSelection());
            }

            public void widgetDefaultSelected(SelectionEvent e) {
                // ignored
            }
        });
        tabWidthText.setEditable(useMaxTabWidth.getSelection());
    }

    private void createTabMisc() {
        TabItem tabManual = new TabItem(tabFolder, SWT.NONE);
        tabManual.setText("Misc...");

        Composite defPanel = createContainer(tabFolder);
        tabManual.setControl(defPanel);

        SupportPanel.createSupportLinks(defPanel);
    }

    /**
     * The default value is the value from current theme,
     * if no custom changes are stored in the preferences
     * @param key
     * @return if the value is set in preferences, then this value,
     * otherwise the value from preferences of current presentation theme
     */
    private int getMergedIntPreference(String key, ITheme currentTheme) {
        boolean hasPrefs = getPreferenceStore().contains(key);
        int value = 0;
        if (hasPrefs) {
            value = getPreferenceStore().getInt(key);
        } else {
            value = currentTheme.getInt(key);
        }
        return value;
    }

    /**
     * The default value is the value from current theme,
     * if no custom changes are stored in the preferences
     * @param key
     * @return if the value is set in preferences, then this value,
     * otherwise the value from preferences of current presentation theme
     */
    private boolean getMergedBooleanPreference(String key, ITheme currentTheme) {
        boolean hasPrefs = getPreferenceStore().contains(key);
        boolean value = false;
        if (hasPrefs) {
            value = getPreferenceStore().getBoolean(key);
        } else {
            value = currentTheme.getBoolean(key);
        }
        return value;
    }

    private Composite createContainer(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(SWT.FILL, SWT.FILL, true, true));
        return composite;
    }

    /*
     * @see IWorkbenchPreferencePage#init(IWorkbench)
     */
    public void init(IWorkbench workbench) {
        // ignored
    }

    /*
     * @see SelectionListener#widgetDefaultSelected(SelectionEvent)
     */
    public void widgetDefaultSelected(SelectionEvent selectionEvent) {
        widgetSelected(selectionEvent);
    }

    /*
     * @see SelectionListener#widgetSelected(SelectionEvent)
     */
    public void widgetSelected(SelectionEvent selectionEvent) {
        //       ignored
    }

    public boolean performOk() {
        ITheme currentTheme = PlatformUI.getWorkbench().getThemeManager().getCurrentTheme();
        if (lastUsedTheme != currentTheme) {
            // if we have custom values from old theme, and user has changed theme, then
            // we shouldn't re-set old values from old theme.
            return true;
        }
        IPreferenceStore store = getPreferenceStore();
        try {
            int maxTabWidth = Integer.parseInt(tabWidthText.getText());
            setValue(store, ThemeConstants.MAX_TAB_WIDTH, maxTabWidth);
        } catch (Exception e) {
            setValue(store, ThemeConstants.MAX_TAB_WIDTH, DEFAULT_MAX_TAB_WIDTH);
        }
        try {
            int tabMoveInt = Integer.parseInt(moveTabAmount.getText());
            setValue(store, ThemeConstants.MOVE_TAB_AMOUNT, tabMoveInt);
        } catch (Exception e) {
            store.setValue(ThemeConstants.MOVE_TAB_AMOUNT, DEFAULT_MOVE_TAB_AMOUNT);
        }
        try {
            int borderSizeInt = Integer.parseInt(borderSize.getText());
            setValue(store, ThemeConstants.BORDER_SIZE, borderSizeInt);
        } catch (Exception e) {
            store.setValue(ThemeConstants.BORDER_SIZE, DEFAULT_BORDER_SIZE);
        }
        try {
            int padXInt = Integer.parseInt(tabPaddingX.getText());
            setValue(store, ThemeConstants.TAB_PADDING_X, padXInt);
        } catch (Exception e) {
            store.setValue(ThemeConstants.TAB_PADDING_X, DEFAULT_PADDING_X);
        }
        try {
            int padYInt = Integer.parseInt(tabPaddingY.getText());
            setValue(store, ThemeConstants.TAB_PADDING_Y, padYInt);
        } catch (Exception e) {
            store.setValue(ThemeConstants.TAB_PADDING_Y, DEFAULT_PADDING_Y);
        }
        if (UIUtils.isGtk) {
            try {
                int gtkFix = Integer.parseInt(gtkToolbarFix.getText());
                setValue(store, ThemeConstants.GTK_TOOLBAR_FIX, gtkFix);
            } catch (Exception e) {
                store.setValue(ThemeConstants.GTK_TOOLBAR_FIX, DEFAULT_TOOLBAR_FIX);
            }
        }
        store.setValue(ThemeConstants.CLOSE_TAB_ON_MIDDLE_CLICK, closeTabOnMiddleClick.getSelection());

        store.setValue(ThemeConstants.ENABLE_NEW_MIN_MAX, minimizeToCoolbar.getSelection());

        // needed to set the workspace hidden pref

        IPreferenceStore apiPrefStore = PreferenceInitializer.getApiPrefStore();
        if (apiPrefStore.getBoolean(ThemeConstants.ENABLE_NEW_MIN_MAX) != minimizeToCoolbar.getSelection()) {
            IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();

            boolean minEnabled = apiPrefStore.getBoolean(ThemeConstants.ENABLE_NEW_MIN_MAX);
            if (minEnabled) {
                ((WorkbenchPage) page).getActivePerspective().getFastViewManager().restoreAllTrimStacks();
            } else {
                // curiosly, this doesn't work as expected for non-active perspectives
                //((WorkbenchPage) page).unzoomAllPerspectives();
                // so it's enough to call this on the visible perspective
                ((WorkbenchPage) page).getActivePerspective().getPresentation().forceNoZoom();
            }
        }
        apiPrefStore.setValue(ThemeConstants.ENABLE_NEW_MIN_MAX, minimizeToCoolbar.getSelection());

        store.setValue(ThemeConstants.USE_FAST_TAB_SWITCH, useFastTabSwitch.getSelection());

        store.setValue(ThemeConstants.COPY_FULL_TAB_TITLE, copyFullTabTitle.getSelection());

        store.setValue(ThemeConstants.ALWAYS_SORT_EDITOR_TABS, alwaysSortEditorTabs.getSelection());
        store.setValue(ThemeConstants.ALWAYS_SORT_VIEW_TABS, alwaysSortViewTabs.getSelection());
        store.setValue(ThemeConstants.ESC_CLOSES_DETACHED_VIEWS, escClosesDetachedViews.getSelection());

        setValue(store, ThemeConstants.USE_MAX_TAB_WIDTH, useMaxTabWidth.getSelection());
        setValue(store, ThemeConstants.SHOW_FILE_EXTENSIONS, showFileExt.getSelection());
        setValue(store, ThemeConstants.CROP_IN_THE_MIDDLE, cropInTheMiddle.getSelection());
        setValue(store, ThemeConstants.SHOW_VIEW_ICON, showViewIcon.getSelection());
        setValue(store, ThemeConstants.HIDE_VIEW_TITLE, hideViewTitle.getSelection());
        setValue(store, ThemeConstants.SHOW_EDITOR_ICON, showEditorIcon.getSelection());
        return true;
    }

    private void setValue(IPreferenceStore store, String key, int value) {
        boolean hasValue = store.contains(key);
        store.setValue(key, value);
        if (!hasValue) {
            Integer integer = new Integer(value);
            store.firePropertyChangeEvent(key, null, integer);
            // problems with reading 0 values - they are the same as default
            store.putValue(key, "" + value);
        }
    }

    private void setValue(IPreferenceStore store, String key, boolean value) {
        boolean hasValue = store.contains(key);
        store.setValue(key, value);
        if (!hasValue || !value) {
            /*
             * if default value is the same as given argument, then store
             * doesn't set it and later we can't recognize if the value was
             * customized by user... So we set it first to opposite value,
             * and then to the desired one.
             */
            if (!hasValue) {
                store.setValue(key, !value);
                store.setValue(key, value);
            }
            // this set an string value as WORKAROUND
            store.putValue(key, "" + value);
        }
    }

    private Text createLabeledText(String titleId, String value, Composite defPanel1, boolean fillAllSpace) {
        Composite commonPanel = new Composite(defPanel1, SWT.NONE);
        GridData gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL);
        GridLayout layout = new GridLayout();
        layout.numColumns = 2;
        layout.marginWidth = 0;
        commonPanel.setLayout(layout);
        commonPanel.setLayoutData(gridData);

        Label label = new Label(commonPanel, SWT.LEFT);
        label.setText(PresentationPlugin.getResourceString(titleId));
        label.setToolTipText(PresentationPlugin.getResourceString(titleId + TOOLTIP_SUFFIX));

        Text fText = new Text(commonPanel, SWT.SHADOW_IN | SWT.BORDER);
        if (fillAllSpace) {
            gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL);
            fText.setLayoutData(gridData);
        } else {
            gridData = new GridData();
            gridData.widthHint = 16;
            fText.setLayoutData(gridData);
        }
        fText.setText(value);
        fText.setToolTipText(PresentationPlugin.getResourceString(titleId + TOOLTIP_SUFFIX));
        return fText;
    }

    private Button createLabeledCheck(String titleId, boolean value, Composite defPanel1) {
        Button fButton = new Button(defPanel1, SWT.CHECK | SWT.LEFT);
        GridData data = new GridData();
        fButton.setLayoutData(data);
        fButton.setText(PresentationPlugin.getResourceString(titleId));
        fButton.setSelection(value);
        fButton.setToolTipText(PresentationPlugin.getResourceString(titleId + TOOLTIP_SUFFIX));
        return fButton;
    }

    //    private Button createLabeledRadio(String titleId, boolean value, Composite defPanel) {
    //        Button fButton = new Button(defPanel, SWT.RADIO);
    //        fButton.setText(PresentationPlugin.getResourceString(titleId));
    //        fButton.setSelection(value);
    //        fButton.setToolTipText(PresentationPlugin.getResourceString(titleId + TOOLTIP_SUFFIX));
    //        return fButton;
    //    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.preference.PreferencePage#performDefaults()
     */
    protected void performDefaults() {
        super.performDefaults();
        IPreferenceStore store = getPreferenceStore();
        ITheme currentTheme = PlatformUI.getWorkbench().getThemeManager().getCurrentTheme();

        PreferenceInitializer.performDefaults(store, currentTheme);
        useFastTabSwitch.setSelection(store.getDefaultBoolean(ThemeConstants.USE_FAST_TAB_SWITCH));
        closeTabOnMiddleClick.setSelection(store.getDefaultBoolean(ThemeConstants.CLOSE_TAB_ON_MIDDLE_CLICK));
        minimizeToCoolbar.setSelection(store.getDefaultBoolean(ThemeConstants.ENABLE_NEW_MIN_MAX));
        copyFullTabTitle.setSelection(store.getDefaultBoolean(ThemeConstants.COPY_FULL_TAB_TITLE));
        alwaysSortEditorTabs.setSelection(store.getDefaultBoolean(ThemeConstants.ALWAYS_SORT_EDITOR_TABS));
        alwaysSortViewTabs.setSelection(store.getDefaultBoolean(ThemeConstants.ALWAYS_SORT_VIEW_TABS));
        escClosesDetachedViews.setSelection(store.getDefaultBoolean(ThemeConstants.ESC_CLOSES_DETACHED_VIEWS));
        setValuesFromTheme(currentTheme);
        lastUsedTheme = currentTheme;
    }

    private void setValuesFromTheme(ITheme theme) {
        tabWidthText.setText("" + theme.getInt(ThemeConstants.MAX_TAB_WIDTH));
        moveTabAmount.setText("" + theme.getInt(ThemeConstants.MOVE_TAB_AMOUNT));
        borderSize.setText("" + theme.getInt(ThemeConstants.BORDER_SIZE));
        tabPaddingX.setText("" + theme.getInt(ThemeConstants.TAB_PADDING_X));
        tabPaddingY.setText("" + theme.getInt(ThemeConstants.TAB_PADDING_Y));
        if (UIUtils.isGtk) {
            gtkToolbarFix.setText("" + theme.getInt(ThemeConstants.GTK_TOOLBAR_FIX));
        }
        useMaxTabWidth.setSelection(theme.getBoolean(ThemeConstants.USE_MAX_TAB_WIDTH));
        showFileExt.setSelection(theme.getBoolean(ThemeConstants.SHOW_FILE_EXTENSIONS));
        cropInTheMiddle.setSelection(theme.getBoolean(ThemeConstants.CROP_IN_THE_MIDDLE));
        showViewIcon.setSelection(theme.getBoolean(ThemeConstants.SHOW_VIEW_ICON));
        hideViewTitle.setSelection(theme.getBoolean(ThemeConstants.HIDE_VIEW_TITLE));
        showEditorIcon.setSelection(theme.getBoolean(ThemeConstants.SHOW_EDITOR_ICON));
    }

    public void setVisible(boolean visible) {
        super.setVisible(visible);
        if (!visible) {
            return;
        }
        ITheme currentTheme = PlatformUI.getWorkbench().getThemeManager().getCurrentTheme();
        if (lastUsedTheme != currentTheme) {
            setValuesFromTheme(currentTheme);
            lastUsedTheme = currentTheme;
        }
    }
}