Mercurial > octave
changeset 29796:a0fce019cd1f
additional reorganization of signal/slot connections in main_window class
* main-window.cc (main_window::adopt_editor_widget):
Set m_editor_menubar and m_active_editor and call
m_editor_window->enable_menu_shortcuts here instead of in main_window
constructor.
(main_window::adopt_dock_widgets): Initialize m_previous_dock here
instead of in main_window constructor.
(main_window::adopt_file_browser_widget): Connect file browser signals
to main window slots here instead of in main_window::construct.
(main_window::adopt_editor_widget): Connect file_editor/main_window
signals/slots here instead of in main_window::construct. Connect
qt_link signals to file_editorhere instead of in
main_window::construct_qt_link.
(main_window::make_dock_widget_connections): Connect
QApplication::aboutToQuit signal to dock widget save_settings slot
here instead of in main_window::construct.
* octave-qobject.cc (base_qobject::terminal_widget): Connect
interpreter_output and update_prompt slots to qt_link signals here
instead of in main_window::construct_qt_link.
(base_qobject::file_browser_widget): Connect update_octave_directory
slot to qt_link signal here instead of in main_window::construct_qt_link.
* octave-qobject.h (base_qobject::have_terminal_window): New function.
* qt-interpreter-events.cc (qt_interpreter_events::interpreter_output,
qt_interpreter_events::display_exception): Use
m_octave_qobj.have_terminal_window instead of gui_running to choose
whether to emit signal or write directly to output stream.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Mon, 21 Jun 2021 14:51:13 -0400 |
parents | 98fa1d545c8d |
children | a91a58d85099 |
files | libgui/src/main-window.cc libgui/src/octave-qobject.cc libgui/src/octave-qobject.h libgui/src/qt-interpreter-events.cc |
diffstat | 4 files changed, 97 insertions(+), 133 deletions(-) [+] |
line wrap: on
line diff
--- a/libgui/src/main-window.cc Mon Jun 21 15:34:29 2021 +0900 +++ b/libgui/src/main-window.cc Mon Jun 21 14:51:13 2021 -0400 @@ -169,21 +169,6 @@ adopt_dock_widgets (); - m_previous_dock = m_command_window; - - // Set active editor depending on editor window. If the latter is - // not initialized (qscintilla not present), use the external editor. - if (m_editor_window) - { - m_editor_menubar = m_editor_window->menubar (); - m_active_editor = m_editor_window; - } - else - { - m_editor_menubar = nullptr; - m_active_editor = m_external_editor; - } - #if defined (HAVE_QGUIAPPLICATION_SETDESKTOPFILENAME) QGuiApplication::setDesktopFileName ("org.octave.Octave.desktop"); #endif @@ -231,10 +216,6 @@ emit init_window_menu (); -#if defined (HAVE_QSCINTILLA) - m_editor_window->enable_menu_shortcuts (false); -#endif - focus_command_window (); } @@ -257,6 +238,8 @@ adopt_workspace_widget (); adopt_editor_widget (); adopt_variable_editor_widget (); + + m_previous_dock = m_command_window; } void main_window::adopt_terminal_widget (void) @@ -336,6 +319,15 @@ connect (m_file_browser_window, &files_dock_widget::run_file_signal, this, &main_window::run_file_in_terminal); + + connect (m_file_browser_window, &files_dock_widget::load_file_signal, + this, &main_window::handle_load_workspace_request); + + connect (m_file_browser_window, &files_dock_widget::open_any_signal, + this, &main_window::handle_open_any_request); + + connect (m_file_browser_window, &files_dock_widget::find_files_signal, + this, &main_window::find_files); } void main_window::adopt_history_widget (void) @@ -397,11 +389,72 @@ connect (editor, &file_editor::debug_quit_signal, this, &main_window::debug_quit); + connect (this, &main_window::editor_focus_changed, + editor, &file_editor::enable_menu_shortcuts); + + connect (this, &main_window::step_into_file_signal, + editor, &file_editor::request_step_into_file); + + connect (editor, &file_editor::editor_tabs_changed_signal, + this, &main_window::editor_tabs_changed); + + connect (editor, &file_editor::request_open_file_external, + m_external_editor, &external_editor_interface::call_custom_editor); + + connect (m_external_editor, &external_editor_interface::request_settings_dialog, + this, &main_window::process_settings_dialog_request); + + connect (this, &main_window::insert_debugger_pointer_signal, + editor, &file_editor::handle_insert_debugger_pointer_request); + + connect (this, &main_window::delete_debugger_pointer_signal, + editor, &file_editor::handle_delete_debugger_pointer_request); + + connect (this, &main_window::update_breakpoint_marker_signal, + editor, &file_editor::handle_update_breakpoint_marker_request); + + // Signals for removing/renaming files/dirs in the file browser + connect (m_file_browser_window, &files_dock_widget::file_remove_signal, + editor, &file_editor::handle_file_remove); + + connect (m_file_browser_window, &files_dock_widget::file_renamed_signal, + editor, &file_editor::handle_file_renamed); + + interpreter_qobject *interp_qobj = m_octave_qobj.interpreter_qobj (); + + qt_interpreter_events *qt_link = interp_qobj->qt_link (); + + // Signals for removing/renaming files/dirs in the terminal window + connect (qt_link, &qt_interpreter_events::file_renamed_signal, + editor, &file_editor::handle_file_renamed); + + // Signals for entering/exiting debug mode + connect (qt_link, &qt_interpreter_events::enter_debugger_signal, + editor, &file_editor::handle_enter_debug_mode); + + connect (qt_link, &qt_interpreter_events::exit_debugger_signal, + editor, &file_editor::handle_exit_debug_mode); + + connect (qt_link, &qt_interpreter_events::directory_changed_signal, + editor, &file_editor::update_octave_directory); + m_editor_window = editor; + + m_editor_menubar = m_editor_window->menubar (); + + m_active_editor = m_editor_window; + + m_editor_window->enable_menu_shortcuts (false); #else m_editor_window = nullptr; + + m_editor_menubar = nullptr; + + m_active_editor = m_external_editor; #endif + connect (qt_link, SIGNAL (edit_file_signal (const QString&)), + m_active_editor, SLOT (handle_edit_file_request (const QString&))); } void main_window::adopt_variable_editor_widget (void) @@ -421,6 +474,13 @@ connect (this, &main_window::active_dock_changed, dw, &octave_dock_widget::handle_active_dock_changed); + + // FIXME: shouldn't this action should be associated with closing + // the main window, not with exiting the application? At one time, + // those two actions happened together, but now it is possible to + // close the main window without exiting the application. + connect (qApp, &QApplication::aboutToQuit, + dw, &octave_dock_widget::save_settings); } bool main_window::command_window_has_focus (void) const @@ -2116,28 +2176,8 @@ construct_tool_bar (); - // Order is important. Deleting gui_settings must be last. - connect (qApp, &QApplication::aboutToQuit, - m_command_window, &terminal_dock_widget::save_settings); - - connect (qApp, &QApplication::aboutToQuit, - m_history_window, &history_dock_widget::save_settings); - - connect (qApp, &QApplication::aboutToQuit, - m_file_browser_window, &files_dock_widget::save_settings); - - connect (qApp, &QApplication::aboutToQuit, - m_doc_browser_window, &documentation_dock_widget::save_settings); - - connect (qApp, &QApplication::aboutToQuit, - m_workspace_window, &workspace_view::save_settings); - - connect (qApp, &QApplication::aboutToQuit, - m_editor_window, &file_editor_interface::save_settings); - - connect (qApp, &QApplication::aboutToQuit, - m_variable_editor_window, &variable_editor::save_settings); - + // FIXME: Is this action intended to be about quitting application + // or closing the main window? connect (qApp, &QApplication::aboutToQuit, this, &main_window::prepare_to_exit); @@ -2147,33 +2187,6 @@ connect (this, &main_window::settings_changed, this, [=] (const gui_settings *settings) { notice_settings (settings); }); - connect (this, SIGNAL (editor_focus_changed (bool)), - m_editor_window, SLOT (enable_menu_shortcuts (bool))); - - connect (this, SIGNAL (step_into_file_signal (void)), - m_editor_window, SLOT (request_step_into_file (void))); - - connect (m_editor_window, SIGNAL (editor_tabs_changed_signal (bool, bool)), - this, SLOT (editor_tabs_changed (bool, bool))); - - connect (m_editor_window, - SIGNAL (request_open_file_external (const QString&, int)), - m_external_editor, - SLOT (call_custom_editor (const QString&, int))); - - connect (m_external_editor, - SIGNAL (request_settings_dialog (const QString&)), - this, SLOT (process_settings_dialog_request (const QString&))); - - connect (m_file_browser_window, &files_dock_widget::load_file_signal, - this, &main_window::handle_load_workspace_request); - - connect (m_file_browser_window, &files_dock_widget::open_any_signal, - this, &main_window::handle_open_any_request); - - connect (m_file_browser_window, &files_dock_widget::find_files_signal, - this, &main_window::find_files); - // Connections for signals from the interpreter thread where the slot // should be executed by the gui thread @@ -2184,49 +2197,6 @@ setStatusBar (m_status_bar); -#if defined (HAVE_QSCINTILLA) - connect (this, - SIGNAL (insert_debugger_pointer_signal (const QString&, int)), - m_editor_window, - SLOT (handle_insert_debugger_pointer_request (const QString&, - int))); - - connect (this, - SIGNAL (delete_debugger_pointer_signal (const QString&, int)), - m_editor_window, - SLOT (handle_delete_debugger_pointer_request (const QString&, - int))); - - connect (this, - SIGNAL (update_breakpoint_marker_signal (bool, const QString&, - int, const QString&)), - m_editor_window, - SLOT (handle_update_breakpoint_marker_request (bool, - const QString&, - int, - const QString&))); - - // Signals for removing/renaming files/dirs in the file browser - connect (m_file_browser_window, - SIGNAL (file_remove_signal (const QString&, const QString&)), - m_editor_window, - SLOT (handle_file_remove (const QString&, const QString&))); - - connect (m_file_browser_window, SIGNAL (file_renamed_signal (bool)), - m_editor_window, SLOT (handle_file_renamed (bool))); - - // Signals for removing/renaming files/dirs in the terminal window - connect (qt_link, SIGNAL (file_renamed_signal (bool)), - m_editor_window, SLOT (handle_file_renamed (bool))); - - // Signals for entering/exiting debug mode - connect (qt_link, SIGNAL (enter_debugger_signal (void)), - m_editor_window, SLOT (handle_enter_debug_mode (void))); - - connect (qt_link, SIGNAL (exit_debugger_signal (void)), - m_editor_window, SLOT (handle_exit_debug_mode (void))); -#endif - // Signals for removing/renaming files/dirs in the temrinal window connect (qt_link, &qt_interpreter_events::file_remove_signal, this, &main_window::file_remove_proxy); @@ -2252,24 +2222,9 @@ connect (qt_link, &qt_interpreter_events::apply_new_settings, this, &main_window::request_reload_settings); - if (m_octave_qobj.experimental_terminal_widget ()) - { - connect (qt_link, &qt_interpreter_events::interpreter_output_signal, - m_command_window, &terminal_dock_widget::interpreter_output); - - connect (qt_link, &qt_interpreter_events::update_prompt_signal, - m_command_window, &terminal_dock_widget::update_prompt); - } - connect (qt_link, &qt_interpreter_events::directory_changed_signal, this, &main_window::update_octave_directory); - connect (qt_link, &qt_interpreter_events::directory_changed_signal, - m_file_browser_window, &files_dock_widget::update_octave_directory); - - connect (qt_link, SIGNAL (directory_changed_signal (QString)), - m_editor_window, SLOT (update_octave_directory (QString))); - connect (qt_link, &qt_interpreter_events::execute_command_in_terminal_signal, this, &main_window::execute_command_in_terminal); @@ -2282,11 +2237,6 @@ connect (qt_link, &qt_interpreter_events::show_preferences_signal, this, [=] () { process_settings_dialog_request (); }); - connect (qt_link, - SIGNAL (edit_file_signal (const QString&)), - m_active_editor, - SLOT (handle_edit_file_request (const QString&))); - connect (qt_link, &qt_interpreter_events::insert_debugger_pointer_signal, this, &main_window::handle_insert_debugger_pointer_request);
--- a/libgui/src/octave-qobject.cc Mon Jun 21 15:34:29 2021 +0900 +++ b/libgui/src/octave-qobject.cc Mon Jun 21 14:51:13 2021 -0400 @@ -460,6 +460,12 @@ connect (cmd_widget, &command_widget::interpreter_stop, this, &base_qobject::interpreter_stop); + connect (qt_link (), &qt_interpreter_events::interpreter_output_signal, + m_terminal_widget, &terminal_dock_widget::interpreter_output); + + connect (qt_link (), &qt_interpreter_events::update_prompt_signal, + m_terminal_widget, &terminal_dock_widget::update_prompt); + connect_interpreter_events (cmd_widget); } else @@ -514,6 +520,9 @@ m_file_browser_widget = QPointer<files_dock_widget> (new files_dock_widget (mw, *this)); + connect (qt_link (), &qt_interpreter_events::directory_changed_signal, + m_file_browser_widget, &files_dock_widget::update_octave_directory); + return m_file_browser_widget; }
--- a/libgui/src/octave-qobject.h Mon Jun 21 15:34:29 2021 +0900 +++ b/libgui/src/octave-qobject.h Mon Jun 21 14:51:13 2021 -0400 @@ -124,6 +124,11 @@ // Provided for convenience. bool gui_running (void) const; + bool have_terminal_window (void) const + { + return ! m_terminal_widget.isNull (); + } + resource_manager& get_resource_manager (void) { return m_resource_manager;
--- a/libgui/src/qt-interpreter-events.cc Mon Jun 21 15:34:29 2021 +0900 +++ b/libgui/src/qt-interpreter-events.cc Mon Jun 21 14:51:13 2021 -0400 @@ -485,7 +485,7 @@ void qt_interpreter_events::interpreter_output (const std::string& msg) { if (m_octave_qobj.experimental_terminal_widget () - && m_octave_qobj.gui_running ()) + && m_octave_qobj.have_terminal_window ()) emit interpreter_output_signal (QString::fromStdString (msg)); else { @@ -498,7 +498,7 @@ bool beep) { if (m_octave_qobj.experimental_terminal_widget () - && m_octave_qobj.gui_running ()) + && m_octave_qobj.have_terminal_window ()) { std::ostringstream buf; ee.display (buf);