abstract sclass DynTextArea extends DynModule { S text; bool noGrab; // noGrab = don't save what user types transient JTextArea textArea; JComponent visualize() { ret awtEvery(textArea = typeWriterTextArea(text), 10000, r swingToData); } void setText(S text) { temp enter(); if (neq(this.text, text)) { this.text = text; setTextKeepCaret(textArea, text); } } void swingToData { if (textArea != null && !noGrab) setText(main.getText(textArea)); } void unvisualize { swingToData(); super.unvisualize(); } S getText() { swingToData(); ret text; } void clearText() { setText(""); } void printToText(O o) { setText(getText() + str(o) + "\n"); moveCaretToEnd(textArea); } }