Mercurial > hg > octave-nkf
changeset 14753:c30916f904fb gui
Fixed controlling debugger from within the GUI.
* octave-event.h: Adjusted events with calls to the octave interpreter.
author | Jacob Dawid <jacob.dawid@googlemail.com> |
---|---|
date | Sat, 09 Jun 2012 18:51:35 +0200 |
parents | 564cc673bcc5 |
children | 626a8ff2fe8c |
files | gui/src/octave-adapter/octave-event.h |
diffstat | 1 files changed, 45 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/gui/src/octave-adapter/octave-event.h +++ b/gui/src/octave-adapter/octave-event.h @@ -23,6 +23,8 @@ #include "oct-env.h" #include "pt-eval.h" #include "toplev.h" +#include "parse.h" +#include "debug.h" #include <readline/readline.h> @@ -51,7 +53,7 @@ /** Performs what is necessary to make this event happen. * This code is thread-safe since it will be executed in the octave thread. * However, you should take care to keep this code as short as possible. */ - virtual bool perform () const = 0; + virtual bool perform () = 0; /** * Accepts this event. This allows the event observer to react properly @@ -67,6 +69,25 @@ void reject () { _octave_event_observer.event_reject (this); } + protected: + void call_octave_function (std::string name, + const octave_value_list& args = octave_value_list (), + int nargout = 0) + { + try + { + feval (name, args, nargout); + } catch (...) { } // Ignore exceptions. Crashes without that. + } + + void finish_readline_event () const + { + rl_line_buffer[0] = '\0'; + rl_point = rl_end = 0; + rl_done = 1; + //rl_forced_update_display (); + } + private: octave_event_observer& _octave_event_observer; }; @@ -79,7 +100,7 @@ : octave_event (o) { } - bool perform () const + bool perform () { return true; /* Always grant. */ } }; @@ -91,7 +112,7 @@ : octave_event (o) { } - bool perform () const + bool perform () { return true; /* Always grant. */ } }; @@ -104,7 +125,7 @@ : octave_event (o) { } - bool perform () const + bool perform () { clean_up_and_exit (0); return true; } }; @@ -118,7 +139,7 @@ : octave_event (o) { _directory = directory; } - bool perform () const + bool perform () { return octave_env::chdir (_directory); } private: @@ -132,9 +153,12 @@ octave_debug_step_into_event (octave_event_observer& o) : octave_event (o) { } - bool perform () const + bool perform () { - tree_evaluator::dbstep_flag = -1; + octave_value_list args; + args.append (octave_value ("in")); + call_octave_function ("dbstep", args); + finish_readline_event (); return true; } }; @@ -146,9 +170,10 @@ octave_debug_step_over_event (octave_event_observer& o) : octave_event (o) { } - bool perform () const + bool perform () { - tree_evaluator::dbstep_flag = 1; + call_octave_function ("dbnext"); + finish_readline_event (); return true; } }; @@ -160,9 +185,12 @@ octave_debug_step_out_event (octave_event_observer& o) : octave_event (o) { } - bool perform () const + bool perform () { - tree_evaluator::dbstep_flag = -2; + octave_value_list args; + args.append (octave_value ("out")); + call_octave_function ("dbstep", args); + finish_readline_event (); return true; } }; @@ -174,9 +202,10 @@ octave_debug_continue_event (octave_event_observer& o) : octave_event (o) { } - bool perform () const + bool perform () { - tree_evaluator::dbstep_flag = 0; + call_octave_function ("dbcont"); + finish_readline_event (); return true; } }; @@ -188,9 +217,10 @@ octave_debug_quit_event (octave_event_observer& o) : octave_event (o) { } - bool perform () const + bool perform () { - tree_evaluator::dbstep_flag = 0; + call_octave_function ("dbquit"); + finish_readline_event (); return true; } };