org.eclipse.contribution.visualiser.internal.preference.VisualiserPreferencePage.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.contribution.visualiser.internal.preference.VisualiserPreferencePage.java

Source

/*******************************************************************************
 * Copyright (c) 2003, 2004 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Common Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/cpl-v10.html
 * 
 * Contributors:
 *     Adrian Colyer - initial version
 *     Sian Whiting - added tabbed layout and drawing options
 *     Matt Chapman - changes to support new rendering options
 *******************************************************************************/
package org.eclipse.contribution.visualiser.internal.preference;

import java.util.ArrayList;
import java.util.Iterator;

import org.eclipse.contribution.visualiser.VisualiserPlugin;
import org.eclipse.contribution.visualiser.core.PaletteDefinition;
import org.eclipse.contribution.visualiser.core.PaletteManager;
import org.eclipse.contribution.visualiser.core.ProviderDefinition;
import org.eclipse.contribution.visualiser.core.ProviderManager;
import org.eclipse.contribution.visualiser.core.RendererDefinition;
import org.eclipse.contribution.visualiser.core.RendererManager;
import org.eclipse.contribution.visualiser.interfaces.IMarkupProvider;
import org.eclipse.contribution.visualiser.interfaces.IVisualiserPalette;
import org.eclipse.contribution.visualiser.interfaces.IVisualiserRenderer;
import org.eclipse.contribution.visualiser.palettes.PatternVisualiserPalette;
import org.eclipse.contribution.visualiser.renderers.PatternVisualiserRenderer;
import org.eclipse.contribution.visualiser.simpleImpl.SimpleMarkupProvider;
import org.eclipse.contribution.visualiser.simpleImpl.SimpleMember;
import org.eclipse.contribution.visualiser.text.VisualiserMessages;
import org.eclipse.contribution.visualiser.utils.ColorConstants;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.MessageDialogWithToggle;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusAdapter;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.PaintEvent;
import org.eclipse.swt.events.PaintListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.TraverseEvent;
import org.eclipse.swt.events.TraverseListener;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.Scale;
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.IWorkbenchPreferencePage;

/**
 * The preference page for the Visualiser plugin
 */
public class VisualiserPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {

    private Text descriptionText;

    private CheckboxTableViewer checkboxViewer;

    private List styleList;

    private List colourList;

    private Scale prefWidth;

    private Scale stripeHeight;

    private VisualiserPreview preview;

    /**
     * Create the contents of the page
     * 
     * @see PreferencePage#createContents(Composite)
     */
    protected Control createContents(Composite parent) {

        Composite composite = new Composite(parent, SWT.NONE);
        GridLayout layout = new GridLayout();
        composite.setLayout(layout);

        TabFolder folder = new TabFolder(composite, SWT.NONE);
        folder.setLayout(new TabFolderLayout());
        folder.setLayoutData(new GridData(GridData.FILL_BOTH));

        Control providerControl = createProviderControl(folder);
        Control drawingOptionsControl = createDrawingOptionsControl(folder);

        TabItem item = new TabItem(folder, SWT.NONE);
        item.setText(VisualiserMessages.VisualiserPreferencePage_providers);
        item.setControl(providerControl);

        item = new TabItem(folder, SWT.NONE);
        item.setText(VisualiserMessages.VisualiserPreferencePage_drawingOptions);
        item.setControl(drawingOptionsControl);

        populateProviders();

        return composite;
    }

    /**
     * Subsidiary method for createContents(). Creates the contents of the
     * drawing options tab.
     * 
     * @param parent
     * @return the created control
     */
    private Control createDrawingOptionsControl(TabFolder parent) {
        GridLayout layout = new GridLayout();
        Composite composite = new Composite(parent, SWT.NONE);
        composite.setLayoutData(new GridData(GridData.FILL_BOTH));
        composite.setLayout(layout);
        createDrawingStyleArea(composite);
        return composite;
    }

    /**
     * Subsidiary method for createContents(). Creates the contents of the
     * providers tab.
     * 
     * @param parent
     * @return the created control
     */
    private Control createProviderControl(TabFolder parent) {
        GridLayout layout = new GridLayout();
        Composite composite = new Composite(parent, SWT.NONE);
        composite.setLayout(layout);
        createProvidersArea(composite);
        createDescriptionArea(composite);
        return composite;
    }

