!7 sclass FilesInDirectory extends DynSCP { new DynModuleRef mate; S dir; L files; transient JTable table; File dirObject() { ret newFile(dir); } JComponent visualize2() { if (table == null) { table = sexyTable(); updateTable(); } if (mate! == null) ret jcenteredlabel("Need directory"); ret table; } void update { int oldChangeCount = mate! == null ? -1 : changeCount; try { if (mate! != null && !dm_moduleStillThere(mate!)) mate.set(null); if (mate! == null) if (setField(mate := DynModuleRef(print("Mate: ", dm_findMateOfType(this, 'DirectoryInfo))))) revisualize2(); if (mate == null) ret; setField(dir := (S) call(mate!, 'getDir)); L files = castCall(mate!, 'getFiles); if (this.files != files) { setField(+files); } } finally { if (changeCount != oldChangeCount) updateTable(); } } void updateTable { if (dir == null || table == null) ret with setModuleName("Files in directory"); L l = sortFilesByDate( fileNamesInDirToFile(new File(dir), files); dataToTable_uneditable(map(func(File f) -> Map { litorderedmap("Name" := f.getName(), "Size" := fileSize(f)) }, l), table); setModuleName(files == null ? "Not allowed to look in directory " + fileName(dirObject()) : n2(l, "file") + " in directory " + fileName(dirObject())); } }