!7 p-subst { L ids = programsWithData(); final SS programNames = getSnippetTitles_cached(ids); showNiceButtons( map(ids, func(fS progID) -> TextImageAction { TextImageAction(programNames.get(progID), #1101229, r-thread { showProgramDir(progID) }) })); } svoid showProgramDir(S progID) { L files = listFiles(programDir(progID)); frameTitle("Files of: " + getSnippetTitle_cached(progID) + " [" + progID + "]", showNiceButtons( map(ids, func(File f) -> TextImageAction { TextImageAction(f.getName(), #1101231, openFile(f)) })); } svoid openFile(File f) { infoBox("TODO"); }