privatedef scroll_to_bottom(): Unit = GUI_Thread.later { val vertical = scroll_text.verticalScrollBar
vertical.value = vertical.maximum
}
/* progress */
privateval progress = new Progress with Progress.Status { overridedef status_detailed: Boolean = true
overridedef status_hide(msgs: Progress.Output): Unit = { val txt = output_text(msgs.map(Progress.output_theory), terminate = true) val m = txt.length if (m > 0) {
GUI_Thread.later { val doc = text.styledDocument
doc.remove(doc.getLength - m, m)
}
}
}
overridedef status_output(msgs: Progress.Output): Unit = { if (msgs.nonEmpty) {
GUI_Thread.later { for (msg <- msgs) { val txt = output_text(List(Progress.output_theory(msg)), terminate = true) if (txt.nonEmpty) { val doc = text.styledDocument
doc.insertString(doc.getLength, txt, if (msg.status) inverse elsenull)
}
}
scroll_to_bottom()
}
}
}
}
/* layout panel with dynamic actions */
privateval action_panel = new FlowPanel(FlowPanel.Alignment.Center)() privateval layout_panel = new BorderPanel
layout_panel.layout(scroll_text) = BorderPanel.Position.Center
layout_panel.layout(action_panel) = BorderPanel.Position.South
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.