qx.Class.define("org.argeo.jcr.ria.model.DataModel", {\r
extend : qx.core.Object,\r
\r
+ events : {\r
+ "changeContextNode" : "qx.event.type.Data"\r
+ },\r
+ \r
properties : {\r
rootNode : {\r
check : "org.argeo.jcr.ria.model.Node",\r
event : "changeRootNode" \r
},\r
contextNode : {\r
- check : "org.argeo.jcr.ria.model.Node",\r
- event : "changeContextNode"\r
+ check : "org.argeo.jcr.ria.model.Node"\r
},\r
selection : {\r
check : "org.argeo.jcr.ria.model.Node[]",\r
construct : function(rootNode){\r
this.base(arguments);\r
this.setRootNode(rootNode);\r
+ },\r
+ \r
+ members : {\r
+ requireContextChange : function(path){\r
+ var targetNode;\r
+ var rootNode = this.getRootNode();\r
+ if(!path){\r
+ targetNode = rootNode;\r
+ }else{\r
+ // Create a fake node\r
+ if(path[path.length-1] == '/'){\r
+ path = path.substring(0, path.length-1);\r
+ }\r
+ var base = path.substring(path.lastIndexOf("/")+1);\r
+ targetNode = new org.argeo.jcr.ria.model.Node(base);\r
+ rootNode.addChild(targetNode);\r
+ targetNode.setNodeProvider(rootNode.getNodeProvider());\r
+ targetNode.setPath(path); \r
+ }\r
+ var observer = function(event){\r
+ var state = event.getData();\r
+ if(state == "loading"){\r
+ targetNode.loadingNode = new org.argeo.jcr.ria.model.Node("loading"); \r
+ targetNode.addChild(targetNode.loadingNode);\r
+ }else if(state == "loaded"){\r
+ if(targetNode.loadingNode) {\r
+ targetNode.loadingNode.remove();\r
+ targetNode.loadingNode = null;\r
+ }\r
+ targetNode.removeListener("changeLoadState", observer, this);\r
+ } \r
+ this.setContextNode(targetNode);\r
+ this.fireDataEvent("changeContextNode", targetNode);\r
+ };\r
+ targetNode.addListener("changeLoadState", observer, this);\r
+ targetNode.load();\r
+ }\r
}\r
\r
});
\ No newline at end of file