Mercurial > octave
changeset 27630:262cdd0f7619
don't use singleton pattern for shortcut manager in GUI
Move ownership of the shorcut_manager object to the base_qobject
class. Eliminate static member functions in shortcut_managar class.
Provide a get_shortcut_manager method in the base_qboject class and
access reference to shortcut_manager object from m_octave_qobj member
variables in classes that need it.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Mon, 04 Nov 2019 14:03:00 -0500 |
parents | 8b6e928e0705 |
children | 688e8fb3caa9 |
files | libgui/src/documentation.cc libgui/src/dw-main-window.cc libgui/src/m-editor/file-editor.cc libgui/src/main-window.cc libgui/src/octave-qobject.cc libgui/src/octave-qobject.h libgui/src/settings-dialog.cc libgui/src/shortcut-manager.cc libgui/src/shortcut-manager.h |
diffstat | 9 files changed, 294 insertions(+), 322 deletions(-) [+] |
line wrap: on
line diff
--- a/libgui/src/documentation.cc Mon Nov 04 13:34:44 2019 -0500 +++ b/libgui/src/documentation.cc Mon Nov 04 14:03:00 2019 -0500 @@ -580,15 +580,17 @@ m_tool_bar->setIconSize (QSize (icon_size, icon_size)); // Shortcuts - shortcut_manager::set_shortcut (m_action_find, "editor_edit:find_replace"); - shortcut_manager::shortcut (m_findnext_shortcut, "editor_edit:find_next"); - shortcut_manager::shortcut (m_findprev_shortcut, "editor_edit:find_previous"); - shortcut_manager::set_shortcut (m_action_zoom_in, "editor_view:zoom_in"); - shortcut_manager::set_shortcut (m_action_zoom_out, "editor_view:zoom_out"); - shortcut_manager::set_shortcut (m_action_zoom_original, "editor_view:zoom_normal"); - shortcut_manager::set_shortcut (m_action_go_home, "doc_browser:go_home"); - shortcut_manager::set_shortcut (m_action_go_prev, "doc_browser:go_back"); - shortcut_manager::set_shortcut (m_action_go_next, "doc_browser:go_next"); + shortcut_manager& scmgr = m_octave_qobj.get_shortcut_manager (); + + scmgr.set_shortcut (m_action_find, "editor_edit:find_replace"); + scmgr.shortcut (m_findnext_shortcut, "editor_edit:find_next"); + scmgr.shortcut (m_findprev_shortcut, "editor_edit:find_previous"); + scmgr.set_shortcut (m_action_zoom_in, "editor_view:zoom_in"); + scmgr.set_shortcut (m_action_zoom_out, "editor_view:zoom_out"); + scmgr.set_shortcut (m_action_zoom_original, "editor_view:zoom_normal"); + scmgr.set_shortcut (m_action_go_home, "doc_browser:go_home"); + scmgr.set_shortcut (m_action_go_prev, "doc_browser:go_back"); + scmgr.set_shortcut (m_action_go_next, "doc_browser:go_next"); } void documentation::copyClipboard (void)
--- a/libgui/src/dw-main-window.cc Mon Nov 04 13:34:44 2019 -0500 +++ b/libgui/src/dw-main-window.cc Mon Nov 04 14:03:00 2019 -0500 @@ -128,12 +128,14 @@ // Update the settings void dw_main_window::notice_settings (const gui_settings *) { - shortcut_manager::set_shortcut (m_close_action, "editor_file:close"); - shortcut_manager::set_shortcut (m_close_all_action, "editor_file:close_all"); - shortcut_manager::set_shortcut (m_close_others_action, "editor_file:close_other"); + shortcut_manager& scmgr = m_octave_qobj.get_shortcut_manager (); - shortcut_manager::set_shortcut (m_switch_left_action, "editor_tabs:switch_left_tab"); - shortcut_manager::set_shortcut (m_switch_right_action, "editor_tabs:switch_right_tab"); + scmgr.set_shortcut (m_close_action, "editor_file:close"); + scmgr.set_shortcut (m_close_all_action, "editor_file:close_all"); + scmgr.set_shortcut (m_close_others_action, "editor_file:close_other"); + + scmgr.set_shortcut (m_switch_left_action, "editor_tabs:switch_left_tab"); + scmgr.set_shortcut (m_switch_right_action, "editor_tabs:switch_right_tab"); }
--- a/libgui/src/m-editor/file-editor.cc Mon Nov 04 13:34:44 2019 -0500 +++ b/libgui/src/m-editor/file-editor.cc Mon Nov 04 14:03:00 2019 -0500 @@ -170,7 +170,8 @@ void file_editor::handle_exit_debug_mode (void) { - shortcut_manager::set_shortcut (m_run_action, "editor_run:run_file"); + shortcut_manager& scmgr = m_octave_qobj.get_shortcut_manager (); + scmgr.set_shortcut (m_run_action, "editor_run:run_file"); m_run_action->setToolTip (tr ("Save File and Run")); // update tool tip } @@ -1232,88 +1233,90 @@ // Shortcuts also available in the main window, as well as the realted // ahotcuts, are defined in main_window and added to the editor + shortcut_manager& scmgr = m_octave_qobj.get_shortcut_manager (); + // File menu - shortcut_manager::set_shortcut (m_edit_function_action, "editor_file:edit_function"); - shortcut_manager::set_shortcut (m_save_action, "editor_file:save"); - shortcut_manager::set_shortcut (m_save_as_action, "editor_file:save_as"); - shortcut_manager::set_shortcut (m_close_action, "editor_file:close"); - shortcut_manager::set_shortcut (m_close_all_action, "editor_file:close_all"); - shortcut_manager::set_shortcut (m_close_others_action, "editor_file:close_other"); - shortcut_manager::set_shortcut (m_print_action, "editor_file:print"); + scmgr.set_shortcut (m_edit_function_action, "editor_file:edit_function"); + scmgr.set_shortcut (m_save_action, "editor_file:save"); + scmgr.set_shortcut (m_save_as_action, "editor_file:save_as"); + scmgr.set_shortcut (m_close_action, "editor_file:close"); + scmgr.set_shortcut (m_close_all_action, "editor_file:close_all"); + scmgr.set_shortcut (m_close_others_action, "editor_file:close_other"); + scmgr.set_shortcut (m_print_action, "editor_file:print"); // Edit menu - shortcut_manager::set_shortcut (m_redo_action, "editor_edit:redo"); - shortcut_manager::set_shortcut (m_cut_action, "editor_edit:cut"); - shortcut_manager::set_shortcut (m_find_action, "editor_edit:find_replace"); - shortcut_manager::set_shortcut (m_find_next_action, "editor_edit:find_next"); - shortcut_manager::set_shortcut (m_find_previous_action, "editor_edit:find_previous"); - - shortcut_manager::set_shortcut (m_delete_start_word_action, "editor_edit:delete_start_word"); - shortcut_manager::set_shortcut (m_delete_end_word_action, "editor_edit:delete_end_word"); - shortcut_manager::set_shortcut (m_delete_start_line_action, "editor_edit:delete_start_line"); - shortcut_manager::set_shortcut (m_delete_end_line_action, "editor_edit:delete_end_line"); - shortcut_manager::set_shortcut (m_delete_line_action, "editor_edit:delete_line"); - shortcut_manager::set_shortcut (m_copy_line_action, "editor_edit:copy_line"); - shortcut_manager::set_shortcut (m_cut_line_action, "editor_edit:cut_line"); - shortcut_manager::set_shortcut (m_duplicate_selection_action, "editor_edit:duplicate_selection"); - shortcut_manager::set_shortcut (m_transpose_line_action, "editor_edit:transpose_line"); - shortcut_manager::set_shortcut (m_comment_selection_action, "editor_edit:comment_selection"); - shortcut_manager::set_shortcut (m_uncomment_selection_action, "editor_edit:uncomment_selection"); - shortcut_manager::set_shortcut (m_comment_var_selection_action, "editor_edit:comment_var_selection"); - - shortcut_manager::set_shortcut (m_upper_case_action, "editor_edit:upper_case"); - shortcut_manager::set_shortcut (m_lower_case_action, "editor_edit:lower_case"); - shortcut_manager::set_shortcut (m_indent_selection_action, "editor_edit:indent_selection"); - shortcut_manager::set_shortcut (m_unindent_selection_action, "editor_edit:unindent_selection"); - shortcut_manager::set_shortcut (m_smart_indent_line_or_selection_action, "editor_edit:smart_indent_line_or_selection"); - shortcut_manager::set_shortcut (m_completion_action, "editor_edit:completion_list"); - shortcut_manager::set_shortcut (m_goto_line_action, "editor_edit:goto_line"); - shortcut_manager::set_shortcut (m_move_to_matching_brace, "editor_edit:move_to_brace"); - shortcut_manager::set_shortcut (m_sel_to_matching_brace, "editor_edit:select_to_brace"); - shortcut_manager::set_shortcut (m_toggle_bookmark_action, "editor_edit:toggle_bookmark"); - shortcut_manager::set_shortcut (m_next_bookmark_action, "editor_edit:next_bookmark"); - shortcut_manager::set_shortcut (m_previous_bookmark_action, "editor_edit:previous_bookmark"); - shortcut_manager::set_shortcut (m_remove_bookmark_action, "editor_edit:remove_bookmark"); - shortcut_manager::set_shortcut (m_preferences_action, "editor_edit:preferences"); - shortcut_manager::set_shortcut (m_styles_preferences_action, "editor_edit:styles_preferences"); - - shortcut_manager::set_shortcut (m_conv_eol_windows_action, "editor_edit:conv_eol_winows"); - shortcut_manager::set_shortcut (m_conv_eol_unix_action, "editor_edit:conv_eol_unix"); - shortcut_manager::set_shortcut (m_conv_eol_mac_action, "editor_edit:conv_eol_mac"); + scmgr.set_shortcut (m_redo_action, "editor_edit:redo"); + scmgr.set_shortcut (m_cut_action, "editor_edit:cut"); + scmgr.set_shortcut (m_find_action, "editor_edit:find_replace"); + scmgr.set_shortcut (m_find_next_action, "editor_edit:find_next"); + scmgr.set_shortcut (m_find_previous_action, "editor_edit:find_previous"); + + scmgr.set_shortcut (m_delete_start_word_action, "editor_edit:delete_start_word"); + scmgr.set_shortcut (m_delete_end_word_action, "editor_edit:delete_end_word"); + scmgr.set_shortcut (m_delete_start_line_action, "editor_edit:delete_start_line"); + scmgr.set_shortcut (m_delete_end_line_action, "editor_edit:delete_end_line"); + scmgr.set_shortcut (m_delete_line_action, "editor_edit:delete_line"); + scmgr.set_shortcut (m_copy_line_action, "editor_edit:copy_line"); + scmgr.set_shortcut (m_cut_line_action, "editor_edit:cut_line"); + scmgr.set_shortcut (m_duplicate_selection_action, "editor_edit:duplicate_selection"); + scmgr.set_shortcut (m_transpose_line_action, "editor_edit:transpose_line"); + scmgr.set_shortcut (m_comment_selection_action, "editor_edit:comment_selection"); + scmgr.set_shortcut (m_uncomment_selection_action, "editor_edit:uncomment_selection"); + scmgr.set_shortcut (m_comment_var_selection_action, "editor_edit:comment_var_selection"); + + scmgr.set_shortcut (m_upper_case_action, "editor_edit:upper_case"); + scmgr.set_shortcut (m_lower_case_action, "editor_edit:lower_case"); + scmgr.set_shortcut (m_indent_selection_action, "editor_edit:indent_selection"); + scmgr.set_shortcut (m_unindent_selection_action, "editor_edit:unindent_selection"); + scmgr.set_shortcut (m_smart_indent_line_or_selection_action, "editor_edit:smart_indent_line_or_selection"); + scmgr.set_shortcut (m_completion_action, "editor_edit:completion_list"); + scmgr.set_shortcut (m_goto_line_action, "editor_edit:goto_line"); + scmgr.set_shortcut (m_move_to_matching_brace, "editor_edit:move_to_brace"); + scmgr.set_shortcut (m_sel_to_matching_brace, "editor_edit:select_to_brace"); + scmgr.set_shortcut (m_toggle_bookmark_action, "editor_edit:toggle_bookmark"); + scmgr.set_shortcut (m_next_bookmark_action, "editor_edit:next_bookmark"); + scmgr.set_shortcut (m_previous_bookmark_action, "editor_edit:previous_bookmark"); + scmgr.set_shortcut (m_remove_bookmark_action, "editor_edit:remove_bookmark"); + scmgr.set_shortcut (m_preferences_action, "editor_edit:preferences"); + scmgr.set_shortcut (m_styles_preferences_action, "editor_edit:styles_preferences"); + + scmgr.set_shortcut (m_conv_eol_windows_action, "editor_edit:conv_eol_winows"); + scmgr.set_shortcut (m_conv_eol_unix_action, "editor_edit:conv_eol_unix"); + scmgr.set_shortcut (m_conv_eol_mac_action, "editor_edit:conv_eol_mac"); // View menu - shortcut_manager::set_shortcut (m_show_linenum_action, "editor_view:show_line_numbers"); - shortcut_manager::set_shortcut (m_show_whitespace_action, "editor_view:show_white_spaces"); - shortcut_manager::set_shortcut (m_show_eol_action, "editor_view:show_eol_chars"); - shortcut_manager::set_shortcut (m_show_indguide_action, "editor_view:show_ind_guides"); - shortcut_manager::set_shortcut (m_show_longline_action, "editor_view:show_long_line"); - shortcut_manager::set_shortcut (m_show_toolbar_action, "editor_view:show_toolbar"); - shortcut_manager::set_shortcut (m_show_statusbar_action, "editor_view:show_statusbar"); - shortcut_manager::set_shortcut (m_show_hscrollbar_action, "editor_view:show_hscrollbar"); - shortcut_manager::set_shortcut (m_zoom_in_action, "editor_view:zoom_in"); - shortcut_manager::set_shortcut (m_zoom_out_action, "editor_view:zoom_out"); - shortcut_manager::set_shortcut (m_zoom_normal_action, "editor_view:zoom_normal"); - shortcut_manager::set_shortcut (m_sort_tabs_action, "editor_view:sort_tabs"); + scmgr.set_shortcut (m_show_linenum_action, "editor_view:show_line_numbers"); + scmgr.set_shortcut (m_show_whitespace_action, "editor_view:show_white_spaces"); + scmgr.set_shortcut (m_show_eol_action, "editor_view:show_eol_chars"); + scmgr.set_shortcut (m_show_indguide_action, "editor_view:show_ind_guides"); + scmgr.set_shortcut (m_show_longline_action, "editor_view:show_long_line"); + scmgr.set_shortcut (m_show_toolbar_action, "editor_view:show_toolbar"); + scmgr.set_shortcut (m_show_statusbar_action, "editor_view:show_statusbar"); + scmgr.set_shortcut (m_show_hscrollbar_action, "editor_view:show_hscrollbar"); + scmgr.set_shortcut (m_zoom_in_action, "editor_view:zoom_in"); + scmgr.set_shortcut (m_zoom_out_action, "editor_view:zoom_out"); + scmgr.set_shortcut (m_zoom_normal_action, "editor_view:zoom_normal"); + scmgr.set_shortcut (m_sort_tabs_action, "editor_view:sort_tabs"); // Debug menu - shortcut_manager::set_shortcut (m_toggle_breakpoint_action, "editor_debug:toggle_breakpoint"); - shortcut_manager::set_shortcut (m_next_breakpoint_action, "editor_debug:next_breakpoint"); - shortcut_manager::set_shortcut (m_previous_breakpoint_action, "editor_debug:previous_breakpoint"); - shortcut_manager::set_shortcut (m_remove_all_breakpoints_action, "editor_debug:remove_breakpoints"); + scmgr.set_shortcut (m_toggle_breakpoint_action, "editor_debug:toggle_breakpoint"); + scmgr.set_shortcut (m_next_breakpoint_action, "editor_debug:next_breakpoint"); + scmgr.set_shortcut (m_previous_breakpoint_action, "editor_debug:previous_breakpoint"); + scmgr.set_shortcut (m_remove_all_breakpoints_action, "editor_debug:remove_breakpoints"); // Run menu - shortcut_manager::set_shortcut (m_run_action, "editor_run:run_file"); - shortcut_manager::set_shortcut (m_run_selection_action, "editor_run:run_selection"); + scmgr.set_shortcut (m_run_action, "editor_run:run_file"); + scmgr.set_shortcut (m_run_selection_action, "editor_run:run_selection"); // Help menu - shortcut_manager::set_shortcut (m_context_help_action, "editor_help:help_keyword"); - shortcut_manager::set_shortcut (m_context_doc_action, "editor_help:doc_keyword"); + scmgr.set_shortcut (m_context_help_action, "editor_help:help_keyword"); + scmgr.set_shortcut (m_context_doc_action, "editor_help:doc_keyword"); // Tab navigation without menu entries - shortcut_manager::set_shortcut (m_switch_left_tab_action, "editor_tabs:switch_left_tab"); - shortcut_manager::set_shortcut (m_switch_right_tab_action, "editor_tabs:switch_right_tab"); - shortcut_manager::set_shortcut (m_move_tab_left_action, "editor_tabs:move_tab_left"); - shortcut_manager::set_shortcut (m_move_tab_right_action, "editor_tabs:move_tab_right"); + scmgr.set_shortcut (m_switch_left_tab_action, "editor_tabs:switch_left_tab"); + scmgr.set_shortcut (m_switch_right_tab_action, "editor_tabs:switch_right_tab"); + scmgr.set_shortcut (m_move_tab_left_action, "editor_tabs:move_tab_left"); + scmgr.set_shortcut (m_move_tab_right_action, "editor_tabs:move_tab_right"); }
--- a/libgui/src/main-window.cc Mon Nov 04 13:34:44 2019 -0500 +++ b/libgui/src/main-window.cc Mon Nov 04 14:03:00 2019 -0500 @@ -151,7 +151,12 @@ sys::env::putenv ("TERM", "xterm"); #endif - shortcut_manager::init_data (); + // FIXME: can we do this job when creating the shortcut manager? + // A quick look shows that it may require some coordination with the + // resource manager. Startup is complicated, but maybe we can make + // it simpler? + shortcut_manager& scmgr = m_octave_qobj.get_shortcut_manager (); + scmgr.init_data (); construct_central_widget (); @@ -2011,9 +2016,6 @@ connect (qApp, SIGNAL (aboutToQuit (void)), this, SLOT (prepare_to_exit (void))); - connect (qApp, SIGNAL (aboutToQuit (void)), - shortcut_manager::instance, SLOT (cleanup_instance (void))); - connect (qApp, SIGNAL (focusChanged (QWidget*, QWidget*)), this, SLOT (focus_changed (QWidget*, QWidget*))); @@ -2724,82 +2726,66 @@ void main_window::configure_shortcuts (void) { + shortcut_manager& scmgr = m_octave_qobj.get_shortcut_manager (); + // file menu - shortcut_manager::set_shortcut (m_open_action, "main_file:open_file"); - shortcut_manager::set_shortcut (m_new_script_action, "main_file:new_file"); - shortcut_manager::set_shortcut (m_new_function_action, - "main_file:new_function"); - shortcut_manager::set_shortcut (m_new_function_action, "main_file:new_figure"); - shortcut_manager::set_shortcut (m_load_workspace_action, - "main_file:load_workspace"); - shortcut_manager::set_shortcut (m_save_workspace_action, - "main_file:save_workspace"); - shortcut_manager::set_shortcut (m_exit_action,"main_file:exit"); + scmgr.set_shortcut (m_open_action, "main_file:open_file"); + scmgr.set_shortcut (m_new_script_action, "main_file:new_file"); + scmgr.set_shortcut (m_new_function_action, "main_file:new_function"); + scmgr.set_shortcut (m_new_function_action, "main_file:new_figure"); + scmgr.set_shortcut (m_load_workspace_action, "main_file:load_workspace"); + scmgr.set_shortcut (m_save_workspace_action, "main_file:save_workspace"); + scmgr.set_shortcut (m_exit_action, "main_file:exit"); // edit menu - shortcut_manager::set_shortcut (m_copy_action, "main_edit:copy"); - shortcut_manager::set_shortcut (m_paste_action, "main_edit:paste"); - shortcut_manager::set_shortcut (m_undo_action, "main_edit:undo"); - shortcut_manager::set_shortcut (m_select_all_action, "main_edit:select_all"); - shortcut_manager::set_shortcut (m_clear_clipboard_action, - "main_edit:clear_clipboard"); - shortcut_manager::set_shortcut (m_find_files_action, "main_edit:find_in_files"); - shortcut_manager::set_shortcut (m_clear_command_history_action, - "main_edit:clear_history"); - shortcut_manager::set_shortcut (m_clear_command_window_action, - "main_edit:clear_command_window"); - shortcut_manager::set_shortcut (m_clear_workspace_action, - "main_edit:clear_workspace"); - shortcut_manager::set_shortcut (m_set_path_action, "main_edit:set_path"); - shortcut_manager::set_shortcut (m_preferences_action, "main_edit:preferences"); + scmgr.set_shortcut (m_copy_action, "main_edit:copy"); + scmgr.set_shortcut (m_paste_action, "main_edit:paste"); + scmgr.set_shortcut (m_undo_action, "main_edit:undo"); + scmgr.set_shortcut (m_select_all_action, "main_edit:select_all"); + scmgr.set_shortcut (m_clear_clipboard_action, "main_edit:clear_clipboard"); + scmgr.set_shortcut (m_find_files_action, "main_edit:find_in_files"); + scmgr.set_shortcut (m_clear_command_history_action, "main_edit:clear_history"); + scmgr.set_shortcut (m_clear_command_window_action, "main_edit:clear_command_window"); + scmgr.set_shortcut (m_clear_workspace_action, "main_edit:clear_workspace"); + scmgr.set_shortcut (m_set_path_action, "main_edit:set_path"); + scmgr.set_shortcut (m_preferences_action, "main_edit:preferences"); // debug menu - shortcut_manager::set_shortcut (m_debug_step_over, "main_debug:step_over"); - shortcut_manager::set_shortcut (m_debug_step_into, "main_debug:step_into"); - shortcut_manager::set_shortcut (m_debug_step_out, "main_debug:step_out"); - shortcut_manager::set_shortcut (m_debug_continue, "main_debug:continue"); - shortcut_manager::set_shortcut (m_debug_quit, "main_debug:quit"); + scmgr.set_shortcut (m_debug_step_over, "main_debug:step_over"); + scmgr.set_shortcut (m_debug_step_into, "main_debug:step_into"); + scmgr.set_shortcut (m_debug_step_out, "main_debug:step_out"); + scmgr.set_shortcut (m_debug_continue, "main_debug:continue"); + scmgr.set_shortcut (m_debug_quit, "main_debug:quit"); // window menu - shortcut_manager::set_shortcut (m_show_command_window_action, - "main_window:show_command"); - shortcut_manager::set_shortcut (m_show_history_action, - "main_window:show_history"); - shortcut_manager::set_shortcut (m_show_workspace_action, - "main_window:show_workspace"); - shortcut_manager::set_shortcut (m_show_file_browser_action, - "main_window:show_file_browser"); - shortcut_manager::set_shortcut (m_show_editor_action, - "main_window:show_editor"); - shortcut_manager::set_shortcut (m_show_documentation_action, - "main_window:show_doc"); - shortcut_manager::set_shortcut (m_show_variable_editor_action, - "main_window:show_variable_editor"); - shortcut_manager::set_shortcut (m_command_window_action, "main_window:command"); - shortcut_manager::set_shortcut (m_history_action, "main_window:history"); - shortcut_manager::set_shortcut (m_workspace_action, "main_window:workspace"); - shortcut_manager::set_shortcut (m_file_browser_action, - "main_window:file_browser"); - shortcut_manager::set_shortcut (m_editor_action, "main_window:editor"); - shortcut_manager::set_shortcut (m_documentation_action, "main_window:doc"); - shortcut_manager::set_shortcut (m_variable_editor_action, - "main_window:variable_editor"); - shortcut_manager::set_shortcut (m_reset_windows_action, "main_window:reset"); + scmgr.set_shortcut (m_show_command_window_action, "main_window:show_command"); + scmgr.set_shortcut (m_show_history_action, "main_window:show_history"); + scmgr.set_shortcut (m_show_workspace_action, "main_window:show_workspace"); + scmgr.set_shortcut (m_show_file_browser_action, "main_window:show_file_browser"); + scmgr.set_shortcut (m_show_editor_action, "main_window:show_editor"); + scmgr.set_shortcut (m_show_documentation_action, "main_window:show_doc"); + scmgr.set_shortcut (m_show_variable_editor_action, "main_window:show_variable_editor"); + scmgr.set_shortcut (m_command_window_action, "main_window:command"); + scmgr.set_shortcut (m_history_action, "main_window:history"); + scmgr.set_shortcut (m_workspace_action, "main_window:workspace"); + scmgr.set_shortcut (m_file_browser_action, "main_window:file_browser"); + scmgr.set_shortcut (m_editor_action, "main_window:editor"); + scmgr.set_shortcut (m_documentation_action, "main_window:doc"); + scmgr.set_shortcut (m_variable_editor_action, "main_window:variable_editor"); + scmgr.set_shortcut (m_reset_windows_action, "main_window:reset"); // help menu - shortcut_manager::set_shortcut (m_ondisk_doc_action, "main_help:ondisk_doc"); - shortcut_manager::set_shortcut (m_online_doc_action, "main_help:online_doc"); - shortcut_manager::set_shortcut (m_report_bug_action, "main_help:report_bug"); - shortcut_manager::set_shortcut (m_octave_packages_action, "main_help:packages"); - shortcut_manager::set_shortcut (m_contribute_action, "main_help:contribute"); - shortcut_manager::set_shortcut (m_developer_action, "main_help:developer"); - shortcut_manager::set_shortcut (m_about_octave_action, "main_help:about"); + scmgr.set_shortcut (m_ondisk_doc_action, "main_help:ondisk_doc"); + scmgr.set_shortcut (m_online_doc_action, "main_help:online_doc"); + scmgr.set_shortcut (m_report_bug_action, "main_help:report_bug"); + scmgr.set_shortcut (m_octave_packages_action, "main_help:packages"); + scmgr.set_shortcut (m_contribute_action, "main_help:contribute"); + scmgr.set_shortcut (m_developer_action, "main_help:developer"); + scmgr.set_shortcut (m_about_octave_action, "main_help:about"); // news menu - shortcut_manager::set_shortcut (m_release_notes_action, - "main_news:release_notes"); - shortcut_manager::set_shortcut (m_current_news_action, - "main_news:community_news"); + scmgr.set_shortcut (m_release_notes_action, "main_news:release_notes"); + scmgr.set_shortcut (m_current_news_action, "main_news:community_news"); } QList<octave_dock_widget *> main_window::dock_widget_list (void)
--- a/libgui/src/octave-qobject.cc Mon Nov 04 13:34:44 2019 -0500 +++ b/libgui/src/octave-qobject.cc Mon Nov 04 14:03:00 2019 -0500 @@ -40,6 +40,7 @@ #include "qt-application.h" #include "qt-interpreter-events.h" #include "resource-manager.h" +#include "shortcut-manager.h" // Bug #55940 (Disable App Nap on Mac) #if defined (Q_OS_MAC) @@ -157,7 +158,7 @@ m_argc (m_app_context.sys_argc ()), m_argv (m_app_context.sys_argv ()), m_qapplication (new octave_qapplication (m_argc, m_argv)), - m_resource_manager (), + m_resource_manager (), m_shortcut_manager (*this), m_qt_tr (new QTranslator ()), m_gui_tr (new QTranslator ()), m_qsci_tr (new QTranslator ()), m_translators_installed (false), m_qt_interpreter_events (new qt_interpreter_events (*this)),
--- a/libgui/src/octave-qobject.h Mon Nov 04 13:34:44 2019 -0500 +++ b/libgui/src/octave-qobject.h Mon Nov 04 14:03:00 2019 -0500 @@ -34,6 +34,7 @@ #include "interpreter-qobject.h" #include "resource-manager.h" +#include "shortcut-manager.h" namespace octave { @@ -100,6 +101,11 @@ return m_resource_manager; } + shortcut_manager& get_shortcut_manager (void) + { + return m_shortcut_manager; + } + std::shared_ptr<qt_interpreter_events> get_qt_interpreter_events (void) { return m_qt_interpreter_events; @@ -145,6 +151,8 @@ resource_manager m_resource_manager; + shortcut_manager m_shortcut_manager; + QTranslator *m_qt_tr; QTranslator *m_gui_tr; QTranslator *m_qsci_tr;
--- a/libgui/src/settings-dialog.cc Mon Nov 04 13:34:44 2019 -0500 +++ b/libgui/src/settings-dialog.cc Mon Nov 04 14:03:00 2019 -0500 @@ -62,7 +62,6 @@ #include "gui-preferences-all.h" #include "octave-qobject.h" #include "settings-dialog.h" -#include "shortcut-manager.h" #include "variable-editor.h" #include "workspace-model.h" @@ -451,10 +450,12 @@ // shortcuts + shortcut_manager& scmgr = m_octave_qobj.get_shortcut_manager (); + cb_prevent_readline_conflicts->setChecked (settings->value ("shortcuts/prevent_readline_conflicts", true).toBool ()); // initialize the tree view with all shortcut data - shortcut_manager::fill_treewidget (shortcuts_treewidget); + scmgr.fill_treewidget (shortcuts_treewidget); // connect the buttons for import/export of the shortcut sets connect (btn_import_shortcut_set, SIGNAL (clicked (void)), @@ -607,17 +608,23 @@ void settings_dialog::import_shortcut_set (void) { - shortcut_manager::import_export (shortcut_manager::OSC_IMPORT); + shortcut_manager& scmgr = m_octave_qobj.get_shortcut_manager (); + + scmgr.import_export (shortcut_manager::OSC_IMPORT); } void settings_dialog::export_shortcut_set (void) { - shortcut_manager::import_export (shortcut_manager::OSC_EXPORT); + shortcut_manager& scmgr = m_octave_qobj.get_shortcut_manager (); + + scmgr.import_export (shortcut_manager::OSC_EXPORT); } void settings_dialog::default_shortcut_set (void) { - shortcut_manager::import_export (shortcut_manager::OSC_DEFAULT); + shortcut_manager& scmgr = m_octave_qobj.get_shortcut_manager (); + + scmgr.import_export (shortcut_manager::OSC_DEFAULT); } void settings_dialog::read_lexer_settings (QsciLexer *lexer, @@ -1034,8 +1041,10 @@ write_varedit_colors (settings); // shortcuts + settings->setValue ("shortcuts/prevent_readline_conflicts", cb_prevent_readline_conflicts->isChecked ()); - shortcut_manager::write_shortcuts (settings, closing); + shortcut_manager& scmgr = m_octave_qobj.get_shortcut_manager (); + scmgr.write_shortcuts (settings, closing); // settings dialog's geometry settings->setValue ("settings/last_tab", tabWidget->currentIndex ());
--- a/libgui/src/shortcut-manager.cc Mon Nov 04 13:34:44 2019 -0500 +++ b/libgui/src/shortcut-manager.cc Mon Nov 04 14:03:00 2019 -0500 @@ -109,9 +109,8 @@ } - shortcut_manager *shortcut_manager::instance = nullptr; - - shortcut_manager::shortcut_manager (void) + shortcut_manager::shortcut_manager (base_qobject& oct_qobj) + : m_octave_qobj (oct_qobj) { setObjectName ("Shortcut_Manager"); @@ -119,108 +118,9 @@ #if defined (Q_OS_MAC) QCoreApplication::setAttribute (Qt::AA_MacDontSwapCtrlAndMeta, true); #endif - - resource_manager& rmgr - = __get_resource_manager__ ("shortcut_manager::shortcut_manager"); - - m_settings = rmgr.get_settings (); - } - - void shortcut_manager::handle_double_clicked (QTreeWidgetItem *item, int col) - { - if (col != 2) - return; - - int i = m_item_index_hash[item]; - if (i == 0) - return; // top-level-item clicked - - shortcut_dialog (i-1); // correct to index starting at 0 } - void shortcut_manager::shortcut_dialog_finished (int result) - { - if (result == QDialog::Rejected) - return; - - // check for duplicate - int double_index = m_shortcut_hash[m_edit_actual->text ()] - 1; - - if (double_index >= 0 && double_index != m_handled_index) - { - int ret = QMessageBox::warning (this, tr ("Double Shortcut"), - tr ("The chosen shortcut\n \"%1\"\n" - "is already used for the action\n \"%2\".\n" - "Do you want to use the shortcut anyhow removing it " - "from the previous action?") - .arg (m_edit_actual->text ()) - .arg (m_sc.at (double_index).m_description), - QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes); - - if (ret == QMessageBox::Yes) - { - shortcut_t double_shortcut = m_sc.at (double_index); - double_shortcut.m_actual_sc = QKeySequence (); - m_sc.replace (double_index, double_shortcut); - m_index_item_hash[double_index]->setText (2, QString ()); - } - else - return; - } - - shortcut_t shortcut = m_sc.at (m_handled_index); - if (! shortcut.m_actual_sc.isEmpty ()) - m_shortcut_hash.remove (shortcut.m_actual_sc.toString ()); - shortcut.m_actual_sc = m_edit_actual->text (); - m_sc.replace (m_handled_index, shortcut); - - m_index_item_hash[m_handled_index]->setText (2, shortcut.m_actual_sc.toString ()); - - if (! shortcut.m_actual_sc.isEmpty ()) - m_shortcut_hash[shortcut.m_actual_sc.toString ()] = m_handled_index + 1; - } - - void shortcut_manager::shortcut_dialog_set_default (void) - { - m_edit_actual->setText (m_label_default->text ()); - } - - bool shortcut_manager::instance_ok (void) - { - bool retval = true; - - if (! instance) - instance = new shortcut_manager (); - - return retval; - } - - void shortcut_manager::init (const QString& description, const QString& key, - const QKeySequence& def_sc) - { - QKeySequence actual - = QKeySequence (m_settings->value ("shortcuts/" + key, def_sc).toString ()); - - // append the new shortcut to the list - shortcut_t shortcut_info; - shortcut_info.m_description = description; - shortcut_info.m_settings_key = key; - shortcut_info.m_actual_sc = actual; - shortcut_info.m_default_sc = def_sc; - m_sc << shortcut_info; - - // insert shortcut in order check for duplicates later - if (! actual.isEmpty ()) - m_shortcut_hash[actual.toString ()] = m_sc.count (); - m_action_hash[key] = m_sc.count (); - - // check whether ctrl+d is used from main window, i.e. is a global shortcut - if (key.startsWith ("main_") - && actual == QKeySequence (Qt::ControlModifier+Qt::Key_D)) - m_settings->setValue ("shortcuts/main_ctrld",true); - } - - void shortcut_manager::do_init_data (void) + void shortcut_manager::init_data (void) { Qt::KeyboardModifier ctrl; int prefix; @@ -241,7 +141,10 @@ // actions of the main window - m_settings->setValue ("shortcuts/main_ctrld",false); // reset use fo ctrl-d + resource_manager& rmgr = m_octave_qobj.get_resource_manager (); + gui_settings *settings = rmgr.get_settings (); + + settings->setValue ("shortcuts/main_ctrld",false); // reset use fo ctrl-d // file init (tr ("New File"), "main_file:new_file", QKeySequence::New); @@ -494,7 +397,7 @@ } // write one or all actual shortcut set(s) into a settings file - void shortcut_manager::do_write_shortcuts (gui_settings *settings, + void shortcut_manager::write_shortcuts (gui_settings *settings, bool closing) { bool sc_ctrld = false; @@ -520,33 +423,39 @@ settings->sync (); // sync the settings file } - void shortcut_manager::do_set_shortcut (QAction *action, const QString& key) + void shortcut_manager::set_shortcut (QAction *action, const QString& key) { int index; index = m_action_hash[key] - 1; + resource_manager& rmgr = m_octave_qobj.get_resource_manager (); + gui_settings *settings = rmgr.get_settings (); + if (index > -1 && index < m_sc.count ()) action->setShortcut - (QKeySequence (m_settings->value ("shortcuts/" + key, m_sc.at (index).m_default_sc).toString ())); + (QKeySequence (settings->value ("shortcuts/" + key, m_sc.at (index).m_default_sc).toString ())); else qDebug () << "Key: " << key << " not found in m_action_hash"; } - void shortcut_manager::do_shortcut (QShortcut *sc, const QString& key) + void shortcut_manager::shortcut (QShortcut *sc, const QString& key) { int index; index = m_action_hash[key] - 1; + resource_manager& rmgr = m_octave_qobj.get_resource_manager (); + gui_settings *settings = rmgr.get_settings (); + if (index > -1 && index < m_sc.count ()) - sc->setKey (QKeySequence (m_settings->value ("shortcuts/" + key, + sc->setKey (QKeySequence (settings->value ("shortcuts/" + key, m_sc.at (index).m_default_sc).toString ())); else qDebug () << "Key: " << key << " not found in m_action_hash"; } - void shortcut_manager::do_fill_treewidget (QTreeWidget *tree_view) + void shortcut_manager::fill_treewidget (QTreeWidget *tree_view) { m_dialog = nullptr; m_level_hash.clear (); @@ -667,14 +576,13 @@ m_item_index_hash[tree_item] = i + 1; // index+1 to avoid 0 m_index_item_hash[i] = tree_item; } - } // import or export of shortcut sets, // called from settings dialog when related buttons are clicked; // returns true on success, false otherwise bool - shortcut_manager::do_import_export (int action) + shortcut_manager::import_export (int action) { // ask to save the current shortcuts, maybe abort import if (action == OSC_DEFAULT || action == OSC_IMPORT) @@ -691,7 +599,9 @@ // FIXME: Remove, if for all common KDE versions (bug #54607) is resolved. int opts = 0; // No options by default. - if (! m_settings->value ("use_native_file_dialogs", + resource_manager& rmgr = m_octave_qobj.get_resource_manager (); + gui_settings *settings = rmgr.get_settings (); + if (! settings->value ("use_native_file_dialogs", true).toBool ()) opts = QFileDialog::DontUseNativeDialog; @@ -722,7 +632,7 @@ if (action == OSC_IMPORT) import_shortcuts (&osc_settings); // import (special action) else if (action == OSC_EXPORT) - do_write_shortcuts (&osc_settings, false); // export, (save settings) + write_shortcuts (&osc_settings, false); // export, (save settings) } } else @@ -733,6 +643,93 @@ return true; } + void shortcut_manager::handle_double_clicked (QTreeWidgetItem *item, int col) + { + if (col != 2) + return; + + int i = m_item_index_hash[item]; + if (i == 0) + return; // top-level-item clicked + + shortcut_dialog (i-1); // correct to index starting at 0 + } + + void shortcut_manager::shortcut_dialog_finished (int result) + { + if (result == QDialog::Rejected) + return; + + // check for duplicate + int double_index = m_shortcut_hash[m_edit_actual->text ()] - 1; + + if (double_index >= 0 && double_index != m_handled_index) + { + int ret = QMessageBox::warning (this, tr ("Double Shortcut"), + tr ("The chosen shortcut\n \"%1\"\n" + "is already used for the action\n \"%2\".\n" + "Do you want to use the shortcut anyhow removing it " + "from the previous action?") + .arg (m_edit_actual->text ()) + .arg (m_sc.at (double_index).m_description), + QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes); + + if (ret == QMessageBox::Yes) + { + shortcut_t double_shortcut = m_sc.at (double_index); + double_shortcut.m_actual_sc = QKeySequence (); + m_sc.replace (double_index, double_shortcut); + m_index_item_hash[double_index]->setText (2, QString ()); + } + else + return; + } + + shortcut_t shortcut = m_sc.at (m_handled_index); + if (! shortcut.m_actual_sc.isEmpty ()) + m_shortcut_hash.remove (shortcut.m_actual_sc.toString ()); + shortcut.m_actual_sc = m_edit_actual->text (); + m_sc.replace (m_handled_index, shortcut); + + m_index_item_hash[m_handled_index]->setText (2, shortcut.m_actual_sc.toString ()); + + if (! shortcut.m_actual_sc.isEmpty ()) + m_shortcut_hash[shortcut.m_actual_sc.toString ()] = m_handled_index + 1; + } + + void shortcut_manager::shortcut_dialog_set_default (void) + { + m_edit_actual->setText (m_label_default->text ()); + } + + void shortcut_manager::init (const QString& description, const QString& key, + const QKeySequence& def_sc) + { + resource_manager& rmgr = m_octave_qobj.get_resource_manager (); + gui_settings *settings = rmgr.get_settings (); + + QKeySequence actual + = QKeySequence (settings->value ("shortcuts/" + key, def_sc).toString ()); + + // append the new shortcut to the list + shortcut_t shortcut_info; + shortcut_info.m_description = description; + shortcut_info.m_settings_key = key; + shortcut_info.m_actual_sc = actual; + shortcut_info.m_default_sc = def_sc; + m_sc << shortcut_info; + + // insert shortcut in order check for duplicates later + if (! actual.isEmpty ()) + m_shortcut_hash[actual.toString ()] = m_sc.count (); + m_action_hash[key] = m_sc.count (); + + // check whether ctrl+d is used from main window, i.e. is a global shortcut + if (key.startsWith ("main_") + && actual == QKeySequence (Qt::ControlModifier+Qt::Key_D)) + settings->setValue ("shortcuts/main_ctrld",true); + } + void shortcut_manager::shortcut_dialog (int index) { if (! m_dialog) @@ -868,7 +865,7 @@ if (ret == QMessageBox::Save) { - if (do_import_export (OSC_EXPORT)) + if (import_export (OSC_EXPORT)) return true; // go ahead }
--- a/libgui/src/shortcut-manager.h Mon Nov 04 13:34:44 2019 -0500 +++ b/libgui/src/shortcut-manager.h Mon Nov 04 14:03:00 2019 -0500 @@ -58,6 +58,8 @@ }; + class base_qobject; + class shortcut_manager : public QWidget { Q_OBJECT @@ -71,7 +73,7 @@ OSC_DEFAULT = 2 }; - shortcut_manager (void); + shortcut_manager (base_qobject& oct_qobj); // No copying! @@ -81,47 +83,17 @@ ~shortcut_manager (void) = default; - static void init_data (void) - { - if (instance_ok ()) - instance->do_init_data (); - } + void init_data (void); - static void write_shortcuts (gui_settings *settings, bool closing) - { - if (instance_ok ()) - instance->do_write_shortcuts (settings, closing); - } + void write_shortcuts (gui_settings *settings, bool closing); - static void set_shortcut (QAction *action, const QString& key) - { - if (instance_ok ()) - instance->do_set_shortcut (action, key); - } + void set_shortcut (QAction *action, const QString& key); - static void shortcut (QShortcut *sc, const QString& key) - { - if (instance_ok () && sc) - instance->do_shortcut (sc, key); - } - - static void fill_treewidget (QTreeWidget *tree_view) - { - if (instance_ok ()) - instance->do_fill_treewidget (tree_view); - } + void shortcut (QShortcut *sc, const QString& key); - static void import_export (int action) - { - if (instance_ok ()) - instance->do_import_export (action); - } + void fill_treewidget (QTreeWidget *tree_view); - static shortcut_manager *instance; - - public slots: - - static void cleanup_instance (void) { delete instance; instance = nullptr; } + bool import_export (int action); protected slots: @@ -131,15 +103,7 @@ private: - static bool instance_ok (void); - void init (const QString&, const QString&, const QKeySequence&); - void do_init_data (); - void do_write_shortcuts (gui_settings *settings, bool closing); - void do_set_shortcut (QAction *action, const QString& key); - void do_shortcut (QShortcut *sc, const QString& key); - void do_fill_treewidget (QTreeWidget *tree_view); - bool do_import_export (int action); void shortcut_dialog (int); void import_shortcuts (gui_settings *settings); bool overwrite_all_shortcuts (void); @@ -188,6 +152,8 @@ QKeySequence m_default_sc; }; + base_qobject& m_octave_qobj; + QList<shortcut_t> m_sc; QHash<QString, int> m_shortcut_hash; QHash<QString, int> m_action_hash; @@ -199,8 +165,6 @@ enter_shortcut *m_edit_actual; QLabel *m_label_default; int m_handled_index; - - gui_settings *m_settings; }; }