sclass InterestingString extends Module { S theString; transient SimpleLiveValue lv = new(S); void update { lv.set(theString); } JComponent visualize() { ret centerLabel(jLiveValueLabel(lv)); } } sclass UpdateCycles extends Module { long value; transient SimpleLiveValue lv = new(S); void update { value = updateCycles; lv.set(str(value)); } JComponent visualize() { ret jSection("INTERNAL UPDATES", onLeftClick(centerLabel(makeBold(setFontSize(40, jLiveValueLabel(lv)))), rst)); } void enhanceFrame(JInternalFrame f) { internalFrameTitlePopupMenuItem(f, "Update", rst); } } sclass InputToInterestingString extends Module { transient java.util.Timer timer; void start { timer = doEvery(1000, r { Hello h = findModule(Hello); if (h == null) ret; S s = h.tf != null ? getTextTrim(h.tf) : trim(h.text); startModule(csetAndReturn(uniq(InterestingString), theString := s)); }); } void cleanMeUp() { cancelTimer(timer); } } sclass ModuleCount extends Module { transient JLabel label; void update { if (label != null) setText(label, lstr(onModules())); } JComponent visualize() { ret jSection("MODULES", label = setFontSize(30, jcenteredlabel(lstr(onModules())))); } void unvisualize2() { label = null; } } sclass ModuleList extends StaticModule_CalculatedList { Module getModule(S item) { ret getConcept(Module, parseFirstLong(item)); } S moduleName() { if (eq(getClass(), ModuleList)) ret "Loaded Modules"; ret super.moduleName(); } JComponent visualize() { super.visualize(); onDoubleClickOrEnter(list, voidfunc(fS s) { showModule(getModule(s)) }); ret listPopupMenuItemsThreaded(list, "Delete", voidfunc(fS s) { removeConcept(getModule(s)) }, "Show", voidfunc(fS s) { showModule(getModule(s)) }, "Hide", voidfunc(fS s) { hideModule(getModule(s)) }); } L calc() { ret map(func(final Module m) -> S { //renderConcept(m) /* contains id as first int */ "[" + m.id + "] " + or2(pcallF(func -> S { m.moduleName() }), "?") }, modulesToList()); } L modulesToList() { ret onModules(); } } sclass InvisibleModules extends ModuleList { L modulesToList() { ret filterByField(onModules(), visible := false); } JComponent visualize() { ret jSection("INVISIBLE MODULES", super.visualize()); } } sclass ModuleClasses extends Module { transient L> classes; void start() { classes = filter(func(Class c) -> bool { !isTrue(callOpt(c, 'needsParameters)) }, myNonAbstractClassesImplementing(Module)); } JComponent visualize() { JList list = jlist(map shortClassName(classes)); VF1 instantiate = voidfunc(fS s) { showModule((Module) nu(classForName("main$" + s))); }; VF1 defaultAction = voidfunc(fS s) { makeOrShowStaticModuleOfType(s); }; listPopupMenuItemsThreaded(list, "Instantiate", instantiate); listPopupMenu(list, voidfunc(JPopupMenu menu, S item) { Class c = classForName("main$" + item); final L l = staticModulesOfType(c); if (nempty(l)) addMenuItem(menu, l(l) == 1 ? "Show instance" : "Show all " + l(l) + " instances", r-thread { showModules(l) }); }); ret onDoubleClickThreaded(list, defaultAction); } } sclass DynamicModuleMaker extends Module { L> uSearchData() { ret ll(pair("Add dynamic module", r doIt)); } void doIt { selectDynModuleID(voidfunc(fS snippetID) { temp tempBusyAnimation("Loading Module"); final Class c = hotwireModule(snippetID); L names = (L) callOpt(c, 'myInnerClasses); if (names == null) names = map getClassDeclarationName(innerClassesOfMain(getServerTranspiledWithoutLibs(snippetID))); // only show the usable ones try { names = shortClassNames(nonAbstractClassesInRealmImplementing(c, _getClass(c, "main$DynModule"), names)); } catch print e { names = null; } if (empty(names)) showModule(DynamicModule(snippetID, null, c)); else if (l(names) == 1) showModule(DynamicModule(snippetID, "main$" + first(names), c)); else selectFromList("Class to use", concatLists(ll("None"), names), voidfunc(S className) { showModule(DynamicModule(snippetID, eq(className, "None") ? null : "main$" + className, c)); }); }); } JComponent visualize() { ret jfullcenter(jbutton("Add dynamic module...", r doIt); } } sclass Hello extends Module { S text = "class main {}"; transient JTextField tf; void start { makeModule(InputToInterestingString); } JComponent visualize() { ret tf = setFontSize(20, jcenteredtextfield(text)); } void unvisualize2() { if (tf != null) cset(this, text := getText(tf)); tf = null; } void enhanceFrame(JInternalFrame f) { packInternalFrameVertically(700, f); centerInternalFrame(f); f.setLocation(f.getX(), 40); } }