diff options
6 files changed, 887 insertions, 129 deletions
diff --git a/plugins/org.eclipse.sirius.diagram.ui/plugin.xml b/plugins/org.eclipse.sirius.diagram.ui/plugin.xml index 6c4d9fb250..eba7d29f27 100644 --- a/plugins/org.eclipse.sirius.diagram.ui/plugin.xml +++ b/plugins/org.eclipse.sirius.diagram.ui/plugin.xml @@ -1084,84 +1084,13 @@ point="org.eclipse.ui.menus"> <menuContribution allPopups="false" - class="org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.contributions.DistributeMenuExtensionContributionFactory" - locationURI="toolbar:org.eclipse.sirius.diagram.ui.tabbar?after=org.eclipse.sirius.diagram.ui.tabbar.arrangeselection"> - </menuContribution> - <menuContribution - allPopups="false" - class="org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.contributions.AlignMenutExtensionContributionFactory" - locationURI="toolbar:org.eclipse.sirius.diagram.ui.tabbar?after=org.eclipse.sirius.diagram.ui.tabbar.arrangeselection"> - </menuContribution> - <menuContribution - allPopups="false" - class="org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.contributions.DiagramElementPinUnPinExtensionContributionFactory" - locationURI="toolbar:org.eclipse.sirius.diagram.ui.tabbar?after=org.eclipse.sirius.diagram.ui.tabbar.hidepin"> - </menuContribution> - <menuContribution - allPopups="false" - class="org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.contributions.DiagramElementCopyExtensionContributionFactory" - locationURI="toolbar:org.eclipse.sirius.diagram.ui.tabbar?after=org.eclipse.sirius.diagram.ui.tabbar.past"> - </menuContribution> - <menuContribution - allPopups="false" class="org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.contributions.DiagramElementHideDeleteExtensionContributionFactory" - locationURI="toolbar:org.eclipse.sirius.diagram.ui.tabbar?after=org.eclipse.sirius.diagram.ui.tabbar.hidedelete"> - </menuContribution> - <menuContribution - allPopups="false" - class="org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.contributions.DiagramElementFontExtensionContributionFactory" - locationURI="toolbar:org.eclipse.sirius.diagram.ui.tabbar?after=org.eclipse.sirius.diagram.ui.tabbar.font"> - </menuContribution> - <menuContribution - allPopups="false" - class="org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.contributions.DiagramElementStyleExtensionContributionFactory" - locationURI="toolbar:org.eclipse.sirius.diagram.ui.tabbar?after=org.eclipse.sirius.diagram.ui.tabbar.style"> - </menuContribution> - <menuContribution - allPopups="false" - class="org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.contributions.DiagramElementSizeExtensionContributionFactory" - locationURI="toolbar:org.eclipse.sirius.diagram.ui.tabbar?after=org.eclipse.sirius.diagram.ui.tabbar.size"> - </menuContribution> - <menuContribution - allPopups="false" - class="org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.contributions.ArrangeAllContributionFactory" - locationURI="toolbar:org.eclipse.sirius.diagram.ui.tabbar?after=org.eclipse.sirius.diagram.ui.tabbar.arrangeselection"> - </menuContribution> - <menuContribution - allPopups="false" - class="org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.contributions.LayerFilterExtensionContributionFactory" - locationURI="toolbar:org.eclipse.sirius.diagram.ui.tabbar?after=org.eclipse.sirius.diagram.ui.tabbar.layerfilter"> - </menuContribution> - <menuContribution - allPopups="false" - class="org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.contributions.RefreshExtensionContributionFactory" - locationURI="toolbar:org.eclipse.sirius.diagram.ui.tabbar?after=org.eclipse.sirius.diagram.ui.tabbar.refresh"> - </menuContribution> - <menuContribution - allPopups="false" - class="org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.contributions.ShowHidePinUnPinExtensionContributionFactory" - locationURI="toolbar:org.eclipse.sirius.diagram.ui.tabbar?after=org.eclipse.sirius.diagram.ui.tabbar.hidepin"> - </menuContribution> - <menuContribution - allPopups="false" - class="org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.contributions.PasteExtensionContributionFactory" - locationURI="toolbar:org.eclipse.sirius.diagram.ui.tabbar?after=org.eclipse.sirius.diagram.ui.tabbar.past"> - </menuContribution> - <menuContribution - allPopups="false" - class="org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.contributions.ZoomExtensionContributionFactory" - locationURI="toolbar:org.eclipse.sirius.diagram.ui.tabbar?after=org.eclipse.sirius.diagram.ui.tabbar.zoom"> - </menuContribution> - <menuContribution - allPopups="false" - class="org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.contributions.ExportExtensionContributionFactory" - locationURI="toolbar:org.eclipse.sirius.diagram.ui.tabbar?after=org.eclipse.sirius.diagram.ui.tabbar.export"> + locationURI="toolbar:org.eclipse.sirius.diagram.ui.tabbar?after=org.eclipse.sirius.diagram.ui.tabbar.hideelement"> </menuContribution> </extension> <extension point="org.eclipse.ui.menus"> - <menuContribution locationURI="popup:org.eclipse.sirius.diagram.ui.popup.hideReveal"> <command diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/AbstractTabbarFiller.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/AbstractTabbarFiller.java index ae0edf1cb4..fc1ee641cf 100644 --- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/AbstractTabbarFiller.java +++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/AbstractTabbarFiller.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010, 2013 THALES GLOBAL SERVICES. + * Copyright (c) 2010, 2016 THALES GLOBAL SERVICES. * 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 @@ -13,6 +13,7 @@ package org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar; import org.eclipse.gmf.runtime.diagram.ui.parts.IDiagramWorkbenchPart; import org.eclipse.jface.action.Separator; import org.eclipse.jface.action.ToolBarManager; +import org.eclipse.jface.viewers.ISelection; import org.eclipse.sirius.common.tools.api.util.StringUtil; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.menus.IMenuService; @@ -53,6 +54,7 @@ public abstract class AbstractTabbarFiller implements TabbarFiller { * * @see org.eclipse.sirius.diagram.tools.internal.editor.tabbar.TabbarFiller#setPart(org.eclipse.gmf.runtime.diagram.ui.parts.IDiagramWorkbenchPart) */ + @Override public void setPart(IDiagramWorkbenchPart workbenchPart) { this.part = workbenchPart; } @@ -62,6 +64,7 @@ public abstract class AbstractTabbarFiller implements TabbarFiller { * * @see org.eclipse.sirius.diagram.tools.internal.editor.tabbar.TabbarFiller#fill() */ + @Override public void fill() { if (!isDisposed()) { doFill(); @@ -118,6 +121,15 @@ public abstract class AbstractTabbarFiller implements TabbarFiller { } /** + * Updates the tabbar according to the given selection. + * + * @param iSelection + * the current selection. + */ + protected void update(ISelection iSelection) { + } + + /** * Release the contributions. * * @see AbstractTabbarFiller#addTabbarContributions(). @@ -134,6 +146,7 @@ public abstract class AbstractTabbarFiller implements TabbarFiller { * * @see org.eclipse.sirius.diagram.tools.internal.editor.tabbar.TabbarFiller#dispose() */ + @Override public void dispose() { this.manager = null; this.page = null; diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/Tabbar.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/Tabbar.java index d92e068552..2e03f2a6ad 100644 --- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/Tabbar.java +++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/Tabbar.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010, 2015 THALES GLOBAL SERVICES. + * Copyright (c) 2010, 2016 THALES GLOBAL SERVICES. * 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 @@ -21,6 +21,7 @@ import org.eclipse.jface.action.IContributionItem; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.sirius.business.api.session.Session; import org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil; import org.eclipse.sirius.diagram.ui.tools.api.editor.DDiagramEditor; @@ -59,10 +60,12 @@ public class Tabbar extends Composite implements ISelectionListener, IAuthorityL private ToolBarManager manager; - private TabbarFiller diagramFiller; + private AbstractTabbarFiller diagramFiller; private IPermissionAuthority permissionAuthority; + private Collection<Object> currentSelection; + /** * Instantiate a new tab bar. * @@ -150,10 +153,28 @@ public class Tabbar extends Composite implements ISelectionListener, IAuthorityL return canBeDynamic; } + @SuppressWarnings("unchecked") @Override public void selectionChanged(IWorkbenchPart partSelected, ISelection selection) { - // nothing to do here. Each item contribution is now responsible for - // refresh himself when selection change. + if (!(diagramFiller instanceof TabbarFillerWithoutContributions) && partSelected == this.part) { + if (currentSelection == null || !sameSelection(selection)) { + if (selection instanceof StructuredSelection) { + currentSelection = ((StructuredSelection) selection).toList(); + } + reinitToolBar(selection); + } + } + } + + @SuppressWarnings("rawtypes") + private boolean sameSelection(ISelection selection) { + if (selection instanceof StructuredSelection) { + List newSelection = ((StructuredSelection) selection).toList(); + if (newSelection.size() == currentSelection.size()) { + return currentSelection.containsAll(newSelection); + } + } + return false; } /** @@ -163,6 +184,9 @@ public class Tabbar extends Composite implements ISelectionListener, IAuthorityL * the selection */ public void reinitToolBar(ISelection iSelection) { + if (!(diagramFiller instanceof TabbarFillerWithoutContributions)) { + diagramFiller.update(iSelection); + } updateAllItems(); } diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/TabbarFillerWithContributions.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/TabbarFillerWithContributions.java index e08114977a..78c107b113 100644 --- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/TabbarFillerWithContributions.java +++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/TabbarFillerWithContributions.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2010, 2014 THALES GLOBAL SERVICES. + * Copyright (c) 2010, 2016 THALES GLOBAL SERVICES and others. * 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 @@ -10,9 +10,22 @@ *******************************************************************************/ package org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +import org.eclipse.jface.action.IContributionItem; +import org.eclipse.jface.action.Separator; import org.eclipse.jface.action.ToolBarManager; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDDiagramEditPart; +import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.contributions.TabbarContributionFactory; import org.eclipse.ui.IWorkbenchPage; +import com.google.common.collect.Lists; + /** * Fill the toolbar when a diagram is selected. * @@ -42,50 +55,167 @@ public class TabbarFillerWithContributions extends AbstractTabbarFiller { private static final String SIZE = "org.eclipse.sirius.diagram.ui.tabbar.size"; //$NON-NLS-1$ + private List<IContributionItem> dynamicContributions = new ArrayList<IContributionItem>(); + + private ArrayList<IContributionItem> diagramContributionItems = Lists.newArrayList(); + + private ArrayList<IContributionItem> diagramElementContributionItems = Lists.newArrayList(); + + private TabbarContributionFactory contributionFactory = new TabbarContributionFactory(); + /** - * Construct a new instance. + * Default Constructor. * * @param manager - * the toolbar manager + * the {@link ToolBarManager}. * @param page - * the workbench page + * the current {@link IWorkbenchPage}. */ public TabbarFillerWithContributions(ToolBarManager manager, IWorkbenchPage page) { super(manager, page); } - /** - * {@inheritDoc} - * - * @see org.eclipse.sirius.diagram.tools.internal.editor.tabbar.AbstractTabbarFiller#doFill() - */ @Override protected void doFill() { + // Add default contributions configureGroupSeparators(); + addDiagramContributionItems(); + addDiagramElementContributionItems(); + // Add dynamic contributions + ArrayList<IContributionItem> currentContributions = new ArrayList<IContributionItem>(Arrays.asList(manager.getItems())); addTabbarContributions(); + dynamicContributions = new ArrayList<IContributionItem>(Arrays.asList(manager.getItems())); + dynamicContributions.removeAll(currentContributions); + + update(null); } + /** + * Updates the tabbar according to the given selection. + * + * @param iSelection + * the current selection. + */ @Override - public void dispose() { - releaseTabbarContributions(); + public void update(ISelection iSelection) { + List<IContributionItem> existingItems = Arrays.asList(manager.getItems()); + for (IContributionItem current : existingItems) { + if (!dynamicContributions.contains(current) && !current.isSeparator()) { + current.setVisible(false); + } + } + + List<IContributionItem> contributionItems = getContributionItems(iSelection); + for (IContributionItem item : contributionItems) { + if (existingItems.contains(item)) { + item.setVisible(true); + } + } + + manager.update(true); + } - super.dispose(); + private List<IContributionItem> getContributionItems(ISelection selection) { + List<IContributionItem> contributedItems = diagramContributionItems; + if (selection instanceof IStructuredSelection) { + Object firstElement = ((IStructuredSelection) selection).getFirstElement(); + if (!(firstElement instanceof AbstractDDiagramEditPart)) { + contributedItems = diagramElementContributionItems; + } + } + return contributedItems; } private void configureGroupSeparators() { - addSeparator(ARRANGE_SELECTION); - addSeparator(REFRESH); - addSeparator(LAYER_FILTER); - addSeparator(HIDE_PIN); - addSeparator(PAST); - addSeparator(HIDE_DELETE); - addSeparator(ZOOM); - addSeparator(EXPORT); - addSeparator(FONT); - addSeparator(STYLE); - addSeparator(SIZE); + initSeparator(ARRANGE_SELECTION); + initSeparator(REFRESH); + initSeparator(LAYER_FILTER); + initSeparator(HIDE_PIN); + initSeparator(PAST); + initSeparator(HIDE_DELETE); + initSeparator(ZOOM); + initSeparator(EXPORT); + initSeparator(FONT); + initSeparator(STYLE); + initSeparator(SIZE); + } + private void initSeparator(String name) { + IContributionItem contributionItem = new Separator(name); + manager.add(contributionItem); } + + private void addDiagramContributionItems() { + addContributionItem(diagramContributionItems, ARRANGE_SELECTION, contributionFactory.createSelectMenuManager()); + addContributionItem(diagramContributionItems, ARRANGE_SELECTION, contributionFactory.createArrangeMenuManager(part)); + + addContributionItem(diagramContributionItems, REFRESH, contributionFactory.createRefreshContribution()); + + addContributionItem(diagramContributionItems, LAYER_FILTER, contributionFactory.createConcernContribution(part)); + addContributionItem(diagramContributionItems, LAYER_FILTER, contributionFactory.createFilterContribution(part, manager)); + addContributionItem(diagramContributionItems, LAYER_FILTER, contributionFactory.createLayerContribution(part, manager)); + + addContributionItem(diagramContributionItems, HIDE_PIN, contributionFactory.createSelectPinnedElementsContribution(part)); + addContributionItem(diagramContributionItems, HIDE_PIN, contributionFactory.createSelectHiddenElementsContribution(part)); + + addContributionItem(diagramContributionItems, PAST, contributionFactory.createPasteLayoutContribution(part)); + + addContributionItem(diagramContributionItems, ZOOM, contributionFactory.createZoomContribution(part)); + addContributionItem(diagramContributionItems, ZOOM, contributionFactory.createZoomOutContribution(part)); + addContributionItem(diagramContributionItems, ZOOM, contributionFactory.createZoomInContribution(part)); + + addContributionItem(diagramContributionItems, EXPORT, contributionFactory.createLayoutingModeContributionItem(part)); + addContributionItem(diagramContributionItems, EXPORT, contributionFactory.createSaveAsImageContributionItem()); + } + + private void addContributionItem(Collection<IContributionItem> contributionItems, String separatorName, IContributionItem contributionItem) { + if (contributionItem != null) { + contributionItems.add(contributionItem); + manager.insertAfter(separatorName, contributionItem); + } + } + + private void addDiagramElementContributionItems() { + addContributionItem(diagramElementContributionItems, ARRANGE_SELECTION, contributionFactory.createDistributeContribution()); + addContributionItem(diagramElementContributionItems, ARRANGE_SELECTION, contributionFactory.createAlignMenuManager()); + addContributionItem(diagramElementContributionItems, ARRANGE_SELECTION, contributionFactory.createArrangeMenuManager(part)); + + IContributionItem pinElementContributionItem = contributionFactory.createPinElementContribution(part); + addContributionItem(diagramElementContributionItems, HIDE_PIN, contributionFactory.createUnPinElementContribution(part, pinElementContributionItem)); + addContributionItem(diagramElementContributionItems, HIDE_PIN, pinElementContributionItem); + + addContributionItem(diagramElementContributionItems, PAST, contributionFactory.createCopyLayoutContribution(part)); + + addContributionItem(diagramElementContributionItems, HIDE_DELETE, contributionFactory.createDeleteFromModelContribution(part)); + addContributionItem(diagramElementContributionItems, HIDE_DELETE, contributionFactory.createDeleteFromDiagramContribution(part)); + addContributionItem(diagramElementContributionItems, HIDE_DELETE, contributionFactory.createHideElementContribution(part)); + // The following contribution is dynamically provided because the + // default contribution does not handle visibility + // addContributionItem(diagramElementContributionItems, HIDE_DELETE, + // contributionFactory.createHideElementLabelContribution(part)); + + addContributionItem(diagramElementContributionItems, FONT, contributionFactory.createFontDialogContribution(part)); + addContributionItem(diagramElementContributionItems, FONT, contributionFactory.createFontColorContribution(part)); + addContributionItem(diagramElementContributionItems, FONT, contributionFactory.createItalicFontStyleContribution(part)); + addContributionItem(diagramElementContributionItems, FONT, contributionFactory.createBoldFontStyleContribution(part)); + + addContributionItem(diagramElementContributionItems, STYLE, contributionFactory.createCopyAppearancePropertiesContribution(part)); + addContributionItem(diagramElementContributionItems, STYLE, contributionFactory.createResetStylePropertyContribution(part)); + addContributionItem(diagramElementContributionItems, STYLE, contributionFactory.createSetStyleToWorkspaceImageContribution(part)); + addContributionItem(diagramElementContributionItems, STYLE, contributionFactory.createRouterContribution()); + addContributionItem(diagramElementContributionItems, STYLE, contributionFactory.createLineColorPropertyContribution(part)); + addContributionItem(diagramElementContributionItems, STYLE, contributionFactory.createFillColorContribution(part)); + + addContributionItem(diagramElementContributionItems, SIZE, contributionFactory.createAutoSizeContribution(part)); + addContributionItem(diagramElementContributionItems, SIZE, contributionFactory.createSizeBothContribution(part)); + } + + @Override + public void dispose() { + releaseTabbarContributions(); + super.dispose(); + } + } diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/contributions/DiagramElementHideDeleteExtensionContributionFactory.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/contributions/DiagramElementHideDeleteExtensionContributionFactory.java index 607e040fc1..5213b2e4f7 100644 --- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/contributions/DiagramElementHideDeleteExtensionContributionFactory.java +++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/contributions/DiagramElementHideDeleteExtensionContributionFactory.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2012, 2015 THALES GLOBAL SERVICES and others. + * Copyright (c) 2012, 2016 THALES GLOBAL SERVICES and others. * 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 @@ -10,18 +10,8 @@ *******************************************************************************/ package org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.contributions; -import org.eclipse.gmf.runtime.diagram.ui.actions.ActionIds; -import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramUIMessages; -import org.eclipse.jface.action.ActionContributionItem; import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.sirius.diagram.ui.part.SiriusDiagramActionBarContributor; -import org.eclipse.sirius.diagram.ui.provider.DiagramUIPlugin; -import org.eclipse.sirius.diagram.ui.tools.api.image.DiagramImagesPath; -import org.eclipse.sirius.diagram.ui.tools.internal.actions.delete.DeleteFromDiagramAction; -import org.eclipse.sirius.diagram.ui.tools.internal.actions.delete.DeleteFromModelWithHookAction; -import org.eclipse.sirius.diagram.ui.tools.internal.actions.visibility.HideDDiagramElementAction; import org.eclipse.sirius.diagram.ui.tools.internal.actions.visibility.HideDDiagramElementLabelAction; -import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.actions.DiagramActionContributionItem; import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.actions.HideDDiagramElementLabelActionContributionItem; import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.contributions.expressions.DDiagramElementTabbarExpression; import org.eclipse.ui.menus.IContributionRoot; @@ -37,25 +27,7 @@ public class DiagramElementHideDeleteExtensionContributionFactory extends Sirius @Override public void createContributionItems(IServiceLocator serviceLocator, IContributionRoot additions) { - - super.createContributionItems(serviceLocator, additions); - - HideDDiagramElementAction hideDDiagramElementAction = new HideDDiagramElementAction(SiriusDiagramActionBarContributor.HIDE_ELEMENT); - hideDDiagramElementAction.setEnabled(canEdit()); - hideDDiagramElementAction.setActionPart(getPart()); - additions.addContributionItem(new ActionContributionItem(hideDDiagramElementAction), new DDiagramElementTabbarExpression()); - createHideDDiagramElementLabelMenu(additions); - - DeleteFromDiagramAction deleteFromDiagramAction = new DeleteFromDiagramAction(DiagramUIMessages.DiagramEditor_Delete_from_Diagram, SiriusDiagramActionBarContributor.DELETE_FROM_DIAGRAM, - ActionIds.ACTION_DELETE_FROM_DIAGRAM, DiagramUIPlugin.Implementation.getBundledImageDescriptor(DiagramImagesPath.DELETE_FROM_DIAGRAM_ICON)); - additions.addContributionItem(new TabbarActionContributionItem(deleteFromDiagramAction, getPart()), new DDiagramElementTabbarExpression()); - - final DeleteFromModelWithHookAction deleteFromModelAction = new DeleteFromModelWithHookAction(getPage(), getPart()); - deleteFromModelAction.init(); - - additions.addContributionItem(new DiagramActionContributionItem(deleteFromModelAction), new DDiagramElementTabbarExpression()); - } /** diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/contributions/TabbarContributionFactory.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/contributions/TabbarContributionFactory.java new file mode 100644 index 0000000000..06266e1bdc --- /dev/null +++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/contributions/TabbarContributionFactory.java @@ -0,0 +1,690 @@ +/******************************************************************************* + * Copyright (c) 2016 Obeo. + * 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: + * Obeo - initial API and implementation + *******************************************************************************/ +package org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.contributions; + +import org.eclipse.gef.ui.actions.ZoomComboContributionItem; +import org.eclipse.gmf.runtime.diagram.ui.actions.ActionIds; +import org.eclipse.gmf.runtime.diagram.ui.actions.internal.AutoSizeAction; +import org.eclipse.gmf.runtime.diagram.ui.actions.internal.CopyAppearancePropertiesAction; +import org.eclipse.gmf.runtime.diagram.ui.actions.internal.FontDialogAction; +import org.eclipse.gmf.runtime.diagram.ui.actions.internal.FontStyleAction; +import org.eclipse.gmf.runtime.diagram.ui.internal.l10n.DiagramUIPluginImages; +import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramUIMessages; +import org.eclipse.gmf.runtime.diagram.ui.parts.IDiagramWorkbenchPart; +import org.eclipse.jface.action.ActionContributionItem; +import org.eclipse.jface.action.ContributionItem; +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.action.IContributionItem; +import org.eclipse.jface.action.ToolBarManager; +import org.eclipse.sirius.diagram.DDiagram; +import org.eclipse.sirius.diagram.description.DiagramDescription; +import org.eclipse.sirius.diagram.ui.part.SiriusDiagramActionBarContributor; +import org.eclipse.sirius.diagram.ui.provider.DiagramUIPlugin; +import org.eclipse.sirius.diagram.ui.tools.api.action.ConcernComboContributionItem; +import org.eclipse.sirius.diagram.ui.tools.api.editor.DDiagramEditor; +import org.eclipse.sirius.diagram.ui.tools.api.image.DiagramImagesPath; +import org.eclipse.sirius.diagram.ui.tools.internal.actions.SaveAsImageFileAction; +import org.eclipse.sirius.diagram.ui.tools.internal.actions.SelectHiddenElementsAction; +import org.eclipse.sirius.diagram.ui.tools.internal.actions.SelectPinnedElementsAction; +import org.eclipse.sirius.diagram.ui.tools.internal.actions.SizeBothAction; +import org.eclipse.sirius.diagram.ui.tools.internal.actions.delete.DeleteFromDiagramAction; +import org.eclipse.sirius.diagram.ui.tools.internal.actions.delete.DeleteFromModelWithHookAction; +import org.eclipse.sirius.diagram.ui.tools.internal.actions.layout.CopyLayoutAction; +import org.eclipse.sirius.diagram.ui.tools.internal.actions.layout.PasteLayoutAction; +import org.eclipse.sirius.diagram.ui.tools.internal.actions.refresh.RefreshDiagramAction; +import org.eclipse.sirius.diagram.ui.tools.internal.actions.style.ResetStylePropertiesToDefaultValuesAction; +import org.eclipse.sirius.diagram.ui.tools.internal.actions.style.SetStyleToWorkspaceImageAction; +import org.eclipse.sirius.diagram.ui.tools.internal.actions.visibility.HideDDiagramElementAction; +import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.FiltersContributionItem; +import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.LayersContribution; +import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.LayoutingModeSwitchingAction; +import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.actions.DiagramActionContributionItem; +import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.actions.HideDDiagramElementLabelActionContributionItem; +import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.actions.TabbarAlignMenuManager; +import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.actions.TabbarArrangeMenuManager; +import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.actions.TabbarColorPropertyContributionItem; +import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.actions.TabbarDistributeMenuManager; +import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.actions.TabbarPinElementsEclipseAction; +import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.actions.TabbarRouterMenuManager; +import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.actions.TabbarSelectMenuManager; +import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.actions.TabbarUnpinElementsEclipseAction; +import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.actions.TabbarZoomAction; +import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.actions.TabbarZoomInAction; +import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.actions.TabbarZoomOutAction; +import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.contributions.SiriusTabbarExtensionContributionFactory.TabbarActionContributionItem; +import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.contributions.ZoomExtensionContributionFactory.ZoomContributionItem; +import org.eclipse.swt.widgets.ToolBar; +import org.eclipse.swt.widgets.ToolItem; +import org.eclipse.ui.IWorkbenchPartSite; + +/** + * Factory for tabbar {@link IContributionItem}. + * + * @author lfasani + */ +public class TabbarContributionFactory { + + private static final String HIDE_ELEMENT_ID = "org.eclipse.sirius.diagram.ui.tabbar.hideelement"; //$NON-NLS-1$ + + /** + * Creates the Automatic Layout contribution item. Organized in a drop-down + * menu, this item is used to trigger an automatic layout of the elements on + * the diagram. + * + * @param part + * the current IDiagramWorkbenchPart. + * @return the {@link IContributionItem}. + */ + public IContributionItem createArrangeMenuManager(IDiagramWorkbenchPart part) { + TabbarArrangeMenuManager arrangeMenu = new TabbarArrangeMenuManager(part); + arrangeMenu.setVisible(true); + return arrangeMenu; + } + + /** + * Creates the Select menu manager contribution item. Organized in a + * drop-down menu, can be used to select groups of diagram elements in a + * single operation. + * + * @return the {@link IContributionItem}. + */ + public IContributionItem createSelectMenuManager() { + TabbarSelectMenuManager selectMenu = new TabbarSelectMenuManager(); + selectMenu.setVisible(true); + return selectMenu; + } + + /** + * Creates the Alignment contribution item. This menu contains several + * operations which can be used to align several graphical elements in + * various ways. + * + * @return the {@link IContributionItem}. + */ + public IContributionItem createAlignMenuManager() { + TabbarAlignMenuManager alignMenu = new TabbarAlignMenuManager(); + alignMenu.setVisible(true); + return alignMenu; + } + + /** + * Creates the Layer Selection contribution item. + * + * @param part + * the diagram workbench part. + * @param manager + * the toolbar manager. + * + * @return the {@link IContributionItem}. + */ + public IContributionItem createLayerContribution(IDiagramWorkbenchPart part, ToolBarManager manager) { + LayersContribution layersContribution = new LayersContribution(); + ContributionItem layerItem = layersContribution.createContributionItem(manager); + layersContribution.setPart(part); + return layerItem; + } + + /** + * Creates the Filter Selection contribution item. + * + * @param part + * the diagram workbench part. + * @param manager + * the toolbar manager. + * @return the {@link IContributionItem}. + */ + public IContributionItem createFilterContribution(IDiagramWorkbenchPart part, ToolBarManager manager) { + FiltersContributionItem filtersContribution = new FiltersContributionItem(); + ContributionItem filterItem = filtersContribution.createContributionItem(manager); + filtersContribution.setPart(part); + return filterItem; + } + + /** + * Creates the Concern Selection contribution item, if needed. + * + * @param part + * the diagram workbench part. + * @return the {@link IContributionItem} or null of it is not needed. + */ + public IContributionItem createConcernContribution(IDiagramWorkbenchPart part) { + if (part instanceof DDiagramEditor) { + final DDiagram editorDiagram = (DDiagram) ((DDiagramEditor) part).getRepresentation(); + DiagramDescription description = null; + if (editorDiagram != null) { + description = editorDiagram.getDescription(); + } + + if (description != null) { + IWorkbenchPartSite site = part.getSite(); + if (site != null) { + return createConcernItem(editorDiagram, description, site); + } + } + } + return null; + } + + private IContributionItem createConcernItem(final DDiagram diagram, final DiagramDescription description, IWorkbenchPartSite site) { + if (description.getConcerns() != null && !description.getConcerns().getOwnedConcernDescriptions().isEmpty() && description.getConcerns().getOwnedConcernDescriptions().size() != 1) { + ConcernComboContributionItem item = new ConcernComboContributionItem(site.getPage(), ""); //$NON-NLS-1$ + if (diagram != null) { + item.setDiagram(diagram); + } + return item; + } + return null; + } + + /** + * Creates the Select Hidden Elements contribution item. + * + * @param part + * the current IDiagramWorkbenchPart. + * @return the {@link IContributionItem} or null if the workbench part is + * being initialized. + */ + public IContributionItem createSelectHiddenElementsContribution(IDiagramWorkbenchPart part) { + IWorkbenchPartSite site = part.getSite(); + if (site != null) { + SelectHiddenElementsAction selectHiddenElementsAction = new SelectHiddenElementsAction(site.getPage(), part); + return new DiagramActionContributionItem(selectHiddenElementsAction); + } + return null; + } + + /** + * Creates the Hide Element contribution item. This button hides all the + * selected elements from view. + * + * @param part + * the current IDiagramWorkbenchPart. + * @return the {@link IContributionItem}. + */ + public IContributionItem createHideElementContribution(IDiagramWorkbenchPart part) { + HideDDiagramElementAction hideDDiagramElementAction = new HideDDiagramElementAction(SiriusDiagramActionBarContributor.HIDE_ELEMENT); + hideDDiagramElementAction.setActionPart(part); + TabbarActionContributionItem tabbarActionContributionItem = new TabbarActionContributionItem(hideDDiagramElementAction, part); + tabbarActionContributionItem.setId(HIDE_ELEMENT_ID); + return tabbarActionContributionItem; + } + + /** + * Creates the Hide Element Label contribution item. This button hides the + * label of the selected elements. + * + * @param part + * the current IDiagramWorkbenchPart. + * @return the {@link IContributionItem}. + */ + public IContributionItem createHideElementLabelContribution(IDiagramWorkbenchPart part) { + HideDDiagramElementLabelActionContributionItem contributionItem = new HideDDiagramElementLabelActionContributionItem(part); + return contributionItem; + } + + /** + * Creates the Delete From Diagram contribution item. This action removes + * the selected graphical element from the diagram, but does not delete the + * corresponding semantic elements. + * + * @param part + * the current IDiagramWorkbenchPart. + * @return the {@link IContributionItem}. + */ + public IContributionItem createDeleteFromDiagramContribution(IDiagramWorkbenchPart part) { + DeleteFromDiagramAction deleteFromDiagramAction = new DeleteFromDiagramAction(DiagramUIMessages.DiagramEditor_Delete_from_Diagram, SiriusDiagramActionBarContributor.DELETE_FROM_DIAGRAM, + ActionIds.ACTION_DELETE_FROM_DIAGRAM, DiagramUIPlugin.Implementation.getBundledImageDescriptor(DiagramImagesPath.DELETE_FROM_DIAGRAM_ICON)); + return new TabbarActionContributionItem(deleteFromDiagramAction, part); + } + + /** + * Creates the Delete From Model contribution item. This action removes both + * the selected graphical element and the corresponding semantic elements. + * + * @param part + * the current IDiagramWorkbenchPart. + * @return the {@link IContributionItem} or null if the workbench part is + * being initialized. + */ + public IContributionItem createDeleteFromModelContribution(IDiagramWorkbenchPart part) { + IWorkbenchPartSite site = part.getSite(); + if (site != null) { + DeleteFromModelWithHookAction deleteFromModelAction = new DeleteFromModelWithHookAction(site.getPage(), part); + deleteFromModelAction.init(); + return new DiagramActionContributionItem(deleteFromModelAction); + } + return null; + } + + /** + * Creates the Select Pinned elements contribution item. + * + * @param part + * the current IDiagramWorkbenchPart. + * @return the {@link IContributionItem} or null if the workbench part is + * being initialized. + */ + public IContributionItem createSelectPinnedElementsContribution(IDiagramWorkbenchPart part) { + IWorkbenchPartSite site = part.getSite(); + if (site != null) { + SelectPinnedElementsAction pinnedElementsAction = new SelectPinnedElementsAction(site.getPage(), part); + + return new DiagramActionContributionItem(pinnedElementsAction); + } + return null; + } + + /** + * Creates the Pin element contribution item. Mark all the selected elements + * as pinned. + * + * @param part + * the current IDiagramWorkbenchPart. + * @return the {@link IContributionItem}. + */ + public IContributionItem createPinElementContribution(IDiagramWorkbenchPart part) { + TabbarPinElementsEclipseAction pinAction = new TabbarPinElementsEclipseAction(); + return new TabbarActionContributionItem(pinAction, part); + } + + /** + * Creates the Unpin element contribution item. Mark all the selected + * elements as un-pinned. + * + * @param part + * the current IDiagramWorkbenchPart. + * @param pinElementContributionItem + * the opposite pin contribution item. Can be null. + * @return the {@link IContributionItem}. + */ + public IContributionItem createUnPinElementContribution(IDiagramWorkbenchPart part, IContributionItem pinElementContributionItem) { + + TabbarUnpinElementsEclipseAction unpinAction = new TabbarUnpinElementsEclipseAction(); + if (pinElementContributionItem instanceof TabbarActionContributionItem) { + IAction pinAction = ((TabbarActionContributionItem) pinElementContributionItem).getAction(); + if (pinAction instanceof TabbarPinElementsEclipseAction) { + ((TabbarPinElementsEclipseAction) pinAction).setOppositePinAction(unpinAction); + } + unpinAction.setOppositePinAction(pinAction); + } + return new TabbarActionContributionItem(unpinAction, part); + } + + /** + * Creates the Zoom combo contribution item. + * + * @param part + * the current IDiagramWorkbenchPart. + * @return the {@link IContributionItem} or null if the workbench part is + * being initialized. + */ + public IContributionItem createZoomContribution(IDiagramWorkbenchPart part) { + IWorkbenchPartSite site = part.getSite(); + if (site != null) { + ZoomComboContributionItem zoomItem = new ZoomComboContributionItem(site.getPage()) { + + @Override + public void fill(ToolBar parent, int index) { + super.fill(parent, index); + ToolItem addedItem = parent.getItem(parent.getItemCount() - 1); + addedItem.setToolTipText(DiagramUIMessages.ZoomActionMenu_ZoomLabel); + } + + }; + return zoomItem; + } + return null; + } + + /** + * Creates the Zoom-in contribution item. + * + * @param part + * the current IDiagramWorkbenchPart. + * @return the {@link IContributionItem} or null if the workbench part is + * being initialized. + */ + public IContributionItem createZoomInContribution(IDiagramWorkbenchPart part) { + IWorkbenchPartSite site = part.getSite(); + if (site != null) { + TabbarZoomAction zoomIn = new TabbarZoomInAction(); + zoomIn.setImageDescriptor(DiagramUIPluginImages.DESC_ZOOM_IN); + zoomIn.setText(DiagramUIMessages.ZoomAction_ZoomIn); + return new ZoomContributionItem(zoomIn, site.getPage()); + } + return null; + } + + /** + * Creates the Zoom-out contribution item. + * + * @param part + * the current IDiagramWorkbenchPart. + * @return the {@link IContributionItem} or null if the workbench part is + * being initialized. + */ + public IContributionItem createZoomOutContribution(IDiagramWorkbenchPart part) { + IWorkbenchPartSite site = part.getSite(); + if (site != null) { + TabbarZoomAction zoomOut = new TabbarZoomOutAction(); + zoomOut.setImageDescriptor(DiagramUIPluginImages.DESC_ZOOM_OUT); + zoomOut.setText(DiagramUIMessages.ZoomAction_ZoomOut); + return new ZoomContributionItem(zoomOut, site.getPage()); + } + return null; + } + + /** + * Creates the Font Color contribution item. + * + * @param part + * the current IDiagramWorkbenchPart. + * @return the {@link IContributionItem} or null if the workbench part is + * being initialized. + */ + public IContributionItem createFontColorContribution(IDiagramWorkbenchPart part) { + IWorkbenchPartSite site = part.getSite(); + if (site != null) { + TabbarColorPropertyContributionItem fontColorMenu = TabbarColorPropertyContributionItem.createFontColorContributionItem(site.getPage()); + fontColorMenu.setActionWorkbenchPart(part); + return fontColorMenu; + } + return null; + } + + /** + * Creates the Bold font contribution item. + * + * @param part + * the current IDiagramWorkbenchPart. + * @return the {@link IContributionItem} or null if the workbench part is + * being initialized. + */ + public IContributionItem createBoldFontStyleContribution(IDiagramWorkbenchPart part) { + IWorkbenchPartSite site = part.getSite(); + if (site != null) { + FontStyleAction fontStyleBoldAction = FontStyleAction.createBoldFontStyleAction(site.getPage()); + return new ActionContributionItem(fontStyleBoldAction); + } + return null; + } + + /** + * Creates the Italic font contribution item. + * + * @param part + * the current IDiagramWorkbenchPart. + * @return the {@link IContributionItem} or null if the workbench part is + * being initialized. + */ + public IContributionItem createItalicFontStyleContribution(IDiagramWorkbenchPart part) { + IWorkbenchPartSite site = part.getSite(); + if (site != null) { + FontStyleAction fontStyleItalicAction = FontStyleAction.createItalicFontStyleAction(site.getPage()); + return new ActionContributionItem(fontStyleItalicAction); + } + return null; + } + + /** + * Creates the Font dialog contribution item. + * + * @param part + * the current IDiagramWorkbenchPart. + * @return the {@link IContributionItem} or null if the workbench part is + * being initialized. + */ + public IContributionItem createFontDialogContribution(IDiagramWorkbenchPart part) { + IWorkbenchPartSite site = part.getSite(); + if (site != null) { + IAction fontDialogAction = new FontDialogAction(site.getPage()); + fontDialogAction.setImageDescriptor(DiagramUIPlugin.Implementation.getBundledImageDescriptor(DiagramImagesPath.FONT_WIZARD)); + return new ActionContributionItem(fontDialogAction); + } + return null; + } + + /** + * Creates the Fill Color contribution item. + * + * @param part + * the current IDiagramWorkbenchPart. + * @return the {@link IContributionItem} or null if the workbench part is + * being initialized. + */ + public IContributionItem createFillColorContribution(IDiagramWorkbenchPart part) { + IWorkbenchPartSite site = part.getSite(); + if (site != null) { + TabbarColorPropertyContributionItem fillColorMenu = TabbarColorPropertyContributionItem.createFillColorContributionItem(site.getPage()); + fillColorMenu.setActionWorkbenchPart(part); + return fillColorMenu; + } + return null; + } + + /** + * Creates the Line Color contribution item. + * + * @param part + * the current IDiagramWorkbenchPart. + * @return the {@link IContributionItem} or null if the workbench part is + * being initialized. + */ + public IContributionItem createLineColorPropertyContribution(IDiagramWorkbenchPart part) { + IWorkbenchPartSite site = part.getSite(); + if (site != null) { + TabbarColorPropertyContributionItem lineColorMenu = TabbarColorPropertyContributionItem.createLineColorContributionItem(site.getPage()); + lineColorMenu.setActionWorkbenchPart(part); + return lineColorMenu; + } + return null; + } + + /** + * Creates the Cancel Custom Style contribution item. The Cancel Custom + * Style button resets all the style attributes of an element to its default + * values and un-marks it as customized. + * + * @param part + * the current IDiagramWorkbenchPart. + * @return the {@link IContributionItem} or null if the workbench part is + * being initialized. + */ + public IContributionItem createResetStylePropertyContribution(IDiagramWorkbenchPart part) { + IWorkbenchPartSite site = part.getSite(); + if (site != null) { + ResetStylePropertiesToDefaultValuesAction resetStylePropertiesToDefaultValuesAction = new ResetStylePropertiesToDefaultValuesAction(site.getPage()); + return new TabbarActionContributionItem(resetStylePropertiesToDefaultValuesAction, part); + } + return null; + } + + /** + * Creates the set style to workspace image contribution item. The Workspace + * image button can be used to replace the graphical representation of an + * element by an image that you can select from anywhere in your Eclipse + * workspace. + * + * @param part + * the current IDiagramWorkbenchPart. + * @return the {@link IContributionItem}. + */ + public IContributionItem createSetStyleToWorkspaceImageContribution(IDiagramWorkbenchPart part) { + return new TabbarActionContributionItem(new SetStyleToWorkspaceImageAction(), part); + } + + /** + * Creates the Distribute menu contribution item. This menu contains several + * actions which can be used to distribute the selected diagram elements + * horizontally/vertically with a same space between their centers or their + * bounds. + * + * @return the {@link IContributionItem}. + */ + public IContributionItem createDistributeContribution() { + TabbarDistributeMenuManager distributeMenu = new TabbarDistributeMenuManager(); + return distributeMenu; + } + + /** + * Creates the Export As Image contribution item.This button can be used to + * export the current diagram as an image file stored on disk. + * + * @return the {@link IContributionItem}. + */ + public IContributionItem createSaveAsImageContributionItem() { + SaveAsImageFileAction saveAsImageFileAction = new SaveAsImageFileAction(); + return new ActionContributionItem(saveAsImageFileAction); + } + + /** + * Creates the Layout Mode contribution item. This button enables a special + * "layout mode", in which some operations are prevented from having an + * effect on the semantic model. + * + * @param part + * the current IDiagramWorkbenchPart. + * @return the {@link IContributionItem} or null if the workbench part is + * being initialized or if the diagram doesn't allow the layouting + * mode. + */ + public IContributionItem createLayoutingModeContributionItem(IDiagramWorkbenchPart part) { + IWorkbenchPartSite site = part.getSite(); + if (site != null && part instanceof DDiagramEditor) { + final DDiagramEditor editor = (DDiagramEditor) part; + DDiagram editorDiagram = (DDiagram) editor.getRepresentation(); + if (LayoutingModeSwitchingAction.diagramAllowsLayoutingMode(editorDiagram)) { + LayoutingModeSwitchingAction layoutingModeSwitchingAction = new LayoutingModeSwitchingAction(site.getPage(), editorDiagram); + return new TabbarActionContributionItem(layoutingModeSwitchingAction); + } + } + return null; + } + + /** + * Creates the Router contribution item. This action allows changing the + * line style of edges (Rectilinear, Oblique, Tree) + * + * @return the {@link IContributionItem}. + */ + public IContributionItem createRouterContribution() { + TabbarRouterMenuManager routerMenu = new TabbarRouterMenuManager(); + routerMenu.setVisible(true); + return routerMenu; + } + + /** + * Creates the Apply Style contribution item. Use this button to reproduce + * the visual style of an element onto others. + * + * @param part + * the current IDiagramWorkbenchPart. + * @return the {@link IContributionItem} or null if the workbench part is + * being initialized. + */ + public IContributionItem createCopyAppearancePropertiesContribution(IDiagramWorkbenchPart part) { + IWorkbenchPartSite site = part.getSite(); + if (site != null) { + CopyAppearancePropertiesAction copyAppearancePropertiesAction = new CopyAppearancePropertiesAction(site.getPage()); + return new ActionContributionItem(copyAppearancePropertiesAction); + } + return null; + } + + /** + * Creates the copy layout contribution item. This tool can be used to + * duplicate the layout of some diagram elements from this diagram into + * another. + * + * @param part + * the current IDiagramWorkbenchPart. + * @return the {@link IContributionItem} or null if the workbench part is + * being initialized. + */ + public IContributionItem createCopyLayoutContribution(IDiagramWorkbenchPart part) { + IWorkbenchPartSite site = part.getSite(); + if (site != null) { + CopyLayoutAction copyLayoutAction = new CopyLayoutAction(site.getPage(), part); + return new ActionContributionItem(copyLayoutAction); + } + return null; + } + + /** + * Creates the Paste Layout contribution item. + * + * @param part + * the current IDiagramWorkbenchPart. + * @return the {@link IContributionItem} or null if the workbench part is + * being initialized. + */ + public IContributionItem createPasteLayoutContribution(IDiagramWorkbenchPart part) { + IWorkbenchPartSite site = part.getSite(); + if (site != null) { + PasteLayoutAction pasteLayoutAction = new PasteLayoutAction(site.getPage(), part); + return new ActionContributionItem(pasteLayoutAction); + } + return null; + } + + /** + * Creates the Refresh action contribution item. This operation, which can + * also be invoked with the F5 keyboard shortcut, will force an update of + * the diagram's content according to the latest version of the underlying + * semantic model. + * + * @return the {@link IContributionItem}. + */ + public IContributionItem createRefreshContribution() { + RefreshDiagramAction action = new RefreshDiagramAction(SiriusDiagramActionBarContributor.REFRESH_DIAGRAM, + DiagramUIPlugin.Implementation.getBundledImageDescriptor(DiagramImagesPath.REFRESH_IMG)); + return new ActionContributionItem(action); + } + + /** + * Creates the Make Same Size contribution item. When multiple elements are + * selected, clicking on this tool will resize all of them to have the same + * size (both width and height). + * + * @param part + * the current IDiagramWorkbenchPart. + * @return the {@link IContributionItem} or null if the workbench part is + * being initialized. + */ + public IContributionItem createSizeBothContribution(IDiagramWorkbenchPart part) { + IWorkbenchPartSite site = part.getSite(); + if (site != null) { + SizeBothAction sizeBothAction = new SizeBothAction(site.getPage()); + sizeBothAction.init(); + return new ActionContributionItem(sizeBothAction); + } + return null; + } + + /** + * Creates the Auto-Size contribution item. This button marks the selected + * elements as auto-sized. + * + * @param part + * the current IDiagramWorkbenchPart. + * @return the {@link IContributionItem} or null if the workbench part is + * being initialized. + */ + public IContributionItem createAutoSizeContribution(IDiagramWorkbenchPart part) { + IWorkbenchPartSite site = part.getSite(); + if (site != null) { + AutoSizeAction autoSizeAction = new AutoSizeAction(site.getPage()); + return new ActionContributionItem(autoSizeAction); + } + return null; + } + +} |