Set "loaded" flag
[lgpl/argeo-commons.git] / security / runtime / org.argeo.security.ria / src / argeo-ria-lib / security / class / org / argeo / security / ria / UserEditorApplet.js
index 7f18caaed2e49245245013ef2315273c636feb2e..1960ff8dc65bd89b27e915db01660dbfc4bec9f2 100644 (file)
@@ -3,7 +3,7 @@
  * The only associated command is the "Close" command.
  */
 /* *************************************************
-#asset(resource/org.argeo.ria.sample/window-close.png)
+#asset(resource/org.argeo.security.ria/*)
 ****************************************************/
 qx.Class.define("org.argeo.security.ria.UserEditorApplet",
 {
@@ -12,8 +12,7 @@ qx.Class.define("org.argeo.security.ria.UserEditorApplet",
 
   construct : function(){
        this.base(arguments);
-       this.setLayout(new qx.ui.layout.VBox());
-       //this.setDecorator("tabview-pane");
+       this.setLayout(new qx.ui.layout.VBox(5));
   },
 
   properties : 
@@ -31,7 +30,7 @@ qx.Class.define("org.argeo.security.ria.UserEditorApplet",
                init : {
                        "save_user" : {
                                label           : "Save", 
-                               icon            : "ria/window-close.png",
+                               icon            : "org.argeo.security.ria/document-save.png",
                                shortcut        : "Control+s",
                                enabled         : true,
                                menu            : "Users",
@@ -50,14 +49,24 @@ qx.Class.define("org.argeo.security.ria.UserEditorApplet",
                        },
                        "close" : {
                                label           : "Close", 
-                               icon            : "org.argeo.ria.sample/window-close.png",
+                               icon            : "org.argeo.security.ria/window-close.png",
                                shortcut        : "Control+w",
                                enabled         : true,
                                menu            : "Users",
                                toolbar         : "user",
                                callback        : function(e){
                                        // Call service to delete
-                                       this.getView().closeCurrent();                                          
+                                       var iApplet = org.argeo.ria.components.ViewsManager.getInstance().getViewPaneById("editor").getContent();
+                                       if(!iApplet.getModified()){
+                                               this.getView().closeCurrent();
+                                               return;
+                                       }
+                                       var modal = new org.argeo.ria.components.Modal("Warning");
+                                       modal.addConfirm("There are unsaved changes!\n Are you sure you want to close?");
+                                       modal.addListener("ok", function(){
+                                               this.getView().closeCurrent();
+                                       }, this);
+                                       modal.attachAndShow();
                                },
                                command         : null
                        }                                               
@@ -68,13 +77,17 @@ qx.Class.define("org.argeo.security.ria.UserEditorApplet",
                check:"org.argeo.ria.components.ViewSelection"
        },
        modified : {
-               init : false
+               init : false,
+               apply : "_applyModified"
        },
        rolesList : {
                
        },
        instanceId : {init:""},
-       instanceLabel : {init:"Editor"}         
+       instanceLabel : {init:"Editor"},
+       loaded : {
+               init : false
+       }
   },
 
   members :
@@ -93,7 +106,11 @@ qx.Class.define("org.argeo.security.ria.UserEditorApplet",
                        this.setInstanceLabel("User " + data);
                }
                this.setView(viewPane);
-               this.setViewSelection(new org.argeo.ria.components.ViewSelection(viewPane.getViewId()));
+               this.setViewSelection(new org.argeo.ria.components.ViewSelection(viewPane.getViewId()));                
+               
+               // TOOLBAR
+               this.buttonGB = new qx.ui.container.Composite(new qx.ui.layout.HBox(5, "right"));
+               this.add(this.buttonGB);
                
                // GROUPBOXES
                this.basicGB = new qx.ui.groupbox.GroupBox("Base Informations");
@@ -118,10 +135,6 @@ qx.Class.define("org.argeo.security.ria.UserEditorApplet",
                
                // FIELDS
                this.usernameField = new qx.ui.form.TextField();
-               this.usernameField.addListener("changeValue", function(){
-                       this.setModified(true);
-                       this.getViewSelection().triggerEvent();
-               }, this);
                this.basicGB.add(new qx.ui.basic.Label("Username"), {row:0,column:0});                  
                this.basicGB.add(this.usernameField, {row:0,column:1});
                
@@ -135,28 +148,63 @@ qx.Class.define("org.argeo.security.ria.UserEditorApplet",
                
                this.naturesTab = new qx.ui.tabview.TabView("top");
                this.simpleNature = new org.argeo.security.ria.components.SimpleUserNatureImpl();
+               
                var page1 = new qx.ui.tabview.Page(this.simpleNature.getNatureLabel());
                page1.setLayout(new qx.ui.layout.Dock());
                page1.add(this.simpleNature.getContainer(), {edge:"center"});
                this.naturesTab.add(page1);
                this.naturesGB.add(this.naturesTab, {edge:"center"});
-                               
+                                       
        },
                
+       _attachListeners : function(){
+               this.usernameField.addListener("changeValue", function(){
+                       this.setModified(true);
+               }, this);
+               this.rolesField.addListener("changeValue", function(){
+                       this.setModified(true);
+               }, this);
+               this.passPane.addListener("modified", function(){
+                       this.setModified(true);
+               }, this);
+               this.simpleNature.addListener("modified", function(){
+                       this.setModified(true);
+               }, this);               
+       },
+       
        _initializeGroupBox: function(groupBox){
                groupBox.setPadding(0);
                groupBox.getChildrenContainer().setPadding(8);                  
        },
        
+       _applyModified : function(value){
+               if(value) this.getViewSelection().triggerEvent();
+       },
+       
        /**
         * Load a given row : the data passed must be a simple data array.
         * @param data {Element} The text xml description. 
         */
        load : function(userData){
+               if(this.getLoaded()){
+                       return;
+               }
                if(userData){
                        this.usernameField.setValue(userData);
                }
                this.setRolesList(["ROLE_ADMIN", "ROLE_USER"]);
+               this._attachListeners();
+               var title = new qx.ui.basic.Atom(this.getInstanceLabel(), "org.argeo.security.ria/preferences-user.png");
+               title.setFont(qx.bom.Font.fromString("16px sans-serif bold"));                  
+               this.buttonGB.add(title);
+               this.buttonGB.add(new qx.ui.core.Spacer(), {flex:1});
+               var commands = this.getCommands();
+               var button = new qx.ui.form.Button("Save", "org.argeo.security.ria/document-save.png", commands["save_user"].command);                  
+               var button2 = new qx.ui.form.Button("Close", "org.argeo.security.ria/window-close.png", commands["close"].command);             
+               this.buttonGB.add(button);
+               this.buttonGB.add(button2);
+               this.setLoaded(true);
+               
        },
                 
        addScroll : function(){