changeset 14726:e94a54ee0f46 gui

Added debug events, debug mode detection and fixed compiling error. * main-window: Added new slots reacting on debug mode changes. * octave-event-listener: Extended interface to transmit debug mode changes. * octave-event: Added a lot of debug events. * octave-link: Added code to detect the change of the debug mode flag. * octave-qt-event-listener: Implemented new interface methods. * workspace-view.h: Added missing #include.
author Jacob Dawid <jacob.dawid@googlemail.com>
date Tue, 05 Jun 2012 14:41:22 +0200
parents 7784625acf66
children f34984656658
files gui/src/main-window.cc gui/src/main-window.h gui/src/octave-adapter/octave-event-listener.h gui/src/octave-adapter/octave-event.h gui/src/octave-adapter/octave-link.cc gui/src/octave-adapter/octave-link.h gui/src/octave-qt-event-listener.cc gui/src/octave-qt-event-listener.h gui/src/workspace-view.h
diffstat 9 files changed, 162 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/gui/src/main-window.cc	Mon Jun 04 22:30:08 2012 +0200
+++ b/gui/src/main-window.cc	Tue Jun 05 14:41:22 2012 +0200
@@ -35,13 +35,6 @@
 {
   // We have to set up all our windows, before we finally launch octave.
   construct ();
-  _octave_qt_event_listener = new octave_qt_event_listener ();
-  octave_link::instance ()->register_event_listener (_octave_qt_event_listener);
-
-  connect (_octave_qt_event_listener,
-           SIGNAL (current_directory_changed(QString)),
-           this,
-           SLOT (update_current_working_directory(QString)));
 
   octave_link::instance ()->launch_octave();
 }
@@ -210,6 +203,19 @@
   _terminal->setFocus ();
 }
 
+
+void
+main_window::handle_entered_debug_mode ()
+{
+  setWindowTitle ("Octave (Debugging)");
+}
+
+void
+main_window::handle_quit_debug_mode ()
+{
+  setWindowTitle ("Octave");
+}
+
 void
 main_window::show_about_octave ()
 {
@@ -467,5 +473,23 @@
   addDockWidget (Qt::BottomDockWidgetArea, _terminal_dock_widget);
   setStatusBar (_status_bar);
   read_settings ();
+
+  _octave_qt_event_listener = new octave_qt_event_listener ();
+  octave_link::instance ()->register_event_listener (_octave_qt_event_listener);
+
+  connect (_octave_qt_event_listener,
+           SIGNAL (current_directory_has_changed_signal (QString)),
+           this,
+           SLOT (update_current_working_directory (QString)));
+
+  connect (_octave_qt_event_listener,
+           SIGNAL (entered_debug_mode_signal ()),
+           this,
+           SLOT(handle_entered_debug_mode ()));
+
+  connect (_octave_qt_event_listener,
+           SIGNAL (quit_debug_mode_signal ()),
+           this,
+           SLOT (handle_quit_debug_mode ()));
 }
 
--- a/gui/src/main-window.h	Mon Jun 04 22:30:08 2012 +0200
+++ b/gui/src/main-window.h	Tue Jun 05 14:41:22 2012 +0200
@@ -91,6 +91,9 @@
   void change_current_working_directory (QString directory);
   void current_working_directory_up ();
 
+  void handle_entered_debug_mode ();
+  void handle_quit_debug_mode ();
+
 protected:
   void closeEvent (QCloseEvent * closeEvent);
   void read_settings ();
--- a/gui/src/octave-adapter/octave-event-listener.h	Mon Jun 04 22:30:08 2012 +0200
+++ b/gui/src/octave-adapter/octave-event-listener.h	Tue Jun 05 14:41:22 2012 +0200
@@ -28,6 +28,9 @@
 
     virtual void current_directory_has_changed (std::string directory) = 0;
     virtual void about_to_exit () = 0;
+
+    virtual void entered_debug_mode () = 0;
+    virtual void quit_debug_mode () = 0;
 };
 
 #endif // OCTAVEEVENTLISTENER_H
--- a/gui/src/octave-adapter/octave-event.h	Mon Jun 04 22:30:08 2012 +0200
+++ b/gui/src/octave-adapter/octave-event.h	Tue Jun 05 14:41:22 2012 +0200
@@ -21,8 +21,11 @@
 #include <string>
 #include "octave-event-observer.h"
 #include "oct-env.h"
+#include "pt-eval.h"
 #include "toplev.h"
 
