Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpguilet2017-11-13 09:14:37 +0000
committerLaurent Redor2017-12-20 17:19:52 +0000
commit06a3692998e4dddce596ac45330ebb5d91d413d0 (patch)
tree8b3c8f8f5d046ed7e44687a0b11fdb10461acdde
parent367c0df67bc38d8e458bbc59731cbc01f55f26fe (diff)
downloadorg.eclipse.sirius-06a3692998e4dddce596ac45330ebb5d91d413d0.tar.gz
org.eclipse.sirius-06a3692998e4dddce596ac45330ebb5d91d413d0.tar.xz
org.eclipse.sirius-06a3692998e4dddce596ac45330ebb5d91d413d0.zip
[527109] update behavior when showing mode is active
This mode triggered by a button in the tabbar now shows all invisible elements as well as visible ones without changing their visibility status from a persistence model point of view. Invisible elements are shown with transparency. This feature as done for a POC is not working for all parts. Bug: 527109 Change-Id: Iec17d9dc63dbbded2c17c503af3da4929b545fd6 Signed-off-by: pguilet <pierre.guilet@obeo.fr>
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/business/api/query/ViewQuery.java81
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/business/internal/query/DEdgeQuery.java42
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/business/internal/view/ShowingViewUtil.java264
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractBorderedDiagramElementEditPart.java69
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDDiagramEditPart.java39
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramBorderNodeEditPart.java78
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramEdgeEditPart.java56
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramElementContainerEditPart.java26
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramNameEditPart.java52
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramNodeEditPart.java6
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractNotSelectableShapeNodeEditPart.java62
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/AbstractDNodeContainerCompartmentEditPart.java70
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/AbstractDNodeListCompartmentEditPart.java61
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/DNode3EditPart.java30
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/DNodeEditPart.java30
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/SiriusDescriptionCompartmentEditPart.java31
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/SiriusNoteEditPart.java60
-rw-r--r--plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/SiriusTextEditPart.java60
18 files changed, 943 insertions, 174 deletions
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/business/api/query/ViewQuery.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/business/api/query/ViewQuery.java
index fbb38e1589..2408680740 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/business/api/query/ViewQuery.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/business/api/query/ViewQuery.java
@@ -11,6 +11,7 @@
package org.eclipse.sirius.diagram.ui.business.api.query;
import java.util.LinkedHashSet;
+import java.util.Optional;
import java.util.Set;
import org.eclipse.emf.ecore.EAttribute;
@@ -20,12 +21,14 @@ import org.eclipse.gmf.runtime.diagram.core.util.ViewType;
import org.eclipse.gmf.runtime.diagram.ui.preferences.IPreferenceConstants;
import org.eclipse.gmf.runtime.draw2d.ui.figures.FigureUtilities;
import org.eclipse.gmf.runtime.notation.Connector;
+import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.Shape;
import org.eclipse.gmf.runtime.notation.Style;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.PreferenceConverter;
+import org.eclipse.sirius.diagram.DDiagram;
import org.eclipse.sirius.diagram.LabelPosition;
import org.eclipse.sirius.diagram.NodeStyle;
import org.eclipse.sirius.diagram.ui.internal.edit.parts.DEdgeBeginNameEditPart;
@@ -46,8 +49,7 @@ import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.RGB;
/**
- * A class aggregating all the queries (read-only!) having a {@link View} as a
- * starting point.
+ * A class aggregating all the queries (read-only!) having a {@link View} as a starting point.
*
* @author lredor
*/
@@ -66,8 +68,7 @@ public class ViewQuery {
public static final String VERTICAL_ALIGNMENT = "verticalAlignment"; //$NON-NLS-1$
/**
- * The set of GMF style attributes customizable for which not corresponding
- * Sirius style property exists.
+ * The set of GMF style attributes customizable for which not corresponding Sirius style property exists.
*/
public static final Set<EAttribute> CUSTOMIZABLE_GMF_EXCLUSIVE_STYLE_ATTRIBUTES = new LinkedHashSet<EAttribute>();
@@ -121,11 +122,9 @@ public class ViewQuery {
}
/**
- * Tells if at least one of styles of this {@link View} has some
- * customizations.
+ * Tells if at least one of styles of this {@link View} has some customizations.
*
- * @return true if at least one of styles of this {@link View} has some
- * customizations, false else
+ * @return true if at least one of styles of this {@link View} has some customizations, false else
*/
public boolean isCustomized() {
boolean isCustomized = false;
@@ -167,14 +166,11 @@ public class ViewQuery {
}
/**
- * Get the default value of the specified {@link EAttribute} of the
- * specified {@link View}.
+ * Get the default value of the specified {@link EAttribute} of the specified {@link View}.
*
* @param eAttribute
- * the specified {@link EAttribute} of the
- * {@link View#getStyles()}
- * @return the default value of the specified {@link EAttribute} of the
- * {@link View#getStyles()}
+ * the specified {@link EAttribute} of the {@link View#getStyles()}
+ * @return the default value of the specified {@link EAttribute} of the {@link View#getStyles()}
*/
public Object getDefaultValue(EAttribute eAttribute) {
Object defaultValue = null;
@@ -228,8 +224,7 @@ public class ViewQuery {
/**
* Tests whether the queried View corresponds to a NameEditPart.
*
- * @return <code>true</code> if the queried View corresponds to a
- * NameEditPart.
+ * @return <code>true</code> if the queried View corresponds to a NameEditPart.
*/
public boolean isForNameEditPart() {
int type = SiriusVisualIDRegistry.getVisualID(this.view.getType());
@@ -245,8 +240,7 @@ public class ViewQuery {
/**
* Tests whether the queried View corresponds to an edge name edit part.
*
- * @return <code>true</code> if the queried View corresponds to an edge name
- * edit part.
+ * @return <code>true</code> if the queried View corresponds to an edge name edit part.
*/
public boolean isForEdgeNameEditPart() {
int type = SiriusVisualIDRegistry.getVisualID(this.view.getType());
@@ -257,11 +251,9 @@ public class ViewQuery {
}
/**
- * Tests whether the queried View corresponds to a NameEditPart that is
- * located on the border of its node.
+ * Tests whether the queried View corresponds to a NameEditPart that is located on the border of its node.
*
- * @return <code>true</code> if the queried View corresponds to a
- * NameEditPart.
+ * @return <code>true</code> if the queried View corresponds to a NameEditPart.
*/
public boolean isForNameEditPartOnBorder() {
boolean result = false;
@@ -279,8 +271,7 @@ public class ViewQuery {
}
/**
- * Get the first ancestor, or itself, that has at least one of the
- * <code>visualID</code>.
+ * Get the first ancestor, or itself, that has at least one of the <code>visualID</code>.
*
* @param visualID
* List of visual ID that the ancestor must be.
@@ -301,4 +292,46 @@ public class ViewQuery {
}
return result;
}
+
+ /**
+ * Return the {@link DDiagram} of the {@link Diagram} that is either the given view or a parent of the given view if
+ * such element exists.
+ *
+ * @return the {@link DDiagram} of the {@link Diagram} that is either the given view or a parent of the given view
+ * if such element exists.
+ */
+ public Optional<DDiagram> getDDiagram() {
+ return getDDiagram(view);
+
+ }
+
+ /**
+ * Return true if the view belong to a {@link DDiagram} with showing mode activated. False otherwise.
+ *
+ * @return true if the view belong to a {@link DDiagram} with showing mode activated. False otherwise.
+ */
+ public boolean isInShowingMode() {
+ Optional<DDiagram> dDiagram = getDDiagram(view);
+ return dDiagram.isPresent() && dDiagram.get().isIsInShowingMode();
+
+ }
+
+ /**
+ * Return the {@link DDiagram} of the {@link Diagram} that is either the given view or a parent of the given view if
+ * such element exists.
+ *
+ * @param tempView
+ * the {@link View} from which we try to get the {@link DDiagram}.
+ * @return the {@link DDiagram} of the {@link Diagram} that is either the given view or a parent of the given view
+ * if such element exists.
+ */
+ private Optional<DDiagram> getDDiagram(View tempView) {
+ Optional<DDiagram> result = Optional.empty();
+ if (tempView instanceof Diagram && ((Diagram) tempView).getElement() instanceof DDiagram) {
+ result = Optional.of((DDiagram) ((Diagram) tempView).getElement());
+ } else if (tempView.eContainer() instanceof View) {
+ result = getDDiagram((View) tempView.eContainer());
+ }
+ return result;
+ }
}
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/business/internal/query/DEdgeQuery.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/business/internal/query/DEdgeQuery.java
index 366459704f..da60b99b00 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/business/internal/query/DEdgeQuery.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/business/internal/query/DEdgeQuery.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2010 THALES GLOBAL SERVICES.
+ * Copyright (c) 2010, 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
@@ -10,7 +10,11 @@
*******************************************************************************/
package org.eclipse.sirius.diagram.ui.business.internal.query;
+import java.util.Optional;
+
+import org.eclipse.emf.ecore.EObject;
import org.eclipse.gmf.runtime.notation.Routing;
+import org.eclipse.sirius.diagram.DDiagram;
import org.eclipse.sirius.diagram.DEdge;
import org.eclipse.sirius.diagram.EdgeRouting;
import org.eclipse.sirius.diagram.EdgeStyle;
@@ -43,11 +47,11 @@ public class DEdgeQuery {
*
* @param style
* the style to test for.
- * @return a predicate on DEdge which returns <code>true</code> if the DEdge
- * has the specified folding style.
+ * @return a predicate on DEdge which returns <code>true</code> if the DEdge has the specified folding style.
*/
public static Predicate<DEdge> hasFoldingStyle(final FoldingStyle style) {
return new Predicate<DEdge>() {
+ @Override
public boolean apply(DEdge input) {
return new DEdgeQuery(input).getFoldingStyle() == style;
}
@@ -57,9 +61,8 @@ public class DEdgeQuery {
/**
* Returns the folding style of the edge.
*
- * @return the folding style of the edge, or
- * {@link FoldingStyle#NONE_LITERAL} if none is specified. Never
- * returns <code>null</code>.
+ * @return the folding style of the edge, or {@link FoldingStyle#NONE_LITERAL} if none is specified. Never returns
+ * <code>null</code>.
*/
public FoldingStyle getFoldingStyle() {
EdgeStyle style = edge.getOwnedStyle();
@@ -101,4 +104,31 @@ public class DEdgeQuery {
return routing;
}
+ /**
+ * Return the {@link DDiagram} recursively parent of the edge if such element exists.
+ *
+ * @return the {@link DDiagram} recursively parent of the edge if such element exists.
+ */
+ public Optional<DDiagram> getDDiagram() {
+ return getDDiagram(edge.eContainer());
+ }
+
+ /**
+ * Return the {@link DDiagram} recursively parent of given object if such element exists.
+ *
+ * @param object
+ * the object from which we want to retrieve the {@link DDiagram} that is either the direct parent or
+ * recursively the parent.
+ * @return the {@link DDiagram} recursively parent of given object if such element exists.
+ */
+ private Optional<DDiagram> getDDiagram(EObject object) {
+ Optional<DDiagram> result = Optional.empty();
+ if (object instanceof DDiagram) {
+ result = Optional.of((DDiagram) object);
+ } else if (object != null) {
+ result = getDDiagram(object.eContainer());
+ }
+ return result;
+
+ }
}
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/business/internal/view/ShowingViewUtil.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/business/internal/view/ShowingViewUtil.java
new file mode 100644
index 0000000000..a5f1266ae1
--- /dev/null
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/business/internal/view/ShowingViewUtil.java
@@ -0,0 +1,264 @@
+/*******************************************************************************
+ * 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.business.internal.view;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import org.eclipse.draw2d.Graphics;
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.gef.editparts.AbstractGraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.editparts.ConnectionEditPart;
+import org.eclipse.gmf.runtime.notation.Edge;
+import org.eclipse.gmf.runtime.notation.NotationPackage;
+import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.sirius.diagram.DDiagram;
+import org.eclipse.sirius.diagram.ui.business.api.query.ViewQuery;
+import org.eclipse.sirius.diagram.ui.edit.internal.part.DiagramElementEditPartOperation;
+
+/**
+ * This utility class contains methods to handle {@link View} and taking in consideration the activation status of the
+ * showing mode.
+ *
+ * @author <a href="mailto:pierre.guilet@obeo.fr">Pierre Guilet</a>
+ *
+ */
+public final class ShowingViewUtil {
+
+ private ShowingViewUtil() {
+ }
+
+ /**
+ * Returns the {@link View} of the given model. The views to be returned must be visible ({@link View#isVisible()}
+ * to true ) or the showing mode must be activated.
+ *
+ * @param model
+ * the model from which we want to retrieve views.
+ * @return the {@link View} of the given model if it is a view. The views to be returned must be visible
+ * ({@link View#isVisible() to true} ) or the showing mode must be activated.
+ */
+ public static List<View> getModelChildren(Object model) {
+ if (model instanceof View) {
+ List<View> modelChildren = null;
+ ViewQuery viewQuery = new ViewQuery((View) model);
+ if (viewQuery.isInShowingMode()) {
+ modelChildren = new ArrayList<EObject>(((View) model).getChildren()).stream().filter(View.class::isInstance).map(View.class::cast).collect(Collectors.toList());
+ } else {
+ modelChildren = new ArrayList<EObject>(((View) model).getVisibleChildren()).stream().filter(View.class::isInstance).map(View.class::cast).collect(Collectors.toList());
+ DiagramElementEditPartOperation.removeInvisibleElements(modelChildren);
+ }
+ return modelChildren;
+ }
+ return Collections.EMPTY_LIST;
+ }
+
+ /**
+ * Returns all the {@link Edge}'s whose source is the given view if edges are visible ({@link View#isVisible()} to
+ * true ) or the showing mode is activated.
+ *
+ * @param view
+ * the view to use
+ * @return List all the {@link Edge}'s whose source is the given view if edges are either visible
+ * ({@link View#isVisible()} to true ) or the showing mode is activated.
+ */
+ public static List<View> getSourceConnectionsConnectingVisibleViews(View view) {
+ if (!view.eIsSet(NotationPackage.Literals.VIEW__SOURCE_EDGES))
+ return Collections.EMPTY_LIST;
+ List<View> sourceConnections = new ArrayList<View>();
+ ViewQuery viewQuery = new ViewQuery(view);
+ boolean isIsInShowingMode = viewQuery.isInShowingMode();
+ Iterator<View> iter = view.getSourceEdges().iterator();
+ while (iter.hasNext()) {
+ Edge edge = (Edge) iter.next();
+ View target = edge.getTarget();
+ if (isIsInShowingMode || (edge.isVisible() && isVisible(target))) {
+ sourceConnections.add(edge);
+ }
+ }
+ if (!isIsInShowingMode) {
+ DiagramElementEditPartOperation.removeInvisibleElements(sourceConnections);
+ }
+ return sourceConnections;
+ }
+
+ /**
+ * Set given visibility to the given part regarding the current part selection status and auto connectionvisibility.
+ *
+ * @param editPart
+ * the part target of the visibility change.
+ * @param visibility
+ * the visibility to set.
+ * @param noSelectionStatus
+ * the Integer representing the no selection status for an edit part.
+ * @param autoConnectionsVisibility
+ * true if automatic updates of source/target connections visibility should be triggered by the change of
+ * this editpart's visibility. False otherwise.
+ */
+ public static void setVisibility(AbstractGraphicalEditPart editPart, boolean visibility, int noSelectionStatus, boolean autoConnectionsVisibility) {
+ if (!visibility && editPart.getSelected() != noSelectionStatus)
+ editPart.getViewer().deselect(editPart);
+ View view = (View) editPart.getModel();
+ ViewQuery viewQuery = new ViewQuery(view);
+ IFigure figure = editPart.getFigure();
+ if (figure.isVisible() == visibility && !viewQuery.isInShowingMode()) {
+ return;
+ }
+
+ // if we are going to hide the node then connections coming to the
+ // node or outside it should be hidden as well
+ if (autoConnectionsVisibility) {
+ ShowingViewUtil.setConnectionsVisibility(editPart, view, noSelectionStatus, visibility);
+ }
+ if (viewQuery.isInShowingMode()) {
+ figure.setVisible(true);
+ } else {
+ figure.setVisible(visibility);
+ }
+
+ figure.revalidate();
+ }
+
+ /**
+ * Returns true if the given {@link View} is visible as well as all its parents. False otherwise.
+ *
+ * @param view
+ * the view to test.
+ * @return true if the given {@link View} is visible as well as all its parents. False otherwise.
+ */
+ private static boolean isVisible(View view) {
+ boolean result = false;
+ if (view != null && view.isVisible()) {
+ EObject parent = view.eContainer();
+ if (parent instanceof View) {
+ result = isVisible((View) parent);
+ } else {
+ result = true;
+ }
+ }
+ return result;
+ }
+
+ /**
+ * Returns all {@link Edge}'s whose target is the given view if edges are visible ({@link View#isVisible()} to true
+ * ) or the showing mode is activated..
+ *
+ * @param view
+ * the view to use.
+ * @return List all {@link Edge}'s whose target is the given view if edges are visible ({@link View#isVisible()} to
+ * true ) or the showing mode is activated..
+ */
+ public static List<View> getTargetConnectionsConnectingVisibleViews(View view) {
+ if (!view.eIsSet(NotationPackage.Literals.VIEW__TARGET_EDGES))
+ return Collections.EMPTY_LIST;
+ List<View> targteConnections = new ArrayList<View>();
+ Iterator<View> iter = view.getTargetEdges().iterator();
+ ViewQuery viewQuery = new ViewQuery(view);
+ boolean isIsInShowingMode = viewQuery.isInShowingMode();
+ while (iter.hasNext()) {
+ Edge edge = (Edge) iter.next();
+ View source = edge.getSource();
+ if (isIsInShowingMode || (edge.isVisible() && isVisible(source))) {
+ targteConnections.add(edge);
+ }
+ if (!isIsInShowingMode) {
+ DiagramElementEditPartOperation.removeInvisibleElements(targteConnections);
+ }
+ }
+ return targteConnections;
+ }
+
+ /**
+ * Sets the visibility of the edit part's source and target connections to the given one by taking in consideration
+ * the selection status.
+ *
+ * @param editPart
+ * the part from which connections visibility will be updated.
+ * @param view
+ * the view used to retrieve the {@link DDiagram} with showing mode activation status information.
+ * @param selectionStatus
+ * the selection status of the part.
+ * @param isVisible
+ * the new visibility to set.
+ */
+ public static void setConnectionsVisibility(AbstractGraphicalEditPart editPart, View view, int selectionStatus, boolean isVisible) {
+ List<Object> srcConnections = editPart.getSourceConnections();
+ ViewQuery viewQuery = new ViewQuery(view);
+ boolean isInShowingMode = viewQuery.isInShowingMode();
+ updateVisibility(editPart, selectionStatus, isVisible, srcConnections, isInShowingMode);
+ List<Object> targetConnections = editPart.getTargetConnections();
+ updateVisibility(editPart, selectionStatus, isVisible, targetConnections, isInShowingMode);
+ }
+
+ /**
+ * Update visibility of edit part's connections regarding showing mode activation status and diagram selection
+ * status.
+ *
+ * @param editPart
+ * the part from which connections visibility will be updated.
+ * @param selectionStatus
+ * the current selection status.
+ * @param isVisible
+ * the new visibility to set.
+ * @param connections
+ * the edit part's connections.
+ * @param isInShowingMode
+ * true if the diagram is in showing mode. False otherwise.
+ */
+ private static void updateVisibility(AbstractGraphicalEditPart editPart, int selectionStatus, boolean isVisible, List<Object> connections, boolean isInShowingMode) {
+ Iterator<Object> connexionsIte = connections.iterator();
+ while (connexionsIte.hasNext()) {
+ ConnectionEditPart connection = (ConnectionEditPart) connexionsIte.next();
+ if (connection.getFigure().isVisible() != isVisible || isInShowingMode) {
+ if (!isVisible && connection.getSelected() != selectionStatus)
+ connection.getViewer().deselect(editPart);
+ if (isInShowingMode) {
+ connection.getFigure().setVisible(true);
+ } else {
+ connection.getFigure().setVisible(isVisible);
+ }
+ connection.getFigure().revalidate();
+ }
+ }
+ }
+
+ /**
+ * Initialize the graphics to draw the invisible element with transparency. After this method is called, the
+ * graphics must be restored. Example of use: <code>
+ * public void paint(Graphics graphics) {
+ * initGraphicsForVisibleAndInvisibleElements(this, graphics, (View) getModel());
+ * try {
+ * super.paint(graphics);
+ * graphics.restoreState();
+ * } finally {
+ * graphics.popState();
+ * }
+ *}
+ * </code>
+ *
+ * @param figure
+ * Figure to be drawn
+ * @param graphics
+ * Graphics to use to draw the figure
+ * @param correspondingView
+ * The GMF view associated with this figure
+ */
+ public static void initGraphicsForVisibleAndInvisibleElements(IFigure figure, Graphics graphics, View correspondingView) {
+ graphics.pushState();
+ ViewQuery viewQuery = new ViewQuery(correspondingView);
+ if (figure.isVisible() != correspondingView.isVisible() && viewQuery.isInShowingMode()) {
+ graphics.setAlpha(50);
+ }
+ }
+}
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractBorderedDiagramElementEditPart.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractBorderedDiagramElementEditPart.java
index 26f6e02df2..7c82144449 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractBorderedDiagramElementEditPart.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractBorderedDiagramElementEditPart.java
@@ -11,6 +11,7 @@
package org.eclipse.sirius.diagram.ui.edit.api.part;
import java.util.List;
+import java.util.Optional;
import org.eclipse.draw2d.IFigure;
import org.eclipse.emf.ecore.EObject;
@@ -21,7 +22,11 @@ import org.eclipse.gmf.runtime.diagram.ui.editparts.AbstractBorderedShapeEditPar
import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
import org.eclipse.gmf.runtime.draw2d.ui.figures.IBorderItemLocator;
import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.sirius.diagram.DDiagram;
import org.eclipse.sirius.diagram.DDiagramElement;
+import org.eclipse.sirius.diagram.DiagramPackage;
+import org.eclipse.sirius.diagram.ui.business.api.query.ViewQuery;
+import org.eclipse.sirius.diagram.ui.business.internal.view.ShowingViewUtil;
import org.eclipse.sirius.diagram.ui.edit.internal.part.AbstractDiagramNodeEditPartOperation;
import org.eclipse.sirius.diagram.ui.edit.internal.part.DiagramElementEditPartOperation;
import org.eclipse.sirius.diagram.ui.edit.internal.part.EditStatusUpdater;
@@ -32,11 +37,8 @@ import org.eclipse.sirius.ecore.extender.business.api.permission.IPermissionAuth
import org.eclipse.sirius.ecore.extender.business.api.permission.PermissionAuthorityRegistry;
import org.eclipse.swt.graphics.Image;
-import com.google.common.collect.Lists;
-
/**
- * Some Default behaviors for non border IAbstractDiagramNodeEditPart: nodes,
- * lists and containers.
+ * Some Default behaviors for non border IAbstractDiagramNodeEditPart: nodes, lists and containers.
*
* @author mporhel
*/
@@ -102,6 +104,16 @@ public abstract class AbstractBorderedDiagramElementEditPart extends AbstractBor
return this.adapterDiagramElement;
}
+ @Override
+ protected void setVisibility(boolean vis) {
+ ShowingViewUtil.setVisibility(this, vis, SELECTED_NONE, getFlag(FLAG__AUTO_CONNECTIONS_VISIBILITY));
+ }
+
+ @Override
+ protected void setConnectionsVisibility(boolean visibility) {
+ ShowingViewUtil.setConnectionsVisibility(this, (View) getModel(), SELECTED_NONE, visibility);
+ }
+
/**
* {@inheritDoc}
*/
@@ -180,8 +192,7 @@ public abstract class AbstractBorderedDiagramElementEditPart extends AbstractBor
@Override
public void enableEditMode() {
/*
- * We want to be sure nobody is enabling the edit mode if the element is
- * locked.
+ * We want to be sure nobody is enabling the edit mode if the element is locked.
*/
if (!this.getEditPartAuthorityListener().isLocked()) {
super.enableEditMode();
@@ -201,30 +212,37 @@ public abstract class AbstractBorderedDiagramElementEditPart extends AbstractBor
}
}
- /**
- * {@inheritDoc}
- */
@Override
- @SuppressWarnings("unchecked")
+ protected List getModelChildren() {
+ return ShowingViewUtil.getModelChildren(getModel());
+ }
+
+ @Override
+ protected void addNotationalListeners() {
+ super.addNotationalListeners();
+ if (hasNotationView()) {
+ ViewQuery viewQuery = new ViewQuery((View) getModel());
+ Optional<DDiagram> diagram = viewQuery.getDDiagram();
+ if (diagram.isPresent()) {
+ addListenerFilter("ShowingMode", this, diagram.get(), DiagramPackage.eINSTANCE.getDDiagram_IsInShowingMode()); //$NON-NLS-1$
+ }
+ }
+ }
+
+ @Override
+ protected void removeNotationalListeners() {
+ super.removeNotationalListeners();
+ removeListenerFilter("ShowingMode"); //$NON-NLS-1$
+ }
+
+ @Override
protected List getModelSourceConnections() {
- // create a new view to avoid to change the
- // super.getModelSourceConnections list.
- List<?> modelChildren = Lists.newArrayList(super.getModelSourceConnections());
- DiagramElementEditPartOperation.removeInvisibleElements(modelChildren);
- return modelChildren;
+ return ShowingViewUtil.getSourceConnectionsConnectingVisibleViews((View) getModel());
}
- /**
- * {@inheritDoc}
- */
@Override
- @SuppressWarnings("unchecked")
protected List getModelTargetConnections() {
- // create a new view to avoid to change the
- // super.getModelTargetConnections list.
- List<?> modelChildren = Lists.newArrayList(super.getModelTargetConnections());
- DiagramElementEditPartOperation.removeInvisibleElements(modelChildren);
- return modelChildren;
+ return ShowingViewUtil.getTargetConnectionsConnectingVisibleViews((View) getModel());
}
/**
@@ -249,8 +267,7 @@ public abstract class AbstractBorderedDiagramElementEditPart extends AbstractBor
}
/**
- * Sets the tooltip of this {@link org.eclipse.gef.EditPart} to the
- * specified text.
+ * Sets the tooltip of this {@link org.eclipse.gef.EditPart} to the specified text.
*
* @param text
* the tooltip's text.
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDDiagramEditPart.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDDiagramEditPart.java
index bf0bfd3d47..b86adb9dda 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDDiagramEditPart.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDDiagramEditPart.java
@@ -17,6 +17,7 @@ import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import org.eclipse.emf.common.notify.Notification;
import org.eclipse.emf.common.util.BasicEList;
@@ -59,7 +60,8 @@ import org.eclipse.sirius.diagram.description.EdgeMapping;
import org.eclipse.sirius.diagram.description.Layer;
import org.eclipse.sirius.diagram.description.filter.CompositeFilterDescription;
import org.eclipse.sirius.diagram.description.filter.FilterDescription;
-import org.eclipse.sirius.diagram.ui.edit.internal.part.DiagramElementEditPartOperation;
+import org.eclipse.sirius.diagram.ui.business.api.query.ViewQuery;
+import org.eclipse.sirius.diagram.ui.business.internal.view.ShowingViewUtil;
import org.eclipse.sirius.diagram.ui.graphical.edit.policies.SiriusPopupBarEditPolicy;
import org.eclipse.sirius.diagram.ui.tools.api.command.GMFCommandWrapper;
import org.eclipse.sirius.diagram.ui.tools.api.editor.DDiagramEditor;
@@ -123,13 +125,34 @@ public abstract class AbstractDDiagramEditPart extends DiagramEditPart implement
}
@Override
- protected List<?> getModelChildren() {
- /*
- * create a new view to avoid to change the super.getModelChildren list.
- */
- final List<?> modelChildren = new ArrayList<Object>(super.getModelChildren());
- DiagramElementEditPartOperation.removeInvisibleElements(modelChildren);
- return modelChildren;
+ protected List getModelChildren() {
+ return ShowingViewUtil.getModelChildren(getModel());
+ }
+
+ @Override
+ protected void addNotationalListeners() {
+ super.addNotationalListeners();
+ if (hasNotationView()) {
+ ViewQuery viewQuery = new ViewQuery((View) getModel());
+ Optional<DDiagram> diagram = viewQuery.getDDiagram();
+ if (diagram.isPresent()) {
+ addListenerFilter("ShowingMode", this, diagram.get(), DiagramPackage.eINSTANCE.getDDiagram_IsInShowingMode()); //$NON-NLS-1$
+ }
+ }
+ }
+
+ @Override
+ protected void removeNotationalListeners() {
+ super.removeNotationalListeners();
+ removeListenerFilter("ShowingMode"); //$NON-NLS-1$
+ }
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart#setVisibility(boolean)
+ */
+ @Override
+ protected void setVisibility(boolean vis) {
+ ShowingViewUtil.setVisibility(this, vis, SELECTED_NONE, getFlag(FLAG__AUTO_CONNECTIONS_VISIBILITY));
}
@Override
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramBorderNodeEditPart.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramBorderNodeEditPart.java
index c1ca00ff1d..16ff3b9dc5 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramBorderNodeEditPart.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramBorderNodeEditPart.java
@@ -10,8 +10,8 @@
*******************************************************************************/
package org.eclipse.sirius.diagram.ui.edit.api.part;
-import java.util.ArrayList;
import java.util.List;
+import java.util.Optional;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.draw2d.ConnectionAnchor;
@@ -48,12 +48,16 @@ import org.eclipse.gmf.runtime.draw2d.ui.figures.IBorderItemLocator;
import org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.sirius.common.tools.api.util.StringUtil;
+import org.eclipse.sirius.diagram.DDiagram;
import org.eclipse.sirius.diagram.DDiagramElement;
import org.eclipse.sirius.diagram.DNode;
+import org.eclipse.sirius.diagram.DiagramPackage;
import org.eclipse.sirius.diagram.LabelPosition;
import org.eclipse.sirius.diagram.NodeStyle;
+import org.eclipse.sirius.diagram.ui.business.api.query.ViewQuery;
import org.eclipse.sirius.diagram.ui.business.api.view.SiriusLayoutDataManager;
import org.eclipse.sirius.diagram.ui.business.internal.query.RequestQuery;
+import org.eclipse.sirius.diagram.ui.business.internal.view.ShowingViewUtil;
import org.eclipse.sirius.diagram.ui.edit.internal.part.AbstractDiagramNodeEditPartOperation;
import org.eclipse.sirius.diagram.ui.edit.internal.part.CommonEditPartOperation;
import org.eclipse.sirius.diagram.ui.edit.internal.part.DefaultDirectEditOperation;
@@ -80,7 +84,6 @@ import org.eclipse.sirius.ext.gmf.runtime.editpolicies.SiriusSnapFeedbackPolicy;
import org.eclipse.swt.graphics.Image;
import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
/**
* Basic implementation of top level edit part for nodes that on the border of another node.
@@ -237,36 +240,65 @@ public abstract class AbstractDiagramBorderNodeEditPart extends BorderedBorderIt
}
@Override
- protected List<?> getModelChildren() {
- // create a new view to avoid to change the super.getModelChildren list.
- final List<?> modelChildren = new ArrayList<Object>(super.getModelChildren());
- DiagramElementEditPartOperation.removeInvisibleElements(modelChildren);
- final EObject diagramElement = this.resolveDiagramElement();
- if (diagramElement instanceof DNode) {
- final DNode node = (DNode) diagramElement;
- if (((NodeStyle) node.getStyle()).getLabelPosition() == LabelPosition.NODE_LITERAL || StringUtil.isEmpty(node.getName())) {
- DiagramNodeEditPartOperation.removeLabel(this, modelChildren);
+ protected List getModelChildren() {
+ List<View> modelChildren = ShowingViewUtil.getModelChildren(getModel());
+ if (!modelChildren.isEmpty()) {
+ final EObject diagramElement = this.resolveDiagramElement();
+ if (diagramElement instanceof DNode) {
+ final DNode node = (DNode) diagramElement;
+ if (((NodeStyle) node.getStyle()).getLabelPosition() == LabelPosition.NODE_LITERAL || StringUtil.isEmpty(node.getName())) {
+ DiagramNodeEditPartOperation.removeLabel(this, modelChildren);
+ }
}
}
return modelChildren;
}
@Override
- protected List<?> getModelSourceConnections() {
- // create a new view to avoid to change the
- // super.getModelSourceConnections list.
- List<View> modelChildren = Lists.newArrayList(Iterables.filter(super.getModelSourceConnections(), View.class));
- DiagramElementEditPartOperation.removeInvisibleElements(modelChildren);
- return modelChildren;
+ protected void addNotationalListeners() {
+ super.addNotationalListeners();
+ if (hasNotationView()) {
+ ViewQuery viewQuery = new ViewQuery((View) getModel());
+ Optional<DDiagram> diagram = viewQuery.getDDiagram();
+ if (diagram.isPresent()) {
+ addListenerFilter("ShowingMode", this, diagram.get(), DiagramPackage.eINSTANCE.getDDiagram_IsInShowingMode()); //$NON-NLS-1$
+ }
+ }
}
@Override
- protected List<View> getModelTargetConnections() {
- // create a new view to avoid to change the
- // super.getModelTargetConnections list.
- final List<View> modelChildren = Lists.newArrayList(Iterables.filter(super.getModelTargetConnections(), View.class));
- DiagramElementEditPartOperation.removeInvisibleElements(modelChildren);
- return modelChildren;
+ protected void removeNotationalListeners() {
+ super.removeNotationalListeners();
+ removeListenerFilter("ShowingMode"); //$NON-NLS-1$
+ }
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart#setVisibility(boolean)
+ */
+ @Override
+ protected void setVisibility(boolean vis) {
+ ShowingViewUtil.setVisibility(this, vis, SELECTED_NONE, getFlag(FLAG__AUTO_CONNECTIONS_VISIBILITY));
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected List getModelSourceConnections() {
+ return ShowingViewUtil.getSourceConnectionsConnectingVisibleViews((View) getModel());
+ }
+
+ @Override
+ protected void setConnectionsVisibility(boolean visibility) {
+ ShowingViewUtil.setConnectionsVisibility(this, (View) getModel(), SELECTED_NONE, visibility);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected List getModelTargetConnections() {
+ return ShowingViewUtil.getTargetConnectionsConnectingVisibleViews((View) getModel());
}
@Override
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramEdgeEditPart.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramEdgeEditPart.java
index ea9aabdf3b..21f13cbc85 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramEdgeEditPart.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramEdgeEditPart.java
@@ -11,6 +11,7 @@
package org.eclipse.sirius.diagram.ui.edit.api.part;
import java.util.List;
+import java.util.Optional;
import org.eclipse.draw2d.BendpointConnectionRouter;
import org.eclipse.draw2d.Connection;
@@ -43,6 +44,7 @@ import org.eclipse.gmf.runtime.draw2d.ui.figures.PolylineConnectionEx;
import org.eclipse.gmf.runtime.draw2d.ui.internal.routers.ITreeConnection;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.sirius.common.tools.api.util.StringUtil;
+import org.eclipse.sirius.diagram.DDiagram;
import org.eclipse.sirius.diagram.DDiagramElement;
import org.eclipse.sirius.diagram.DEdge;
import org.eclipse.sirius.diagram.DiagramPackage;
@@ -50,6 +52,9 @@ import org.eclipse.sirius.diagram.EdgeStyle;
import org.eclipse.sirius.diagram.business.api.query.DDiagramElementQuery;
import org.eclipse.sirius.diagram.description.CenteringStyle;
import org.eclipse.sirius.diagram.description.tool.RequestDescription;
+import org.eclipse.sirius.diagram.ui.business.api.query.ViewQuery;
+import org.eclipse.sirius.diagram.ui.business.internal.query.DEdgeQuery;
+import org.eclipse.sirius.diagram.ui.business.internal.view.ShowingViewUtil;
import org.eclipse.sirius.diagram.ui.edit.internal.part.CommonEditPartOperation;
import org.eclipse.sirius.diagram.ui.edit.internal.part.DiagramEdgeEditPartOperation;
import org.eclipse.sirius.diagram.ui.edit.internal.part.DiagramElementEditPartOperation;
@@ -174,6 +179,42 @@ public abstract class AbstractDiagramEdgeEditPart extends ConnectionNodeEditPart
return CommonEditPartOperation.handleAutoPinOnInteractiveMove(this, request, cmd);
}
+ @Override
+ protected void addNotationalListeners() {
+ super.addNotationalListeners();
+ Object model = getModel();
+ if (model instanceof View) {
+ ViewQuery viewQuery = new ViewQuery((View) getModel());
+ Optional<DDiagram> diagram = viewQuery.getDDiagram();
+ if (diagram.isPresent()) {
+ addListenerFilter("ShowingMode", this, diagram.get(), DiagramPackage.eINSTANCE.getDDiagram_IsInShowingMode()); //$NON-NLS-1$
+ }
+ }
+ }
+
+ @Override
+ protected void removeNotationalListeners() {
+ super.removeNotationalListeners();
+ removeListenerFilter("ShowingMode"); //$NON-NLS-1$
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart#setVisibility(boolean)
+ */
+ @Override
+ public void setVisibility(boolean vis) {
+ if (!vis && getSelected() != SELECTED_NONE)
+ getViewer().deselect(this);
+ ViewQuery viewQuery = new ViewQuery((View) getModel());
+ if (viewQuery.isInShowingMode()) {
+ figure.setVisible(true);
+ } else {
+ figure.setVisible(vis);
+ }
+ getFigure().revalidate();
+ }
+
/**
* <p>
* {@inheritDoc}
@@ -632,8 +673,15 @@ public abstract class AbstractDiagramEdgeEditPart extends ConnectionNodeEditPart
final EObject element = resolveSemanticElement();
if (element != null && DEdge.class.isInstance(element)) {
final DEdge viewEdge = (DEdge) element;
- if (!viewEdge.isIsMockEdge() && viewEdge.isVisible()) {
- super.paintFigure(graphics);
+ DDiagram diagram = viewEdge.getParentDiagram();
+ if ((!viewEdge.isIsMockEdge() && viewEdge.isVisible()) || (diagram != null && diagram.isIsInShowingMode())) {
+ ShowingViewUtil.initGraphicsForVisibleAndInvisibleElements(this, graphics, (View) getModel());
+ try {
+ super.paintFigure(graphics);
+ graphics.restoreState();
+ } finally {
+ graphics.popState();
+ }
}
}
}
@@ -646,7 +694,9 @@ public abstract class AbstractDiagramEdgeEditPart extends ConnectionNodeEditPart
final EObject element = resolveSemanticElement();
if (element != null && DEdge.class.isInstance(element)) {
final DEdge viewEdge = (DEdge) element;
- if (viewEdge.isVisible()) {
+ DEdgeQuery dEdgeQuery = new DEdgeQuery(viewEdge);
+ Optional<DDiagram> diagram = dEdgeQuery.getDDiagram();
+ if (viewEdge.isVisible() || (diagram.isPresent() && diagram.get().isIsInShowingMode())) {
super.paintChildren(graphics);
}
}
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramElementContainerEditPart.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramElementContainerEditPart.java
index 6f76b9c957..2c2c325b21 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramElementContainerEditPart.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramElementContainerEditPart.java
@@ -15,6 +15,7 @@ import java.util.Iterator;
import java.util.List;
import org.eclipse.draw2d.ConnectionAnchor;
+import org.eclipse.draw2d.Graphics;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.PositionConstants;
import org.eclipse.draw2d.StackLayout;
@@ -63,6 +64,7 @@ import org.eclipse.sirius.diagram.WorkspaceImage;
import org.eclipse.sirius.diagram.business.api.query.DDiagramElementQuery;
import org.eclipse.sirius.diagram.business.internal.query.DDiagramElementContainerExperimentalQuery;
import org.eclipse.sirius.diagram.ui.business.internal.query.DNodeContainerQuery;
+import org.eclipse.sirius.diagram.ui.business.internal.view.ShowingViewUtil;
import org.eclipse.sirius.diagram.ui.edit.internal.part.AbstractDiagramNodeEditPartOperation;
import org.eclipse.sirius.diagram.ui.edit.internal.part.DiagramContainerEditPartOperation;
import org.eclipse.sirius.diagram.ui.edit.internal.part.DiagramElementEditPartOperation;
@@ -92,8 +94,6 @@ import org.eclipse.sirius.ext.gmf.runtime.gef.ui.figures.SiriusDefaultSizeNodeFi
import org.eclipse.sirius.viewpoint.DStylizable;
import org.eclipse.sirius.viewpoint.description.style.LabelBorderStyleDescription;
-import com.google.common.collect.Lists;
-
/**
* Basic implementation of top Level type of Diagram an List Containers.
*
@@ -233,15 +233,6 @@ public abstract class AbstractDiagramElementContainerEditPart extends AbstractBo
}
}
- @SuppressWarnings({ "unchecked" })
- @Override
- protected List getModelChildren() {
- // create a new view to avoid to change the super.getModelChildren list.
- List<?> modelChildren = Lists.newArrayList(super.getModelChildren());
- DiagramElementEditPartOperation.removeInvisibleElements(modelChildren);
- return modelChildren;
- }
-
public IFigure getBackgroundFigure() {
return this.backgroundFigure;
}
@@ -486,7 +477,18 @@ public abstract class AbstractDiagramElementContainerEditPart extends AbstractBo
*/
@Override
protected NodeFigure createNodeFigure() {
- BorderedNodeFigure nodeFigure = new BorderedNodeFigure(createMainFigure());
+ BorderedNodeFigure nodeFigure = new BorderedNodeFigure(createMainFigure()) {
+ @Override
+ public void paint(Graphics graphics) {
+ ShowingViewUtil.initGraphicsForVisibleAndInvisibleElements(this, graphics, (View) getModel());
+ try {
+ super.paint(graphics);
+ graphics.restoreState();
+ } finally {
+ graphics.popState();
+ }
+ }
+ };
nodeFigure.getBorderItemContainer().add(new FoldingToggleImageFigure(this));
nodeFigure.getBorderItemContainer().setClippingStrategy(new FoldingToggleAwareClippingStrategy());
return nodeFigure;
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramNameEditPart.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramNameEditPart.java
index 1cafe90087..dc3eb177f4 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramNameEditPart.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramNameEditPart.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2016 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.edit.api.part;
import java.util.List;
+import java.util.Optional;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.Label;
@@ -25,13 +26,17 @@ import org.eclipse.gmf.runtime.diagram.ui.editparts.LabelEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.sirius.common.tools.api.util.StringUtil;
+import org.eclipse.sirius.diagram.DDiagram;
import org.eclipse.sirius.diagram.DDiagramElement;
import org.eclipse.sirius.diagram.DEdge;
import org.eclipse.sirius.diagram.DNode;
import org.eclipse.sirius.diagram.DNodeContainer;
import org.eclipse.sirius.diagram.DNodeList;
+import org.eclipse.sirius.diagram.DiagramPackage;
import org.eclipse.sirius.diagram.description.tool.DirectEditLabel;
import org.eclipse.sirius.diagram.tools.internal.command.builders.DirectEditCommandBuilder;
+import org.eclipse.sirius.diagram.ui.business.api.query.ViewQuery;
+import org.eclipse.sirius.diagram.ui.business.internal.view.ShowingViewUtil;
import org.eclipse.sirius.diagram.ui.edit.internal.part.DiagramElementEditPartOperation;
import org.eclipse.sirius.diagram.ui.graphical.edit.policies.LabelDeletionEditPolicy;
import org.eclipse.sirius.diagram.ui.graphical.edit.policies.LabelSemanticEditPolicy;
@@ -67,6 +72,37 @@ public abstract class AbstractDiagramNameEditPart extends LabelEditPart implemen
labelAndIconRefresher = new LabelAndIconRefresher(this);
}
+ @Override
+ protected List getModelChildren() {
+ return ShowingViewUtil.getModelChildren(getModel());
+ }
+
+ @Override
+ protected void addNotationalListeners() {
+ super.addNotationalListeners();
+ if (hasNotationView()) {
+ ViewQuery viewQuery = new ViewQuery((View) getModel());
+ Optional<DDiagram> diagram = viewQuery.getDDiagram();
+ if (diagram.isPresent()) {
+ addListenerFilter("ShowingMode", this, diagram.get(), DiagramPackage.eINSTANCE.getDDiagram_IsInShowingMode()); //$NON-NLS-1$
+ }
+ }
+ }
+
+ @Override
+ protected void removeNotationalListeners() {
+ super.removeNotationalListeners();
+ removeListenerFilter("ShowingMode"); //$NON-NLS-1$
+ }
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart#setVisibility(boolean)
+ */
+ @Override
+ protected void setVisibility(boolean vis) {
+ ShowingViewUtil.setVisibility(this, vis, SELECTED_NONE, getFlag(FLAG__AUTO_CONNECTIONS_VISIBILITY));
+ }
+
/**
* Check if the edit part had a resizable edit policy installed or not.
*
@@ -181,9 +217,8 @@ public abstract class AbstractDiagramNameEditPart extends LabelEditPart implemen
/**
* Test if this edit part must provides the direct edit.
*
- * @return true if the semantic element have a mapping with a direct edit
- * tool and if the parent diagram is not in LayoutingMode, false
- * otherwise
+ * @return true if the semantic element have a mapping with a direct edit tool and if the parent diagram is not in
+ * LayoutingMode, false otherwise
*/
protected boolean isDirectEditEnabled() {
boolean directEditEnabled = false;
@@ -202,8 +237,7 @@ public abstract class AbstractDiagramNameEditPart extends LabelEditPart implemen
}
/**
- * Activate directEdit only if there is a directEdit tool on the mapping.
- * {@inheritDoc}
+ * Activate directEdit only if there is a directEdit tool on the mapping. {@inheritDoc}
*
* @see org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart#performRequest(org.eclipse.gef.Request)
*/
@@ -223,8 +257,7 @@ public abstract class AbstractDiagramNameEditPart extends LabelEditPart implemen
}
/**
- * Checks whether a {@link EditPolicy#DIRECT_EDIT_ROLE} is already install,
- * otherwise we install it.
+ * Checks whether a {@link EditPolicy#DIRECT_EDIT_ROLE} is already install, otherwise we install it.
*/
private void addDirectEditPolicyIfNotInstalled() {
if (getEditPolicy(EditPolicy.DIRECT_EDIT_ROLE) == null) {
@@ -245,8 +278,7 @@ public abstract class AbstractDiagramNameEditPart extends LabelEditPart implemen
}
/**
- * Sets the tool-tip of an {@link IAbstractDiagramNodeEditPart} to the
- * specified text.
+ * Sets the tool-tip of an {@link IAbstractDiagramNodeEditPart} to the specified text.
*
* @param text
* the tool-tip's text.
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramNodeEditPart.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramNodeEditPart.java
index 074de3bee5..662b3147b6 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramNodeEditPart.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractDiagramNodeEditPart.java
@@ -79,7 +79,6 @@ import org.eclipse.sirius.ext.gmf.runtime.editpolicies.SiriusSnapFeedbackPolicy;
import org.eclipse.swt.graphics.Color;
import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
/**
* The default behaviours of nodes, lists and containers.
@@ -129,11 +128,8 @@ public abstract class AbstractDiagramNodeEditPart extends AbstractBorderedDiagra
}
@Override
- @SuppressWarnings("unchecked")
protected List getModelChildren() {
- // create a new view to avoid to change the super.getModelChildren list.
- List<?> modelChildren = Lists.newArrayList(super.getModelChildren());
- DiagramElementEditPartOperation.removeInvisibleElements(modelChildren);
+ List<?> modelChildren = super.getModelChildren();
EObject diagramElement = this.resolveDiagramElement();
if (diagramElement instanceof DNode) {
final DNode node = (DNode) diagramElement;
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractNotSelectableShapeNodeEditPart.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractNotSelectableShapeNodeEditPart.java
index 7d90824dd2..226a6d0e01 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractNotSelectableShapeNodeEditPart.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/edit/api/part/AbstractNotSelectableShapeNodeEditPart.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2007, 2008 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
@@ -10,18 +10,24 @@
*******************************************************************************/
package org.eclipse.sirius.diagram.ui.edit.api.part;
+import java.util.List;
+import java.util.Optional;
+
import org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart;
import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.sirius.diagram.DDiagram;
+import org.eclipse.sirius.diagram.DiagramPackage;
+import org.eclipse.sirius.diagram.ui.business.api.query.ViewQuery;
+import org.eclipse.sirius.diagram.ui.business.internal.view.ShowingViewUtil;
import org.eclipse.sirius.diagram.ui.internal.edit.parts.refresh.LabelAndIconRefresher;
/**
* <p>
- * A standard ShapeNodeEditPart that have the peculiarity of not being
- * selectable.
+ * A standard ShapeNodeEditPart that have the peculiarity of not being selectable.
* </p>
* <p>
- * Typically, all IStyleEditPart should extends this class, so that the
- * <i>Select All Shapes</i> action doesn't select them.
+ * Typically, all IStyleEditPart should extends this class, so that the <i>Select All Shapes</i> action doesn't select
+ * them.
* </p>
*
* @author <a href="mailto:alex.lagarde@obeo.fr">Alex Lagarde</a>
@@ -55,6 +61,52 @@ public abstract class AbstractNotSelectableShapeNodeEditPart extends ShapeNodeEd
}
@Override
+ protected List getModelChildren() {
+ return ShowingViewUtil.getModelChildren(getModel());
+ }
+
+ @Override
+ protected void addNotationalListeners() {
+ super.addNotationalListeners();
+ if (hasNotationView()) {
+ ViewQuery viewQuery = new ViewQuery((View) getModel());
+ Optional<DDiagram> diagram = viewQuery.getDDiagram();
+ if (diagram.isPresent()) {
+ addListenerFilter("ShowingMode", this, diagram.get(), DiagramPackage.eINSTANCE.getDDiagram_IsInShowingMode()); //$NON-NLS-1$
+ }
+ }
+ }
+ @Override
+ protected void removeNotationalListeners() {
+ super.removeNotationalListeners();
+ removeListenerFilter("ShowingMode"); //$NON-NLS-1$
+ }
+
+ @Override
+ protected List getModelSourceConnections() {
+ return ShowingViewUtil.getSourceConnectionsConnectingVisibleViews((View) getModel());
+ }
+
+ @Override
+ protected List getModelTargetConnections() {
+ return ShowingViewUtil.getTargetConnectionsConnectingVisibleViews((View) getModel());
+ }
+
+ @Override
+ protected void setConnectionsVisibility(boolean visibility) {
+ ShowingViewUtil.setConnectionsVisibility(this, (View) getModel(), SELECTED_NONE, visibility);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart#setVisibility(boolean)
+ */
+ @Override
+ protected void setVisibility(boolean vis) {
+ ShowingViewUtil.setVisibility(this, vis, SELECTED_NONE, getFlag(FLAG__AUTO_CONNECTIONS_VISIBILITY));
+ }
+
+ @Override
public void deactivate() {
labelAndIconRefresher.dispose();
labelAndIconRefresher = null;
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/AbstractDNodeContainerCompartmentEditPart.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/AbstractDNodeContainerCompartmentEditPart.java
index 62bc2888c4..5ab9f335e4 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/AbstractDNodeContainerCompartmentEditPart.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/AbstractDNodeContainerCompartmentEditPart.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2016 THALES GLOBAL SERVICES and others.
+ * Copyright (c) 2009, 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
@@ -15,6 +15,7 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import java.util.Set;
import org.eclipse.draw2d.Border;
@@ -56,17 +57,20 @@ import org.eclipse.gmf.runtime.notation.Edge;
import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.sirius.diagram.ContainerStyle;
+import org.eclipse.sirius.diagram.DDiagram;
import org.eclipse.sirius.diagram.DDiagramElement;
import org.eclipse.sirius.diagram.DDiagramElementContainer;
import org.eclipse.sirius.diagram.DNodeContainer;
+import org.eclipse.sirius.diagram.DiagramPackage;
import org.eclipse.sirius.diagram.business.api.query.DDiagramElementQuery;
import org.eclipse.sirius.diagram.business.internal.query.DDiagramElementContainerExperimentalQuery;
import org.eclipse.sirius.diagram.business.internal.query.DNodeContainerExperimentalQuery;
+import org.eclipse.sirius.diagram.ui.business.api.query.ViewQuery;
+import org.eclipse.sirius.diagram.ui.business.internal.view.ShowingViewUtil;
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.edit.api.part.ISiriusEditPart;
import org.eclipse.sirius.diagram.ui.edit.internal.part.DCompartmentConnectionRefreshMgr;
-import org.eclipse.sirius.diagram.ui.edit.internal.part.DiagramElementEditPartOperation;
import org.eclipse.sirius.diagram.ui.graphical.edit.policies.AirXYLayoutEditPolicy;
import org.eclipse.sirius.diagram.ui.graphical.edit.policies.LaunchToolEditPolicy;
import org.eclipse.sirius.diagram.ui.graphical.edit.policies.NodeCreationEditPolicy;
@@ -94,8 +98,7 @@ import com.google.common.collect.Maps;
/**
* <p>
- * Abstract {@link EditPart} representing the Compartment zone of a
- * DNodeContainer.
+ * Abstract {@link EditPart} representing the Compartment zone of a DNodeContainer.
* </p>
*
* @see {@link ShapeCompartmentEditPart}
@@ -104,8 +107,7 @@ import com.google.common.collect.Maps;
public abstract class AbstractDNodeContainerCompartmentEditPart extends ShapeCompartmentEditPart implements INotableEditPart, ISiriusEditPart {
/**
- * Default margin. Added to the border size to set the border insets of
- * FreeForm containers.
+ * Default margin. Added to the border size to set the border insets of FreeForm containers.
*/
public static final int DEFAULT_MARGIN = 4;
@@ -354,20 +356,43 @@ public abstract class AbstractDNodeContainerCompartmentEditPart extends ShapeCom
}
}
- /*
- * Hide non-visible elements
- */
@Override
protected List getModelChildren() {
- // create a new view to avoid to change the super.getModelChildren list.
- List<View> modelChildren = Lists.newArrayList(Iterables.filter(super.getModelChildren(), View.class));
- DiagramElementEditPartOperation.removeInvisibleElements(modelChildren);
- if (isRegionContainerCompartment() && getModel() instanceof View) {
- RegionContainerUpdateLayoutOperation.sortRegions((DNodeContainer) resolveSemanticElement(), modelChildren);
+ List<View> modelChildren = ShowingViewUtil.getModelChildren(getModel());
+ if (!modelChildren.isEmpty()) {
+ if (isRegionContainerCompartment() && getModel() instanceof View) {
+ RegionContainerUpdateLayoutOperation.sortRegions((DNodeContainer) resolveSemanticElement(), modelChildren);
+ }
}
return modelChildren;
}
+ @Override
+ protected void addNotationalListeners() {
+ super.addNotationalListeners();
+ if (hasNotationView()) {
+ ViewQuery viewQuery = new ViewQuery((View) getModel());
+ Optional<DDiagram> diagram = viewQuery.getDDiagram();
+ if (diagram.isPresent()) {
+ addListenerFilter("ShowingMode", this, diagram.get(), DiagramPackage.eINSTANCE.getDDiagram_IsInShowingMode()); //$NON-NLS-1$
+ }
+ }
+ }
+
+ @Override
+ protected void removeNotationalListeners() {
+ super.removeNotationalListeners();
+ removeListenerFilter("ShowingMode"); //$NON-NLS-1$
+ }
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart#setVisibility(boolean)
+ */
+ @Override
+ protected void setVisibility(boolean vis) {
+ ShowingViewUtil.setVisibility(this, vis, SELECTED_NONE, getFlag(FLAG__AUTO_CONNECTIONS_VISIBILITY));
+ }
+
private boolean isRegionContainerCompartment() {
Option<DNodeContainerExperimentalQuery> query = getDNodeContainerQuery();
return query.some() && query.get().isRegionContainer();
@@ -384,8 +409,7 @@ public abstract class AbstractDNodeContainerCompartmentEditPart extends ShapeCom
}
/**
- * Return the set of {@link ConnectionNodeEditPart}s contained in the
- * supplied shape compartment.
+ * Return the set of {@link ConnectionNodeEditPart}s contained in the supplied shape compartment.
*
* @param scep
* a shape compartment.
@@ -428,8 +452,7 @@ public abstract class AbstractDNodeContainerCompartmentEditPart extends ShapeCom
}
/**
- * Return <tt>true</tt> if <tt>parent</tt> child's ancestor; otherwise
- * <tt>false</tt>
+ * Return <tt>true</tt> if <tt>parent</tt> child's ancestor; otherwise <tt>false</tt>
*
* @param parent
* parent to consider
@@ -646,8 +669,7 @@ public abstract class AbstractDNodeContainerCompartmentEditPart extends ShapeCom
};
/**
- * Specific shape compartment figure to allow collapse of region, ie nested
- * compartment.
+ * Specific shape compartment figure to allow collapse of region, ie nested compartment.
*/
private static class RegionShapeCompartmentFigure extends ShapeCompartmentFigure {
@@ -659,11 +681,9 @@ public abstract class AbstractDNodeContainerCompartmentEditPart extends ShapeCom
* @param title
* figure's title.
* @param mm
- * the <code>IMapMode</code> that is used to initialize the
- * default values of of the scrollpane contained inside the
- * figure. This is necessary since the figure is not attached
- * at construction time and consequently can't get access to
- * the owned IMapMode in the parent containment hierarchy.
+ * the <code>IMapMode</code> that is used to initialize the default values of of the scrollpane
+ * contained inside the figure. This is necessary since the figure is not attached at construction
+ * time and consequently can't get access to the owned IMapMode in the parent containment hierarchy.
*/
public RegionShapeCompartmentFigure(String title, IMapMode mm) {
super(title, mm);
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/AbstractDNodeListCompartmentEditPart.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/AbstractDNodeListCompartmentEditPart.java
index 2b551cb5c6..ea768f72ed 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/AbstractDNodeListCompartmentEditPart.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/AbstractDNodeListCompartmentEditPart.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2011, 2015 THALES GLOBAL SERVICES and others.
+ * Copyright (c) 2011, 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
@@ -15,6 +15,7 @@ import java.util.Collections;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
+import java.util.Optional;
import java.util.Set;
import org.eclipse.draw2d.Border;
@@ -46,14 +47,17 @@ import org.eclipse.gmf.runtime.draw2d.ui.figures.OneLineBorder;
import org.eclipse.gmf.runtime.notation.DrawerStyle;
import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.sirius.diagram.DDiagram;
import org.eclipse.sirius.diagram.DDiagramElement;
import org.eclipse.sirius.diagram.DDiagramElementContainer;
import org.eclipse.sirius.diagram.DNodeList;
+import org.eclipse.sirius.diagram.DiagramPackage;
import org.eclipse.sirius.diagram.business.api.query.DDiagramElementQuery;
import org.eclipse.sirius.diagram.business.internal.query.DDiagramElementContainerExperimentalQuery;
+import org.eclipse.sirius.diagram.ui.business.api.query.ViewQuery;
import org.eclipse.sirius.diagram.ui.business.internal.query.RequestQuery;
+import org.eclipse.sirius.diagram.ui.business.internal.view.ShowingViewUtil;
import org.eclipse.sirius.diagram.ui.edit.api.part.ISiriusEditPart;
-import org.eclipse.sirius.diagram.ui.edit.internal.part.DiagramElementEditPartOperation;
import org.eclipse.sirius.diagram.ui.graphical.edit.policies.LaunchToolEditPolicy;
import org.eclipse.sirius.diagram.ui.graphical.edit.policies.NodeCreationEditPolicy;
import org.eclipse.sirius.diagram.ui.graphical.edit.policies.SiriusContainerDropPolicy;
@@ -68,7 +72,6 @@ import org.eclipse.sirius.viewpoint.description.RepresentationElementMapping;
import org.eclipse.sirius.viewpoint.description.style.LabelBorderStyleDescription;
import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
/**
* <p>
@@ -228,22 +231,45 @@ public abstract class AbstractDNodeListCompartmentEditPart extends ListCompartme
}
}
- /*
- * hide non visible elements
- */
@Override
- protected List<?> getModelChildren() {
- @SuppressWarnings("unchecked")
- List<View> modelChildren = Lists.newArrayList(super.getModelChildren());
- DiagramElementEditPartOperation.removeInvisibleElements(modelChildren);
- EObject semanticElement = resolveSemanticElement();
- if (semanticElement instanceof DNodeList) {
- new DNodeListElementComparisonHelper((DNodeList) semanticElement).sort(modelChildren);
+ protected List getModelChildren() {
+ List<View> modelChildren = ShowingViewUtil.getModelChildren(getModel());
+ if (!modelChildren.isEmpty()) {
+ EObject semanticElement = resolveSemanticElement();
+ if (semanticElement instanceof DNodeList) {
+ new DNodeListElementComparisonHelper((DNodeList) semanticElement).sort(modelChildren);
+ }
}
return modelChildren;
}
@Override
+ protected void addNotationalListeners() {
+ super.addNotationalListeners();
+ if (hasNotationView()) {
+ ViewQuery viewQuery = new ViewQuery((View) getModel());
+ Optional<DDiagram> diagram = viewQuery.getDDiagram();
+ if (diagram.isPresent()) {
+ addListenerFilter("ShowingMode", this, diagram.get(), DiagramPackage.eINSTANCE.getDDiagram_IsInShowingMode()); //$NON-NLS-1$
+ }
+ }
+ }
+
+ @Override
+ protected void removeNotationalListeners() {
+ super.removeNotationalListeners();
+ removeListenerFilter("ShowingMode"); //$NON-NLS-1$
+ }
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart#setVisibility(boolean)
+ */
+ @Override
+ protected void setVisibility(boolean vis) {
+ ShowingViewUtil.setVisibility(this, vis, SELECTED_NONE, getFlag(FLAG__AUTO_CONNECTIONS_VISIBILITY));
+ }
+
+ @Override
public boolean canAttachNote() {
return true;
}
@@ -285,15 +311,13 @@ public abstract class AbstractDNodeListCompartmentEditPart extends ListCompartme
}
/**
- * This method searches an edit part for a child that is a border item edit
- * part
+ * This method searches an edit part for a child that is a border item edit part
*
* @not-generated : need for copy/paste support
* @param parent
* part needed to search
* @param set
- * to be modified of border item edit parts that are direct
- * children of the parent
+ * to be modified of border item edit parts that are direct children of the parent
*/
private void getBorderItemEditParts(EditPart parent, Set retval) {
@@ -309,8 +333,7 @@ public abstract class AbstractDNodeListCompartmentEditPart extends ListCompartme
}
/**
- * Overridden to refresh {@link DNodeListElementEditPart} for example to
- * refresh label alignment.
+ * Overridden to refresh {@link DNodeListElementEditPart} for example to refresh label alignment.
*/
@Override
public void refresh() {
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/DNode3EditPart.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/DNode3EditPart.java
index 2c4cf67a4c..efaf9fb22a 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/DNode3EditPart.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/DNode3EditPart.java
@@ -11,6 +11,7 @@
package org.eclipse.sirius.diagram.ui.internal.edit.parts;
import org.eclipse.draw2d.FlowLayout;
+import org.eclipse.draw2d.Graphics;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.emf.ecore.EObject;
@@ -35,6 +36,7 @@ import org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.sirius.diagram.DDiagramElement;
import org.eclipse.sirius.diagram.DNode;
+import org.eclipse.sirius.diagram.ui.business.internal.view.ShowingViewUtil;
import org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramNameEditPart;
import org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramNodeEditPart;
import org.eclipse.sirius.diagram.ui.graphical.edit.policies.SiriusContainerDropPolicy;
@@ -110,8 +112,10 @@ public class DNode3EditPart extends AbstractDiagramNodeEditPart {
/**
* @not-generated
*/
+ @Override
protected void createDefaultEditPolicies() {
installEditPolicy(EditPolicyRoles.CREATION_ROLE, new CreationEditPolicy() {
+ @Override
public Command getCommand(final Request request) {
if (understandsRequest(request)) {
if (request instanceof CreateViewRequest) {
@@ -142,6 +146,7 @@ public class DNode3EditPart extends AbstractDiagramNodeEditPart {
final FlowLayoutEditPolicy lep = new org.eclipse.sirius.diagram.ui.tools.api.policies.FlowLayoutEditPolicy() {
+ @Override
protected EditPolicy createChildEditPolicy(final EditPart child) {
if (child instanceof AbstractDiagramNameEditPart) {
return new SpecificBorderItemSelectionEditPolicy();
@@ -159,14 +164,17 @@ public class DNode3EditPart extends AbstractDiagramNodeEditPart {
return super.getFeedbackIndexFor(request);
}
+ @Override
protected Command createAddCommand(final EditPart child, final EditPart after) {
return null;
}
+ @Override
protected Command createMoveChildCommand(final EditPart child, final EditPart after) {
return null;
}
+ @Override
protected Command getCreateCommand(final CreateRequest request) {
return null;
}
@@ -176,6 +184,7 @@ public class DNode3EditPart extends AbstractDiagramNodeEditPart {
*
* @see org.eclipse.gef.editpolicies.LayoutEditPolicy#getCommand(org.eclipse.gef.Request)
*/
+ @Override
public Command getCommand(final Request request) {
if (REQ_RESIZE_CHILDREN.equals(request.getType()) && request instanceof ChangeBoundsRequest) {
final Command command = DNode3EditPart.this.getResizeBorderItemCommand((ChangeBoundsRequest) request);
@@ -194,7 +203,18 @@ public class DNode3EditPart extends AbstractDiagramNodeEditPart {
*/
@Override
protected NodeFigure createNodeFigure() {
- DBorderedNodeFigure nodeFigure = new DBorderedNodeFigure(createMainFigure());
+ DBorderedNodeFigure nodeFigure = new DBorderedNodeFigure(createMainFigure()) {
+ @Override
+ public void paint(Graphics graphics) {
+ ShowingViewUtil.initGraphicsForVisibleAndInvisibleElements(this, graphics, (View) getModel());
+ try {
+ super.paint(graphics);
+ graphics.restoreState();
+ } finally {
+ graphics.popState();
+ }
+ }
+ };
nodeFigure.getBorderItemContainer().add(new FoldingToggleImageFigure(this));
nodeFigure.getBorderItemContainer().setClippingStrategy(new FoldingToggleAwareClippingStrategy());
return nodeFigure;
@@ -225,6 +245,7 @@ public class DNode3EditPart extends AbstractDiagramNodeEditPart {
/**
* @not-generated
*/
+ @Override
protected void addBorderItem(final IFigure borderItemContainer, final IBorderItemEditPart borderItemEditPart) {
if (borderItemEditPart instanceof DNodeNameEditPart) {
if (this.resolveSemanticElement() instanceof DNode) {
@@ -271,6 +292,7 @@ public class DNode3EditPart extends AbstractDiagramNodeEditPart {
*
* @not-generated : remove the layout manager to fix the size
*/
+ @Override
protected NodeFigure createMainFigure() {
final NodeFigure figure = createNodePlate();
if (figure != null) {
@@ -302,6 +324,7 @@ public class DNode3EditPart extends AbstractDiagramNodeEditPart {
/**
* @was-generated
*/
+ @Override
public IFigure getContentPane() {
if (contentPane != null) {
return contentPane;
@@ -312,6 +335,7 @@ public class DNode3EditPart extends AbstractDiagramNodeEditPart {
/**
* @was-generated
*/
+ @Override
public EditPart getPrimaryChildEditPart() {
return getChildBySemanticHint(SiriusVisualIDRegistry.getType(NotationViewIDs.DNODE_NAME_3_EDIT_PART_VISUAL_ID));
}
@@ -319,6 +343,7 @@ public class DNode3EditPart extends AbstractDiagramNodeEditPart {
/**
* @not-generated
*/
+ @Override
public SiriusWrapLabel getNodeLabel() {
return getPrimaryShape().getNodeLabel();
}
@@ -326,14 +351,17 @@ public class DNode3EditPart extends AbstractDiagramNodeEditPart {
/**
* @was-generated
*/
+ @Override
public IFigure getPrimaryFigure() {
return getPrimaryShape();
}
+ @Override
public Class<?> getMetamodelType() {
return DNode.class;
}
+ @Override
protected void reorderChild(final EditPart child, final int index) {
if (child instanceof DNode2EditPart) {
this.savedConstraint = ((DNode2EditPart) child).getBorderItemLocator();
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/DNodeEditPart.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/DNodeEditPart.java
index d202bc6c7f..92502d7af2 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/DNodeEditPart.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/DNodeEditPart.java
@@ -11,6 +11,7 @@
package org.eclipse.sirius.diagram.ui.internal.edit.parts;
import org.eclipse.draw2d.FlowLayout;
+import org.eclipse.draw2d.Graphics;
import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.emf.ecore.EObject;
@@ -35,6 +36,7 @@ import org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure;
import org.eclipse.gmf.runtime.notation.View;
import org.eclipse.sirius.diagram.DDiagramElement;
import org.eclipse.sirius.diagram.DNode;
+import org.eclipse.sirius.diagram.ui.business.internal.view.ShowingViewUtil;
import org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramNameEditPart;
import org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramNodeEditPart;
import org.eclipse.sirius.diagram.ui.graphical.edit.policies.SiriusContainerDropPolicy;
@@ -110,8 +112,10 @@ public class DNodeEditPart extends AbstractDiagramNodeEditPart {
/**
* @not-generated
*/
+ @Override
protected void createDefaultEditPolicies() {
installEditPolicy(EditPolicyRoles.CREATION_ROLE, new CreationEditPolicy() {
+ @Override
public Command getCommand(final Request request) {
if (understandsRequest(request)) {
if (request instanceof CreateViewRequest) {
@@ -142,6 +146,7 @@ public class DNodeEditPart extends AbstractDiagramNodeEditPart {
final FlowLayoutEditPolicy lep = new org.eclipse.sirius.diagram.ui.tools.api.policies.FlowLayoutEditPolicy() {
+ @Override
protected EditPolicy createChildEditPolicy(final EditPart child) {
if (child instanceof AbstractDiagramNameEditPart) {
return new SpecificBorderItemSelectionEditPolicy();
@@ -159,14 +164,17 @@ public class DNodeEditPart extends AbstractDiagramNodeEditPart {
return super.getFeedbackIndexFor(request);
}
+ @Override
protected Command createAddCommand(final EditPart child, final EditPart after) {
return null;
}
+ @Override
protected Command createMoveChildCommand(final EditPart child, final EditPart after) {
return null;
}
+ @Override
protected Command getCreateCommand(final CreateRequest request) {
return null;
}
@@ -176,6 +184,7 @@ public class DNodeEditPart extends AbstractDiagramNodeEditPart {
*
* @see org.eclipse.gef.editpolicies.LayoutEditPolicy#getCommand(org.eclipse.gef.Request)
*/
+ @Override
public Command getCommand(final Request request) {
if (REQ_RESIZE_CHILDREN.equals(request.getType()) && request instanceof ChangeBoundsRequest) {
final Command command = DNodeEditPart.this.getResizeBorderItemCommand((ChangeBoundsRequest) request);
@@ -194,7 +203,18 @@ public class DNodeEditPart extends AbstractDiagramNodeEditPart {
*/
@Override
protected NodeFigure createNodeFigure() {
- DBorderedNodeFigure nodeFigure = new DBorderedNodeFigure(createMainFigure());
+ DBorderedNodeFigure nodeFigure = new DBorderedNodeFigure(createMainFigure()) {
+ @Override
+ public void paint(Graphics graphics) {
+ ShowingViewUtil.initGraphicsForVisibleAndInvisibleElements(this, graphics, (View) getModel());
+ try {
+ super.paint(graphics);
+ graphics.restoreState();
+ } finally {
+ graphics.popState();
+ }
+ }
+ };
nodeFigure.getBorderItemContainer().add(new FoldingToggleImageFigure(this));
nodeFigure.getBorderItemContainer().setClippingStrategy(new FoldingToggleAwareClippingStrategy());
return nodeFigure;
@@ -225,6 +245,7 @@ public class DNodeEditPart extends AbstractDiagramNodeEditPart {
/**
* @not-generated
*/
+ @Override
protected void addBorderItem(final IFigure borderItemContainer, final IBorderItemEditPart borderItemEditPart) {
if (borderItemEditPart instanceof DNodeNameEditPart) {
if (this.resolveSemanticElement() instanceof DNode) {
@@ -271,6 +292,7 @@ public class DNodeEditPart extends AbstractDiagramNodeEditPart {
*
* @not-generated : remove the layout manager to fix the size
*/
+ @Override
protected NodeFigure createMainFigure() {
final NodeFigure figure = createNodePlate();
if (figure != null) {
@@ -302,6 +324,7 @@ public class DNodeEditPart extends AbstractDiagramNodeEditPart {
/**
* @was-generated
*/
+ @Override
public IFigure getContentPane() {
if (contentPane != null) {
return contentPane;
@@ -312,6 +335,7 @@ public class DNodeEditPart extends AbstractDiagramNodeEditPart {
/**
* @was-generated
*/
+ @Override
public EditPart getPrimaryChildEditPart() {
return getChildBySemanticHint(SiriusVisualIDRegistry.getType(NotationViewIDs.DNODE_NAME_EDIT_PART_VISUAL_ID));
}
@@ -319,6 +343,7 @@ public class DNodeEditPart extends AbstractDiagramNodeEditPart {
/**
* @not-generated
*/
+ @Override
public SiriusWrapLabel getNodeLabel() {
return getPrimaryShape().getNodeLabel();
}
@@ -326,14 +351,17 @@ public class DNodeEditPart extends AbstractDiagramNodeEditPart {
/**
* @was-generated
*/
+ @Override
public IFigure getPrimaryFigure() {
return getPrimaryShape();
}
+ @Override
public Class<?> getMetamodelType() {
return DNode.class;
}
+ @Override
protected void reorderChild(final EditPart child, final int index) {
if (child instanceof DNode2EditPart) {
this.savedConstraint = ((DNode2EditPart) child).getBorderItemLocator();
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/SiriusDescriptionCompartmentEditPart.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/SiriusDescriptionCompartmentEditPart.java
index b7d26a5082..38d70c3669 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/SiriusDescriptionCompartmentEditPart.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/SiriusDescriptionCompartmentEditPart.java
@@ -10,6 +10,8 @@
*******************************************************************************/
package org.eclipse.sirius.diagram.ui.internal.edit.parts;
+import java.util.Optional;
+
import org.eclipse.draw2d.PositionConstants;
import org.eclipse.emf.ecore.EAnnotation;
import org.eclipse.gef.DragTracker;
@@ -19,7 +21,10 @@ import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.TextAlignment;
import org.eclipse.gmf.runtime.notation.TextStyle;
import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.sirius.diagram.DDiagram;
+import org.eclipse.sirius.diagram.DiagramPackage;
import org.eclipse.sirius.diagram.ui.business.api.query.ViewQuery;
+import org.eclipse.sirius.diagram.ui.business.internal.view.ShowingViewUtil;
/**
* A specific DescriptionCompartmentEditPart to:
@@ -50,6 +55,32 @@ public class SiriusDescriptionCompartmentEditPart extends DescriptionCompartment
return getParent().getDragTracker(request);
}
+ @Override
+ protected void addNotationalListeners() {
+ super.addNotationalListeners();
+ if (hasNotationView()) {
+ ViewQuery viewQuery = new ViewQuery((View) getModel());
+ Optional<DDiagram> diagram = viewQuery.getDDiagram();
+ if (diagram.isPresent()) {
+ addListenerFilter("ShowingMode", this, diagram.get(), DiagramPackage.eINSTANCE.getDDiagram_IsInShowingMode()); //$NON-NLS-1$
+ }
+ }
+ }
+
+ @Override
+ protected void removeNotationalListeners() {
+ super.removeNotationalListeners();
+ removeListenerFilter("ShowingMode"); //$NON-NLS-1$
+ }
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart#setVisibility(boolean)
+ */
+ @Override
+ protected void setVisibility(boolean vis) {
+ ShowingViewUtil.setVisibility(this, vis, SELECTED_NONE, getFlag(FLAG__AUTO_CONNECTIONS_VISIBILITY));
+ }
+
/*
* (non-Javadoc) Overridden to allow to consider the specific EAnnotation to change vertical alignment.
*/
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/SiriusNoteEditPart.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/SiriusNoteEditPart.java
index eb83e27579..cc40728880 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/SiriusNoteEditPart.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/SiriusNoteEditPart.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2015, 2016 THALES GLOBAL SERVICES.
+ * Copyright (c) 2015, 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
@@ -10,11 +10,18 @@
*******************************************************************************/
package org.eclipse.sirius.diagram.ui.internal.edit.parts;
+import java.util.List;
+import java.util.Optional;
+
import org.eclipse.gef.DragTracker;
import org.eclipse.gef.Request;
import org.eclipse.gmf.runtime.diagram.ui.editparts.DescriptionCompartmentEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editparts.NoteEditPart;
import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.sirius.diagram.DDiagram;
+import org.eclipse.sirius.diagram.DiagramPackage;
+import org.eclipse.sirius.diagram.ui.business.api.query.ViewQuery;
+import org.eclipse.sirius.diagram.ui.business.internal.view.ShowingViewUtil;
import org.eclipse.sirius.diagram.ui.tools.internal.ui.SnapToAllDragEditPartsTracker;
import com.google.common.collect.Iterables;
@@ -42,8 +49,7 @@ public class SiriusNoteEditPart extends NoteEditPart {
}
/**
- * Redirect the direct edit request to the
- * {@link DescriptionCompartmentEditPart}.
+ * Redirect the direct edit request to the {@link DescriptionCompartmentEditPart}.
*
* @param request
* the direct edit request
@@ -56,4 +62,52 @@ public class SiriusNoteEditPart extends NoteEditPart {
descriptionCompartmentEditPart.performRequest(request);
}
}
+
+ @Override
+ protected List getModelChildren() {
+ return ShowingViewUtil.getModelChildren(getModel());
+ }
+
+ @Override
+ protected void addNotationalListeners() {
+ super.addNotationalListeners();
+ if (hasNotationView()) {
+ ViewQuery viewQuery = new ViewQuery((View) getModel());
+ Optional<DDiagram> diagram = viewQuery.getDDiagram();
+ if (diagram.isPresent()) {
+ addListenerFilter("ShowingMode", this, diagram.get(), DiagramPackage.eINSTANCE.getDDiagram_IsInShowingMode()); //$NON-NLS-1$
+ }
+ }
+ }
+
+ @Override
+ protected void removeNotationalListeners() {
+ super.removeNotationalListeners();
+ removeListenerFilter("ShowingMode"); //$NON-NLS-1$
+ }
+
+ @Override
+ protected List getModelSourceConnections() {
+ return ShowingViewUtil.getSourceConnectionsConnectingVisibleViews((View) getModel());
+ }
+
+ @Override
+ protected List getModelTargetConnections() {
+ return ShowingViewUtil.getTargetConnectionsConnectingVisibleViews((View) getModel());
+ }
+
+ @Override
+ protected void setConnectionsVisibility(boolean visibility) {
+ ShowingViewUtil.setConnectionsVisibility(this, (View) getModel(), SELECTED_NONE, visibility);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart#setVisibility(boolean)
+ */
+ @Override
+ protected void setVisibility(boolean vis) {
+ ShowingViewUtil.setVisibility(this, vis, SELECTED_NONE, getFlag(FLAG__AUTO_CONNECTIONS_VISIBILITY));
+ }
+
}
diff --git a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/SiriusTextEditPart.java b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/SiriusTextEditPart.java
index 3e4048ff22..d2b108aa02 100644
--- a/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/SiriusTextEditPart.java
+++ b/plugins/org.eclipse.sirius.diagram.ui/src-diag/org/eclipse/sirius/diagram/ui/internal/edit/parts/SiriusTextEditPart.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2015, 2016 THALES GLOBAL SERVICES.
+ * Copyright (c) 2015, 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
@@ -10,11 +10,18 @@
*******************************************************************************/
package org.eclipse.sirius.diagram.ui.internal.edit.parts;
+import java.util.List;
+import java.util.Optional;
+
import org.eclipse.gef.DragTracker;
import org.eclipse.gef.Request;
import org.eclipse.gmf.runtime.diagram.ui.editparts.DescriptionCompartmentEditPart;
import org.eclipse.gmf.runtime.diagram.ui.internal.editparts.TextEditPart;
import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.sirius.diagram.DDiagram;
+import org.eclipse.sirius.diagram.DiagramPackage;
+import org.eclipse.sirius.diagram.ui.business.api.query.ViewQuery;
+import org.eclipse.sirius.diagram.ui.business.internal.view.ShowingViewUtil;
import org.eclipse.sirius.diagram.ui.tools.internal.ui.SnapToAllDragEditPartsTracker;
import com.google.common.collect.Iterables;
@@ -42,8 +49,7 @@ public class SiriusTextEditPart extends TextEditPart {
}
/**
- * Redirect the direct edit request to the
- * {@link DescriptionCompartmentEditPart}.
+ * Redirect the direct edit request to the {@link DescriptionCompartmentEditPart}.
*
* @param request
* the direct edit request
@@ -56,4 +62,52 @@ public class SiriusTextEditPart extends TextEditPart {
descriptionCompartmentEditPart.performRequest(request);
}
}
+
+ @Override
+ protected List getModelChildren() {
+ return ShowingViewUtil.getModelChildren(getModel());
+ }
+
+ @Override
+ protected void addNotationalListeners() {
+ super.addNotationalListeners();
+ if (hasNotationView()) {
+ ViewQuery viewQuery = new ViewQuery((View) getModel());
+ Optional<DDiagram> diagram = viewQuery.getDDiagram();
+ if (diagram.isPresent()) {
+ addListenerFilter("ShowingMode", this, diagram.get(), DiagramPackage.eINSTANCE.getDDiagram_IsInShowingMode()); //$NON-NLS-1$
+ }
+ }
+ }
+
+ @Override
+ protected void removeNotationalListeners() {
+ super.removeNotationalListeners();
+ removeListenerFilter("ShowingMode"); //$NON-NLS-1$
+ }
+
+ @Override
+ protected List getModelSourceConnections() {
+ return ShowingViewUtil.getSourceConnectionsConnectingVisibleViews((View) getModel());
+ }
+
+ @Override
+ protected List getModelTargetConnections() {
+ return ShowingViewUtil.getTargetConnectionsConnectingVisibleViews((View) getModel());
+ }
+
+ @Override
+ protected void setConnectionsVisibility(boolean visibility) {
+ ShowingViewUtil.setConnectionsVisibility(this, (View) getModel(), SELECTED_NONE, visibility);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart#setVisibility(boolean)
+ */
+ @Override
+ protected void setVisibility(boolean vis) {
+ ShowingViewUtil.setVisibility(this, vis, SELECTED_NONE, getFlag(FLAG__AUTO_CONNECTIONS_VISIBILITY));
+ }
+
}

Back to the top