]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - org.argeo.slc.webapp/src/main/webapp/source/class/org/argeo/ria/components/ViewPane.js
Show info in a little popup
[gpl/argeo-slc.git] / org.argeo.slc.webapp / src / main / webapp / source / class / org / argeo / ria / components / ViewPane.js
index 25e8f10e6b186651ca8a6c1d3a7ff32f0668dc44..e04970c4388420c54df81b805e1dcc7c55a6950b 100644 (file)
@@ -1,17 +1,21 @@
 /**
+ * A standard view container, referenced in the application by its unique id.
+ * It is managed by the ViewsManager singleton that works as the "View" part of an MVC model.
+ * @see org.argeo.ria.components.ViewsManager
  * @author Charles
  */
-/**
- * This is the main application class of your custom application "sparta"
- */
 qx.Class.define("org.argeo.ria.components.ViewPane",
 {
   extend : qx.ui.container.Composite,
   implement : [org.argeo.ria.components.ILoadStatusable],
 
-  construct : function(application, viewId, viewTitle, splitPaneData){
+  /**
+   * @param viewId {String} Unique id of this viewPane
+   * @param viewTitle {String} Readable Title of this viewPane
+   * @param splitPaneData {Map} Additionnal data to be used by splitpanes implementations.
+   */
+  construct : function(viewId, viewTitle, splitPaneData){
        this.base(arguments);
-       this.setApplication(application);
        this.setViewId(viewId);
        this._defaultViewTitle = viewTitle;
        this.setViewTitle(viewTitle);
@@ -25,13 +29,40 @@ qx.Class.define("org.argeo.ria.components.ViewPane",
 
   properties : 
   {
-       application : {init : null},
+       /**
+        * Unique id of the pane
+        */
        viewId : {init:""},
+       /**
+        * Human-readable title for this view
+        */
        viewTitle : {init:"", event:"changeViewTitle"},
-       viewSelection : { nullable:false },
-       ownScrollable : {init: false},
-       splitPaneData : {init  : null},
-       commands : {init : null, nullable:true}
+       /**
+        * Selection model for this view
+        */
+       viewSelection : { nullable:false, check:"org.argeo.ria.components.ViewSelection" },
+       /**
+        * Has its own scrollable content 
+        */
+       ownScrollable : {init: false, check:"Boolean"},
+       /**
+        *  Data concerning the split pane
+        */
+       splitPaneData : {init  : null, check:"Map"},
+       /**
+        * Map of commands definition
+        * @see org.argeo.ria.event.Command 
+        */
+       commands : {init : null, nullable:true, check:"Map"},
+       /**
+        * The real business content. 
+        */
+       content : {
+               init: null,
+               nullable : true,
+               check : "org.argeo.ria.components.IView",
+               apply : "_applyContent"
+       }
   },
   
   /*
@@ -42,15 +73,27 @@ qx.Class.define("org.argeo.ria.components.ViewPane",
 
   members :
   {
+       /**
+        * Creates a standard GUI for the viewPane, including a container for an IView.
+        */
        createGui : function(){
                this.setLayout(new qx.ui.layout.VBox());
                this.header = new qx.ui.container.Composite();
                this.header.setLayout(new qx.ui.layout.Dock());
-               this.header.set({appearance:"app-header"});
+               this.loadImage = new qx.ui.basic.Image('resource/slc/ajax-loader.gif');
+               this.header.set({appearance:"app-header", height:34});
                this.headerLabel = new qx.ui.basic.Label(this.getViewTitle()); 
                this.header.add(this.headerLabel, {edge:"west"});
                this.addListener("changeViewTitle", function(e){
-                       this.headerLabel.setContent(e.getData());
+                       var newTitle = e.getData();
+                       if(newTitle != ""){
+                               this.headerLabel.setContent(newTitle);
+                               if(e.getOldData() == ""){
+                                       this.header.add(this.headerLabel, {edge:"west"});
+                               }
+                       }else{
+                               this.header.remove(this.headerLabel);
+                       }
                }, this);
                this.add(this.header);
                this.setDecorator(new qx.ui.decoration.Single(1,"solid","#000"));
@@ -84,22 +127,35 @@ qx.Class.define("org.argeo.ria.components.ViewPane",
                */
        },
        
-       setContent : function(content){
+       /**
+        * Sets the content of this pane.
+        * @param content {org.argeo.ria.components.IView} An IView implementation
+        */
+       _applyContent : function(content){
+               if(content == null) return;
                var addScrollable = (content.addScroll?content.addScroll():false);
                if(addScrollable){
                        this.setOwnScrollable(true);
                        this.scrollable = new qx.ui.container.Scroll(content);
                        this.add(this.scrollable, {flex: 1});
                }else{
-                       this.content = content;
-                       this.add(this.content, {flex:1});
+                       this.guiContent = content;
+                       this.add(this.guiContent, {flex:1});
                }
        },
+               
+       addHeaderComponent : function(component){
+               this.header.setPadding(4);
+               this.header.add(component, {edge:"center"});
+               this.loadImage.setMargin(4);
+       },
        
+       /**
+        * Implementation of the ILoadStatusable interface.
+        * @see org.argeo.ria.components.ILoadStatusable
+        * @param load {Boolean} The loading status
+        */
        setOnLoad : function(load){
-               if(!this.loadImage){
-                       this.loadImage = new qx.ui.basic.Image('resource/slc/ajax-loader.gif');
-               }
                if(load){
                        this.header.add(this.loadImage, {edge:"east"});
                }else{
@@ -107,17 +163,21 @@ qx.Class.define("org.argeo.ria.components.ViewPane",
                }
        },
        
+       /**
+        * Removes and destroy the IView content of this viewPane.
+        */
        empty: function(){
                if(this.getOwnScrollable() && this.scrollable){
                        this.remove(this.scrollable);
-               }else if(this.content){
-                       this.remove(this.content);
+               }else if(this.guiContent){
+                       this.remove(this.guiContent);
                }
                if(this.getCommands()){
                        org.argeo.ria.event.CommandsManager.getInstance().removeCommands(this.getCommands());
                        this.setCommands(null);
                }
                this.setViewTitle(this._defaultViewTitle);
+               this.setContent(null);
        }
 
   }