]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagramEditor/DiagramViewerSelectionProvider.java
Sync git svn branch with SVN repository r33303.
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / diagramEditor / DiagramViewerSelectionProvider.java
index c3070d9cceb9f60ccd3fde3aef1e7407a14b9957..42c489e24d4b866d310507cf7d1d00d4cc1508cf 100644 (file)
@@ -18,6 +18,7 @@ import org.simantics.db.layer0.request.PossibleModel;
 import org.simantics.db.layer0.variable.Variable;\r
 import org.simantics.db.layer0.variable.Variables;\r
 import org.simantics.diagram.Logger;\r
+import org.simantics.diagram.flag.FlagUtil;\r
 import org.simantics.diagram.stubs.DiagramResource;\r
 import org.simantics.diagram.ui.DiagramModelHints;\r
 import org.simantics.diagram.ui.WorkbenchSelectionProvider;\r
@@ -25,6 +26,7 @@ import org.simantics.g2d.diagram.IDiagram;
 import org.simantics.g2d.element.ElementHints;\r
 import org.simantics.g2d.element.ElementUtils;\r
 import org.simantics.g2d.element.IElement;\r
+import org.simantics.layer0.Layer0;\r
 import org.simantics.modeling.ModelingResources;\r
 import org.simantics.ui.SimanticsUI;\r
 import org.simantics.ui.selection.AnyResource;\r
@@ -62,6 +64,7 @@ public class DiagramViewerSelectionProvider extends WorkbenchSelectionProvider {
                         public Variable perform(ReadGraph graph) throws DatabaseException {\r
 \r
                             DiagramResource DIA = DiagramResource.getInstance(graph);\r
+                            ModelingResources MOD = ModelingResources.getInstance(graph);\r
 \r
                             String uri = graph.getPossibleRelatedValue(resource, DIA.RuntimeDiagram_HasVariable);\r
                             if (uri == null)\r
@@ -71,9 +74,28 @@ public class DiagramViewerSelectionProvider extends WorkbenchSelectionProvider {
                             if (var == null)\r
                                 return null;\r
 \r
-                            Resource config = graph.getPossibleObject(resource2, ModelingResources.getInstance(graph).ElementToComponent);\r
-                            if (config == null)\r
+                            Resource config = graph.getPossibleObject(resource2, MOD.ElementToComponent);\r
+                            if (config == null) {\r
+                                // Apros #9646: if resource2 is the diagram\r
+                                // itself, return the diagram composite variable\r
+                                // since it is generally more useful than the\r
+                                // variable to the diagram.\r
+                                Resource composite = graph.getPossibleObject(resource2, MOD.DiagramToComposite);\r
+                                if (composite != null && composite.equals(var.getPossibleRepresents(graph))) {\r
+                                    //return Variables.getPossibleVariable(graph, resource2);\r
+                                    return var;\r
+                                }\r
+                                \r
+                                if(graph.isInstanceOf(resource2, DIA.Flag)) {\r
+                                       Layer0 L0 = Layer0.getInstance(graph);\r
+                                       Variable signal = FlagUtil.getPossibleFlagSignal(graph, var, resource2, L0.Entity);\r
+                                       if(signal != null)\r
+                                               return signal;\r
+                                }\r
+\r
                                 return null;\r
+                                \r
+                            }\r
 \r
                             return var.browsePossible(graph, config);\r
 \r