!7 sclass DirectoryInfo extends DynModule { S dir; bool allowedToLook; Bool exists, isFile; L filesContained; File dirObject() { ret newFile(dir); } void start { ownTimer(doEvery(10.0, r fullUpdate)); } JComponent visualize() { if (dir == null) ret jcenteredbutton("Select directory...", r { selectFile("Select directory to show", voidfunc(File dir) { setField(dir := f2s(dir)); revisualize(); }); }); ret makeForm( +dir, allowedToLook := yesNoComboBox(allowedToLook, voidfunc(bool b) { setField(allowedToLook := b) }), +exists, +isFile, "Files contained", filesContained == null ? "Unknown" : l(filesContained)); } void fullUpdate { lock lock; filesContained = null; update(); } void update { lock lock; if (dir != null && allowedToLook) { File dirObject = dirObject(); setField(exists := dirObject.isDirectory()); setField(isFile := dirObject.isFile()); if (filesContained == null && setField(filesContained := listFileNames(dirObject))) revisualize(); } else if (setFields(exists := null, isFile := null, filesContained := null)) revisualize(); } }