diff gui/src/m-editor/file-editor-tab.cc @ 14825:eae0e9f2a8c6 gui

Added menus, markers and methods to visualize debugging in the editor and add, remove and navigate breakpoints* . * arrow_right.png: Icon to indicate debugger position. * redled.png: Icon for a breakpoint. * file-editor-tab: Added methods to add/remove breakpoints and menu entries. * file-editor: Added methods to add/remove breakpoints and menu entries. * resource.qrc: Added new icons to resource file.
author Jacob Dawid <jacob.dawid@googlemail.com>
date Mon, 02 Jul 2012 09:31:30 +0200
parents a565c560e654
children ed0f820c7ce0
line wrap: on
line diff
--- a/gui/src/m-editor/file-editor-tab.cc
+++ b/gui/src/m-editor/file-editor-tab.cc
@@ -30,10 +30,14 @@
   _edit_area = new QsciScintilla (this);
   _edit_area->setLexer (fileEditor->lexer ());
 
-  // markers
+  // symbols
   _edit_area->setMarginType (1, QsciScintilla::SymbolMargin);
   _edit_area->setMarginSensitivity (1, true);
-  _edit_area->markerDefine (QsciScintilla::RightTriangle, MARKER_BOOKMARK);
+  _edit_area->markerDefine (QsciScintilla::RightTriangle, bookmark);
+  _edit_area->markerDefine (QImage (":/actions/icons/redled.png"), breakpoint);
+  _edit_area->markerDefine (QImage (":/actions/icons/arrow_right.png"),
+                            debugger_position);
+
   connect (_edit_area, SIGNAL (marginClicked (int, int, Qt::KeyboardModifiers)),
            this, SLOT (handle_margin_clicked (int, int, Qt::KeyboardModifiers)));
 
@@ -47,8 +51,8 @@
       _edit_area->setMarginsFont( marginFont );
       QFontMetrics metrics(marginFont);
       _edit_area->setMarginType (2, QsciScintilla::TextMargin);
-      _edit_area->setMarginWidth(2, metrics.width("99999"));
-      _edit_area->setMarginLineNumbers(2, true);
+      _edit_area->setMarginWidth(2, metrics.width("9999"));
+      _edit_area->setMarginLineNumbers (2, true);
     }
 
   // code folding
@@ -150,13 +154,24 @@
 file_editor_tab::handle_margin_clicked(int margin, int line, Qt::KeyboardModifiers state)
 {
   Q_UNUSED (state);
-  if (margin == 1)  // marker margin
+  if (margin == 1)
     {
       unsigned int mask = _edit_area->markersAtLine (line);
-      if (mask && (1 << MARKER_BOOKMARK))
-        _edit_area->markerDelete(line,MARKER_BOOKMARK);
+
+      if (state & Qt::ControlModifier)
+        {
+          if (mask && (1 << bookmark))
+            _edit_area->markerDelete(line,bookmark);
+          else
+            _edit_area->markerAdd(line,bookmark);
+        }
       else
-        _edit_area->markerAdd(line,MARKER_BOOKMARK);
+        {
+          if (mask && (1 << breakpoint))
+            _edit_area->markerDelete(line,breakpoint);
+          else
+            _edit_area->markerAdd(line,breakpoint);
+        }
     }
 }
 
@@ -271,40 +286,79 @@
 void
 file_editor_tab::remove_bookmark ()
 {
-  _edit_area->markerDeleteAll(MARKER_BOOKMARK);
+  _edit_area->markerDeleteAll (bookmark);
 }
 
 void
 file_editor_tab::toggle_bookmark ()
 {
-  int line,cur;
-  _edit_area->getCursorPosition(&line,&cur);
-  if ( _edit_area->markersAtLine (line) && (1 << MARKER_BOOKMARK) )
-    _edit_area->markerDelete(line,MARKER_BOOKMARK);
+  int line, cur;
+  _edit_area->getCursorPosition (&line,&cur);
+  if ( _edit_area->markersAtLine (line) && (1 << bookmark) )
+    _edit_area->markerDelete (line, bookmark);
   else
-    _edit_area->markerAdd(line,MARKER_BOOKMARK);
+    _edit_area->markerAdd (line, bookmark);
 }
 
 void
