X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.slc.webapp%2Fsrc%2Fmain%2Fwebapp%2Fsource%2Fclass%2Forg%2Fargeo%2Fria%2Fcomponents%2FViewPane.js;h=e04970c4388420c54df81b805e1dcc7c55a6950b;hb=403dbbf39a3690334ba5e09e00a210367059504c;hp=25e8f10e6b186651ca8a6c1d3a7ff32f0668dc44;hpb=8f4e4722a346442a8ed1ca84efa24b60bfaf3d19;p=gpl%2Fargeo-slc.git diff --git a/org.argeo.slc.webapp/src/main/webapp/source/class/org/argeo/ria/components/ViewPane.js b/org.argeo.slc.webapp/src/main/webapp/source/class/org/argeo/ria/components/ViewPane.js index 25e8f10e6..e04970c43 100644 --- a/org.argeo.slc.webapp/src/main/webapp/source/class/org/argeo/ria/components/ViewPane.js +++ b/org.argeo.slc.webapp/src/main/webapp/source/class/org/argeo/ria/components/ViewPane.js @@ -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); } }