!7 sclass DirectoryInfo extends DynModule { S dir; bool allowedToLook; Bool exists, isFile; L filesContained; // this should be an immutable list b/c of listeners transient JComboBox comboBox; File dirObject() { ret newFile(dir); } void start { ownTimer(doEvery(2.0, r fullUpdate)); // TODO: watch service } JComponent visualize() { if (dir == null) ret jcenteredbutton("Select directory...", r { selectDir("Select directory to show", voidfunc(File dir) { setDir(dir); }); }); if (comboBox == null) comboBox = yesNoComboBox(allowedToLook, voidfunc(bool b) { setField(allowedToLook := b) }); ret makeForm( "Directory" := dir, allowedToLook := comboBox, +exists, +isFile, "Elements contained", filesContained == null ? "Unknown" : l(filesContained)); } void fullUpdate { updateMe(); } void update { temp enter(); if (dir != null && allowedToLook) { File dirObject = dirObject(); setField(exists := dirObject.isDirectory()); setField(isFile := dirObject.isFile()); if (setField(filesContained := listFileNames(dirObject))) revisualize(); } else if (setFields(exists := null, isFile := null, filesContained := null)) revisualize(); } // API for other modules S getDir() { ret dir; } void setDir(File dir) { setField(dir := f2s(dir)); revisualize(); } L getFiles() { ret filesContained; } void setAllowedToLook(bool b) { setField(allowedToLook := b); } }