abstract sclass DynObjectTable extends DynModule {
new L data;
transient JTable table;
transient F1 itemToMap;
transient bool debug;
start {
itemToMap = func(A a) -> Map {
a instanceof S ? litorderedmap("" := (S) a)
: humanizeKeys(objectToMap(a)) };
onChange(r updateTable);
}
JComponent visualize() {
table = dataToTable_uneditable(sexyTable(), map(itemToMap, data));
onDoubleClickOrEnter(table, voidfunc(int row) {
A a = _get(data, row);
if (a != null) onDoubleClick(a);
});
ret table;
}
void unvisualize() { table = null; }
void onDoubleClick(A line) {}
void updateTable() {
temp enter();
if (table != null) {
dataToTable_uneditable(table, map(itemToMap, data));
if (debug) print("dataToTable done");
}
}
void dontPersist() { _persistenceInfo = mapPlus(_persistenceInfo, data := false); }
void clear() { syncClear(data); change(); }
void add(A a) { syncAdd(data, a); change(); }
void setData(L data) { setField(data := cloneList(data)); }
}