Mercurial > octave
diff libgui/src/main-window.cc @ 27620:45bb5bbaf291
don't use singleton pattern for resource manager in GUI
Move ownership of the resource_manager object to the base_qobject
class. Store reference to resource_manager object as a member
variable in most objects that need to access it. Eliminate static
member functions in resource_managar class. Provide a
get_resource_manager method in the base_qboject class and a
global __get_resource_manager__ function for those instances where we
can't easily provide local access to the resource_manager object.
There are many changes to many files, but most are straightforward.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Fri, 01 Nov 2019 18:16:49 -0400 |
parents | deb8877f2c34 |
children | 8b6e928e0705 |
line wrap: on
line diff
--- a/libgui/src/main-window.cc Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/main-window.cc Fri Nov 01 18:16:49 2019 -0400 @@ -89,24 +89,27 @@ namespace octave { static file_editor_interface * - create_default_editor (QWidget *p) + create_default_editor (QWidget *p, resource_manager& rmgr) { #if defined (HAVE_QSCINTILLA) - return new file_editor (p); + return new file_editor (p, rmgr); #else octave_unused_parameter (p); + octave_unused_parameter (rmgr); return 0; #endif } main_window::main_window (base_qobject& oct_qobj) - : QMainWindow (), m_octave_qobj (oct_qobj), m_workspace_model (nullptr), + : QMainWindow (), m_octave_qobj (oct_qobj), + m_resource_manager (m_octave_qobj.get_resource_manager ()), + m_workspace_model (nullptr), m_status_bar (nullptr), m_command_window (nullptr), m_history_window (nullptr), m_file_browser_window (nullptr), m_doc_browser_window (nullptr), m_editor_window (nullptr), m_workspace_window (nullptr), m_variable_editor_window (nullptr), - m_external_editor (new external_editor_interface (this)), + m_external_editor (new external_editor_interface (this, m_resource_manager)), m_active_editor (m_external_editor), m_settings_dlg (nullptr), m_find_files_dlg (nullptr), m_set_path_dlg (nullptr), m_release_notes_window (nullptr), m_community_news_window (nullptr), @@ -114,29 +117,29 @@ m_prevent_readline_conflicts (true), m_suppress_dbg_location (true), m_closing (false), m_file_encoding (QString ()) { - if (resource_manager::is_first_run ()) + if (m_resource_manager.is_first_run ()) { // Before wizard. m_octave_qobj.config_translators (); - welcome_wizard welcomeWizard; + welcome_wizard welcomeWizard (m_resource_manager); if (welcomeWizard.exec () == QDialog::Rejected) exit (1); // Install settings file. - resource_manager::reload_settings (); + m_resource_manager.reload_settings (); } else { // Get settings file. - resource_manager::reload_settings (); + m_resource_manager.reload_settings (); // After settings. m_octave_qobj.config_translators (); } - resource_manager::update_network_settings (); + m_resource_manager.update_network_settings (); // We provide specific terminal capabilities, so ensure that // TERM is always set appropriately. @@ -151,15 +154,16 @@ construct_central_widget (); - m_workspace_model = new workspace_model (); + m_workspace_model = new workspace_model (m_resource_manager); m_status_bar = new QStatusBar (); - m_command_window = new terminal_dock_widget (this); - m_history_window = new history_dock_widget (this); - m_file_browser_window = new files_dock_widget (this); - m_doc_browser_window = new documentation_dock_widget (this); - m_editor_window = create_default_editor (this); - m_variable_editor_window = new variable_editor (this); - m_workspace_window = new workspace_view (this); + m_command_window = new terminal_dock_widget (this, m_resource_manager); + m_history_window = new history_dock_widget (this, m_resource_manager); + m_file_browser_window = new files_dock_widget (this, m_resource_manager); + m_doc_browser_window + = new documentation_dock_widget (this, m_resource_manager); + m_editor_window = create_default_editor (this, m_resource_manager); + m_variable_editor_window = new variable_editor (this, m_resource_manager); + m_workspace_window = new workspace_view (this, m_resource_manager); // Set active editor depending on editor window. If the latter is // not initialized (qscintilla not present), use the external editor. @@ -176,7 +180,7 @@ m_default_style = qapp->style ()->objectName (); - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); bool connect_to_web = true; QDateTime last_checked; @@ -259,7 +263,7 @@ { bool closenow = true; - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); if (settings->value ("prompt_to_exit", false).toBool ()) { @@ -347,7 +351,7 @@ void main_window::request_reload_settings (void) { - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); if (settings) emit settings_changed (settings); @@ -362,7 +366,7 @@ { // FIXME: Remove, if for all common KDE versions (bug #54607) is resolved. int opts = 0; // No options by default. - if (! resource_manager::get_settings ()->value ("use_native_file_dialogs", + if (! m_resource_manager.get_settings ()->value ("use_native_file_dialogs", true).toBool ()) opts = QFileDialog::DontUseNativeDialog; @@ -386,7 +390,7 @@ { // FIXME: Remove, if for all common KDE versions (bug #54607) is resolved. int opts = 0; // No options by default. - if (! resource_manager::get_settings ()->value ("use_native_file_dialogs", + if (! m_resource_manager.get_settings ()->value ("use_native_file_dialogs", true).toBool ()) opts = QFileDialog::DontUseNativeDialog; @@ -661,7 +665,7 @@ void main_window::load_and_display_community_news (int serial) { - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); bool connect_to_web = (settings @@ -674,8 +678,8 @@ QThread *worker_thread = new QThread; - news_reader *reader = new news_reader (base_url, page, serial, - connect_to_web); + news_reader *reader = new news_reader (m_resource_manager, base_url, + page, serial, connect_to_web); reader->moveToThread (worker_thread); @@ -782,7 +786,8 @@ return; } - m_settings_dlg = new settings_dialog (this, desired_tab); + m_settings_dlg + = new settings_dialog (this, m_resource_manager, desired_tab); connect (m_settings_dlg, SIGNAL (apply_new_settings (void)), this, SLOT (request_reload_settings (void))); @@ -895,7 +900,7 @@ m_suppress_dbg_location = ! settings->value ("terminal/print_debug_location", false).toBool (); - resource_manager::update_network_settings (); + m_resource_manager.update_network_settings (); emit active_dock_changed (nullptr, m_active_dock); // update dock widget styles @@ -970,7 +975,7 @@ { // FIXME: Remove, if for all common KDE versions (bug #54607) is resolved. int opts = QFileDialog::ShowDirsOnly; - if (! resource_manager::get_settings ()->value ("use_native_file_dialogs", + if (! m_resource_manager.get_settings ()->value ("use_native_file_dialogs", true).toBool ()) opts = QFileDialog::DontUseNativeDialog; @@ -1225,7 +1230,7 @@ // Open file isn't a file_editor_tab or editor function since the file // might be opened in an external editor. Hence, functionality is here. - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); bool is_internal = m_editor_window && ! settings->value ("useCustomFileEditor",false).toBool (); @@ -1242,7 +1247,7 @@ fileDialog->setDirectory (m_current_directory_combo_box->itemText (0)); // FIXME: Remove, if for all common KDE versions (bug #54607) is resolved. - if (! resource_manager::get_settings ()->value ("use_native_file_dialogs", + if (! m_resource_manager.get_settings ()->value ("use_native_file_dialogs", true).toBool ()) fileDialog->setOption(QFileDialog::DontUseNativeDialog); @@ -1268,7 +1273,7 @@ // editor window or the main window. The latter is chosen, if a custom // editor is used or qscintilla is not available QWidget *p = m_editor_window; - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); if (! p || settings->value ("useCustomFileEditor",false).toBool ()) p = this; QString new_name = QInputDialog::getText (p, tr ("New Function"), @@ -1427,7 +1432,7 @@ void main_window::read_settings (void) { - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); if (! settings) { @@ -1527,7 +1532,7 @@ void main_window::write_settings (void) { - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); if (! settings) { qDebug ("Error: gui_settings pointer from resource manager is NULL."); @@ -1622,7 +1627,7 @@ void main_window::handle_octave_ready (void) { // actions after the startup files are executed - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); QDir startup_dir = QDir (); // current octave dir after startup @@ -1675,7 +1680,7 @@ if (m_set_path_dlg) // m_set_path_dlg is a guarded pointer! return; - m_set_path_dlg = new set_path_dialog (this); + m_set_path_dlg = new set_path_dialog (this, m_resource_manager); m_set_path_dlg->setModal (false); m_set_path_dlg->setAttribute (Qt::WA_DeleteOnClose); @@ -1712,7 +1717,7 @@ if (! m_find_files_dlg) { - m_find_files_dlg = new find_files_dialog (this); + m_find_files_dlg = new find_files_dialog (this, m_resource_manager); connect (m_find_files_dlg, SIGNAL (finished (int)), this, SLOT (find_files_finished (int))); @@ -1837,7 +1842,7 @@ void main_window::restore_create_file_setting (void) { // restore the new files creation setting - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); settings->setValue ("editor/create_new_file",false); disconnect (m_editor_window, SIGNAL (file_loaded_signal (void)), this, SLOT (restore_create_file_setting (void))); @@ -1998,10 +2003,6 @@ connect (qApp, SIGNAL (aboutToQuit (void)), shortcut_manager::instance, SLOT (cleanup_instance (void))); - // gui_settings are saved upon deletion (i.e., cleanup_instance) - connect (qApp, SIGNAL (aboutToQuit (void)), - resource_manager::instance, SLOT (cleanup_instance (void))); - connect (qApp, SIGNAL (focusChanged (QWidget*, QWidget*)), this, SLOT (focus_changed (QWidget*, QWidget*))); @@ -2292,7 +2293,7 @@ construct_new_menu (file_menu); m_open_action - = file_menu->addAction (resource_manager::icon ("document-open"), + = file_menu->addAction (m_resource_manager.icon ("document-open"), tr ("Open...")); m_open_action->setShortcutContext (Qt::ApplicationShortcut); m_open_action->setToolTip (tr ("Open an existing file in editor")); @@ -2333,7 +2334,7 @@ QMenu *new_menu = p->addMenu (tr ("New")); m_new_script_action - = new_menu->addAction (resource_manager::icon ("document-new"), + = new_menu->addAction (m_resource_manager.icon ("document-new"), tr ("New Script")); m_new_script_action->setShortcutContext (Qt::ApplicationShortcut); @@ -2372,18 +2373,18 @@ QKeySequence ctrl_shift = Qt::ControlModifier + Qt::ShiftModifier; m_undo_action - = edit_menu->addAction (resource_manager::icon ("edit-undo"), tr ("Undo")); + = edit_menu->addAction (m_resource_manager.icon ("edit-undo"), tr ("Undo")); m_undo_action->setShortcutContext (Qt::ApplicationShortcut); edit_menu->addSeparator (); m_copy_action - = edit_menu->addAction (resource_manager::icon ("edit-copy"), + = edit_menu->addAction (m_resource_manager.icon ("edit-copy"), tr ("Copy"), this, SLOT (copyClipboard (void))); m_copy_action->setShortcutContext (Qt::ApplicationShortcut); m_paste_action - = edit_menu->addAction (resource_manager::icon ("edit-paste"), + = edit_menu->addAction (m_resource_manager.icon ("edit-paste"), tr ("Paste"), this, SLOT (pasteClipboard (void))); m_paste_action->setShortcutContext (Qt::ApplicationShortcut); @@ -2398,7 +2399,7 @@ edit_menu->addSeparator (); m_find_files_action - = edit_menu->addAction (resource_manager::icon ("edit-find"), + = edit_menu->addAction (m_resource_manager.icon ("edit-find"), tr ("Find Files...")); edit_menu->addSeparator (); @@ -2418,7 +2419,7 @@ = edit_menu->addAction (tr ("Set Path")); m_preferences_action - = edit_menu->addAction (resource_manager::icon ("preferences-system"), + = edit_menu->addAction (m_resource_manager.icon ("preferences-system"), tr ("Preferences...")); connect (m_find_files_action, SIGNAL (triggered (void)), @@ -2457,7 +2458,7 @@ const char *member) { QAction *action = add_action (m_debug_menu, - resource_manager::icon (QString (icon)), + m_resource_manager.icon (QString (icon)), item, member); action->setEnabled (false); @@ -2679,10 +2680,10 @@ m_main_tool_bar->addWidget (new QLabel (tr ("Current Directory: "))); m_main_tool_bar->addWidget (m_current_directory_combo_box); QAction *current_dir_up - = m_main_tool_bar->addAction (resource_manager::icon ("go-up"), + = m_main_tool_bar->addAction (m_resource_manager.icon ("go-up"), tr ("One directory up")); QAction *current_dir_search - = m_main_tool_bar->addAction (resource_manager::icon ("folder"), + = m_main_tool_bar->addAction (m_resource_manager.icon ("folder"), tr ("Browse directories")); connect (m_current_directory_combo_box, SIGNAL (activated (QString)), @@ -2703,7 +2704,7 @@ void main_window::focus_console_after_command (void) { - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); if (settings->value ("terminal/focus_after_command",false).toBool ()) focus_command_window (); }