!7 module LocalSnippets > DynObjectTable { visualize { JComponent c = super.visualize(); ret withCenteredButtons(centerAndEastWithMargins(c, vstackWithSpacing( makeBold(tableDependentButton(table, "RUN", rThread { dm_addDynamicModuleDialog2(selected().id) })), tableDependentButton(table, "Edit", rThread { dm_editSnippet(selected().id) }), tableDependentButton(table, "Transpile", rThread { transpileLocalSnippet(selected().id); updateList(); }), tableDependentButton(table, "Rename...", rThread { fS id = selected().id; inputText("Rename Snippet " + id, getSnippetTitle(id), voidfunc(S title) enter { renameSnippet(id, title); updateList(); }); }) , tableDependentButton(table, "Delete", rThread { if (confirmOKCancel("Delete snippet " + snippetWithTitle(selected()) + "? It will be backed up.")) { deleteLocalSnippet(selected().id); infoBox("Snippet deleted!"); updateList(); } }), )), "New program...", r addSnippet); } start { itemToMap = func(Snippet s) -> Map { litorderedmap( "ID" := s.id, "Title" := unnull(s.title), "Type" := s.type, "Lines" := str(numberOfLinesInFile(localSnippetFile(s.id))), "Transpiled" := isLocalSnippetTranspiled(s.id) ? "yes" : "no") }; doEveryAndNow(5.0, r updateList); } void updateList enter { setData(listLocalSnippets()); } void addSnippet enter { final JTextField tfTitle = jtextfield(); showFormTitled("Create local snippet", "Title", tfTitle, "Type", "Dynamic Module", rThread { long id = newLocalSnippetID(); File f = localSnippetFile(id); assertFalse(fileExists(f)); saveTextFile(f, newModuleText()); setFileInfoField(f, "Title", gtt(tfTitle)); setLocalSnippetType(id, snippetType_dynModule()); updateList(); }); } }