Mercurial > octave
diff libgui/src/qt-interpreter-events.cc @ 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 | da1f59fe04b3 |
children | 5189bfa8ad2a |
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)