UNPKG

@qooxdoo/framework

Version:

The JS Framework for Coders

112 lines (89 loc) 2.81 kB
/* ************************************************************************ 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; } } });