Initial commit
This commit is contained in:
183
crystalreportviewers13/js/crviewer/SharedWidgetHolder.js
Normal file
183
crystalreportviewers13/js/crviewer/SharedWidgetHolder.js
Normal file
@@ -0,0 +1,183 @@
|
||||
/* Copyright (c) Business Objects 2006. All rights reserved. */
|
||||
|
||||
if (typeof(bobj.crv.SharedWidgetHolder) == 'undefined') {
|
||||
bobj.crv.SharedWidgetHolder = {};
|
||||
bobj.crv.SharedWidgetHolder._registry = {};
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor. SharedWidgetHolder is a placeholder for a widget.
|
||||
* SharedWidgetHolder instances belong to groups, in which one managed
|
||||
* widget will be shown in one placeholder at a time. When show(true) is called
|
||||
* for any member of the group, the managed widget will be displayed in that
|
||||
* member.
|
||||
*
|
||||
* @param id [String] DHTML id
|
||||
* @param group [String] Group the new instance will belong to
|
||||
* @param width [int | String] Width of the placeholder
|
||||
* @param height [int | String] Height of the placeholder
|
||||
* @param resizeWidget [bool] Resize to the placeholder's dimensions
|
||||
*/
|
||||
bobj.crv.newSharedWidgetHolder = function(kwArgs) {
|
||||
var mb = MochiKit.Base;
|
||||
var ms = MochiKit.Signal;
|
||||
|
||||
kwArgs = mb.update({
|
||||
id: bobj.uniqueId(),
|
||||
group: 'SharedWidgetHolder',
|
||||
width: null,
|
||||
height: null,
|
||||
resizeWidget: true
|
||||
}, kwArgs);
|
||||
|
||||
var o = newWidget(kwArgs.id);
|
||||
o.widgetType = 'SharedWidgetHolder';
|
||||
bobj.fillIn(o, kwArgs);
|
||||
|
||||
o._setVisible = o.show;
|
||||
o._resizeHolder = o.resize;
|
||||
o._initHolder = o.init;
|
||||
mb.update(o, bobj.crv.SharedWidgetHolder);
|
||||
|
||||
o._register();
|
||||
|
||||
return o;
|
||||
};
|
||||
|
||||
bobj.crv.SharedWidgetHolder.init = function() {
|
||||
this._initHolder();
|
||||
var regInfo = this._regInfo;
|
||||
if (regInfo.managedWidget && this === regInfo.visibleHolder) {
|
||||
regInfo.managedWidget.init();
|
||||
this.resize();
|
||||
}
|
||||
};
|
||||
|
||||
bobj.crv.SharedWidgetHolder.getHTML = function() {
|
||||
var ISNUMBER = bobj.isNumber;
|
||||
var ISSTRING = bobj.isString;
|
||||
|
||||
var vis = this.isHoldingWidget() ? 'visible' : 'hidden';
|
||||
var innerHTML = this.isHoldingWidget() ? this._regInfo.managedWidget.getHTML() : '';
|
||||
|
||||
var style = {visibility: vis};
|
||||
|
||||
var width = this.width;
|
||||
if (ISNUMBER(width)) {
|
||||
width = width + 'px';
|
||||
}
|
||||
if (ISSTRING(width)) {
|
||||
style.width = width;
|
||||
}
|
||||
|
||||
var height = this.height;
|
||||
if (ISNUMBER(height)) {
|
||||
height = height + 'px';
|
||||
}
|
||||
if (ISSTRING(height)) {
|
||||
style.height = height;
|
||||
}
|
||||
|
||||
return bobj.html.DIV({id: this.id, style: style}, innerHTML);
|
||||
};
|
||||
|
||||
/**
|
||||
* Private. Register this instance in a group.
|
||||
*/
|
||||
bobj.crv.SharedWidgetHolder._register = function() {
|
||||
var registry = bobj.crv.SharedWidgetHolder._registry;
|
||||
var holderInfo = registry[this.group];
|
||||
|
||||
if (!holderInfo) {
|
||||
holderInfo = {
|
||||
managedWidget: null,
|
||||
visibleHolder: this
|
||||
};
|
||||
registry[this.group] = holderInfo;
|
||||
}
|
||||
|
||||
this._regInfo = holderInfo;
|
||||
};
|
||||
|
||||
/**
|
||||
* @return [bool] True if and only if this instance is currently holding a
|
||||
* non-null managed widget. Only one member of a group can return
|
||||
* true at any given time.
|
||||
*/
|
||||
bobj.crv.SharedWidgetHolder.isHoldingWidget = function() {
|
||||
var regInfo = this._regInfo;
|
||||
return ((regInfo.visibleHolder === this) && regInfo.managedWidget);
|
||||
};
|
||||
|
||||
/**
|
||||
* @return [Widget] The widget that is managed by the holder group that this
|
||||
* instance belongs to.
|
||||
*/
|
||||
bobj.crv.SharedWidgetHolder.getManagedWidget = function() {
|
||||
return this._regInfo.managedWidget;
|
||||
};
|
||||
|
||||
/**
|
||||
* Set the widget that is managed by the group that this isntance belongs to.
|
||||
* The widget will be displayed in the currently visible member of the group.
|
||||
*
|
||||
* @param widget [Widget] The widget that should be managed.
|
||||
*/
|
||||
bobj.crv.SharedWidgetHolder.setManagedWidget = function(widget) {
|
||||
var regInfo = this._regInfo;
|
||||
var oldWidget = regInfo.managedWidget;
|
||||
regInfo.managedWidget = widget;
|
||||
|
||||
if (oldWidget && oldWidget.layer) {
|
||||
MochiKit.DOM.removeElement(oldWidget.layer);
|
||||
}
|
||||
|
||||
if (!regInfo.visibleHolder) {
|
||||
regInfo.visibleHolder = this;
|
||||
}
|
||||
|
||||
var holder = regInfo.visibleHolder;
|
||||
|
||||
if (holder.layer && widget && widget.layer) {
|
||||
holder.layer.appendChild(widget.layer);
|
||||
holder.resize();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Alias for setManagedWidget. Allows instantiation using bobj.crv.createWidget();
|
||||
*/
|
||||
bobj.crv.SharedWidgetHolder.addChild = bobj.crv.SharedWidgetHolder.setManagedWidget;
|
||||
|
||||
/**
|
||||
* Show or hide the managed widget in this holder instance.
|
||||
*
|
||||
* @param show [bool] If true, the managed widget will be displayed in this
|
||||
* instance. If false and this holder is currently showing
|
||||
* the managed widget, the widget will be hidden.
|
||||
*/
|
||||
bobj.crv.SharedWidgetHolder.show = function(show) {
|
||||
var regInfo = this._regInfo;
|
||||
if (show && (regInfo.visibleHolder !== this) && regInfo.managedWidget) {
|
||||
this.layer.appendChild(regInfo.managedWidget.layer);
|
||||
regInfo.visibleHolder._setVisible(false);
|
||||
regInfo.visibleHolder = this;
|
||||
this.resize();
|
||||
}
|
||||
this._setVisible(show);
|
||||
};
|
||||
|
||||
/**
|
||||
* Resize the holder instance. If resizeWidget property is true, the managed
|
||||
* widget will be resized to the dimensions of the placeholder.
|
||||
*
|
||||
* @param w [width, optional] Width in pixels
|
||||
* @param h [height, optional] Height in pixels
|
||||
*/
|
||||
bobj.crv.SharedWidgetHolder.resize = function(w, h) {
|
||||
this._resizeHolder(w, h);
|
||||
|
||||
if (this.resizeWidget && this.isHoldingWidget()) {
|
||||
this._regInfo.managedWidget.resize(this.getWidth(), this.getHeight());
|
||||
}
|
||||
};
|
||||
Reference in New Issue
Block a user