X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=server%2Forg.argeo.slc.ria%2Fsrc%2Fargeo-ria-lib%2Fjcr%2Fclass%2Forg%2Fargeo%2Fjcr%2Fria%2Fmodel%2FDataModel.js;h=a8f75c0ebf776665f1cd56155b520f2c36f6f5d3;hb=42edced0ab53158ef52a4f8f1652a9d487a9ded5;hp=5cb49bab6661310a9b5a3a3625c150469901078d;hpb=76ce032d334bca776cc0004287092bd9766a4a0f;p=gpl%2Fargeo-slc.git diff --git a/server/org.argeo.slc.ria/src/argeo-ria-lib/jcr/class/org/argeo/jcr/ria/model/DataModel.js b/server/org.argeo.slc.ria/src/argeo-ria-lib/jcr/class/org/argeo/jcr/ria/model/DataModel.js index 5cb49bab6..a8f75c0eb 100644 --- a/server/org.argeo.slc.ria/src/argeo-ria-lib/jcr/class/org/argeo/jcr/ria/model/DataModel.js +++ b/server/org.argeo.slc.ria/src/argeo-ria-lib/jcr/class/org/argeo/jcr/ria/model/DataModel.js @@ -1,24 +1,74 @@ qx.Class.define("org.argeo.jcr.ria.model.DataModel", { extend : qx.core.Object, + events : { + "changeContextNode" : "qx.event.type.Data" + }, + properties : { rootNode : { check : "org.argeo.jcr.ria.model.Node", event : "changeRootNode" }, contextNode : { - check : "org.argeo.jcr.ria.model.Node", - event : "changeContextNode" + check : "org.argeo.jcr.ria.model.Node" }, selection : { - check : "org.argeo.jcr.ria.model.Node[]", - event : "changeSelection" + check : "Array", + event : "changeSelection", + init : [] + }, + selectionSource : { + check : "Object", + init : null, + nullable : true } }, construct : function(rootNode){ this.base(arguments); this.setRootNode(rootNode); + }, + + members : { + requireContextChange : function(path){ + var targetNode; + var rootNode = this.getRootNode(); + this.setSelection([]); + if(!path){ + targetNode = rootNode; + }else{ + // Create a fake node + if(path[path.length-1] == '/'){ + path = path.substring(0, path.length-1); + } + var base = path.substring(path.lastIndexOf("/")+1); + targetNode = new org.argeo.jcr.ria.model.Node(base, rootNode.getNodeProvider()); + rootNode.addChild(targetNode); + targetNode.setPath(path); + } + var observer = function(event){ + var state = event.getData(); + if(state == "loading"){ + targetNode.loadingNode = new org.argeo.jcr.ria.model.Node("loading"); + targetNode.addChild(targetNode.loadingNode); + }else if(state == "loaded"){ + if(targetNode.loadingNode) { + targetNode.loadingNode.remove(); + targetNode.loadingNode = null; + } + targetNode.removeListener("changeLoadState", observer, this); + } + this.setContextNode(targetNode); + this.fireDataEvent("changeContextNode", targetNode); + }; + targetNode.addListener("changeLoadState", observer, this); + targetNode.load(1); + }, + setSelectionWithSource : function(selection, source){ + this.setSelectionSource(source); + this.setSelection(selection); + } } }); \ No newline at end of file