You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
161 lines
4.2 KiB
161 lines
4.2 KiB
/* Copyright (c) Business Objects 2006. All rights reserved. */
|
|
|
|
if (typeof(bobj.crv.StackedPanel) == 'undefined') {
|
|
bobj.crv.StackedPanel = {};
|
|
}
|
|
|
|
/**
|
|
* Constructor.
|
|
*
|
|
* @param id [String] DHTML id
|
|
* @param width [int] Width of the panel in pixels
|
|
* @param height [int] Height of the panel in pixels
|
|
*/
|
|
bobj.crv.newStackedPanel = function(kwArgs) {
|
|
var mb = MochiKit.Base;
|
|
var UPDATE = mb.update;
|
|
var BIND = mb.bind;
|
|
|
|
kwArgs = UPDATE({
|
|
id: bobj.uniqueId(),
|
|
width: null,
|
|
height: null
|
|
}, kwArgs);
|
|
|
|
var o = newWidget(kwArgs.id);
|
|
o.widgetType = 'StackedPanel';
|
|
bobj.fillIn(o, kwArgs);
|
|
|
|
o._tabs = [];
|
|
|
|
o._initWidget = o.init;
|
|
o._resizeWidget = o.resize;
|
|
UPDATE(o, bobj.crv.StackedPanel);
|
|
|
|
|
|
return o;
|
|
};
|
|
|
|
bobj.crv.StackedPanel = {
|
|
init : function() {
|
|
this._initWidget ();
|
|
|
|
var tabs = this._tabs;
|
|
/* Tabs that were added after getHTML must be written now */
|
|
var index = this._numTabsWritten;
|
|
while (index < tabs.length) {
|
|
append (this.layer, tabs[index].getHTML (), document);
|
|
index++;
|
|
}
|
|
|
|
for ( var i = 0, len = tabs.length; i < len; ++i) {
|
|
tabs[i].init ();
|
|
}
|
|
},
|
|
|
|
setTabDisabled : function(dis) {
|
|
for ( var i = 0, len = this._tabs.length; i < len; i++) {
|
|
this._tabs[i].setTabDisabled (dis);
|
|
}
|
|
},
|
|
|
|
getHTML : function() {
|
|
var DIV = bobj.html.DIV;
|
|
|
|
var layerStyle = {};
|
|
|
|
if (this.height) {
|
|
layerStyle.height = bobj.unitValue (this.height);
|
|
}
|
|
|
|
if (this.width) {
|
|
layerStyle.width = bobj.unitValue (this.width);
|
|
}
|
|
|
|
return DIV ( {
|
|
id : this.id,
|
|
style : layerStyle,
|
|
'class' : 'stackedPanel',
|
|
tabIndex : "-1"
|
|
}, this._getTabsHTML ());
|
|
},
|
|
|
|
_getTabsHTML : function() {
|
|
var tabsHTML = '';
|
|
var tabs = this._tabs;
|
|
var tabsLen = tabs.length;
|
|
for ( var i = 0; i < tabsLen; ++i) {
|
|
tabsHTML += tabs[i].getHTML ();
|
|
}
|
|
this._numTabsWritten = tabsLen;
|
|
return tabsHTML;
|
|
},
|
|
|
|
/**
|
|
* Add a tab to the panel. Must be called before getHTML is called.
|
|
*
|
|
* @param tab
|
|
* [StackedTab]
|
|
*/
|
|
addTab : function(tab) {
|
|
if (tab) {
|
|
this._tabs.push (tab);
|
|
if (this.layer) {
|
|
append (this.layer, tab.getHTML ());
|
|
tab.init ();
|
|
}
|
|
|
|
if (this.layer)
|
|
tab.resize(this.layer.clientWidth);
|
|
|
|
MochiKit.Signal.connect(tab, "StackedTabResized", this, '_onStackedTabResize');
|
|
}
|
|
},
|
|
|
|
getNumTabs : function() {
|
|
return this._tabs.length;
|
|
},
|
|
|
|
getTab : function(index) {
|
|
return this._tabs[index];
|
|
},
|
|
|
|
removeTab : function(index) {
|
|
if (index >= 0 && index < this._tabs.length) {
|
|
var tab = this._tabs[index];
|
|
this._tabs.splice (index, 1);
|
|
delete _widgets[this._tabs.widx];
|
|
if (tab.layer) {
|
|
tab.layer.parentNode.removeChild (tab.layer);
|
|
}
|
|
}
|
|
},
|
|
|
|
_onStackedTabResize: function () {
|
|
this.resize (this.getWidth());
|
|
},
|
|
|
|
resize : function(w, h) {
|
|
/* Exclude margins for safari as it miscalculates left/top margins */
|
|
var excludeMargins = !_saf;
|
|
bobj.setOuterSize(this.layer, w, h, excludeMargins);
|
|
var tabs = this._tabs;
|
|
var tabsLen = tabs.length;
|
|
if (tabsLen) {
|
|
/* Ensure that the vertical scrollbar never covers the content*/
|
|
var tabWidth = this.layer.clientWidth;
|
|
|
|
/* IE changes the value of clientWidth after resizing the first child... */
|
|
tabs[0].resize(tabWidth);
|
|
if (tabWidth != this.layer.clientWidth) {
|
|
tabWidth = this.layer.clientWidth;
|
|
tabs[0].resize(tabWidth);
|
|
}
|
|
|
|
for (var i = 1; i < tabsLen; ++i) {
|
|
tabs[i].resize(tabWidth);
|
|
}
|
|
}
|
|
}
|
|
};
|