!7 concept Equivalent { S a, b; } module Equivalents > DynCRUD { *() { super(Equivalent); } afterVisualize { replaceComponent(crud.tableSearcher.tfInput, func(JComponent c) -> JComponent { centerAndEastWithMargin(c, jbutton("Define...", rThread { define(searchTerm()) })) }); onEnter(crud.tableSearcher.tfInput, rThread { define(searchTerm()) }); } void define(fS term) enter { final JTextField tfWord = jtextfield(or2(term, dm_topInput())), tfDefinition = jtextfield(); showFormTitled("Add Equivalent", "Word/phrase:", tfWord, "Equivalent word/phrase:", tfDefinition, rThread { S a = gtt(tfWord), b = gtt(tfDefinition); uniq_sync(Equivalent, +a, +b); }); focus(nempty(term) ? tfDefinition : tfWord); } }