privatedef delay_load_body(): Unit = { val required_files = { val models = Document_Model.get_models_map()
val thy_files =
session.resources.resolve_dependencies(models.values, PIDE.editor.document_required())
val aux_files = if (session.auto_resolve) {
session.stable_tip_version(models.values) match { case Some(version) => session.resources.undefined_blobs(version) case None => delay_load.invoke(); Nil
}
} else Nil
(thy_files ::: aux_files).filterNot(models.keySet)
} if (required_files.nonEmpty) { try {
Isabelle_Thread.fork(name = "resolve_dependencies") { val loaded_files = for {
name <- required_files
text <- session.resources.read_file_content(name)
} yield (name, text)
val session_phase_changed: Session.Consumer[Session.Phase] = Session.Consumer("Isabelle/jEdit") { case Session.Terminated(result) if !result.ok =>
GUI_Thread.later {
GUI.error_dialog(jEdit.getActiveView, "Prover process terminated with error", "Isabelle Syslog", GUI.scrollable_text(session.syslog.content()))
}
case Session.Ready if !shutting_down.value =>
init_models()
if (!JEdit_Options.continuous_checking()) {
GUI_Thread.later { val answer =
GUI.confirm_dialog(jEdit.getActiveView, "Continuous checking of PIDE document",
JOptionPane.YES_NO_OPTION, "Continuous checking is presently disabled:", "editor buffers will remain inactive!", "Enable continuous checking now?") if (answer == 0) JEdit_Options.continuous_checking.set()
}
}
delay_load.invoke()
case Session.Shutdown =>
GUI_Thread.later {
delay_load.revoke()
delay_init.revoke()
PIDE.editor.shutdown()
exit_models(JEdit_Lib.jedit_buffers().toList)
}
privatedef init_editor(view: View): Unit = {
Keymap_Merge.check_dialog(view)
Session_Build.check_dialog(view)
}
privatedef init_title(view: View): Unit = { val marker = "\u200B" val old_title = view.getViewConfig.title if (old_title == null || old_title.startsWith(marker)) {
view.setUserTitle(marker + PIDE.title)
}
}
overridedef handleMessage(message: EBMessage): Unit = {
GUI_Thread.assert {}
if (startup_failure.isDefined && !startup_notified) {
message match { case _: EditorStarted =>
GUI.error_dialog(null, "Isabelle plugin startup failure",
GUI.scrollable_text(Exn.message(startup_failure.get)), "Prover IDE inactive!")
startup_notified = true case _ =>
}
}
if (startup_failure.isEmpty) {
message match { case _: EditorStarted => val view = jEdit.getActiveView
try { session.resources.session_background.check_errors } catch { case ERROR(msg) =>
GUI.warning_dialog(view, "Bad session structure: may cause problems with theory imports",
GUI.scrollable_text(msg))
}
case msg: ViewUpdate => val what = msg.getWhat val view = msg.getView
what match { case ViewUpdate.CREATED if view != null => init_title(view) case _ =>
}
case msg: BufferUpdate => val what = msg.getWhat val buffer = msg.getBuffer val view = msg.getView val view_edit_pane = if (view == null) nullelse view.getEditPane
what match { case BufferUpdate.LOAD_STARTED | BufferUpdate.CLOSING if buffer != null =>
exit_models(List(buffer))
PIDE.editor.invoke_generated() case BufferUpdate.PROPERTIES_CHANGED | BufferUpdate.LOADED if session.is_ready =>
delay_init.invoke()
delay_load.invoke() case _ =>
}
if (buffer != null && !buffer.isUntitled) {
what match { case BufferUpdate.CREATED => navigator.init(Set(buffer)) case BufferUpdate.CLOSED => navigator.exit(Set(buffer)) case _ =>
}
}
case msg: EditPaneUpdate => val what = msg.getWhat val edit_pane = msg.getEditPane val buffer = if (edit_pane == null) nullelse edit_pane.getBuffer val text_area = if (edit_pane == null) nullelse edit_pane.getTextArea
if (buffer != null && text_area != null) { if (what == EditPaneUpdate.BUFFER_CHANGED || what == EditPaneUpdate.CREATED) { if (session.is_ready) init_view(buffer, text_area)
}
if (what == EditPaneUpdate.BUFFER_CHANGING || what == EditPaneUpdate.DESTROYED) {
Isabelle.dismissed_popups(text_area.getView)
exit_view(buffer, text_area)
}
if (what == EditPaneUpdate.CREATED) Completion_Popup.Text_Area.init(text_area)
if (what == EditPaneUpdate.DESTROYED) Completion_Popup.Text_Area.exit(text_area)
}
if (msg.isInstanceOf[PositionChanging]) {
JEdit_Mouse_Handler.jump(edit_pane)
navigator.record(Isabelle_Navigator.Pos(edit_pane))
}
case _: PropertiesChanged => for {
view <- JEdit_Lib.jedit_views()
edit_pane <- JEdit_Lib.jedit_edit_panes(view)
} { val buffer = edit_pane.getBuffer val text_area = edit_pane.getTextArea if (buffer != null && text_area != null) init_view(buffer, text_area)
}
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.