Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpguilet2017-11-10 14:41:00 +0000
committerLaurent Redor2017-12-20 17:19:48 +0000
commit367c0df67bc38d8e458bbc59731cbc01f55f26fe (patch)
tree0b6bb871c00d374f7b18115e21e8623d08fb49b1
parent491cd5704e51282f6cb74c8a50380ebf58569df7 (diff)
downloadorg.eclipse.sirius-367c0df67bc38d8e458bbc59731cbc01f55f26fe.tar.gz
org.eclipse.sirius-367c0df67bc38d8e458bbc59731cbc01f55f26fe.tar.xz
org.eclipse.sirius-367c0df67bc38d8e458bbc59731cbc01f55f26fe.zip
[527109] Add a button to activate/deactivate the showing mode
This mode is experimental. Thus to activate this button, the property system "org.eclipse.sirius.ui.activateShowingMode" must be set to true. Bug: 527109 Change-Id: Idbe17a2766e8322fb61cfc1e798a0851e41b0463 Signed-off-by: pguilet <pierre.guilet@obeo.fr>
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/icons/showingMode_activate.gifbin0 -> 379 bytes
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/plugin.properties7
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/ui/actions/ActionIds.java3
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/ShowingModeSwitchingAction.java229
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/TabbarFillerWithContributions.java5
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/contributions/TabbarContributionFactory.java24
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src/org/eclipse/sirius/diagram/ui/provider/Messages.java15
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src/org/eclipse/sirius/diagram/ui/tools/api/image/DiagramImagesPath.java5
8 files changed, 286 insertions, 2 deletions
diff --git a/plugins/org.eclipse.sirius.diagram.ui/icons/showingMode_activate.gif b/plugins/org.eclipse.sirius.diagram.ui/icons/showingMode_activate.gif
new file mode 100644
index 0000000000..30ed929871
--- /dev/null
+++ b/plugins/org.eclipse.sirius.diagram.ui/icons/showingMode_activate.gif
Binary files differ
diff --git a/plugins/org.eclipse.sirius.diagram.ui/plugin.properties b/plugins/org.eclipse.sirius.diagram.ui/plugin.properties
index f9eb9c6edb..b81f735b33 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/plugin.properties
+++ b/plugins/org.eclipse.sirius.diagram.ui/plugin.properties
@@ -1070,11 +1070,16 @@ SetCurrentConcernCommand_label = Set current concern
SetDefaultConcernCommand_label = Set current concern to default
SetLabelsOffsetCommmand_label = Update labels offset
SetLayoutingModeCommandAndUpdateActionImage_activateLabel = Activating Layouting mode
-SetLayoutingModeCommandAndUpdateActionImage_deactivateLabel = Deactivating Layouting mode
+SetLayoutingModeCommandAndUpdateActionImage_deactivateLabel = Deactivating Layouting mode
SetLayoutingModeCommand_activateLabel = Activating Layouting mode
SetLayoutingModeCommand_deactivateLabel = Deactivating Layouting mode
+SetShowingModeCommandAndUpdateActionImage_activateLabel = Activating Showing mode
+SetShowingModeCommandAndUpdateActionImage_deactivateLabel = Deactivating Showing mode
SetStyleToWorkspaceImageAction_text = Set style to workspace image
ShiftDirectBorderedNodesOperation_name = Shift bordered nodes'' positions by {0}
+ShowingModeSwitchingAction_activate= Activate Showing mode
+ShowingModeSwitchingAction_deactivate= Deactivate Showing mode
+ShowingModeSwitchingAction_statusOn = Showing Mode
SimpleImageTranscoder_svgImageTranscodingError = Error transcoding SVG image
SimpleStyleConfiguration_iconFileNotFound = Icon file "{0}" not found
SiriusBaseItemSemanticEditPolicy_deleteCmdLabel = Delete element
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/ui/actions/ActionIds.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/ui/actions/ActionIds.java
index 2eb92742b7..ac023f3fdf 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/ui/actions/ActionIds.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/api/ui/actions/ActionIds.java
@@ -96,6 +96,9 @@ public interface ActionIds {
/** Action for Activating/Deactivating the Layouting mode. **/
String SWITCH_LAYOUTING_MODE = "switchLayoutingMode"; //$NON-NLS-1$
+ /** Action for Activating/Deactivating the Showing mode. **/
+ String SWITCH_SHOWING_MODE = "switchShowingMode"; //$NON-NLS-1$
+
/** Action to deselect all elements (select diagram). **/
String DESELECT_ALL = "deselectAll"; //$NON-NLS-1$
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/ShowingModeSwitchingAction.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/ShowingModeSwitchingAction.java
new file mode 100644
index 0000000000..3199111801
--- /dev/null
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/tools/internal/editor/tabbar/ShowingModeSwitchingAction.java
@@ -0,0 +1,229 @@
+/*******************************************************************************
+ * 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.editor.tabbar;
+
+import java.util.List;
+
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.emf.transaction.TransactionalEditingDomain;
+import org.eclipse.emf.transaction.util.TransactionUtil;
+import org.eclipse.gef.Request;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gef.commands.UnexecutableCommand;
+import org.eclipse.gmf.runtime.common.core.command.CommandResult;
+import org.eclipse.gmf.runtime.diagram.ui.actions.DiagramAction;
+import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy;
+import org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand;
+import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.jface.action.IStatusLineManager;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil;
+import org.eclipse.sirius.diagram.DDiagram;
+import org.eclipse.sirius.diagram.ui.edit.api.part.IDDiagramEditPart;
+import org.eclipse.sirius.diagram.ui.provider.DiagramUIPlugin;
+import org.eclipse.sirius.diagram.ui.provider.Messages;
+import org.eclipse.sirius.diagram.ui.tools.api.image.DiagramImagesPath;
+import org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.part.EditorActionBarContributor;
+
+/**
+ * An action that switches the showing mode of the given {@link DDiagram}.
+ *
+ * @author <a href="mailto:pierre.guilet@obeo.fr">Pierre Guilet</a>
+ *
+ */
+public class ShowingModeSwitchingAction extends DiagramAction {
+
+ /**
+ * Icon used in the tabbar to allow end-user to activate the showing mode. It is also used in the editor's status
+ * line to indicate that showing mode is active.
+ */
+ private static final ImageDescriptor ACTIVATE_SHOW_HIDE_MODE_IMAGE_DESCRIPTOR = DiagramUIPlugin.Implementation.getBundledImageDescriptor(DiagramImagesPath.SHOWING_MODE_ACTIVE_ICON);
+
+ /**
+ * The {@link DDiagram} on witch the showing mode should be switched.
+ */
+ private DDiagram ddiagram;
+
+ /**
+ * Default constructor.
+ *
+ * @param workbenchPage
+ * The workbench page associated with this action
+ * @param editorDiagram
+ * the {@link DDiagram} on witch the showing mode should be switched
+ */
+ public ShowingModeSwitchingAction(IWorkbenchPage workbenchPage, DDiagram editorDiagram) {
+ super(workbenchPage);
+ setId(ActionIds.SWITCH_SHOWING_MODE);
+ this.ddiagram = editorDiagram;
+ setImageDescriptor(ACTIVATE_SHOW_HIDE_MODE_IMAGE_DESCRIPTOR);
+ setTextAndStatusAccordingToShowingMode();
+ setChecked(ddiagram.isIsInShowingMode());
+ }
+
+ /**
+ * Switches the text associated to this Action according to the current ShowingMode status (activated or not) and
+ * updates this editor's statusLine.
+ */
+ private void setTextAndStatusAccordingToShowingMode() {
+ // Step 1 : updating action's text and image
+ if (this.ddiagram != null && this.ddiagram.isIsInShowingMode()) {
+ setText(Messages.ShowingModeSwitchingAction_deactivate);
+ setChecked(true);
+ } else {
+ setText(Messages.ShowingModeSwitchingAction_activate);
+ setChecked(false);
+ }
+
+ // Step 2 : updating the editor's status bar
+ IEditorPart activeEditor = EclipseUIUtil.getActiveEditor();
+ if (activeEditor != null) {
+ // Step 2.1 : trying to get the status line manager
+ IEditorSite site = (IEditorSite) activeEditor.getSite();
+ EditorActionBarContributor actionBarContributor = null;
+ IStatusLineManager statusLineManager = null;
+ if (site != null && site.getActionBarContributor() instanceof EditorActionBarContributor) {
+ actionBarContributor = (EditorActionBarContributor) site.getActionBarContributor();
+ }
+ if (actionBarContributor != null && actionBarContributor.getActionBars() != null) {
+ statusLineManager = actionBarContributor.getActionBars().getStatusLineManager();
+ }
+
+ // Step 2.2 : if statusLineManager can be found
+ if (statusLineManager != null) {
+ // we update it according to the DDiagram showing mode status
+ if (this.ddiagram != null && this.ddiagram.isIsInShowingMode()) {
+ String statusMessage = Messages.ShowingModeSwitchingAction_statusOn;
+ statusLineManager.setMessage(DiagramUIPlugin.getPlugin().getImage(ACTIVATE_SHOW_HIDE_MODE_IMAGE_DESCRIPTOR), statusMessage);
+ } else {
+ statusLineManager.setMessage(""); //$NON-NLS-1$
+ }
+ }
+ }
+ }
+
+ /**
+ *
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.jface.action.Action#getStyle()
+ */
+ @Override
+ public int getStyle() {
+ return AS_CHECK_BOX;
+ }
+
+ /**
+ *
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.gmf.runtime.diagram.ui.actions.DiagramAction#isSelectionListener()
+ */
+ @Override
+ protected boolean isSelectionListener() {
+ return false;
+ }
+
+ /**
+ *
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.gmf.runtime.diagram.ui.actions.DiagramAction#getCommand()
+ */
+ @Override
+ protected Command getCommand() {
+ Command returnedCommand = UnexecutableCommand.INSTANCE;
+ List<?> selectedObjects = getSelectedObjects();
+ if (!selectedObjects.isEmpty()) {
+ Object nextObject = selectedObjects.iterator().next();
+ if (nextObject instanceof IDDiagramEditPart) {
+ IDDiagramEditPart diagramEP = (IDDiagramEditPart) nextObject;
+ if (diagramEP.getModel() instanceof Diagram && ((Diagram) diagramEP.getModel()).getElement() instanceof DDiagram) {
+ Diagram diagramGMF = (Diagram) diagramEP.getModel();
+ returnedCommand = switchShowingModeCommand((DDiagram) diagramGMF.getElement());
+ }
+ }
+ }
+
+ return returnedCommand;
+ }
+
+ /**
+ * Command switching the status of the feature {@link DDiagram#isIsInShowingMode()}.
+ *
+ * @author <a href="mailto:pierre.guilet@obeo.fr">Pierre Guilet</a>
+ *
+ */
+ private class ShowingModeSwitch extends AbstractTransactionalCommand {
+
+ private DDiagram diagram;
+
+ ShowingModeSwitch(TransactionalEditingDomain domain, DDiagram diagram, String label) {
+ super(domain, label, null);
+ this.diagram = diagram;
+ }
+
+ @Override
+ protected CommandResult doExecuteWithResult(IProgressMonitor monitor, IAdaptable info) throws ExecutionException {
+ diagram.setIsInShowingMode(!diagram.isIsInShowingMode());
+ setTextAndStatusAccordingToShowingMode();
+ return CommandResult.newOKCommandResult();
+ }
+
+ }
+
+ /**
+ * Returns a command that deactivate the showing mode of the given {@link DDiagram}.
+ *
+ * @param diagram
+ * the {@link DDiagram} on witch the showing mode should be switched
+ * @return a command that deactivate the showing mode of the given {@link DDiagram}
+ */
+ private Command switchShowingModeCommand(DDiagram diagram) {
+ Command returnedCommand = UnexecutableCommand.INSTANCE;
+ TransactionalEditingDomain editingDomain = TransactionUtil.getEditingDomain(diagram);
+ if (editingDomain != null) {
+ String commandLabel = diagram.isIsInShowingMode() ? Messages.SetShowingModeCommandAndUpdateActionImage_deactivateLabel : Messages.SetShowingModeCommandAndUpdateActionImage_activateLabel;
+ returnedCommand = new ICommandProxy(new ShowingModeSwitch(editingDomain, diagram, commandLabel));
+ }
+ return returnedCommand;
+ }
+
+ /**
+ *
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.gmf.runtime.diagram.ui.actions.DiagramAction#dispose()
+ */
+ @Override
+ public void dispose() {
+ ddiagram = null;
+ super.dispose();
+ }
+
+ /**
+ *
+ * {@inheritDoc}
+ *
+ * @see org.eclipse.gmf.runtime.diagram.ui.actions.DiagramAction#createTargetRequest()
+ */
+ @Override
+ protected Request createTargetRequest() {
+ return null;
+ }
+
+}
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 21bc97f789..49e676729f 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
@@ -33,6 +33,8 @@ import com.google.common.collect.Lists;
*/
public class TabbarFillerWithContributions extends AbstractTabbarFiller {
+ private static final String SHOWING_MODE_SYSTEM_PROPERTY = "org.eclipse.sirius.ui.activateShowingMode"; //$NON-NLS-1$
+
private static final String ARRANGE_SELECTION = "org.eclipse.sirius.diagram.ui.tabbar.arrangeselection"; //$NON-NLS-1$
private static final String REFRESH = "org.eclipse.sirius.diagram.ui.tabbar.refresh"; //$NON-NLS-1$
@@ -182,6 +184,9 @@ public class TabbarFillerWithContributions extends AbstractTabbarFiller {
addContributionItem(diagramContributionItems, ZOOM, contributionFactory.createZoomOutContribution(part));
addContributionItem(diagramContributionItems, ZOOM, contributionFactory.createZoomInContribution(part));
+ if (Boolean.getBoolean(SHOWING_MODE_SYSTEM_PROPERTY)) {
+ addContributionItem(diagramContributionItems, EXPORT, contributionFactory.createShowingModeContributionItem(part, manager));
+ }
addContributionItem(diagramContributionItems, EXPORT, contributionFactory.createLayoutingModeContributionItem(part));
addContributionItem(diagramContributionItems, EXPORT, contributionFactory.createSaveAsImageContributionItem());
}
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 b2e5881735..92bafa7422 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
@@ -46,6 +46,7 @@ import org.eclipse.sirius.diagram.ui.tools.internal.actions.visibility.HideDDiag
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.ShowingModeSwitchingAction;
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;
@@ -545,6 +546,29 @@ public class TabbarContributionFactory {
}
/**
+ * Creates the Showing Mode contribution item. This button enables a special "showing mode" in which invisible
+ * diagram elements are temporarily revealed to allow user to easily make them visible.
+ *
+ * @param part
+ * the current IDiagramWorkbenchPart.
+ * @param manager
+ * the toolbar manager
+ * @return the {@link IContributionItem} or null if the workbench part is being initialized.
+ */
+ public IContributionItem createShowingModeContributionItem(IDiagramWorkbenchPart part, ToolBarManager manager) {
+ IWorkbenchPartSite site = part.getSite();
+ if (site != null && part instanceof DDiagramEditor) {
+ final DDiagramEditor editor = (DDiagramEditor) part;
+ DDiagram editorDiagram = (DDiagram) editor.getRepresentation();
+ ShowingModeSwitchingAction showingModeSwitchingAction = new ShowingModeSwitchingAction(site.getPage(), editorDiagram);
+ TabbarActionContributionItem tabbarActionContributionItem = new TabbarActionContributionItem(showingModeSwitchingAction);
+
+ return tabbarActionContributionItem;
+ }
+ return null;
+ }
+
+ /**
* Creates the Router contribution item. This action allows changing the line style of edges (Rectilinear, Oblique,
* Tree)
*
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src/org/eclipse/sirius/diagram/ui/provider/Messages.java b/plugins/org.eclipse.sirius.diagram.ui/src/org/eclipse/sirius/diagram/ui/provider/Messages.java
index 6b225e439b..479e4c955b 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src/org/eclipse/sirius/diagram/ui/provider/Messages.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src/org/eclipse/sirius/diagram/ui/provider/Messages.java
@@ -675,6 +675,15 @@ public final class Messages {
public static String LayoutingModeSwitchingAction_deactivate;
@TranslatableMessage
+ public static String ShowingModeSwitchingAction_activate;
+
+ @TranslatableMessage
+ public static String ShowingModeSwitchingAction_deactivate;
+
+ @TranslatableMessage
+ public static String ShowingModeSwitchingAction_statusOn;
+
+ @TranslatableMessage
public static String LayoutingModeSwitchingAction_statusOn;
@TranslatableMessage
@@ -990,6 +999,12 @@ public final class Messages {
public static String SetLayoutingModeCommandAndUpdateActionImage_activateLabel;
@TranslatableMessage
+ public static String SetShowingModeCommandAndUpdateActionImage_deactivateLabel;
+
+ @TranslatableMessage
+ public static String SetShowingModeCommandAndUpdateActionImage_activateLabel;
+
+ @TranslatableMessage
public static String SetLayoutingModeCommandAndUpdateActionImage_deactivateLabel;
@TranslatableMessage
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src/org/eclipse/sirius/diagram/ui/tools/api/image/DiagramImagesPath.java b/plugins/org.eclipse.sirius.diagram.ui/src/org/eclipse/sirius/diagram/ui/tools/api/image/DiagramImagesPath.java
index 6f9304017b..e1ae2202f8 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src/org/eclipse/sirius/diagram/ui/tools/api/image/DiagramImagesPath.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src/org/eclipse/sirius/diagram/ui/tools/api/image/DiagramImagesPath.java
@@ -131,9 +131,12 @@ public interface DiagramImagesPath {
/** expand all icon. */
String EXPAND_ALL_ICON = "icons/expandall.gif"; //$NON-NLS-1$
- /** pin elements icon. */
+ /** Layouting mode icon. */
String LAYOUTING_MODE_ACTIVE_ICON = "icons/layoutingMode_activate.png"; //$NON-NLS-1$
+ /** Showing mode icon. */
+ String SHOWING_MODE_ACTIVE_ICON = "icons/showingMode_activate.gif"; //$NON-NLS-1$
+
/** path of the image displayed thanks to this decorator. */
String HAS_DIAG_IMG = "icons/HasLink.gif"; //$NON-NLS-1$

Back to the top