!7 module ModuleInspector > DynSCP { S moduleIDAndName; visualize { JComponent c = northAndCenterWithMargins( withCenteredTitle("Module to inspect:", dm_moduleSelectorComboBox(dm_fieldLiveValue('moduleIDAndName))), super.visualize()); update(); ret c; } L menuItems() { ret ll(abstractAction("Update", r update)); } void update { fO module = dm_getModule(firstIntAsString(moduleIDAndName)); if (module == null) setComponent(jCenteredGoogledImage("Jester")); else { L fields = allFieldObjects(module); setComponent(makeForm(pairsToParams(map(fields, func(Field f) -> Pair { O value = f.get(module); S s = ""; if (value != null) pcall { LS info = quickValueInformation_list(value); if (value cast S) { info.remove("lines=1"); s = "[" + joinWithComma(info) + "] " + quote(shorten(value, 80)); } else if (value instanceof Bool || value instanceof Number) s = str(value); else s = joinWithComma(itemPlusList(className(value), info)); } ret (Pair) pair(jLabel(f.getName()), s); })))); } } }