    private void createDrawingStyleArea(Composite mainComposite) {
        java.util.List renderers = RendererManager.getAllRendererDefinitions();
        java.util.List rnames = new ArrayList();
        for (Iterator iter = renderers.iterator(); iter.hasNext();) {
            RendererDefinition rd = (RendererDefinition) iter.next();
            rnames.add(rd.getName());
        }
        java.util.List palettes = PaletteManager.getAllPaletteDefinitions();
        java.util.List pnames = new ArrayList();
        for (Iterator iter = palettes.iterator(); iter.hasNext();) {
            PaletteDefinition rd = (PaletteDefinition) iter.next();
            pnames.add(rd.getName());
        }

        Composite drawingComposite = new Composite(mainComposite, SWT.NONE);
        drawingComposite.setLayout((new GridLayout(2, true)));
        GridData gd = new GridData(
                GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL);
        drawingComposite.setLayoutData(gd);

        Group styleGroup = new Group(drawingComposite, SWT.NONE);
        styleGroup.setLayout(new GridLayout());
        styleGroup.setLayoutData(new GridData(
                GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL));
        styleGroup.setText(VisualiserMessages.VisualiserPreferencePage_drawingStyle);

        styleList = new List(styleGroup, SWT.SINGLE | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
        gd = new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL);
        gd.heightHint = 65;
        styleList.setLayoutData(gd);
        styleList.setItems((String[]) rnames.toArray(new String[] {}));
        String rname = VisualiserPreferences.getRendererName();
        if ((rname == null) || (rname.length() == 0)) {
            // hasn't been set, use the default
            rname = RendererManager.getDefaultRenderer().getName();
        }

        Group colourGroup = new Group(drawingComposite, SWT.NONE);
        colourGroup.setLayout(new GridLayout());
        gd = new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL);
        colourGroup.setLayoutData(gd);
        colourGroup.setText(VisualiserMessages.VisualiserPreferencePage_colorSet);

        colourList = new List(colourGroup, SWT.SINGLE | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
        gd = new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL);
        gd.heightHint = 65;
        colourList.setLayoutData(gd);
        colourList.setItems((String[]) pnames.toArray(new String[] {}));
        String pname = PaletteManager.getCurrentPalette().getName();

