diff options
| author | pguilet | 2017-12-05 14:11:30 +0000 |
|---|---|---|
| committer | Laurent Redor | 2017-12-20 17:19:57 +0000 |
| commit | 5f0b59fa8b6d88e0c862bd676c1ae19c378768f6 (patch) | |
| tree | c020c748001eb743278deeb913990a7c10adaf54 | |
| parent | 06a3692998e4dddce596ac45330ebb5d91d413d0 (diff) | |
| download | org.eclipse.sirius-5f0b59fa8b6d88e0c862bd676c1ae19c378768f6.tar.gz org.eclipse.sirius-5f0b59fa8b6d88e0c862bd676c1ae19c378768f6.tar.xz org.eclipse.sirius-5f0b59fa8b6d88e0c862bd676c1ae19c378768f6.zip | |
[527109] Change double click behavior while in showing mode
A double click done on a diagram edit part now switch its visibility
status instead of applying any existing double click tool.
As a reminder, the goal of the four commits concerning 527109 is a POC.
Several tasks are remaining to have a fully operational feature. A
complete list will be added directly in bug 527109, a not exhaustive
list is:
-Double click should change the hidden status and not the visibility one
that is caused by several reasons.
-Double click on an hidden edge should also reveal source and target
node
-Check double click policy on all kind of parts
-The showing mode button's icon could be improved
-Layouting and showing mode should be exclusive.
-Transparency on hidden elements should be available for all parts.
Bug: 527109
Change-Id: I248779b3f44a20ca5e8b600a406d0fe33aba0bc4
Signed-off-by: pguilet <pierre.guilet@obeo.fr>
2 files changed, 32 insertions, 8 deletions
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/DoubleClickEditPolicy.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/DoubleClickEditPolicy.java index 9d31c71351..f6a41f8d3b 100644 --- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/DoubleClickEditPolicy.java +++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/DoubleClickEditPolicy.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 THALES GLOBAL SERVICES. + * Copyright (c) 2007, 2017 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 @@ -11,6 +11,7 @@ package org.eclipse.sirius.diagram.ui.graphical.edit.policies; import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.transaction.RecordingCommand; import org.eclipse.emf.transaction.TransactionalEditingDomain; import org.eclipse.emf.transaction.util.TransactionUtil; import org.eclipse.gef.EditPart; @@ -20,7 +21,9 @@ import org.eclipse.gmf.runtime.diagram.ui.commands.ICommandProxy; import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; import org.eclipse.gmf.runtime.diagram.ui.editpolicies.OpenEditPolicy; import org.eclipse.gmf.runtime.notation.View; +import org.eclipse.sirius.diagram.DDiagram; import org.eclipse.sirius.diagram.DDiagramElement; +import org.eclipse.sirius.diagram.Messages; import org.eclipse.sirius.diagram.description.DiagramElementMapping; import org.eclipse.sirius.diagram.tools.api.command.IDiagramCommandFactory; import org.eclipse.sirius.diagram.tools.api.command.IDiagramCommandFactoryProvider; @@ -42,6 +45,7 @@ public class DoubleClickEditPolicy extends OpenEditPolicy { */ @Override protected Command getOpenCommand(Request request) { + Command result = null; EditPart editPart = this.getHost(); Object model = editPart.getModel(); if (model instanceof View) { @@ -49,7 +53,25 @@ public class DoubleClickEditPolicy extends OpenEditPolicy { if (element instanceof DDiagramElement) { final DDiagramElement ddiagramElement = (DDiagramElement) element; DiagramElementMapping diagramElementMapping = ddiagramElement.getDiagramElementMapping(); - if (diagramElementMapping.getDoubleClickDescription() != null) { + DDiagram parentDiagram = ddiagramElement.getParentDiagram(); + if (parentDiagram.isIsInShowingMode()) { + final TransactionalEditingDomain transactionalEditingDomain = ((IGraphicalEditPart) getHost()).getEditingDomain(); + RecordingCommand cmd = new RecordingCommand(transactionalEditingDomain) { + @Override + protected void doExecute() { + ddiagramElement.setVisible(!ddiagramElement.isVisible()); + } + + @Override + public String getLabel() { + if (ddiagramElement.isVisible()) { + return Messages.HideDDiagramElement_hideElementLabel; + } + return Messages.RevealDDiagramElements_revealElementLabel; + } + }; + result = new ICommandProxy(new GMFCommandWrapper(transactionalEditingDomain, cmd)); + } else if (diagramElementMapping.getDoubleClickDescription() != null) { final TransactionalEditingDomain transactionalEditingDomain = TransactionUtil.getEditingDomain(element); final DDiagramEditor diagramEditor = (DDiagramEditor) this.getHost().getViewer().getProperty(DDiagramEditor.EDITOR_ID); final Object adapter = diagramEditor.getAdapter(IDiagramCommandFactoryProvider.class); @@ -57,11 +79,11 @@ public class DoubleClickEditPolicy extends OpenEditPolicy { final IDiagramCommandFactory emfCommandFactory = cmdFactoryProvider.getCommandFactory(transactionalEditingDomain); final org.eclipse.emf.common.command.Command cmd = emfCommandFactory.buildDoubleClickOnElementCommandFromTool(ddiagramElement, diagramElementMapping.getDoubleClickDescription()); final TransactionalEditingDomain editingDomain = ((IGraphicalEditPart) getHost()).getEditingDomain(); - return new ICommandProxy(new GMFCommandWrapper(editingDomain, cmd)); + result = new ICommandProxy(new GMFCommandWrapper(editingDomain, cmd)); } } } - return null; + return result; } } diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/DoubleClickEditPolicyProvider.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/DoubleClickEditPolicyProvider.java index 98f483eba0..4fd9771ae4 100644 --- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/DoubleClickEditPolicyProvider.java +++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/graphical/edit/policies/DoubleClickEditPolicyProvider.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2007, 2010 THALES GLOBAL SERVICES. + * Copyright (c) 2007, 2017 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 @@ -22,7 +22,6 @@ import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.CreateEditPolicies import org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.IEditPolicyProvider; import org.eclipse.gmf.runtime.notation.View; import org.eclipse.sirius.diagram.DDiagramElement; -import org.eclipse.sirius.diagram.description.DiagramElementMapping; import org.eclipse.sirius.diagram.ui.edit.api.part.IAbstractDiagramNodeEditPart; import org.eclipse.sirius.diagram.ui.edit.api.part.IDiagramEdgeEditPart; import org.eclipse.sirius.diagram.ui.edit.api.part.IDiagramNameEditPart; @@ -50,6 +49,7 @@ public class DoubleClickEditPolicyProvider implements IEditPolicyProvider { * * @see org.eclipse.gmf.runtime.diagram.ui.services.editpolicy.IEditPolicyProvider#createEditPolicies(org.eclipse.gef.EditPart) */ + @Override public void createEditPolicies(EditPart editPart) { if (editPart instanceof IAbstractDiagramNodeEditPart || editPart instanceof IDiagramEdgeEditPart || editPart instanceof IDiagramNameEditPart) { editPart.installEditPolicy(EditPolicyRoles.OPEN_ROLE, new DoubleClickEditPolicy()); @@ -61,6 +61,7 @@ public class DoubleClickEditPolicyProvider implements IEditPolicyProvider { * * @see org.eclipse.gmf.runtime.common.core.service.IProvider#addProviderChangeListener(org.eclipse.gmf.runtime.common.core.service.IProviderChangeListener) */ + @Override public void addProviderChangeListener(IProviderChangeListener listener) { this.listeners.add(listener); } @@ -70,6 +71,7 @@ public class DoubleClickEditPolicyProvider implements IEditPolicyProvider { * * @see org.eclipse.gmf.runtime.common.core.service.IProvider#provides(org.eclipse.gmf.runtime.common.core.service.IOperation) */ + @Override public boolean provides(IOperation operation) { if (operation instanceof CreateEditPoliciesOperation) { CreateEditPoliciesOperation castedOperation = (CreateEditPoliciesOperation) operation; @@ -78,8 +80,7 @@ public class DoubleClickEditPolicyProvider implements IEditPolicyProvider { if (model instanceof View) { EObject element = ((View) model).getElement(); if (element instanceof DDiagramElement) { - DiagramElementMapping diagramElementMapping = ((DDiagramElement) element).getDiagramElementMapping(); - return diagramElementMapping.getDoubleClickDescription() != null; + return true; } } } @@ -91,6 +92,7 @@ public class DoubleClickEditPolicyProvider implements IEditPolicyProvider { * * @see org.eclipse.gmf.runtime.common.core.service.IProvider#removeProviderChangeListener(org.eclipse.gmf.runtime.common.core.service.IProviderChangeListener) */ + @Override public void removeProviderChangeListener(IProviderChangeListener listener) { this.listeners.remove(listener); } |
