!7 cmodule TaskBar_dev > DynObjectTable { S showWhat = "All modules"; start { dontPersist(); defaultAction = voidfunc(S id) { dm_showModule(id) }; itemToMap = itemToMap_calcSingleColumn("Module", func(O mod) -> S { or2(dm_moduleName(mod), "[...]") }); ownResource(vmBus_onModulesListChange(rstUpdate())); rstUpdate().trigger(); if (dm_bounds() == null) placeOnRight(); } void update { data = null; // force update LS ids = containsWord(showWhat, "visible") ? dm_visibleModuleIDs() : containsWord(showWhat, "invisible") ? dm_invisibleModuleIDs() : dm_moduleIDs(); setData(sortedByCalculatedFieldIC(func(O m) -> S { or2(dm_moduleName(m), unicodeCharacterLastInSortOrder()) }, ids)); } visualize { JComponent theTable = super.visualize(); for (final Pair> p : dm_moduleMenuItems()) tablePopupMenuItem(table, p.a, voidfunc(final int row) { thread { callF(p.b, dm_getModule(_get(data, row))); } }); tablePopupMenu(table, voidfunc(JPopupMenu menu, final int row) { O mod = _get(data, row); addMenuItem(menu, "ID: " + or(dm_moduleID(mod), mod), null) }); onCharDown(table, voidfunc(char c) { LS names = map dm_moduleName(data); int cur = selectedIndex(); int i = swic(_get(names, cur+1), str(c)) ? cur+1 // move through items with that characters : indexOfStartingWithIC(names, str(c)); selectRowIfNotNegative(table, i); }); ret northAndCenter( withMargin(westAndEast( liveValueLabel(dm_calculatedLiveValue(Int, f count)), dm_fieldComboBox('showWhat, ll("All modules", "Visible modules", "Invisible modules")))), theTable); } enhanceFrame { addTitlePopupMenuItems(f, "Place on the right", rThread placeOnRight); } void placeOnRight enter { dm_placeOnRight(); } }