changeset 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 9c0959a1dc7b
children ed0f820c7ce0
files gui/src/icons/arrow_right.png gui/src/icons/redled.png gui/src/m-editor/file-editor-tab.cc gui/src/m-editor/file-editor-tab.h gui/src/m-editor/file-editor.cc gui/src/m-editor/file-editor.h gui/src/resource.qrc
diffstat 7 files changed, 157 insertions(+), 31 deletions(-) [+]
line wrap: on
line diff
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..5587ddee1c2a3b144104b36b6165d7f571ae4136
GIT binary patch
literal 3324
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
GLSTZIU@G4L
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..afa477274e2bb7c27cb67bad87551e5910880b71
GIT binary patch
literal 494
zc%17D@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xa&H|6fVg?3oArNM~bhqvgP>?0v
z(btiIVPjv-@4(4GzCyA`kS_y6l_~>6Lo)-z&;LOBB?CjL0RzLU1O^7H84L{K`IF+0
zx-l>?rg*wIhE&{2`t$$4J+mc)LPLZDi?Xuv4CBd-j*K2xnF|>NxE-$6Fg)UQxHIG2
zfe#ES44Zfq8YB*~1SkhgW(>&LUs%=CFl!wL^ZWPHd3f&cH?FDsJN4nUpXog5{4uPO
z4>+#WFfL(NXgDC1ZfMk$V<o?5MYzL{r*>>@=j9t`)j56O7x>%#@U6O7+t%6n%_h>z
z{{H_DbjFMY=T@@cWV!Z*Ggg@6e}cfj-+c!oTB8|WiLx~?G-dKISn|6HbJRPh{Z9yZ
z{P!foS9@j$hK&xUTn>M}FlU_B*D-T4(0?q?7O{YlMS$C;W`Aw7*0F^jzspZ~!N8#~
zBiJ73Ox}0$Jj<O-|Ni3cmjj!6r{MJ=<0%IkZg-?yKD%9Ds{)fkLxPmF<Hs-GjHOo@
zPc+&4_uPSkca}G{xe3TCG#Cgo7@W9TQD^YM=x?hve~Pfj<@5VHSQrEx3VN5QSvD{v
gshCe>W|3g97rDFIe2w@bVB9cxy85}Sb4q9e07w(HNB{r;
--- 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);
--- a/gui/src/m-editor/file-editor-tab.h
+++ b/gui/src/m-editor/file-editor-tab.h
@@ -46,11 +46,16 @@
   void toggle_bookmark ();
   void next_bookmark ();
   void previous_bookmark ();
+  void remove_breakpoint ();
+  void toggle_breakpoint ();
+  void next_breakpoint ();
+  void previous_breakpoint ();
   void cut ();
   void copy ();
   void paste ();
   void undo ();
   void redo ();
+  void set_debugger_position (int line);
 
   void set_modified (bool modified = true);
 
--- a/gui/src/m-editor/file-editor.cc
+++ b/gui/src/m-editor/file-editor.cc
@@ -202,6 +202,38 @@
 }
 
 void
+file_editor::request_toggle_breakpoint ()
+{
+  file_editor_tab *activeFileEditorTab = active_editor_tab ();
+  if (activeFileEditorTab)
+    activeFileEditorTab->toggle_breakpoint ();
+}
+
+void
+file_editor::request_next_breakpoint ()
+{
+  file_editor_tab *activeFileEditorTab = active_editor_tab ();
+  if (activeFileEditorTab)
+    activeFileEditorTab->next_breakpoint ();
+}
+
+void
+file_editor::request_previous_breakpoint ()
+{
+  file_editor_tab *activeFileEditorTab = active_editor_tab ();
+  if (activeFileEditorTab)
+    activeFileEditorTab->previous_breakpoint ();
+}
+
+void
+file_editor::request_remove_breakpoint ()
+{
+  file_editor_tab *activeFileEditorTab = active_editor_tab ();
+  if (activeFileEditorTab)
+    activeFileEditorTab->remove_breakpoint ();
+}
+
+void
 file_editor::request_comment_selected_text ()
 {
   file_editor_tab *activeFileEditorTab = active_editor_tab ();
@@ -319,6 +351,12 @@
   QAction *previous_bookmark_action   = new QAction (tr ("Pre&vious Bookmark"),_tool_bar);
   QAction *toggle_bookmark_action     = new QAction (tr ("Toggle &Bookmark"),_tool_bar);
   QAction *remove_bookmark_action     = new QAction (tr ("&Remove All Bookmarks"),_tool_bar);
+
+  QAction *next_breakpoint_action       = new QAction (tr ("&Next breakpoint"),_tool_bar);
+  QAction *previous_breakpoint_action   = new QAction (tr ("Pre&vious breakpoint"),_tool_bar);
+  QAction *toggle_breakpoint_action     = new QAction (tr ("Toggle &breakpoint"),_tool_bar);
+  QAction *remove_breakpoint_action     = new QAction (tr ("&Remove All breakpoints"),_tool_bar);
+
   QAction *comment_selection_action   = new QAction (tr ("&Comment Selected Text"),_tool_bar);
   QAction *uncomment_selection_action = new QAction (tr ("&Uncomment Selected Text"),_tool_bar);
 
@@ -403,6 +441,12 @@
   _menu_bar->addMenu (editMenu);
 
   _debug_menu = new QMenu (tr ("&Debug"), _menu_bar);
+  _debug_menu->addAction (toggle_breakpoint_action);
+  _debug_menu->addAction (next_breakpoint_action);
+  _debug_menu->addAction (previous_breakpoint_action);
+  _debug_menu->addAction (remove_breakpoint_action);
+  _debug_menu->addSeparator ();
+  // The other debug actions will be added by the main window.
   _menu_bar->addMenu (_debug_menu);
 
   QMenu *runMenu = new QMenu (tr ("&Run"), _menu_bar);
@@ -431,6 +475,10 @@
   connect (next_bookmark_action,      SIGNAL (triggered ()), this, SLOT (request_next_bookmark ()));
   connect (previous_bookmark_action,      SIGNAL (triggered ()), this, SLOT (request_previous_bookmark ()));
   connect (remove_bookmark_action,    SIGNAL (triggered ()), this, SLOT (request_remove_bookmark ()));
+  connect (toggle_breakpoint_action,    SIGNAL (triggered ()), this, SLOT (request_toggle_breakpoint ()));
+  connect (next_breakpoint_action,      SIGNAL (triggered ()), this, SLOT (request_next_breakpoint ()));
+  connect (previous_breakpoint_action,      SIGNAL (triggered ()), this, SLOT (request_previous_breakpoint ()));
+  connect (remove_breakpoint_action,    SIGNAL (triggered ()), this, SLOT (request_remove_breakpoint ()));
   connect (comment_selection_action,   SIGNAL (triggered ()), this, SLOT (request_comment_selected_text ()));
   connect (uncomment_selection_action, SIGNAL (triggered ()), this, SLOT (request_uncomment_selected_text ()));
   connect (_tab_widget, SIGNAL (tabCloseRequested (int)), this, SLOT (handle_tab_close_request (int)));
--- a/gui/src/m-editor/file-editor.h
+++ b/gui/src/m-editor/file-editor.h
@@ -35,10 +35,11 @@
 
 const char UNNAMED_FILE[]     = "<unnamed>";
 const char SAVE_FILE_FILTER[] = "Octave Files (*.m);;All Files (*.*)";
-enum MARKER
+enum editor_markers
   {
-    MARKER_BOOKMARK,
-    MARKER_BREAKPOINT
+    bookmark,
+    breakpoint,
+    debugger_position
   };
 
 class file_editor : public file_editor_interface
@@ -73,6 +74,12 @@
   void request_next_bookmark ();
   void request_previous_bookmark ();
   void request_remove_bookmark ();
+
+  void request_toggle_breakpoint ();
+  void request_next_breakpoint ();
+  void request_previous_breakpoint ();
+  void request_remove_breakpoint ();
+
   void request_comment_selected_text ();
   void request_uncomment_selected_text ();
 
@@ -93,7 +100,7 @@
   QAction*          _copy_action;
   QAction*          _cut_action;
   QTabWidget *      _tab_widget;
-  int               _marker_bookmark;
+  int               _marker_breakpoint;
   lexer_octave_gui *_lexer;
   QsciAPIs *        _lexer_api;
 };
--- a/gui/src/resource.qrc
+++ b/gui/src/resource.qrc
@@ -13,5 +13,7 @@
         <file>icons/up.png</file>
         <file>icons/configure.png</file>
         <file>icons/filesaveas.png</file>
+        <file>icons/redled.png</file>
+        <file>icons/arrow_right.png</file>
     </qresource>
 </RCC>