diff options
| author | pguilet | 2017-11-13 09:14:37 +0000 |
|---|---|---|
| committer | Laurent Redor | 2017-12-20 17:19:52 +0000 |
| commit | 06a3692998e4dddce596ac45330ebb5d91d413d0 (patch) | |
| tree | 8b3c8f8f5d046ed7e44687a0b11fdb10461acdde | |
| parent | 367c0df67bc38d8e458bbc59731cbc01f55f26fe (diff) | |
| download | org.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>
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)); + } + } |
