!7 sclass GhostModules extends DynCalculatedList { void start { ownTimer(doEvery(30.0, r updateMe)); } JComponent visualize() { JList list = cast super.visualize(); ret setBackground(awtColor("#35312F"), jCenteredBackgroundImage(#1101314, wrap(jtransparent_hard(list)))); } L calc() { ret map(dm_ghostModules(), func(Class c, GhostModule m) { S programID = str(getOpt(getMainClass(c), 'programID)); bool hasInstance = m.instance! != null; ret programID + "/" + shortClassName(c) + " - " + or2(m.name, "?") + (hasInstance ? "" : " [instance gone]"); }); } }