X-Git-Url: http://git.roojs.org/?p=roojs1;a=blobdiff_plain;f=docs%2Fsrc%2FRoo_BorderLayout.js.html;fp=docs%2Fsrc%2FRoo_BorderLayout.js.html;h=5dc82a9f5a791e35893aed2287d81d0548c82796;hp=b7e7769ae921c6f988beded7c0d861f87d8f8dfb;hb=10693a871ee6374b8e9f19c344ceb447ed0531d2;hpb=7dfd0d3cd68424e103991ef6946d2368cbe08a81 diff --git a/docs/src/Roo_BorderLayout.js.html b/docs/src/Roo_BorderLayout.js.html index b7e7769ae9..5dc82a9f5a 100644 --- a/docs/src/Roo_BorderLayout.js.html +++ b/docs/src/Roo_BorderLayout.js.html @@ -1,645 +1 @@ -
/*
- * Based on:
- * Ext JS Library 1.1.1
- * Copyright(c) 2006-2007, Ext JS, LLC.
- *
- * Originally Released Under LGPL - original licence link has changed is not relivant.
- *
- * Fork - LGPL
- * <script type="text/javascript">
- */
-/**
- * @class Roo.BorderLayout
- * @extends Roo.LayoutManager
- * @children Roo.ContentPanel
- * This class represents a common layout manager used in desktop applications. For screenshots and more details,
- * please see: <br><br>
- * <a href="http://www.jackslocum.com/yui/2006/10/19/cross-browser-web-20-layouts-with-yahoo-ui/">Cross Browser Layouts - Part 1</a><br>
- * <a href="http://www.jackslocum.com/yui/2006/10/28/cross-browser-web-20-layouts-part-2-ajax-feed-viewer-20/">Cross Browser Layouts - Part 2</a><br><br>
- * Example:
- <pre><code>
- var layout = new Roo.BorderLayout(document.body, {
- north: {
- initialSize: 25,
- titlebar: false
- },
- west: {
- split:true,
- initialSize: 200,
- minSize: 175,
- maxSize: 400,
- titlebar: true,
- collapsible: true
- },
- east: {
- split:true,
- initialSize: 202,
- minSize: 175,
- maxSize: 400,
- titlebar: true,
- collapsible: true
- },
- south: {
- split:true,
- initialSize: 100,
- minSize: 100,
- maxSize: 200,
- titlebar: true,
- collapsible: true
- },
- center: {
- titlebar: true,
- autoScroll:true,
- resizeTabs: true,
- minTabWidth: 50,
- preferredTabWidth: 150
- }
-});
-
-// shorthand
-var CP = Roo.ContentPanel;
-
-layout.beginUpdate();
-layout.add("north", new CP("north", "North"));
-layout.add("south", new CP("south", {title: "South", closable: true}));
-layout.add("west", new CP("west", {title: "West"}));
-layout.add("east", new CP("autoTabs", {title: "Auto Tabs", closable: true}));
-layout.add("center", new CP("center1", {title: "Close Me", closable: true}));
-layout.add("center", new CP("center2", {title: "Center Panel", closable: false}));
-layout.getRegion("center").showPanel("center1");
-layout.endUpdate();
-</code></pre>
-
-<b>The container the layout is rendered into can be either the body element or any other element.
-If it is not the body element, the container needs to either be an absolute positioned element,
-or you will need to add "position:relative" to the css of the container. You will also need to specify
-the container size if it is not the body element.</b>
-
-* @constructor
-* Create a new BorderLayout
-* @param {String/HTMLElement/Element} container The container this layout is bound to
-* @param {Object} config Configuration options
- */
-Roo.BorderLayout = function(container, config){
- config = config || {};
- Roo.BorderLayout.superclass.constructor.call(this, container, config);
- this.factory = config.factory || Roo.BorderLayout.RegionFactory;
- for(var i = 0, len = this.factory.validRegions.length; i < len; i++) {
- var target = this.factory.validRegions[i];
- if(config[target]){
- this.addRegion(target, config[target]);
- }
- }
-};
-
-Roo.extend(Roo.BorderLayout, Roo.LayoutManager, {
-
- /**
- * @cfg {Roo.LayoutRegion} east
- */
- /**
- * @cfg {Roo.LayoutRegion} west
- */
- /**
- * @cfg {Roo.LayoutRegion} north
- */
- /**
- * @cfg {Roo.LayoutRegion} south
- */
- /**
- * @cfg {Roo.LayoutRegion} center
- */
- /**
- * Creates and adds a new region if it doesn't already exist.
- * @param {String} target The target region key (north, south, east, west or center).
- * @param {Object} config The regions config object
- * @return {BorderLayoutRegion} The new region
- */
- addRegion : function(target, config){
- if(!this.regions[target]){
- var r = this.factory.create(target, this, config);
- this.bindRegion(target, r);
- }
- return this.regions[target];
- },
-
- // private (kinda)
- bindRegion : function(name, r){
- this.regions[name] = r;
- r.on("visibilitychange", this.layout, this);
- r.on("paneladded", this.layout, this);
- r.on("panelremoved", this.layout, this);
- r.on("invalidated", this.layout, this);
- r.on("resized", this.onRegionResized, this);
- r.on("collapsed", this.onRegionCollapsed, this);
- r.on("expanded", this.onRegionExpanded, this);
- },
-
- /**
- * Performs a layout update.
- */
- layout : function(){
- if(this.updating) {
- return;
- }
- var size = this.getViewSize();
- var w = size.width;
- var h = size.height;
- var centerW = w;
- var centerH = h;
- var centerY = 0;
- var centerX = 0;
- //var x = 0, y = 0;
-
- var rs = this.regions;
- var north = rs["north"];
- var south = rs["south"];
- var west = rs["west"];
- var east = rs["east"];
- var center = rs["center"];
- //if(this.hideOnLayout){ // not supported anymore
- //c.el.setStyle("display", "none");
- //}
- if(north && north.isVisible()){
- var b = north.getBox();
- var m = north.getMargins();
- b.width = w - (m.left+m.right);
- b.x = m.left;
- b.y = m.top;
- centerY = b.height + b.y + m.bottom;
- centerH -= centerY;
- north.updateBox(this.safeBox(b));
- }
- if(south && south.isVisible()){
- var b = south.getBox();
- var m = south.getMargins();
- b.width = w - (m.left+m.right);
- b.x = m.left;
- var totalHeight = (b.height + m.top + m.bottom);
- b.y = h - totalHeight + m.top;
- centerH -= totalHeight;
- south.updateBox(this.safeBox(b));
- }
- if(west && west.isVisible()){
- var b = west.getBox();
- var m = west.getMargins();
- b.height = centerH - (m.top+m.bottom);
- b.x = m.left;
- b.y = centerY + m.top;
- var totalWidth = (b.width + m.left + m.right);
- centerX += totalWidth;
- centerW -= totalWidth;
- west.updateBox(this.safeBox(b));
- }
- if(east && east.isVisible()){
- var b = east.getBox();
- var m = east.getMargins();
- b.height = centerH - (m.top+m.bottom);
- var totalWidth = (b.width + m.left + m.right);
- b.x = w - totalWidth + m.left;
- b.y = centerY + m.top;
- centerW -= totalWidth;
- east.updateBox(this.safeBox(b));
- }
- if(center){
- var m = center.getMargins();
- var centerBox = {
- x: centerX + m.left,
- y: centerY + m.top,
- width: centerW - (m.left+m.right),
- height: centerH - (m.top+m.bottom)
- };
- //if(this.hideOnLayout){
- //center.el.setStyle("display", "block");
- //}
- center.updateBox(this.safeBox(centerBox));
- }
- this.el.repaint();
- this.fireEvent("layout", this);
- },
-
- // private
- safeBox : function(box){
- box.width = Math.max(0, box.width);
- box.height = Math.max(0, box.height);
- return box;
- },
-
- /**
- * Adds a ContentPanel (or subclass) to this layout.
- * @param {String} target The target region key (north, south, east, west or center).
- * @param {Roo.ContentPanel} panel The panel to add
- * @return {Roo.ContentPanel} The added panel
- */
- add : function(target, panel){
-
- target = target.toLowerCase();
- return this.regions[target].add(panel);
- },
-
- /**
- * Remove a ContentPanel (or subclass) to this layout.
- * @param {String} target The target region key (north, south, east, west or center).
- * @param {Number/String/Roo.ContentPanel} panel The index, id or panel to remove
- * @return {Roo.ContentPanel} The removed panel
- */
- remove : function(target, panel){
- target = target.toLowerCase();
- return this.regions[target].remove(panel);
- },
-
- /**
- * Searches all regions for a panel with the specified id
- * @param {String} panelId
- * @return {Roo.ContentPanel} The panel or null if it wasn't found
- */
- findPanel : function(panelId){
- var rs = this.regions;
- for(var target in rs){
- if(typeof rs[target] != "function"){
- var p = rs[target].getPanel(panelId);
- if(p){
- return p;
- }
- }
- }
- return null;
- },
-
- /**
- * Searches all regions for a panel with the specified id and activates (shows) it.
- * @param {String/ContentPanel} panelId The panels id or the panel itself
- * @return {Roo.ContentPanel} The shown panel or null
- */
- showPanel : function(panelId) {
- var rs = this.regions;
- for(var target in rs){
- var r = rs[target];
- if(typeof r != "function"){
- if(r.hasPanel(panelId)){
- return r.showPanel(panelId);
- }
- }
- }
- return null;
- },
-
- /**
- * Restores this layout's state using Roo.state.Manager or the state provided by the passed provider.
- * @param {Roo.state.Provider} provider (optional) An alternate state provider
- */
- restoreState : function(provider){
- if(!provider){
- provider = Roo.state.Manager;
- }
- var sm = new Roo.LayoutStateManager();
- sm.init(this, provider);
- },
-
- /**
- * Adds a batch of multiple ContentPanels dynamically by passing a special regions config object. This config
- * object should contain properties for each region to add ContentPanels to, and each property's value should be
- * a valid ContentPanel config object. Example:
- * <pre><code>
-// Create the main layout
-var layout = new Roo.BorderLayout('main-ct', {
- west: {
- split:true,
- minSize: 175,
- titlebar: true
- },
- center: {
- title:'Components'
- }
-}, 'main-ct');
-
-// Create and add multiple ContentPanels at once via configs
-layout.batchAdd({
- west: {
- id: 'source-files',
- autoCreate:true,
- title:'Ext Source Files',
- autoScroll:true,
- fitToFrame:true
- },
- center : {
- el: cview,
- autoScroll:true,
- fitToFrame:true,
- toolbar: tb,
- resizeEl:'cbody'
- }
-});
-</code></pre>
- * @param {Object} regions An object containing ContentPanel configs by region name
- */
- batchAdd : function(regions){
- this.beginUpdate();
- for(var rname in regions){
- var lr = this.regions[rname];
- if(lr){
- this.addTypedPanels(lr, regions[rname]);
- }
- }
- this.endUpdate();
- },
-
- // private
- addTypedPanels : function(lr, ps){
- if(typeof ps == 'string'){
- lr.add(new Roo.ContentPanel(ps));
- }
- else if(ps instanceof Array){
- for(var i =0, len = ps.length; i < len; i++){
- this.addTypedPanels(lr, ps[i]);
- }
- }
- else if(!ps.events){ // raw config?
- var el = ps.el;
- delete ps.el; // prevent conflict
- lr.add(new Roo.ContentPanel(el || Roo.id(), ps));
- }
- else { // panel object assumed!
- lr.add(ps);
- }
- },
- /**
- * Adds a xtype elements to the layout.
- * <pre><code>
-
-layout.addxtype({
- xtype : 'ContentPanel',
- region: 'west',
- items: [ .... ]
- }
-);
-
-layout.addxtype({
- xtype : 'NestedLayoutPanel',
- region: 'west',
- layout: {
- center: { },
- west: { }
- },
- items : [ ... list of content panels or nested layout panels.. ]
- }
-);
-</code></pre>
- * @param {Object} cfg Xtype definition of item to add.
- */
- addxtype : function(cfg)
- {
- // basically accepts a pannel...
- // can accept a layout region..!?!?
- //Roo.log('Roo.BorderLayout add ' + cfg.xtype)
-
- if (!cfg.xtype.match(/Panel$/)) {
- return false;
- }
- var ret = false;
-
- if (typeof(cfg.region) == 'undefined') {
- Roo.log("Failed to add Panel, region was not set");
- Roo.log(cfg);
- return false;
- }
- var region = cfg.region;
- delete cfg.region;
-
-
- var xitems = [];
- if (cfg.items) {
- xitems = cfg.items;
- delete cfg.items;
- }
- var nb = false;
-
- switch(cfg.xtype)
- {
- case 'ContentPanel': // ContentPanel (el, cfg)
- case 'ScrollPanel': // ContentPanel (el, cfg)
- case 'ViewPanel':
- if(cfg.autoCreate) {
- ret = new Roo[cfg.xtype](cfg); // new panel!!!!!
- } else {
- var el = this.el.createChild();
- ret = new Roo[cfg.xtype](el, cfg); // new panel!!!!!
- }
-
- this.add(region, ret);
- break;
-
-
- case 'TreePanel': // our new panel!
- cfg.el = this.el.createChild();
- ret = new Roo[cfg.xtype](cfg); // new panel!!!!!
- this.add(region, ret);
- break;
-
- case 'NestedLayoutPanel':
- // create a new Layout (which is a Border Layout...
- var el = this.el.createChild();
- var clayout = cfg.layout;
- delete cfg.layout;
- clayout.items = clayout.items || [];
- // replace this exitems with the clayout ones..
- xitems = clayout.items;
-
-
- if (region == 'center' && this.active && this.getRegion('center').panels.length < 1) {
- cfg.background = false;
- }
- var layout = new Roo.BorderLayout(el, clayout);
-
- ret = new Roo[cfg.xtype](layout, cfg); // new panel!!!!!
- //console.log('adding nested layout panel ' + cfg.toSource());
- this.add(region, ret);
- nb = {}; /// find first...
- break;
-
- case 'GridPanel':
-
- // needs grid and region
-
- //var el = this.getRegion(region).el.createChild();
- var el = this.el.createChild();
- // create the grid first...
-
- var grid = new Roo.grid[cfg.grid.xtype](el, cfg.grid);
- delete cfg.grid;
- if (region == 'center' && this.active ) {
- cfg.background = false;
- }
- ret = new Roo[cfg.xtype](grid, cfg); // new panel!!!!!
-
- this.add(region, ret);
- if (cfg.background) {
- ret.on('activate', function(gp) {
- if (!gp.grid.rendered) {
- gp.grid.render();
- }
- });
- } else {
- grid.render();
- }
- break;
-
-
-
-
-
-
- default:
- if (typeof(Roo[cfg.xtype]) != 'undefined') {
-
- ret = new Roo[cfg.xtype](cfg); // new panel!!!!!
- this.add(region, ret);
- } else {
-
- alert("Can not add '" + cfg.xtype + "' to BorderLayout");
- return null;
- }
-
- // GridPanel (grid, cfg)
-
- }
- this.beginUpdate();
- // add children..
- var region = '';
- var abn = {};
- Roo.each(xitems, function(i) {
- region = nb && i.region ? i.region : false;
-
- var add = ret.addxtype(i);
-
- if (region) {
- nb[region] = nb[region] == undefined ? 0 : nb[region]+1;
- if (!i.background) {
- abn[region] = nb[region] ;
- }
- }
-
- });
- this.endUpdate();
-
- // make the last non-background panel active..
- //if (nb) { Roo.log(abn); }
- if (nb) {
-
- for(var r in abn) {
- region = this.getRegion(r);
- if (region) {
- // tried using nb[r], but it does not work..
-
- region.showPanel(abn[r]);
-
- }
- }
- }
- return ret;
-
- }
-});
-
-/**
- * Shortcut for creating a new BorderLayout object and adding one or more ContentPanels to it in a single step, handling
- * the beginUpdate and endUpdate calls internally. The key to this method is the <b>panels</b> property that can be
- * provided with each region config, which allows you to add ContentPanel configs in addition to the region configs
- * during creation. The following code is equivalent to the constructor-based example at the beginning of this class:
- * <pre><code>
-// shorthand
-var CP = Roo.ContentPanel;
-
-var layout = Roo.BorderLayout.create({
- north: {
- initialSize: 25,
- titlebar: false,
- panels: [new CP("north", "North")]
- },
- west: {
- split:true,
- initialSize: 200,
- minSize: 175,
- maxSize: 400,
- titlebar: true,
- collapsible: true,
- panels: [new CP("west", {title: "West"})]
- },
- east: {
- split:true,
- initialSize: 202,
- minSize: 175,
- maxSize: 400,
- titlebar: true,
- collapsible: true,
- panels: [new CP("autoTabs", {title: "Auto Tabs", closable: true})]
- },
- south: {
- split:true,
- initialSize: 100,
- minSize: 100,
- maxSize: 200,
- titlebar: true,
- collapsible: true,
- panels: [new CP("south", {title: "South", closable: true})]
- },
- center: {
- titlebar: true,
- autoScroll:true,
- resizeTabs: true,
- minTabWidth: 50,
- preferredTabWidth: 150,
- panels: [
- new CP("center1", {title: "Close Me", closable: true}),
- new CP("center2", {title: "Center Panel", closable: false})
- ]
- }
-}, document.body);
-
-layout.getRegion("center").showPanel("center1");
-</code></pre>
- * @param config
- * @param targetEl
- */
-Roo.BorderLayout.create = function(config, targetEl){
- var layout = new Roo.BorderLayout(targetEl || document.body, config);
- layout.beginUpdate();
- var regions = Roo.BorderLayout.RegionFactory.validRegions;
- for(var j = 0, jlen = regions.length; j < jlen; j++){
- var lr = regions[j];
- if(layout.regions[lr] && config[lr].panels){
- var r = layout.regions[lr];
- var ps = config[lr].panels;
- layout.addTypedPanels(r, ps);
- }
- }
- layout.endUpdate();
- return layout;
-};
-
-// private
-Roo.BorderLayout.RegionFactory = {
- // private
- validRegions : ["north","south","east","west","center"],
-
- // private
- create : function(target, mgr, config){
- target = target.toLowerCase();
- if(config.lightweight || config.basic){
- return new Roo.BasicLayoutRegion(mgr, config, target);
- }
- switch(target){
- case "north":
- return new Roo.NorthLayoutRegion(mgr, config);
- case "south":
- return new Roo.SouthLayoutRegion(mgr, config);
- case "east":
- return new Roo.EastLayoutRegion(mgr, config);
- case "west":
- return new Roo.WestLayoutRegion(mgr, config);
- case "center":
- return new Roo.CenterLayoutRegion(mgr, config);
- }
- throw 'Layout region "'+target+'" not supported.';
- }
-};
\ No newline at end of file
+
\ No newline at end of file