/********************************************************************** * Copyright (c) 2005, 2014 IBM Corporation, Ericsson * 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 - Initial API and implementation * Bernd Hufmann - Updated for TMF **********************************************************************/ package org.eclipse.tracecompass.tmf.ui.views.uml2sd.preferences; import java.util.Iterator; import java.util.Set; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.preference.BooleanFieldEditor; import org.eclipse.jface.preference.ColorFieldEditor; import org.eclipse.jface.preference.FontFieldEditor; import org.eclipse.jface.preference.IntegerFieldEditor; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.swt.SWT; 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.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.List; import org.eclipse.tracecompass.tmf.ui.views.uml2sd.util.Messages; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; /** * The Sequence Diagram preferences page implementation. * * @version 1.0 * @author sveyrier */ public class SDViewerPage extends PreferencePage implements IWorkbenchPreferencePage, SelectionListener { // ------------------------------------------------------------------------ // Constants // ------------------------------------------------------------------------ /** * Temporary preferences tag */ private static final String TEMP_TAG = SDViewPref.TEMP_TAG; // ------------------------------------------------------------------------ // Attributes // ------------------------------------------------------------------------ /** * The preference handler used to access the PreferenceStore */ private SDViewPref fPreferences = null; /** * BackGround color selector */ private ColorFieldEditor fLineColor = null; /** * Foreground color selector */ private ColorFieldEditor fBackGroundColor = null; /** * Font color selector */ private ColorFieldEditor fTextColor = null; /** * List which display all modifiable sequence Diagram font */ private List fClassItemList = null; /** * Font selector (The same is used for each modifiable font) */ private FontFieldEditor fFont = null; /** * Link font when zooming selector */ private BooleanFieldEditor fLink = null; /** * Enable tooltip selector */ private BooleanFieldEditor fTooltip = null; /** * Do not take external time into account in the min max computation */ private BooleanFieldEditor fNoExternalTime = null; /** * Use gradient color selector */ private BooleanFieldEditor fUseGrad = null; /** * A button area. */ private Composite fButtonArea; /** * SwimLane width selector */ private IntegerFieldEditor fLifelineWidth = null; // ------------------------------------------------------------------------ // Methods // ------------------------------------------------------------------------ @Override protected Control createContents(Composite parent) { GridLayout gl = new GridLayout(); gl.marginHeight = 0; gl.marginWidth = 0; parent.setLayout(gl); Composite page = new Composite(parent, SWT.NONE); GridLayout pageLayout = new GridLayout(); pageLayout.numColumns = 2; GridData pageLayoutdata = new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_VERTICAL | GridData.VERTICAL_ALIGN_FILL); page.setLayoutData(pageLayoutdata); page.setLayout(pageLayout); fTooltip = new BooleanFieldEditor(ISDPreferences.PREF_TOOLTIP, Messages.SequenceDiagram_ShowTooltips, page); fTooltip.setPreferenceStore(fPreferences.getPreferenceStore()); fTooltip.load(); // link font with zoom pref fLink = new BooleanFieldEditor(ISDPreferences.PREF_LINK_FONT, Messages.SequenceDiagram_IncreaseFontSizeWhenZooming, page); fLink.setPreferenceStore(fPreferences.getPreferenceStore()); fLink.load(); fNoExternalTime = new BooleanFieldEditor(ISDPreferences.PREF_EXCLUDE_EXTERNAL_TIME, Messages.SequenceDiagram_ExcludeExternalTime, page); fNoExternalTime.setPreferenceStore(fPreferences.getPreferenceStore()); fNoExternalTime.load(); // use gradient color pref fUseGrad = new BooleanFieldEditor(ISDPreferences.PREF_USE_GRADIENT, Messages.SequenceDiagram_UseGradientColor, page); fUseGrad.setPreferenceStore(fPreferences.getPreferenceStore()); fUseGrad.load(); Label separator = new Label(page, SWT.SEPARATOR | SWT.HORIZONTAL | SWT.SHADOW_NONE); GridData sepData = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL); separator.setLayoutData(sepData); Composite prefPage = new Composite(page, SWT.NONE); GridLayout prefPageLayout = new GridLayout(); prefPage.setLayoutData(pageLayoutdata); prefPageLayout.numColumns = 1; prefPage.setLayout(prefPageLayout); // swimLane width pref fLifelineWidth = new IntegerFieldEditor(ISDPreferences.PREF_LIFELINE_WIDTH, Messages.SequenceDiagram_LifelineWidth, prefPage); fLifelineWidth.setPreferenceStore(fPreferences.getPreferenceStore()); fLifelineWidth.setValidRange(119, 500); fLifelineWidth.load(); // not very nice new Label(prefPage, SWT.SEPARATOR | SWT.HORIZONTAL | SWT.SHADOW_NONE); new Label(prefPage, SWT.SEPARATOR | SWT.HORIZONTAL | SWT.SHADOW_NONE); // Font list pref fClassItemList = new List(prefPage, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); GridData tabItemLayoutdata = new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_VERTICAL | GridData.VERTICAL_ALIGN_FILL); fClassItemList.setLayoutData(tabItemLayoutdata); String[] fontList2 = SDViewPref.getFontList2(); for (int i = 0; i < fontList2.length; i++) { fClassItemList.add(fontList2[i]); } fClassItemList.setSelection(0); fClassItemList.addSelectionListener(this); fButtonArea = new Composite(prefPage, SWT.NONE); GridData tabItemLayoutdata2 = new GridData(GridData.HORIZONTAL_ALIGN_FILL/* |GridData.GRAB_HORIZONTAL */| GridData.GRAB_VERTICAL | GridData.VERTICAL_ALIGN_FILL); fButtonArea.setLayoutData(tabItemLayoutdata2); GridLayout buttonAreaLayout = new GridLayout(); buttonAreaLayout.numColumns = 1; fButtonArea.setLayout(buttonAreaLayout); // font selector initialise for the lifeline font pref String[] fontList = SDViewPref.getFontList(); fFont = new FontFieldEditor(fontList[0], "",//$NON-NLS-1$ Messages.SequenceDiagram_AaBbYyZz, fButtonArea); fFont.getPreviewControl().setSize(500, 500); fFont.setPreferenceStore(fPreferences.getPreferenceStore()); fFont.load(); fBackGroundColor = new ColorFieldEditor(fontList[0] + SDViewPref.BACK_COLOR_POSTFIX, Messages.SequenceDiagram_Background, fButtonArea); fBackGroundColor.setPreferenceStore(fPreferences.getPreferenceStore()); fBackGroundColor.load(); fLineColor = new ColorFieldEditor(fontList[0] + SDViewPref.FORE_COLOR_POSTFIX, Messages.SequenceDiagram_Lines, fButtonArea); fLineColor.setPreferenceStore(fPreferences.getPreferenceStore()); fLineColor.load(); fTextColor = new ColorFieldEditor(fontList[0] + SDViewPref.TEXT_COLOR_POSTFIX, Messages.SequenceDiagram_Text, fButtonArea); fTextColor.setPreferenceStore(fPreferences.getPreferenceStore()); fTextColor.load(); swapPref(true); Dialog.applyDialogFont(page); return page; } @Override public void init(IWorkbench workbench) { fPreferences = SDViewPref.getInstance(); } @Override protected void performApply() { // Store the prefrences in the PreferenceStore if (!fLifelineWidth.isValid()) { fLifelineWidth.showErrorMessage(); return; } fFont.store(); fBackGroundColor.store(); fLineColor.store(); fLink.store(); fTooltip.store(); fNoExternalTime.store(); fTextColor.store(); fUseGrad.store(); fLifelineWidth.store(); swapPref(false); // then save them in the preference file fPreferences.apply(); swapPref(true); } @Override public boolean performOk() { performApply(); return true; } @Override protected void performDefaults() { fLink.loadDefault(); fTooltip.loadDefault(); fNoExternalTime.loadDefault(); fUseGrad.loadDefault(); fLifelineWidth.loadDefault(); // and all the fonts and colors // fonts and colors are stored for each time because // we are using only one FontFieldEditor Set<String> keySet = SDViewPref.getInstance().getFontPref().keySet(); Iterator<String> it = keySet.iterator(); while (it.hasNext()) { Object prefName = it.next(); if (prefName instanceof String) { fFont.setPreferenceName((String) prefName); fFont.loadDefault(); fFont.setPreferenceName((String) prefName + TEMP_TAG); fFont.store(); } } keySet = SDViewPref.getInstance().getBackColorPref().keySet(); it = keySet.iterator(); while (it.hasNext()) { Object prefName = it.next(); if (prefName instanceof String) { fBackGroundColor.setPreferenceName((String) prefName); fBackGroundColor.loadDefault(); fBackGroundColor.setPreferenceName((String) prefName + TEMP_TAG); fBackGroundColor.store(); } } String[] fontList = SDViewPref.getFontList(); fBackGroundColor.setPreferenceName(fontList[fClassItemList.getSelectionIndex()] + SDViewPref.BACK_COLOR_POSTFIX + TEMP_TAG); fBackGroundColor.load(); keySet = SDViewPref.getInstance().getForeColorPref().keySet(); it = keySet.iterator(); while (it.hasNext()) { Object prefName = it.next(); if (prefName instanceof String) { fLineColor.setPreferenceName((String) prefName); fLineColor.loadDefault(); fLineColor.setPreferenceName((String) prefName + TEMP_TAG); fLineColor.store(); } } fLineColor.setPreferenceName(fontList[fClassItemList.getSelectionIndex()] + SDViewPref.FORE_COLOR_POSTFIX + TEMP_TAG); fLineColor.load(); keySet = SDViewPref.getInstance().getTextColorPref().keySet(); it = keySet.iterator(); while (it.hasNext()) { Object prefName = it.next(); if (prefName instanceof String) { fTextColor.setPreferenceName((String) prefName); fTextColor.loadDefault(); fTextColor.setPreferenceName((String) prefName + TEMP_TAG); fTextColor.store(); } } fTextColor.setPreferenceName(fontList[fClassItemList.getSelectionIndex()] + SDViewPref.TEXT_COLOR_POSTFIX + TEMP_TAG); fTextColor.load(); } @Override public void widgetSelected(SelectionEvent e) { // Store the past set font preference or else the // FontFieldEditor reassignment will make us loose the current modification fFont.store(); fLineColor.store(); fBackGroundColor.store(); fTextColor.store(); String[] fontList = SDViewPref.getFontList(); // set the FontFieldEditor for the new selected graphNode font fFont.setPreferenceName(fontList[fClassItemList.getSelectionIndex()] + TEMP_TAG); fFont.load(); fBackGroundColor.setPreferenceName(fontList[fClassItemList.getSelectionIndex()] + SDViewPref.BACK_COLOR_POSTFIX + TEMP_TAG); fBackGroundColor.load(); fLineColor.setPreferenceName(fontList[fClassItemList.getSelectionIndex()] + SDViewPref.FORE_COLOR_POSTFIX + TEMP_TAG); fLineColor.load(); fTextColor.setPreferenceName(fontList[fClassItemList.getSelectionIndex()] + SDViewPref.TEXT_COLOR_POSTFIX + TEMP_TAG); fTextColor.load(); // No Background for message graphNodes if ((fontList[fClassItemList.getSelectionIndex()].equals(ISDPreferences.PREF_SYNC_MESS)) || (fontList[fClassItemList.getSelectionIndex()].equals(ISDPreferences.PREF_SYNC_MESS_RET)) || (fontList[fClassItemList.getSelectionIndex()].equals(ISDPreferences.PREF_ASYNC_MESS)) || (fontList[fClassItemList.getSelectionIndex()].equals(ISDPreferences.PREF_ASYNC_MESS_RET))) { fBackGroundColor.setEnabled(false, fButtonArea); } else { fBackGroundColor.setEnabled(true, fButtonArea); } // No font used for execution occurrence and global frame if ((fontList[fClassItemList.getSelectionIndex()].equals(ISDPreferences.PREF_EXEC)) || (fontList[fClassItemList.getSelectionIndex()].equals(ISDPreferences.PREF_FRAME))) { fTextColor.setEnabled(false, fButtonArea); } else { fTextColor.setEnabled(true, fButtonArea); } if (fontList[fClassItemList.getSelectionIndex()].equals(ISDPreferences.PREF_FRAME)) { fFont.setEnabled(false, fButtonArea); } else { fFont.setEnabled(true, fButtonArea); } } /** * Swap viewer preferences. * * @param toTemp Switch to the temporary preferences */ protected void swapPref(boolean toTemp) { String tag1 = "";//$NON-NLS-1$ String tag2 = TEMP_TAG; if (!toTemp) { tag1 = TEMP_TAG; tag2 = "";//$NON-NLS-1$ } Set<String> keySet = SDViewPref.getInstance().getFontPref().keySet(); Iterator<String> it = keySet.iterator(); while (it.hasNext()) { Object prefName = it.next(); if (prefName instanceof String) { fFont.setPreferenceName((String) prefName + tag1); fFont.load(); fFont.setPreferenceName((String) prefName + tag2); fFont.store(); } } keySet = SDViewPref.getInstance().getBackColorPref().keySet(); it = keySet.iterator(); while (it.hasNext()) { Object prefName = it.next(); if (prefName instanceof String) { fBackGroundColor.setPreferenceName((String) prefName + tag1); fBackGroundColor.load(); fBackGroundColor.setPreferenceName((String) prefName + tag2); fBackGroundColor.store(); } } keySet = SDViewPref.getInstance().getForeColorPref().keySet(); it = keySet.iterator(); while (it.hasNext()) { Object prefName = it.next(); if (prefName instanceof String) { fLineColor.setPreferenceName((String) prefName + tag1); fLineColor.load(); fLineColor.setPreferenceName((String) prefName + tag2); fLineColor.store(); } } keySet = SDViewPref.getInstance().getTextColorPref().keySet(); it = keySet.iterator(); while (it.hasNext()) { Object prefName = it.next(); if (prefName instanceof String) { fTextColor.setPreferenceName((String) prefName + tag1); fTextColor.load(); fTextColor.setPreferenceName((String) prefName + tag2); fTextColor.store(); } } String[] fontList = SDViewPref.getFontList(); if (toTemp) { // set the FontFieldEditor for the new selected graphNode font fFont.setPreferenceName(fontList[fClassItemList.getSelectionIndex()] + TEMP_TAG); fFont.load(); fBackGroundColor.setPreferenceName(fontList[fClassItemList.getSelectionIndex()] + SDViewPref.BACK_COLOR_POSTFIX + TEMP_TAG); fBackGroundColor.load(); fLineColor.setPreferenceName(fontList[fClassItemList.getSelectionIndex()] + SDViewPref.FORE_COLOR_POSTFIX + TEMP_TAG); fLineColor.load(); fTextColor.setPreferenceName(fontList[fClassItemList.getSelectionIndex()] + SDViewPref.TEXT_COLOR_POSTFIX + TEMP_TAG); fTextColor.load(); } } @Override public void widgetDefaultSelected(SelectionEvent e) { } }