!7 set flag DynModule. sclass GazelleTree { S line; *() {} *(S *line) {} toString { ret line; } } cmodule TestRuleEngine2 > DynSCP { S input, processedInput; transient ReliableSingleThread rstCalc = dm_rstWithPostDelay(this, r calc, 500); transient int maxResults = 500; transient bool skipBadPredictions = true; transient JTree jTree; transient GazelleTree root; S switchableFields() { ret "skipBadPredictions maxResults"; } visualize { JComponent tf = dm_textField('input); onChangeAndNow(tf, rstCalc); ret northCenterAndSouthWithMargins( centerAndEastWithMargin( tf, jbutton("Make rule...", rThread { dm_gazelle_newRuleDialog(input, input) })), super.visualize(), rightAlignedButtons( /*tableDependentButton(table(), "Mark good", rMark('good)), tableDependentButton(table(), "Mark bad", rMark('bad)), tableDependentButton(table(), "Mark funny", rMark('funny))*/ )); } Runnable rMark(fS judgement) { ret rThread { /*Entry e = selected(); print("Selected: " + e); e.judgement = judgement; fireDataChanged(); saveEntry(e);*/ }; } void calc { S input = this.input; root = new GazelleTree(input); setComponent(jscroll(jDynamicTree(root, func(GazelleTree) -> L { null }))); processedInput = input; } }