/* 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); } }, focusFirstChild : function () { return this._toolbar.focusFirstChild(); }, /** * 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; }, setSelected : function(isSelected) { }, setResetButtonEnabled : function(isEnabled) { this._toolbar.resetButton.setDisabled (!isEnabled); }, setApplyButtonEnabled : function(isEnabled) { this._toolbar.applyButton.setDisabled (!isEnabled); }, 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 '
'+(_ie?img(_skin+'../transp.gif','100%','100%',null,'ISMAP'):'')+'
' }, init: function() { var paramPanelLayer = getLayer(this.paramPanelId); if(paramPanelLayer) { append2(paramPanelLayer, this.getHTML()); //adds overlay layer to parameter panel layer } Widget_init.call(this); } }