package org.simantics.views.swt.loader; import org.simantics.databoard.Bindings; import org.simantics.datatypes.literal.Font; import org.simantics.datatypes.literal.RGB; import org.simantics.db.Resource; import org.simantics.db.VirtualGraph; import org.simantics.db.WriteGraph; 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.utils.ui.widgets.TrackedModifyEvent; import org.simantics.utils.ui.widgets.TrackedModifyListener; 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.SWTTrackedText; public class TrackedTextLoader implements ScenegraphLoader { final private Resource configuration; public TrackedTextLoader(Resource configuration) { this.configuration = configuration; } @Override public ISWTViewNode create(ParentNode parent, final Variable context) throws DatabaseException { SWTTrackedText node = parent.addNode(SWTTrackedText.class); node.setLayoutData(LoaderUtils.getGridData(configuration)); node.setStyle(LoaderUtils.getStyle(configuration)); LoaderUtils.listen(configuration, context, ViewsResources.URIs.TextContainer_HasText, node.getTextFunction()); LoaderUtils.listen(configuration, context, ViewsResources.URIs.Control_HasForeground, RGB.Integer.BINDING, node.getForegroundFunction()); LoaderUtils.listen(configuration, context, ViewsResources.URIs.TrackedText_HasInvalidBackground, RGB.Integer.BINDING, node.getInvalidBackgroundFunction()); LoaderUtils.listen(configuration, context, ViewsResources.URIs.TrackedText_HasInactiveBackground, RGB.Integer.BINDING, node.getInactiveBackgroundFunction()); LoaderUtils.listen(configuration, context, ViewsResources.URIs.TrackedText_HasHoverBackground, RGB.Integer.BINDING, node.getHoverBackgroundFunction()); LoaderUtils.listen(configuration, context, ViewsResources.URIs.TrackedText_HasEditingBackground, RGB.Integer.BINDING, node.getEditingBackgroundFunction()); LoaderUtils.listen(configuration, context, ViewsResources.URIs.Control_HasFont, Font.BINDING, node.getFontFunction()); LoaderUtils.listen(configuration, context, ViewsResources.URIs.TextReceiver_Modifier, node.getModifierFunction()); LoaderUtils.listen(configuration, context, ViewsResources.URIs.TextReceiver_Validator, node.getValidatorFunction()); node.addModifyListener(new TrackedModifyListener() { @Override public void modifyText(TrackedModifyEvent e) { final String text = e.getText(); 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) + " -> " + text); ViewUtils.setParameter(graph, context, VIEW.TrackedText_Content, text, Bindings.STRING); } }); } }); return node; } }