]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.selection.ui/src/org/simantics/district/selection/ui/ElementSelectorTableUI.java
Opening of diagram element query result in diagram view.
[simantics/district.git] / org.simantics.district.selection.ui / src / org / simantics / district / selection / ui / ElementSelectorTableUI.java
index 0786ce5381b2ea994e8d4a42d1e2bdb1f4d3ca55..8ed8d3e16c7d5ddbd5b5a1ef36ad7805f5c7ee7e 100644 (file)
@@ -10,10 +10,8 @@ import org.eclipse.jface.viewers.ColumnLabelProvider;
 import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;
 import org.eclipse.jface.viewers.DoubleClickEvent;
 import org.eclipse.jface.viewers.IDoubleClickListener;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.ITreeContentProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.StructuredSelection;
 import org.eclipse.jface.viewers.TreeSelection;
 import org.eclipse.jface.viewers.TreeViewer;
@@ -29,15 +27,17 @@ import org.simantics.browsing.ui.common.AdaptableHintContext;
 import org.simantics.db.ReadGraph;
 import org.simantics.db.Resource;
 import org.simantics.db.common.procedure.adapter.SyncListenerAdapter;
+import org.simantics.db.common.request.ResourceRead;
 import org.simantics.db.exception.DatabaseException;
-import org.simantics.db.exception.RuntimeDatabaseException;
 import org.simantics.db.layer0.QueryIndexUtils;
 import org.simantics.db.layer0.SelectionHints;
 import org.simantics.db.layer0.request.ActiveModels;
+import org.simantics.db.layer0.variable.Variable;
 import org.simantics.db.request.Read;
+import org.simantics.district.network.ui.DistrictNetworkUIUtil;
 import org.simantics.district.selection.ElementSelectionResource;
-import org.simantics.district.selection.ElementSelectionUtils;
 import org.simantics.district.selection.ElementSelector;
+import org.simantics.district.selection.ElementSelector.DiagramGenerator;
 import org.simantics.layer0.Layer0;
 import org.simantics.scl.runtime.Lists;
 import org.simantics.scl.runtime.function.FunctionImpl1;
