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.

290 lines
9.3 KiB

/**
* LeftPanel is a container class managing PanelNavigator and ToolPanel classes
*/
bobj.crv.newLeftPanel = function(kwArgs) {
kwArgs = MochiKit.Base.update ( {
id : bobj.uniqueId () + "_leftPanel",
hasToggleGroupTreeButton : true,
hasToggleParameterPanelButton : true,
paramIconImg : null,
treeIconImg : null
}, kwArgs);
return new bobj.crv.LeftPanel (kwArgs.id, kwArgs.hasToggleGroupTreeButton, kwArgs.hasToggleParameterPanelButton, kwArgs.paramIconImg, kwArgs.treeIconImg);
};
bobj.crv.LeftPanel = function(id, hasToggleGroupTreeButton, hasToggleParameterPanelButton, paramIconImg, treeIconImg) {
this._panelNavigator = null;
this._panelHeader = null;
this._toolPanel = null;
this.id = id;
this.widgetType = 'LeftPanel';
this.hasToggleParameterPanelButton = hasToggleParameterPanelButton;
this.hasToggleGroupTreeButton = hasToggleGroupTreeButton;
this.paramIconImg = paramIconImg;
this.treeIconImg = treeIconImg;
this._lastViewedPanel = null;
};
bobj.crv.LeftPanel.prototype = {
getHTML : function() {
var toolPanelHTML = this._toolPanel ? this._toolPanel.getHTML () : '';
var panelHeaderHTML = this._panelHeader ? this._panelHeader.getHTML () : '';
var navigatorHTML = this._panelNavigator ? this._panelNavigator.getHTML () : '';
return bobj.html.DIV ( {
'class' : 'leftPanel',
id : this.id
}, navigatorHTML, panelHeaderHTML, toolPanelHTML);
},
/**
* @return width that would best fit both navigator and toolpanel
*/
getBestFitWidth : function() {
var w = 0;
if (this._panelNavigator)
w += this._panelNavigator.getWidth ();
if (this._toolPanel && this._toolPanel.isDisplayed())
w += this._toolPanel.getWidth();
else
w += 5; //The padding between navigator and reportAlbum when no toolpanel exist
return w;
},
getBestFitHeight : function () {
var toolPanelHeight = 0;
var panelNavigatorHeight = 0;
if(this._panelHeader)
toolPanelHeight += this._panelHeader.getHeight()
if(this._toolPanel)
toolPanelHeight += this._toolPanel.getBestFitHeight();
if(this._panelNavigator)
panelNavigatorHeight = this._panelNavigator.getBestFitHeight();
return Math.max (toolPanelHeight, panelNavigatorHeight);
},
/**
* AJAX update flow
* @param update
* @return
*/
update : function(update) {
if (!update || update.cons != "bobj.crv.newLeftPanel") {
return;
}
for ( var childNum in update.children) {
var child = update.children[childNum];
if (child && child.cons == "bobj.crv.newToolPanel") {
if (this._toolPanel)
this._toolPanel.update (child);
break;
}
}
},
/**
* Initializes widgets and connects signals
*/
init : function() {
this.layer = getLayer (this.id);
this.css = this.layer.style;
if (this._toolPanel)
this._toolPanel.init ();
if (this._panelHeader) {
this._panelHeader.init ();
if(!this.isToolPanelDisplayed())
this._panelHeader.setDisplay(false);
}
if (this._panelNavigator)
this._panelNavigator.init ();
},
/**
* Connects signals
* @return
*/
_initSignals : function() {
var partial = MochiKit.Base.partial;
var signal = MochiKit.Signal.signal;
var connect = MochiKit.Signal.connect;
if (this._toolPanel) {
MochiKit.Iter.forEach ( [ 'grpDrilldown', 'grpNodeRetrieveChildren', 'grpNodeCollapse', 'grpNodeExpand', 'resetParamPanel',
'resizeToolPanel' ], function(sigName) {
connect (this._toolPanel, sigName, partial (signal, this, sigName));
}, this);
}
if (this._panelNavigator)
connect (this._panelNavigator, "switchPanel", this, '_switchPanel');
if(this._panelHeader)
connect (this._panelHeader, "switchPanel", this, '_switchPanel');
},
/**
* @return true if toolpanel is displayed
*/
isToolPanelDisplayed : function() {
return this._toolPanel && this._toolPanel.isDisplayed ();
},
/**
* Do not Remove, Used by WebElements Public API
*/
displayLastViewedPanel : function () {
if(this._toolPanel) {
switch(this._lastViewedPanel)
{
case bobj.crv.ToolPanelType.GroupTree:
this._switchPanel (bobj.crv.ToolPanelType.GroupTree);
break;
case bobj.crv.ToolPanelType.ParameterPanel:
this._switchPanel (bobj.crv.ToolPanelType.ParameterPanel);
break;
default :
this._switchPanel (bobj.crv.ToolPanelType.GroupTree);
}
}
},
/**
* Do not Remove, Used by WebElements Public API
*/
hideToolPanel : function () {
this._switchPanel (bobj.crv.ToolPanelType.None);
},
/**
*
* @param panelType [bobj.crv.ToolPanelType]
* @return
*/
_switchPanel : function(panelType) {
if (this._toolPanel) {
this._toolPanel.setView (panelType);
if(panelType == bobj.crv.ToolPanelType.None) {
this._toolPanel.setDisplay(false);
this._panelHeader.setDisplay(false);
}
else {
this._toolPanel.setDisplay(true);
this._panelHeader.setDisplay(true);
this._lastViewedPanel = panelType;
}
}
if (this._panelHeader)
var title = bobj.crv.ToolPanelTypeDetails[panelType].title;
this._panelHeader.setTitle (title);
if (this._panelNavigator)
this._panelNavigator.selectChild (panelType);
MochiKit.Signal.signal (this, 'switchPanel', panelType);
},
/**
* Do not Remove, Used by WebElements Public API
*/
getPanelNavigator : function () {
return this._panelNavigator;
},
getToolPanel : function() {
return this._toolPanel;
},
addChild : function(child) {
if (child.widgetType == "ToolPanel") {
this._toolPanel = child;
this.updateChildren ();
this._initSignals ();
}
},
/**
* Update Navigator and Header with toolPanel's children
* @return
*/
updateChildren : function() {
if (this._toolPanel) {
this._panelNavigator = new bobj.crv.PanelNavigator ();
this._panelHeader = new bobj.crv.PanelHeader ();
var newChild = null;
if (this._toolPanel.hasParameterPanel () && this.hasToggleParameterPanelButton) {
newChild = {
name : bobj.crv.ToolPanelType.ParameterPanel,
img : this.paramIconImg ? this.paramIconImg : bobj.crv.ToolPanelTypeDetails.ParameterPanel.img,
title : bobj.crv.ToolPanelTypeDetails.ParameterPanel.title
};
this._panelNavigator.addChild (newChild);
}
if (this._toolPanel.hasGroupTree () && this.hasToggleGroupTreeButton) {
newChild = {
name : bobj.crv.ToolPanelType.GroupTree,
img : this.treeIconImg ? this.treeIconImg : bobj.crv.ToolPanelTypeDetails.GroupTree.img,
title : bobj.crv.ToolPanelTypeDetails.GroupTree.title
};
this._panelNavigator.addChild (newChild);
}
this._lastViewedPanel = this._toolPanel.initialViewType;
this._panelNavigator.selectChild (this._toolPanel.initialViewType);
this._panelHeader.setTitle (bobj.crv.ToolPanelTypeDetails[this._toolPanel.initialViewType].title);
if (!this._panelNavigator.hasChildren())
{
this._panelHeader.hideCloseButton();
this._toolPanel.addLeftBorder();
}
}
},
resize : function(w, h) {
bobj.setOuterSize (this.layer, w, h);
this._doLayout ();
},
/**
* Layouts children where PanelHeader appears on top of toolPanel and panelNavigator to left of both header and toolpanel
* @return
*/
_doLayout : function() {
if(!this._toolPanel || !this._panelNavigator || !this._panelHeader)
return;
var w = this.getWidth ();
var h = this.getHeight ();
var navigatorW = this._panelNavigator.getWidth ();
var newToolPanelWidth = w - navigatorW;
var newToolPanelHeight = h - this._panelHeader.getHeight ();
if (this._toolPanel.isDisplayed()) {
this._toolPanel.resize (newToolPanelWidth, newToolPanelHeight);
this._toolPanel.move (navigatorW, this._panelHeader.getHeight ());
}
this._panelHeader.resize (newToolPanelWidth, null);
this._panelHeader.move (navigatorW, 0);
this._panelNavigator.resize(navigatorW, h);
},
move : Widget_move,
getWidth : Widget_getWidth,
getHeight : Widget_getHeight
};