!759 concepts. concept Line { S text; *() {} *(S *text) { change(); } } concept UserLine { new Ref line; } concept Action { S code; } concept Line2Action { new Ref line; new Ref action; } static JTextField tf; static SingleComponentPanel scp; static UserLine userLine; static SystemAnswer systemAnswer; static JTable table; static L tableData; p-awt { //mistAqua(); // GREAT, with rounded buttons/scrollbars //emeraldDusk(); // wellll... magellan(); // funny, but not that readable loadAndAutoSaveConcepts(); showFrameHidingConsole(jtabs( "Console", northAndCenter( centerAndEast(tf = jCenteredTextField("What is love?"), jbutton("Answer...", "answerQ")), scp = new SingleComponentPanel(centeredHtmlLabel("Yo!"))), "Questions & Answers", table = sexyTable())); tf.selectAll(); tf.requestFocus(); setFrameIconLater(tf, "#1005372"); onEnter(tf, r { S s = tf.getText().trim(); userLine = userLine(s); processUserLine(); }); tablePopupMenu(table, voidfunc(JPopupMenu menu, final int row) { final S q = first(getTableLine(table, row)); Map map = _get(tableData, row); final UserAnswer ua = cast _get(map, "[hidden] ua"); menu.add(jmenuItem("Answer...", r { userLine = uniq(UserLine, text := q); answerQ2(); })); menu.add(jmenuItem("Mark solvable", r { cset(ua, "solvable", true); })); menu.add(jmenuItem("Un-mark solvable", r { cset(ua, "solvable", false); })); }); /*registerCtrlKey(table, KeyEvent.VK_PAGE_UP, "Tab Left", r { print("lalala"); });*/ awtOnConceptChanges(table, 500, "updateTable"); } svoid answerQ { final S s = tf.getText().trim(); if (userLine == null || neq(userLine.text, s)) userLine = new UserLine(s); answerQ2(); } svoid answerQ2 { final UserLine _userLine = userLine; final new JTextField tfA; final JCheckBox cbSolvable = jCheckBox(uniq(SCDefaults).solvable); showTitledForm("Answer question", "Question", _userLine.text, "Answer", tfA, "Solvable", cbSolvable, r { S a = tfA.getText().trim(); cnew(UserAnswer, userLine := _userLine, text := a, solvable := (uniq(SCDefaults).solvable = isChecked(cbSolvable))); print("Answer recorded! " + _userLine.text + " => " + a); processUserLine(); }); } svoid processUserLine { try { scp.setComponent(makeComponent()); } catch e { scp.setComponent(typeWriterTextArea(getStackTrace(e))); } } static Component makeComponent() { S ua = findUserAnswer(userLine.text); if (nempty(ua)) ret centeredHtmlLabel(htmlencode(ua)); ret yeahDummyAnswer(); } static JComponent yeahDummyAnswer() { S answer = "Yeah. " + userLine.text; systemAnswer = cnew(SystemAnswer, +userLine, "text", answer); ret centeredHtmlLabel(htmlencode(answer)); } svoid updateTable() { print("Updating table (c=" + changes + ")"); new L l; dataToTable_uneditable(table, tableData = reversedList(l)); } static UserLine userLine(S text) { ret cnew(UserLine, line := uniq(Line, +text)); }