src/Tools/jEdit/src/debugger_dockable.scala
changeset 60878 1f0d2bbcf38b
parent 60876 52edced9cce5
child 60880 fa958e24ff24
--- a/src/Tools/jEdit/src/debugger_dockable.scala	Mon Aug 10 16:14:50 2015 +0200
+++ b/src/Tools/jEdit/src/debugger_dockable.scala	Mon Aug 10 17:49:36 2015 +0200
@@ -12,7 +12,7 @@
 import java.awt.{BorderLayout, Dimension}
 import java.awt.event.{ComponentEvent, ComponentAdapter, KeyEvent, MouseEvent, MouseAdapter,
   FocusAdapter, FocusEvent}
-import javax.swing.{JTree, JScrollPane}
+import javax.swing.{JTree, JScrollPane, JMenuItem}
 import javax.swing.tree.{DefaultMutableTreeNode, DefaultTreeModel, TreeSelectionModel}
 import javax.swing.event.{TreeSelectionEvent, TreeSelectionListener}
 
@@ -20,10 +20,14 @@
 import scala.swing.event.ButtonClicked
 
 import org.gjt.sp.jedit.{jEdit, View}
+import org.gjt.sp.jedit.menu.EnhancedMenuItem
+import org.gjt.sp.jedit.textarea.JEditTextArea
 
 
 object Debugger_Dockable
 {
+  /* state entries */
+
   sealed case class Thread_Entry(thread_name: String, debug_states: List[Debugger.Debug_State])
   {
     override def toString: String = thread_name
@@ -33,6 +37,41 @@
   {
     override def toString: String = debug_state.function
   }
+
+
+  /* breakpoints */
+
+  def toggle_breakpoint(serial: Long)
+  {
+    GUI_Thread.require {}
+
+    Debugger.toggle_breakpoint(serial)
+    jEdit.propertiesChanged()
+  }
+
+  def get_breakpoint(text_area: JEditTextArea, offset: Text.Offset): Option[Long] =
+  {
+    GUI_Thread.require {}
+
+    PIDE.document_view(text_area) match {
+      case Some(doc_view) =>
+        val rendering = doc_view.get_rendering()
+        val range = JEdit_Lib.point_range(text_area.getBuffer, offset)
+        rendering.breakpoints(range).headOption
+      case None => None
+    }
+  }
+
+
+  /* context menu */
+
+  def context_menu(text_area: JEditTextArea, offset: Text.Offset): List[JMenuItem] =
+    if (get_breakpoint(text_area, offset).isDefined) {
+      val context = jEdit.getActionContext()
+      val name = "isabelle.toggle-breakpoint"
+      List(new EnhancedMenuItem(context.getAction(name).getLabel, name, context))
+    }
+    else Nil
 }
 
 class Debugger_Dockable(view: View, position: String) extends Dockable(view, position)