-file_editor_tab::next_bookmark ()
+file_editor_tab::next_bookmark()
 {
-  int line,cur,nextline;
-  _edit_area->getCursorPosition(&line,&cur);
-  if ( _edit_area->markersAtLine(line) && (1 << MARKER_BOOKMARK) )
-    line++; // we have a bookmark here, so start search from next line
-  nextline = _edit_area->markerFindNext(line,(1 << MARKER_BOOKMARK));
-  _edit_area->setCursorPosition(nextline,0);
+  int line, cur, nextline;
+  _edit_area->getCursorPosition (&line, &cur);
+  if ( _edit_area->markersAtLine (line) && (1 << bookmark) )
+    line++; // we have a breakpoint here, so start search from next line
+  nextline = _edit_area->markerFindNext (line, (1 << bookmark));
+  _edit_area->setCursorPosition (nextline, 0);
 }
 
 void
 file_editor_tab::previous_bookmark ()
 {
-  int line,cur,prevline;
-  _edit_area->getCursorPosition(&line,&cur);
-  if ( _edit_area->markersAtLine(line) && (1 << MARKER_BOOKMARK) )
-    line--; // we have a bookmark here, so start search from prev line
-  prevline = _edit_area->markerFindPrevious(line,(1 << MARKER_BOOKMARK));
-  _edit_area->setCursorPosition(prevline,0);
+  int line, cur, prevline;
+  _edit_area->getCursorPosition (&line, &cur);
+  if ( _edit_area->markersAtLine (line) && (1 << bookmark) )
+    line--; // we have a breakpoint here, so start search from prev line
+  prevline = _edit_area->markerFindPrevious (line, (1 << bookmark));
+  _edit_area->setCursorPosition (prevline, 0);
+}
+
+void
+file_editor_tab::remove_breakpoint ()
+{
+    _edit_area->markerDeleteAll (breakpoint);
+}
+
+void
+file_editor_tab::toggle_breakpoint ()
+{
+  int line, cur;
+  _edit_area->getCursorPosition (&line,&cur);
+  if ( _edit_area->markersAtLine (line) && (1 << breakpoint) )
+    _edit_area->markerDelete (line, breakpoint);
+  else
+    _edit_area->markerAdd (line, breakpoint);
+}
+
+void
+file_editor_tab::next_breakpoint ()
+{
+  int line, cur, nextline;
+  _edit_area->getCursorPosition (&line, &cur);
+  if ( _edit_area->markersAtLine (line) && (1 << breakpoint) )
+    line++; // we have a breakpoint here, so start search from next line
+  nextline = _edit_area->markerFindNext (line, (1 << breakpoint));
+  _edit_area->setCursorPosition (nextline, 0);
+}
+
+void
+file_editor_tab::previous_breakpoint ()
+{
+  int line, cur, prevline;
+  _edit_area->getCursorPosition (&line, &cur);
+  if ( _edit_area->markersAtLine (line) && (1 << breakpoint) )
+    line--; // we have a breakpoint here, so start search from prev line
+  prevline = _edit_area->markerFindPrevious (line, (1 << breakpoint));
+  _edit_area->setCursorPosition (prevline, 0);
 }
 
 void
@@ -338,6 +392,16 @@
 }
 
 void
+file_editor_tab::set_debugger_position (int line)
+{
+  _edit_area->markerDeleteAll (debugger_position);
+  if (line > 0)
+    {
+      _edit_area->markerAdd (line, debugger_position);
+    }
+}
+
+void
 file_editor_tab::set_modified (bool modified)
 {
   _edit_area->setModified (modified);