/*****************************************************************************
* Copyright (c) 2009 CEA
*
*
* 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:
* Atos Origin - Initial API and implementation
*
*****************************************************************************/
package org.eclipse.papyrus.uml.diagram.sequence.preferences;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.papyrus.infra.gmfdiag.preferences.pages.AbstractPapyrusLinkPreferencePage;
import org.eclipse.papyrus.uml.diagram.sequence.edit.parts.PackageEditPart;
import org.eclipse.papyrus.uml.diagram.sequence.part.UMLDiagramEditorPlugin;
import org.eclipse.papyrus.uml.tools.utils.ICustomAppearence;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
/**
* @generated
*/
public class MessagePreferencePage extends AbstractPapyrusLinkPreferencePage {
/**
* @generated
*/
public MessagePreferencePage() {
super();
setPreferenceKey(PackageEditPart.MODEL_ID + "_Message");
}
/**
* @generated
*/
@Override
protected String getBundleId() {
return UMLDiagramEditorPlugin.ID;
}
/**
* @generated
*/
public static void initDefaults(IPreferenceStore store) {
// default for label display
store.setDefault(LABEL_DISPLAY_PREFERENCE, DEFAULT_LABEL_DISPLAY);
}
public static final String LABEL_DISPLAY_PREFERENCE = PackageEditPart.MODEL_ID + "_Message.label.display";
public static final int DEFAULT_LABEL_DISPLAY = ICustomAppearence.DISP_NAME | ICustomAppearence.DISP_PARAMETER_NAME | ICustomAppearence.DISP_PARAMETER_TYPE | ICustomAppearence.DISP_RT_TYPE;
/** current operation display style */
private int displayValue = getPreferenceStore().getInt(LABEL_DISPLAY_PREFERENCE);
/** buttons to select the display kind for the label of */
private Button dispParamDir ,dispParamMod, dispParamName, dispVis, dispParamType, dispReturnType, dispParamMul, dispParamDef , dispName, dispMod,dispParamVal;
/**
* Creates the group and check boxes to choose the kind of display
*
* @param parent
* the parent composite that holds the group
*/
protected void createLabelPreferencesButtons(Composite parent) {
// create group that host the buttons
Group group = new Group(parent, SWT.SHADOW_NONE);
group.setText("Label Display");
group.setLayout(new GridLayout(2, true));
dispParamDir = createCheckButton(group, "Parameters Direction", ICustomAppearence.DISP_PARAMETER_DIRECTION);
dispParamMod = createCheckButton(group, "Parameters Modifiers", ICustomAppearence.DISP_PARAMETER_MODIFIERS);
dispParamName = createCheckButton(group, "Parameters Name", ICustomAppearence.DISP_PARAMETER_NAME);
dispVis = createCheckButton(group, "Visibility", ICustomAppearence.DISP_VISIBILITY);
dispParamType = createCheckButton(group, "Parameters Type", ICustomAppearence.DISP_PARAMETER_TYPE);
dispReturnType = createCheckButton(group, "Return Type", ICustomAppearence.DISP_RT_TYPE);
dispParamMul = createCheckButton(group, "Parameters Multiplicity", ICustomAppearence.DISP_PARAMETER_MULTIPLICITY);
dispParamDef = createCheckButton(group, "Parameters Default Value", ICustomAppearence.DISP_PARAMETER_DEFAULT);
dispParamVal = createCheckButton(group, "Parameters Value", ICustomAppearence.DISP_DERIVE);
dispName = createCheckButton(group, "Name", ICustomAppearence.DISP_NAME);
dispMod = createCheckButton(group, "Modifiers", ICustomAppearence.DISP_MOFIFIERS);
}
protected void refreshButtons(SelectionEvent e) {
dispParamDir.setSelection(isCheck(displayValue , ICustomAppearence.DISP_PARAMETER_DIRECTION));
dispParamMod.setSelection(isCheck(displayValue , ICustomAppearence.DISP_PARAMETER_MODIFIERS));
dispParamName.setSelection(isCheck(displayValue , ICustomAppearence.DISP_PARAMETER_NAME));
dispVis.setSelection(isCheck(displayValue , ICustomAppearence.DISP_VISIBILITY));
dispParamType.setSelection(isCheck(displayValue , ICustomAppearence.DISP_PARAMETER_TYPE));
dispReturnType.setSelection(isCheck(displayValue , ICustomAppearence.DISP_RT_TYPE));
dispParamMul.setSelection(isCheck(displayValue , ICustomAppearence.DISP_PARAMETER_MULTIPLICITY));
dispParamDef.setSelection(isCheck(displayValue , ICustomAppearence.DISP_PARAMETER_DEFAULT));
dispParamVal.setSelection(isCheck(displayValue , ICustomAppearence.DISP_DERIVE));
dispName.setSelection(isCheck(displayValue , ICustomAppearence.DISP_NAME));
dispMod.setSelection(isCheck(displayValue , ICustomAppearence.DISP_MOFIFIERS));
if(e != null && dispParamDef.getSelection() && dispParamVal.getSelection()){
// parameter default and value can only select one of them
if(e.widget == dispParamDef){
dispParamVal.setSelection(false);
displayValue = displayValue ^ ICustomAppearence.DISP_DERIVE;
}else if(e.widget == dispParamVal){
dispParamDef.setSelection(false);
displayValue = displayValue ^ ICustomAppearence.DISP_PARAMETER_DEFAULT;
}
}
}
protected void createPageContents(Composite parent) {
super.createPageContents(parent);
// adds the label preferences checkboxes
createLabelPreferencesButtons(parent);
refreshButtons(null);
}
/**
* Load the default preferences of the fields contained in this page
*/
protected void loadDefaultPreferences() {
displayValue = getPreferenceStore().getInt(LABEL_DISPLAY_PREFERENCE);
refreshButtons(null);
}
/**
* {@inheritDoc}
*/
@Override
protected void performDefaults() {
loadDefaultPreferences();
super.performDefaults();
}
@Override
public boolean performOk() {
storePreferences();
return super.performOk();
}
private static boolean isCheck(int value, int mask){
return (value & mask) != 0;
}
/**
* Stores the values of the fields contained in this page into the preference store.
*/
protected void storePreferences() {
IPreferenceStore store = getPreferenceStore();
// checks the stored value and the actual one, so does not refresh diagram if it is not
// needed
if(displayValue != store.getInt(LABEL_DISPLAY_PREFERENCE)) {
store.setValue(LABEL_DISPLAY_PREFERENCE, displayValue);
}
}
/**
* Creates a button with the {@link SWT#CHECK} style.
*
* @param parent
* the parent of the button
* @param label
* the label of the button
* @param mask
* the value controlled by the button
* @return the button created
*/
protected Button createCheckButton(Composite parent, String label, int mask) {
Button button = new Button(parent, SWT.CHECK);
button.setText(label);
button.addSelectionListener(new AppearenceSelectionListener(mask));
return button;
}
/**
* Listeners for the check buttons that select the display of the label
*/
private class AppearenceSelectionListener implements SelectionListener {
/** the constant which refers the element to display or not */
final private int style;
/**
* Default Constructor.
*
* @param style
*/
public AppearenceSelectionListener(int style) {
this.style = style;
}
/**
* {@inheritDoc}
*/
public void widgetDefaultSelected(SelectionEvent e) {
}
/**
* {@inheritDoc}
*/
public void widgetSelected(SelectionEvent e) {
// add or remove the flag to the display Operation value (invert the current value)
displayValue = displayValue ^ style;
// refresh buttons at the end
refreshButtons(e);
}
}
}