Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Barbin2017-10-16 15:34:48 +0000
committerLaurent Redor2017-12-18 16:05:30 +0000
commitf568f7e4a60be596c97b1dba99761663177659d4 (patch)
tree5aa088d4c32f03090bb978cf41f38b5340871892
parent3fc51ef58507803d759b21668b1a824729b3b01f (diff)
downloadorg.eclipse.sirius-f568f7e4a60be596c97b1dba99761663177659d4.tar.gz
org.eclipse.sirius-f568f7e4a60be596c97b1dba99761663177659d4.tar.xz
org.eclipse.sirius-f568f7e4a60be596c97b1dba99761663177659d4.zip
[497054] Activates "Auto-size" for region container
Bug: 497054 Change-Id: Ic62aa6c63113c4c75fb8e77b214e03f7ac855f05 Signed-off-by: Florian Barbin <florian.barbin@obeo.fr>
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/plugin.xml25
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/RegionContainerResizableEditPolicy.java19
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/providers/SiriusContributionItemProvider.java4
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/SiriusAutoSizeAction.java94
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/contributions/TabbarContributionFactory.java3
-rw-r--r--plugins/org.eclipse.sirius.doc/doc/Release_Notes.html3
-rw-r--r--plugins/org.eclipse.sirius.doc/doc/Release_Notes.textile1
7 files changed, 135 insertions, 14 deletions
diff --git a/plugins/org.eclipse.sirius.diagram.ui/plugin.xml b/plugins/org.eclipse.sirius.diagram.ui/plugin.xml
index 97c4ece19f..b40bb01423 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/plugin.xml
+++ b/plugins/org.eclipse.sirius.diagram.ui/plugin.xml
@@ -159,6 +159,11 @@
toolbarPath="/toolbarFormatGroup">
</partAction>
<partAction
+ id="autoSizeAction"
+ menubarPath="/diagramMenu/sizeGroup"
+ toolbarPath="/toolbarFormatGroup">
+ </partAction>
+ <partAction
global="false"
id="siriusCopyAppearancePropertiesAction"
menubarPath="/diagramMenu/copyAppearanceGroup"
@@ -222,6 +227,10 @@
path="/formatMenu/sizeGroup">
</popupAction>
<popupAction
+ id="autoSizeAction"
+ path="/formatMenu/sizeGroup">
+ </popupAction>
+ <popupAction
id="siriusCopyAppearancePropertiesAction"
path="/formatMenu/applyAppearanceGroup">
</popupAction>
@@ -269,9 +278,9 @@
toolbarPath="/toolbarCopyAppearanceGroup">
</partPredefinedItem>
</partContribution>
- <!-- Remove default GMF global Eclipse menu for routing style (replaced by Sirius specific) -->
<partContribution
class="org.eclipse.sirius.diagram.ui.part.SiriusDiagramEditor">
+ <!-- Remove default GMF global Eclipse menu for routing style (replaced by Sirius specific) -->
<partPredefinedItem
id="treeRouterAction"
menubarPath="/diagramMenu/routerMenu/routerGroup"
@@ -290,6 +299,14 @@
removeFromMenubar="true"
removeFromToolbar="false">
</partPredefinedItem>
+ <!-- Remove default GMF global Eclipse menu for auto size action (replaced by Sirius specific) -->
+ <partPredefinedItem
+ id="autoSizeAction"
+ menubarPath="/diagramMenu/sizeGroup"
+ toolbarPath="/toolbarFormatGroup"
+ removeFromMenubar="true"
+ removeFromToolbar="true">
+ </partPredefinedItem>
</partContribution>
<popupContribution
class="org.eclipse.sirius.diagram.ui.tools.internal.menu.DiagramEditorContextMenuProvider">
@@ -453,6 +470,12 @@
path="/formatMenu/routerMenu/routerGroup"
remove="true"/>
<!-- End of remove default GMF contexual menu for routing style -->
+ <!-- Remove default GMF contexual menu for auto size action (replaced by Sirius specific context) -->
+ <popupPredefinedItem
+ id="autoSizeAction"
+ path="/formatMenu/sizeGroup"
+ remove="true"/>
+ <!-- End of remove default GMF contexual menu for auto size action -->
<popupPredefinedItem
id="copyAppearancePropertiesAction"
path="/formatMenu/applyAppearanceGroup"
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/RegionContainerResizableEditPolicy.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/RegionContainerResizableEditPolicy.java
index 298b637044..f17a78f6d2 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/RegionContainerResizableEditPolicy.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/RegionContainerResizableEditPolicy.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2013, 2015 THALES GLOBAL SERVICES and others.
+ * Copyright (c) 2013, 2017 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
@@ -77,16 +77,14 @@ public class RegionContainerResizableEditPolicy extends AirResizableEditPolicy {
}
/**
- * Returns a composite command with the given initial command and the
- * RegionContainer specific auto-size commands to propagate the auto-size to
- * the regions.
+ * Returns a composite command with the given initial command and the RegionContainer specific auto-size commands to
+ * propagate the auto-size to the regions.
*
* @param request
* the initial request
* @param autoSizeCommand
* the initial command
- * @return a composite command with the initial command and the region
- * container specific additional commands.
+ * @return a composite command with the initial command and the region container specific additional commands.
*/
protected Command getRegionContainerAutoSizeCommand(Request request, Command autoSizeCommand) {
IDiagramElementEditPart host = (IDiagramElementEditPart) getHost();
@@ -99,10 +97,8 @@ public class RegionContainerResizableEditPolicy extends AirResizableEditPolicy {
Request req = new Request();
req.setType(request.getType());
req.getExtendedData().put(REGION_AUTO_SIZE_PROPAGATOR, host);
-
- Object object = request.getExtendedData().get(REGION_AUTO_SIZE_PROPAGATOR);
for (EditPart regionPart : getRegionParts()) {
- if (object != regionPart) {
+ if (host != regionPart) {
ctc.add(new CommandProxy(regionPart.getCommand(req)));
}
}
@@ -112,9 +108,8 @@ public class RegionContainerResizableEditPolicy extends AirResizableEditPolicy {
}
/**
- * Complete the given composite command with RegionContainer specific resize
- * commands: the commands to report the RegionContainer resize on its
- * regions.
+ * Complete the given composite command with RegionContainer specific resize commands: the commands to report the
+ * RegionContainer resize on its regions.
*/
@Override
protected void completeResizeCommand(CompositeTransactionalCommand ctc, ChangeBoundsRequest request) {
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 0735e0bbd0..159d5f06d5 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
@@ -20,6 +20,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.SiriusAutoSizeAction;
import org.eclipse.sirius.diagram.ui.tools.internal.actions.SiriusCopyAppearancePropertiesAction;
import org.eclipse.sirius.diagram.ui.tools.internal.actions.SiriusEdgeSnapBackAction;
import org.eclipse.sirius.diagram.ui.tools.internal.actions.SizeBothAction;
@@ -42,6 +43,7 @@ import org.eclipse.ui.IWorkbenchPage;
/**
* @was-generated
*/
+@SuppressWarnings("restriction")
public class SiriusContributionItemProvider extends AbstractContributionItemProvider {
/**
@@ -96,6 +98,8 @@ public class SiriusContributionItemProvider extends AbstractContributionItemProv
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 if (org.eclipse.gmf.runtime.diagram.ui.actions.ActionIds.ACTION_AUTOSIZE.equals(actionId)) {
+ result = new SiriusAutoSizeAction(workbenchPage);
} else if (actionId.equals(ActionIds.ACTION_SIRIUS_COPY_APPEARANCE_PROPERTIES)) {
return new SiriusCopyAppearancePropertiesAction(workbenchPage);
} else if (ActionIds.STRAIGHTEN_TO_TOP.equals(actionId)) {
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/SiriusAutoSizeAction.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/SiriusAutoSizeAction.java
new file mode 100644
index 0000000000..568c85f556
--- /dev/null
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/actions/SiriusAutoSizeAction.java
@@ -0,0 +1,94 @@
+/*******************************************************************************
+ * Copyright (c) 2017 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Obeo - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.sirius.diagram.ui.tools.internal.actions;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.gef.EditPart;
+import org.eclipse.gef.Request;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gef.commands.CompoundCommand;
+import org.eclipse.gef.commands.UnexecutableCommand;
+import org.eclipse.gmf.runtime.diagram.ui.actions.internal.AutoSizeAction;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.ResizableCompartmentEditPart;
+import org.eclipse.gmf.runtime.notation.NotationPackage;
+import org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramContainerEditPart;
+import org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramElementContainerEditPart;
+import org.eclipse.ui.IWorkbenchPage;
+
+/**
+ * Overrides the GMF AutoSizeAction to authorize auto-size for region container.
+ *
+ * @author fbarbin
+ *
+ */
+@SuppressWarnings("restriction")
+public class SiriusAutoSizeAction extends AutoSizeAction {
+
+ /**
+ * Default constructor.
+ *
+ * @param workbenchPage
+ * the {@link IWorkbenchPage}
+ */
+ public SiriusAutoSizeAction(IWorkbenchPage workbenchPage) {
+ super(workbenchPage);
+ }
+
+ /**
+ * Duplicated from org.eclipse.gmf.runtime.diagram.ui.actions.internal.AutoSizeAction.getCommand(Request) to
+ * authorized autoSize for container with regions.
+ */
+ @SuppressWarnings("rawtypes")
+ @Override
+ protected Command getCommand(Request request) {
+ boolean foundNonAutosizedPart = false;
+ List operationSet = getOperationSet();
+ Iterator editParts = operationSet.iterator();
+ CompoundCommand command = new CompoundCommand(getCommandLabel());
+ while (editParts.hasNext()) {
+ EditPart editPart = (EditPart) editParts.next();
+ // check if the editpart is autosized
+ if (concernRegion(editPart)) {
+ foundNonAutosizedPart = true;
+ } else if (editPart instanceof GraphicalEditPart) {
+ GraphicalEditPart graphicalEditPart = (GraphicalEditPart) editPart;
+ Integer containerWidth = (Integer) graphicalEditPart.getStructuralFeatureValue(NotationPackage.eINSTANCE.getSize_Width());
+ Integer containerHeight = (Integer) graphicalEditPart.getStructuralFeatureValue(NotationPackage.eINSTANCE.getSize_Height());
+ if (containerWidth.intValue() != -1 || containerHeight.intValue() != -1) {
+ foundNonAutosizedPart = true;
+ }
+ }
+
+ Command curCommand = editPart.getCommand(request);
+ if (curCommand != null) {
+ command.add(curCommand);
+ }
+ }
+ return command.isEmpty() || command.size() != operationSet.size() || !foundNonAutosizedPart ? UnexecutableCommand.INSTANCE : (Command) command;
+ }
+
+ private boolean concernRegion(EditPart hostPart) {
+ if (hostPart instanceof AbstractDiagramContainerEditPart && ((AbstractDiagramContainerEditPart) hostPart).isRegionContainer()) {
+ // We collect compartment children
+ // The region auto size is available if at least one child is not auto-sized.
+ return ((AbstractDiagramContainerEditPart) hostPart).getResizableCompartments().stream().flatMap(el -> ((ResizableCompartmentEditPart) el).getChildren().stream())
+ .filter(AbstractDiagramElementContainerEditPart.class::isInstance).filter(el -> {
+ Integer containerWidth = (Integer) ((AbstractDiagramElementContainerEditPart) el).getStructuralFeatureValue(NotationPackage.eINSTANCE.getSize_Width());
+ Integer containerHeight = (Integer) ((AbstractDiagramElementContainerEditPart) el).getStructuralFeatureValue(NotationPackage.eINSTANCE.getSize_Height());
+ return containerWidth.intValue() != -1 || containerHeight.intValue() != -1;
+ }).findFirst().isPresent();
+ }
+ return false;
+ }
+}
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
index 50889eff93..b2e5881735 100644
--- 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
@@ -33,6 +33,7 @@ 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.SiriusAutoSizeAction;
import org.eclipse.sirius.diagram.ui.tools.internal.actions.SiriusCopyAppearancePropertiesAction;
import org.eclipse.sirius.diagram.ui.tools.internal.actions.SizeBothAction;
import org.eclipse.sirius.diagram.ui.tools.internal.actions.delete.DeleteFromDiagramAction;
@@ -643,7 +644,7 @@ public class TabbarContributionFactory {
public IContributionItem createAutoSizeContribution(IDiagramWorkbenchPart part) {
IWorkbenchPartSite site = part.getSite();
if (site != null) {
- AutoSizeAction autoSizeAction = new AutoSizeAction(site.getPage());
+ AutoSizeAction autoSizeAction = new SiriusAutoSizeAction(site.getPage());
return new ActionContributionItem(autoSizeAction);
}
return null;
diff --git a/plugins/org.eclipse.sirius.doc/doc/Release_Notes.html b/plugins/org.eclipse.sirius.doc/doc/Release_Notes.html
index db79581486..05826a9c64 100644
--- a/plugins/org.eclipse.sirius.doc/doc/Release_Notes.html
+++ b/plugins/org.eclipse.sirius.doc/doc/Release_Notes.html
@@ -123,6 +123,9 @@
<em>Nominal</em>, diagram will be exported with nominal size (quality will be lower but export time will be shorter). This new preference allows you to choose the tradeoff you want. The
<a href="user/diagrams/Diagrams.html#Exportingimages">user documentation </a> details this change with an example.
</li>
+ <li><span class="label label-info">Modified</span> The "
+ <em>Auto Size</em>" action can now be applied on region container. Before that, the action was available only for regions.
+ </li>
</ul>
<h3 id="DeveloperVisibleChanges">Developer-Visible Changes</h3>
<ul>
diff --git a/plugins/org.eclipse.sirius.doc/doc/Release_Notes.textile b/plugins/org.eclipse.sirius.doc/doc/Release_Notes.textile
index f0a5193440..5a7d6ebfa7 100644
--- a/plugins/org.eclipse.sirius.doc/doc/Release_Notes.textile
+++ b/plugins/org.eclipse.sirius.doc/doc/Release_Notes.textile
@@ -9,6 +9,7 @@ h2(#sirius5.1.1). Changes in Sirius 5.1.1
h3. User-Visible Changes
* <span class="label label-info">Modified</span> When exporting a diagram as an image, it is now possible to choose an image size level. Before this, a preference called _AutoScale_ was available and when it was enable, the diagram was scaled to the maximum size safely allowed by the system. Now, a new preference named _Size of exported images_ is available in the _Sirius > Sirius Diagram_ preference page and offer this possibility. Setting size to _Max_ generates same diagrams as by using the previous preference _AutoScale_. This can produce image with big size in long generation time. If _Size of exported images_ is set to level _Nominal_, diagram will be exported with nominal size (quality will be lower but export time will be shorter). This new preference allows you to choose the tradeoff you want. The "user documentation ":user/diagrams/Diagrams.html#Exportingimages details this change with an example.
+* <span class="label label-info">Modified</span> The "_Auto Size_" action can now be applied on region container. Before that, the action was available only for regions.
h3. Developer-Visible Changes

Back to the top