!7 sclass ModuleList extends DynCalculatedList { O getModule(S item) { ret item == null ? null : callCreator('getModuleByID, str(parseFirstLong(item))); } JComponent visualize() { JList list = assertNotNull("JList", (JList) super.visualize()); onDoubleClickOrEnter(list, voidfunc(fS s) { dm_showModule(getModule(s)) }); for (Pair> p : dm_moduleMenuItems()) listPopupMenuItem(list, p.a, voidfunc(fS s) { thread { callF(p.b, getModule(s)) } }); ret list; } L calc() { ret map(func(final O m) -> S { "[" + dm_moduleID(m) + "] " + or2(pcallF(func -> S { dm_moduleName(m) }), "?") }, modulesToList()); } L modulesToList() { ret dm_listStems(); } }