tuned signature -- more abstract PIDE editor operations;
authorwenzelm
Mon, 12 Aug 2013 11:39:29 +0200
changeset 52971 31926d2c04ee
parent 52963 96754402c851
child 52972 8fd8e1c14988
tuned signature -- more abstract PIDE editor operations;
src/Pure/PIDE/editor.scala
src/Pure/build-jars
src/Tools/jEdit/lib/Tools/jedit
src/Tools/jEdit/src/find_dockable.scala
src/Tools/jEdit/src/jedit_editor.scala
src/Tools/jEdit/src/plugin.scala
src/Tools/jEdit/src/query_operation.scala
src/Tools/jEdit/src/sledgehammer_dockable.scala
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Pure/PIDE/editor.scala	Mon Aug 12 11:39:29 2013 +0200
@@ -0,0 +1,18 @@
+/*  Title:      Pure/PIDE/editor.scala
+    Author:     Makarius
+
+General editor operations.
+*/
+
+package isabelle
+
+
+abstract class Editor[Context]
+{
+  def session: Session
+  def current_context: Context
+  def current_node(context: Context): Option[Document.Node.Name]
+  def current_snapshot(context: Context): Option[Document.Snapshot]
+  def current_command(context: Context, snapshot: Document.Snapshot): Option[(Command, Text.Offset)]
+}
+
--- a/src/Pure/build-jars	Mon Aug 12 09:08:42 2013 +0200
+++ b/src/Pure/build-jars	Mon Aug 12 11:39:29 2013 +0200
@@ -35,6 +35,7 @@
   PIDE/command.scala
   PIDE/document.scala
   PIDE/document_id.scala
+  PIDE/editor.scala
   PIDE/markup.scala
   PIDE/markup_tree.scala
   PIDE/protocol.scala
--- a/src/Tools/jEdit/lib/Tools/jedit	Mon Aug 12 09:08:42 2013 +0200
+++ b/src/Tools/jEdit/lib/Tools/jedit	Mon Aug 12 11:39:29 2013 +0200
@@ -24,6 +24,7 @@
   "src/isabelle_logic.scala"
   "src/isabelle_options.scala"
   "src/isabelle_sidekick.scala"
+  "src/jedit_editor.scala"
   "src/jedit_lib.scala"
   "src/jedit_main.scala"
   "src/jedit_options.scala"
--- a/src/Tools/jEdit/src/find_dockable.scala	Mon Aug 12 09:08:42 2013 +0200
+++ b/src/Tools/jEdit/src/find_dockable.scala	Mon Aug 12 11:39:29 2013 +0200
@@ -46,7 +46,7 @@
   }
 
   private val find_theorems =
-    Query_Operation(view, "find_theorems", consume_status _,
+    new Query_Operation(PIDE.editor, view, "find_theorems", consume_status _,
       (snapshot, results, body) =>
         pretty_text_area.update(snapshot, results, Pretty.separate(body)))
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Tools/jEdit/src/jedit_editor.scala	Mon Aug 12 11:39:29 2013 +0200
@@ -0,0 +1,44 @@
+/*  Title:      Tools/jEdit/src/jedit_editor.scala
+    Author:     Makarius
+
+PIDE editor operations for jEdit.
+*/
+
+package isabelle.jedit
+
+
+import isabelle._
+
+
+import org.gjt.sp.jedit.{jEdit, View}
+
+
+class JEdit_Editor extends Editor[View]
+{
+  def session: Session = PIDE.session
+
+  def current_context: View =
+    Swing_Thread.require { jEdit.getActiveView() }
+
+  def current_node(view: View): Option[Document.Node.Name] =
+    Swing_Thread.require { PIDE.document_model(view.getBuffer).map(_.name) }
+
+  def current_snapshot(view: View): Option[Document.Snapshot] =
+    Swing_Thread.require { PIDE.document_model(view.getBuffer).map(_.snapshot()) }
+
+  def current_command(view: View, snapshot: Document.Snapshot): Option[(Command, Text.Offset)] =
+  {
+    Swing_Thread.require()
+
+    if (snapshot.is_outdated) None
+    else {
+      val text_area = view.getTextArea
+      PIDE.document_view(text_area) match {
+        case Some(doc_view) =>
+          val node = snapshot.version.nodes(doc_view.model.name)
+          node.command_at(text_area.getCaretPosition)
+        case None => None
+      }
+    }
+  }
+}
--- a/src/Tools/jEdit/src/plugin.scala	Mon Aug 12 09:08:42 2013 +0200
+++ b/src/Tools/jEdit/src/plugin.scala	Mon Aug 12 11:39:29 2013 +0200
@@ -47,6 +47,8 @@
     else Some(current_session.recent_syntax)
   }
 
+  lazy val editor = new JEdit_Editor
+
 
   /* document model and view */
 
--- a/src/Tools/jEdit/src/query_operation.scala	Mon Aug 12 09:08:42 2013 +0200
+++ b/src/Tools/jEdit/src/query_operation.scala	Mon Aug 12 11:39:29 2013 +0200
@@ -23,16 +23,10 @@
     val RUNNING = Value("running")
     val FINISHED = Value("finished")
   }
-
-  def apply(
-      view: View,
-      operation_name: String,
-      consume_status: Status.Value => Unit,
-      consume_output: (Document.Snapshot, Command.Results, XML.Body) => Unit) =
-    new Query_Operation(view, operation_name, consume_status, consume_output)
 }
 
-final class Query_Operation private(
+class Query_Operation(
+  editor: Editor[View],
   view: View,
   operation_name: String,
   consume_status: Query_Operation.Status.Value => Unit,
@@ -156,7 +150,7 @@
   /* query operations */
 
   def cancel_query(): Unit =
-    Swing_Thread.require { PIDE.session.cancel_exec(current_exec_id) }
+    Swing_Thread.require { editor.session.cancel_exec(current_exec_id) }
 
   def apply_query(query: List[String])
   {
@@ -221,6 +215,6 @@
     }
   }
 
-  def activate() { PIDE.session.commands_changed += main_actor }
-  def deactivate() { PIDE.session.commands_changed -= main_actor }
+  def activate() { editor.session.commands_changed += main_actor }
+  def deactivate() { editor.session.commands_changed -= main_actor }
 }
--- a/src/Tools/jEdit/src/sledgehammer_dockable.scala	Mon Aug 12 09:08:42 2013 +0200
+++ b/src/Tools/jEdit/src/sledgehammer_dockable.scala	Mon Aug 12 11:39:29 2013 +0200
@@ -46,7 +46,7 @@
   }
 
   private val sledgehammer =
-    Query_Operation(view, "sledgehammer", consume_status _,
+    new Query_Operation(PIDE.editor, view, "sledgehammer", consume_status _,
       (snapshot, results, body) =>
         pretty_text_area.update(snapshot, results, Pretty.separate(body)))