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.
171 lines
5.4 KiB
171 lines
5.4 KiB
/*
|
|
================================================================================
|
|
ParameterDialog
|
|
|
|
Advanced Dialog for editing parameters using the prompt engine
|
|
================================================================================
|
|
*/
|
|
|
|
bobj.crv.params.newParameterDialog = function(kwArgs) {
|
|
kwArgs = MochiKit.Base.update({
|
|
id: bobj.uniqueId(),
|
|
prompt: null,
|
|
showCB : null,
|
|
hideCB : null
|
|
}, kwArgs);
|
|
|
|
var o = newDialogBoxWidget(
|
|
kwArgs.id,
|
|
L_bobj_crv_ParamsDlgTitle,
|
|
kwArgs.width,
|
|
kwArgs.height /*,defaultCB,cancelCB,noCloseButton*/);
|
|
|
|
// Update instance with constructor arguments
|
|
bobj.fillIn(o, kwArgs);
|
|
|
|
// Update instance with member functions
|
|
o._showDialogBox = o.show;
|
|
o._initDialogBox = o.init;
|
|
o._resizeSignal = null;
|
|
MochiKit.Base.update(o, bobj.crv.params.ParameterDialog);
|
|
|
|
return o;
|
|
};
|
|
|
|
bobj.crv.params.ParameterDialog = {
|
|
init : function() {
|
|
this._initDialogBox ();
|
|
this._form = document.getElementById (this.id + '_form');
|
|
window.paramWindow = this;
|
|
},
|
|
|
|
_checkInitialization : function() {
|
|
if (!this.layer) {
|
|
targetApp (this.getHTML ());
|
|
this.init ();
|
|
}
|
|
},
|
|
|
|
show : function(show) {
|
|
if (show) {
|
|
this._checkInitialization ();
|
|
this.doLayout ();
|
|
this.setResize (MochiKit.Base.noop);
|
|
this._showDialogBox (true);
|
|
o._resizeSignal = MochiKit.Signal.connect(window, 'onresize', this, '_onWindowResize');
|
|
} else {
|
|
if (this.layer)
|
|
this._showDialogBox (false);
|
|
bobj.crv.SignalDisposer.dispose(o._resizeSignal, true);
|
|
}
|
|
|
|
if (show && this.showCB) {
|
|
this.showCB ();
|
|
} else if (!show && this.hideCB) {
|
|
this.hideCB ();
|
|
}
|
|
},
|
|
|
|
isVisible : function() {
|
|
return (this.initialized () && this.isDisplayed ());
|
|
},
|
|
|
|
/* if dialog's height is less than window's height, it would return dialog's height
|
|
if dialog's height is greater than window's height, it would return window's height - 100
|
|
if dialog's height is less than 100, it would return 100
|
|
*/
|
|
getPreferredHeight : function () {
|
|
return Math.min(Math.max (100, winHeight() - 100), this.getFormHeight());
|
|
},
|
|
|
|
getFormHeight : function () {
|
|
var form = this._form.cloneNode(true);
|
|
form.style.display = "none";
|
|
form.style.height ="";
|
|
document.body.appendChild(form);
|
|
var dimension = MochiKit.Style.getElementDimensions(form);
|
|
form.innerHTML = ""; // http://support.microsoft.com/kb/925014
|
|
document.body.removeChild(form);
|
|
|
|
return dimension.h;
|
|
},
|
|
|
|
_onWindowResize : function () {
|
|
window.paramWindow.doLayout();
|
|
window.paramWindow.center();
|
|
},
|
|
|
|
doLayout: function () {
|
|
if(this._form) {
|
|
this._form.style.height = this.getPreferredHeight() + "px";
|
|
}
|
|
},
|
|
|
|
updateHtmlAndDisplay : function(html) {
|
|
if (html) {
|
|
this._checkInitialization ();
|
|
|
|
if (this.isDisplayed ()) {
|
|
this.show (false);
|
|
}
|
|
|
|
var ext = bobj.html.extractHtml (html);
|
|
|
|
var styleText = "";
|
|
for ( var i = 0, len = ext.styles.length; i < len; i++) {
|
|
styleText += ext.styles[i].text + '\n';
|
|
}
|
|
|
|
var styleLayerID = this.id + '_stylesheet';
|
|
|
|
var styleLayer = getLayer(styleLayerID);
|
|
if(styleLayer) {
|
|
MochiKit.DOM.removeElement (styleLayer);
|
|
}
|
|
|
|
if(styleText.length > 0) {
|
|
bobj.addStyleSheet (styleText, styleLayerID);
|
|
}
|
|
|
|
if (this._form) {
|
|
this._form.innerHTML = '<div style="overflow:auto">' + ext.html + '</div>';
|
|
}
|
|
|
|
var callback = function (parameterDialog, scripts) {
|
|
return function () {
|
|
|
|
//Must show dialog before executing scripts as scripts could change scroll position
|
|
parameterDialog.show(true);
|
|
|
|
for ( var iScripts = 0, scriptsLen = scripts.length; iScripts < scriptsLen; ++iScripts) {
|
|
var script = scripts[iScripts];
|
|
if (!script) {
|
|
continue;
|
|
}
|
|
|
|
if (script.text) {
|
|
bobj.evalInWindow (script.text);
|
|
}
|
|
}
|
|
}
|
|
}(this, ext.scripts);
|
|
|
|
//CSS links in extracted html are first loaded, then dialog is shown to correctly calcualte
|
|
//the width and height of dialog
|
|
|
|
bobj.includeCSSLinksAndExecuteCallback ( ext.links, callback);
|
|
|
|
}
|
|
},
|
|
|
|
getHTML : function(html) {
|
|
var FORM = bobj.html.FORM;
|
|
var DIV = bobj.html.DIV;
|
|
var onsubmit = 'eventCancelBubble(event);return false;';
|
|
|
|
return this.beginHTML() +
|
|
DIV({'class' : 'dlgFrame naviBarFrame', style : { padding : '20px 15px 5px 20px'}}, FORM({id: this.id + '_form', style : {overflow : 'auto'}, onsubmit: onsubmit})) +
|
|
this.endHTML();
|
|
}
|
|
};
|