package org.simantics.views.swt.loader; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.TreeItem; import org.simantics.browsing.ui.BuiltinKeys; import org.simantics.browsing.ui.NodeContext; import org.simantics.databoard.Bindings; import org.simantics.db.ReadGraph; import org.simantics.db.Resource; import org.simantics.db.VirtualGraph; import org.simantics.db.WriteGraph; import org.simantics.db.common.request.ResourceRead; import org.simantics.db.common.request.WriteRequest; import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.util.Simantics; import org.simantics.db.layer0.variable.Variable; import org.simantics.scenegraph.ParentNode; import org.simantics.scenegraph.loader.ScenegraphLoader; import org.simantics.views.ViewUtils; import org.simantics.views.ontology.ViewsResources; import org.simantics.views.swt.client.base.ISWTViewNode; import org.simantics.views.swt.client.impl.SWTExplorer; public class ExplorerLoader implements ScenegraphLoader { final private Resource configuration; public ExplorerLoader(Resource configuration) { this.configuration = configuration; } @Override public ISWTViewNode create(ParentNode parent, final Variable context) throws DatabaseException { SWTExplorer node = parent.addNode(SWTExplorer.class); node.setStyle(LoaderUtils.getStyle(configuration)); String browseContextURI = Simantics.getSession().sync(new ResourceRead(configuration) { @Override public String perform(ReadGraph graph) throws DatabaseException { ViewsResources VIEW = ViewsResources.getInstance(graph); Resource browseContext = graph.getSingleObject(resource, VIEW.Explorer_BrowseContext); return graph.getURI(browseContext); } }); node.setBrowseContextURI(browseContextURI); node.setLayoutData(LoaderUtils.getGridData(configuration)); node.setColumns(LoaderUtils.getColumns(configuration)); LoaderUtils.listen(configuration, context, ViewsResources.URIs.Explorer_InputTransformation, node.getInputFunction()); LoaderUtils.listen(configuration, context, ViewsResources.URIs.Explorer_HasColumnsVisible, node.getColumnsVisibleFunction()); Listener selectionListener = Simantics.getSession().sync(new ResourceRead(configuration) { @Override public Listener perform(ReadGraph graph) throws DatabaseException { ViewsResources VIEW = ViewsResources.getInstance(graph); Resource listener = graph.getPossibleObject(resource, VIEW.Explorer_SelectionListener); if(listener == null) return null; return graph.adapt(listener, Listener.class); } }); if(selectionListener != null) node.addListenerToControl(SWT.Selection, selectionListener); node.addListenerToControl(SWT.Selection, new Listener() { @Override public void handleEvent(Event event) { TreeItem item = (TreeItem)event.item; // Tree tree = item.getParent(); // GraphExplorer explorer = (GraphExplorer)tree.getData("GraphExplorer"); // final Resource runtimeDiagram = (Resource)explorer.getRoot().getConstant(BuiltinKeys.INPUT); // final boolean checked = item.getChecked(); NodeContext nc = (NodeContext)item.getData(); Object obj = nc.getConstant(BuiltinKeys.INPUT); if (obj instanceof Variable) { final Variable var = (Variable) obj; Simantics.getSession().async(new WriteRequest(Simantics.getSession().getService(VirtualGraph.class)) { @Override public void perform(WriteGraph graph) throws DatabaseException { ViewsResources VIEW = ViewsResources.getInstance(graph); System.err.println("setParameter " + context.getURI(graph) + " -> " + var.getURI(graph)); ViewUtils.setParameter(graph, context, VIEW.Explorer_Selection, var.getURI(graph), Bindings.STRING); } }); } } }); return node; } }