!7 sclass SCP extends DynModule { S link, dir; L files; bool inForm = true; transient JTextField tfLink, tfDir; transient JList list; start { fetch(); } visualize { if (tfLink == null) tfLink = jtextfield("root@butter.botcompany.de"); if (tfDir == null) tfDir = jtextfield("/root"); if (inForm) ret renameSubmitButton("Connect", makeForm( "User@Host", tfLink, "Remote directory", tfDir, disableButtonWhileCalcing(func -> bool { setFields(link := getTextTrim(tfLink), dir := getTextTrim(tfDir)); if (!fetch()) false; revisualize(); true; }))); // We're logged in, show list list = jlist(files); ret jSection(link + ":" + dir, list); } bool fetch() { int i = indexOf(link, '@'); if (i < 0) false; setField(files := mapMethod('getName, scpLS(takeFirst(link, i), substring(link, i+1), dir))); setField(inForm := false); true; } enhanceFrame { frameTitlePopupMenuItems(f, "Back To Form", r backToForm, "Clear Error", r clearError); } void backToForm { setField(inForm := true); revisualize(); } }