+#include <readline/readline.h>
+
 /**
   * \class octave_event
   * \brief Base class for an octave event.
@@ -122,4 +125,94 @@
     std::string _directory;
 };
 
+class octave_debug_step_into_event : public octave_event
+{
+  public:
+    /** Creates a new octave_debug_step_into_event. */
+    octave_debug_step_into_event (octave_event_observer& o)
+      : octave_event (o) { }
+
+    bool perform () const
+    {
+      tree_evaluator::dbstep_flag = -1;
+      rl_line_buffer[0] = '\0';
+      rl_point = rl_end = 0;
+      rl_done = 1;
+      rl_forced_update_display ();
+      return true;
+    }
+};
+
+class octave_debug_step_over_event : public octave_event
+{
+  public:
+    /** Creates a new octave_debug_step_over_event. */
+    octave_debug_step_over_event (octave_event_observer& o)
+      : octave_event (o) { }
+
+    bool perform () const
+    {
+      tree_evaluator::dbstep_flag = 1;
+      rl_line_buffer[0] = '\0';
+      rl_point = rl_end = 0;
+      rl_done = 1;
+      rl_forced_update_display ();
+      return true;
+    }
+};
+
+class octave_debug_step_out_event : public octave_event
+{
+  public:
+    /** Creates a new octave_debug_step_out_event. */
+    octave_debug_step_out_event (octave_event_observer& o)
+      : octave_event (o) { }
+
+    bool perform () const
+    {
+      tree_evaluator::dbstep_flag = -2;
+      rl_line_buffer[0] = '\0';
+      rl_point = rl_end = 0;
+      rl_done = 1;
+      rl_forced_update_display ();
+      return true;
+    }
+};
+
+class octave_debug_step_continue_event : public octave_event
+{
+  public:
+    /** Creates a new octave_debug_step_out_event. */
+    octave_debug_step_continue_event (octave_event_observer& o)
+      : octave_event (o) { }
+
+    bool perform () const
+    {
+      tree_evaluator::dbstep_flag = 0;
+      rl_line_buffer[0] = '\0';
+      rl_point = rl_end = 0;
+      rl_done = 1;
+      rl_forced_update_display ();
+      return true;
+    }
+};
+
+class octave_debug_step_break_event : public octave_event
+{
+  public:
+    /** Creates a new octave_debug_step_out_event. */
+    octave_debug_step_break_event (octave_event_observer& o)
+      : octave_event (o) { }
+
+    bool perform () const
+    {
+      tree_evaluator::dbstep_flag = 0;
+      rl_line_buffer[0] = '\0';
+      rl_point = rl_end = 0;
+      rl_done = 1;
+      rl_forced_update_display ();
+      return true;
+    }
+};
+
 #endif // OCTAVEEVENT_H
--- a/gui/src/octave-adapter/octave-link.cc	Mon Jun 04 22:30:08 2012 +0200
+++ b/gui/src/octave-adapter/octave-link.cc	Tue Jun 05 14:41:22 2012 +0200
@@ -70,6 +70,18 @@
         _octave_event_listener
             ->current_directory_has_changed (_last_working_directory);
     }
+
+  if (_debugging_mode_active != tree_evaluator::debug_mode)
+    {
+      _debugging_mode_active = tree_evaluator::debug_mode;
+      if (_octave_event_listener)
+        {
+          if (_debugging_mode_active)
+            _octave_event_listener->entered_debug_mode ();
+          else
+            _octave_event_listener->quit_debug_mode ();
+        }
+    }
 }
 
 void
--- a/gui/src/octave-adapter/octave-link.h	Mon Jun 04 22:30:08 2012 +0200
+++ b/gui/src/octave-adapter/octave-link.h	Tue Jun 05 14:41:22 2012 +0200
@@ -110,6 +110,7 @@
 
   /** Stores the last known current working directory of octave. */
   std::string _last_working_directory;
+  bool _debugging_mode_active;
 
   /** Unique instance. Singelton! */
   static octave_link _singleton;
--- a/gui/src/octave-qt-event-listener.cc	Mon Jun 04 22:30:08 2012 +0200
+++ b/gui/src/octave-qt-event-listener.cc	Tue Jun 05 14:41:22 2012 +0200
@@ -25,10 +25,21 @@
 
 void
 octave_qt_event_listener::current_directory_has_changed (std::string directory)
-{ emit current_directory_changed (QString::fromStdString (directory)); }
+{
+  emit current_directory_has_changed_signal
+      (QString::fromStdString (directory));
+}
 
 void
 octave_qt_event_listener::about_to_exit ()
 {
   qApp->quit ();
 }
+
+void
+octave_qt_event_listener::entered_debug_mode ()
+{ emit entered_debug_mode_signal (); }
+
+void
+octave_qt_event_listener::quit_debug_mode ()
+{ emit quit_debug_mode_signal (); }
--- a/gui/src/octave-qt-event-listener.h	Mon Jun 04 22:30:08 2012 +0200
+++ b/gui/src/octave-qt-event-listener.h	Tue Jun 05 14:41:22 2012 +0200
@@ -32,8 +32,13 @@
     void current_directory_has_changed (std::string directory);
     void about_to_exit ();
 
+    void entered_debug_mode ();
+    void quit_debug_mode ();
+
   signals:
-    void current_directory_changed (QString directory);
+    void current_directory_has_changed_signal (QString directory);
+    void entered_debug_mode_signal ();
+    void quit_debug_mode_signal ();
 };
 
 #endif // OCTAVEQTEVENTLISTENER_H
--- a/gui/src/workspace-view.h	Mon Jun 04 22:30:08 2012 +0200
+++ b/gui/src/workspace-view.h	Tue Jun 05 14:41:22 2012 +0200
@@ -22,6 +22,7 @@
 #include <QTreeView>
 #include <QSemaphore>
 #include "octave-link.h"
+#include "workspace-model.h"
 
 class workspace_view : public QDockWidget
 {