@@ -63,40 +63,7 @@ public class ElementSelectorTableUI extends Composite {
                this.setLayout(new FillLayout());
 
                viewer = new TreeViewer(this, SWT.FULL_SELECTION);
-               viewer.addDoubleClickListener(new IDoubleClickListener() {
-                       @Override
-                       public void doubleClick(DoubleClickEvent event) {
-                               TreeSelection selection = (TreeSelection) viewer.getSelection();
-                               ElementSelector query = (ElementSelector) selection.getFirstElement();
-                               try {
-                                       List<AdaptableHintContext> elements = Simantics.getSession().syncRequest(new Read<List<AdaptableHintContext>>() {
-                                               @SuppressWarnings("unchecked")
-                                               @Override
-                                               public List<AdaptableHintContext> perform(ReadGraph graph) throws DatabaseException {
-                                                       Resource model = ActiveModels.getPossibleActiveModel(graph, Simantics.getProjectResource());
-                                                       if (model == null) {
-                                                               LOGGER.warn("No active model");
-                                                               return Collections.emptyList();
-                                                       }
-                                                       
-                                                       List<Resource> result = query.selectElementsFrom(graph, model);
-                                                       return Lists.map(new FunctionImpl1<Resource, AdaptableHintContext>() {
-                                                               public AdaptableHintContext apply(Resource p0) {
-                                                                       AdaptableHintContext selectionElement = new SelectionElement(SelectionHints.STD_KEYS, graph);
-                                                                       selectionElement.setHint(SelectionHints.KEY_MAIN, p0);
-                                                                       selectionElement.setHint(SelectionHints.KEY_MODEL, model);
-                                                                       return selectionElement;
-                                                               }
-                                                       }, result);
-                                               }
-                                       });
-                                       
-                                       selectionService.setPostSelection(new StructuredSelection(elements));
-                               } catch (DatabaseException e) {
-                                       LOGGER.error("Element selection query failed", e);
-                               }
-                       }
-               });
+               viewer.addDoubleClickListener(new DoubleClickListener(selectionService));
                
                viewer.setContentProvider(new ITreeContentProvider() {
                        @Override
@@ -196,12 +163,9 @@ public class ElementSelectorTableUI extends Composite {
                return selection != null ? (ElementSelector) selection.getFirstElement() : null;
        }
 
-       private final class SelectionElement extends AdaptableHintContext {
-               private final ReadGraph graph;
-
-               private SelectionElement(Key[] keys, ReadGraph graph) {
+       private static final class SelectionElement extends AdaptableHintContext {
+               private SelectionElement(Key[] keys) {
                        super(keys);
-                       this.graph = graph;
                }
 
                @SuppressWarnings("unchecked")
@@ -212,7 +176,11 @@ public class ElementSelectorTableUI extends Composite {
                        }
                        else if (contentType instanceof AnyVariable) {
                                try {
-                                       return (T)ElementSelector.getVariableForElement(graph, element);
+                                       return (T) Simantics.getSession().syncRequest(new ResourceRead<Variable>(element) {
+                                               public Variable perform(ReadGraph graph) throws DatabaseException {
+                                                       return ElementSelector.getVariableForElement(graph, resource);
+                                               }
+                                       });
                                } catch (DatabaseException e) {
                                        return null;
                                }
@@ -222,7 +190,7 @@ public class ElementSelectorTableUI extends Composite {
                }
        }
 
-       public static class SelectionsRequest implements Read<Collection<ElementSelector>> {
+       public static final class SelectionsRequest implements Read<Collection<ElementSelector>> {
                @Override
                public Collection<ElementSelector> perform(ReadGraph graph) throws DatabaseException {
                        Layer0 L0 = Layer0.getInstance(graph);
@@ -250,4 +218,49 @@ public class ElementSelectorTableUI extends Composite {
                        return result;
                }
        }
+
+       private static final class DoubleClickListener implements IDoubleClickListener {
+               private final ESelectionService selectionService;
+               private Resource model;
+       
+               private DoubleClickListener(ESelectionService selectionService) {
+                       this.selectionService = selectionService;
+               }
+       
+               @Override
+               public void doubleClick(DoubleClickEvent event) {
+                       TreeSelection selection = (TreeSelection) event.getViewer().getSelection();
+                       ElementSelector query = (ElementSelector) selection.getFirstElement();
+                       try {
+                               List<Resource> result = Simantics.getSession().syncRequest(new Read<List<Resource>>() {
+                                       @Override
+                                       public List<Resource> perform(ReadGraph graph) throws DatabaseException {
+                                               model = ActiveModels.getPossibleActiveModel(graph, Simantics.getProjectResource());
+                                               if (model == null) {
+                                                       LOGGER.warn("No active model");
+                                                       return Collections.emptyList();
+                                               }
+                                               
+                                               return query.selectElementsFrom(graph, model);
+                                       }
+                               });
+                               
+                               if (query.getGenerator() instanceof DiagramGenerator) {
+                                       DistrictNetworkUIUtil.openDNDiagramWithSelection(event.getViewer().getControl().getDisplay(), result);
+                               }
+                               else {
+                                       selectionService.setPostSelection(new StructuredSelection(Lists.map(new FunctionImpl1<Resource, AdaptableHintContext>() {
+                                               public AdaptableHintContext apply(Resource p0) {
+                                                       AdaptableHintContext selectionElement = new SelectionElement(SelectionHints.STD_KEYS);
+                                                       selectionElement.setHint(SelectionHints.KEY_MAIN, p0);
+                                                       selectionElement.setHint(SelectionHints.KEY_MODEL, model);
+                                                       return selectionElement;
+                                               }
+                                       }, result)));
+                               }
+                       } catch (DatabaseException e) {
+                               LOGGER.error("Element selection query failed", e);
+                       }
+               }
+       }
 }