From 614cd339a65450805c1684af40bba14db6a8333f Mon Sep 17 00:00:00 2001 From: Charles du Jeu Date: Wed, 11 Mar 2009 15:58:56 +0000 Subject: [PATCH] Make modal window optionally "persistent" (not destroied when hidden, and accumulate messages until close is called) to get rid of the multiple modal errors. git-svn-id: https://svn.argeo.org/slc/trunk@2252 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../class/org/argeo/ria/components/Logger.js | 10 +++-- .../class/org/argeo/ria/components/Modal.js | 37 ++++++++++++++++--- 2 files changed, 39 insertions(+), 8 deletions(-) diff --git a/org.argeo.slc.webapp/src/main/webapp/argeo-ria-src/class/org/argeo/ria/components/Logger.js b/org.argeo.slc.webapp/src/main/webapp/argeo-ria-src/class/org/argeo/ria/components/Logger.js index 5b3365b36..33980a364 100644 --- a/org.argeo.slc.webapp/src/main/webapp/argeo-ria-src/class/org/argeo/ria/components/Logger.js +++ b/org.argeo.slc.webapp/src/main/webapp/argeo-ria-src/class/org/argeo/ria/components/Logger.js @@ -75,9 +75,13 @@ qx.Class.define("org.argeo.ria.components.Logger", var label = new qx.ui.basic.Label('
'+wrapper.innerHTML.replace(",","
")+'
'); label.setRich(true); if(entry.level == "error"){ - var alert = new org.argeo.ria.components.Modal("Error"); - alert.addContent(label.clone()); - alert.attachAndShow(); + if(!this.alert){ + this.alert = new org.argeo.ria.components.Modal("Error"); + this.alert.setPersistent(true); + this.alert.addCloseButton(); + } + this.alert.addCenter(label.clone()); + this.alert.attachAndShow(); }else if(entry.level == "info"){ this.showLogAsPopup(label.clone()); } diff --git a/org.argeo.slc.webapp/src/main/webapp/argeo-ria-src/class/org/argeo/ria/components/Modal.js b/org.argeo.slc.webapp/src/main/webapp/argeo-ria-src/class/org/argeo/ria/components/Modal.js index 3d3150b34..3d2c2c81b 100644 --- a/org.argeo.slc.webapp/src/main/webapp/argeo-ria-src/class/org/argeo/ria/components/Modal.js +++ b/org.argeo.slc.webapp/src/main/webapp/argeo-ria-src/class/org/argeo/ria/components/Modal.js @@ -7,6 +7,13 @@ qx.Class.define("org.argeo.ria.components.Modal", { extend : qx.ui.window.Window, + properties : { + persistent : { + check : "Boolean", + init : false + } + }, + events : { /** * Triggered when the user clicks the "ok" button. @@ -36,6 +43,19 @@ qx.Class.define("org.argeo.ria.components.Modal", }, members : { + + addCenter : function(component){ + if(!this.getPersistent()){ + this.add(component, {edge : 'center', width:'100%'}); + }else{ + if(!this.centerScroller){ + this.centerScroller = new qx.ui.container.Composite(new qx.ui.layout.VBox(1)); + this.add(new qx.ui.container.Scroll(this.centerScroller), {edge : 'center', width:'100%', height:'100%'}); + } + this.centerScroller.add(component); + } + }, + /** * Display text inside the popup * @param text {String} A string content for the popup @@ -44,7 +64,7 @@ qx.Class.define("org.argeo.ria.components.Modal", var label = new qx.ui.basic.Label(text); label.setRich(true); label.setTextAlign("center"); - this.add(label, {edge:'center', width:'100%'}); + this.addCenter(label); this.addCloseButton(); }, /** @@ -55,7 +75,7 @@ qx.Class.define("org.argeo.ria.components.Modal", var label = new qx.ui.basic.Label(text); label.setRich(true); label.setTextAlign("center"); - this.add(label, {edge:'center', width:'100%'}); + this.addCenter(label); this.addOkCancel(); }, /** @@ -63,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%). */ addContent: function(panel){ - this.add(panel, {edge:'center', width:'100%'}); + this.addCenter(panel); this.addCloseButton(); }, /** * Automatically attach to the application root, then show. */ attachAndShow:function(){ - org.argeo.ria.components.ViewsManager.getInstance().getApplicationRoot().add(this); + if(!this.attached){ + org.argeo.ria.components.ViewsManager.getInstance().getApplicationRoot().add(this); + this.attached = true; + } this.show(); }, /** @@ -128,7 +151,11 @@ qx.Class.define("org.argeo.ria.components.Modal", */ _closeAndDestroy : function(){ this.hide(); - this.destroy(); + if(!this.getPersistent()){ + this.destroy(); + }else{ + if(this.centerScroller) this.centerScroller.removeAll(); + } } } }); \ No newline at end of file -- 2.39.2