set flag AllowMetaCode.
meta-postProcess { tok_crudAutoConstructor }
abstract sclass DynCRUD<A extends Concept> extends DynModule {
transient Class<A> conceptClass;
transient SimpleCRUD<A> crud;
S caseID;
transient bool addCountToName = true, addCountToName_installed;
*() {}
*(Class<A> *conceptClass) {}
start {
dbWithCase(caseID); // So we can do stuff in overridden start methods
crud = makeCRUD(); // so we can customize early
if (addCountToName) addCountToName();
}
visualize {
makeConceptsTable_idWidth = 0;
showConceptsTable_afterUpdate.set(voidfunc(JTable t) {
int n = tableColumnCount(t);
for i to n:
setColumnName(t, i, i == 0 ? "" : humanizeFormLabel(getColumnName(t, i)));
});
ret withMargin(crud.make_dontStartBots());
}
SimpleCRUD<A> makeCRUD() {
ret SimpleCRUD<A>(db_mainConcepts(), conceptClass);
}
JTable table() { ret crud == null ? null : crud.table; }
A selected() { ret crud == null ? null : crud.selectedConcept(); }
void addButton(JComponent button) {
if (crud != null) addComponent(crud.buttons, button);
}
void addButton(S name, O action) { addButton(jbutton(name, action)); }
void addSelectionDependentButton(S name, O action) {
addButton(tableDependentButton(table(), name, action));
}
void makeSortable() { // broken?
addRowSorter(table());
rowSorter_setComparatorForAllColumns(table(), alphaNumComparator());
}
S searchTerm() {
ret crud == null || crud.tableSearcher == null ? null : gtt(crud.tableSearcher.tfInput);
}
void addCountToName {
if (addCountToName_installed) ret;
addCountToName_installed = true;
onConceptChangeAndNow(rEnter { setModuleName(dm_originalModuleName() + " (" + conceptCount() + ")") });
}
Concepts conceptsObject() {
ret crud.concepts;
}
// overwrite for compact modules to work
<B extends Concept> L<B> list(Class<B> c) {
ret conceptsObject().list(c);
}
// API
L<A> concepts() enter { ret list(conceptClass); }
L<A> data() { ret concepts(); }
L<A> list() { ret concepts(); }
L<Concept> conceptsOfType(S type) enter { ret conceptsObject().list(type); }
// TODO: use index
L<Concept> conceptsOfTypeWhere(S type, O[] params) enter {
ret filterConcepts(conceptsOfType(type), params);
}
int conceptCount() enter { ret countConcepts(conceptClass); }
void deleteAll() enter {
deleteConcepts(conceptClass);
}
void addDialog() enter { crud.newConcept(); }
A uniqConcept(O... params) {
ret uniq_sync(conceptClass, params);
}
Pair<A, Bool> uniqConcept2(O... params) {
ret uniq2_sync(conceptClass, params);
}
int cset(Concept c, O... values) {
ret _cset(c, values);
}
}Began life as a copy of #1019282
download show line numbers debug dex old transpilations
Travelled to 7 computer(s): bhatertpkbcr, mqqgnosmbjvj, pyentgdyhuwx, pzhvpgtvlbxg, tvejysmllsmz, vouqrxazstgt, xrpafgyirdlv
No comments. add comment
| Snippet ID: | #1026524 |
| Snippet name: | DynCRUD (old) |
| Eternal ID of this version: | #1026524/1 |
| Text MD5: | 4e8585da53ecc8f01e0e9df80592e136 |
| Author: | stefan |
| Category: | javax / db / gui |
| Type: | JavaX fragment (include) |
| Public (visible to everyone): | Yes |
| Archived (hidden from active list): | No |
| Created/modified: | 2020-01-11 17:51:28 |
| Source code size: | 2890 bytes / 102 lines |
| Pitched / IR pitched: | No / No |
| Views / Downloads: | 470 / 494 |
| Referenced in: | [show references] |