/*******************************************************************************
* Copyright (c) 2007, 2010 Spring IDE Developers
* 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:
* Spring IDE Developers - initial API and implementation
*******************************************************************************/
package org.springframework.ide.eclipse.webflow.ui.graph.preferences;
import org.eclipse.jface.preference.ColorFieldEditor;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.springframework.ide.eclipse.webflow.core.internal.model.ActionState;
import org.springframework.ide.eclipse.webflow.core.internal.model.DecisionState;
import org.springframework.ide.eclipse.webflow.core.internal.model.EndState;
import org.springframework.ide.eclipse.webflow.core.internal.model.SubflowState;
import org.springframework.ide.eclipse.webflow.core.internal.model.ViewState;
import org.springframework.ide.eclipse.webflow.core.model.IWebflowModelElement;
import org.springframework.ide.eclipse.webflow.ui.graph.Activator;
/**
* {@link IWorkbenchPreferencePage} that enables the user to modify the UI colors
* of the {@link IWebflowModelElement} displayed in the Web Flow Graph editor.
* @author Christian Dupuis
* @since 2.0
*/
public class WebflowGraphColorPreferencePage extends PreferencePage implements
IWorkbenchPreferencePage {
private ColorFieldEditor viewStateColorEditor;
private ColorFieldEditor actionStateColorEditor;
private ColorFieldEditor subflowStateColorEditor;
private ColorFieldEditor decisionStateColorEditor;
private ColorFieldEditor endStateColorEditor;
/*
* @see PreferencePage#createContents(Composite)
*/
protected Control createContents(Composite parent) {
Composite entryTable = new Composite(parent, SWT.NULL);
// Create a data that takes up the extra space in the dialog .
GridData data = new GridData(GridData.FILL_HORIZONTAL);
data.grabExcessHorizontalSpace = true;
entryTable.setLayoutData(data);
GridLayout layout = new GridLayout();
entryTable.setLayout(layout);
Label label = new Label(entryTable, SWT.NONE | SWT.WRAP);
label.setText("Use this preference page to adjust the background colors of the state shapes within the Web Flow Editor.");
label.setFont(parent.getFont());
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 1;
gd.widthHint = 300;
label.setLayoutData(gd);
Composite colorComposite = new Composite(entryTable, SWT.NONE);
colorComposite.setLayout(new GridLayout());
// Create a data that takes up the extra space in the dialog.
colorComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
Group group = new Group(colorComposite, SWT.NONE);
layout.marginWidth = 3;
layout.marginHeight = 3;
group.setLayout(layout);
group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
group.setText("State Colors");
Composite colorComposite2 = new Composite(group, SWT.NONE);
colorComposite2.setLayout(layout);
colorComposite2.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
viewStateColorEditor = new ColorFieldEditor(WebflowGraphPreferences
.getPreferenceName(ViewState.class.getName()), "View State:",
colorComposite2);
viewStateColorEditor.setPage(this);
viewStateColorEditor.setPreferenceStore(getPreferenceStore());
viewStateColorEditor.load();
actionStateColorEditor = new ColorFieldEditor(WebflowGraphPreferences
.getPreferenceName(ActionState.class.getName()),
"Action State:", colorComposite2);
actionStateColorEditor.setPage(this);
actionStateColorEditor.setPreferenceStore(getPreferenceStore());
actionStateColorEditor.load();
subflowStateColorEditor = new ColorFieldEditor(WebflowGraphPreferences
.getPreferenceName(SubflowState.class.getName()),
"Subflow State:", colorComposite2);
subflowStateColorEditor.setPage(this);
subflowStateColorEditor.setPreferenceStore(getPreferenceStore());
subflowStateColorEditor.load();
decisionStateColorEditor = new ColorFieldEditor(WebflowGraphPreferences
.getPreferenceName(DecisionState.class.getName()),
"Decision State:", colorComposite2);
decisionStateColorEditor.setPage(this);
decisionStateColorEditor.setPreferenceStore(getPreferenceStore());
decisionStateColorEditor.load();
endStateColorEditor = new ColorFieldEditor(WebflowGraphPreferences
.getPreferenceName(EndState.class.getName()), "End State",
colorComposite2);
endStateColorEditor.setPage(this);
endStateColorEditor.setPreferenceStore(getPreferenceStore());
endStateColorEditor.load();
return entryTable;
}
/*
* @see IWorkbenchPreferencePage#init(IWorkbench)
*/
public void init(IWorkbench workbench) {
// Initialize the preference store we wish to use
setPreferenceStore(Activator.getDefault().getPreferenceStore());
}
/**
* Performs special processing when this page's Restore Defaults button has
* been pressed. Sets the contents of the color field to the default value
* in the preference store.
*/
protected void performDefaults() {
viewStateColorEditor.loadDefault();
actionStateColorEditor.loadDefault();
subflowStateColorEditor.loadDefault();
decisionStateColorEditor.loadDefault();
endStateColorEditor.loadDefault();
}
/**
* Method declared on IPreferencePage. Save the color preference to the
* preference store.
*/
public boolean performOk() {
viewStateColorEditor.store();
actionStateColorEditor.store();
subflowStateColorEditor.store();
decisionStateColorEditor.store();
endStateColorEditor.store();
WebflowGraphPreferences.clearColorCache();
return super.performOk();
}
}