diff options
| author | Maxime Porhel | 2015-08-20 14:55:43 +0000 |
|---|---|---|
| committer | Maxime Porhel | 2015-08-21 06:50:42 +0000 |
| commit | e39e29e9bd31406136f44aecc0587c4f926c2527 (patch) | |
| tree | 04c0f233a7f938ef132b40413c33c140b4dc9f75 | |
| parent | c4bfa13be645b1f3154f1e4e2439216b7b9dfb51 (diff) | |
| download | org.eclipse.sirius-e39e29e9bd31406136f44aecc0587c4f926c2527.tar.gz org.eclipse.sirius-e39e29e9bd31406136f44aecc0587c4f926c2527.tar.xz org.eclipse.sirius-e39e29e9bd31406136f44aecc0587c4f926c2527.zip | |
[470859] Disable the make same size action for Region(Container)s
Also check can edit instance in calculate enable.
Bug: 470859
Change-Id: Ia2fad139e1a38134ae534c8e369ca764c8c53ee4
Signed-off-by: Maxime Porhel <maxime.porhel@obeo.fr>
5 files changed, 95 insertions, 12 deletions
diff --git a/plugins/org.eclipse.sirius.diagram.ui/plugin.xml b/plugins/org.eclipse.sirius.diagram.ui/plugin.xml index 66e69742ce..2f8d4b66a0 100644 --- a/plugins/org.eclipse.sirius.diagram.ui/plugin.xml +++ b/plugins/org.eclipse.sirius.diagram.ui/plugin.xml @@ -113,16 +113,6 @@ <contributionItemProvider class="org.eclipse.gmf.runtime.diagram.ui.providers.DiagramContributionItemProvider" checkPluginLoaded="false"> <Priority name="Low"> </Priority> - <partContribution id="org.eclipse.sirius.diagram.ui.part.SiriusDiagramEditorID"> - <partAction menubarPath="/diagramMenu/sizeGroup" toolbarPath="/toolbarFormatGroup" id="makeSameSizeBothAction"> - </partAction> - </partContribution> - <popupContribution class="org.eclipse.sirius.diagram.ui.tools.internal.menu.DiagramEditorContextMenuProvider"> - <popupAction - id="makeSameSizeBothAction" - path="/formatMenu/sizeGroup"> - </popupAction> - </popupContribution> </contributionItemProvider> <?gmfgen generated="true"?> <contributionItemProvider class="org.eclipse.sirius.diagram.ui.internal.providers.SiriusContributionItemProvider"> @@ -144,6 +134,11 @@ <partAction menubarPath="/diagramMenu/distributeMenu/distributeHorizontalGroup" id="distributeCentersHorizontally"/> <partAction menubarPath="/diagramMenu/distributeMenu/distributeVerticalGroup" id="distributeGapsVertically"/> <partAction menubarPath="/diagramMenu/distributeMenu/distributeVerticalGroup" id="distributeCentersVertically"/> + <partAction + id="makeSameSizeBothAction" + menubarPath="/diagramMenu/sizeGroup" + toolbarPath="/toolbarFormatGroup"> + </partAction> </partContribution> <popupContribution class="org.eclipse.sirius.diagram.ui.tools.internal.menu.DiagramEditorContextMenuProvider"> @@ -165,6 +160,10 @@ <popupAction path="/formatMenu/distributeMenu/distributeHorizontalGroup" id="distributeCentersHorizontally"/> <popupAction path="/formatMenu/distributeMenu/distributeVerticalGroup" id="distributeGapsVertically"/> <popupAction path="/formatMenu/distributeMenu/distributeVerticalGroup" id="distributeCentersVertically"/> + <popupAction + id="makeSameSizeBothAction" + path="/formatMenu/sizeGroup"> + </popupAction> </popupContribution> <popupContribution class="org.eclipse.sirius.diagram.ui.tools.internal.menu.DiagramEditorContextMenuProvider"> diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/providers/SiriusContributionItemProvider.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/providers/SiriusContributionItemProvider.java index 0c54fe1d37..ab26cf5aea 100644 --- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/providers/SiriusContributionItemProvider.java +++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/providers/SiriusContributionItemProvider.java @@ -19,6 +19,7 @@ import org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds; import org.eclipse.sirius.diagram.ui.tools.internal.actions.DeselectAllAction; 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.SizeBothAction; import org.eclipse.sirius.diagram.ui.tools.internal.actions.TabbarRouterAction; import org.eclipse.sirius.diagram.ui.tools.internal.actions.distribute.DistributeAction; import org.eclipse.sirius.diagram.ui.tools.internal.actions.layout.ArrangeBorderNodesAction; @@ -39,6 +40,7 @@ public class SiriusContributionItemProvider extends AbstractContributionItemProv /** * @was-generated NOT */ + @Override protected IAction createAction(final String actionId, final IWorkbenchPartDescriptor partDescriptor) { IAction result; final IWorkbenchPage workbenchPage = partDescriptor.getPartPage(); @@ -75,6 +77,8 @@ public class SiriusContributionItemProvider extends AbstractContributionItemProv result = DistributeAction.createDistributeVerticallyWithUniformGapsAction(workbenchPage, false); } else if (ActionIds.DISTRIBUTE_CENTERS_VERTICALLY.equals(actionId)) { result = DistributeAction.createDistributeCentersVerticallyAction(workbenchPage, false); + } else if (org.eclipse.gmf.runtime.diagram.ui.actions.ActionIds.ACTION_MAKE_SAME_SIZE_BOTH.equals(actionId)) { + result = new SizeBothAction(workbenchPage); } else { result = super.createAction(actionId, partDescriptor); } diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/SizeBothAction.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/SizeBothAction.java new file mode 100644 index 0000000000..3d24493e57 --- /dev/null +++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/SizeBothAction.java @@ -0,0 +1,79 @@ +/******************************************************************************* + * Copyright (c) 2015 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.actions; + +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.sirius.diagram.DDiagram; +import org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramContainerEditPart; +import org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramElementContainerEditPart; +import org.eclipse.sirius.diagram.ui.tools.api.editor.DDiagramEditor; +import org.eclipse.sirius.ecore.extender.business.api.permission.IPermissionAuthority; +import org.eclipse.sirius.ecore.extender.business.api.permission.PermissionAuthorityRegistry; +import org.eclipse.ui.IWorkbenchPage; + +import com.google.common.collect.Iterables; + +/** + * Sirius specifc size both action: + * <UL> + * <LI>disable the action on Region and Region container.</LI> + * <LI>check authority permission in calculateEnabled()./LI> + * </UL> + * + * @author mporhel + * + */ +public class SizeBothAction extends org.eclipse.gmf.runtime.diagram.ui.actions.internal.SizeBothAction { + + /** + * Creates the Make Same Size Both Action. + * + * @param workbenchPage + * the workbench page. + */ + public SizeBothAction(IWorkbenchPage workbenchPage) { + super(workbenchPage); + } + + @Override + protected boolean calculateEnabled() { + boolean enabled = super.calculateEnabled(); + if (enabled) { + for (AbstractDiagramElementContainerEditPart container : Iterables.filter(getSelectedObjects(), AbstractDiagramElementContainerEditPart.class)) { + if (container.isRegion() || (container instanceof AbstractDiagramContainerEditPart && ((AbstractDiagramContainerEditPart) container).isRegionContainer())) { + enabled = false; + break; + } + } + } + return enabled && canEditInstance(); + } + + /** + * Check authority permission. + * + * @return true if the action can be launched on the diagram + */ + protected boolean canEditInstance() { + boolean canEditInstance = true; + if (getWorkbenchPart() instanceof DDiagramEditor && ((DDiagramEditor) getWorkbenchPart()).getRepresentation() instanceof DDiagram) { + final DDiagramEditor editor = (DDiagramEditor) getWorkbenchPart(); + final DDiagram editorDiagram = (DDiagram) editor.getRepresentation(); + Resource sessionResource = editor.getSession().getSessionResource(); + if (sessionResource != null) { + IPermissionAuthority permissionAuthority = PermissionAuthorityRegistry.getDefault().getPermissionAuthority(sessionResource.getResourceSet()); + canEditInstance = permissionAuthority.canEditInstance(editorDiagram); + } + } + + return canEditInstance; + } +} diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/TabbarFillerWithoutContributions.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/TabbarFillerWithoutContributions.java index e08497658f..7dfd7fbc5c 100644 --- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/TabbarFillerWithoutContributions.java +++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/TabbarFillerWithoutContributions.java @@ -13,7 +13,6 @@ package org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar; import org.eclipse.gef.ui.actions.ZoomComboContributionItem; 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.SizeBothAction; import org.eclipse.gmf.runtime.diagram.ui.l10n.DiagramUIMessages; import org.eclipse.jface.action.ContributionItem; import org.eclipse.jface.action.Separator; @@ -25,6 +24,7 @@ import org.eclipse.sirius.diagram.ui.tools.api.action.ConcernComboContributionIt import org.eclipse.sirius.diagram.ui.tools.api.editor.DDiagramEditor; 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.style.ResetStylePropertiesToDefaultValuesAction; import org.eclipse.sirius.diagram.ui.tools.internal.actions.visibility.HideDDiagramElementAction; import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.actions.HideDDiagramElementLabelActionContributionItem; @@ -64,6 +64,7 @@ public class TabbarFillerWithoutContributions extends AbstractTabbarFiller { * * @see org.eclipse.sirius.diagram.tools.internal.editor.tabbar.AbstractTabbarFiller#doFill() */ + @Override protected void doFill() { createSelectArrangeAlignActions(); diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/contributions/DiagramElementSizeExtensionContributionFactory.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/contributions/DiagramElementSizeExtensionContributionFactory.java index 0f88c8654a..cb66d6121b 100644 --- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/contributions/DiagramElementSizeExtensionContributionFactory.java +++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/contributions/DiagramElementSizeExtensionContributionFactory.java @@ -11,8 +11,8 @@ package org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.contributions; import org.eclipse.gmf.runtime.diagram.ui.actions.internal.AutoSizeAction; -import org.eclipse.gmf.runtime.diagram.ui.actions.internal.SizeBothAction; import org.eclipse.jface.action.ActionContributionItem; +import org.eclipse.sirius.diagram.ui.tools.internal.actions.SizeBothAction; import org.eclipse.sirius.diagram.ui.tools.internal.editor.tabbar.contributions.expressions.DDiagramElementTabbarExpression; import org.eclipse.ui.menus.IContributionRoot; import org.eclipse.ui.services.IServiceLocator; |
