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.
296 lines
8.9 KiB
296 lines
8.9 KiB
/* Copyright (c) Business Objects 2006. All rights reserved. */
|
|
|
|
bobj.crv.ToolPanelType = { //values must match server's expectations
|
|
None: 'None',
|
|
GroupTree : 'GroupTree',
|
|
ParameterPanel: 'ParameterPanel'
|
|
};
|
|
|
|
bobj.crv.ToolPanelTypeDetails = {
|
|
None : {
|
|
title : null,
|
|
img : null,
|
|
alt : null
|
|
},
|
|
GroupTree : {
|
|
title : L_bobj_crv_GroupTree,
|
|
img : { uri: bobj.crv.allInOne.uri, dx: 0, dy: bobj.crv.allInOne.groupTreeToggleDy },
|
|
alt : L_bobj_crv_GroupTree
|
|
},
|
|
ParameterPanel : {
|
|
title : L_bobj_crv_ParamPanel,
|
|
img : { uri: bobj.crv.allInOne.uri, dx: 0, dy: bobj.crv.allInOne.paramPanelToggleDy },
|
|
alt : L_bobj_crv_ParamPanel
|
|
}
|
|
};
|
|
|
|
/**
|
|
* ToolPanel constructor
|
|
*
|
|
* @param kwArgs.id [String] DOM node id
|
|
* @param kwArgs.width [String] Width
|
|
* @param kwArgs.height [String] Height
|
|
*/
|
|
bobj.crv.newToolPanel = function(kwArgs) {
|
|
kwArgs = MochiKit.Base.update({
|
|
id: bobj.uniqueId() + "_toolPanel",
|
|
width: '300px',
|
|
height: '100%',
|
|
initialViewType: bobj.crv.ToolPanelType.None
|
|
}, kwArgs);
|
|
|
|
|
|
var o = newWidget(kwArgs.id);
|
|
|
|
// Update instance with constructor arguments
|
|
bobj.fillIn(o, kwArgs);
|
|
|
|
o.widgetType = 'ToolPanel';
|
|
|
|
o._children = [];
|
|
o._selectedChild = null;
|
|
o._groupTree = null;
|
|
o._paramPanel = null;
|
|
|
|
// Update instance with member functions
|
|
o.initOld = o.init;
|
|
o.resizeOld = o.resize;
|
|
MochiKit.Base.update(o, bobj.crv.ToolPanel);
|
|
|
|
o.needLeftBorder = false;
|
|
|
|
return o;
|
|
};
|
|
|
|
bobj.crv.ToolPanel = {
|
|
hasGroupTree : function() {
|
|
return this._groupTree != null;
|
|
},
|
|
|
|
/**
|
|
* Adds a child widget as a view. If the child has an isSelected attribute
|
|
* that evaluates as true, it will be the selected (active) view.
|
|
*
|
|
* This function must be called before getHTML() is called.
|
|
*
|
|
* @param widget [Widget] Child view widget
|
|
*/
|
|
addChild : function(widget) {
|
|
if (!widget) {
|
|
return;
|
|
}
|
|
|
|
var connect = MochiKit.Signal.connect;
|
|
var partial = MochiKit.Base.partial;
|
|
var signal = MochiKit.Signal.signal;
|
|
var Type = bobj.crv.ToolPanelType;
|
|
|
|
if (widget.widgetType == 'GroupTree') {
|
|
this._groupTree = widget;
|
|
|
|
MochiKit.Iter.forEach ( [ 'grpDrilldown', 'grpNodeRetrieveChildren', 'grpNodeCollapse', 'grpNodeExpand' ], function(sigName) {
|
|
connect (this._groupTree, sigName, partial (signal, this, sigName));
|
|
}, this);
|
|
|
|
if (this.initialViewType == Type.GroupTree) {
|
|
this._selectedChild = widget;
|
|
}
|
|
} else if (widget.widgetType == 'ParameterPanel') {
|
|
this._paramPanel = widget;
|
|
connect (this._paramPanel, 'resetParamPanel', partial (signal, this, 'resetParamPanel'));
|
|
if (this.initialViewType == Type.ParameterPanel) {
|
|
this._selectedChild = widget;
|
|
}
|
|
}
|
|
|
|
this._children.push (widget);
|
|
},
|
|
|
|
hasParameterPanel : function () {
|
|
return this._paramPanel != null;
|
|
},
|
|
|
|
getParameterPanel : function() {
|
|
return this._paramPanel;
|
|
},
|
|
|
|
/**
|
|
* This method must be called after viewer has been initialized. Adds new child to toolpanel.
|
|
*/
|
|
delayedAddChild : function(widget) {
|
|
this.addChild (widget);
|
|
|
|
var display = widget === this._selectedChild ? '' : 'none';
|
|
append2 (this.layer, bobj.html.DIV ( {
|
|
style : {
|
|
display : display
|
|
}
|
|
}, widget.getHTML ()));
|
|
widget.init ();
|
|
},
|
|
|
|
/*
|
|
* The caller is responsible for calling doLayout after making a call to setView. calling doLayout is very expensive and want to avoid it if
|
|
* possible.
|
|
*/
|
|
setView : function(panelType) {
|
|
var prevSelectedChild = this._selectedChild;
|
|
this.updateSelectedChild (panelType);
|
|
var nextSelectedChild = this._selectedChild;
|
|
|
|
if(prevSelectedChild != nextSelectedChild) {
|
|
if (prevSelectedChild) {
|
|
var container = bobj.getContainer (prevSelectedChild);
|
|
if (container) {
|
|
container.style.display = 'none';
|
|
}
|
|
}
|
|
|
|
if(nextSelectedChild) {
|
|
var container = bobj.getContainer (nextSelectedChild);
|
|
if (container) {
|
|
bobj.displayElementWithAnimation(container);
|
|
}
|
|
}
|
|
}
|
|
},
|
|
|
|
updateSelectedChild : function (panelType) {
|
|
var Type = bobj.crv.ToolPanelType;
|
|
switch(panelType) {
|
|
case Type.GroupTree:
|
|
this._selectedChild = this._groupTree;
|
|
break;
|
|
case Type.ParameterPanel:
|
|
this._selectedChild = this._paramPanel;
|
|
break;
|
|
default:
|
|
this._selectedChild = null;
|
|
}
|
|
},
|
|
|
|
getHTML : function() {
|
|
var h = bobj.html;
|
|
|
|
var content = '';
|
|
var children = this._children;
|
|
for ( var i = 0, len = children.length; i < len; ++i) {
|
|
var child = children[i];
|
|
var display = child === this._selectedChild ? '' : 'none';
|
|
content += h.DIV ( {
|
|
style : {
|
|
display : display
|
|
}
|
|
}, child.getHTML ());
|
|
}
|
|
|
|
var isDisplayed = (bobj.crv.ToolPanelType.None !== this.initialViewType);
|
|
var toolPanelClass = 'toolPanel';
|
|
if (this.needLeftBorder)
|
|
toolPanelClass += ' leftBorder';
|
|
|
|
|
|
var layerAtt = {
|
|
id : this.id,
|
|
'class' : toolPanelClass,
|
|
style : {
|
|
position : 'absolute',
|
|
margin : '0',
|
|
width : this.width,
|
|
height : this.height,
|
|
overflow : 'hidden',
|
|
display : isDisplayed ? '' : 'none'
|
|
}
|
|
};
|
|
|
|
var html = h.DIV (layerAtt, content);
|
|
|
|
return html;
|
|
},
|
|
|
|
init : function() {
|
|
this.initOld ();
|
|
if (this._groupTree)
|
|
this._groupTree.init ();
|
|
|
|
if (this._paramPanel)
|
|
this._paramPanel.init ();
|
|
},
|
|
|
|
update : function(update) {
|
|
if (update && update.cons == "bobj.crv.newToolPanel") {
|
|
for ( var childVar in update.children) {
|
|
var child = update.children[childVar];
|
|
if (child) {
|
|
switch (child.cons) {
|
|
case "bobj.crv.newGroupTree":
|
|
/* if there is a group tree, update it */
|
|
if (this._groupTree) {
|
|
this._groupTree.update (child);
|
|
}
|
|
/* else create and add one */
|
|
else {
|
|
this.delayedAddChild (bobj.crv.createWidget (child));
|
|
}
|
|
break;
|
|
case "bobj.crv.params.newParameterPanel":
|
|
if (this._paramPanel) {
|
|
this._paramPanel.update (child);
|
|
}
|
|
else {
|
|
this.delayedAddChild (bobj.crv.createWidget (child));
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
this.initialViewType = update.args.initialViewType;
|
|
this.setView (this.initialViewType);
|
|
this.css.width = update.args.width;
|
|
}
|
|
},
|
|
|
|
getBestFitHeight : function () {
|
|
var height = 0;
|
|
if(this._selectedChild != null)
|
|
height = this._selectedChild.getBestFitHeight();
|
|
|
|
return height;
|
|
},
|
|
|
|
hasPercentWidth : function () {
|
|
return (this.width != null) && (this.width.length > 0) && (this.width.charAt(this.width.length - 1) == '%');
|
|
},
|
|
|
|
getPercentWidth : function () {
|
|
return parseInt(this.width) / 100;
|
|
},
|
|
|
|
_doLayout : function() {
|
|
var innerWidth = this.layer.clientWidth;
|
|
var contentHeight = this.layer.clientHeight;
|
|
|
|
if (this._selectedChild) {
|
|
this._selectedChild.setDisplay (true);
|
|
this._selectedChild.resize (innerWidth, contentHeight);
|
|
}
|
|
},
|
|
|
|
resize : function(w, h) {
|
|
bobj.setOuterSize (this.layer, w, h);
|
|
this._doLayout ();
|
|
|
|
var width = _ie && _isQuirksMode ? this.layer.offsetWidth : this.layer.clientWidth;
|
|
var height = _ie && _isQuirksMode ? this.layer.offsetWidth : this.layer.clientWidth;
|
|
MochiKit.Signal.signal (this, 'resizeToolPanel', width, height);
|
|
|
|
// do not have a percent width if we have resized the tool panel
|
|
this.width = width;
|
|
},
|
|
|
|
addLeftBorder : function() {
|
|
this.needLeftBorder = true;
|
|
}
|
|
};
|