Mercurial > octave
changeset 27442:6e4519df0be2
group functions by category in interpreter_events and event_manager classes
* event-manager.h (interpreter_events, event_manager): Reorder
functions according to category.
* qt-interpreter-events.h, qt-interpreter-events.cc
(qt_interpreter_events): Likewise, so the ordering matches the
ordering in the base class.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Wed, 25 Sep 2019 13:02:50 -0400 |
parents | a36cb488fc97 |
children | 075602880383 |
files | libgui/src/qt-interpreter-events.cc libgui/src/qt-interpreter-events.h libinterp/corefcn/event-manager.h |
diffstat | 3 files changed, 503 insertions(+), 484 deletions(-) [+] |
line wrap: on
line diff
--- a/libgui/src/qt-interpreter-events.cc Wed Sep 25 10:27:33 2019 -0400 +++ b/libgui/src/qt-interpreter-events.cc Wed Sep 25 13:02:50 2019 -0400 @@ -56,147 +56,6 @@ namespace octave { - qt_interpreter_events::qt_interpreter_events (void) - : interpreter_events (), m_shutdown_confirm_result (false) - { - qRegisterMetaType<octave_value> ("octave_value"); - qRegisterMetaType<symbol_info_list> ("symbol_info_list"); - - qRegisterMetaType<fcn_callback> ("fcn_callback"); - qRegisterMetaType<meth_callback> ("meth_callback"); - } - - bool qt_interpreter_events::confirm_shutdown (void) - { - // Lock the mutex before emitting signal. - lock (); - - emit confirm_shutdown_signal (); - - // Wait while the GUI shuts down. - wait (); - - // The GUI has sent a signal and the thread has been awakened. - - unlock (); - - return m_shutdown_confirm_result; - } - - bool qt_interpreter_events::copy_image_to_clipboard (const std::string& file) - { - emit copy_image_to_clipboard_signal (QString::fromStdString (file), true); - - return true; - } - - bool qt_interpreter_events::edit_file (const std::string& file) - { - emit edit_file_signal (QString::fromStdString (file)); - - return true; - } - - bool qt_interpreter_events::prompt_new_edit_file (const std::string& file) - { - QSettings *settings = resource_manager::get_settings (); - - if (! settings || settings->value ("editor/create_new_file",false).toBool ()) - return true; - - std::string abs_fname = sys::env::make_absolute (file); - - QStringList btn; - QStringList role; - role << "YesRole" << "RejectRole"; - btn << tr ("Create") << tr ("Cancel"); - - // Lock mutex before signaling. - uiwidget_creator.lock (); - - uiwidget_creator.signal_dialog - (tr ("File\n%1\ndoes not exist. Do you want to create it?"). - arg (QString::fromStdString (abs_fname)), - tr ("Octave Editor"), "quest", btn, tr ("Create"), role); - - // Wait while the user is responding to message box. - uiwidget_creator.wait (); - - // The GUI has sent a signal and the thread has been awakened. - - QString answer = uiwidget_creator.get_dialog_button (); - - uiwidget_creator.unlock (); - - return (answer == tr ("Create")); - } - - uint8NDArray qt_interpreter_events::get_named_icon (const std::string& icon_name) - { - uint8NDArray retval; - QIcon icon = resource_manager::icon (QString::fromStdString (icon_name)); - if (! icon.isNull ()) - { - QImage img = icon.pixmap (QSize (32, 32)).toImage (); - - if (img.format () == QImage::Format_ARGB32_Premultiplied) - { - retval.resize (dim_vector (img.height (), img.width (), 4), 0); - uint8_t* bits = img.bits (); - for (int i = 0; i < img.height (); i++) - for (int j = 0; j < img.width (); j++) - { - retval(i,j,2) = bits[0]; - retval(i,j,1) = bits[1]; - retval(i,j,0) = bits[2]; - retval(i,j,3) = bits[3]; - bits += 4; - } - } - } - return retval; - } - - std::string - qt_interpreter_events::question_dialog (const std::string& msg, - const std::string& title, - const std::string& btn1, - const std::string& btn2, - const std::string& btn3, - const std::string& btndef) - { - QStringList btn; - QStringList role; - // Must use ResetRole which is left-aligned for all OS and WM. - role << "ResetRole" << "ResetRole" << "ResetRole"; - btn << QString::fromStdString (btn1); - if (btn2 == "") - role.removeAt (0); - else - btn << QString::fromStdString (btn2); - btn << QString::fromStdString (btn3); - - // Lock mutex before signaling. - uiwidget_creator.lock (); - - uiwidget_creator.signal_dialog (QString::fromStdString (msg), - QString::fromStdString (title), - "quest", btn, - QString::fromStdString (btndef), - role); - - // Wait while the user is responding to message box. - uiwidget_creator.wait (); - - // The GUI has sent a signal and the thread has been awakened. - - std::string answer = uiwidget_creator.get_dialog_button ().toStdString (); - - uiwidget_creator.unlock (); - - return answer; - } - static QStringList make_qstring_list (const std::list<std::string>& lst) { @@ -241,72 +100,14 @@ return retval; } - std::pair<std::list<int>, int> - qt_interpreter_events::list_dialog (const std::list<std::string>& list, - const std::string& mode, - int width, int height, - const std::list<int>& initial, - const std::string& name, - const std::list<std::string>& prompt, - const std::string& ok_string, - const std::string& cancel_string) + qt_interpreter_events::qt_interpreter_events (void) + : interpreter_events (), m_shutdown_confirm_result (false) { - // Lock mutex before signaling. - uiwidget_creator.lock (); - - uiwidget_creator.signal_listview (make_qstring_list (list), - QString::fromStdString (mode), - width, height, - QList<int>::fromStdList (initial), - QString::fromStdString (name), - make_qstring_list (prompt), - QString::fromStdString (ok_string), - QString::fromStdString (cancel_string)); - - // Wait while the user is responding to message box. - uiwidget_creator.wait (); - - // The GUI has sent a signal and the thread has been awakened. - - const QIntList *selected = uiwidget_creator.get_list_index (); - int ok = uiwidget_creator.get_dialog_result (); - - uiwidget_creator.unlock (); + qRegisterMetaType<octave_value> ("octave_value"); + qRegisterMetaType<symbol_info_list> ("symbol_info_list"); - return std::pair<std::list<int>, int> (selected->toStdList (), ok); - } - - std::list<std::string> - qt_interpreter_events::input_dialog (const std::list<std::string>& prompt, - const std::string& title, - const std::list<float>& nr, - const std::list<float>& nc, - const std::list<std::string>& defaults) - { - std::list<std::string> retval; - - // Lock mutex before signaling. - uiwidget_creator.lock (); - - uiwidget_creator.signal_inputlayout (make_qstring_list (prompt), - QString::fromStdString (title), - QFloatList::fromStdList (nr), - QFloatList::fromStdList (nc), - make_qstring_list (defaults)); - - // Wait while the user is responding to message box. - uiwidget_creator.wait (); - - // The GUI has sent a signal and the thread has been awakened. - - const QStringList *inputLine = uiwidget_creator.get_string_list (); - - uiwidget_creator.unlock (); - - for (auto it = inputLine->begin (); it != inputLine->end (); it++) - retval.push_back (it->toStdString ()); - - return retval; + qRegisterMetaType<fcn_callback> ("fcn_callback"); + qRegisterMetaType<meth_callback> ("meth_callback"); } std::list<std::string> @@ -346,6 +147,193 @@ return retval; } + std::list<std::string> + qt_interpreter_events::input_dialog (const std::list<std::string>& prompt, + const std::string& title, + const std::list<float>& nr, + const std::list<float>& nc, + const std::list<std::string>& defaults) + { + std::list<std::string> retval; + + // Lock mutex before signaling. + uiwidget_creator.lock (); + + uiwidget_creator.signal_inputlayout (make_qstring_list (prompt), + QString::fromStdString (title), + QFloatList::fromStdList (nr), + QFloatList::fromStdList (nc), + make_qstring_list (defaults)); + + // Wait while the user is responding to message box. + uiwidget_creator.wait (); + + // The GUI has sent a signal and the thread has been awakened. + + const QStringList *inputLine = uiwidget_creator.get_string_list (); + + uiwidget_creator.unlock (); + + for (auto it = inputLine->begin (); it != inputLine->end (); it++) + retval.push_back (it->toStdString ()); + + return retval; + } + + std::pair<std::list<int>, int> + qt_interpreter_events::list_dialog (const std::list<std::string>& list, + const std::string& mode, + int width, int height, + const std::list<int>& initial, + const std::string& name, + const std::list<std::string>& prompt, + const std::string& ok_string, + const std::string& cancel_string) + { + // Lock mutex before signaling. + uiwidget_creator.lock (); + + uiwidget_creator.signal_listview (make_qstring_list (list), + QString::fromStdString (mode), + width, height, + QList<int>::fromStdList (initial), + QString::fromStdString (name), + make_qstring_list (prompt), + QString::fromStdString (ok_string), + QString::fromStdString (cancel_string)); + + // Wait while the user is responding to message box. + uiwidget_creator.wait (); + + // The GUI has sent a signal and the thread has been awakened. + + const QIntList *selected = uiwidget_creator.get_list_index (); + int ok = uiwidget_creator.get_dialog_result (); + + uiwidget_creator.unlock (); + + return std::pair<std::list<int>, int> (selected->toStdList (), ok); + } + + std::string + qt_interpreter_events::question_dialog (const std::string& msg, + const std::string& title, + const std::string& btn1, + const std::string& btn2, + const std::string& btn3, + const std::string& btndef) + { + QStringList btn; + QStringList role; + // Must use ResetRole which is left-aligned for all OS and WM. + role << "ResetRole" << "ResetRole" << "ResetRole"; + btn << QString::fromStdString (btn1); + if (btn2 == "") + role.removeAt (0); + else + btn << QString::fromStdString (btn2); + btn << QString::fromStdString (btn3); + + // Lock mutex before signaling. + uiwidget_creator.lock (); + + uiwidget_creator.signal_dialog (QString::fromStdString (msg), + QString::fromStdString (title), + "quest", btn, + QString::fromStdString (btndef), + role); + + // Wait while the user is responding to message box. + uiwidget_creator.wait (); + + // The GUI has sent a signal and the thread has been awakened. + + std::string answer = uiwidget_creator.get_dialog_button ().toStdString (); + + uiwidget_creator.unlock (); + + return answer; + } + + void qt_interpreter_events::update_path_dialog (void) + { + emit update_path_dialog_signal (); + } + + void qt_interpreter_events::show_preferences (void) + { + emit show_preferences_signal (); + } + + void qt_interpreter_events::show_doc (const std::string& file) + { + emit show_doc_signal (QString::fromStdString (file)); + } + + bool qt_interpreter_events::edit_file (const std::string& file) + { + emit edit_file_signal (QString::fromStdString (file)); + + return true; + } + + void qt_interpreter_events::edit_variable (const std::string& expr, + const octave_value& val) + { + emit edit_variable_signal (QString::fromStdString (expr), val); + } + + bool qt_interpreter_events::confirm_shutdown (void) + { + // Lock the mutex before emitting signal. + lock (); + + emit confirm_shutdown_signal (); + + // Wait while the GUI shuts down. + wait (); + + // The GUI has sent a signal and the thread has been awakened. + + unlock (); + + return m_shutdown_confirm_result; + } + + bool qt_interpreter_events::prompt_new_edit_file (const std::string& file) + { + QSettings *settings = resource_manager::get_settings (); + + if (! settings || settings->value ("editor/create_new_file",false).toBool ()) + return true; + + std::string abs_fname = sys::env::make_absolute (file); + + QStringList btn; + QStringList role; + role << "YesRole" << "RejectRole"; + btn << tr ("Create") << tr ("Cancel"); + + // Lock mutex before signaling. + uiwidget_creator.lock (); + + uiwidget_creator.signal_dialog + (tr ("File\n%1\ndoes not exist. Do you want to create it?"). + arg (QString::fromStdString (abs_fname)), + tr ("Octave Editor"), "quest", btn, tr ("Create"), role); + + // Wait while the user is responding to message box. + uiwidget_creator.wait (); + + // The GUI has sent a signal and the thread has been awakened. + + QString answer = uiwidget_creator.get_dialog_button (); + + uiwidget_creator.unlock (); + + return (answer == tr ("Create")); + } + // Prompt to allow file to be run by setting cwd (or if // addpath_option==true, alternatively setting the path). This uses a // QMessageBox unlike other functions in this file, because @@ -407,16 +395,80 @@ return retval; } + uint8NDArray qt_interpreter_events::get_named_icon (const std::string& icon_name) + { + uint8NDArray retval; + QIcon icon = resource_manager::icon (QString::fromStdString (icon_name)); + if (! icon.isNull ()) + { + QImage img = icon.pixmap (QSize (32, 32)).toImage (); + + if (img.format () == QImage::Format_ARGB32_Premultiplied) + { + retval.resize (dim_vector (img.height (), img.width (), 4), 0); + uint8_t* bits = img.bits (); + for (int i = 0; i < img.height (); i++) + for (int j = 0; j < img.width (); j++) + { + retval(i,j,2) = bits[0]; + retval(i,j,1) = bits[1]; + retval(i,j,0) = bits[2]; + retval(i,j,3) = bits[3]; + bits += 4; + } + } + } + return retval; + } + + std::string + qt_interpreter_events::gui_preference (const std::string& key, + const std::string& value) + { + QString pref_value; + + // Lock the mutex before signaling + lock (); + + // Emit the signal for changing or getting a preference + emit gui_preference_signal (QString::fromStdString (key), + QString::fromStdString (value), &pref_value); + + // Wait for the GUI and unlock when resumed + wait (); + unlock (); + + return pref_value.toStdString (); + } + + bool qt_interpreter_events::copy_image_to_clipboard (const std::string& file) + { + emit copy_image_to_clipboard_signal (QString::fromStdString (file), true); + + return true; + } + + void qt_interpreter_events::execute_command_in_terminal + (const std::string& command) + { + emit execute_command_in_terminal_signal (QString::fromStdString (command)); + } + + void qt_interpreter_events::register_doc (const std::string& file) + { + emit register_doc_signal (QString::fromStdString (file)); + } + + void qt_interpreter_events::unregister_doc (const std::string& file) + { + emit unregister_doc_signal (QString::fromStdString (file)); + } + void qt_interpreter_events::directory_changed (const std::string& dir) { emit directory_changed_signal (QString::fromStdString (dir)); } - void qt_interpreter_events::update_path_dialog (void) - { - emit update_path_dialog_signal (); - } - void qt_interpreter_events::file_remove (const std::string& old_name, const std::string& new_name) { @@ -437,12 +489,6 @@ emit file_renamed_signal (load_new); } - void qt_interpreter_events::execute_command_in_terminal - (const std::string& command) - { - emit execute_command_in_terminal_signal (QString::fromStdString (command)); - } - void qt_interpreter_events::set_workspace (bool top_level, bool debug, const symbol_info_list& syminfo, bool update_variable_editor) @@ -522,52 +568,6 @@ line, QString::fromStdString (cond)); } - void qt_interpreter_events::show_preferences (void) - { - emit show_preferences_signal (); - } - - std::string - qt_interpreter_events::gui_preference (const std::string& key, - const std::string& value) - { - QString pref_value; - - // Lock the mutex before signaling - lock (); - - // Emit the signal for changing or getting a preference - emit gui_preference_signal (QString::fromStdString (key), - QString::fromStdString (value), &pref_value); - - // Wait for the GUI and unlock when resumed - wait (); - unlock (); - - return pref_value.toStdString (); - } - - void qt_interpreter_events::show_doc (const std::string& file) - { - emit show_doc_signal (QString::fromStdString (file)); - } - - void qt_interpreter_events::register_doc (const std::string& file) - { - emit register_doc_signal (QString::fromStdString (file)); - } - - void qt_interpreter_events::unregister_doc (const std::string& file) - { - emit unregister_doc_signal (QString::fromStdString (file)); - } - - void qt_interpreter_events::edit_variable (const std::string& expr, - const octave_value& val) - { - emit edit_variable_signal (QString::fromStdString (expr), val); - } - void qt_interpreter_events::insert_debugger_pointer (const std::string& file, int line)
--- a/libgui/src/qt-interpreter-events.h Wed Sep 25 10:27:33 2019 -0400 +++ b/libgui/src/qt-interpreter-events.h Wed Sep 25 13:02:50 2019 -0400 @@ -75,18 +75,16 @@ ~qt_interpreter_events (void) = default; - bool confirm_shutdown (void); - - bool copy_image_to_clipboard (const std::string& file); - - bool edit_file (const std::string& file); + std::list<std::string> + file_dialog (const filter_list& filter, const std::string& title, + const std::string& filename, const std::string& pathname, + const std::string& multimode); - bool prompt_new_edit_file (const std::string& file); - - std::string - question_dialog (const std::string& msg, const std::string& title, - const std::string& btn1, const std::string& btn2, - const std::string& btn3, const std::string& btndef); + std::list<std::string> + input_dialog (const std::list<std::string>& prompt, + const std::string& title, const std::list<float>& nr, + const std::list<float>& nc, + const std::list<std::string>& defaults); std::pair<std::list<int>, int> list_dialog (const std::list<std::string>& list, @@ -97,34 +95,49 @@ const std::string& ok_string, const std::string& cancel_string); - std::list<std::string> - input_dialog (const std::list<std::string>& prompt, - const std::string& title, const std::list<float>& nr, - const std::list<float>& nc, - const std::list<std::string>& defaults); + std::string + question_dialog (const std::string& msg, const std::string& title, + const std::string& btn1, const std::string& btn2, + const std::string& btn3, const std::string& btndef); + + void update_path_dialog (void); + + void show_preferences (void); - std::list<std::string> - file_dialog (const filter_list& filter, const std::string& title, - const std::string& filename, const std::string& pathname, - const std::string& multimode); + void show_doc (const std::string& file); + + bool edit_file (const std::string& file); + + void edit_variable (const std::string& name, const octave_value& val); + + bool confirm_shutdown (void); + + bool prompt_new_edit_file (const std::string& file); int debug_cd_or_addpath_error (const std::string& file, const std::string& dir, bool addpath_option); - void directory_changed (const std::string& dir); + uint8NDArray get_named_icon (const std::string& icon_name); + + std::string gui_preference (const std::string& key, + const std::string& value); + + bool copy_image_to_clipboard (const std::string& file); - void update_path_dialog (void); + void execute_command_in_terminal (const std::string& command); + + void register_doc (const std::string& file); + + void unregister_doc (const std::string& file); + + void directory_changed (const std::string& dir); void file_remove (const std::string& old_name, const std::string& new_name); void file_renamed (bool load_new = true); - void execute_command_in_terminal (const std::string& command); - - uint8NDArray get_named_icon (const std::string& icon_name); - void set_workspace (bool top_level, bool debug, const symbol_info_list& syminfo, bool update_variable_editor); @@ -151,19 +164,6 @@ void update_breakpoint (bool insert, const std::string& file, int line, const std::string& cond); - void show_preferences (void); - - std::string gui_preference (const std::string& key, - const std::string& value); - - void show_doc (const std::string& file); - - void register_doc (const std::string& file); - - void unregister_doc (const std::string& file); - - void edit_variable (const std::string& name, const octave_value& val); - void shutdown_confirmation (bool sd) { m_shutdown_confirm_result = sd; } void lock (void) { m_mutex.lock (); }
--- a/libinterp/corefcn/event-manager.h Wed Sep 25 10:27:33 2019 -0400 +++ b/libinterp/corefcn/event-manager.h Wed Sep 25 13:02:50 2019 -0400 @@ -84,28 +84,28 @@ virtual ~interpreter_events (void) = default; - virtual void update_path_dialog (void) { } + // Dialogs. - virtual bool confirm_shutdown (void) { return false; } + typedef std::list<std::pair<std::string, std::string>> filter_list; - virtual bool copy_image_to_clipboard (const std::string& /*file*/) + virtual std::list<std::string> + file_dialog (const filter_list& /*filter*/, + const std::string& /*title*/, + const std::string& /*filename*/, + const std::string& /*dirname*/, + const std::string& /*multimode*/) { - return false; + return std::list<std::string> (); } - virtual bool edit_file (const std::string& /*file*/) { return false; } - - virtual bool prompt_new_edit_file (const std::string& /*file*/) + virtual std::list<std::string> + input_dialog (const std::list<std::string>& /*prompt*/, + const std::string& /*title*/, + const std::list<float>& /*nr*/, + const std::list<float>& /*nc*/, + const std::list<std::string>& /*defaults*/) { - return false; - } - - virtual std::string - question_dialog (const std::string& /*msg*/, const std::string& /*title*/, - const std::string& /*btn1*/, const std::string& /*btn2*/, - const std::string& /*btn3*/, const std::string& /*btndef*/) - { - return ""; + return std::list<std::string> (); } virtual std::pair<std::list<int>, int> @@ -120,26 +120,35 @@ return std::pair<std::list<int>, int> (); } - virtual std::list<std::string> - input_dialog (const std::list<std::string>& /*prompt*/, - const std::string& /*title*/, - const std::list<float>& /*nr*/, - const std::list<float>& /*nc*/, - const std::list<std::string>& /*defaults*/) + virtual std::string + question_dialog (const std::string& /*msg*/, const std::string& /*title*/, + const std::string& /*btn1*/, const std::string& /*btn2*/, + const std::string& /*btn3*/, const std::string& /*btndef*/) { - return std::list<std::string> (); + return ""; } - typedef std::list<std::pair<std::string, std::string>> filter_list; + virtual void update_path_dialog (void) { } + + virtual void show_preferences (void) { } + + virtual void show_doc (const std::string& /*file*/) { } + + virtual bool edit_file (const std::string& /*file*/) { return false; } - virtual std::list<std::string> - file_dialog (const filter_list& /*filter*/, - const std::string& /*title*/, - const std::string& /*filename*/, - const std::string& /*dirname*/, - const std::string& /*multimode*/) + virtual void + edit_variable (const std::string& /*name*/, const octave_value& /*val*/) + { } + + // Other requests for user interaction, usually some kind of + // confirmation before another action. Could these be reformulated + // using the question_dialog action? + + virtual bool confirm_shutdown (void) { return false; } + + virtual bool prompt_new_edit_file (const std::string& /*file*/) { - return std::list<std::string> (); + return false; } virtual int @@ -150,6 +159,39 @@ return -1; } + // Requests for information normally stored in the GUI. + + virtual uint8NDArray get_named_icon (const std::string& /*icon_name*/) + { + return uint8NDArray (); + } + + virtual std::string gui_preference (const std::string& /*key*/, + const std::string& /*value*/) + { + return ""; + } + + // Requests for GUI action that do not require user interaction. + // These are different from other notifications in that they are not + // associated with changes in the interpreter state (like a change + // in the current working directory or command history). + + virtual bool copy_image_to_clipboard (const std::string& /*file*/) + { + return false; + } + + virtual void + execute_command_in_terminal (const std::string& /*command*/) { } + + virtual void register_doc (const std::string& /*file*/) { } + + virtual void unregister_doc (const std::string& /*file*/) { } + + // Notifications of events in the interpreter that a GUI will + // normally wish to respond to. + virtual void directory_changed (const std::string& /*dir*/) { } virtual void @@ -159,14 +201,6 @@ virtual void file_renamed (bool) { } virtual void - execute_command_in_terminal (const std::string& /*command*/) { } - - virtual uint8NDArray get_named_icon (const std::string& /*icon_name*/) - { - return uint8NDArray (); - } - - virtual void set_workspace (bool /*top_level*/, bool /*debug*/, const octave::symbol_info_list& /*syminfo*/, bool /*update_variable_editor*/) @@ -199,24 +233,6 @@ update_breakpoint (bool /*insert*/, const std::string& /*file*/, int /*line*/, const std::string& /*cond*/) { } - - virtual void show_preferences (void) { } - - virtual std::string gui_preference (const std::string& /*key*/, - const std::string& /*value*/) - { - return ""; - } - - virtual void show_doc (const std::string& /*file*/) { } - - virtual void register_doc (const std::string& /*file*/) { } - - virtual void unregister_doc (const std::string& /*file*/) { } - - virtual void - edit_variable (const std::string& /*name*/, const octave_value& /*val*/) - { } }; //! Provides threadsafe access to octave. @@ -289,46 +305,32 @@ // (directory or workspace changed, for example) or to request the // GUI to perform some action (display a dialog, for example). - void update_path_dialog (void) - { - if (octave::application::is_gui_running () && enabled ()) - instance->update_path_dialog (); - } + // Please keep this list of declarations in the same order as the + // ones above in the interpreter_events class. + + typedef std::list<std::pair<std::string, std::string>> filter_list; - bool confirm_shutdown (void) + std::list<std::string> + file_dialog (const filter_list& filter, const std::string& title, + const std::string& filename, const std::string& dirname, + const std::string& multimode) { - bool retval = true; - - if (enabled ()) - retval = instance->confirm_shutdown (); - - return retval; + return (enabled () + ? instance->file_dialog (filter, title, filename, dirname, + multimode) + : std::list<std::string> ()); } - bool copy_image_to_clipboard (const std::string& file) - { - return enabled () ? instance->copy_image_to_clipboard (file) : false; - } - - bool edit_file (const std::string& file) - { - return enabled () ? instance->edit_file (file) : false; - } - - bool prompt_new_edit_file (const std::string& file) - { - return enabled () ? instance->prompt_new_edit_file (file) : false; - } - - std::string - question_dialog (const std::string& msg, const std::string& title, - const std::string& btn1, const std::string& btn2, - const std::string& btn3, const std::string& btndef) + std::list<std::string> + input_dialog (const std::list<std::string>& prompt, + const std::string& title, + const std::list<float>& nr, + const std::list<float>& nc, + const std::list<std::string>& defaults) { return (enabled () - ? instance->question_dialog (msg, title, btn1, - btn2, btn3, btndef) - : ""); + ? instance->input_dialog (prompt, title, nr, nc, defaults) + : std::list<std::string> ()); } std::pair<std::list<int>, int> @@ -348,29 +350,74 @@ : std::pair<std::list<int>, int> ()); } - std::list<std::string> - input_dialog (const std::list<std::string>& prompt, - const std::string& title, - const std::list<float>& nr, - const std::list<float>& nc, - const std::list<std::string>& defaults) + std::string + question_dialog (const std::string& msg, const std::string& title, + const std::string& btn1, const std::string& btn2, + const std::string& btn3, const std::string& btndef) { return (enabled () - ? instance->input_dialog (prompt, title, nr, nc, defaults) - : std::list<std::string> ()); + ? instance->question_dialog (msg, title, btn1, + btn2, btn3, btndef) + : ""); + } + + void update_path_dialog (void) + { + if (octave::application::is_gui_running () && enabled ()) + instance->update_path_dialog (); + } + + bool show_preferences (void) + { + if (enabled ()) + { + instance->show_preferences (); + return true; + } + else + return false; } - typedef std::list<std::pair<std::string, std::string>> filter_list; + bool show_doc (const std::string& file) + { + if (enabled ()) + { + instance->show_doc (file); + return true; + } + else + return false; + } + + bool edit_file (const std::string& file) + { + return enabled () ? instance->edit_file (file) : false; + } - std::list<std::string> - file_dialog (const filter_list& filter, const std::string& title, - const std::string& filename, const std::string& dirname, - const std::string& multimode) + bool edit_variable (const std::string& name, const octave_value& val) { - return (enabled () - ? instance->file_dialog (filter, title, filename, dirname, - multimode) - : std::list<std::string> ()); + if (enabled ()) + { + instance->edit_variable (name, val); + return true; + } + else + return false; + } + + bool confirm_shutdown (void) + { + bool retval = true; + + if (enabled ()) + retval = instance->confirm_shutdown (); + + return retval; + } + + bool prompt_new_edit_file (const std::string& file) + { + return enabled () ? instance->prompt_new_edit_file (file) : false; } int debug_cd_or_addpath_error (const std::string& file, @@ -381,6 +428,53 @@ : 0); } + uint8NDArray get_named_icon (const std::string& icon_name) + { + return (enabled () + ? instance->get_named_icon (icon_name) : uint8NDArray ()); + } + + std::string gui_preference (const std::string& key, + const std::string& value) + { + return enabled () ? instance->gui_preference (key, value) : ""; + } + + bool copy_image_to_clipboard (const std::string& file) + { + return enabled () ? instance->copy_image_to_clipboard (file) : false; + } + + // Preserves pending input. + void execute_command_in_terminal (const std::string& command) + { + if (enabled ()) + instance->execute_command_in_terminal (command); + } + + bool register_doc (const std::string& file) + { + if (enabled ()) + { + instance->register_doc (file); + return true; + } + else + return false; + } + + bool unregister_doc (const std::string& file) + { + if (enabled ()) + { + instance->unregister_doc (file); + return true; + } + else + return false; + + } + void directory_changed (const std::string& dir) { if (enabled ()) @@ -400,19 +494,6 @@ instance->file_renamed (load_new); } - // Preserves pending input. - void execute_command_in_terminal (const std::string& command) - { - if (enabled ()) - instance->execute_command_in_terminal (command); - } - - uint8NDArray get_named_icon (const std::string& icon_name) - { - return (enabled () - ? instance->get_named_icon (icon_name) : uint8NDArray ()); - } - void set_workspace (void); void set_workspace (bool top_level, const octave::symbol_info_list& syminfo, @@ -493,68 +574,6 @@ instance->update_breakpoint (insert, file, line, cond); } - bool show_preferences (void) - { - if (enabled ()) - { - instance->show_preferences (); - return true; - } - else - return false; - } - - std::string gui_preference (const std::string& key, - const std::string& value) - { - return enabled () ? instance->gui_preference (key, value) : ""; - } - - bool show_doc (const std::string& file) - { - if (enabled ()) - { - instance->show_doc (file); - return true; - } - else - return false; - } - - bool register_doc (const std::string& file) - { - if (enabled ()) - { - instance->register_doc (file); - return true; - } - else - return false; - } - - bool unregister_doc (const std::string& file) - { - if (enabled ()) - { - instance->unregister_doc (file); - return true; - } - else - return false; - - } - - bool edit_variable (const std::string& name, const octave_value& val) - { - if (enabled ()) - { - instance->edit_variable (name, val); - return true; - } - else - return false; - } - private: interpreter& m_interpreter;