@qooxdoo/framework
Version:
The JS Framework for Coders
122 lines (96 loc) • 2.86 kB
JavaScript
/* ************************************************************************
qooxdoo - the new era of web development
http://qooxdoo.org
Copyright:
2006 Christian Boulanger
License:
MIT: https://opensource.org/licenses/MIT
See the LICENSE file in the project's top-level directory for details.
Authors:
* Christian Boulanger (cboulanger)
************************************************************************ */
/**
* A cell editor factory creating combo boxes.
*/
qx.Class.define("qx.ui.table.celleditor.ComboBox",
{
extend : qx.core.Object,
implement : qx.ui.table.ICellEditorFactory,
properties :
{
/**
* function that validates the result
* the function will be called with the new value and the old value and is
* supposed to return the value that is set as the table value.
**/
validationFunction :
{
check : "Function",
nullable : true,
init : null
},
/** array of data to construct ListItem widgets with */
listData :
{
check : "Array",
init : null,
nullable : true
}
},
members :
{
// interface implementation
createCellEditor : function(cellInfo)
{
var cellEditor = new qx.ui.form.ComboBox().set({
appearance: "table-editor-combobox"
});
var value = cellInfo.value;
cellEditor.originalValue = value;
// check if renderer does something with value
var cellRenderer = cellInfo.table.getTableColumnModel().getDataCellRenderer(cellInfo.col);
var label = cellRenderer._getContentHtml(cellInfo);
if ( value != label ) {
value = label;
}
// replace null values
if (value === null || value === undefined) {
value = "";
}
var list = this.getListData();
if (list)
{
var item;
for (var i=0,l=list.length; i<l; i++)
{
var row = list[i];
if ( row instanceof Array ) {
item = new qx.ui.form.ListItem(row[0], row[1]);
} else {
item = new qx.ui.form.ListItem(row, null);
}
cellEditor.add(item);
};
}
cellEditor.setValue("" + value);
cellEditor.addListener("appear", function() {
cellEditor.selectAllText();
});
return cellEditor;
},
// interface implementations
getCellEditorValue : function(cellEditor)
{
var value = cellEditor.getValue() || "";
// validation function will be called with new and old value
var validationFunc = this.getValidationFunction();
if (validationFunc) {
value = validationFunc( value, cellEditor.originalValue );
}
if (typeof cellEditor.originalValue == "number") {
value = parseFloat(value);
}
return value;
}
}
});