package org.netxilia.server.js.editors;
import static org.netxilia.server.jslib.NetxiliaGlobal.$;
import static org.netxilia.server.js.NX.nx;
import static org.stjs.javascript.Global.$array;
import static org.stjs.javascript.Global.$castArray;
import static org.stjs.javascript.Global.$map;
import org.netxilia.server.js.Bounds2;
import org.netxilia.server.js.Cell;
import org.netxilia.server.js.CellRange;
import org.netxilia.server.jslib.NetxiliaJQuery;
import org.stjs.javascript.Array;
import org.stjs.javascript.Map;
import org.stjs.javascript.dom.Option;
import org.stjs.javascript.functions.Callback1;
import org.stjs.javascript.utils.NameValue;
public class SelectEditor implements Editor {
private Map<String, Object> params;
private NetxiliaJQuery editorElement;
private EditingContext context;
public SelectEditor(EditingContext context, Map<String, Object> params) {
this.params = params;
this.context = context;
}
@Override
public void setCaptureSelection(CellRange selection) {
// TODO Auto-generated method stub
}
@Override
public String value() {
return this.editorElement != null ? this.editorElement.selectedValuesString() : null;
}
@Override
public void show(boolean show) {
if (show) {
this.editorElement.show();
this.editorElement.focus();
this.editorElement.multiSelectOptionsShow();
} else {
this.editorElement.hide();
this.editorElement.multiSelectOptionsHide();
}
}
@Override
public void edit(Cell cell, Bounds2 pos, String value) {
final SelectEditor that = this;
this.editorElement = this.context.elements.$get("select-editor");
if (this.editorElement == null) {
String selectHtml = "<select id='select-editor' >";
selectHtml += "</select>";
this.editorElement = $(selectHtml).appendTo(this.context.container);
this.editorElement.multiSelect($map("selectAll", false, "noneSelected", "", "oneOrMoreSelected", ""));
this.editorElement = $("#select-editor", this.context.container);
this.editorElement.addClass("editor-visible-index");
this.context.elements.$put("select-editor", this.editorElement);
}
this.editorElement.css($map("top", pos.top, "left", pos.left, "width", pos.width, "height", pos.height));
final String valuesString = value != null ? value : cell.getValue();
nx.resources.formatters.getFormatValues(nx.app.desc.workbook, cell.getCss(), new Callback1<Array<NameValue>>() {
@Override
public void $invoke(Array<NameValue> values) {
Array<String> selValues = $castArray(valuesString.split(","));
Array<Option> options = $array();
for (int v : values) {
options.push(new Option(values.$get(v).name, values.$get(v).value));
}
that.select(options, selValues);
that.editorElement.multiSelectOptionsUpdate(options);
}
});
// this.editorElement.val(this.valuesString);
}
private void select(Array<Option> options, Array<String> values) {
for (int o : options) {
for (int v : values) {
if (options.$get(o).value == values.$get(v)) {
options.$get(o).selected = true;
}
}
}
}
}