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.

278 lines
8.0 KiB

/* Copyright (c) Business Objects 2006. All rights reserved. */
/*
================================================================================
ParameterPanel
================================================================================
*/
/**
* Constructor
*/
bobj.crv.params.newParameterPanel = function(kwArgs) {
kwArgs = MochiKit.Base.update({
id: bobj.uniqueId() + '_IPPanel'
}, kwArgs);
var o = newWidget(kwArgs.id);
o.widgetType = 'ParameterPanel';
// Update instance with constructor arguments
bobj.fillIn(o, kwArgs);
// Update instance with member functions
MochiKit.Base.update(o, bobj.crv.params.ParameterPanel);
o._tabPanel = bobj.crv.newStackedPanel({
id: o.id + '_ParamtersStack'
});
//Layer that appears on top of panel when it is disabled; necessary for preventing user to select parameters/widgets
o._overlayLayer = new bobj.crv.params.ParameterPanel.OverlayLayer(o.id);
o._toolbar = bobj.crv.params.newParameterPanelToolbar({
id: o.id + '_IPToolbar'
});
return o;
};
bobj.crv.params.ParameterPanel = {
setToolbarCallBacks : function(applyClickCB, resetClickCB) {
if(this._toolbar) {
this._toolbar.applyClickCB = applyClickCB;
this._toolbar.resetClickCB = resetClickCB;
}
},
/**
* Disables panel by showing modal layer on top of panel, reducing opacity of panel, and disabling tabbing between widgets
*/
setDisabled : function(dis) {
this._overlayLayer.setVisible (dis);
this.setTabDisabled (dis);
},
/**
* Disables tabbing for toolbar and all parameters within panel
*/
setTabDisabled : function(dis) {
this._toolbar.setTabDisabled (dis);
this._tabPanel.setTabDisabled (dis);
},
init : function() {
Widget_init.call (this);
this._toolbar.init ();
if (this._tabPanel) {
this._tabPanel.init ();
}
MochiKit.Signal.signal (this, "resetParamPanel");
},
update : function (update) {
if (update && update.cons == "bobj.crv.params.newParameterPanel") {
if(update.args && update.args.isResetParamPanel)
MochiKit.Signal.signal (this, "resetParamPanel");
}
},
getHTML : function() {
var DIV = bobj.html.DIV;
var layerStyle = {
overflow : 'hidden',
width : this.width ? bobj.unitValue(this.width) : 'auto',
height : this.height ? bobj.unitValue(this.height) : 'auto'
}
var innerHTML = this._toolbar.getHTML ();
if (this._tabPanel) {
innerHTML += this._tabPanel.getHTML ();
}
return DIV ( {
id : this.id,
style : layerStyle
}, innerHTML);
},
getBestFitHeight : function () {
var height = 0;
if(this._tabPanel) {
/**
* Since container of parampanel could be invisible, getHiddenElementDimensions has to be called
* instead of element.getHeight()
*/
height += bobj.getHiddenElementDimensions(this._tabPanel.layer).h;
}
if(this._toolbar)
height += this._toolbar.getHeight ();
return height;
},
/**
* Resize the panel
*
* @param w [int - optional] Width in pixels
* @param h [int - optional] Height in pixels
*/
resize : function(w, h) {
Widget_resize.call (this, w, h);
if (this._toolbar) {
w = this.layer.clientWidth;
this._toolbar.resize (w);
if (this._tabPanel) {
h = this.layer.clientHeight - this._toolbar.getHeight ();
this._tabPanel.resize (w, h);
}
}
},
/**
* Add a ParameterUI instance to the panel
*
* @param paramUI [ParameterUI]
* @param label [String] Parameter title
* @param isDataFetching [bool] Shows the data fetching icon when true
*/
addParameter : function(kwArgs) {
kwArgs = MochiKit.Base.update ( {
paramUI : null,
label : null,
isDataFetching : false,
openAdvCB : null,
clearValuesCB : null,
id : this._tabPanel.id + '_P' + (this._tabPanel.getNumTabs () + 1)
}, kwArgs);
if (kwArgs.paramUI) {
var paramTab = bobj.crv.newStackedTab (kwArgs);
paramTab.setContent (kwArgs.paramUI);
this._tabPanel.addTab (paramTab);
}
},
/**
* Remove a ParameterUI instance from the panel
*
* @param index [int] Index of the widget
*/
removeParameter : function(index) {
this._tabPanel.removeTab(index);
},
getWidth : function() {
if (this.layer) {
return this.layer.offsetWidth;
}
return this.width;
},
setResetButtonEnabled : function(isEnabled) {
this._toolbar.resetButton.setDisabled (!isEnabled);
var tooltip = isEnabled ? L_bobj_crv_ResetTip : L_bobj_crv_ResetDisabledTip;
this._toolbar.resetButton.changeTooltip (tooltip, true);
},
setApplyButtonEnabled : function(isEnabled) {
this._toolbar.applyButton.setDisabled (!isEnabled);
var tooltip = isEnabled ? L_bobj_crv_ParamsApplyTip : L_bobj_crv_ParamsApplyDisabledTip;
this._toolbar.applyButton.changeTooltip (tooltip, true);
},
isApplyButtonEnabled : function () {
return this._toolbar != null && this._toolbar.applyButton != null && !this._toolbar.applyButton.isDisabled();
},
getIndex : function(paramUI) {
var numTabs = this._tabPanel.getNumTabs ();
for ( var idx = 0; idx < numTabs; ++idx) {
var tab = this._tabPanel.getTab (idx);
if (tab.getContent () === paramUI) {
return idx;
}
}
return -1;
},
getParameterTabByWidget : function(paramUI) {
var index = this.getIndex (paramUI);
if (index >= 0)
return this._tabPanel.getTab (index);
return null;
},
getParameter : function(index) {
var tab = this._tabPanel.getTab (index);
if (tab) {
return tab.getContent ();
}
return null;
},
/**
* @return ParameterTab, tab specified by index
*/
getParameterTab : function(index) {
return this._tabPanel.getTab (index);
},
/**
* return Number of tabs/parameters in panel
*/
getParameterCount : function() {
return this._tabPanel.getNumTabs ();
}
};
/**
* A layer that appears on top of panel when it is disabled. Prevents user from selecting widgets
* inside panel
*/
bobj.crv.params.ParameterPanel.OverlayLayer = function(paramPanelID) {
this.paramPanelId = paramPanelID;
this.layer = null;
this.id = bobj.uniqueId();
this.widx = _widgets.length
_widgets[this.widx] = this;
return this;
};
bobj.crv.params.ParameterPanel.OverlayLayer.prototype = {
setVisible: function(visible) {
if(!this.layer) {
this.init();
}
if(this.css) {
this.css.visibility = visible ? "visible" : "hidden";
}
},
isVisible: function() {
if(!this.layer) {
this.init();
}
return this.css.visibility == "visible";
},
getHTML: function() {
return '<div id = ' + this.id + ' onselectstart="return false" ondragstart="return false" onmousedown="'+_codeWinName+'.eventCancelBubble(event)" border="0" hspace="0" vspace="0" src="'+_skin+'../transp.gif" class="paramPanelOverLay">'+(_ie?img(_skin+'../transp.gif','100%','100%',null,'ISMAP'):'')+'</div>'
},
init: function() {
var paramPanelLayer = getLayer(this.paramPanelId);
if(paramPanelLayer) {
append2(paramPanelLayer, this.getHTML()); //adds overlay layer to parameter panel layer
}
Widget_init.call(this);
}
}