@qooxdoo/framework
Version:
The JS Framework for Coders
112 lines (89 loc) • 2.81 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(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(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;
}
}
});