static editJavaXSnippet_Editor editJavaXSnippet(fS snippetID) { ret (editJavaXSnippet_Editor) swingAndWait(func { new editJavaXSnippet_Editor(snippetID) }); } sclass editJavaXSnippet_Editor { S snippetID; JTextArea textArea; JButton btnSave, btnTranspile, btnMTranspile, btnReload, btnEleuReload; L buttons; int snippetType; JLabel lblStatus; *(S _snippetID) { snippetID = formatSnippetID(_snippetID); showFrame(snippetID, centerAndSouth(textArea = typeWriterTextArea(), lblStatus = jlabel())); frameIcon(textArea, #1004655); thread { setFrameTitle(textArea, "E: " + getSnippetTitle(snippetID) + " [" + snippetID + "]"); } // Customize text area textArea.setTabSize(2); lblStatus.setText("Loading..."); btnSave = new JButton("Save on server"); btnSave.addActionListener(actionListener { saveSnippet(null); }); btnTranspile = new JButton("Save & transpile"); btnTranspile.addActionListener(actionListener { transpile(false); }); btnMTranspile = new JButton("S & Multi-transpile"); btnMTranspile.addActionListener(actionListener { transpile(true); }); btnReload = new JButton("Reload"); btnReload.addActionListener(actionListener { reload(); }); btnEleuReload = new JButton("Eleu-Reload"); btnEleuReload.addActionListener(actionListener { eleuReload(); }); buttons = ll(btnReload, btnSave, btnTranspile); jdisable(buttons); // XXX cursor bug? textArea.setEditable(false); // still loading snippetType = getSnippetType(snippetID); JScrollPane bottom = new JScrollPane( snippetType != 42 ? jflowRight(btnSave, btnTranspile, btnMTranspile, btnReload, btnEleuReload) : jflowRight(btnSave, btnReload)); addToWindow(textArea, bottom); onUpdate(textArea, r { jenable(buttons); }); reload(); } void saveSnippet(final Runnable next) { final S text = textArea.getText(); jdisable(buttons); lblStatus.setText("Saving..."); thread { fS page = editSnippet(snippetID, text); awt { lblStatus.setText("Saved snippet: " + page); jenable(buttons); callF(next); } } } void transpile(final bool multi) { saveSnippet(r { lblStatus.setText("Transpiling..."); jdisable(btnEleuReload); thread "Transpiling" { try { final Pair p = transpileOnServer(snippetID, multi ? "medium" : "quick"); awt { if (p.a) lblStatus.setText("Transpiled OK!"); else { lblStatus.setText("Transpilation error. " + p.b); showText("Transpilation Error", p.b); } } } catch e { printStackTrace(e); lblStatus.setText("Transpilation problem. " + e); } jenable(btnEleuReload); } }); } void reload() { thread "Load Snippet" { final S s = loadSnippet(snippetID); awt { lblStatus.setText("Loaded " + s.length() + " chars."); textArea.setText(s); //textArea.scrollRectToVisible(new Rectangle(0, 0, 1, 1)); textArea.setCaretPosition(0); jenable(buttons); textArea.setEditable(true); textArea.requestFocus(); } } } void eleuReload() { time { butterReload(snippetID); } infoBox("Reloaded in " + lastTiming_format100ms()); } }