X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=org.simantics.district.selection.ui%2Fsrc%2Forg%2Fsimantics%2Fdistrict%2Fselection%2Fui%2FElementSelectorTableUI.java;fp=org.simantics.district.selection.ui%2Fsrc%2Forg%2Fsimantics%2Fdistrict%2Fselection%2Fui%2FElementSelectorTableUI.java;h=8ed8d3e16c7d5ddbd5b5a1ef36ad7805f5c7ee7e;hb=09d4de70f2c30d1d788e1572d0459e4a7990fcdf;hp=0786ce5381b2ea994e8d4a42d1e2bdb1f4d3ca55;hpb=0f3520e48a9387d07b622ab5b0c20ec3bddbf2b1;p=simantics%2Fdistrict.git diff --git a/org.simantics.district.selection.ui/src/org/simantics/district/selection/ui/ElementSelectorTableUI.java b/org.simantics.district.selection.ui/src/org/simantics/district/selection/ui/ElementSelectorTableUI.java index 0786ce53..8ed8d3e1 100644 --- a/org.simantics.district.selection.ui/src/org/simantics/district/selection/ui/ElementSelectorTableUI.java +++ b/org.simantics.district.selection.ui/src/org/simantics/district/selection/ui/ElementSelectorTableUI.java @@ -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 elements = Simantics.getSession().syncRequest(new Read>() { - @SuppressWarnings("unchecked") - @Override - public List perform(ReadGraph graph) throws DatabaseException { - Resource model = ActiveModels.getPossibleActiveModel(graph, Simantics.getProjectResource()); - if (model == null) { - LOGGER.warn("No active model"); - return Collections.emptyList(); - } - - List result = query.selectElementsFrom(graph, model); - return Lists.map(new FunctionImpl1() { - 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(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> { + public static final class SelectionsRequest implements Read> { @Override public Collection 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 result = Simantics.getSession().syncRequest(new Read>() { + @Override + public List 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() { + 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); + } + } + } }