--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<classpath>\r
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>\r
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>\r
+ <classpathentry kind="src" path="src"/>\r
+ <classpathentry kind="output" path="bin"/>\r
+</classpath>\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<projectDescription>\r
+ <name>org.simantics.sysdyn.ui</name>\r
+ <comment></comment>\r
+ <projects>\r
+ </projects>\r
+ <buildSpec>\r
+ <buildCommand>\r
+ <name>org.eclipse.jdt.core.javabuilder</name>\r
+ <arguments>\r
+ </arguments>\r
+ </buildCommand>\r
+ <buildCommand>\r
+ <name>org.eclipse.pde.ManifestBuilder</name>\r
+ <arguments>\r
+ </arguments>\r
+ </buildCommand>\r
+ <buildCommand>\r
+ <name>org.eclipse.pde.SchemaBuilder</name>\r
+ <arguments>\r
+ </arguments>\r
+ </buildCommand>\r
+ </buildSpec>\r
+ <natures>\r
+ <nature>org.eclipse.pde.PluginNature</nature>\r
+ <nature>org.eclipse.jdt.core.javanature</nature>\r
+ </natures>\r
+</projectDescription>\r
--- /dev/null
+#Thu Nov 05 12:45:23 EET 2009\r
+eclipse.preferences.version=1\r
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled\r
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6\r
+org.eclipse.jdt.core.compiler.compliance=1.6\r
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error\r
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error\r
+org.eclipse.jdt.core.compiler.source=1.6\r
--- /dev/null
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Ui
+Bundle-SymbolicName: org.simantics.sysdyn.ui;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.simantics.sysdyn.ui.Activator
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.simantics.ui;bundle-version="1.0.0",
+ org.simantics.diagram;bundle-version="1.0.0",
+ org.simantics.db;bundle-version="0.6.2",
+ org.simantics.db.common;bundle-version="0.6.2",
+ org.simantics.db.layer0;bundle-version="0.7.0",
+ org.simantics.g2d;bundle-version="1.0.0",
+ org.simantics.scenegraph;bundle-version="1.0.0",
+ org.simantics.layer0.utils;bundle-version="0.6.2"
+Bundle-ActivationPolicy: lazy
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<adapters>\r
+<!-- \r
+ <target interface="org.simantics.project.features.IProjectFeature">\r
+ <type\r
+ uri="http://www.simantics.org/Ontology/ProConf/1.0#SymbolManagerFeature"\r
+ class="org.simantics.diagram.symbollibrary.SymbolManagerFeature">\r
+ </type>\r
+ </target>\r
+\r
+ <target interface="org.simantics.g2d.diagram.DiagramClass">\r
+ <baseType uri="http://www.simantics.org/Simantics/Diagram/2.0#Composite" />\r
+ <adapter uri="http://www.simantics.org/Simantics/Diagram/2.0#Composite"\r
+ adapterClass="org.simantics.diagram.adapter.DiagramClassAdapter" />\r
+ </target>\r
+ -->\r
+ <target interface="org.simantics.diagram.adapter.GraphElementClassFactory">\r
+ <resource uri="http://www.simantics.org/Sysdyn#VariableElement"\r
+ class="org.simantics.sysdyn.ui.adapters.VariableClassFactory" />\r
+ </target>\r
+\r
+ <target interface="org.simantics.diagram.adapter.GraphElementFactory">\r
+ <type uri="http://www.simantics.org/Sysdyn#VariableElement"\r
+ class="org.simantics.sysdyn.ui.adapters.VariableClassFactory" />\r
+ </target>\r
+\r
+ <target interface="org.simantics.diagram.synchronization.graph.ElementWriter">\r
+ <type uri="http://www.simantics.org/Sysdyn#VariableElement"\r
+ class="org.simantics.sysdyn.ui.adapters.VariableElementWriter" />\r
+ </target>\r
+\r
+</adapters>
\ No newline at end of file
--- /dev/null
+source.. = src/\r
+output.. = bin/\r
+bin.includes = META-INF/,\\r
+ .,\\r
+ plugin.xml\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<?eclipse version="3.4"?>\r
+<plugin>\r
+ <extension\r
+ point="org.eclipse.ui.editors">\r
+ <editor\r
+ class="org.simantics.sysdyn.ui.diagram.SysdynDiagramEditor"\r
+ default="false"\r
+ id="org.simantics.sysdyn.ui.diagramEditor"\r
+ name="Sysdyn diagram editor">\r
+ </editor>\r
+ </extension>\r
+ <extension\r
+ point="org.simantics.ui.resourceEditorAdapter">\r
+ <adapter\r
+ editorId="org.simantics.sysdyn.ui.diagramEditor"\r
+ priority="3"\r
+ type_uris="http://www.vtt.fi/Simantics/Layer0/1.0/Types#Entity">\r
+ </adapter>\r
+ </extension>\r
+\r
+</plugin>\r
--- /dev/null
+package org.simantics.sysdyn.ui;\r
+\r
+import org.eclipse.ui.plugin.AbstractUIPlugin;\r
+import org.osgi.framework.BundleContext;\r
+\r
+/**\r
+ * The activator class controls the plug-in life cycle\r
+ */\r
+public class Activator extends AbstractUIPlugin {\r
+\r
+ // The plug-in ID\r
+ public static final String PLUGIN_ID = "org.simantics.sysdyn.ui";\r
+\r
+ // The shared instance\r
+ private static Activator plugin;\r
+ \r
+ /**\r
+ * The constructor\r
+ */\r
+ public Activator() {\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)\r
+ */\r
+ public void start(BundleContext context) throws Exception {\r
+ super.start(context);\r
+ plugin = this;\r
+ }\r
+\r
+ /*\r
+ * (non-Javadoc)\r
+ * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)\r
+ */\r
+ public void stop(BundleContext context) throws Exception {\r
+ plugin = null;\r
+ super.stop(context);\r
+ }\r
+\r
+ /**\r
+ * Returns the shared instance\r
+ *\r
+ * @return the shared instance\r
+ */\r
+ public static Activator getDefault() {\r
+ return plugin;\r
+ }\r
+\r
+}\r
--- /dev/null
+/*******************************************************************************\r
+ * Copyright (c) 2007- VTT Technical Research Centre of Finland.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ * VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
+package org.simantics.sysdyn.ui;\r
+\r
+\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Session;\r
+import org.simantics.db.exception.DatabaseException;\r
+\r
+public class SysdynResource {\r
+ \r
+ public final Resource HasX;\r
+ public final Resource HasY;\r
+ public final Resource SysdynModel;\r
+ public final Resource SysdynModelManager;\r
+ public final Resource SysdynModellingDomain;\r
+ public final Resource TestDiagram;\r
+ public final Resource Variable;\r
+ public final Resource VariableElement;\r
+ \r
+ public static class URIs {\r
+ public static final String HasX = "http://www.simantics.org/Sysdyn#HasX";\r
+ public static final String HasY = "http://www.simantics.org/Sysdyn#HasY";\r
+ public static final String SysdynModel = "http://www.simantics.org/Sysdyn#SysdynModel";\r
+ public static final String SysdynModelManager = "http://www.simantics.org/Sysdyn#SysdynModelManager";\r
+ public static final String SysdynModellingDomain = "http://www.simantics.org/Sysdyn#SysdynModellingDomain";\r
+ public static final String TestDiagram = "http://www.simantics.org/Sysdyn#TestDiagram";\r
+ public static final String Variable = "http://www.simantics.org/Sysdyn#Variable";\r
+ public static final String VariableElement = "http://www.simantics.org/Sysdyn#VariableElement";\r
+ }\r
+ \r
+ public static Resource getResourceOrNull(ReadGraph graph, String uri) {\r
+ try {\r
+ return graph.getResourceByURI(uri);\r
+ } catch(DatabaseException e) {\r
+ System.err.println(e.getMessage());\r
+ return null;\r
+ }\r
+ }\r
+ \r
+ public SysdynResource(ReadGraph graph) {\r
+ HasX = getResourceOrNull(graph, URIs.HasX);\r
+ HasY = getResourceOrNull(graph, URIs.HasY);\r
+ SysdynModel = getResourceOrNull(graph, URIs.SysdynModel);\r
+ SysdynModelManager = getResourceOrNull(graph, URIs.SysdynModelManager);\r
+ SysdynModellingDomain = getResourceOrNull(graph, URIs.SysdynModellingDomain);\r
+ TestDiagram = getResourceOrNull(graph, URIs.TestDiagram);\r
+ Variable = getResourceOrNull(graph, URIs.Variable);\r
+ VariableElement = getResourceOrNull(graph, URIs.VariableElement);\r
+ }\r
+ \r
+ public static SysdynResource getInstance(ReadGraph graph) {\r
+ Session session = graph.getSession();\r
+ SysdynResource ret = session.getService(SysdynResource.class);\r
+ if(ret == null) {\r
+ ret = new SysdynResource(graph);\r
+ session.registerService(SysdynResource.class, ret);\r
+ }\r
+ return ret;\r
+ }\r
+ \r
+}\r
+\r
--- /dev/null
+package org.simantics.sysdyn.ui.adapters;\r
+\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.diagram.adapter.ElementQuerySupport;\r
+import org.simantics.diagram.adapter.GraphElementClassFactory;\r
+import org.simantics.diagram.adapter.GraphElementFactory;\r
+import org.simantics.g2d.diagram.IDiagram;\r
+import org.simantics.g2d.element.ElementClass;\r
+import org.simantics.g2d.element.IElement;\r
+import org.simantics.g2d.element.impl.Element;\r
+import org.simantics.sysdyn.ui.SysdynResource;\r
+import org.simantics.sysdyn.ui.diagram.DrawableElementClass;\r
+import org.simantics.sysdyn.ui.elements.TestDrawable;\r
+\r
+public class VariableClassFactory implements GraphElementFactory, GraphElementClassFactory {\r
+\r
+ @Override\r
+ public IElement spawn(ReadGraph g, Resource resource,\r
+ ElementQuerySupport support, IDiagram diagram)\r
+ throws DatabaseException {\r
+ SysdynResource sr = SysdynResource.getInstance(g);\r
+ \r
+ ElementClass elementClass = \r
+ DrawableElementClass.createElementClass(sr.VariableElement);\r
+ IElement element = Element.spawnNew(elementClass);\r
+ \r
+ TestDrawable drawable = new TestDrawable();\r
+ drawable.moveTo(\r
+ (Double)g.getRelatedValue(resource, sr.HasX),\r
+ (Double)g.getRelatedValue(resource, sr.HasY)\r
+ );\r
+ element.setHint(DrawableElementClass.KEY_CONTENT, drawable);\r
+ \r
+ //diagram.addElement(element);\r
+ return element;\r
+ }\r
+\r
+ @Override\r
+ public ElementClass create(ReadGraph g, Resource elementType,\r
+ ElementQuerySupport support) throws DatabaseException {\r
+ return DrawableElementClass.createElementClass(elementType);\r
+ }\r
+\r
+}\r
--- /dev/null
+package org.simantics.sysdyn.ui.adapters;\r
+\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.WriteGraph;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.diagram.synchronization.graph.ElementWriter;\r
+import org.simantics.g2d.element.IElement;\r
+\r
+public class VariableElementWriter implements ElementWriter {\r
+\r
+ @Override\r
+ public void addToGraph(WriteGraph graph, IElement element,\r
+ Resource elementResource) throws DatabaseException {\r
+ System.out.println("addToGraph"); \r
+ }\r
+\r
+ @Override\r
+ public void removeFromGraph(WriteGraph graph, Resource elementResource)\r
+ throws DatabaseException {\r
+ System.out.println("removeFromGraph"); \r
+ }\r
+\r
+}\r
--- /dev/null
+package org.simantics.sysdyn.ui.diagram;\r
+\r
+import java.awt.Color;\r
+\r
+import org.eclipse.swt.SWT;\r
+import org.eclipse.swt.widgets.Composite;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.common.request.ReadRequest;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.diagram.adapter.GraphToDiagramSynchronizer;\r
+import org.simantics.diagram.adapter.IDiagramLoader;\r
+import org.simantics.diagram.participant.SGFocusParticipant;\r
+import org.simantics.g2d.canvas.Hints;\r
+import org.simantics.g2d.canvas.ICanvasContext;\r
+import org.simantics.g2d.canvas.impl.CanvasContext;\r
+import org.simantics.g2d.chassis.SWTChassis;\r
+import org.simantics.g2d.diagram.DiagramHints;\r
+import org.simantics.g2d.diagram.IDiagram;\r
+import org.simantics.g2d.diagram.participant.CanvasBoundsParticipant;\r
+import org.simantics.g2d.diagram.participant.DiagramParticipant;\r
+import org.simantics.g2d.diagram.participant.ElementInteractor;\r
+import org.simantics.g2d.diagram.participant.ElementPainter;\r
+import org.simantics.g2d.diagram.participant.Selection;\r
+import org.simantics.g2d.diagram.participant.pointertool.PointerInteractor;\r
+import org.simantics.g2d.element.ElementClassProviders;\r
+import org.simantics.g2d.element.IElement;\r
+import org.simantics.g2d.element.impl.Element;\r
+import org.simantics.g2d.participant.CanvasGrab;\r
+import org.simantics.g2d.participant.KeyUtil;\r
+import org.simantics.g2d.participant.MousePanZoomInteractor;\r
+import org.simantics.g2d.participant.MouseUtil;\r
+import org.simantics.g2d.participant.Notifications;\r
+import org.simantics.g2d.participant.PanZoomRotateHandler;\r
+import org.simantics.g2d.participant.PointerPainter;\r
+import org.simantics.g2d.participant.RulerPainter;\r
+import org.simantics.g2d.participant.SGTransformUtil;\r
+import org.simantics.g2d.snap.GridSnapAdvisor;\r
+import org.simantics.layer0.utils.ResourceArray;\r
+import org.simantics.sysdyn.ui.elements.IDrawable;\r
+import org.simantics.ui.SimanticsUI;\r
+import org.simantics.ui.workbench.ResourceEditorPart;\r
+import org.simantics.utils.datastructures.hints.IHintContext;\r
+import org.simantics.utils.threads.AWTThread;\r
+\r
+public abstract class DiagramEditorFacade extends ResourceEditorPart {\r
+\r
+ SWTChassis chassis;\r
+ IDiagram diagram;\r
+ IDiagramLoader loader;\r
+ \r
+ public DiagramEditorFacade() {\r
+ super(); \r
+ }\r
+ \r
+ @Override\r
+ public void reload(ReadGraph g) throws DatabaseException {\r
+ // TODO Auto-generated method stub \r
+ }\r
+ \r
+ @Override\r
+ public void createPartControl(Composite parent) {\r
+ chassis = new SWTChassis(parent, SWT.NONE);\r
+ chassis.syncPopulate(); \r
+ \r
+ final ICanvasContext context = new CanvasContext(\r
+ AWTThread.getThreadAccess());\r
+ chassis.setCanvasContext(context);\r
+\r
+ context.add(new SGTransformUtil());\r
+ context.add(new MouseUtil());\r
+ context.add(new KeyUtil());\r
+ context.add(new PanZoomRotateHandler());\r
+ context.add(new MousePanZoomInteractor());\r
+ context.add(new RulerPainter());\r
+ context.add(new CanvasGrab());\r
+ context.add(new CanvasBoundsParticipant());\r
+ context.add(new Notifications());\r
+ context.add(new SGFocusParticipant(chassis)); \r
+ context.add(new DiagramParticipant());\r
+ context.add(new ElementPainter());\r
+ context.add(new PointerInteractor(true, true, true, false, true, false, null));\r
+ context.add(new ElementInteractor());\r
+ context.add(new Selection()); \r
+ \r
+ IHintContext h = context.getDefaultHintContext(); \r
+ h.setHint(PointerPainter.KEY_PAINT_POINTER, true); \r
+ \r
+ h.setHint(ElementPainter.KEY_SELECTION_FRAME_COLOR, Color.MAGENTA);\r
+ h.setHint(Hints.KEY_TOOL, Hints.POINTERTOOL);\r
+\r
+ h.setHint(PanZoomRotateHandler.KEY_ZOOM_IN_LIMIT, 100000.0);\r
+ h.setHint(PanZoomRotateHandler.KEY_ZOOM_OUT_LIMIT, 10.0);\r
+\r
+ h.setHint(DiagramHints.SNAP_ADVISOR,\r
+ new GridSnapAdvisor(10.0));\r
+ \r
+ try {\r
+ SimanticsUI.getSession().syncRequest(new ReadRequest() {\r
+ \r
+ @Override\r
+ public void run(ReadGraph graph) throws DatabaseException {\r
+ loader = new GraphToDiagramSynchronizer(graph, context, \r
+ ElementClassProviders.staticProvider(null));\r
+ \r
+ diagram = loader.loadDiagram(graph,\r
+ getResourceInput().getResource(),\r
+ ResourceArray.EMPTY, \r
+ null); \r
+ }\r
+ \r
+ });\r
+ h.setHint(DiagramHints.KEY_DIAGRAM, diagram);\r
+ } catch (DatabaseException e) {\r
+ e.printStackTrace();\r
+ } \r
+ \r
+ }\r
+ \r
+ @Override\r
+ public void setFocus() {\r
+ chassis.setFocus(); \r
+ }\r
+ \r
+}\r
--- /dev/null
+package org.simantics.sysdyn.ui.diagram;\r
+\r
+import java.awt.Shape;\r
+import java.awt.geom.AffineTransform;\r
+import java.awt.geom.Point2D;\r
+import java.awt.geom.Rectangle2D;\r
+import java.util.Collection;\r
+\r
+import org.simantics.db.Resource;\r
+import org.simantics.diagram.adapter.handler.ResourceAdapter;\r
+import org.simantics.g2d.diagram.handler.PickRequest.PickPolicy;\r
+import org.simantics.g2d.element.ElementClass;\r
+import org.simantics.g2d.element.IElement;\r
+import org.simantics.g2d.element.handler.InternalSize;\r
+import org.simantics.g2d.element.handler.Move;\r
+import org.simantics.g2d.element.handler.Outline;\r
+import org.simantics.g2d.element.handler.Pick2;\r
+import org.simantics.g2d.element.handler.SceneGraph;\r
+import org.simantics.g2d.element.handler.Transform;\r
+import org.simantics.scenegraph.g2d.G2DParentNode;\r
+import org.simantics.sysdyn.ui.elements.IDrawable;\r
+import org.simantics.sysdyn.ui.elements.ITransformable;\r
+import org.simantics.utils.datastructures.hints.IHintContext.KeyOf;\r
+\r
+public class DrawableElementClass {\r
+ private DrawableElementClass() {}\r
+ \r
+ public static KeyOf KEY_CONTENT = new KeyOf(IDrawable.class, "CONTENT");\r
+ public static AffineTransform IDENTITY_TRANSFORM = new AffineTransform();\r
+ \r
+ public static WidgetHandler WIDGET_HANDLER_INSTANCE = new WidgetHandler();\r
+ \r
+ private static class WidgetHandler implements Transform, SceneGraph, InternalSize, Move, Outline, Pick2 {\r
+\r
+ private static final long serialVersionUID = 1722978969083481038L;\r
+ \r
+ @Override\r
+ public void setTransform(IElement e, AffineTransform at) {\r
+ IDrawable drawable = (IDrawable)e.getHint(KEY_CONTENT);\r
+ if(drawable instanceof ITransformable) {\r
+ drawable = ((ITransformable)drawable).setTransform(at);\r
+ e.setHint(KEY_CONTENT, drawable);\r
+ drawable.updateSG();\r
+ }\r
+ }\r
+ \r
+ @Override\r
+ public AffineTransform getTransform(IElement e) {\r
+ IDrawable drawable = (IDrawable)e.getHint(KEY_CONTENT);\r
+ if(drawable instanceof ITransformable)\r
+ return ((ITransformable)drawable).getTransform(); \r
+ else\r
+ return IDENTITY_TRANSFORM;\r
+ }\r
+ \r
+ @Override\r
+ public void cleanup(IElement e) {\r
+ ((IDrawable)e.getHint(KEY_CONTENT)).cleanupSG(); \r
+ }\r
+\r
+ @Override\r
+ public void init(IElement e, G2DParentNode parent) {\r
+ ((IDrawable)e.getHint(KEY_CONTENT)).initSG(parent);\r
+ }\r
+ \r
+ @Override\r
+ public Rectangle2D getBounds(IElement e, Rectangle2D size) {\r
+ if(size == null)\r
+ size = new Rectangle2D.Double();\r
+ ((IDrawable)e.getHint(KEY_CONTENT)).getBounds(size);\r
+ return size;\r
+ }\r
+\r
+ @Override\r
+ public Point2D getPosition(IElement e) {\r
+ IDrawable drawable = (IDrawable)e.getHint(KEY_CONTENT);\r
+ if(drawable instanceof ITransformable)\r
+ return ((ITransformable)drawable).getPosition(); \r
+ else\r
+ return new Point2D.Double(0.0, 0.0);\r
+ }\r
+\r
+ @Override\r
+ public void moveTo(IElement e, double x, double y) {\r
+ IDrawable drawable = (IDrawable)e.getHint(KEY_CONTENT);\r
+ if(drawable instanceof ITransformable) {\r
+ drawable = ((ITransformable)drawable).moveTo(x, y);\r
+ e.setHint(KEY_CONTENT, drawable);\r
+ drawable.updateSG();\r
+ }\r
+ }\r
+\r
+ @Override\r
+ public Shape getElementShape(IElement e) {\r
+ return getBounds(e, null);\r
+ }\r
+ \r
+ @Override\r
+ public int pick(IElement e, Shape s, PickPolicy policy,\r
+ Collection<IElement> result) {\r
+ if(pickTest(e, s, policy)) {\r
+ result.add(e);\r
+ return 1;\r
+ }\r
+ else\r
+ return 0; \r
+ }\r
+\r
+ @Override\r
+ public boolean pickTest(IElement e, Shape s, PickPolicy policy) {\r
+ IDrawable drawable = (IDrawable)e.getHint(KEY_CONTENT);\r
+ switch(policy) {\r
+ case PICK_CONTAINED_OBJECTS:\r
+ return drawable.pickContained(s);\r
+ case PICK_INTERSECTING_OBJECTS:\r
+ return drawable.pickIntersecting(s);\r
+ default:\r
+ return false;\r
+ } \r
+ }\r
+ \r
+ }\r
+\r
+ public static ElementClass createElementClass(final Resource resource) { \r
+ return ElementClass.compile(\r
+ WIDGET_HANDLER_INSTANCE,\r
+ new ResourceAdapter() {\r
+\r
+ @Override\r
+ public Resource getResource() {\r
+ return resource;\r
+ }\r
+ \r
+ }\r
+ );\r
+ }\r
+}\r
--- /dev/null
+package org.simantics.sysdyn.ui.diagram;\r
+\r
+import org.simantics.sysdyn.ui.elements.TestDrawable;\r
+\r
+\r
+public class SysdynDiagramEditor extends DiagramEditorFacade {\r
+\r
+ public SysdynDiagramEditor() {\r
+ super();\r
+ }\r
+ \r
+}\r
--- /dev/null
+package org.simantics.sysdyn.ui.elements;\r
+\r
+import java.awt.Shape;\r
+import java.awt.geom.AffineTransform;\r
+\r
+import org.simantics.scenegraph.g2d.G2DParentNode;\r
+\r
+public abstract class Drawable implements IDrawable {\r
+\r
+ public static final AffineTransform IDENTITY = new AffineTransform();\r
+ \r
+ @Override\r
+ public void initSG(G2DParentNode parent) {\r
+ }\r
+ \r
+ @Override\r
+ public void cleanupSG() {\r
+ }\r
+\r
+ @Override\r
+ public void updateSG() { \r
+ }\r
+\r
+ @Override\r
+ public boolean pickContained(Shape s) {\r
+ return false;\r
+ }\r
+\r
+ @Override\r
+ public boolean pickIntersecting(Shape s) {\r
+ return false;\r
+ } \r
+\r
+}\r
--- /dev/null
+package org.simantics.sysdyn.ui.elements;\r
+\r
+import java.awt.Shape;\r
+import java.awt.geom.Rectangle2D;\r
+\r
+import org.simantics.scenegraph.g2d.G2DParentNode;\r
+\r
+public interface IDrawable {\r
+ void getBounds(Rectangle2D size);\r
+ void initSG(G2DParentNode parent);\r
+ void updateSG();\r
+ void cleanupSG();\r
+ boolean pickIntersecting(Shape s);\r
+ boolean pickContained(Shape s);\r
+}\r
--- /dev/null
+package org.simantics.sysdyn.ui.elements;\r
+\r
+import java.awt.geom.AffineTransform;\r
+import java.awt.geom.Point2D;\r
+\r
+public interface ITransformable extends IDrawable {\r
+ ITransformable setTransform(AffineTransform at);\r
+ AffineTransform getTransform(); \r
+ public ITransformable moveTo(double x, double y);\r
+ Point2D getPosition();\r
+}\r
--- /dev/null
+package org.simantics.sysdyn.ui.elements;\r
+\r
+import java.awt.geom.AffineTransform;\r
+import java.awt.geom.Point2D;\r
+\r
+public abstract class PositionableDrawable extends Drawable implements ITransformable, Cloneable {\r
+ protected double posX;\r
+ protected double posY;\r
+ \r
+ @Override\r
+ public Point2D getPosition() {\r
+ return new Point2D.Double(posX, posY);\r
+ }\r
+ @Override\r
+ public AffineTransform getTransform() {\r
+ return new AffineTransform(1.0, 0.0, 0.0, 1.0, posX, posY);\r
+ }\r
+ @Override\r
+ public ITransformable moveTo(double x, double y) {\r
+ try {\r
+ PositionableDrawable d = (PositionableDrawable)clone();\r
+ d.posX = x;\r
+ d.posY = y;\r
+ return d;\r
+ } catch(CloneNotSupportedException e) { \r
+ throw new Error(e);\r
+ }\r
+ }\r
+ @Override\r
+ public ITransformable setTransform(AffineTransform at) {\r
+ try {\r
+ PositionableDrawable d = (PositionableDrawable)clone();\r
+ d.posX = at.getTranslateX();\r
+ d.posY = at.getTranslateY();\r
+ return d;\r
+ } catch(CloneNotSupportedException e) { \r
+ throw new Error(e);\r
+ } \r
+ }\r
+}\r
--- /dev/null
+package org.simantics.sysdyn.ui.elements;\r
+\r
+import java.awt.Shape;\r
+import java.awt.geom.AffineTransform;\r
+import java.awt.geom.Rectangle2D;\r
+\r
+import org.simantics.scenegraph.g2d.G2DParentNode;\r
+import org.simantics.scenegraph.g2d.nodes.ShapeNode;\r
+\r
+\r
+public class TestDrawable extends PositionableDrawable {\r
+\r
+ @Override\r
+ public void getBounds(Rectangle2D size) {\r
+ size.setFrame(-10.0, -10.0, 20.0, 20.0);\r
+ }\r
+ \r
+ ShapeNode node;\r
+ \r
+ @Override\r
+ public void initSG(G2DParentNode parent) {\r
+ node = parent.addNode(ShapeNode.class);\r
+ node.setShape(new Rectangle2D.Double(-10.0, -10.0, 20.0, 20.0));\r
+ } \r
+ \r
+ @Override\r
+ public boolean pickContained(Shape s) {\r
+ return s.contains(-10.0, -10.0, 20.0, 20.0);\r
+ }\r
+ \r
+ @Override\r
+ public boolean pickIntersecting(Shape s) {\r
+ return s.intersects(-10.0, -10.0, 20.0, 20.0);\r
+ }\r
+ \r
+}\r