!7 module TaskBar_dev extends DynObjectTable { transient SimpleLiveValue lvInvisible = stringLiveValue(); start { itemToMap = func(S mod) -> Map { litorderedmap("Module" := dm_moduleName(mod)) }; ownResource(vmBus_onMessages(vmBus_modulesListChangeMessages(), rstUpdate())); rstUpdate().trigger(); } void update { L invis = dm_invisibleModules(); lvInvisible.set(empty(invis) ? "" : "+ " + l(invis) + " invisible"); data = null; // force update setData(sortedByCalculatedFieldIC(f dm_moduleName, dm_visibleModuleIDs())); } visualize { JComponent c = 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(3, onLeftClick(jRightAlignedLiveValueLabel(lvInvisible), r dm_showInvisibleModulesList)), c); } }