callback : function(e){
var sel = this.list.getSortedSelection();
var item = sel[0];
- alert('Edit Specs for : ' + item.getLabel());
+ var execFlow = item.getUserData("batchEntrySpec").getFlow();
+ var specEditor = new org.argeo.slc.ria.execution.SpecEditor(execFlow);
+ specEditor.attachAndShow();
},
selectionChange : function(viewId, selection){
- if(viewId != "form") return;
+ if(viewId != "form:list") return;
this.setEnabled(false);
if((selection && selection.length == 1)) this.setEnabled(true);
},
toolbar : null,
callback : function(e){
var sel = this.list.getSortedSelection();
- alert('Remove '+ sel.length+ ' elements from batch');
+ var modal = new org.argeo.ria.components.Modal("Confirm", null);
+ modal.addConfirm("Are you sure you want to remove<br> the selected test" + (sel.length>1?"s":"") + " from the Batch?");
+ modal.addListener("ok", function(){
+ for(var i=0;i<sel.length;i++){
+ this.list.remove(sel[i]);
+ }
+ }, this);
+ modal.attachAndShow();
},
selectionChange : function(viewId, selection){
- if(viewId != "form") return;
+ if(viewId != "form:list") return;
this.setEnabled(false);
if((selection && selection.length > 0)) this.setEnabled(true);
},
command : null
},
"reloadtree" : {
- label : "Reload Node",
+ label : "Reload",
icon : "resource/slc/view-refresh.png",
shortcut : "Control+m",
- enabled : true,
+ enabled : false,
menu : "Launcher",
toolbar : "launcher",
callback : function(e){
if(selected.classname == "org.argeo.ria.components.DynamicTreeFolder"){
selected.reload();
}
- },
+ },
+ selectionChange : function(viewId, selection){
+ if(viewId != "form:tree") return;
+ if(!selection || selection.length != 1) return;
+ var item = selection[0];
+ if(!qx.Class.isSubClassOf(qx.Class.getByName(item.classname), qx.ui.tree.AbstractTreeItem)) return;
+ this.setEnabled(false);
+ if(qx.Class.isSubClassOf(qx.Class.getByName(item.classname), org.argeo.ria.components.DynamicTreeFolder)){
+ this.setEnabled(true);
+ }
+ },
command : null
}
}
statics : {
flowLoader : function(folder){
- var moduleData = folder.getUserData("executionModule");
- var req = org.argeo.ria.remote.RequestManager.getInstance().getRequest("stub.xml", "GET", "application/xml");
+ var moduleData = folder.getUserData("moduleData");
+ var req = org.argeo.ria.remote.RequestManager.getInstance().getRequest("../argeo-ria-src/stub.xml", "GET", "application/xml");
req.addListener("completed", function(response){
var executionModule = new org.argeo.slc.ria.execution.Module();
executionModule.setXmlNode(response.getContent());
+ //
+ // ARTIFIALLY REPLACE MODULE NAME / VERSION, FOR TESTS PURPOSES
+ //
+ executionModule.setName(moduleData.name);
+ executionModule.setVersion(moduleData.version);
+ // END
var execFlows = executionModule.getExecutionFlows();
for(var key in execFlows){
var file = new qx.ui.tree.TreeFile(key);
- file.setUserData("executionFlow", execFlows);
+ file.setUserData("executionModule", executionModule);
+ file.setUserData("executionFlow", execFlows[key]);
folder.add(file);
}
folder.setLoaded(true);
folder.getDragData()
);
moduleFolder.add(versionFolder);
- //versionFolder.setUserData("executionModule", "object");
+ versionFolder.setUserData("moduleData", {name:key, version:mods[key][i]});
}
folder.setLoaded(true);
}
this.tree.setRoot(root);
root.setOpen(true);
+ this.tree.addListener("changeSelection", function(e){
+ var viewSelection = this.getViewSelection();
+ viewSelection.setViewId("form:tree");
+ viewSelection.clear();
+ var sel = this.tree.getSortedSelection();
+ for(var i=0;i<sel.length;i++){
+ viewSelection.addNode(sel[i]);
+ }
+ }, this);
+
this.listPane = new qx.ui.container.Composite(new qx.ui.layout.Dock());
var listToolBar = new qx.ui.toolbar.ToolBar();
var toolGroup = new qx.ui.toolbar.Part();
this.list.setSelectionMode("multi");
this.list.setDroppable(true);
this.list.addListener("drop", function(e){
- var label = e.getRelatedTarget().getLabel();
- var li = new qx.ui.container.Composite(new qx.ui.layout.HBox(5));
- li.add(new qx.ui.basic.Label(label));
- var item = new qx.ui.form.ListItem(label, e.getRelatedTarget().getIcon());
+ var target = e.getRelatedTarget();
+ var executionModule = target.getUserData("executionModule");
+ var executionFlow = target.getUserData("executionFlow");
+ var label = executionModule.getName()+"/"+executionModule.getVersion()+"/"+executionFlow.getName();
+ var icon = target.getIcon();
+
+ var item = new qx.ui.form.ListItem(label, icon);
+ item.setUserData("batchEntrySpec", new org.argeo.slc.ria.execution.BatchEntrySpec(executionModule, executionFlow));
item.setPaddingTop(1);
item.setPaddingBottom(2);
this.list.add(item);
this.list.addListener("changeSelection", function(e){
var viewSelection = this.getViewSelection();
+ viewSelection.setViewId("form:list");
viewSelection.clear();
var listSel = this.list.getSortedSelection();
for(var i=0;i<listSel.length;i++){
--- /dev/null
+/**\r
+ * Generic modal popup window.\r
+ * It is layed out with a dock layout. When adding components to it, they are added as "center".\r
+ * @author Charles du Jeu\r
+ */\r
+qx.Class.define("org.argeo.slc.ria.execution.SpecEditor",\r
+{\r
+ extend : qx.ui.window.Window,\r
+ \r
+ events : {\r
+ /**\r
+ * Triggered when the user clicks the "ok" button. \r
+ */\r
+ "ok" : "qx.event.type.Event"\r
+ },\r
+ /**\r
+ * \r
+ * @param caption {String} Title of the window\r
+ * @param icon {String} Icon of the window\r
+ * @param text {String} Default content of the window.\r
+ */\r
+ construct : function(executionFlow){\r
+ this.base(arguments, "Spec Editor");\r
+ this.set({\r
+ showMaximize : false,\r
+ showMinimize : false,\r
+ width: parseInt(qx.bom.Viewport.getWidth()*80/100),\r
+ height: parseInt(qx.bom.Viewport.getHeight()*80/100)\r
+ });\r
+ this.setLayout(new qx.ui.layout.Dock());\r
+ this.setModal(true);\r
+ this.center();\r
+ if(executionFlow){\r
+ this.addContent(new qx.ui.basic.Label("Editing specs for flow : "+executionFlow.getName()));\r
+ }else{\r
+ this.addCloseButton();\r
+ }\r
+ },\r
+ \r
+ members : {\r
+ /**\r
+ * Display a component (panel) in the center of the popup\r
+ * @param panel {qx.ui.core.Widget} A gui component (will be set at width 100%).\r
+ */\r
+ addContent: function(panel){\r
+ this.add(panel, {edge:'center', width:'100%'});\r
+ this.addCloseButton();\r
+ },\r
+ /**\r
+ * Automatically attach to the application root, then show.\r
+ */\r
+ attachAndShow:function(){\r
+ org.argeo.ria.components.ViewsManager.getInstance().getApplicationRoot().add(this); \r
+ this.show();\r
+ },\r
+ /**\r
+ * Adds a close button bottom-center aligned to the popup\r
+ */\r
+ addCloseButton : function(){\r
+ this.closeButton = new qx.ui.form.Button("Close");\r
+ this.closeButton.addListener("execute", this._closeAndDestroy, this);\r
+ this.add(this.closeButton, {edge:'south'}); \r
+ },\r
+ /**\r
+ * Adds two buttons bottom-center aligned (Ok and Cancel). \r
+ * Ok button has no listener by default, Cancel will close and destroy the popup.\r
+ */\r
+ addOkCancel : function(){\r
+ var buttonPane = new qx.ui.container.Composite(new qx.ui.layout.HBox(5, 'right'));\r
+ buttonPane.setAlignX("center");\r
+ this.add(buttonPane, {edge:"south"});\r
+ this.okButton = new qx.ui.form.Button("Ok");\r
+ this.okButton.addListener("execute", function(e){\r
+ this.fireEvent("ok");\r
+ this._closeAndDestroy();\r
+ }, this);\r
+ this.cancelButton = new qx.ui.form.Button("Cancel");\r
+ this.cancelButton.addListener("execute", this._closeAndDestroy, this);\r
+ buttonPane.add(this.okButton);\r
+ buttonPane.add(this.cancelButton);\r
+ },\r
+ /**\r
+ * Close this modal window and destroy it.\r
+ */\r
+ _closeAndDestroy : function(){\r
+ this.hide();\r
+ this.destroy(); \r
+ }\r
+ }\r
+});
\ No newline at end of file