        Group stripeHGroup = new Group(drawingComposite, SWT.NONE);
        stripeHGroup.setLayout(new GridLayout());
        gd = new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL);
        stripeHGroup.setLayoutData(gd);
        stripeHGroup.setText(VisualiserMessages.VisualiserPreferencePage_stripeHeight);

        stripeHeight = new Scale(stripeHGroup, SWT.HORIZONTAL);
        stripeHeight.setMinimum(1);
        stripeHeight.setMaximum(20);
        stripeHeight.setIncrement(1);
        stripeHeight.setSelection(VisualiserPreferences.getStripeHeight());
        gd = new GridData(GridData.FILL_HORIZONTAL);
        stripeHeight.setLayoutData(gd);

        Group prefWidthGroup = new Group(drawingComposite, SWT.NONE);
        prefWidthGroup.setLayout(new GridLayout());
        gd = new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL);
        prefWidthGroup.setLayoutData(gd);
        prefWidthGroup.setText(VisualiserMessages.VisualiserPreferencePage_colWidth);

        prefWidth = new Scale(prefWidthGroup, SWT.HORIZONTAL);
        prefWidth.setMinimum(VisualiserPreferences.getMinBarSize());
        prefWidth.setMaximum(120);
        prefWidth.setIncrement(5);
        prefWidth.setSelection(VisualiserPreferences.getBarWidth());
        gd = new GridData(GridData.FILL_HORIZONTAL);
        prefWidth.setLayoutData(gd);

        Group canvasGroup = new Group(drawingComposite, SWT.NONE);
        canvasGroup.setLayout(new GridLayout());
        gd = new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL);
        gd.grabExcessVerticalSpace = true;
        gd.horizontalSpan = 2;
        canvasGroup.setLayoutData(gd);
        canvasGroup.setText(VisualiserMessages.VisualiserPreferencePage_preview);

        preview = new VisualiserPreview(canvasGroup);
        gd = new GridData(GridData.FILL_BOTH);
        gd.widthHint = 300;
        gd.heightHint = 100;
        preview.setLayoutData(gd);

        styleList.setSelection(new String[] { rname });
        styleList.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                preview.redraw();
            }
        });

        colourList.setSelection(new String[] { pname });
        colourList.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                String pname = colourList.getSelection()[0];
                if (PaletteManager.getPaletteByName(pname).getPalette() instanceof PatternVisualiserPalette) {
                    preview.localUsePatterns = true;
                } else {
                    preview.localUsePatterns = false;
                }
                preview.redraw();
            }
        });

        stripeHeight.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                preview.redraw();
            }
        });

        prefWidth.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                preview.redraw();
            }
        });

    }

    class VisualiserPreview extends Canvas {
        private SimpleMember m = new SimpleMember(VisualiserMessages.VisualiserPreferencePage_preview_col1);

        private SimpleMember m2 = new SimpleMember(VisualiserMessages.VisualiserPreferencePage_preview_col2);

        private IVisualiserPalette ivp;

        private Color[] cols;

        private RGB[] colsForPatterns;

        private boolean localUsePatterns = VisualiserPreferences.getUsePatterns();

        VisualiserPreview(Composite parent) {
            super(parent, SWT.NO_BACKGROUND);
            addPaintListener(new PaintListener() {
                public void paintControl(PaintEvent e) {
                    paint(e.gc);
                }
            });
            // accessibility: add listeners so we can receive focus
            addFocusListener(new FocusAdapter() {
                public void focusGained(FocusEvent e) {
                    redraw();
                }

                public void focusLost(FocusEvent e) {
                    redraw();
                }
            });
            addKeyListener(new KeyAdapter() {
            });
            addTraverseListener(new TraverseListener() {
                public void keyTraversed(TraverseEvent e) {
                    switch (e.detail) {
                    /* Do tab group traversal */
                    case SWT.TRAVERSE_ESCAPE:
                    case SWT.TRAVERSE_RETURN:
                    case SWT.TRAVERSE_TAB_NEXT:
                    case SWT.TRAVERSE_TAB_PREVIOUS:
                    case SWT.TRAVERSE_PAGE_NEXT:
                    case SWT.TRAVERSE_PAGE_PREVIOUS:
                        e.doit = true;
                        break;
                    }
                }
            });
            setToolTipText(VisualiserMessages.VisualiserPreferencePage_preview);
        }

        private void paint(GC gc) {
            String rname = styleList.getSelection()[0];
            RendererDefinition rd = RendererManager.getRendererByName(rname);
            String pname = colourList.getSelection()[0];
            PaletteDefinition pd = PaletteManager.getPaletteByName(pname);
            if ((rd != null) && (pd != null)) {
                Rectangle clientRect = getClientArea();
                Image buffer = new Image(getDisplay(), clientRect.width, clientRect.height);
                GC sgc = new GC(buffer);
                sgc.setBackground(ColorConstants.menuBackground);
                sgc.fillRectangle(clientRect);

                IVisualiserRenderer r = rd.getRenderer();
                int x = r.getMarginSize();
                int y = r.getColumnHeaderHeight() + r.getMarginSize();
                int width = prefWidth.getSelection();
                int height = 70;
                r.paintColumnHeader(sgc, m, x, width);
                r.paintColumn(sgc, m, x, y, width, height, true);

                // paint a couple of stripes
                if (pd.getPalette() != ivp) {
                    disposeCols();
                }
                if (cols == null) {
                    RGB[] rgb = pd.getPalette().getRGBValues();
                    colsForPatterns = new RGB[] { rgb[0], rgb[1], rgb[2], rgb[3], };
                    cols = new Color[] { new Color(Display.getDefault(), rgb[0]),
                            new Color(Display.getDefault(), rgb[1]), new Color(Display.getDefault(), rgb[2]),
                            new Color(Display.getDefault(), rgb[3]) };
                }

                int h = stripeHeight.getSelection();
                if (localUsePatterns) {
                    PatternVisualiserRenderer.getPatternRenderer().setDitherPattern(sgc, colsForPatterns[0]);
                } else {
                    sgc.setBackground(cols[0]);
                }
                sgc.fillRectangle(x + 1, y + 10, width - 1, h);

                if (localUsePatterns) {
                    PatternVisualiserRenderer.getPatternRenderer().setDitherPattern(sgc, colsForPatterns[1]);
                } else {
                    sgc.setBackground(cols[1]);
                }
                sgc.fillRectangle(x + 1, y + 32, width / 2 - 1, h);

                if (localUsePatterns) {
                    PatternVisualiserRenderer.getPatternRenderer().setDitherPattern(sgc, colsForPatterns[2]);
                } else {
                    sgc.setBackground(cols[2]);
                }
                sgc.fillRectangle(x + 1 + width / 2, y + 32, width / 2 - 1, h);

                if (localUsePatterns) {
                    PatternVisualiserRenderer.getPatternRenderer().setDitherPattern(sgc, colsForPatterns[3]);
                } else {
                    sgc.setBackground(cols[3]);
                }
                int sy = y + 54;
                if (h > y + height - sy) {
                    h = y + height - sy;
                }
                sgc.fillRectangle(x + 1, sy, width - 1, h);

                x += r.getSpacing() + width;
                r.paintColumnHeader(sgc, m2, x, width);
                r.paintColumn(sgc, m2, x, y, width, height, false);

                // need to indicate focus for accessibility
                if (isFocusControl()) {
                    sgc.setForeground(ColorConstants.menuForeground);
                    sgc.setBackground(ColorConstants.menuBackground);
                    sgc.drawFocus(clientRect.x, clientRect.y, clientRect.width, clientRect.height);
                }

                gc.drawImage(buffer, 0, 0);
                sgc.dispose();
                buffer.dispose();
            }
        }

        private void disposeCols() {
            if (cols != null) {
                for (int i = 0; i < cols.length; i++) {
                    cols[i].dispose();
                }
                cols = null;
            }
        }

        /**
         * Dispose the resources allocated by the preview
         */
        public void dispose() {
            super.dispose();
            disposeCols();
        }

        public boolean getLocalUsePatterns() {
            return localUsePatterns;
        }
    }

    /**
     * Disposes the visualiser preview canvas
     */
    public void dispose() {
        super.dispose();
        if (preview != null) {
            preview.dispose();
        }
    }

    /**
     * Creates the widgets for the list of providers.
     */
    private void createProvidersArea(Composite mainComposite) {

        Font mainFont = mainComposite.getFont();
        Composite providersComposite = new Composite(mainComposite, SWT.NONE);
        providersComposite.setLayoutData(new GridData(GridData.FILL_BOTH));

        GridLayout providersLayout = new GridLayout();
        providersLayout.marginWidth = 0;
        providersLayout.marginHeight = 0;
        providersComposite.setLayout(providersLayout);
        providersComposite.setFont(mainFont);

        Label providersLabel = new Label(providersComposite, SWT.NONE);
        providersLabel.setText(VisualiserMessages.VisualiserPreferencePage_providersLabel);
        providersLabel.setFont(mainFont);

        // Checkbox table viewer of decorators
        checkboxViewer = CheckboxTableViewer.newCheckList(providersComposite, SWT.SINGLE | SWT.TOP | SWT.BORDER);
        checkboxViewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));
        checkboxViewer.getTable().setFont(providersComposite.getFont());
        checkboxViewer.setLabelProvider(new LabelProvider() {
            public String getText(Object element) {
                return ((ProviderDefinition) element).getName();
            }
        });
        checkboxViewer.getTable().setFont(mainFont);

        checkboxViewer.setContentProvider(new IStructuredContentProvider() {

            public void dispose() {
                // Nothing to do on dispose
            }

            public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
            }

            public Object[] getElements(Object inputElement) {
                // Make an entry for each decorator definition
                // return sorter.sort((Object[]) inputElement);
                return (Object[]) inputElement;
            }

        });

        checkboxViewer.addSelectionChangedListener(new ISelectionChangedListener() {
            public void selectionChanged(SelectionChangedEvent event) {
                if (event.getSelection() instanceof IStructuredSelection) {
                    IStructuredSelection sel = (IStructuredSelection) event.getSelection();
                    ProviderDefinition definition = (ProviderDefinition) sel.getFirstElement();
                    if (definition == null)
                        clearDescription();
                    else
                        showDescription(definition);
                }
            }
        });

        checkboxViewer.addCheckStateListener(new ICheckStateListener() {
            public void checkStateChanged(CheckStateChangedEvent event) {
                checkboxViewer.setAllChecked(false);
                checkboxViewer.setChecked(event.getElement(), true);
                checkboxViewer.setSelection(new StructuredSelection(event.getElement()), true);

                // reset palette choice in drawing options tab
                ProviderDefinition definition = (ProviderDefinition) event.getElement();
                String pid = VisualiserPreferences.getPaletteIDForProvider(definition.getID());
                String pname = null;
                if ((pid != null) && (pid.length() > 0)) {
                    pname = PaletteManager.getPaletteByID(pid).getName();
                }
                if ((pname == null) || (pname.length() == 0)) {
                    pname = PaletteManager.getDefaultForProvider(definition).getName();
                }
                colourList.setSelection(new String[] { pname });
            }
        });
    }

    /**
     * Creates the widgets for the provider description.
     */
    private void createDescriptionArea(Composite mainComposite) {

        Font mainFont = mainComposite.getFont();
        Composite textComposite = new Composite(mainComposite, SWT.NONE);
        textComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
        GridLayout textLayout = new GridLayout();
        textLayout.marginWidth = 0;
        textLayout.marginHeight = 0;
        textComposite.setLayout(textLayout);
        textComposite.setFont(mainFont);

        Label descriptionLabel = new Label(textComposite, SWT.NONE);
        descriptionLabel.setText(VisualiserMessages.VisualiserPreferencePage_description);
        descriptionLabel.setFont(mainFont);

        descriptionText = new Text(textComposite, SWT.MULTI | SWT.WRAP | SWT.READ_ONLY | SWT.BORDER | SWT.H_SCROLL);
        descriptionText.setLayoutData(new GridData(GridData.FILL_BOTH));
        descriptionText.setFont(mainFont);
    }

    /**
     * Populates the list of providers.
     */
    private void populateProviders() {
        ProviderDefinition[] definitions = getAllDefinitions();
        checkboxViewer.setInput(definitions);
        for (int i = 0; i < definitions.length; i++) {
            checkboxViewer.setChecked(definitions[i], definitions[i].isEnabled());
            if (definitions[i].isEnabled()) {
                showDescription(definitions[i]);
            }
        }
    }

    /**
     * Show the selected description in the text.
     */
    private void showDescription(ProviderDefinition definition) {
        if (descriptionText == null || descriptionText.isDisposed()) {
            return;
        }
        String text = definition.getDescription();
        if (text == null || text.length() == 0)
            descriptionText.setText(VisualiserMessages.VisualiserPreferencePage_noDescription);
        else
            descriptionText.setText(text);
    }

    /**
     * Clear the selected description in the text.
     */
    private void clearDescription() {
        if (descriptionText == null || descriptionText.isDisposed()) {
            return;
        }
        descriptionText.setText(""); //$NON-NLS-1$
    }

    /**
     * Restore defaults
     * 
     * @see PreferencePage#performDefaults()
     */
    protected void performDefaults() {
        super.performDefaults();
        stripeHeight.setSelection(VisualiserPreferences.getDefaultStripeHeight());
        prefWidth.setSelection(VisualiserPreferences.getDefaultBarWidth());
        String rname = RendererManager.getDefaultRenderer().getName();
        styleList.setSelection(styleList.indexOf(rname));
        ProviderDefinition def = (ProviderDefinition) checkboxViewer.getCheckedElements()[0];
        String pname = PaletteManager.getDefaultForProvider(def).getName();
        colourList.setSelection(colourList.indexOf(pname));
        preview.redraw();
    }

    /**
     * Called when the user presses OK. Updates the Visualiser with the
     * selections chosen.
     * 
     * @see PreferencePage#performOk()
     */
    public boolean performOk() {
        if (super.performOk()) {
            ProviderDefinition[] definitions = ProviderManager.getAllProviderDefinitions();
            for (int i = 0; i < definitions.length; i++) {
                boolean checked = checkboxViewer.getChecked(definitions[i]);
                if (definitions[i].isEnabled() != checked) {
                    definitions[i].setEnabled(checked);
                }
            }

            String rname = styleList.getSelection()[0];
            VisualiserPreferences.setRendererName(rname);

            String pname = colourList.getSelection()[0];
            ProviderDefinition def = ProviderManager.getCurrent();
            String defp = PaletteManager.getDefaultForProvider(def).getName();
            if (PaletteManager.getPaletteByName(pname).getPalette() instanceof PatternVisualiserPalette) {
                // Using Patterns
                if (stripeHeight.getSelection() < VisualiserPreferences.getDefaultPatternStripeHeight()
                        && !VisualiserPreferences.getUsePatterns()
                        && !VisualiserPreferences.getDontAutoIncreaseStripeHeight()) {
                    if (VisualiserPreferences.getDoAutoIncreaseStripeHeight()) {
                        VisualiserPreferences
                                .setStripeHeight(VisualiserPreferences.getDefaultPatternStripeHeight());
                    } else {
                        MessageDialogWithToggle toggleDialog = new MessageDialogWithToggle(null,
                                VisualiserMessages.VisualiserPreferencePage_stripeSizeDialog_title, null,
                                VisualiserMessages.VisualiserPreferencePage_stripeSizeDialog_message,
                                MessageDialog.QUESTION,
                                new String[] { IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL }, 0,
                                VisualiserMessages.VisualiserPreferencePage_stripeSizeDialog_togglemessage,
                                VisualiserPreferences.getDoAutoIncreaseStripeHeight());
                        if (toggleDialog.getReturnCode() == 0) { // Yes pressed
                            VisualiserPreferences.setDoIncreaseStripeHeight(toggleDialog.getToggleState());
                            VisualiserPreferences
                                    .setStripeHeight(VisualiserPreferences.getDefaultPatternStripeHeight());
                        } else // No pressed
                            VisualiserPreferences.setDontIncreaseStripeHeight(toggleDialog.getToggleState());
                    }
                } else
                    VisualiserPreferences.setStripeHeight(stripeHeight.getSelection());

                VisualiserPreferences.setBarWidth(prefWidth.getSelection());
                VisualiserPreferences.setUsePatterns(true);
                String pid = PaletteManager.getPaletteByName(pname).getID();
                VisualiserPreferences.setPaletteIDForProvider(def, pid);
            } else {
                // Not using patterns
                VisualiserPreferences.setStripeHeight(stripeHeight.getSelection());

                VisualiserPreferences.setBarWidth(prefWidth.getSelection());
                VisualiserPreferences.setUsePatterns(false);
                if (defp.equals(pname)) {
                    // going with provider defintion, clear preference setting
                    VisualiserPreferences.setPaletteIDForProvider(def, ""); //$NON-NLS-1$
                } else {
                    // update preference setting for this provider
                    String pid = PaletteManager.getPaletteByName(pname).getID();
                    VisualiserPreferences.setPaletteIDForProvider(def, pid);
                }
            }
            PaletteManager.resetCurrent();

            IMarkupProvider markupP = ProviderManager.getMarkupProvider();
            if (markupP instanceof SimpleMarkupProvider) {
                ((SimpleMarkupProvider) markupP).resetColours();
            }

            // if the Visualiser is showing, update to use the new settings
            if (VisualiserPlugin.visualiser != null) {
                if (VisualiserPlugin.menu != null) {
                    VisualiserPlugin.menu.setVisMarkupProvider(markupP);
                }
                VisualiserPlugin.visualiser.updateDisplay(true);
            }
            return true;
        }
        return false;
    }

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

    /**
     * Get the Provider definitions for the workbench.
     */
    private ProviderDefinition[] getAllDefinitions() {
        return ProviderManager.getAllProviderDefinitions();
    }
}