!7 module TaskBar_dev extends DynObjectTable { transient SimpleLiveValue lvInvisible = stringLiveValue(); start { dontPersist(); if (dm_getBounds() == null) placeOnRight(); 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 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); } enhanceFrame { addTitlePopupMenuItems(f, "Place on the right", rThread placeOnRight); } void placeOnRight enter { dm_placeOnRight(); } }