]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.g3d/scl/G3D/Scenegraph/Node.scl
Further refactoring of SCL interfaces
[simantics/3d.git] / org.simantics.g3d / scl / G3D / Scenegraph / Node.scl
index 84d7fc4ed7926a2509a621083b39e001c303f9a5..b21bf4a2848d3073c0d428c04fefb8471baba37e 100644 (file)
@@ -1,24 +1,65 @@
-
-
-importJava "org.simantics.g3d.scenegraph.base.INode" where
-  data INode
+import "JavaBuiltin" as Java
 
 importJava "org.simantics.g3d.scenegraph.base.ParentNode" where
   data ParentNode
   
-  addNode :: ParentNode -> String -> INode -> ()
-  removeNode :: ParentNode -> String -> INode -> Boolean
-  deattachNode :: ParentNode -> String -> INode -> Boolean
+  @JavaName addNode
+  addNode' :: ParentNode -> String -> Node -> ()
+  @JavaName removeNode
+  removeNode' :: ParentNode -> String -> Node -> Boolean
+  @JavaName deattachNode
+  deattachNode' :: ParentNode -> String -> Node -> Boolean
   
-  removeNodes :: ParentNode -> String ->()
-  getNodes :: ParentNode -> String -> [INode]
+  @JavaName removeNodes
+  removeNodes' :: ParentNode -> String ->()
   @JavaName getNodes
-  getAllNodes :: ParentNode -> [INode]
-  remove :: ParentNode -> ()
+  getNodes' :: ParentNode -> String -> [Node]
+  @JavaName getNodes
+  getAllNodes' :: ParentNode -> [Node]
+  @JavaName remove
+  remove' :: ParentNode -> ()
+
+class ParentNodeClass a where
+  asParentNode :: a -> ParentNode
+  asParentNode = Java.unsafeCoerce
+
+  addNode :: a -> String -> Node -> ()
+  addNode c = addNode' (asParentNode c)
+  removeNode :: a -> String -> Node -> Boolean
+  removeNode c = removeNode' (asParentNode c)
+  deattachNode :: a -> String -> Node -> Boolean
+  deattachNode c = deattachNode' (asParentNode c)
+  removeNodes :: a -> String ->()
+  removeNodes c = removeNodes' (asParentNode c)
+  getNodes :: a -> String -> [Node]
+  getNodes c = getNodes' (asParentNode c)
+  remove :: a -> ()
+  remove c = remove' (asParentNode c)
+
+instance NodeClass ParentNode
+instance ParentNodeClass ParentNode where
+  asParentNode = id
   
-importJava "org.simantics.g3d.scenegraph.base.Node" where
+importJava "org.simantics.g3d.scenegraph.base.INode" where
   data Node
   
-  getParent :: Node -> Maybe ParentNode
-  getRootNode :: Node -> Maybe ParentNode
-  deattach :: Node -> ()
+  @JavaName getParent
+  getParent' :: Node -> Maybe ParentNode
+  @JavaName getRootNode
+  getRootNode' :: Node -> Maybe ParentNode
+  @JavaName deattach
+  deattach' :: Node -> ()
+
+class NodeClass a where
+  asNode :: a -> Node
+  asNode = Java.unsafeCoerce
+
+  getParent :: a -> Maybe ParentNode
+  getParent c = getParent' (asNode c)
+  getRootNode :: a -> Maybe ParentNode
+  getRootNode c = getRootNode' (asNode c)
+  deattach :: a -> ()
+  deattach c = deattach' (asNode c)
+
+instance NodeClass Node where
+  asNode = id