diff options
| author | pguilet | 2017-11-10 14:41:00 +0000 |
|---|---|---|
| committer | Laurent Redor | 2017-12-20 17:19:48 +0000 |
| commit | 367c0df67bc38d8e458bbc59731cbc01f55f26fe (patch) | |
| tree | 0b6bb871c00d374f7b18115e21e8623d08fb49b1 | |
| parent | 491cd5704e51282f6cb74c8a50380ebf58569df7 (diff) | |
| download | org.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>
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 Binary files differnew file mode 100644 index 0000000000..30ed929871 --- /dev/null +++ b/plugins/org.eclipse.sirius.diagram.ui/icons/showingMode_activate.gif 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$ |
