srecord noeq UIURLSystem(Enterable owner, SimpleLiveValue uiURL) { // key: ui URL // value: component maker transient Map> uiMap = syncCIMap(); settable transient SingleComponentPanel scp; JComboBox comboBox; JComponent urlBar() { ret withLabel("Show", comboBoxAndButton( onSelectedItem( bindComboBoxToLiveValue(centerComboBox( comboBox = autoComboBox(url(), cloneKeys(uiMap))), uiURL), url -> showUIURL(url) ), "Go", url -> showUIURL(url))); } JComponent renderUIUrl aka renderUIURL aka uiGet(S url) { try { temp tempEnter(owner); var maker = uiMap.get(url); var component = callF(maker); if (component != null) ret component; ret jCenteredLabel("URL not found: " + url); } catch print e { ret jErrorView(e); } } void showUIURL(S url) { temp tempEnter(owner); setURL(trim(url)); go(); } void go { setComponent(scp, renderUIUrl(url())); } S url() { ret uiURL!; } void setURL(S url) { uiURL.set(url); } selfType put(S url, IF0 maker) { uiMap.put(url, maker); this; } }