Mercurial > octave
changeset 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.
line wrap: on
line diff
--- a/libgui/graphics/Canvas.cc Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/graphics/Canvas.cc Fri Nov 01 18:16:49 2019 -0400 @@ -72,6 +72,17 @@ m_redrawBlocked = block; } + static QCursor + make_cursor (const QString& name, int hot_x = -1, int hot_y = -1) + { + octave::resource_manager& rmgr + = octave::__get_resource_manager__ ("make_cursor"); + + QIcon icon = rmgr.icon (name); + + return QCursor (icon.pixmap (22, 22), hot_x, hot_y); + } + void Canvas::setCursor (MouseMode mode, std::string fallback, QImage cdata, Matrix hotspot) @@ -89,24 +100,15 @@ if (fallback == "arrow") cursor = Qt::ArrowCursor; else if (fallback == "botl") - cursor = QCursor (octave::resource_manager::icon - ("bottom_left_corner").pixmap (22,22), - 5, 16); + cursor = make_cursor ("bottom_left_corner", 5, 16); else if (fallback == "botr") - cursor = QCursor (octave::resource_manager::icon - ("bottom_right_corner").pixmap (22, 22), - 16, 16); + cursor = make_cursor ("bottom_right_corner", 16, 16); else if (fallback == "bottom") - cursor = QCursor (octave::resource_manager::icon - ("bottom_side").pixmap (22, 22), - 11, 16); + cursor = make_cursor ("bottom_side", 11, 16); else if (fallback == "circle") - cursor = QCursor (octave::resource_manager::icon - ("circle").pixmap (22, 22), - 10, 10); + cursor = make_cursor ("circle", 10, 10); else if (fallback == "cross" || fallback == "crosshair") - cursor = QCursor (octave::resource_manager::icon - ("cross").pixmap (22, 22), 10, 10); + cursor = make_cursor ("cross", 10, 10); else if (fallback == "custom") { if (hotspot(0) > cdata.width () || hotspot(0) < 1.0 @@ -118,31 +120,21 @@ static_cast<int> (hotspot(0) - 1)); } else if (fallback == "fleur") - cursor = QCursor (octave::resource_manager::icon - ("fleur").pixmap (22, 22), 10, 4); + cursor = make_cursor ("fleur", 10, 4); else if (fallback == "hand") - cursor = QCursor (octave::resource_manager::icon - ("hand2").pixmap (22, 22), 7, 3); + cursor = make_cursor ("hand2", 7, 3); else if (fallback == "ibeam") cursor = Qt::IBeamCursor; else if (fallback == "left") - cursor = QCursor (octave::resource_manager::icon - ("left_side").pixmap (22, 22), 4, 10); + cursor = make_cursor ("left_side", 4, 10); else if (fallback == "right") - cursor = QCursor (octave::resource_manager::icon - ("right_side").pixmap (22, 22), - 17, 10); + cursor = make_cursor ("right_side", 17, 10); else if (fallback == "top") - cursor = QCursor (octave::resource_manager::icon - ("top_side").pixmap (22, 22), 11, 4); + cursor = make_cursor ("top_side", 11, 4); else if (fallback == "topl") - cursor = QCursor (octave::resource_manager::icon - ("top_left_corner").pixmap (22, 22), - 4, 4); + cursor = make_cursor ("top_left_corner", 4, 4); else if (fallback == "topr") - cursor = QCursor (octave::resource_manager::icon - ("top_right_corner").pixmap (22, 22), - 16, 4); + cursor = make_cursor ("top_right_corner", 16, 4); else if (fallback == "watch") cursor = Qt::BusyCursor; } @@ -152,13 +144,11 @@ break; case PanMode: - cursor = QCursor (octave::resource_manager::icon ("figure-pan") - .pixmap (22, 22)); + cursor = make_cursor ("figure-pan"); break; case RotateMode: - cursor = QCursor (octave::resource_manager::icon ("figure-rotate") - .pixmap (22, 22)); + cursor = make_cursor ("figure-rotate"); break; case TextMode: @@ -166,13 +156,11 @@ break; case ZoomInMode: - cursor = QCursor (octave::resource_manager::icon ("figure-zoom-in") - .pixmap (22, 22), 9, 9); + cursor = make_cursor ("figure-zoom-in", 9, 9); break; case ZoomOutMode: - cursor = QCursor (octave::resource_manager::icon ("figure-zoom-out") - .pixmap (22, 22), 9, 9); + cursor = make_cursor ("figure-zoom-out", 9, 9); break; default:
--- a/libgui/graphics/ToolBarButton.cc Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/graphics/ToolBarButton.cc Fri Nov 01 18:16:49 2019 -0400 @@ -33,6 +33,13 @@ namespace QtHandles { + static QIcon get_icon (const std::string& name) + { + octave::resource_manager& rmgr + = octave::__get_resource_manager__ ("get_icon"); + + return rmgr.icon (QString::fromStdString (name)); + } template <typename T> ToolBarButton<T>::ToolBarButton (const graphics_object& go, QAction *action) @@ -51,7 +58,7 @@ QIcon ico; std::string name = tp.get___named_icon__ (); if (! name.empty ()) - ico = octave::resource_manager::icon (QString::fromStdString (name)); + ico = get_icon (name); action->setIcon (ico); } @@ -106,7 +113,8 @@ QIcon ico; std::string name = tp.get___named_icon__ (); if (! name.empty ()) - ico = octave::resource_manager::icon (QString::fromStdString (name)); + ico = get_icon (name); + action->setIcon (ico); } else
--- a/libgui/graphics/annotation-dialog.cc Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/graphics/annotation-dialog.cc Fri Nov 01 18:16:49 2019 -0400 @@ -50,7 +50,10 @@ { ui->setupUi (this); - octave::gui_settings *settings = octave::resource_manager::get_settings (); + octave::resource_manager& rmgr + = octave::__get_resource_manager__ ("annotation_dialog::init"); + + octave::gui_settings *settings = rmgr.get_settings (); // restore last geometry if (settings) @@ -94,7 +97,10 @@ QDialogButtonBox::ButtonRole button_role = ui->button_box->buttonRole (button); - octave::gui_settings *settings = octave::resource_manager::get_settings (); + octave::resource_manager& rmgr + = octave::__get_resource_manager__ ("annotation_dialog::button_clicked"); + + octave::gui_settings *settings = rmgr.get_settings (); // save position if (settings)
--- a/libgui/qterminal/libqterminal/QTerminal.h Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/qterminal/libqterminal/QTerminal.h Fri Nov 01 18:16:49 2019 -0400 @@ -135,18 +135,21 @@ QTerminal (QWidget *xparent = nullptr) : QWidget (xparent) { + octave::resource_manager& rmgr + = octave::__get_resource_manager__ ("QTerminal::QTerminal"); + // context menu setContextMenuPolicy (Qt::CustomContextMenu); _contextMenu = new QMenu (this); _copy_action - = _contextMenu->addAction (octave::resource_manager::icon ("edit-copy"), - tr ("Copy"), this, SLOT (copyClipboard ())); + = _contextMenu->addAction (rmgr.icon ("edit-copy"), tr ("Copy"), this, + SLOT (copyClipboard ())); _paste_action - = _contextMenu->addAction (octave::resource_manager::icon ("edit-paste"), - tr ("Paste"), this, SLOT (pasteClipboard ())); + = _contextMenu->addAction (rmgr.icon ("edit-paste"), tr ("Paste"), this, + SLOT (pasteClipboard ())); _contextMenu->addSeparator ();
--- a/libgui/src/dialog.cc Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/dialog.cc Fri Nov 01 18:16:49 2019 -0400 @@ -660,8 +660,10 @@ setDirectory (dirname); // FIXME: Remove, if for all common KDE versions (bug #54607) is resolved. - if (! resource_manager::get_settings ()->value ("use_native_file_dialogs", - true).toBool ()) + resource_manager& rmgr + = __get_resource_manager__ ("FileDialog::FileDialog"); + gui_settings *settings = rmgr.get_settings (); + if (! settings->value ("use_native_file_dialogs", true).toBool ()) setOption(QFileDialog::DontUseNativeDialog); if (multimode == "on") // uigetfile multiselect=on
--- a/libgui/src/documentation-dock-widget.cc Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/documentation-dock-widget.cc Fri Nov 01 18:16:49 2019 -0400 @@ -30,14 +30,15 @@ namespace octave { - documentation_dock_widget::documentation_dock_widget (QWidget *p) - : octave_dock_widget ("DocumentationDockWidget", p) + documentation_dock_widget::documentation_dock_widget (QWidget *p, + resource_manager& rmgr) + : octave_dock_widget ("DocumentationDockWidget", p, rmgr) { setWindowIcon (QIcon (":/actions/icons/logo.png")); set_title (tr ("Documentation")); setStatusTip (tr ("See the documentation for help.")); - m_docs = new documentation (this); + m_docs = new documentation (this, rmgr); setWidget (m_docs); connect (p, SIGNAL (show_doc_signal (const QString&)),
--- a/libgui/src/documentation-dock-widget.h Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/documentation-dock-widget.h Fri Nov 01 18:16:49 2019 -0400 @@ -28,13 +28,15 @@ namespace octave { + class resource_manager; + class documentation_dock_widget : public octave_dock_widget { Q_OBJECT public: - documentation_dock_widget (QWidget *parent = nullptr); + documentation_dock_widget (QWidget *parent, resource_manager& rmgr); ~documentation_dock_widget (void); public slots:
--- a/libgui/src/documentation.cc Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/documentation.cc Fri Nov 01 18:16:49 2019 -0400 @@ -55,9 +55,9 @@ { // The documentation splitter, which is the main widget // of the doc dock widget - documentation::documentation (QWidget *p) + documentation::documentation (QWidget *p, resource_manager& rmgr) : QSplitter (Qt::Horizontal, p), - m_doc_widget (p), + m_resource_manager (rmgr), m_doc_widget (p), m_tool_bar (new QToolBar (p)), m_query_string (QString ()), m_prev_pages_menu (new QMenu (p)), @@ -140,13 +140,13 @@ QToolButton *forward_button = new QToolButton (find_footer); forward_button->setText (tr ("Search forward")); forward_button->setToolTip (tr ("Search forward")); - forward_button->setIcon (resource_manager::icon ("go-down")); + forward_button->setIcon (m_resource_manager.icon ("go-down")); connect (forward_button, SIGNAL (pressed (void)), this, SLOT(find (void))); QToolButton *backward_button = new QToolButton (find_footer); backward_button->setText (tr ("Search backward")); backward_button->setToolTip (tr ("Search backward")); - backward_button->setIcon (resource_manager::icon ("go-up")); + backward_button->setIcon (m_resource_manager.icon ("go-up")); connect (backward_button, SIGNAL (pressed (void)), this, SLOT(find_backward (void))); QHBoxLayout *h_box_find_footer = new QHBoxLayout (find_footer); @@ -163,7 +163,7 @@ v_box_browser_find->addWidget (find_footer); browser_find->setLayout (v_box_browser_find); - notice_settings (resource_manager::get_settings ()); + notice_settings (m_resource_manager.get_settings ()); m_findnext_shortcut->setContext (Qt::WidgetWithChildrenShortcut); connect (m_findnext_shortcut, SIGNAL (activated (void)), @@ -318,10 +318,10 @@ void documentation::construct_tool_bar (void) { // Home, Previous, Next - m_action_go_home = add_action (resource_manager::icon ("go-home"), + m_action_go_home = add_action (m_resource_manager.icon ("go-home"), tr ("Go home"), SLOT (home (void)), m_doc_browser, m_tool_bar); - m_action_go_prev = add_action (resource_manager::icon ("go-previous"), + m_action_go_prev = add_action (m_resource_manager.icon ("go-previous"), tr ("Go back"), SLOT (backward (void)), m_doc_browser, m_tool_bar); m_action_go_prev->setEnabled (false); @@ -335,7 +335,7 @@ popdown_button_prev_pages->setCheckable (false); popdown_button_prev_pages->setArrowType(Qt::DownArrow); m_tool_bar->addWidget (popdown_button_prev_pages); - m_action_go_next = add_action (resource_manager::icon ("go-next"), + m_action_go_next = add_action (m_resource_manager.icon ("go-next"), tr ("Go forward"), SLOT (forward (void)), m_doc_browser, m_tool_bar); m_action_go_next->setEnabled (false); @@ -378,19 +378,19 @@ // Find m_tool_bar->addSeparator (); - m_action_find = add_action (resource_manager::icon ("edit-find"), + m_action_find = add_action (m_resource_manager.icon ("edit-find"), tr ("Find"), SLOT (activate_find (void)), this, m_tool_bar); // Zoom m_tool_bar->addSeparator (); - m_action_zoom_in = add_action (resource_manager::icon ("zoom-in"), + m_action_zoom_in = add_action (m_resource_manager.icon ("zoom-in"), tr ("Zoom in"), SLOT (zoom_in (void)), m_doc_browser, m_tool_bar); - m_action_zoom_out = add_action (resource_manager::icon ("zoom-out"), + m_action_zoom_out = add_action (m_resource_manager.icon ("zoom-out"), tr ("Zoom out"), SLOT (zoom_out (void)), m_doc_browser, m_tool_bar); - m_action_zoom_original = add_action (resource_manager::icon ("zoom-original"), + m_action_zoom_original = add_action (m_resource_manager.icon ("zoom-original"), tr ("Zoom original"), SLOT (zoom_original (void)), m_doc_browser, m_tool_bar); }
--- a/libgui/src/documentation.h Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/documentation.h Fri Nov 01 18:16:49 2019 -0400 @@ -37,6 +37,8 @@ namespace octave { + class resource_manager; + //! Documentation browser derived from Textbrowser class documentation_browser : public QTextBrowser @@ -93,7 +95,7 @@ public: - documentation (QWidget *parent = nullptr); + documentation (QWidget *parent, resource_manager& rmgr); ~documentation (void); signals: @@ -141,6 +143,8 @@ //! Select all occurrences of a string in the doc browser void select_all_occurrences (const QString& text); + resource_manager& m_resource_manager; + QHelpEngine *m_help_engine; QString m_internal_search; documentation_browser *m_doc_browser;
--- a/libgui/src/dw-main-window.cc Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/dw-main-window.cc Fri Nov 01 18:16:49 2019 -0400 @@ -39,25 +39,25 @@ namespace octave { - dw_main_window::dw_main_window (QWidget *p) - : QMainWindow (p) + dw_main_window::dw_main_window (resource_manager& rmgr, QWidget *p) + : QMainWindow (p), m_resource_manager (rmgr) { // Adding the actions for closing the dock widgets m_close_action = add_action (nullptr, - resource_manager::icon ("window-close",false), + m_resource_manager.icon ("window-close",false), tr ("&Close"), SLOT (request_close ()), this); m_close_all_action = add_action (nullptr, - resource_manager::icon ("window-close",false), + m_resource_manager.icon ("window-close",false), tr ("Close &All"), SLOT (request_close_all ()), this); m_close_others_action = add_action (nullptr, - resource_manager::icon ("window-close",false), + m_resource_manager.icon ("window-close",false), tr ("Close &Other"), SLOT (request_close_other ()), this); @@ -76,7 +76,7 @@ m_actions_list << m_switch_left_action; m_actions_list << m_switch_right_action; - notice_settings (resource_manager::get_settings ()); + notice_settings (m_resource_manager.get_settings ()); }
--- a/libgui/src/dw-main-window.h Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/dw-main-window.h Fri Nov 01 18:16:49 2019 -0400 @@ -29,6 +29,7 @@ namespace octave { + class resource_manager; class dw_main_window : public QMainWindow { @@ -36,7 +37,7 @@ public: - dw_main_window (QWidget *parent = nullptr); + dw_main_window (resource_manager& rmgr, QWidget *parent = nullptr); ~dw_main_window (void) = default; @@ -69,11 +70,13 @@ void request_switch (int direction); - QList<QDockWidget *> m_dw_list; - QAction *add_action (QMenu *menu, const QIcon& icon, const QString& text, const char *member, QWidget *receiver); + resource_manager& m_resource_manager; + + QList<QDockWidget *> m_dw_list; + QAction *m_close_action; QAction *m_close_all_action; QAction *m_close_others_action;
--- a/libgui/src/external-editor-interface.cc Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/external-editor-interface.cc Fri Nov 01 18:16:49 2019 -0400 @@ -33,8 +33,9 @@ namespace octave { - external_editor_interface::external_editor_interface (QWidget *p) - : QWidget (p) + external_editor_interface::external_editor_interface (QWidget *p, + resource_manager& rmgr) + : QWidget (p), m_resource_manager (rmgr) { } // Calling the external editor @@ -97,7 +98,7 @@ // Get and verify the settings of the external editor program QString external_editor_interface::external_editor (void) { - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); QString editor = settings->value ("customFileEditor").toString (); // check the settings (avoid an empty string)
--- a/libgui/src/external-editor-interface.h Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/external-editor-interface.h Fri Nov 01 18:16:49 2019 -0400 @@ -29,14 +29,15 @@ namespace octave { + class resource_manager; + class external_editor_interface : public QWidget { - Q_OBJECT public: - external_editor_interface (QWidget *main_win); + external_editor_interface (QWidget *main_win, resource_manager& rmgr); ~external_editor_interface (void) = default; @@ -61,6 +62,8 @@ private: QString external_editor (void); + + resource_manager& m_resource_manager; }; }
--- a/libgui/src/files-dock-widget.cc Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/files-dock-widget.cc Fri Nov 01 18:16:49 2019 -0400 @@ -67,8 +67,8 @@ } }; - files_dock_widget::files_dock_widget (QWidget *p) - : octave_dock_widget ("FilesDockWidget", p) + files_dock_widget::files_dock_widget (QWidget *p, resource_manager& rmgr) + : octave_dock_widget ("FilesDockWidget", p, rmgr) { setWindowIcon (QIcon (":/actions/icons/logo.png")); set_title (tr ("File Browser")); @@ -127,18 +127,18 @@ QSizePolicy sizePol (QSizePolicy::Expanding, QSizePolicy::Preferred); m_current_directory->setSizePolicy (sizePol); - QAction *directory_up_action = new QAction (resource_manager::icon ("go-up"), + QAction *directory_up_action = new QAction (m_resource_manager.icon ("go-up"), "", m_navigation_tool_bar); directory_up_action->setToolTip (tr ("One directory up")); m_sync_browser_directory_action - = new QAction (resource_manager::icon ("go-first"), + = new QAction (m_resource_manager.icon ("go-first"), tr ("Show Octave directory"), m_navigation_tool_bar); m_sync_browser_directory_action->setToolTip (tr ("Go to current Octave directory")); m_sync_browser_directory_action->setEnabled (false); m_sync_octave_directory_action - = new QAction (resource_manager::icon ("go-last"), + = new QAction (m_resource_manager.icon ("go-last"), tr ("Set Octave directory"), m_navigation_tool_bar); m_sync_octave_directory_action->setToolTip (tr ("Set Octave directory to current browser directory")); m_sync_octave_directory_action->setEnabled (false); @@ -146,30 +146,30 @@ QToolButton *popdown_button = new QToolButton (); popdown_button->setToolTip (tr ("Actions on current directory")); QMenu *popdown_menu = new QMenu (); - popdown_menu->addAction (resource_manager::icon ("user-home"), + popdown_menu->addAction (m_resource_manager.icon ("user-home"), tr ("Show Home Directory"), this, SLOT (popdownmenu_home (bool))); popdown_menu->addAction (m_sync_browser_directory_action); popdown_menu->addAction (m_sync_octave_directory_action); popdown_button->setMenu (popdown_menu); popdown_button->setPopupMode (QToolButton::InstantPopup); - popdown_button->setDefaultAction (new QAction (resource_manager::icon ("applications-system"), + popdown_button->setDefaultAction (new QAction (m_resource_manager.icon ("applications-system"), "", m_navigation_tool_bar)); popdown_menu->addSeparator (); - popdown_menu->addAction (resource_manager::icon ("folder"), + popdown_menu->addAction (m_resource_manager.icon ("folder"), tr ("Set Browser Directory..."), this, SLOT (popdownmenu_search_dir (bool))); popdown_menu->addSeparator (); - popdown_menu->addAction (resource_manager::icon ("edit-find"), + popdown_menu->addAction (m_resource_manager.icon ("edit-find"), tr ("Find Files..."), this, SLOT (popdownmenu_findfiles (bool))); popdown_menu->addSeparator (); - popdown_menu->addAction (resource_manager::icon ("document-new"), + popdown_menu->addAction (m_resource_manager.icon ("document-new"), tr ("New File..."), this, SLOT (popdownmenu_newfile (bool))); - popdown_menu->addAction (resource_manager::icon ("folder-new"), + popdown_menu->addAction (m_resource_manager.icon ("folder-new"), tr ("New Directory..."), this, SLOT (popdownmenu_newdir (bool))); @@ -184,7 +184,7 @@ connect (m_sync_browser_directory_action, SIGNAL (triggered ()), this, SLOT (do_sync_browser_directory ())); - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); // FIXME: what should happen if settings is 0? // Create the QFileSystemModel starting in the desired directory @@ -303,7 +303,7 @@ void files_dock_widget::save_settings (void) { - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); if (! settings) return; @@ -404,7 +404,7 @@ QString abs_fname = fileInfo.absoluteFilePath (); QString suffix = fileInfo.suffix ().toLower (); - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); QString ext = settings->value (fb_txt_file_ext.key, fb_txt_file_ext.def).toString (); QStringList extensions = ext.split (";", QString::SkipEmptyParts); @@ -432,7 +432,7 @@ void files_dock_widget::toggle_header (int col) { - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); QString key = m_columns_shown_keys.at (col); bool shown = settings->value (key,false).toBool (); @@ -463,7 +463,7 @@ delete m_sig_mapper; m_sig_mapper = new QSignalMapper (this); - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); for (int i = 0; i < m_columns_shown.size (); i++) { @@ -507,7 +507,7 @@ } // construct the context menu depending on item - menu.addAction (resource_manager::icon ("document-open"), tr ("Open"), + menu.addAction (m_resource_manager.icon ("document-open"), tr ("Open"), this, SLOT (contextmenu_open (bool))); if (info.isDir ()) @@ -524,7 +524,7 @@ this, SLOT (contextmenu_copy_selection (bool))); if (info.isFile () && info.suffix () == "m") - menu.addAction (resource_manager::icon ("media-playback-start"), + menu.addAction (m_resource_manager.icon ("media-playback-start"), tr ("Run"), this, SLOT (contextmenu_run (bool))); if (info.isFile ()) @@ -533,7 +533,7 @@ if (info.isDir ()) { menu.addSeparator (); - menu.addAction (resource_manager::icon ("go-first"), + menu.addAction (m_resource_manager.icon ("go-first"), tr ("Set Current Directory"), this, SLOT (contextmenu_setcurrentdir (bool))); @@ -553,23 +553,23 @@ menu.addSeparator (); - menu.addAction (resource_manager::icon ("edit-find"), + menu.addAction (m_resource_manager.icon ("edit-find"), tr ("Find Files..."), this, SLOT (contextmenu_findfiles (bool))); } menu.addSeparator (); menu.addAction (tr ("Rename..."), this, SLOT (contextmenu_rename (bool))); - menu.addAction (resource_manager::icon ("edit-delete"), + menu.addAction (m_resource_manager.icon ("edit-delete"), tr ("Delete..."), this, SLOT (contextmenu_delete (bool))); if (info.isDir ()) { menu.addSeparator (); - menu.addAction (resource_manager::icon ("document-new"), + menu.addAction (m_resource_manager.icon ("document-new"), tr ("New File..."), this, SLOT (contextmenu_newfile (bool))); - menu.addAction (resource_manager::icon ("folder-new"), + menu.addAction (m_resource_manager.icon ("folder-new"), tr ("New Directory..."), this, SLOT (contextmenu_newdir (bool))); } @@ -914,7 +914,7 @@ { // FIXME: Remove, if for all common KDE versions (bug #54607) is resolved. int opts = QFileDialog::ShowDirsOnly; - if (! resource_manager::get_settings ()->value ( + if (! m_resource_manager.get_settings ()->value ( global_use_native_dialogs.key, global_use_native_dialogs.def).toBool ()) opts |= QFileDialog::DontUseNativeDialog;
--- a/libgui/src/files-dock-widget.h Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/files-dock-widget.h Fri Nov 01 18:16:49 2019 -0400 @@ -45,6 +45,8 @@ namespace octave { + class resource_manager; + //! Dock widget to display files in the current directory. class files_dock_widget : public octave_dock_widget @@ -53,7 +55,7 @@ public: - files_dock_widget (QWidget *parent = nullptr); + files_dock_widget (QWidget *parent, resource_manager& rmgr); ~files_dock_widget (void) = default;
--- a/libgui/src/find-files-dialog.cc Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/find-files-dialog.cc Fri Nov 01 18:16:49 2019 -0400 @@ -48,11 +48,11 @@ namespace octave { - find_files_dialog::find_files_dialog (QWidget *p) - : QDialog (p) + find_files_dialog::find_files_dialog (QWidget *p, resource_manager& rmgr) + : QDialog (p), m_resource_manager (rmgr) { setWindowTitle (tr ("Find Files")); - setWindowIcon (resource_manager::icon ("edit-find")); + setWindowIcon (m_resource_manager.icon ("edit-find")); m_dir_iterator = nullptr; @@ -60,7 +60,7 @@ connect (m_timer, SIGNAL (timeout (void)), this, SLOT (look_for_files (void))); - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); QLabel *file_name_label = new QLabel (tr ("Named:")); m_file_name_edit = new QLineEdit; @@ -210,7 +210,7 @@ void find_files_dialog::save_settings (void) { - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); if (! settings) return; @@ -315,7 +315,7 @@ { int opts = 0; // No options by default. // 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 ()) opts = QFileDialog::DontUseNativeDialog;
--- a/libgui/src/find-files-dialog.h Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/find-files-dialog.h Fri Nov 01 18:16:49 2019 -0400 @@ -36,13 +36,15 @@ namespace octave { + class resource_manager; + class find_files_dialog : public QDialog { Q_OBJECT public: - find_files_dialog (QWidget *parent = nullptr); + find_files_dialog (QWidget *parent, resource_manager& rmgr); virtual ~find_files_dialog (void); @@ -70,6 +72,8 @@ bool is_match (const QFileInfo& info); + resource_manager& m_resource_manager; + QLineEdit *m_start_dir_edit; QLineEdit *m_file_name_edit; QPushButton *m_stop_button;
--- a/libgui/src/history-dock-widget.cc Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/history-dock-widget.cc Fri Nov 01 18:16:49 2019 -0400 @@ -44,8 +44,8 @@ namespace octave { - history_dock_widget::history_dock_widget (QWidget *p) - : octave_dock_widget ("HistoryDockWidget", p) + history_dock_widget::history_dock_widget (QWidget *p, resource_manager& rmgr) + : octave_dock_widget ("HistoryDockWidget", p, rmgr) { setStatusTip (tr ("Browse and search the command history.")); @@ -90,7 +90,7 @@ void history_dock_widget::save_settings (void) { - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); if (! settings) return; @@ -139,11 +139,11 @@ if (index.isValid () && index.column () == 0) { - menu.addAction (resource_manager::icon ("edit-copy"), + menu.addAction (m_resource_manager.icon ("edit-copy"), tr ("Copy"), this, SLOT (handle_contextmenu_copy (bool))); menu.addAction (tr ("Evaluate"), this, SLOT (handle_contextmenu_evaluate (bool))); - menu.addAction (resource_manager::icon ("document-new"), + menu.addAction (m_resource_manager.icon ("document-new"), tr ("Create script"), this, SLOT (handle_contextmenu_create_script (bool))); } @@ -315,7 +315,7 @@ widget ()->setLayout (hist_layout); // Init state of the filter - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); m_filter_shown = settings->value (hw_filter_shown.key, hw_filter_shown.def).toBool ();
--- a/libgui/src/history-dock-widget.h Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/history-dock-widget.h Fri Nov 01 18:16:49 2019 -0400 @@ -34,13 +34,15 @@ namespace octave { + class resource_manager; + class history_dock_widget : public octave_dock_widget { Q_OBJECT public: - history_dock_widget (QWidget *parent = nullptr); + history_dock_widget (QWidget *parent, resource_manager& rmgr); ~history_dock_widget (void) = default;
--- a/libgui/src/m-editor/file-editor-interface.h Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/m-editor/file-editor-interface.h Fri Nov 01 18:16:49 2019 -0400 @@ -37,10 +37,9 @@ public: - file_editor_interface (QWidget *p) - : octave_dock_widget ("FileEditor", p) - { - } + file_editor_interface (QWidget *p, resource_manager& rmgr) + : octave_dock_widget ("FileEditor", p, rmgr) + { } virtual ~file_editor_interface (void) = default;
--- a/libgui/src/m-editor/file-editor-tab.cc Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/m-editor/file-editor-tab.cc Fri Nov 01 18:16:49 2019 -0400 @@ -95,7 +95,9 @@ // Make parent null for the file editor tab so that warning WindowModal // messages don't affect grandparents. - file_editor_tab::file_editor_tab (const QString& directory_arg) + file_editor_tab::file_editor_tab (resource_manager& rmgr, + const QString& directory_arg) + : m_resource_manager (rmgr) { m_lexer_apis = nullptr; m_is_octave_file = true; @@ -106,7 +108,7 @@ m_file_name = ""; m_file_system_watcher.setObjectName ("_qt_autotest_force_engine_poller"); - m_edit_area = new octave_qscintilla (this); + m_edit_area = new octave_qscintilla (this, m_resource_manager); m_line = 0; m_col = 0; @@ -254,7 +256,7 @@ connect (this, SIGNAL (do_save_file_signal (const QString&, bool, bool)), this, SLOT (do_save_file (const QString&, bool, bool))); - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); if (settings) notice_settings (settings, true); @@ -696,7 +698,7 @@ { QsciLexer *lexer = m_edit_area->lexer (); - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); if (m_lexer_apis) { @@ -1656,7 +1658,7 @@ if (input_str) { bool ok; - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); used_comment_str = QInputDialog::getText (this, tr ("Comment selected text"), @@ -2040,7 +2042,7 @@ "This does not change the default encoding.\n")); QComboBox *enc_combo = new QComboBox (); - resource_manager::combo_encoding (enc_combo); + m_resource_manager.combo_encoding (enc_combo); m_new_encoding = enc_combo->currentText (); connect (enc_combo, SIGNAL (currentTextChanged (const QString&)), this , SLOT (handle_current_enc_changed (const QString&))); @@ -2097,7 +2099,7 @@ #else int os_eol_mode = QsciScintilla::EolUnix; #endif - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); QsciScintilla::EolMode eol_mode = static_cast<QsciScintilla::EolMode> (settings->value ("editor/default_eol_mode",os_eol_mode).toInt ()); @@ -2180,7 +2182,7 @@ { update_window_title (false); // window title (no modification) - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); // set the eol mode from the settings or depending on the OS if the entry is // missing in the settings @@ -2482,7 +2484,7 @@ fileDialog->setViewMode (QFileDialog::Detail); // 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);
--- a/libgui/src/m-editor/file-editor-tab.h Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/m-editor/file-editor-tab.h Fri Nov 01 18:16:49 2019 -0400 @@ -40,6 +40,7 @@ #include "marker.h" #include "octave-qscintilla.h" #include "qt-interpreter-events.h" +#include "resource-manager.h" class octave_value_list; @@ -53,7 +54,7 @@ public: - file_editor_tab (const QString& directory = ""); + file_editor_tab (resource_manager& rmgr, const QString& directory = ""); ~file_editor_tab (void); @@ -268,6 +269,8 @@ private: + resource_manager& m_resource_manager; + struct bp_info { bp_info (const QString& fname, int l = 0, const QString& cond = "");
--- a/libgui/src/m-editor/file-editor.cc Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/m-editor/file-editor.cc Fri Nov 01 18:16:49 2019 -0400 @@ -84,8 +84,8 @@ // File editor - file_editor::file_editor (QWidget *p) - : file_editor_interface (p) + file_editor::file_editor (QWidget *p, resource_manager& rmgr) + : file_editor_interface (p, rmgr) { // Set current editing directory before construct because loaded // files will change ced accordingly. @@ -157,7 +157,7 @@ void file_editor::handle_enter_debug_mode (void) { - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); QString sc_run = settings->value ("shortcuts/editor_run:run_file").toString (); QString sc_cont = settings->value ("shortcuts/main_debug:continue").toString (); @@ -219,7 +219,7 @@ // 2. When the editor becomes visible when octave is running void file_editor::empty_script (bool startup, bool visible) { - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); if (settings->value ("useCustomFileEditor",false).toBool ()) return; // do not open an empty script in the external editor @@ -426,7 +426,7 @@ // Here, the application or the editor will be closed -> store the session // Save open files for restoring in next session; this only is possible - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); // save filenames (even if last session will not be restored next time) // together with encoding and the tab index @@ -819,7 +819,7 @@ m_tab_widget->setTabToolTip (i, tip); if (modified) m_tab_widget->setTabIcon (i, - resource_manager::icon ("document-save")); + m_resource_manager.icon ("document-save")); else m_tab_widget->setTabIcon (i, QIcon ()); } @@ -1321,7 +1321,7 @@ if (m_closed && visible) { m_closed = false; - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); restore_session (settings); } @@ -1383,7 +1383,7 @@ if (call_custom_editor (openFileName, line)) return; // custom editor called - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); bool show_dbg_file = settings->value (ed_show_dbg_file.key, ed_show_dbg_file.def).toBool (); @@ -1660,7 +1660,7 @@ // handler for the close event void file_editor::closeEvent (QCloseEvent *e) { - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); if (settings->value ("editor/hiding_closes_files",false).toBool ()) { if (check_closing ()) @@ -1734,7 +1734,7 @@ m_tab_widget = new file_editor_tab_widget (editor_widget); // the mru-list and an empty array of actions - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); m_mru_files = settings->value ("editor/mru_file_list").toStringList (); m_mru_files_encodings = settings->value ("editor/mru_file_encodings") .toStringList (); @@ -1776,13 +1776,13 @@ m_save_action = add_action (m_fileMenu, - resource_manager::icon ("document-save"), + m_resource_manager.icon ("document-save"), tr ("&Save File"), SLOT (request_save_file (bool))); m_save_as_action = add_action (m_fileMenu, - resource_manager::icon ("document-save-as"), + m_resource_manager.icon ("document-save-as"), tr ("Save File &As..."), SLOT (request_save_file_as (bool))); @@ -1790,19 +1790,19 @@ m_close_action = add_action (m_fileMenu, - resource_manager::icon ("window-close",false), + m_resource_manager.icon ("window-close",false), tr ("&Close"), SLOT (request_close_file (bool))); m_close_all_action = add_action (m_fileMenu, - resource_manager::icon ("window-close",false), + m_resource_manager.icon ("window-close",false), tr ("Close All"), SLOT (request_close_all_files (bool))); m_close_others_action = add_action (m_fileMenu, - resource_manager::icon ("window-close",false), + m_resource_manager.icon ("window-close",false), tr ("Close Other Files"), SLOT (request_close_other_files (bool))); @@ -1810,7 +1810,7 @@ m_print_action = add_action (m_fileMenu, - resource_manager::icon ("document-print"), + m_resource_manager.icon ("document-print"), tr ("Print..."), SLOT (request_print_file (bool))); @@ -1820,7 +1820,7 @@ m_redo_action = add_action (m_edit_menu, - resource_manager::icon ("edit-redo"), + m_resource_manager.icon ("edit-redo"), tr ("&Redo"), SLOT (request_redo (bool))); m_redo_action->setEnabled (false); @@ -1829,14 +1829,14 @@ m_cut_action = add_action (m_edit_menu, - resource_manager::icon ("edit-cut"), + m_resource_manager.icon ("edit-cut"), tr ("Cu&t"), SLOT (request_cut (bool))); m_cut_action->setEnabled (false); m_find_action = add_action (m_edit_menu, - resource_manager::icon ("edit-find-replace"), + m_resource_manager.icon ("edit-find-replace"), tr ("&Find and Replace..."), SLOT (request_find (bool))); @@ -2018,12 +2018,12 @@ m_preferences_action = add_action (m_edit_menu, - resource_manager::icon ("preferences-system"), + m_resource_manager.icon ("preferences-system"), tr ("&Preferences..."), SLOT (request_preferences (bool))); m_styles_preferences_action - = add_action (m_edit_menu, resource_manager::icon ("preferences-system"), + = add_action (m_edit_menu, m_resource_manager.icon ("preferences-system"), tr ("&Styles Preferences..."), SLOT (request_styles_preferences (bool))); @@ -2086,12 +2086,12 @@ view_menu->addSeparator (); m_zoom_in_action - = add_action (view_menu, resource_manager::icon ("zoom-in"), + = add_action (view_menu, m_resource_manager.icon ("zoom-in"), tr ("Zoom &In"), SLOT (zoom_in (bool))); m_zoom_out_action - = add_action (view_menu, resource_manager::icon ("zoom-out"), + = add_action (view_menu, m_resource_manager.icon ("zoom-out"), tr ("Zoom &Out"), SLOT (zoom_out (bool))); @@ -2115,25 +2115,25 @@ m_toggle_breakpoint_action = add_action (m_debug_menu, - resource_manager::icon ("bp-toggle"), + m_resource_manager.icon ("bp-toggle"), tr ("Toggle &Breakpoint"), SLOT (request_toggle_breakpoint (bool))); m_next_breakpoint_action = add_action (m_debug_menu, - resource_manager::icon ("bp-next"), + m_resource_manager.icon ("bp-next"), tr ("&Next Breakpoint"), SLOT (request_next_breakpoint (bool))); m_previous_breakpoint_action = add_action (m_debug_menu, - resource_manager::icon ("bp-prev"), + m_resource_manager.icon ("bp-prev"), tr ("Pre&vious Breakpoint"), SLOT (request_previous_breakpoint (bool))); m_remove_all_breakpoints_action = add_action (m_debug_menu, - resource_manager::icon ("bp-rm-all"), + m_resource_manager.icon ("bp-rm-all"), tr ("&Remove All Breakpoints"), SLOT (request_remove_breakpoint (bool))); @@ -2147,7 +2147,7 @@ m_run_action = add_action (_run_menu, - resource_manager::icon ("system-run"), + m_resource_manager.icon ("system-run"), tr ("Save File and Run / Continue"), SLOT (request_run_file (bool))); @@ -2270,7 +2270,7 @@ file_editor_tab * file_editor::make_file_editor_tab (const QString& directory) { - file_editor_tab *f = new file_editor_tab (directory); + file_editor_tab *f = new file_editor_tab (m_resource_manager, directory); // signals from the qscintilla edit area connect (f->qsci_edit_area (), SIGNAL (status_update (bool, bool)), @@ -2520,7 +2520,7 @@ } // save actual mru-list in settings - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); settings->setValue ("editor/mru_file_list", m_mru_files); settings->setValue ("editor/mru_file_encodings", m_mru_files_encodings); @@ -2530,7 +2530,7 @@ bool file_editor::call_custom_editor (const QString& file_name, int line) { // Check if the user wants to use a custom file editor. - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); if (settings->value ("useCustomFileEditor",false).toBool ()) { @@ -2549,7 +2549,7 @@ void file_editor::toggle_preference (const QString& preference, bool def) { - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); bool old = settings->value (preference,def).toBool (); settings->setValue (preference,! old); notice_settings (settings);
--- a/libgui/src/m-editor/file-editor.h Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/m-editor/file-editor.h Fri Nov 01 18:16:49 2019 -0400 @@ -88,7 +88,7 @@ } }; - file_editor (QWidget *p); + file_editor (QWidget *p, resource_manager& rmgr); ~file_editor (void);
--- a/libgui/src/m-editor/octave-qscintilla.cc Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/m-editor/octave-qscintilla.cc Fri Nov 01 18:16:49 2019 -0400 @@ -108,9 +108,9 @@ return retval; } - octave_qscintilla::octave_qscintilla (QWidget *p) - : QsciScintilla (p), m_word_at_cursor (), m_selection (), - m_selection_replacement (), m_selection_line (-1), + octave_qscintilla::octave_qscintilla (QWidget *p, resource_manager& rmgr) + : QsciScintilla (p), m_resource_manager (rmgr), m_word_at_cursor (), + m_selection (), m_selection_replacement (), m_selection_line (-1), m_selection_col (-1), m_indicator_id (1) { connect (this, SIGNAL (textChanged (void)), @@ -397,7 +397,7 @@ case SCLEX_MATLAB: #endif { - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); int comment_string; if (comment) @@ -775,11 +775,11 @@ // Create tmp file required for adding command to history QPointer<QTemporaryFile> tmp_hist - = resource_manager::create_tmp_file (); // empty tmp file for history + = m_resource_manager.create_tmp_file (); // empty tmp file for history // Create tmp file required for the script echoing and adding cmd to hist QPointer<QTemporaryFile> tmp_script - = resource_manager::create_tmp_file ("m"); // tmp script file + = m_resource_manager.create_tmp_file ("m"); // tmp script file bool tmp = (tmp_hist && tmp_hist->open () && tmp_script && tmp_script->open()); @@ -850,7 +850,7 @@ // Create tmp file with the code to be executed by the interpreter QPointer<QTemporaryFile> tmp_file - = resource_manager::create_tmp_file ("m", code); + = m_resource_manager.create_tmp_file ("m", code); tmp = (tmp_file && tmp_file->open ()); if (! tmp) @@ -862,7 +862,7 @@ tmp_file->close (); // Disable opening a file at a breakpoint in case keyboard () is used - gui_settings* settings = resource_manager::get_settings (); + gui_settings* settings = m_resource_manager.get_settings (); bool show_dbg_file = settings->value (ed_show_dbg_file.key, ed_show_dbg_file.def).toBool (); settings->setValue (ed_show_dbg_file.key, false); @@ -903,11 +903,11 @@ QTemporaryFile* tmp_hist, QTemporaryFile* tmp_script) { - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); settings->setValue (ed_show_dbg_file.key, show_dbg_file); - resource_manager::remove_tmp_file (tmp_file); - resource_manager::remove_tmp_file (tmp_hist); - resource_manager::remove_tmp_file (tmp_script); + m_resource_manager.remove_tmp_file (tmp_file); + m_resource_manager.remove_tmp_file (tmp_hist); + m_resource_manager.remove_tmp_file (tmp_script); }
--- a/libgui/src/m-editor/octave-qscintilla.h Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/m-editor/octave-qscintilla.h Fri Nov 01 18:16:49 2019 -0400 @@ -36,13 +36,15 @@ namespace octave { + class resource_manager; + class octave_qscintilla : public QsciScintilla { Q_OBJECT public: - octave_qscintilla (QWidget *p); + octave_qscintilla (QWidget *p, resource_manager& rmgr); ~octave_qscintilla (void) = default; @@ -124,6 +126,8 @@ void auto_close (int auto_endif, int l, const QString& line, QString& first_word); + resource_manager& m_resource_manager; + QString m_word_at_cursor; QString m_selection;
--- 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 (); }
--- a/libgui/src/main-window.h Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/main-window.h Fri Nov 01 18:16:49 2019 -0400 @@ -289,6 +289,8 @@ base_qobject& m_octave_qobj; + resource_manager& m_resource_manager; + workspace_model *m_workspace_model; QHash<QMenu*, QStringList> m_hash_menu_text;
--- a/libgui/src/news-reader.cc Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/news-reader.cc Fri Nov 01 18:16:49 2019 -0400 @@ -66,7 +66,7 @@ { if (m_serial >= 0) { - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); if (settings) {
--- a/libgui/src/news-reader.h Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/news-reader.h Fri Nov 01 18:16:49 2019 -0400 @@ -29,16 +29,19 @@ namespace octave { + class resource_manager; + class news_reader : public QObject { Q_OBJECT public: - news_reader (const QString& base_url, const QString& page, - int serial = -1, bool connect_to_web = false) - : QObject (), m_base_url (base_url), m_page (page), m_serial (serial), - m_connect_to_web (connect_to_web) + news_reader (resource_manager& rmgr, const QString& base_url, + const QString& page, int serial = -1, + bool connect_to_web = false) + : QObject (), m_resource_manager (rmgr), m_base_url (base_url), + m_page (page), m_serial (serial), m_connect_to_web (connect_to_web) { } signals: @@ -53,6 +56,8 @@ private: + resource_manager& m_resource_manager; + QString m_base_url; QString m_page; int m_serial;
--- a/libgui/src/octave-dock-widget.cc Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/octave-dock-widget.cc Fri Nov 01 18:16:49 2019 -0400 @@ -42,9 +42,9 @@ namespace octave { - label_dock_widget::label_dock_widget (QWidget *p) - : QDockWidget (p), m_default_float_button (nullptr), - m_default_close_button (nullptr) + label_dock_widget::label_dock_widget (QWidget *p, resource_manager& rmgr) + : QDockWidget (p), m_resource_manager (rmgr), + m_default_float_button (nullptr), m_default_close_button (nullptr) { QStyle *st = style (); m_icon_size = 0.75*st->pixelMetric (QStyle::PM_SmallIconSize); @@ -176,9 +176,10 @@ .arg ((icon_size*2)/3). arg((icon_size*7)/3); } - octave_dock_widget::octave_dock_widget (const QString& obj_name, QWidget *p) - : label_dock_widget (p), m_recent_float_geom (), m_recent_dock_geom (), - m_waiting_for_mouse_button_release (false) + octave_dock_widget::octave_dock_widget (const QString& obj_name, QWidget *p, + resource_manager& rmgr) + : label_dock_widget (p, rmgr), m_recent_float_geom (), + m_recent_dock_geom (), m_waiting_for_mouse_button_release (false) { setObjectName (obj_name); @@ -244,7 +245,7 @@ setFeatures (QDockWidget::AllDockWidgetFeatures); - handle_settings (resource_manager::get_settings ()); + handle_settings (m_resource_manager.get_settings ()); } // connect signal visibility changed to related slot (called from main-window) @@ -325,7 +326,7 @@ bool vis = isVisible (); // Since floating widget has no parent, we have to read it - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); settings->setValue (mw_state.key, m_parent->saveState ()); // Stay window, otherwise will bounce back to window by default because @@ -516,7 +517,7 @@ { // save state of this dock-widget QString name = objectName (); - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); if (! settings) return; @@ -757,13 +758,13 @@ // The keys are also used in the settings dialog, but // octave_dock_widget::handle_settings is already called at program start. // These tests can be removed in a future version of Octave (version 6). - resource_manager::update_settings_key ("Dockwidgets/title_bg_color", + m_resource_manager.update_settings_key ("Dockwidgets/title_bg_color", "DockWidgets/title_bg_color"); - resource_manager::update_settings_key ("Dockwidgets/title_bg_color_active", + m_resource_manager.update_settings_key ("Dockwidgets/title_bg_color_active", "DockWidgets/title_bg_color_active"); - resource_manager::update_settings_key ("Dockwidgets/title_fg_color", + m_resource_manager.update_settings_key ("Dockwidgets/title_fg_color", "DockWidgets/title_fg_color"); - resource_manager::update_settings_key ("Dockwidgets/title_fg_color_active", + m_resource_manager.update_settings_key ("Dockwidgets/title_fg_color_active", "DockWidgets/title_fg_color_active"); } }
--- a/libgui/src/octave-dock-widget.h Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/octave-dock-widget.h Fri Nov 01 18:16:49 2019 -0400 @@ -34,6 +34,7 @@ namespace octave { + class resource_manager; // The few decoration items common to both main window and variable editor. @@ -43,7 +44,7 @@ public: - label_dock_widget (QWidget *p = nullptr); + label_dock_widget (QWidget *p, resource_manager& rmgr); // set_title() uses the custom title bar while setWindowTitle() uses // the default title bar (with style sheets) @@ -64,6 +65,8 @@ protected: + resource_manager& m_resource_manager; + int m_icon_size; QWidget *m_title_widget; QToolButton *m_dock_button; @@ -81,7 +84,8 @@ public: - octave_dock_widget (const QString& obj_name, QWidget *p = nullptr); + octave_dock_widget (const QString& obj_name, QWidget *p, + resource_manager& rmgr); virtual ~octave_dock_widget (void) = default;
--- a/libgui/src/octave-qobject.cc Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/octave-qobject.cc Fri Nov 01 18:16:49 2019 -0400 @@ -106,6 +106,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_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)), @@ -254,7 +255,7 @@ if (m_translators_installed) return; - resource_manager::config_translators (m_qt_tr, m_qsci_tr, m_gui_tr); + m_resource_manager.config_translators (m_qt_tr, m_qsci_tr, m_gui_tr); m_qapplication->installTranslator (m_qt_tr); m_qapplication->installTranslator (m_gui_tr); @@ -343,7 +344,7 @@ : base_qobject (app_context) { // Get settings file. - resource_manager::reload_settings (); + m_resource_manager.reload_settings (); // After settings. config_translators ();
--- a/libgui/src/octave-qobject.h Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/octave-qobject.h Fri Nov 01 18:16:49 2019 -0400 @@ -33,6 +33,7 @@ #include <QStringList> #include "interpreter-qobject.h" +#include "resource-manager.h" namespace octave { @@ -94,6 +95,11 @@ // The Qt QApplication. QApplication * qapplication (void) { return m_qapplication; }; + resource_manager& get_resource_manager (void) + { + return m_resource_manager; + } + std::shared_ptr<qt_interpreter_events> get_qt_interpreter_events (void) { return m_qt_interpreter_events; @@ -137,6 +143,8 @@ octave_qapplication *m_qapplication; + resource_manager m_resource_manager; + QTranslator *m_qt_tr; QTranslator *m_gui_tr; QTranslator *m_qsci_tr;
--- a/libgui/src/qt-interpreter-events.cc Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/qt-interpreter-events.cc Fri Nov 01 18:16:49 2019 -0400 @@ -104,8 +104,9 @@ } qt_interpreter_events::qt_interpreter_events (base_qobject& oct_qobj) - : interpreter_events (), m_octave_qobj (oct_qobj), m_result (), - m_mutex (), m_waitcondition (), m_uiwidget_creator () + : interpreter_events (), m_octave_qobj (oct_qobj), + m_resource_manager (m_octave_qobj.get_resource_manager ()), + m_result (), m_mutex (), m_waitcondition (), m_uiwidget_creator () { qRegisterMetaType<QIntList> ("QIntList"); qRegisterMetaType<QFloatList> ("QFloatList"); @@ -274,7 +275,7 @@ bool qt_interpreter_events::prompt_new_edit_file (const std::string& file) { - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); if (! settings || settings->value ("editor/create_new_file",false).toBool ()) return true; @@ -388,7 +389,7 @@ { QMutexLocker autolock (&m_mutex); - m_result = QVariant::fromValue (resource_manager::icon (name)); + m_result = QVariant::fromValue (m_resource_manager.icon (name)); wake_all (); } @@ -577,7 +578,7 @@ { QMutexLocker autolock (&m_mutex); - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); QString read_value = settings->value (key).toString (); @@ -616,7 +617,7 @@ adjusted_value = adjusted_value.toUpper (); QStringList codecs; - resource_manager::get_codecs (&codecs); + m_resource_manager.get_codecs (&codecs); QRegExp re ("^CP(\\d+)$");
--- a/libgui/src/qt-interpreter-events.h Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/qt-interpreter-events.h Fri Nov 01 18:16:49 2019 -0400 @@ -47,6 +47,7 @@ namespace octave { class base_qobject; + class resource_manager; // The functions in this class are not normally called directly, but // are invoked from the Octave interpreter thead by methods in the @@ -257,6 +258,8 @@ base_qobject& m_octave_qobj; + resource_manager& m_resource_manager; + QVariant m_result; QMutex m_mutex;
--- a/libgui/src/resource-manager.cc Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/resource-manager.cc Fri Nov 01 18:16:49 2019 -0400 @@ -39,6 +39,7 @@ #include "QTerminal.h" #include "gui-preferences-ed.h" #include "gui-preferences-global.h" +#include "octave-qobject.h" #include "resource-manager.h" #include "variable-editor.h" #include "workspace-model.h" @@ -52,7 +53,25 @@ namespace octave { - resource_manager *resource_manager::instance = nullptr; + base_qobject& __get_octave_qobject__ (const std::string& who) + { + base_qobject *oct_qobj = base_qobject::the_octave_qobject (); + + if (! oct_qobj) + { + abort (); + error ("%s: octave_qobject context missing", who.c_str ()); + } + + return *oct_qobj; + } + + resource_manager& __get_resource_manager__ (const std::string& who) + { + base_qobject& oct_qobj = __get_octave_qobject__ (who); + + return oct_qobj.get_resource_manager (); + } static QString default_qt_settings_file (void) @@ -150,7 +169,8 @@ QString language = "SYSTEM"; // take system language per default - gui_settings *settings = resource_manager::get_settings (); + resource_manager& rmgr = __get_resource_manager__ (""); + gui_settings *settings = rmgr.get_settings (); if (settings) { @@ -205,37 +225,27 @@ return variable_editor::color_names (); } - bool resource_manager::instance_ok (void) - { - bool retval = true; - - if (! instance) - instance = new resource_manager (); - - return retval; - } - - gui_settings * resource_manager::do_get_settings (void) const + gui_settings * resource_manager::get_settings (void) const { return m_settings; } - gui_settings * resource_manager::do_get_default_settings (void) const + gui_settings * resource_manager::get_default_settings (void) const { return m_default_settings; } - QString resource_manager::do_get_settings_directory (void) + QString resource_manager::get_settings_directory (void) { return m_settings_directory; } - QString resource_manager::do_get_settings_file (void) + QString resource_manager::get_settings_file (void) { return m_settings_file; } - QString resource_manager::do_get_default_font_family (void) + QString resource_manager::get_default_font_family (void) { // Get the default monospaced font #if defined (HAVE_QFONT_MONOSPACE) @@ -253,9 +263,9 @@ return default_family; } - void resource_manager::do_reload_settings (void) + void resource_manager::reload_settings (void) { - QString default_family = do_get_default_font_family (); + QString default_family = get_default_font_family (); if (! QFile::exists (m_settings_file)) { @@ -269,7 +279,7 @@ QString settings_text = in.readAll (); qt_settings.close (); - default_family = do_get_default_font_family (); + default_family = get_default_font_family (); QString default_font_size = "10"; @@ -309,7 +319,7 @@ user_settings.close (); } - do_set_settings (m_settings_file); + set_settings (m_settings_file); // Write the default monospace font into the settings for later use by // console and editor as fallbacks of their font prefernces. @@ -318,7 +328,7 @@ } - void resource_manager::do_set_settings (const QString& file) + void resource_manager::set_settings (const QString& file) { delete m_settings; m_settings = new gui_settings (file, QSettings::IniFormat); @@ -335,14 +345,14 @@ QMessageBox::critical (nullptr, QString (QT_TR_NOOP ("Octave Critical Error")), - msg.arg (do_get_settings_file ()).arg (do_get_settings_directory ())); + msg.arg (get_settings_file ()).arg (get_settings_directory ())); exit (1); } } - bool resource_manager::do_update_settings_key (const QString& old_key, - const QString& new_key) + bool resource_manager::update_settings_key (const QString& old_key, + const QString& new_key) { if (m_settings->contains (old_key)) { @@ -355,12 +365,12 @@ return false; } - bool resource_manager::do_is_first_run (void) const + bool resource_manager::is_first_run (void) const { return ! QFile::exists (m_settings_file); } - void resource_manager::do_update_network_settings (void) + void resource_manager::update_network_settings (void) { if (m_settings) { @@ -392,7 +402,7 @@ } } - QIcon resource_manager::do_icon (const QString& icon_name, bool fallback) + QIcon resource_manager::icon (const QString& icon_name, bool fallback) { // If system icon theme is not desired, take own icon files if (! m_settings->value (global_icon_theme.key, global_icon_theme.def).toBool ()) @@ -408,7 +418,7 @@ } // get a list of all available encodings - void resource_manager::do_get_codecs (QStringList *codecs) + void resource_manager::get_codecs (QStringList *codecs) { // get the codec name for each mib QList<int> all_mibs = QTextCodec::availableMibs (); @@ -428,10 +438,11 @@ } // initialize a given combo box with available text encodings - void resource_manager::do_combo_encoding (QComboBox *combo, QString current) + void resource_manager::combo_encoding (QComboBox *combo, + const QString& current) { QStringList all_codecs; - do_get_codecs (&all_codecs); + get_codecs (&all_codecs); // get the value from the settings file if no current encoding is given QString enc = current; @@ -483,8 +494,8 @@ } QPointer<QTemporaryFile> - resource_manager::do_create_tmp_file (const QString& extension, - const QString& contents) + resource_manager::create_tmp_file (const QString& extension, + const QString& contents) { QString ext = extension; if ((! ext.isEmpty ()) && (! ext.startsWith ('.'))) @@ -510,7 +521,7 @@ return tmp_file; } - void resource_manager::do_remove_tmp_file (QPointer<QTemporaryFile> tmp_file) + void resource_manager::remove_tmp_file (QPointer<QTemporaryFile> tmp_file) { if (tmp_file) {
--- a/libgui/src/resource-manager.h Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/resource-manager.h Fri Nov 01 18:16:49 2019 -0400 @@ -33,6 +33,10 @@ namespace octave { + class resource_manager; + + extern resource_manager& __get_resource_manager__ (const std::string& who); + class resource_manager : public QObject { Q_OBJECT @@ -51,135 +55,57 @@ ~resource_manager (); - static gui_settings * get_settings (void) - { - return instance_ok () ? instance->do_get_settings () : nullptr; - } + QString get_gui_translation_dir (void); + + void config_translators (QTranslator *qt_tr, QTranslator *qsci_tr, + QTranslator *gui_tr); - static QIcon icon (const QString& icon_name, bool fallback = true) - { - if (instance_ok ()) - return instance->do_icon (icon_name, fallback); + QString storage_class_chars (void) { return "agp"; } - return QIcon (); - } + QStringList storage_class_names (void); - static gui_settings * get_default_settings (void) - { - return instance_ok () ? instance->do_get_default_settings () : nullptr; - } + QList<QColor> storage_class_default_colors (void); - static QString get_settings_file (void) - { - return instance_ok () ? instance->do_get_settings_file () : QString (); - } + QString varedit_color_chars (void) {return "fbsha"; } - static void reload_settings (void) - { - if (instance_ok ()) - instance->do_reload_settings (); - } + QStringList varedit_color_names (void); + + QList<QColor> varedit_default_colors (void); - static void set_settings (const QString& file) - { - if (instance_ok ()) - instance->do_set_settings (file); - } + gui_settings * get_settings (void) const; - static bool update_settings_key (const QString& new_key, - const QString& old_key) - { - return (instance_ok () - ? instance->do_update_settings_key (new_key, old_key) - : false); - } + gui_settings * get_default_settings (void) const; + + QString get_settings_directory (void); - static void get_codecs (QStringList *codecs) - { - if (instance_ok ()) - instance->do_get_codecs (codecs); - } + QString get_settings_file (void); + + QString get_default_font_family (void); - static void combo_encoding (QComboBox *combo, QString current = QString ()) - { - if (instance_ok ()) - instance->do_combo_encoding (combo, current); - } - - static QString get_gui_translation_dir (void); + QPointer<QTemporaryFile> + create_tmp_file (const QString& extension = QString (), + const QString& contents = QString ()); - static void config_translators (QTranslator*, QTranslator*, QTranslator*); + void remove_tmp_file (QPointer<QTemporaryFile> tmp_file); - static void update_network_settings (void) - { - if (instance_ok ()) - instance->do_update_network_settings (); - } + void reload_settings (void); - static bool is_first_run (void) - { - return instance_ok () ? instance->do_is_first_run () : true; - } + void set_settings (const QString& file); - static QPointer<QTemporaryFile> create_tmp_file ( - const QString& extension = QString (), - const QString& contents = QString ()) - { - return instance_ok () ? instance->do_create_tmp_file (extension, contents) : QPointer<QTemporaryFile> (); - } + bool update_settings_key (const QString& new_key, const QString& old_key); + + bool is_first_run (void) const; - static void remove_tmp_file (QPointer<QTemporaryFile> tmp_file) - { - if (instance_ok ()) - instance->do_remove_tmp_file (tmp_file); - } + void update_network_settings (void); + + QIcon icon (const QString& icon_name, bool fallback = true); - static QString storage_class_chars (void) { return "agp"; } - static QStringList storage_class_names (void); - static QList<QColor> storage_class_default_colors (void); - - static resource_manager *instance; + void get_codecs (QStringList *codecs); - static void cleanup_instance (void) { delete instance; instance = nullptr; } - - static QString varedit_color_chars (void) {return "fbsha"; } - static QStringList varedit_color_names (void); - static QList<QColor> varedit_default_colors (void); + void combo_encoding (QComboBox *combo, const QString& current = QString ()); private: - static bool instance_ok (void); - - gui_settings * do_get_settings (void) const; - - gui_settings * do_get_default_settings (void) const; - - QString do_get_settings_directory (void); - - QString do_get_settings_file (void); - - QString do_get_default_font_family (void); - - QPointer<QTemporaryFile> do_create_tmp_file (const QString& extension, - const QString& contents); - - void do_remove_tmp_file (QPointer<QTemporaryFile> tmp_file); - - void do_reload_settings (void); - - void do_set_settings (const QString& file); - - bool do_update_settings_key (const QString& new_key, const QString& old_key); - - bool do_is_first_run (void) const; - - void do_update_network_settings (void); - - QIcon do_icon (const QString& icon, bool fallback); - - void do_get_codecs (QStringList *codecs); - void do_combo_encoding (QComboBox *combo, QString current); - QString m_settings_directory; QString m_settings_file;
--- a/libgui/src/set-path-dialog.cc Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/set-path-dialog.cc Fri Nov 01 18:16:49 2019 -0400 @@ -55,8 +55,8 @@ namespace octave { - set_path_dialog::set_path_dialog (QWidget *parent) - : QDialog (parent) + set_path_dialog::set_path_dialog (QWidget *parent, resource_manager& rmgr) + : QDialog (parent), m_resource_manager (rmgr) { setWindowTitle (tr ("Set Path")); @@ -163,7 +163,7 @@ setLayout (main_layout); - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); restoreGeometry ( settings->value(pd_geometry.key).toByteArray()); } @@ -299,7 +299,7 @@ void set_path_dialog::save_settings () { - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); settings->setValue (pd_geometry.key, saveGeometry ()); }
--- a/libgui/src/set-path-dialog.h Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/set-path-dialog.h Fri Nov 01 18:16:49 2019 -0400 @@ -38,6 +38,8 @@ namespace octave { + class resource_manager; + class set_path_dialog : public QDialog { Q_OBJECT @@ -48,7 +50,7 @@ // in the dialog. That may only be done after the intepreter_event // signal connections are made to the Octave interpreter. - set_path_dialog (QWidget *parent = nullptr); + set_path_dialog (QWidget *parent, resource_manager& rmgr); virtual ~set_path_dialog (void); @@ -91,6 +93,8 @@ void add_dir_common (bool subdirs); + resource_manager& m_resource_manager; + QLabel *m_info_label; QPushButton *m_reload_button; QPushButton *m_save_button;
--- a/libgui/src/settings-dialog.cc Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/settings-dialog.cc Fri Nov 01 18:16:49 2019 -0400 @@ -88,12 +88,13 @@ #endif - settings_dialog::settings_dialog (QWidget *p, const QString& desired_tab) - : QDialog (p), Ui::settings_dialog () + settings_dialog::settings_dialog (QWidget *p, resource_manager& rmgr, + const QString& desired_tab) + : QDialog (p), Ui::settings_dialog (), m_resource_manager (rmgr) { setupUi (this); - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); if (! settings) { @@ -107,7 +108,7 @@ } // look for available language files and the actual settings - QString qm_dir_name = resource_manager::get_gui_translation_dir (); + QString qm_dir_name = m_resource_manager.get_gui_translation_dir (); QDir qm_dir (qm_dir_name); QFileInfoList qm_files = qm_dir.entryInfoList (QStringList ("*.qm"), QDir::Files | QDir::Readable, QDir::Name); @@ -251,7 +252,7 @@ editor_showLineNumbers->setChecked (settings->value ("editor/showLineNumbers", true).toBool ()); editor_linenr_size->setValue (settings->value ("editor/line_numbers_size", 0).toInt ()); - resource_manager::combo_encoding (editor_combo_encoding); + m_resource_manager.combo_encoding (editor_combo_encoding); default_var = QColor (240, 240, 240); QColor setting_color = settings->value ("editor/highlight_current_line_color", default_var).value<QColor> (); @@ -527,7 +528,7 @@ { if (tab.isEmpty ()) { - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); if (settings) tabWidget->setCurrentIndex (settings->value ("settings/last_tab", 0).toInt ()); } @@ -556,9 +557,10 @@ { // FIXME: Remove, if for all common KDE versions (bug #54607) is resolved. int opts = QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks; - if (! resource_manager::get_settings ()->value ( - global_use_native_dialogs.key, - global_use_native_dialogs.def).toBool ()) + + gui_settings *settings = m_resource_manager.get_settings (); + if (! settings->value (global_use_native_dialogs.key, + global_use_native_dialogs.def).toBool ()) opts |= QFileDialog::DontUseNativeDialog; QString dir = QFileDialog::getExistingDirectory @@ -815,7 +817,7 @@ void settings_dialog::write_changed_settings (bool closing) { - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); // the icon set QString widget_icon_set = "NONE"; @@ -1042,10 +1044,10 @@ void settings_dialog::read_workspace_colors (gui_settings *settings) { // Construct the grid with all color related settings - QList<QColor> default_colors = - resource_manager::storage_class_default_colors (); - QStringList class_names = resource_manager::storage_class_names (); - QString class_chars = resource_manager::storage_class_chars (); + QList<QColor> default_colors + = m_resource_manager.storage_class_default_colors (); + QStringList class_names = m_resource_manager.storage_class_names (); + QString class_chars = m_resource_manager.storage_class_chars (); int nr_of_classes = class_chars.length (); QGridLayout *style_grid = new QGridLayout (); @@ -1105,7 +1107,7 @@ settings->setValue (ws_enable_colors.key, m_ws_enable_colors->isChecked ()); settings->setValue (ws_hide_tool_tips.key, m_ws_hide_tool_tips->isChecked ()); - QString class_chars = resource_manager::storage_class_chars (); + QString class_chars = m_resource_manager.storage_class_chars (); color_picker *color; for (int i = 0; i < class_chars.length (); i++) @@ -1166,7 +1168,7 @@ { QList<QColor> default_colors = variable_editor::default_colors (); QStringList class_names = variable_editor::color_names (); - QString class_chars = resource_manager::varedit_color_chars (); + QString class_chars = m_resource_manager.varedit_color_chars (); int nr_of_classes = class_chars.length (); QGridLayout *style_grid = new QGridLayout (); @@ -1200,7 +1202,7 @@ void settings_dialog::write_varedit_colors (gui_settings *settings) { - QString class_chars = resource_manager::varedit_color_chars (); + QString class_chars = m_resource_manager.varedit_color_chars (); color_picker *color; for (int i = 0; i < class_chars.length (); i++)
--- a/libgui/src/settings-dialog.h Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/settings-dialog.h Fri Nov 01 18:16:49 2019 -0400 @@ -31,6 +31,7 @@ #include "color-picker.h" #include "gui-preferences-ed.h" #include "gui-settings.h" +#include "resource-manager.h" #include "ui-settings-dialog.h" class QsciLexer; @@ -43,7 +44,7 @@ { Q_OBJECT public: - explicit settings_dialog (QWidget *parent, + explicit settings_dialog (QWidget *parent, resource_manager& rmgr, const QString& desired_tab = QString ()); ~settings_dialog (void) = default; @@ -85,6 +86,8 @@ void read_varedit_colors (gui_settings *settings); void write_varedit_colors (gui_settings *settings); + resource_manager& m_resource_manager; + color_picker *m_widget_title_bg_color; color_picker *m_widget_title_bg_color_active; color_picker *m_widget_title_fg_color;
--- a/libgui/src/shortcut-manager.cc Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/shortcut-manager.cc Fri Nov 01 18:16:49 2019 -0400 @@ -120,7 +120,10 @@ QCoreApplication::setAttribute (Qt::AA_MacDontSwapCtrlAndMeta, true); #endif - m_settings = resource_manager::get_settings (); + 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) @@ -688,7 +691,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_settings->value ("use_native_file_dialogs", true).toBool ()) opts = QFileDialog::DontUseNativeDialog;
--- a/libgui/src/terminal-dock-widget.cc Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/terminal-dock-widget.cc Fri Nov 01 18:16:49 2019 -0400 @@ -39,8 +39,9 @@ namespace octave { - terminal_dock_widget::terminal_dock_widget (QWidget *p) - : octave_dock_widget ("TerminalDockWidget", p), + terminal_dock_widget::terminal_dock_widget (QWidget *p, + resource_manager& rmgr) + : octave_dock_widget ("TerminalDockWidget", p, rmgr), m_terminal (QTerminal::create (p)) { m_terminal->setObjectName ("OctaveTerminal"); @@ -61,7 +62,7 @@ // Chose a reasonable size at startup in order to avoid truncated // startup messages - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); QFont font = QFont (); font.setStyleHint (QFont::TypeWriter);
--- a/libgui/src/terminal-dock-widget.h Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/terminal-dock-widget.h Fri Nov 01 18:16:49 2019 -0400 @@ -32,13 +32,15 @@ namespace octave { + class resource_manager; + class terminal_dock_widget : public octave_dock_widget { Q_OBJECT public: - terminal_dock_widget (QWidget *parent = nullptr); + terminal_dock_widget (QWidget *parent, resource_manager& rmgr); ~terminal_dock_widget (void);
--- a/libgui/src/variable-editor.cc Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/variable-editor.cc Fri Nov 01 18:16:49 2019 -0400 @@ -88,8 +88,9 @@ // Variable dock widget - variable_dock_widget::variable_dock_widget (QWidget *p) - : label_dock_widget (p) + variable_dock_widget::variable_dock_widget (QWidget *p, + resource_manager& rmgr) + : label_dock_widget (p, rmgr) // See Octave bug #53807 and https://bugreports.qt.io/browse/QTBUG-44813 #if (QT_VERSION >= 0x050302) && (QT_VERSION <= QTBUG_44813_FIX_VERSION) , m_waiting_for_mouse_move (false) @@ -120,7 +121,7 @@ QHBoxLayout *h_layout = m_title_widget->findChild<QHBoxLayout *> (); m_fullscreen_action = new QAction - (resource_manager::icon ("view-fullscreen", false), "", this); + (m_resource_manager.icon ("view-fullscreen", false), "", this); m_fullscreen_action->setToolTip (tr (DOCKED_FULLSCREEN_BUTTON_TOOLTIP)); QToolButton *fullscreen_button = new QToolButton (m_title_widget); fullscreen_button->setDefaultAction (m_fullscreen_action); @@ -155,7 +156,7 @@ if (m_full_screen) { setGeometry (m_prev_geom); - m_fullscreen_action->setIcon (resource_manager::icon ("view-fullscreen", false)); + m_fullscreen_action->setIcon (m_resource_manager.icon ("view-fullscreen", false)); m_full_screen = false; } m_fullscreen_action->setToolTip (tr (DOCKED_FULLSCREEN_BUTTON_TOOLTIP)); @@ -216,7 +217,7 @@ if (! m_full_screen) { m_prev_floating = isFloating (); - m_fullscreen_action->setIcon (resource_manager::icon ("view-restore", false)); + m_fullscreen_action->setIcon (m_resource_manager.icon ("view-restore", false)); if (m_prev_floating) m_fullscreen_action->setToolTip (tr ("Restore geometry")); else @@ -236,7 +237,7 @@ } else { - m_fullscreen_action->setIcon (resource_manager::icon ("view-fullscreen", false)); + m_fullscreen_action->setIcon (m_resource_manager.icon ("view-fullscreen", false)); setGeometry (m_prev_geom); if (m_prev_floating) m_fullscreen_action->setToolTip (tr (UNDOCKED_FULLSCREEN_BUTTON_TOOLTIP)); @@ -368,8 +369,10 @@ // Variable editor stack - variable_editor_stack::variable_editor_stack (QWidget *p) - : QStackedWidget (p), m_edit_view (new variable_editor_view (this)) + variable_editor_stack::variable_editor_stack (QWidget *p, + resource_manager& rmgr) + : QStackedWidget (p), m_resource_manager (rmgr), + m_edit_view (new variable_editor_view (this, m_resource_manager)) { setFocusPolicy (Qt::StrongFocus); @@ -452,7 +455,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; @@ -476,8 +479,9 @@ // Custom editable variable table view - variable_editor_view::variable_editor_view (QWidget *p) - : QTableView (p), m_var_model (nullptr) + variable_editor_view::variable_editor_view (QWidget *p, + resource_manager& rmgr) + : QTableView (p), m_resource_manager (rmgr), m_var_model (nullptr) { setWordWrap (false); setContextMenuPolicy (Qt::CustomContextMenu); @@ -583,29 +587,29 @@ variable_editor_view::add_edit_actions (QMenu *menu, const QString& qualifier_string) { - menu->addAction (resource_manager::icon ("edit-cut"), + menu->addAction (m_resource_manager.icon ("edit-cut"), tr ("Cut") + qualifier_string, this, SLOT (cutClipboard ())); - menu->addAction (resource_manager::icon ("edit-copy"), + menu->addAction (m_resource_manager.icon ("edit-copy"), tr ("Copy") + qualifier_string, this, SLOT (copyClipboard ())); - menu->addAction (resource_manager::icon ("edit-paste"), + menu->addAction (m_resource_manager.icon ("edit-paste"), tr ("Paste"), this, SLOT (pasteClipboard ())); menu->addSeparator (); - menu->addAction (resource_manager::icon ("edit-delete"), + menu->addAction (m_resource_manager.icon ("edit-delete"), tr ("Clear") + qualifier_string, this, SLOT (clearContent ())); - menu->addAction (resource_manager::icon ("edit-delete"), + menu->addAction (m_resource_manager.icon ("edit-delete"), tr ("Delete") + qualifier_string, this, SLOT (delete_selected ())); - menu->addAction (resource_manager::icon ("document-new"), + menu->addAction (m_resource_manager.icon ("document-new"), tr ("Variable from Selection"), this, SLOT (createVariable ())); } @@ -1033,9 +1037,9 @@ // Variable editor. - variable_editor::variable_editor (QWidget *p) - : octave_dock_widget ("VariableEditor", p), - m_main (new dw_main_window ()), + variable_editor::variable_editor (QWidget *p, resource_manager& rmgr) + : octave_dock_widget ("VariableEditor", p, rmgr), + m_main (new dw_main_window (rmgr)), m_tool_bar (new QToolBar (m_main)), m_default_width (30), m_default_height (100), @@ -1073,7 +1077,7 @@ // Colors. - for (int i = 0; i < resource_manager::varedit_color_chars ().length (); i++) + for (int i = 0; i < m_resource_manager.varedit_color_chars ().length (); i++) m_table_colors.append (QColor (Qt::white)); // Use an MDI area that is shrunk to nothing as the central widget. @@ -1154,7 +1158,7 @@ { if (m_stylesheet.isEmpty ()) { - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); notice_settings (settings); } @@ -1181,7 +1185,9 @@ return; } - variable_dock_widget *page = new variable_dock_widget (this); + variable_dock_widget *page + = new variable_dock_widget (this, m_resource_manager); + page->setObjectName (name); m_main->addDockWidget (Qt::LeftDockWidgetArea, page); @@ -1199,7 +1205,9 @@ page, SLOT (refloat ()), Qt::QueuedConnection); #endif - variable_editor_stack *stack = new variable_editor_stack (page); + variable_editor_stack *stack + = new variable_editor_stack (page, m_resource_manager); + stack->setObjectName (name); page->setWidget (stack); page->setFocusProxy (stack); @@ -1371,9 +1379,9 @@ m_alternate_rows = settings->value ("variable_editor/alternate_rows", false).toBool (); - QList<QColor> default_colors = resource_manager::varedit_default_colors (); + QList<QColor> default_colors = m_resource_manager.varedit_default_colors (); - QString class_chars = resource_manager::varedit_color_chars (); + QString class_chars = m_resource_manager.varedit_color_chars (); m_use_terminal_font = settings->value ("variable_editor/use_terminal_font", true).toBool (); @@ -1622,7 +1630,7 @@ m_tool_bar->setWindowTitle (tr ("Variable Editor Toolbar")); QAction *action; - action = add_tool_bar_button (resource_manager::icon ("document-save"), + action = add_tool_bar_button (m_resource_manager.icon ("document-save"), tr ("Save"), this, SLOT (save ())); addAction (action); action->setShortcutContext (Qt::WidgetWithChildrenShortcut); @@ -1631,15 +1639,15 @@ m_tool_bar->addSeparator (); - action = add_tool_bar_button (resource_manager::icon ("edit-cut"), + action = add_tool_bar_button (m_resource_manager.icon ("edit-cut"), tr ("Cut"), this, SLOT (cutClipboard ())); action->setStatusTip(tr("Cut data to clipboard")); - action = add_tool_bar_button (resource_manager::icon ("edit-copy"), + action = add_tool_bar_button (m_resource_manager.icon ("edit-copy"), tr ("Copy"), this, SLOT (copyClipboard ())); action->setStatusTip(tr("Copy data to clipboard")); - action = add_tool_bar_button (resource_manager::icon ("edit-paste"), + action = add_tool_bar_button (m_resource_manager.icon ("edit-paste"), tr ("Paste"), this, SLOT (pasteClipboard ())); action->setStatusTip(tr("Paste clipboard into variable data")); @@ -1649,7 +1657,7 @@ // QAction *print_action; /icons/fileprint.png // m_tool_bar->addSeparator (); - action = new QAction (resource_manager::icon ("plot-xy-curve"), + action = new QAction (m_resource_manager.icon ("plot-xy-curve"), tr ("Plot"), m_tool_bar); action->setToolTip (tr ("Plot Selected Data")); QToolButton *plot_tool_button = new HoverToolButton (m_tool_bar); @@ -1657,7 +1665,7 @@ plot_tool_button->setText (tr ("Plot")); plot_tool_button->setToolTip (tr ("Plot selected data")); - plot_tool_button->setIcon (resource_manager::icon ("plot-xy-curve")); + plot_tool_button->setIcon (m_resource_manager.icon ("plot-xy-curve")); plot_tool_button->setPopupMode (QToolButton::InstantPopup); @@ -1676,7 +1684,7 @@ m_tool_bar->addSeparator (); - action = add_tool_bar_button (resource_manager::icon ("go-up"), + action = add_tool_bar_button (m_resource_manager.icon ("go-up"), tr ("Up"), this, SLOT (levelUp ())); action->setStatusTip(tr("Go one level up in variable hierarchy"));
--- a/libgui/src/variable-editor.h Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/variable-editor.h Fri Nov 01 18:16:49 2019 -0400 @@ -42,10 +42,11 @@ namespace octave { + class resource_manager; + class variable_editor_model; class variable_editor_view; - // The individual variable subwindow class class variable_dock_widget : public label_dock_widget @@ -54,7 +55,7 @@ public: - variable_dock_widget (QWidget *p = nullptr); + variable_dock_widget (QWidget *p, resource_manager& rmgr); signals: @@ -129,7 +130,7 @@ public: - variable_editor_stack (QWidget *p = nullptr); + variable_editor_stack (QWidget *p, resource_manager& rmgr); variable_editor_view *edit_view (void) {return m_edit_view;}; @@ -153,6 +154,8 @@ QTextEdit *make_disp_view (QWidget *parent); + resource_manager& m_resource_manager; + variable_editor_view *m_edit_view; QTextEdit *m_disp_view; @@ -165,7 +168,7 @@ public: - variable_editor_view (QWidget *p = nullptr); + variable_editor_view (QWidget *p, resource_manager& rmgr); void setModel (QAbstractItemModel *model); @@ -212,6 +215,8 @@ void add_edit_actions (QMenu *menu, const QString& qualifier_string); + resource_manager& m_resource_manager; + variable_editor_model *m_var_model; }; @@ -280,7 +285,7 @@ public: - variable_editor (QWidget *parent = nullptr); + variable_editor (QWidget *parent, resource_manager& rmgr); ~variable_editor (void) = default;
--- a/libgui/src/welcome-wizard.cc Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/welcome-wizard.cc Fri Nov 01 18:16:49 2019 -0400 @@ -36,9 +36,9 @@ #include <windows.h> #endif +#include "gui-preferences-nr.h" #include "resource-manager.h" #include "welcome-wizard.h" -#include "gui-preferences-nr.h" namespace octave { @@ -51,9 +51,9 @@ return logo; }; - welcome_wizard::welcome_wizard (QWidget *p) - : QDialog (p), m_page_ctor_list (), m_page_list_iterator (), - m_current_page (initial_page::create (this)), + welcome_wizard::welcome_wizard (resource_manager& rmgr, QWidget *p) + : QDialog (p), m_resource_manager (rmgr), m_page_ctor_list (), + m_page_list_iterator (), m_current_page (initial_page::create (this)), m_allow_web_connect_state (false), m_max_height (0), m_max_width (0) { @@ -140,9 +140,9 @@ { // Create default settings file. - resource_manager::reload_settings (); + m_resource_manager.reload_settings (); - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); if (settings) { @@ -167,13 +167,16 @@ ft.setPointSize (20); m_title->setFont (ft); + resource_manager& rmgr + = __get_resource_manager__ ("shortcut_manager::shortcut_manager"); + m_message->setText (tr ("<html><body>\n" "<p>You seem to be using the Octave graphical interface for the first time on this computer.\n" "Click 'Next' to create a configuration file and launch Octave.</p>\n" "<p>The configuration file is stored in<br>%1.</p>\n" "</body></html>"). - arg (resource_manager::get_settings_file ())); + arg (rmgr.get_settings_file ())); m_message->setWordWrap (true); m_message->setMinimumWidth (400);
--- a/libgui/src/welcome-wizard.h Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/welcome-wizard.h Fri Nov 01 18:16:49 2019 -0400 @@ -30,6 +30,8 @@ namespace octave { + class resource_manager; + class welcome_wizard : public QDialog { Q_OBJECT @@ -38,7 +40,7 @@ typedef QWidget *(*page_creator_fptr) (welcome_wizard *wizard); - welcome_wizard (QWidget *parent = nullptr); + welcome_wizard (resource_manager& rmgr, QWidget *parent = nullptr); ~welcome_wizard (void) = default; @@ -46,6 +48,8 @@ private: + resource_manager& m_resource_manager; + QList<page_creator_fptr> m_page_ctor_list; QList<page_creator_fptr>::iterator m_page_list_iterator; QWidget *m_current_page;
--- a/libgui/src/workspace-model.cc Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/workspace-model.cc Fri Nov 01 18:16:49 2019 -0400 @@ -39,8 +39,8 @@ namespace octave { - workspace_model::workspace_model (QObject *p) - : QAbstractTableModel (p) + workspace_model::workspace_model (resource_manager& rmgr, QObject *p) + : QAbstractTableModel (p), m_resource_manager (rmgr) { m_columnNames.append (tr ("Name")); m_columnNames.append (tr ("Class")); @@ -52,7 +52,7 @@ // classes in the workspace view. The structure is // m_storage_class_colors(1,2,...,colors): background colors // m_storage_class_colors(colors+1,...,2*colors): foreground colors - int colors = resource_manager::storage_class_chars ().length (); + int colors = m_resource_manager.storage_class_chars ().length (); for (int i = 0; i < 2*colors; i++) m_storage_class_colors.append (QColor (Qt::white)); @@ -136,7 +136,7 @@ if ((role == Qt::BackgroundColorRole || role == Qt::ForegroundRole) && m_enable_colors) { - QString class_chars = resource_manager::storage_class_chars (); + QString class_chars = m_resource_manager.storage_class_chars (); int actual_class = class_chars.indexOf (m_scopes[idx.row ()].toLatin1 ()); if (actual_class >= 0) @@ -182,7 +182,7 @@ { QString sclass; - QString class_chars = resource_manager::storage_class_chars (); + QString class_chars = m_resource_manager.storage_class_chars (); int actual_class = class_chars.indexOf (m_scopes[idx.row ()].toLatin1 ()); @@ -190,7 +190,7 @@ if (actual_class >= 0) { QStringList class_names - = resource_manager::storage_class_names (); + = m_resource_manager.storage_class_names (); sclass = class_names.at (actual_class); } @@ -236,8 +236,8 @@ workspace_model::notice_settings (const gui_settings *settings) { QList<QColor> default_colors = - resource_manager::storage_class_default_colors (); - QString class_chars = resource_manager::storage_class_chars (); + m_resource_manager.storage_class_default_colors (); + QString class_chars = m_resource_manager.storage_class_chars (); m_enable_colors = settings->value (ws_enable_colors.key, ws_enable_colors.def).toBool ();
--- a/libgui/src/workspace-model.h Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/workspace-model.h Fri Nov 01 18:16:49 2019 -0400 @@ -41,6 +41,8 @@ namespace octave { + class resource_manager; + class workspace_model : public QAbstractTableModel { @@ -48,7 +50,7 @@ public: - workspace_model (QObject *parent = nullptr); + workspace_model (resource_manager& rmgr, QObject *parent = nullptr); ~workspace_model (void) = default; @@ -95,6 +97,8 @@ void clear_data (void); void update_table (void); + resource_manager& m_resource_manager; + bool m_top_level; symbol_info_list m_syminfo_list; QString m_scopes;
--- a/libgui/src/workspace-view.cc Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/workspace-view.cc Fri Nov 01 18:16:49 2019 -0400 @@ -49,8 +49,8 @@ namespace octave { - workspace_view::workspace_view (QWidget *p) - : octave_dock_widget ("WorkspaceView", p), + workspace_view::workspace_view (QWidget *p, resource_manager& rmgr) + : octave_dock_widget ("WorkspaceView", p, rmgr), m_view (new QTableView (this)), m_filter_checkbox (new QCheckBox ()), m_filter (new QComboBox (this)), @@ -96,7 +96,7 @@ ws_layout->addWidget (m_view); ws_layout->setSpacing (0); - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); if (settings) { @@ -177,7 +177,7 @@ m_view->setModel (&m_filter_model); // set the sorting after a model was set, it would be ignored otherwise - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); m_view->sortByColumn (settings->value ("workspaceview/sort_by_column",0).toInt (), static_cast<Qt::SortOrder> (settings->value ("workspaceview/sort_order", Qt::AscendingOrder).toUInt ())); @@ -201,14 +201,14 @@ { tool_tip = QString (tr ("View the variables in the active workspace.<br>")); tool_tip += QString (tr ("Colors for variable attributes:")); - int colors = resource_manager::storage_class_chars ().length (); + int colors = m_resource_manager.storage_class_chars ().length (); for (i = 0; i < colors; i++) { tool_tip += QString (R"(<div style="background-color:%1;color:%2">%3</div>)") .arg (m_model->storage_class_color (i).name ()) .arg (m_model->storage_class_color (i + colors).name ()) - .arg (resource_manager::storage_class_names ().at (i)); + .arg (m_resource_manager.storage_class_names ().at (i)); } } @@ -230,7 +230,7 @@ void workspace_view::save_settings (void) { - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); if (! settings) return; @@ -295,7 +295,7 @@ QMenu menu (this); QSignalMapper sig_mapper (this); - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); for (int i = 0; i < m_columns_shown.size (); i++) { @@ -315,7 +315,7 @@ void workspace_view::toggle_header (int col) { - gui_settings *settings = resource_manager::get_settings (); + gui_settings *settings = m_resource_manager.get_settings (); QString key = m_columns_shown_keys.at (col); bool shown = settings->value (key,true).toBool ();
--- a/libgui/src/workspace-view.h Sat Nov 02 15:24:14 2019 -0400 +++ b/libgui/src/workspace-view.h Fri Nov 01 18:16:49 2019 -0400 @@ -39,13 +39,15 @@ namespace octave { + class resource_manager; + class workspace_view : public octave_dock_widget { Q_OBJECT public: - workspace_view (QWidget *parent = nullptr); + workspace_view (QWidget *parent, resource_manager& rmgr); ~workspace_view (void) = default;