diff options
author | Gabriel Pascual | 2014-05-19 14:33:37 +0000 |
---|---|---|
committer | Gabriel Pascual | 2014-05-19 14:33:37 +0000 |
commit | dfdc647f45e793a2ce22db3e653483cbafc53645 (patch) | |
tree | e0c3ab448f6cb62c079257027c6fe4082b83e69c /plugins/customization | |
parent | 8dc03ad834c57002c69ad005f0aa565f04ac67a3 (diff) | |
download | org.eclipse.papyrus-dfdc647f45e793a2ce22db3e653483cbafc53645.tar.gz org.eclipse.papyrus-dfdc647f45e793a2ce22db3e653483cbafc53645.tar.xz org.eclipse.papyrus-dfdc647f45e793a2ce22db3e653483cbafc53645.zip |
350134: [Palette] Can't delete local palette definition
https://bugs.eclipse.org/bugs/show_bug.cgi?id=350134
- Change called method for delete button
- Add a button to restore default configuration for extended palette
Change-Id: I1072f93e086f6e6c0eadfa3a0fbda92cd60d4273
Signed-off-by: Gabriel Pascual <gabriel.pascual@all4tec.net>
Diffstat (limited to 'plugins/customization')
-rw-r--r-- | plugins/customization/org.eclipse.papyrus.customization.palette/src/org/eclipse/papyrus/customization/palette/dialog/PapyrusPaletteCustomizerDialog.java | 1537 |
1 files changed, 783 insertions, 754 deletions
diff --git a/plugins/customization/org.eclipse.papyrus.customization.palette/src/org/eclipse/papyrus/customization/palette/dialog/PapyrusPaletteCustomizerDialog.java b/plugins/customization/org.eclipse.papyrus.customization.palette/src/org/eclipse/papyrus/customization/palette/dialog/PapyrusPaletteCustomizerDialog.java index 37e0ecf78c2..6ce9f5a21ad 100644 --- a/plugins/customization/org.eclipse.papyrus.customization.palette/src/org/eclipse/papyrus/customization/palette/dialog/PapyrusPaletteCustomizerDialog.java +++ b/plugins/customization/org.eclipse.papyrus.customization.palette/src/org/eclipse/papyrus/customization/palette/dialog/PapyrusPaletteCustomizerDialog.java @@ -1,754 +1,783 @@ -/*****************************************************************************
- * Copyright (c) 2009 CEA LIST.
- *
- * 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:
- * Remi Schnekenburger (CEA LIST) remi.schnekenburger@cea.fr - Initial API and implementation
- *
- *****************************************************************************/
-
-package org.eclipse.papyrus.customization.palette.dialog;
-
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.eclipse.core.runtime.preferences.IEclipsePreferences;
-import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
-import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
-import org.eclipse.core.runtime.preferences.InstanceScope;
-import org.eclipse.gef.palette.PaletteContainer;
-import org.eclipse.gef.palette.PaletteEntry;
-import org.eclipse.gef.palette.PaletteRoot;
-import org.eclipse.gef.ui.palette.PaletteCustomizer;
-import org.eclipse.gmf.runtime.gef.ui.palette.customize.PaletteCustomizerDialogEx;
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.viewers.CheckboxTableViewer;
-import org.eclipse.jface.viewers.DoubleClickEvent;
-import org.eclipse.jface.viewers.ICheckStateProvider;
-import org.eclipse.jface.viewers.IDoubleClickListener;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.jface.viewers.ILabelProviderListener;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.TreeViewer;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.wizard.WizardDialog;
-import org.eclipse.papyrus.infra.core.sasheditor.editor.ISashWindowsContainer;
-import org.eclipse.papyrus.uml.diagram.common.Activator;
-import org.eclipse.papyrus.uml.diagram.common.Messages;
-import org.eclipse.papyrus.uml.diagram.common.part.PaletteUtil;
-import org.eclipse.papyrus.uml.diagram.common.part.PapyrusPaletteCustomizer;
-import org.eclipse.papyrus.uml.diagram.common.part.PapyrusPalettePreferences;
-import org.eclipse.papyrus.uml.diagram.common.service.PapyrusPaletteService;
-import org.eclipse.papyrus.uml.diagram.common.service.PapyrusPaletteService.ExtendedProviderDescriptor;
-import org.eclipse.papyrus.uml.diagram.common.service.PapyrusPaletteService.LocalProviderDescriptor;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.MouseListener;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.layout.FormAttachment;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.layout.FormLayout;
-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.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableItem;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.views.properties.tabbed.ITabbedPropertyConstants;
-
-/**
- * specific dialog window for the customisation of the palette
- */
-public class PapyrusPaletteCustomizerDialog extends PaletteCustomizerDialogEx implements IPreferenceChangeListener {
-
- /** new local palette icon */
- private static final String NEW_LOCAL_DESC_IMAGE = "/icons/local_desc_new.gif";
-
- /** delete palette icon */
- private static final String DELETE_LOCAL_DESC_IMAGE = "/icons/local_desc_destroy.gif";
-
- /** edit palette icon */
- private static final String EDIT_LOCAL_DESC_IMAGE = "/icons/local_desc_edit.gif";
-
- /** path to the local descriptor icon */
- protected final String LOCAL_DESCRIPTOR = "/icons/local_desc.gif";
-
- /** path to the plugin descriptor icon */
- protected final String PLUGIN_DESCRIPTOR = "/icons/plugin_desc.gif";
-
- /** path to the plugin descriptor icon */
- protected final String EXTENDED_PLUGIN_DESCRIPTOR = "/icons/extended_plugin_desc.gif";
-
- /** viewer for the available tools */
- protected TreeViewer availableToolsTreeViewer;
-
- /** table viewed by the availablePalettesTreeViewer */
- protected Table availablePalettesTable;
-
- /** viewer for the available palettes */
- protected CheckboxTableViewer availablePalettesTableViewer;
-
- /** label provider for palette provider */
- protected PaletteLabelProvider providersLabelProvider;
-
- /** add local palette button */
- protected Button newPaletteButton;
-
- /** delete local palette button */
- protected Button deletePaletteButton;
-
- /** edit local palette button */
- protected Button editPaletteButton;
-
- /**
- * Creates a new PapyrusPaletteCustomizerDialog
- *
- * @param shell
- * the shell that hosts the dialog window
- * @param customizer
- * the customizer used to customize the palette
- * @param root
- * the root of the palette
- */
- public PapyrusPaletteCustomizerDialog(Shell shell, PaletteCustomizer customizer, PaletteRoot root) {
- super(shell, customizer, root);
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public int open() {
- IEclipsePreferences prefs = InstanceScope.INSTANCE.getNode(Activator.ID);
- prefs.addPreferenceChangeListener(this);
- return super.open();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- public boolean close() {
- IEclipsePreferences prefs = InstanceScope.INSTANCE.getNode(Activator.ID);
- prefs.removePreferenceChangeListener(this);
- return super.close();
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- protected Control createDialogArea(Composite parent) {
- // RS: does not call super, as the composite should not be drawn like they are in parent
- Composite mainComposite = createMainComposite(parent);
-
- final Control availableToolsComposite = createAvailablePalettesViewer(mainComposite);
- FormData data = new FormData();
- data.left = new FormAttachment(0, 0);
- data.top = new FormAttachment(0, 0);
- data.bottom = new FormAttachment(100, 0);
- // data.right = new FormAttachment(40, 0);
- availableToolsComposite.setLayoutData(data);
-
- // final Control displayButtons = createDisplayButtons(mainComposite);
- // data = new FormData();
- // data.left = new FormAttachment(availableToolsComposite, 0);
- // // data.width = 30;
- // data.top = new FormAttachment(40, 0);
- // data.bottom = new FormAttachment(100, 0);
- // displayButtons.setLayoutData(data);
-
- final Label nameLabel = new Label(mainComposite, SWT.NONE);
- nameLabel.setText(Messages.Palette_Viewer);
- data = new FormData();
- data.left = new FormAttachment(availableToolsComposite, ITabbedPropertyConstants.HSPACE);
- data.top = new FormAttachment(0, 0);
- nameLabel.setLayoutData(data);
-
- // Create the tree
- Control outline = createOutline(mainComposite);
- data = new FormData();
- data.left = new FormAttachment(availableToolsComposite, ITabbedPropertyConstants.HSPACE);
- data.top = new FormAttachment(nameLabel, 0);
- data.bottom = new FormAttachment(100, 0);
- // data.right = new FormAttachment(90, 0);
- outline.setLayoutData(data);
-
- // Create the panel where the properties of the selected palette entry will
- // be shown
- Control properties = createPropertiesPanel(mainComposite);
- data = new FormData();
- data.left = new FormAttachment(outline, ITabbedPropertyConstants.HSPACE);
- data.right = new FormAttachment(100, 0);
- data.top = new FormAttachment(0, 0);
- data.bottom = new FormAttachment(100, 0);
- properties.setLayoutData(data);
-
- // add listeners
- ISelectionChangedListener listener = createSelectionChangedListener();
- if(listener != null) {
- availablePalettesTableViewer.addSelectionChangedListener(listener);
- }
- return mainComposite;
- }
-
- protected ISelectionChangedListener createSelectionChangedListener() {
- return new ISelectionChangedListener() {
-
- /**
- * {@inheritDoc}
- */
- public void selectionChanged(SelectionChangedEvent event) {
- // retrieve element selected
- Object selectedElement = ((IStructuredSelection)event.getSelection()).getFirstElement();
- if(selectedElement instanceof PapyrusPaletteService.ExtendedProviderDescriptor) {
- PapyrusPaletteService.ProviderDescriptor descriptor = (PapyrusPaletteService.ProviderDescriptor)selectedElement;
- deletePaletteButton.setEnabled(true);
- editPaletteButton.setEnabled(true);
- } else if(selectedElement instanceof PapyrusPaletteService.LocalProviderDescriptor) {
- PapyrusPaletteService.LocalProviderDescriptor descriptor = (PapyrusPaletteService.LocalProviderDescriptor)selectedElement;
- deletePaletteButton.setEnabled(true);
- editPaletteButton.setEnabled(true);
- } else {
- deletePaletteButton.setEnabled(false);
- editPaletteButton.setEnabled(false);
- }
-
- // if(selectedElement instanceof PapyrusPaletteService.LocalProviderDescriptor) {
- // deletePaletteButton.setEnabled(true);
- // // check if the palette is in good configuration to be edited...
- // if(PaletteUtil.areRequiredProfileApplied(getActiveSashPage(), (PapyrusPaletteService.LocalProviderDescriptor)selectedElement)) {
- // editPaletteButton.setEnabled(true);
- // editPaletteButton.setToolTipText(Messages.PapyrusPaletteCustomizerDialog_EditButtonTooltip_LocalPaletteSelected);
- // } else {
- // editPaletteButton.setEnabled(false);
- // editPaletteButton.setToolTipText(Messages.PapyrusPaletteCustomizerDialog_EditButtonTooltip_MissingProfile);
- // }
- // } else {
- // deletePaletteButton.setEnabled(false);
- // editPaletteButton.setEnabled(false);
- // editPaletteButton.setToolTipText(Messages.PapyrusPaletteCustomizerDialog_EditButtonTooltip_LocalPaletteNotSelected);
- // }
- }
- };
- }
-
- protected void addEntry(MouseEvent e) {
- ISelection selection = availableToolsTreeViewer.getSelection();
- PaletteEntry entry = null;
- if(selection instanceof IStructuredSelection) {
- Object firstElement = ((IStructuredSelection)selection).getFirstElement();
- if(!(firstElement instanceof PaletteEntry)) {
- return;
- } else {
- entry = ((PaletteEntry)firstElement);
- }
- }
- // sets the active entry, to have the page useful for saving modification
- setActiveEntry(entry);
- // add entry to the selected container
- // retrieve the selection in the palette viewer
- PaletteEntry destContainer = getSelectedPaletteEntry();
- ((PapyrusPaletteCustomizer)getCustomizer()).storePaletteState(entry);
- if(destContainer instanceof PaletteContainer) {
- PaletteContainer oldParent = entry.getParent();
-
- // checks if the parent is already changed. If not, must store the standard parent (the
- // one given by the factory)
- PaletteContainer stdParent = ((PapyrusPaletteCustomizer)getCustomizer()).getChangedParents().get(entry);
- if(stdParent == null) {
- ((PapyrusPaletteCustomizer)getCustomizer()).getChangedParents().put(entry, entry.getParent());
- }
- oldParent.remove(entry);
- entry.setParent((PaletteContainer)destContainer);
- ((PaletteContainer)destContainer).add(entry);
- } else {
- // add it to the palette root
- PaletteRoot root = (PaletteRoot)PaletteUtil.getRoot(entry);
- if(root != null) {
- PaletteContainer oldParent = entry.getParent();
- PaletteContainer stdParent = ((PapyrusPaletteCustomizer)getCustomizer()).getChangedParents().get(entry);
- if(stdParent == null) {
- ((PapyrusPaletteCustomizer)getCustomizer()).getChangedParents().put(entry, stdParent);
- }
- oldParent.remove(entry);
- entry.setParent(root);
- root.add(entry);
- }
- }
- }
-
- /**
- * Creates the available palettes viewer part of the dialog.
- *
- * @param container
- * The Composite within which the viewer has to be created
- * @return The newly created Control that has the viewer
- */
- protected Control createAvailablePalettesViewer(Composite container) {
- // Create the Composite that will contain the available tools
- Composite composite = new Composite(container, SWT.NONE);
- composite.setFont(container.getFont());
- GridLayout layout = new GridLayout(4, false);
- layout.horizontalSpacing = 0;
- layout.verticalSpacing = 0;
- layout.marginHeight = 0;
- layout.marginWidth = 0;
- composite.setLayout(layout);
-
- final Label nameLabel = new Label(composite, SWT.NONE);
- nameLabel.setText(Messages.Available_Palettes);
- GridData data = new GridData(SWT.FILL, SWT.CENTER, true, false);
- nameLabel.setLayoutData(data);
-
- newPaletteButton = new Button(composite, SWT.NONE);
- newPaletteButton.setImage(Activator.getImage(NEW_LOCAL_DESC_IMAGE));
- newPaletteButton.setToolTipText(Messages.Dialog_Create_Palette_Tooltip);
- newPaletteButton.addMouseListener(new MouseListener() {
-
- /**
- * {@inheritDoc}
- */
- public void mouseUp(MouseEvent e) {
- createNewLocalPalette();
- }
-
- /**
- * {@inheritDoc}
- */
- public void mouseDown(MouseEvent e) {
-
- }
-
- /**
- * {@inheritDoc}
- */
- public void mouseDoubleClick(MouseEvent e) {
-
- }
- });
- data = new GridData(SWT.CENTER, SWT.CENTER, false, false);
- newPaletteButton.setLayoutData(data);
-
- editPaletteButton = new Button(composite, SWT.NONE);
- editPaletteButton.setImage(Activator.getImage(EDIT_LOCAL_DESC_IMAGE));
- editPaletteButton.setToolTipText(Messages.Dialog_Edit_Palette_Tooltip);
- editPaletteButton.addMouseListener(new MouseListener() {
-
- /**
- * {@inheritDoc}
- */
- public void mouseUp(MouseEvent e) {
- if(availablePalettesTableViewer == null) {
- return;
- }
-
- IStructuredSelection selection = (IStructuredSelection)availablePalettesTableViewer.getSelection();
- if(selection != null) {
- if((selection.getFirstElement() instanceof PapyrusPaletteService.LocalProviderDescriptor)) {
- editLocalPalette((PapyrusPaletteService.LocalProviderDescriptor)selection.getFirstElement());
- } else if(selection.getFirstElement() instanceof PapyrusPaletteService.ExtendedProviderDescriptor) {
- editExtendedPalette((PapyrusPaletteService.ExtendedProviderDescriptor)selection.getFirstElement());
- }
- }
- }
-
- /**
- * {@inheritDoc}
- */
- public void mouseDown(MouseEvent e) {
-
- }
-
- /**
- * {@inheritDoc}
- */
- public void mouseDoubleClick(MouseEvent e) {
-
- }
- });
- data = new GridData(SWT.CENTER, SWT.CENTER, false, false);
- editPaletteButton.setLayoutData(data);
- editPaletteButton.setEnabled(false);
-
- deletePaletteButton = new Button(composite, SWT.NONE);
- deletePaletteButton.setImage(Activator.getImage(DELETE_LOCAL_DESC_IMAGE));
- deletePaletteButton.setToolTipText(Messages.Dialog_Delete_Palette_Tooltip);
- deletePaletteButton.addMouseListener(new MouseListener() {
-
- /**
- * {@inheritDoc}
- */
- public void mouseUp(MouseEvent e) {
- restoreExtendedPaletteToDefault();
- }
-
- /**
- * {@inheritDoc}
- */
- public void mouseDown(MouseEvent e) {
-
- }
-
- /**
- * {@inheritDoc}
- */
- public void mouseDoubleClick(MouseEvent e) {
-
- }
- });
- data = new GridData(SWT.CENTER, SWT.CENTER, false, false);
- deletePaletteButton.setLayoutData(data);
- deletePaletteButton.setEnabled(false);
-
- availablePalettesTable = new Table(composite, SWT.BORDER | SWT.CHECK);
- availablePalettesTable.setFont(composite.getFont());
- availablePalettesTable.addSelectionListener(new SelectionListener() {
-
- /**
- * {@inheritDoc}
- */
- public void widgetSelected(SelectionEvent e) {
- if(e.detail == SWT.CHECK) {
- TableItem item = (TableItem)e.item;
- // one item was checked => display/hide the given provider
- changeProviderVisibility((PapyrusPaletteService.ProviderDescriptor)item.getData(), item.getChecked());
- }
- }
-
- /**
- * {@inheritDoc}
- */
- public void widgetDefaultSelected(SelectionEvent e) {
- // does nothing
- }
- });
- data = new GridData(GridData.FILL_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL);
- data.horizontalSpan = 4;
- data.widthHint = 185;
- // Make the tree this tall even when there is nothing in it. This will keep the
- // dialog from shrinking to an unusually small size.
- data.heightHint = 200;
- availablePalettesTable.setLayoutData(data);
- availablePalettesTableViewer = new CheckboxTableViewer(availablePalettesTable);
- AvailablePalettesCheckStateProvider availablePalettesCheckStateProvider = new AvailablePalettesCheckStateProvider();
- availablePalettesTableViewer.setCheckStateProvider(availablePalettesCheckStateProvider);
- availablePalettesTableViewer.setContentProvider(new PalettesTableContentProvider(availablePalettesTableViewer));
- providersLabelProvider = new PaletteLabelProvider(availablePalettesTableViewer);
- availablePalettesTableViewer.setLabelProvider(providersLabelProvider);
- availablePalettesTableViewer.setInput(PapyrusPaletteService.getInstance());
- availablePalettesTableViewer.addDoubleClickListener(new IDoubleClickListener() {
-
- public void doubleClick(DoubleClickEvent event) {
- // get selection. if local palette: open the wizard to edit this local palette
- IStructuredSelection selection = (IStructuredSelection)event.getSelection();
- if(selection.getFirstElement() instanceof LocalProviderDescriptor) {
- editLocalPalette((PapyrusPaletteService.LocalProviderDescriptor)selection.getFirstElement());
- } else if(selection.getFirstElement() instanceof ExtendedProviderDescriptor) {
- editExtendedPalette((PapyrusPaletteService.ExtendedProviderDescriptor)selection.getFirstElement());
- }
- }
- });
-
- return composite;
- }
-
- /**
- * Launch the wizard for the palette creation
- *
- * @param shell
- * the shell where to display the wizard
- */
- protected void createNewLocalPalette() {
- NewLocalPaletteWizard wizard = new NewLocalPaletteWizard(getActiveSashPage(), getCustomizer());
- WizardDialog wizardDialog = new WizardDialog(new Shell(), wizard);
- wizardDialog.open();
- }
-
- /**
- * Deletes the current selected local palette
- */
- protected void deleteLocalPalette() {
- IStructuredSelection selection = (IStructuredSelection)availablePalettesTableViewer.getSelection();
- if(selection == null || !(selection.getFirstElement() instanceof PapyrusPaletteService.LocalProviderDescriptor)) {
- MessageDialog.openError(getShell(), Messages.Dialog_Not_Local_Palette_Title, Messages.Dialog_Not_Local_Palette_Message);
- } else {
- PapyrusPaletteService.LocalProviderDescriptor descriptor = ((PapyrusPaletteService.LocalProviderDescriptor)selection.getFirstElement());
- String id = descriptor.getContributionID();
- PapyrusPalettePreferences.deleteLocalPalette(id);
- }
- }
-
- /**
- * Reset the current selected extended palette to the initial configurtion in the plugin
- */
- protected void restoreExtendedPaletteToDefault() {
- IStructuredSelection selection = (IStructuredSelection)availablePalettesTableViewer.getSelection();
- if(selection == null || !(selection.getFirstElement() instanceof PapyrusPaletteService.ExtendedProviderDescriptor)) {
- MessageDialog.openError(getShell(), Messages.Dialog_Not_Local_Palette_Title, Messages.Dialog_Not_Local_Palette_Message);
- } else {
- PapyrusPaletteService.ExtendedProviderDescriptor descriptor = ((PapyrusPaletteService.ExtendedProviderDescriptor)selection.getFirstElement());
- String id = descriptor.getContributionID();
- PapyrusPalettePreferences.unregisterLocalRedefinition(id);
- }
- }
-
- /**
- * Edits the current selected local palette
- */
- protected void editLocalPalette(PapyrusPaletteService.LocalProviderDescriptor descriptor) {
- UpdateLocalPaletteWizard wizard = new UpdateLocalPaletteWizard(getActiveSashPage(), descriptor, getCustomizer());
- WizardDialog wizardDialog = new WizardDialog(new Shell(), wizard);
- wizardDialog.open();
- }
-
- /**
- * @param firstElement
- */
- protected void editExtendedPalette(ExtendedProviderDescriptor descriptor) {
- // check the file in plugin state area.
- String contributionID = descriptor.getContributionID();
- String paletteRedefinition = PapyrusPalettePreferences.getPaletteRedefinition(contributionID);
-
- if(paletteRedefinition == null) {
- // create a local redefinition of this palette contribution
- PapyrusPalettePreferences.createPaletteRedefinition(descriptor);
- }
-
-
- UpdateExtendedPaletteWizard wizard = new UpdateExtendedPaletteWizard(getActiveSashPage(), descriptor, getCustomizer());
- WizardDialog wizardDialog = new WizardDialog(new Shell(), wizard);
- wizardDialog.open();
- }
-
-
- /**
- * Changes the visibility of the given provider
- *
- * @param descriptor
- * the provider to hide/show
- * @param isChecked
- * <code>true</code> if the descriptor should be visible
- */
- protected void changeProviderVisibility(PapyrusPaletteService.ProviderDescriptor descriptor, boolean isChecked) {
- PapyrusPalettePreferences.changePaletteVisibility(descriptor.getContributionID(), getActiveSashPage().getClass().getName(), isChecked);
- }
-
- /**
- * Creates the main composite for the dialog area
- *
- * @param parent
- * the parent of the createrd composite
- * @return the newly created Composite
- */
- protected Composite createMainComposite(Composite parent) {
- // dialog window
- // create a composite with standard margins and spacing
- Composite composite = new Composite(parent, SWT.NONE);
- FormLayout layout = new FormLayout();
- layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
- layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
- composite.setLayout(layout);
- composite.setLayoutData(new GridData(GridData.FILL_BOTH));
- applyDialogFont(composite);
- return composite;
- }
-
- /**
- * Content provider for available tools viewer
- */
- public class PalettesTableContentProvider implements IStructuredContentProvider {
-
- /** the palette root */
- private PapyrusPaletteService paletteService;
-
- /** tree viewer to fill */
- private final TableViewer viewer;
-
- /**
- * Constructor
- *
- * @param tableViewer
- * The TableViewer whose ContentProvider this PaletteTreeProvider is
- */
- public PalettesTableContentProvider(TableViewer tableViewer) {
- this.viewer = tableViewer;
- }
-
- /**
- * {@inheritDoc}
- */
- public void dispose() {
- paletteService = null;
- }
-
- /**
- * {@inheritDoc}
- */
- public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- if(newInput != null) {
- paletteService = (PapyrusPaletteService)newInput;
- }
- }
-
- /**
- * {@inheritDoc}
- */
- public Object[] getElements(Object inputElement) {
- if(inputElement instanceof PapyrusPaletteService) {
- List<PapyrusPaletteService.ProviderDescriptor> providers = ((PapyrusPaletteService)inputElement).getContributingProviders(getActiveSashPage(), getPaletteRoot());
-
- return providers.toArray();
- }
- return null;
- }
- }
-
- /**
- * Returns the current active sash page
- *
- * @return the current active sash page
- */
- protected IEditorPart getActiveSashPage() {
- // Lookup ServiceRegistry
- IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
- IEditorPart editorPart = page.getActiveEditor();
- assert editorPart != null;
- ISashWindowsContainer sashWindowsContainer = (ISashWindowsContainer)editorPart.getAdapter(ISashWindowsContainer.class);
- if(sashWindowsContainer != null) {
- return sashWindowsContainer.getActiveEditor();
- }
- return null;
- }
-
- /**
- * provider in charge of the check boxes in the available palettes table viewer
- */
- protected class AvailablePalettesCheckStateProvider implements ICheckStateProvider {
-
- /**
- * {@inheritDoc}
- */
- public boolean isChecked(Object element) {
- if(element instanceof PapyrusPaletteService.ProviderDescriptor) {
- return !PapyrusPalettePreferences.getHiddenPalettes(getActiveSashPage()).contains(((PapyrusPaletteService.ProviderDescriptor)element).getContributionID());
- }
- return false;
- }
-
- /**
- * {@inheritDoc}
- */
- public boolean isGrayed(Object element) {
- return false;
- }
-
- }
-
- /**
- * Label provider for available tools viewer
- */
- protected class PaletteLabelProvider implements ILabelProvider {
-
- /**
- * Creates a new PaletteLabelProvider.
- *
- * @param viewer
- * the table viewer where the labels are displayed
- */
- public PaletteLabelProvider(TableViewer viewer) {
- }
-
- private Map<ImageDescriptor, Image> imageCache = new HashMap<ImageDescriptor, Image>();
-
- /**
- * {@inheritDoc}
- */
- public Image getImage(Object element) {
- if(element instanceof PapyrusPaletteService.LocalProviderDescriptor) {
- return Activator.getImage(LOCAL_DESCRIPTOR);
- } else if(element instanceof PapyrusPaletteService.ExtendedProviderDescriptor) {
- // icon should be decorated if it is already defined in a local way or not.
- return Activator.getImage(EXTENDED_PLUGIN_DESCRIPTOR);
- } else if(element instanceof PapyrusPaletteService.ProviderDescriptor) {
- return Activator.getImage(PLUGIN_DESCRIPTOR);
- }
- return Activator.getImage(Activator.DEFAULT_IMAGE);
- }
-
- /**
- * {@inheritDoc}
- */
- public String getText(Object element) {
- if(element instanceof PapyrusPaletteService.ProviderDescriptor) {
- return ((PapyrusPaletteService.ProviderDescriptor)element).getContributionName();
- }
- return "<undefined>";
- }
-
- /**
- * {@inheritDoc}
- */
- public void addListener(ILabelProviderListener listener) {
- }
-
- /**
- * {@inheritDoc}
- */
- public void dispose() {
- Iterator<Image> images = imageCache.values().iterator();
- while(images.hasNext()) {
- images.next().dispose();
- }
- imageCache = null;
- }
-
- /**
- * {@inheritDoc}
- */
- public boolean isLabelProperty(Object element, String property) {
- return false;
- }
-
- /**
- * {@inheritDoc}
- */
- public void removeListener(ILabelProviderListener listener) {
- }
-
- }
-
- /**
- * {@inheritDoc}
- */
- public void preferenceChange(PreferenceChangeEvent event) {
- String id = event.getKey();
- if(PapyrusPalettePreferences.PALETTE_CUSTOMIZATIONS_ID.equals(id) || PapyrusPalettePreferences.PALETTE_LOCAL_DEFINITIONS.equals(id)) {
- // refresh available palette table viewer
- availablePalettesTableViewer.setInput(PapyrusPaletteService.getInstance());
- }
-
- }
-
-}
+/***************************************************************************** + * Copyright (c) 2009 CEA LIST. + * + * 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: + * Remi Schnekenburger (CEA LIST) remi.schnekenburger@cea.fr - Initial API and implementation + * Gabriel Pascual (ALL4TEC) gabriel.pascual@gmail.com - Bug 350134 + * + *****************************************************************************/ + +package org.eclipse.papyrus.customization.palette.dialog; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import org.eclipse.core.runtime.preferences.IEclipsePreferences; +import org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener; +import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent; +import org.eclipse.core.runtime.preferences.InstanceScope; +import org.eclipse.gef.palette.PaletteContainer; +import org.eclipse.gef.palette.PaletteEntry; +import org.eclipse.gef.palette.PaletteRoot; +import org.eclipse.gef.ui.palette.PaletteCustomizer; +import org.eclipse.gmf.runtime.gef.ui.palette.customize.PaletteCustomizerDialogEx; +import org.eclipse.jface.dialogs.IDialogConstants; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.viewers.CheckboxTableViewer; +import org.eclipse.jface.viewers.DoubleClickEvent; +import org.eclipse.jface.viewers.ICheckStateProvider; +import org.eclipse.jface.viewers.IDoubleClickListener; +import org.eclipse.jface.viewers.ILabelProvider; +import org.eclipse.jface.viewers.ILabelProviderListener; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.IStructuredContentProvider; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.jface.viewers.Viewer; +import org.eclipse.jface.wizard.WizardDialog; +import org.eclipse.papyrus.infra.core.sasheditor.editor.ISashWindowsContainer; +import org.eclipse.papyrus.uml.diagram.common.Activator; +import org.eclipse.papyrus.uml.diagram.common.Messages; +import org.eclipse.papyrus.uml.diagram.common.part.PaletteUtil; +import org.eclipse.papyrus.uml.diagram.common.part.PapyrusPaletteCustomizer; +import org.eclipse.papyrus.uml.diagram.common.part.PapyrusPalettePreferences; +import org.eclipse.papyrus.uml.diagram.common.service.PapyrusPaletteService; +import org.eclipse.papyrus.uml.diagram.common.service.PapyrusPaletteService.ExtendedProviderDescriptor; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.MouseEvent; +import org.eclipse.swt.events.MouseListener; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.layout.FormAttachment; +import org.eclipse.swt.layout.FormData; +import org.eclipse.swt.layout.FormLayout; +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.Label; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.TableItem; +import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.views.properties.tabbed.ITabbedPropertyConstants; + +/** + * Specific dialog window for the customisation of the palette. + */ +public class PapyrusPaletteCustomizerDialog extends PaletteCustomizerDialogEx implements IPreferenceChangeListener { + + /** Id for restore button of extended customization palette. */ + private static final int RESTORE_DEFAULT_PALETTE_BUTTON_ID = 23; + + /** Id for delete button of local palette. */ + private static final int DELETE_PALETTE_BUTTON_ID = 22; + + /** Id for edit button of extended and local palette. */ + private static final int EDIT_PALETTE_BUTTON_ID = 21; + + /** Id for new button to create local palette. */ + private static final int NEW_LOCAL_PALETTE_BUTTON_ID = 20; + + /** new local palette icon */ + private static final String NEW_LOCAL_DESC_IMAGE = "/icons/local_desc_new.gif"; + + /** delete palette icon */ + private static final String DELETE_LOCAL_DESC_IMAGE = "/icons/local_desc_destroy.gif"; + + /** edit palette icon */ + private static final String EDIT_LOCAL_DESC_IMAGE = "/icons/local_desc_edit.gif"; + + private static final String RESTORE_DEFAULT_DESC_IMAGE = "/icons/obj16/eraser.gif"; + + /** path to the local descriptor icon */ + protected final String LOCAL_DESCRIPTOR = "/icons/local_desc.gif"; + + /** path to the plugin descriptor icon */ + protected final String PLUGIN_DESCRIPTOR = "/icons/plugin_desc.gif"; + + /** path to the plugin descriptor icon */ + protected final String EXTENDED_PLUGIN_DESCRIPTOR = "/icons/extended_plugin_desc.gif"; + + /** viewer for the available tools */ + protected TreeViewer availableToolsTreeViewer; + + /** table viewed by the availablePalettesTreeViewer */ + protected Table availablePalettesTable; + + /** viewer for the available palettes */ + protected CheckboxTableViewer availablePalettesTableViewer; + + /** label provider for palette provider */ + protected PaletteLabelProvider providersLabelProvider; + + private Map<Integer, Button> paletteButtonsMap = new HashMap<Integer, Button>(); + + /** + * Creates a new PapyrusPaletteCustomizerDialog + * + * @param shell + * the shell that hosts the dialog window + * @param customizer + * the customizer used to customize the palette + * @param root + * the root of the palette + */ + public PapyrusPaletteCustomizerDialog(Shell shell, PaletteCustomizer customizer, PaletteRoot root) { + super(shell, customizer, root); + } + + /** + * {@inheritDoc} + */ + @Override + public int open() { + IEclipsePreferences prefs = InstanceScope.INSTANCE.getNode(Activator.ID); + prefs.addPreferenceChangeListener(this); + return super.open(); + } + + /** + * {@inheritDoc} + */ + @Override + public boolean close() { + IEclipsePreferences prefs = InstanceScope.INSTANCE.getNode(Activator.ID); + prefs.removePreferenceChangeListener(this); + return super.close(); + } + + /** + * {@inheritDoc} + */ + @Override + protected Control createDialogArea(Composite parent) { + // RS: does not call super, as the composite should not be drawn like they are in parent + Composite mainComposite = createMainComposite(parent); + + final Control availableToolsComposite = createAvailablePalettesViewer(mainComposite); + FormData data = new FormData(); + data.left = new FormAttachment(0, 0); + data.top = new FormAttachment(0, 0); + data.bottom = new FormAttachment(100, 0); + // data.right = new FormAttachment(40, 0); + availableToolsComposite.setLayoutData(data); + + // final Control displayButtons = createDisplayButtons(mainComposite); + // data = new FormData(); + // data.left = new FormAttachment(availableToolsComposite, 0); + // // data.width = 30; + // data.top = new FormAttachment(40, 0); + // data.bottom = new FormAttachment(100, 0); + // displayButtons.setLayoutData(data); + + final Label nameLabel = new Label(mainComposite, SWT.NONE); + nameLabel.setText(Messages.Palette_Viewer); + data = new FormData(); + data.left = new FormAttachment(availableToolsComposite, ITabbedPropertyConstants.HSPACE); + data.top = new FormAttachment(0, 0); + nameLabel.setLayoutData(data); + + // Create the tree + Control outline = createOutline(mainComposite); + data = new FormData(); + data.left = new FormAttachment(availableToolsComposite, ITabbedPropertyConstants.HSPACE); + data.top = new FormAttachment(nameLabel, 0); + data.bottom = new FormAttachment(100, 0); + // data.right = new FormAttachment(90, 0); + outline.setLayoutData(data); + + // Create the panel where the properties of the selected palette entry will + // be shown + Control properties = createPropertiesPanel(mainComposite); + data = new FormData(); + data.left = new FormAttachment(outline, ITabbedPropertyConstants.HSPACE); + data.right = new FormAttachment(100, 0); + data.top = new FormAttachment(0, 0); + data.bottom = new FormAttachment(100, 0); + properties.setLayoutData(data); + + // add listeners + ISelectionChangedListener listener = createSelectionChangedListener(); + if(listener != null) { + availablePalettesTableViewer.addSelectionChangedListener(listener); + } + return mainComposite; + } + + protected ISelectionChangedListener createSelectionChangedListener() { + return new ISelectionChangedListener() { + + /** + * {@inheritDoc} + */ + public void selectionChanged(SelectionChangedEvent event) { + // retrieve element selected + Object selectedElement = ((IStructuredSelection)event.getSelection()).getFirstElement(); + + if(selectedElement instanceof PapyrusPaletteService.ExtendedProviderDescriptor) { + paletteButtonsMap.get(DELETE_PALETTE_BUTTON_ID).setEnabled(false); + paletteButtonsMap.get(EDIT_PALETTE_BUTTON_ID).setEnabled(true); + paletteButtonsMap.get(RESTORE_DEFAULT_PALETTE_BUTTON_ID).setEnabled(true); + } else if(selectedElement instanceof PapyrusPaletteService.LocalProviderDescriptor) { + paletteButtonsMap.get(DELETE_PALETTE_BUTTON_ID).setEnabled(true); + paletteButtonsMap.get(EDIT_PALETTE_BUTTON_ID).setEnabled(true); + paletteButtonsMap.get(RESTORE_DEFAULT_PALETTE_BUTTON_ID).setEnabled(false); + } else { + paletteButtonsMap.get(DELETE_PALETTE_BUTTON_ID).setEnabled(false); + paletteButtonsMap.get(EDIT_PALETTE_BUTTON_ID).setEnabled(false); + paletteButtonsMap.get(RESTORE_DEFAULT_PALETTE_BUTTON_ID).setEnabled(false); + } + + // if(selectedElement instanceof PapyrusPaletteService.LocalProviderDescriptor) { + // deletePaletteButton.setEnabled(true); + // // check if the palette is in good configuration to be edited... + // if(PaletteUtil.areRequiredProfileApplied(getActiveSashPage(), (PapyrusPaletteService.LocalProviderDescriptor)selectedElement)) { + // editPaletteButton.setEnabled(true); + // editPaletteButton.setToolTipText(Messages.PapyrusPaletteCustomizerDialog_EditButtonTooltip_LocalPaletteSelected); + // } else { + // editPaletteButton.setEnabled(false); + // editPaletteButton.setToolTipText(Messages.PapyrusPaletteCustomizerDialog_EditButtonTooltip_MissingProfile); + // } + // } else { + // deletePaletteButton.setEnabled(false); + // editPaletteButton.setEnabled(false); + // editPaletteButton.setToolTipText(Messages.PapyrusPaletteCustomizerDialog_EditButtonTooltip_LocalPaletteNotSelected); + // } + } + }; + } + + protected void addEntry(MouseEvent e) { + ISelection selection = availableToolsTreeViewer.getSelection(); + PaletteEntry entry = null; + if(selection instanceof IStructuredSelection) { + Object firstElement = ((IStructuredSelection)selection).getFirstElement(); + if(!(firstElement instanceof PaletteEntry)) { + return; + } else { + entry = ((PaletteEntry)firstElement); + } + } + // sets the active entry, to have the page useful for saving modification + setActiveEntry(entry); + // add entry to the selected container + // retrieve the selection in the palette viewer + PaletteEntry destContainer = getSelectedPaletteEntry(); + ((PapyrusPaletteCustomizer)getCustomizer()).storePaletteState(entry); + if(destContainer instanceof PaletteContainer) { + PaletteContainer oldParent = entry.getParent(); + + // checks if the parent is already changed. If not, must store the standard parent (the + // one given by the factory) + PaletteContainer stdParent = ((PapyrusPaletteCustomizer)getCustomizer()).getChangedParents().get(entry); + if(stdParent == null) { + ((PapyrusPaletteCustomizer)getCustomizer()).getChangedParents().put(entry, entry.getParent()); + } + oldParent.remove(entry); + entry.setParent((PaletteContainer)destContainer); + ((PaletteContainer)destContainer).add(entry); + } else { + // add it to the palette root + PaletteRoot root = (PaletteRoot)PaletteUtil.getRoot(entry); + if(root != null) { + PaletteContainer oldParent = entry.getParent(); + PaletteContainer stdParent = ((PapyrusPaletteCustomizer)getCustomizer()).getChangedParents().get(entry); + if(stdParent == null) { + ((PapyrusPaletteCustomizer)getCustomizer()).getChangedParents().put(entry, stdParent); + } + oldParent.remove(entry); + entry.setParent(root); + root.add(entry); + } + } + } + + /** + * Creates the available palettes viewer part of the dialog. + * + * @param container + * The Composite within which the viewer has to be created + * @return The newly created Control that has the viewer + */ + protected Control createAvailablePalettesViewer(Composite container) { + // Create the Composite that will contain the available tools + Composite composite = new Composite(container, SWT.NONE); + composite.setFont(container.getFont()); + GridLayout layout = new GridLayout(5, false); + layout.horizontalSpacing = 0; + layout.verticalSpacing = 0; + layout.marginHeight = 0; + layout.marginWidth = 0; + composite.setLayout(layout); + + final Label nameLabel = new Label(composite, SWT.NONE); + nameLabel.setText(Messages.Available_Palettes); + GridData data = new GridData(SWT.FILL, SWT.CENTER, true, false); + nameLabel.setLayoutData(data); + + // Create action buttons + createEditionPaletteButton(composite, NEW_LOCAL_PALETTE_BUTTON_ID, Activator.getImage(NEW_LOCAL_DESC_IMAGE), Messages.Dialog_Create_Palette_Tooltip); + createEditionPaletteButton(composite, EDIT_PALETTE_BUTTON_ID, Activator.getImage(EDIT_LOCAL_DESC_IMAGE), Messages.Dialog_Edit_Palette_Tooltip); + createEditionPaletteButton(composite, DELETE_PALETTE_BUTTON_ID, Activator.getImage(DELETE_LOCAL_DESC_IMAGE), Messages.Dialog_Delete_Palette_Tooltip); + createEditionPaletteButton(composite, RESTORE_DEFAULT_PALETTE_BUTTON_ID, Activator.getImage(RESTORE_DEFAULT_DESC_IMAGE), Messages.Dialog_Restore_Palette_Tooltip); + + availablePalettesTable = new Table(composite, SWT.BORDER | SWT.CHECK); + availablePalettesTable.setFont(composite.getFont()); + availablePalettesTable.addSelectionListener(new SelectionListener() { + + /** + * {@inheritDoc} + */ + public void widgetSelected(SelectionEvent e) { + if(e.detail == SWT.CHECK) { + TableItem item = (TableItem)e.item; + // one item was checked => display/hide the given provider + changeProviderVisibility((PapyrusPaletteService.ProviderDescriptor)item.getData(), item.getChecked()); + } + } + + /** + * {@inheritDoc} + */ + public void widgetDefaultSelected(SelectionEvent e) { + // does nothing + } + }); + data = new GridData(GridData.FILL_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL); + data.horizontalSpan = 5; + data.widthHint = 185; + // Make the tree this tall even when there is nothing in it. This will keep the + // dialog from shrinking to an unusually small size. + data.heightHint = 200; + availablePalettesTable.setLayoutData(data); + availablePalettesTableViewer = new CheckboxTableViewer(availablePalettesTable); + AvailablePalettesCheckStateProvider availablePalettesCheckStateProvider = new AvailablePalettesCheckStateProvider(); + availablePalettesTableViewer.setCheckStateProvider(availablePalettesCheckStateProvider); + availablePalettesTableViewer.setContentProvider(new PalettesTableContentProvider(availablePalettesTableViewer)); + providersLabelProvider = new PaletteLabelProvider(availablePalettesTableViewer); + availablePalettesTableViewer.setLabelProvider(providersLabelProvider); + availablePalettesTableViewer.setInput(PapyrusPaletteService.getInstance()); + availablePalettesTableViewer.addDoubleClickListener(new IDoubleClickListener() { + + public void doubleClick(DoubleClickEvent event) { + // get selection. if local palette: open the wizard to edit this local palette + IStructuredSelection selection = (IStructuredSelection)event.getSelection(); + editSelectedPalette(selection); + } + }); + + return composite; + } + + /** + * Create button to edit palette in table. + * + * @param parentConposite + * @return + */ + protected Button createEditionPaletteButton(Composite parentConposite, int id, Image icon, String toolTip) { + Button button = new Button(parentConposite, SWT.NONE); + button.setData(new Integer(id)); + button.setImage(icon); + button.setToolTipText(toolTip); + button.addMouseListener(new MouseListener() { + + public void mouseDoubleClick(MouseEvent e) { + // Nothing to do + + } + + public void mouseDown(MouseEvent e) { + // Nothing to do + + } + + public void mouseUp(MouseEvent e) { + buttonPressed(((Integer)e.widget.getData()).intValue()); + + } + + }); + + // Register created button + paletteButtonsMap.put(new Integer(id), button); + + return button; + } + + /** + * @see org.eclipse.gef.ui.palette.customize.PaletteCustomizerDialog#buttonPressed(int) + * + * @param buttonId + */ + @Override + protected void buttonPressed(int buttonId) { + if(paletteButtonsMap.containsKey(buttonId)) { + + switch(buttonId) { + case NEW_LOCAL_PALETTE_BUTTON_ID: + createNewLocalPalette(); + break; + case EDIT_PALETTE_BUTTON_ID: + IStructuredSelection selection = getPalettesTableSelection(); + editSelectedPalette(selection); + break; + case DELETE_PALETTE_BUTTON_ID: + deleteLocalPalette(); + break; + case RESTORE_DEFAULT_PALETTE_BUTTON_ID: + restoreExtendedPaletteToDefault(); + break; + default: + break; + } + } else { + super.buttonPressed(buttonId); + } + } + + /** + * Get selection in palettes table viewer. + * + * @return The {@link IStructuredSelection} if there is one, otherwise <code>null</code> + */ + private IStructuredSelection getPalettesTableSelection() { + IStructuredSelection structuredSelection = null; + if(availablePalettesTableViewer != null) { + ISelection selection = availablePalettesTableViewer.getSelection(); + if(selection instanceof IStructuredSelection) { + structuredSelection = (IStructuredSelection)selection; + } + } + + + return structuredSelection; + } + + /** + * @see org.eclipse.jface.dialogs.Dialog#setButtonLayoutData(org.eclipse.swt.widgets.Button) + * + * @param button + */ + @Override + protected void setButtonLayoutData(Button button) { + if(paletteButtonsMap.containsValue(button)) { + GridData data = new GridData(SWT.CENTER, SWT.CENTER, false, false); + button.setLayoutData(data); + button.setEnabled(false); + } else { + super.setButtonLayoutData(button); + } + } + + /** + * Launch the wizard for the palette creation + * + * @param shell + * the shell where to display the wizard + */ + protected void createNewLocalPalette() { + NewLocalPaletteWizard wizard = new NewLocalPaletteWizard(getActiveSashPage(), getCustomizer()); + WizardDialog wizardDialog = new WizardDialog(new Shell(), wizard); + wizardDialog.open(); + } + + /** + * Deletes the current selected local palette + */ + protected void deleteLocalPalette() { + IStructuredSelection selection = (IStructuredSelection)availablePalettesTableViewer.getSelection(); + if(selection == null || !(selection.getFirstElement() instanceof PapyrusPaletteService.LocalProviderDescriptor)) { + MessageDialog.openError(getShell(), Messages.Dialog_Not_Local_Palette_Title, Messages.Dialog_Not_Local_Palette_Message); + } else { + PapyrusPaletteService.LocalProviderDescriptor descriptor = ((PapyrusPaletteService.LocalProviderDescriptor)selection.getFirstElement()); + String id = descriptor.getContributionID(); + PapyrusPalettePreferences.deleteLocalPalette(id); + } + } + + /** + * Reset the current selected extended palette to the initial configurtion in the plugin + */ + protected void restoreExtendedPaletteToDefault() { + IStructuredSelection selection = (IStructuredSelection)availablePalettesTableViewer.getSelection(); + if(selection == null || !(selection.getFirstElement() instanceof PapyrusPaletteService.ExtendedProviderDescriptor)) { + MessageDialog.openError(getShell(), Messages.Dialog_Not_Extended_Palette_Title, Messages.Dialog_Not_Extended_Palette_Message); + } else { + PapyrusPaletteService.ExtendedProviderDescriptor descriptor = ((PapyrusPaletteService.ExtendedProviderDescriptor)selection.getFirstElement()); + String id = descriptor.getContributionID(); + PapyrusPalettePreferences.unregisterLocalRedefinition(id); + } + } + + /** + * Method to launch edition dialog according to selection. + * + * @param selection + * Selection which determine kind of edition + */ + protected void editSelectedPalette(IStructuredSelection selection) { + if(selection != null) { + if((selection.getFirstElement() instanceof PapyrusPaletteService.LocalProviderDescriptor)) { + editLocalPalette((PapyrusPaletteService.LocalProviderDescriptor)selection.getFirstElement()); + } else if(selection.getFirstElement() instanceof PapyrusPaletteService.ExtendedProviderDescriptor) { + editExtendedPalette((PapyrusPaletteService.ExtendedProviderDescriptor)selection.getFirstElement()); + } + } + + } + + /** + * Edits the current selected local palette + */ + protected void editLocalPalette(PapyrusPaletteService.LocalProviderDescriptor descriptor) { + UpdateLocalPaletteWizard wizard = new UpdateLocalPaletteWizard(getActiveSashPage(), descriptor, getCustomizer()); + WizardDialog wizardDialog = new WizardDialog(new Shell(), wizard); + wizardDialog.open(); + } + + /** + * @param firstElement + */ + protected void editExtendedPalette(ExtendedProviderDescriptor descriptor) { + // check the file in plugin state area. + String contributionID = descriptor.getContributionID(); + String paletteRedefinition = PapyrusPalettePreferences.getPaletteRedefinition(contributionID); + + if(paletteRedefinition == null) { + // create a local redefinition of this palette contribution + PapyrusPalettePreferences.createPaletteRedefinition(descriptor); + } + + + UpdateExtendedPaletteWizard wizard = new UpdateExtendedPaletteWizard(getActiveSashPage(), descriptor, getCustomizer()); + WizardDialog wizardDialog = new WizardDialog(new Shell(), wizard); + wizardDialog.open(); + } + + + /** + * Changes the visibility of the given provider + * + * @param descriptor + * the provider to hide/show + * @param isChecked + * <code>true</code> if the descriptor should be visible + */ + protected void changeProviderVisibility(PapyrusPaletteService.ProviderDescriptor descriptor, boolean isChecked) { + PapyrusPalettePreferences.changePaletteVisibility(descriptor.getContributionID(), getActiveSashPage().getClass().getName(), isChecked); + } + + /** + * Creates the main composite for the dialog area + * + * @param parent + * the parent of the createrd composite + * @return the newly created Composite + */ + protected Composite createMainComposite(Composite parent) { + // dialog window + // create a composite with standard margins and spacing + Composite composite = new Composite(parent, SWT.NONE); + FormLayout layout = new FormLayout(); + layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN); + layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN); + composite.setLayout(layout); + composite.setLayoutData(new GridData(GridData.FILL_BOTH)); + applyDialogFont(composite); + return composite; + } + + /** + * Content provider for available tools viewer + */ + public class PalettesTableContentProvider implements IStructuredContentProvider { + + /** the palette root */ + private PapyrusPaletteService paletteService; + + /** tree viewer to fill */ + private final TableViewer viewer; + + /** + * Constructor + * + * @param tableViewer + * The TableViewer whose ContentProvider this PaletteTreeProvider is + */ + public PalettesTableContentProvider(TableViewer tableViewer) { + this.viewer = tableViewer; + } + + /** + * {@inheritDoc} + */ + public void dispose() { + paletteService = null; + } + + /** + * {@inheritDoc} + */ + public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { + if(newInput != null) { + paletteService = (PapyrusPaletteService)newInput; + } + } + + /** + * {@inheritDoc} + */ + public Object[] getElements(Object inputElement) { + if(inputElement instanceof PapyrusPaletteService) { + List<PapyrusPaletteService.ProviderDescriptor> providers = ((PapyrusPaletteService)inputElement).getContributingProviders(getActiveSashPage(), getPaletteRoot()); + + return providers.toArray(); + } + return null; + } + } + + /** + * Returns the current active sash page + * + * @return the current active sash page + */ + protected IEditorPart getActiveSashPage() { + // Lookup ServiceRegistry + IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); + IEditorPart editorPart = page.getActiveEditor(); + assert editorPart != null; + ISashWindowsContainer sashWindowsContainer = (ISashWindowsContainer)editorPart.getAdapter(ISashWindowsContainer.class); + if(sashWindowsContainer != null) { + return sashWindowsContainer.getActiveEditor(); + } + return null; + } + + /** + * provider in charge of the check boxes in the available palettes table viewer + */ + protected class AvailablePalettesCheckStateProvider implements ICheckStateProvider { + + /** + * {@inheritDoc} + */ + public boolean isChecked(Object element) { + if(element instanceof PapyrusPaletteService.ProviderDescriptor) { + return !PapyrusPalettePreferences.getHiddenPalettes(getActiveSashPage()).contains(((PapyrusPaletteService.ProviderDescriptor)element).getContributionID()); + } + return false; + } + + /** + * {@inheritDoc} + */ + public boolean isGrayed(Object element) { + return false; + } + + } + + /** + * Label provider for available tools viewer + */ + protected class PaletteLabelProvider implements ILabelProvider { + + /** + * Creates a new PaletteLabelProvider. + * + * @param viewer + * the table viewer where the labels are displayed + */ + public PaletteLabelProvider(TableViewer viewer) { + } + + private Map<ImageDescriptor, Image> imageCache = new HashMap<ImageDescriptor, Image>(); + + /** + * {@inheritDoc} + */ + public Image getImage(Object element) { + if(element instanceof PapyrusPaletteService.LocalProviderDescriptor) { + return Activator.getImage(LOCAL_DESCRIPTOR); + } else if(element instanceof PapyrusPaletteService.ExtendedProviderDescriptor) { + // icon should be decorated if it is already defined in a local way or not. + return Activator.getImage(EXTENDED_PLUGIN_DESCRIPTOR); + } else if(element instanceof PapyrusPaletteService.ProviderDescriptor) { + return Activator.getImage(PLUGIN_DESCRIPTOR); + } + return Activator.getImage(Activator.DEFAULT_IMAGE); + } + + /** + * {@inheritDoc} + */ + public String getText(Object element) { + if(element instanceof PapyrusPaletteService.ProviderDescriptor) { + return ((PapyrusPaletteService.ProviderDescriptor)element).getContributionName(); + } + return "<undefined>"; + } + + /** + * {@inheritDoc} + */ + public void addListener(ILabelProviderListener listener) { + } + + /** + * {@inheritDoc} + */ + public void dispose() { + Iterator<Image> images = imageCache.values().iterator(); + while(images.hasNext()) { + images.next().dispose(); + } + imageCache = null; + } + + /** + * {@inheritDoc} + */ + public boolean isLabelProperty(Object element, String property) { + return false; + } + + /** + * {@inheritDoc} + */ + public void removeListener(ILabelProviderListener listener) { + } + + } + + /** + * {@inheritDoc} + */ + public void preferenceChange(PreferenceChangeEvent event) { + String id = event.getKey(); + if(PapyrusPalettePreferences.PALETTE_CUSTOMIZATIONS_ID.equals(id) || PapyrusPalettePreferences.PALETTE_LOCAL_DEFINITIONS.equals(id)) { + // refresh available palette table viewer + availablePalettesTableViewer.setInput(PapyrusPaletteService.getInstance()); + } + + } + +} |