abstract sclass DynPrintLog extends DynModule { transient JTextArea ta; transient Lock updatePrintLog_lock = lock(); transient StringBuffer actualPrintLog; visualize { JComponent section = jSection("Log", ta = moveCaretToEnd(typeWriterTextArea(getPrintLog()))); componentPopupMenuItem(section, "Clear Log", r clearPrintLog); ret awtEvery(section, 500, r updatePrintLog); } void updatePrintLog { // TODO: optimize lock updatePrintLog_lock; if (ta != null) setText(ta, getPrintLog()); } JTextArea myPrintLogComponent() { ret ta; } void enableWordWrap { enableWordWrapForTextArea(ta); } S getPrintLog() { if (actualPrintLog == null) actualPrintLog = liveLocalPrintLog_realMC(this); ret str(actualPrintLog); } }