Mercurial > octave
diff libinterp/corefcn/event-manager.h @ 27302:5f170ea12fa1
use Qt signals to pass interpreter callbacks to octave-qobject
* interpreter-qobject.h, interpreter-qobject.cc
(interpreter_qobject::m_interpreter): New data member.
(interpreter_qobject::execute): Cache pointer to interpreter after it
is created. Set it to nullptr before exiting to disable interpreter
events.
(interpreter_qobject::interpreter_event): New functions.
* octave-qobject.h, octave-qobject.cc
(octave_qapplication::interpreter_event): New signals.
(base_qobject::interpreter_event): New slots. Forward action to
m_interpreter object interpreter_event functions.
(base_qobject::base_qobject): Connect interpreter_event
signals for octave_qapplication to the base_qobject::interpreter_event
slots.
(octave_qapplication::notify): Emit interpreter_event signal instead
of using event_manager::post_exception.
* qt-interpreter-events.cc: Declare and register octave::fcn_callback
and octave::meth_callback as Qt meta types.
* event-manager.h, event-manager.cc (event_manager::m_interpreter):
New data member. Update constructor, change all uses.
(octave::fcn_callback, octave::meth_callback): New typedefs.
(event_manager::post_event): Limit allowable callback function
signatures. For meth_callback functions, arrange for a reference to
the interpreter object to be passed as the first argument.
(event_manager::post_exception): Delete.
(event_manager::rethrow_exception_callback): Delete.
* GLCanvas.cc (GLCanvas::do_print): Use event_manager::post_event
instead of event_manager::post_exception.
* file-editor-tab.h (file_eitor_tab::interpreter_event): New signals.
* file-editor.cc (file_editor::add_file_editor_tab): Forward
interpreter_event signal from newly constructed file_editor_tab object
to the interpreter_event signal of the file_editor object.
* main-window.h, main-window.cc (main_window::construct):
Connect the interpreter_event signal from the main_window object to
the parent octave_qobject object.
(main_window::interpreter_event): New signals.
* octave-dock-widget.h, octave-dock-widget.cc
(octave_dock_widget::octave_dock_widget) Forward the interpreter_event
signal from the octave_dock_widget object to the interpreter_event
signal for parent main_window object.
(octave_dock_widget::interpreter_event): New signals.
* variable-editor-model.h, variable-editor-model.cc
(variable_editor_model::init_from_oct,
variable_editor_model::retrieve_variable): Accept reference to
interpreter object as an argument. Change all uses.
(variable_editor_model::interpreter_event): New signals.
* variable-editor.cc (variable_editor::edit_variable):
Forward interpreter_event signal from newly constructed
variable_editor_model to interpreter_event signal fro variable_editor
object.
* files-dock-widget.cc, file-editor-tab.cc, main-window.cc,
variable-editor-model.cc: In all functions that need to perform
interpreter actions, emit an interpreter_event signal instead of
accessing the interprter event_manager and calling
post_interpreter_event directly.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Mon, 29 Jul 2019 10:43:04 -0400 |
parents | 6c438195f4e0 |
children | 0040b7668518 |
line wrap: on
line diff
--- a/libinterp/corefcn/event-manager.h Sun Jul 28 17:24:42 2019 -0400 +++ b/libinterp/corefcn/event-manager.h Mon Jul 29 10:43:04 2019 -0400 @@ -27,6 +27,7 @@ #include "octave-config.h" +#include <functional> #include <list> #include <memory> #include <string> @@ -41,6 +42,9 @@ namespace octave { + typedef std::function<void (void)> fcn_callback; + typedef std::function<void (octave::interpreter&)> meth_callback; + class symbol_info_list; // The methods in this class provide a way to pass signals to the GUI @@ -219,7 +223,7 @@ { public: - event_manager (void); + event_manager (interpreter& interp); // No copying! @@ -262,24 +266,16 @@ // The queued functions are executed when the interpreter is // otherwise idle. - template <typename F, typename... Args> - void post_event (F&& fcn, Args&&... args) + void post_event (const fcn_callback& fcn) { if (enabled ()) - gui_event_queue.add (fcn, std::forward<Args> (args)...); + gui_event_queue.add (fcn); } - template <typename T, typename... Params, typename... Args> - void post_event (T *obj, void (T::*method) (Params...), Args&&... args) + void post_event (const meth_callback& meth) { if (enabled ()) - gui_event_queue.add_method (obj, method, std::forward<Args> (args)...); - } - - void post_exception (const std::exception_ptr& p) - { - if (enabled ()) - post_event (this, &event_manager::rethrow_exception_callback, p); + gui_event_queue.add (std::bind (meth, std::ref (m_interpreter))); } // The following functions correspond to the virtual fuunctions in @@ -549,6 +545,8 @@ private: + interpreter& m_interpreter; + // Using a shared_ptr to manage the link_events object ensures that it // will be valid until it is no longer needed. @@ -564,11 +562,6 @@ bool debugging; bool link_enabled; - - void rethrow_exception_callback (const std::exception_ptr& p) - { - std::rethrow_exception (p); - } }; }