Initial commit
This commit is contained in:
289
crystalreportviewers13/js/crviewer/LeftPanel.js
Normal file
289
crystalreportviewers13/js/crviewer/LeftPanel.js
Normal file
@@ -0,0 +1,289 @@
|
||||
/**
|
||||
* 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
|
||||
};
|
||||
Reference in New Issue
Block a user