]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - org.argeo.slc.webapp/src/main/webapp/argeo-ria-src/class/org/argeo/ria/components/Modal.js
Make modal window optionally "persistent" (not destroied when hidden, and accumulate...
[gpl/argeo-slc.git] / org.argeo.slc.webapp / src / main / webapp / argeo-ria-src / class / org / argeo / ria / components / Modal.js
index f39cca36f73e99dc8c57417a1824ade437ec4bfa..3d2c2c81bb12c9925d84fe7dfb795d82fa2c49e2 100644 (file)
@@ -7,7 +7,17 @@ qx.Class.define("org.argeo.ria.components.Modal",
 {\r
        extend : qx.ui.window.Window,\r
   \r
+       properties : {\r
+               persistent : {\r
+                       check : "Boolean",\r
+                       init : false\r
+               }\r
+       },\r
+       \r
        events : {\r
+               /**\r
+                * Triggered when the user clicks the "ok" button. \r
+                */\r
                "ok" : "qx.event.type.Event"\r
        },\r
        /**\r
@@ -33,6 +43,19 @@ qx.Class.define("org.argeo.ria.components.Modal",
        },\r
        \r
        members : {\r
+               \r
+               addCenter : function(component){\r
+                       if(!this.getPersistent()){\r
+                               this.add(component, {edge : 'center', width:'100%'});\r
+                       }else{\r
+                               if(!this.centerScroller){\r
+                                       this.centerScroller = new qx.ui.container.Composite(new qx.ui.layout.VBox(1));                                  \r
+                                       this.add(new qx.ui.container.Scroll(this.centerScroller), {edge : 'center', width:'100%', height:'100%'});\r
+                               }\r
+                               this.centerScroller.add(component);\r
+                       }\r
+               },\r
+               \r
                /**\r
                 * Display text inside the popup\r
                 * @param text {String} A string content for the popup\r
@@ -41,14 +64,18 @@ qx.Class.define("org.argeo.ria.components.Modal",
                        var label = new qx.ui.basic.Label(text);\r
                        label.setRich(true);\r
                        label.setTextAlign("center");\r
-                       this.add(label, {edge:'center', width:'100%'});\r
+                       this.addCenter(label);\r
                        this.addCloseButton();\r
                },\r
+               /**\r
+                * Add a question and ok / cancel buttons\r
+                * @param text {String} The question to ask to the user\r
+                */\r
                addConfirm : function(text){\r
                        var label = new qx.ui.basic.Label(text);\r
                        label.setRich(true);\r
                        label.setTextAlign("center");\r
-                       this.add(label, {edge:'center', width:'100%'});\r
+                       this.addCenter(label);\r
                        this.addOkCancel();\r
                },\r
                /**\r
@@ -56,14 +83,17 @@ qx.Class.define("org.argeo.ria.components.Modal",
                 * @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.addCenter(panel);\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
+                       if(!this.attached){\r
+                               org.argeo.ria.components.ViewsManager.getInstance().getApplicationRoot().add(this);\r
+                               this.attached = true;\r
+                       }\r
                        this.show();\r
                },\r
                /**\r
@@ -99,9 +129,13 @@ qx.Class.define("org.argeo.ria.components.Modal",
                 * @param callbackContext {Object} Context for the callback, optional.\r
                 */\r
                makePromptForm:function(questionString, validationCallback, callbackContext){\r
-                       this.add(new qx.ui.basic.Label(questionString), {edge:'north'});\r
+                       var label = new qx.ui.basic.Label(questionString);\r
+                       label.setRich(true);\r
+                       label.setTextAlign("center");\r
+                       this.add(label, {edge:'north'});\r
                        var textField = new qx.ui.form.TextField();\r
-                       textField.setMarginTop(20);\r
+                       textField.setMarginTop(10);\r
+                       textField.setMarginBottom(10);\r
                        this.add(textField, {edge:'center'});\r
                        this.addOkCancel();\r
                        if(callbackContext){\r
@@ -117,7 +151,11 @@ qx.Class.define("org.argeo.ria.components.Modal",
                 */\r
                _closeAndDestroy : function(){\r
                        this.hide();\r
-                       this.destroy();                 \r
+                       if(!this.getPersistent()){\r
+                               this.destroy();\r
+                       }else{\r
+                               if(this.centerScroller) this.centerScroller.removeAll();\r
+                       }\r
                }\r
        }\r
 });
\ No newline at end of file