!7 // Show programs with data as nice buttons p-noconsole { autoRestart(); defaultFrameIcon(#1101233); L ids = programsWithData(); final SS programNames = getSnippetTitles_cached(ids); showNiceButtons_higher( printLength(map(ids, func(fS progID) -> TextImageAction { TextImageAction(programNames.get(progID), #1101229, r-thread { showProgramDir(progID) }) }))); } svoid showProgramDir(S progID) { File[] files = listFiles(programDir(progID)); moveFrameUp(50, frameIcon(#1101234, frameTitle("Files of: " + getSnippetTitle_cached(progID) + " [" + progID + "]", showNiceButtons_higher( map(files, func(final File f) -> TextImageAction { TextImageAction(f.getName(), #1101231, r-thread { genericUI_openFile(f) }) }))))); }