!7 module TaskBar_dev extends DynObjectTable { S showWhat = "All modules"; transient SimpleLiveValue lvInvisible = stringLiveValue(); start { dontPersist(); defaultAction = voidfunc(S id) { dm_showModule(id) }; itemToMap = itemToMap_calcSingleColumn("Module", f dm_moduleName); ownResource(vmBus_onModulesListChange(rstUpdate())); rstUpdate().trigger(); } void update { L invis = dm_invisibleModules(); lvInvisible.set(empty(invis) ? "" : "+ " + l(invis) + " invisible"); data = null; // force update LS ids = containsWord(showWhat, "visible") ? dm_visibleModuleIDs() : containsWord(showWhat, "invisible") ? dm_invisibleModuleIDs() : dm_moduleIDs(); setData(sortedByCalculatedFieldIC(f dm_moduleName, 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))); } }); ret northAndCenter( withMargin(jRightAlignedLine(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(); } }