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.
378 lines
10 KiB
378 lines
10 KiB
|
|
/*
|
|
================================================================================
|
|
TextCombo
|
|
|
|
Internal class. Editable combo box that renders correctly in a Parameter UI
|
|
================================================================================
|
|
*/
|
|
|
|
/**
|
|
* Constructor. TextCombo extends TextComboWidget from the dhtmllib.
|
|
*/
|
|
bobj.crv.params.newTextCombo = function(kwArgs) {
|
|
var UPDATE = MochiKit.Base.update;
|
|
var PARAMS = bobj.crv.params;
|
|
kwArgs = UPDATE({
|
|
id: bobj.uniqueId(),
|
|
width: '100%',
|
|
maxChar: null,
|
|
tooltip: null,
|
|
disabled: false,
|
|
editable: false,
|
|
changeCB: null,
|
|
enterCB: null,
|
|
keyUpCB: null,
|
|
isTextItalic: false
|
|
}, kwArgs);
|
|
|
|
var o = newTextComboWidget(
|
|
kwArgs.id,
|
|
kwArgs.maxChar,
|
|
kwArgs.tooltip,
|
|
null, // width
|
|
kwArgs.changeCB,
|
|
null, // check CB
|
|
null, // beforeShowCB
|
|
null);// formName
|
|
|
|
o.widgetType = 'TextCombo';
|
|
|
|
// Update instance with constructor arguments
|
|
bobj.fillIn(o, kwArgs);
|
|
o.width = kwArgs.width;
|
|
|
|
// Update instance with member functions
|
|
o.init_TextCombo = o.init;
|
|
UPDATE(o, PARAMS.TextCombo);
|
|
|
|
o._createTextField(); // Override parent's text property
|
|
o._createArrow();
|
|
o.arrow.dy += 2; // Center the arrow
|
|
o.arrow.disDy += 2;
|
|
|
|
return o;
|
|
};
|
|
|
|
bobj.crv.params.TextCombo = {
|
|
setTextItalic : function(isTextItalic) {
|
|
if (this.text) {
|
|
this.text.setTextItalic (isTextItalic);
|
|
}
|
|
},
|
|
|
|
setForeColor : function(color) {
|
|
if (this.text)
|
|
this.text.setForeColor (color);
|
|
},
|
|
|
|
setTooltip : function(tooltip) {
|
|
if (this.text) {
|
|
this.text.setTooltip (tooltip);
|
|
}
|
|
},
|
|
|
|
setTabDisabled : function(dis) {
|
|
if (this.text)
|
|
this.text.setTabDisabled (dis);
|
|
|
|
if (this.arrow)
|
|
bobj.disableTabbingKey (this.arrow.layer, dis);
|
|
},
|
|
|
|
setMenu : function(menu) {
|
|
this.menu = menu;
|
|
},
|
|
|
|
init : function() {
|
|
this.init_TextCombo ();
|
|
this.arrowContainer = getLayer (this.id + '_arrowCtn');
|
|
|
|
if (this.arrow) {
|
|
this.arrow.layer.onfocus = IconWidget_realOverCB;
|
|
this.arrow.layer.onblur = IconWidget_realOutCB;
|
|
}
|
|
|
|
this.text.setValue (this.cleanValue);
|
|
},
|
|
|
|
toggleMenu : function() {
|
|
var menu = this.menu;
|
|
menu.parIcon = this;
|
|
var toShow = !menu.isShown();
|
|
menu.show (toShow);
|
|
if (toShow)
|
|
menu.valueSelect (this.text.getValue () + '');
|
|
},
|
|
|
|
_createArrow : function() {
|
|
var tooltip = _openMenu.replace("{0}", this.tooltip? this.tooltip: '');
|
|
this.arrow = newIconWidget(this.id + "arrow_",
|
|
bobj.skinUri("menus.gif"),
|
|
bobj.bindFunctionToObject(this.toggleMenu,this),
|
|
null,
|
|
tooltip,
|
|
7, /* w */
|
|
12, /* h */
|
|
0, /* dx */
|
|
83, /* dy */
|
|
0, /* disDx */
|
|
99); /* disDy */
|
|
|
|
this.arrow.setClasses("iconnocheck", "combobtnhover", "combobtnhover", "combobtnhover");
|
|
this.arrow.par = this;
|
|
},
|
|
|
|
_createTextField : function() {
|
|
this.text = bobj.crv.params.newTextField ( {
|
|
id : this.id + '_text',
|
|
cleanValue : this.cleanValue,
|
|
width : '100%',
|
|
maxChar : null,
|
|
tooltip : this.tooltip,
|
|
disabled : false,
|
|
editable : this.editable,
|
|
password : false,
|
|
focusCB : this.focusCB,
|
|
blurCB : this.blurCB,
|
|
keyUpCB : bobj.bindFunctionToObject (this._onKeyUp, this),
|
|
enterCB : this.enterCB,
|
|
foreColor : this.foreColor,
|
|
isTextItalic : this.isTextItalic
|
|
});
|
|
},
|
|
|
|
getHTML : function() {
|
|
var h = bobj.html;
|
|
|
|
var arrowClassName = 'iactTextComboArrow';
|
|
var arrowStyle = {};
|
|
arrowStyle.right = "0px";
|
|
|
|
if (MochiKit.Base.isIE ()) {
|
|
arrowStyle.height = "18px";
|
|
|
|
} else {
|
|
arrowStyle.height = "16px";
|
|
}
|
|
|
|
var html = h.DIV ( {
|
|
id : this.id,
|
|
style : {
|
|
width : "100%",
|
|
position : "relative"
|
|
}
|
|
}, h.DIV ( {
|
|
style : {
|
|
position : "relative"
|
|
},
|
|
'class' : 'iactTextComboTextField'
|
|
}, this.text.getHTML ()), h.DIV ( {
|
|
'class' : arrowClassName,
|
|
id : this.id + '_arrowCtn',
|
|
style : arrowStyle
|
|
}, this.arrow.getHTML ()));
|
|
|
|
return html;
|
|
},
|
|
|
|
/**
|
|
* Resets TextCombo. sets original value and hides arrow icon
|
|
*/
|
|
reset : function(value) {
|
|
this.text.reset (value);
|
|
},
|
|
|
|
/**
|
|
* Set the content of the text box and update the menu selection
|
|
*
|
|
* @param text [String]
|
|
*/
|
|
setValue : function(text) {
|
|
this.text.setValue(text);
|
|
},
|
|
|
|
setCleanValue : function(text) {
|
|
this.text.setCleanValue (text);
|
|
},
|
|
|
|
/**
|
|
* Private. Overrides parent.
|
|
*/
|
|
selectItem : function(item) {
|
|
if (item) {
|
|
this.val = item.value;
|
|
this.text.setValue (item.value, true); /* keep the previous clean value */
|
|
this.menu.select (item.index);
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Get the content on the text box
|
|
*
|
|
* @return [String]
|
|
*/
|
|
getValue : function() {
|
|
return this.text.getValue ();
|
|
},
|
|
|
|
_onKeyUp : function(e) {
|
|
var text = this.text.getValue ();
|
|
|
|
if (this.keyUpCB)
|
|
this.keyUpCB (e);
|
|
}
|
|
};
|
|
|
|
|
|
/**
|
|
* ScrollMenuWidget
|
|
*/
|
|
|
|
bobj.crv.params.newScrollMenuWidget = function(kwArgs) {
|
|
kwArgs = MochiKit.Base.update({
|
|
id : bobj.uniqueId(),
|
|
originalValues: [],
|
|
hasProperWidth: false,
|
|
hasValueList: false,
|
|
maxVisibleItems: 10,
|
|
openAdvDialogCB: null,
|
|
maxNumParameterDefaultValues: null
|
|
},kwArgs);
|
|
|
|
var visibleLines = (kwArgs.originalValues.length >= kwArgs.maxVisibleItems) ? kwArgs.maxVisibleItems : kwArgs.originalValues.length;
|
|
if (visibleLines === 1) {
|
|
visibleLines++;
|
|
}
|
|
|
|
var o = newScrollMenuWidget(
|
|
"menu_"+ kwArgs.id, //id
|
|
bobj.crv.params.ScrollMenuWidget.onChange, //changeCB
|
|
false, //multi
|
|
null,
|
|
visibleLines, //lines
|
|
null, //tooltip
|
|
null,//dblClickCB
|
|
null, //keyUpCB
|
|
false, //showLabel
|
|
'', //label
|
|
'',//convBlanks
|
|
null, //beforeShowCB
|
|
null); //menuClickCB
|
|
|
|
o.oldShow = o.show;
|
|
MochiKit.Base.update(o,kwArgs, bobj.crv.params.ScrollMenuWidget);
|
|
|
|
return o;
|
|
};
|
|
|
|
bobj.crv.params.ScrollMenuWidget = {
|
|
onChange : function() {
|
|
var o = this.parIcon;
|
|
var item = this.getSelection ();
|
|
|
|
if (item) {
|
|
if (this.maxNumParameterDefaultValues && item.index == this.maxNumParameterDefaultValues) {
|
|
if (this.openAdvDialogCB) {
|
|
this.openAdvDialogCB ();
|
|
this.clearSelection ();
|
|
}
|
|
} else {
|
|
o.val = item.value;
|
|
o.text.setValue (item.value);
|
|
}
|
|
} else {
|
|
o.val = null;
|
|
o.text.setValue ("");
|
|
}
|
|
|
|
if (o.changeCB) {
|
|
o.changeCB ();
|
|
}
|
|
},
|
|
|
|
getPosition : function() {
|
|
if (this.parIcon === null) {
|
|
return;
|
|
}
|
|
|
|
var layer = this.parIcon.layer;
|
|
var getDimensions = MochiKit.Style.getElementDimensions;
|
|
var position = getPosScrolled (layer);
|
|
var xPos = position.x + 2;
|
|
var yPos = position.y + getDimensions (layer).h + 3;
|
|
if (MochiKit.Base.isIE ()) {
|
|
xPos -= 1;
|
|
if (bobj.isQuirksMode ()) {
|
|
yPos -= 2;
|
|
}
|
|
}
|
|
|
|
return {
|
|
x : xPos,
|
|
y : yPos
|
|
};
|
|
|
|
},
|
|
|
|
setProperWidth : function() {
|
|
if (this.hasProperWidth === false) {
|
|
this.css.display = "block";
|
|
this.orginalWidth = this.layer.offsetWidth;
|
|
this.css.display = "none";
|
|
this.hasProperWidth = true;
|
|
}
|
|
},
|
|
|
|
setValueList : function() {
|
|
if (this.hasValueList === false) {
|
|
this.hasValueList = true;
|
|
var origValues = this.originalValues;
|
|
for ( var i = 0, len = origValues.length; i < len; i++) {
|
|
this.add (origValues[i], origValues[i], false);
|
|
}
|
|
}
|
|
},
|
|
|
|
setFocus : function(focus) {
|
|
if (focus) {
|
|
var focusCB = bobj.bindFunctionToObject (this.list.focus, this.list);
|
|
setTimeout (focusCB, 300);
|
|
} else {
|
|
if (this.parIcon.selected === true) {
|
|
this.parIcon.arrow.focus ();
|
|
}
|
|
}
|
|
},
|
|
|
|
show : function(show) {
|
|
if (this.layer === null)
|
|
this.justInTimeInit ();
|
|
|
|
if (this.hasValueList === false)
|
|
this.setValueList ();
|
|
|
|
if (this.parIcon === null)
|
|
return;
|
|
|
|
if (this.hasProperWidth === false)
|
|
this.setProperWidth ();
|
|
|
|
if (this.parIcon && this.parIcon.layer) {
|
|
var layer = this.parIcon.layer;
|
|
if (layer.clientWidth > this.orginalWidth) {
|
|
this.css.width = layer.clientWidth + "px";
|
|
this.list.css.width = layer.clientWidth + "px";
|
|
} else {
|
|
this.css.width = this.orginalWidth + "px";
|
|
this.list.css.width = this.orginalWidth + "px";
|
|
}
|
|
}
|
|
|
|
var pos = this.getPosition ();
|
|
this.oldShow (show, pos.x, pos.y);
|
|
|
|
this.setFocus (show);
|
|
}
|
|
};
|