!7 cmodule DirectoryTree > DynSCP { File dir; start { dm_onTopInput(voidfunc(fS s) { if (isAbsolutePath(s) && dirExists(s)) thread "Load Directory" { setDir(s); } }); } JComponent visualize2() { if (dir == null) ret jcenteredbutton("Select directory...", rThread select); else { thread "Load Directory" { sleepSeconds(1.0); // to avoid race condition setDir(dir); } ret loadingLabel(); } } JLabel loadingLabel() { ret jcenteredlabel("Loading..."); } void select { temp enter(); selectDir(voidfunc(final File dir) { thread { setDir(dir); } }); } void setDir(S dir) { setDir(newFile(dir)); } void setDir(File dir) enter { setComponent(loadingLabel()); Tree dataTree = findDirsWithSizes_tree(dir); sortTreeOfFilesWithSizeBySize(dataTree); final JTree tree = jDynamicTreeFromTree(dataTree, makeChildrenIsFast := true); setTreeCellRenderer(tree, customToStringTreeCellRenderer(func(Tree t) -> S { fileName(t.a.file) + " [" + str_toM(t.a.size) + "]" })); setField(+dir); setModuleName(f2s(dir) + " [Directory Tree w/sizes]"); setComponent(tree); } }