# HG changeset patch # User John W. Eaton # Date 1670024592 18000 # Node ID 0645ea65ca6b952c82f4b0e5acd9a81a3150d801 # Parent 6dfaaf8ecf3bccbd4ee2dc40b35f22a7452c9069 handle icons and themes in gui_settings class, not resource_manager * resource-manager.h, resource-manager.cc (resource_manager::config_icon_theme, resource_manager::icon): Move funtcions to gui-settings.h and gui-settings.cc. * Canvas.cc, QTerminal.cc, documentation-bookmarks.cc, documentation.cc, dw-main-window.cc, files-dock-widget.cc, find-files-dialog.cc, gui-settings.cc, gui-settings.h, history-dock-widget.cc, file-editor.cc, main-window.cc, octave-dock-widget.cc, octave-qobject.cc, qt-interpreter-events.cc, resource-manager.cc, resource-manager.h, variable-editor.cc: Change all uses. diff -r 6dfaaf8ecf3b -r 0645ea65ca6b libgui/graphics/Canvas.cc --- a/libgui/graphics/Canvas.cc Fri Dec 02 18:31:30 2022 -0500 +++ b/libgui/graphics/Canvas.cc Fri Dec 02 18:43:12 2022 -0500 @@ -43,6 +43,7 @@ #include "qt-graphics-toolkit.h" #include "annotation-dialog.h" +#include "gui-settings.h" #include "octave-qobject.h" #include "qt-interpreter-events.h" @@ -77,9 +78,9 @@ QCursor Canvas::make_cursor (const QString& name, int hot_x, int hot_y) { - octave::resource_manager& rmgr = m_octave_qobj.get_resource_manager (); + gui_settings settings; - QIcon icon = rmgr.icon (name); + QIcon icon = settings.icon (name); return QCursor (icon.pixmap (22, 22), hot_x, hot_y); } diff -r 6dfaaf8ecf3b -r 0645ea65ca6b libgui/qterminal/libqterminal/QTerminal.cc --- a/libgui/qterminal/libqterminal/QTerminal.cc Fri Dec 02 18:31:30 2022 -0500 +++ b/libgui/qterminal/libqterminal/QTerminal.cc Fri Dec 02 18:43:12 2022 -0500 @@ -276,7 +276,7 @@ void QTerminal::construct (octave::base_qobject& oct_qobj) { - octave::resource_manager& rmgr = oct_qobj.get_resource_manager (); + octave::gui_settings settings; // context menu setContextMenuPolicy (Qt::CustomContextMenu); @@ -284,11 +284,11 @@ _contextMenu = new QMenu (this); _copy_action - = _contextMenu->addAction (rmgr.icon ("edit-copy"), tr ("Copy"), this, + = _contextMenu->addAction (settings.icon ("edit-copy"), tr ("Copy"), this, SLOT (copyClipboard ())); _paste_action - = _contextMenu->addAction (rmgr.icon ("edit-paste"), tr ("Paste"), this, + = _contextMenu->addAction (settings.icon ("edit-paste"), tr ("Paste"), this, SLOT (pasteClipboard ())); _contextMenu->addSeparator (); diff -r 6dfaaf8ecf3b -r 0645ea65ca6b libgui/src/documentation-bookmarks.cc --- a/libgui/src/documentation-bookmarks.cc Fri Dec 02 18:31:30 2022 -0500 +++ b/libgui/src/documentation-bookmarks.cc Fri Dec 02 18:43:12 2022 -0500 @@ -321,11 +321,11 @@ if (m_ctx_menu_item) { - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); + gui_settings settings; menu.addAction (tr ("&Open"), this, &documentation_bookmarks::open); menu.addAction (tr ("&Rename"), this, &documentation_bookmarks::edit); - menu.addAction (rmgr.icon ("window-close"), tr ("Remo&ve"), + menu.addAction (settings.icon ("window-close"), tr ("Remo&ve"), this, &documentation_bookmarks::remove); menu.addSeparator (); } diff -r 6dfaaf8ecf3b -r 0645ea65ca6b libgui/src/documentation.cc --- a/libgui/src/documentation.cc Fri Dec 02 18:31:30 2022 -0500 +++ b/libgui/src/documentation.cc Fri Dec 02 18:43:12 2022 -0500 @@ -157,14 +157,16 @@ QToolButton *forward_button = new QToolButton (find_footer); forward_button->setText (tr ("Search forward")); forward_button->setToolTip (tr ("Search forward")); - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); - forward_button->setIcon (rmgr.icon ("go-down")); + + gui_settings settings; + + forward_button->setIcon (settings.icon ("go-down")); connect (forward_button, &QToolButton::pressed, this, [=] () { find (); }); QToolButton *backward_button = new QToolButton (find_footer); backward_button->setText (tr ("Search backward")); backward_button->setToolTip (tr ("Search backward")); - backward_button->setIcon (rmgr.icon ("go-up")); + backward_button->setIcon (settings.icon ("go-up")); connect (backward_button, &QToolButton::pressed, this, &documentation::find_backward); QHBoxLayout *h_box_find_footer = new QHBoxLayout (find_footer); @@ -349,13 +351,14 @@ void documentation::construct_tool_bar (void) { // Home, Previous, Next - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); + gui_settings settings; + m_action_go_home - = add_action (rmgr.icon ("go-home"), tr ("Go home"), SLOT (home (void)), + = add_action (settings.icon ("go-home"), tr ("Go home"), SLOT (home (void)), m_doc_browser, m_tool_bar); m_action_go_prev - = add_action (rmgr.icon ("go-previous"), tr ("Go back"), + = add_action (settings.icon ("go-previous"), tr ("Go back"), SLOT (backward (void)), m_doc_browser, m_tool_bar); m_action_go_prev->setEnabled (false); @@ -370,7 +373,7 @@ m_tool_bar->addWidget (popdown_button_prev_pages); m_action_go_next - = add_action (rmgr.icon ("go-next"), tr ("Go forward"), + = add_action (settings.icon ("go-next"), tr ("Go forward"), SLOT (forward (void)), m_doc_browser, m_tool_bar); m_action_go_next->setEnabled (false); @@ -413,26 +416,26 @@ // Find m_tool_bar->addSeparator (); m_action_find - = add_action (rmgr.icon ("edit-find"), tr ("Find"), + = add_action (settings.icon ("edit-find"), tr ("Find"), SLOT (activate_find (void)), this, m_tool_bar); // Zoom m_tool_bar->addSeparator (); m_action_zoom_in - = add_action (rmgr.icon ("view-zoom-in"), tr ("Zoom in"), + = add_action (settings.icon ("view-zoom-in"), tr ("Zoom in"), SLOT (zoom_in (void)), m_doc_browser, m_tool_bar); m_action_zoom_out - = add_action (rmgr.icon ("view-zoom-out"), tr ("Zoom out"), + = add_action (settings.icon ("view-zoom-out"), tr ("Zoom out"), SLOT (zoom_out (void)), m_doc_browser, m_tool_bar); m_action_zoom_original - = add_action (rmgr.icon ("view-zoom-original"), tr ("Zoom original"), + = add_action (settings.icon ("view-zoom-original"), tr ("Zoom original"), SLOT (zoom_original (void)), m_doc_browser, m_tool_bar); // Bookmarks (connect slots later) m_tool_bar->addSeparator (); m_action_bookmark - = add_action (rmgr.icon ("bookmark-new"), tr ("Bookmark current page"), - nullptr, nullptr, m_tool_bar); + = add_action (settings.icon ("bookmark-new"), + tr ("Bookmark current page"), nullptr, nullptr, m_tool_bar); } void documentation::global_search (void) diff -r 6dfaaf8ecf3b -r 0645ea65ca6b libgui/src/dw-main-window.cc --- a/libgui/src/dw-main-window.cc Fri Dec 02 18:31:30 2022 -0500 +++ b/libgui/src/dw-main-window.cc Fri Dec 02 18:43:12 2022 -0500 @@ -37,6 +37,7 @@ #include "dw-main-window.h" #include "gui-preferences-sc.h" +#include "gui-settings.h" #include "octave-qobject.h" #include "shortcut-manager.h" @@ -46,19 +47,19 @@ dw_main_window::dw_main_window (base_qobject& oct_qobj, QWidget *p) : QMainWindow (p), m_octave_qobj (oct_qobj) { - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); + gui_settings settings; // Adding the actions for closing the dock widgets m_close_action - = add_action (nullptr, rmgr.icon ("window-close", false), + = add_action (nullptr, settings.icon ("window-close", false), tr ("&Close"), SLOT (request_close ()), this); m_close_all_action - = add_action (nullptr, rmgr.icon ("window-close", false), + = add_action (nullptr, settings.icon ("window-close", false), tr ("Close &All"), SLOT (request_close_all ()), this); m_close_others_action - = add_action (nullptr, rmgr.icon ("window-close", false), + = add_action (nullptr, settings.icon ("window-close", false), tr ("Close &Other"), SLOT (request_close_other ()), this); m_switch_left_action diff -r 6dfaaf8ecf3b -r 0645ea65ca6b libgui/src/files-dock-widget.cc --- a/libgui/src/files-dock-widget.cc Fri Dec 02 18:31:30 2022 -0500 +++ b/libgui/src/files-dock-widget.cc Fri Dec 02 18:43:12 2022 -0500 @@ -227,20 +227,21 @@ QSizePolicy sizePol (QSizePolicy::Expanding, QSizePolicy::Preferred); m_current_directory->setSizePolicy (sizePol); - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); + gui_settings settings; QAction *directory_up_action - = new QAction (rmgr.icon ("folder-up", false, "go-up"), "", m_navigation_tool_bar); + = new QAction (settings.icon ("folder-up", false, "go-up"), "", + m_navigation_tool_bar); directory_up_action->setToolTip (tr ("One directory up")); m_sync_browser_directory_action - = new QAction (rmgr.icon ("go-first"), tr ("Show Octave directory"), + = new QAction (settings.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 (rmgr.icon ("go-last"), tr ("Set Octave directory"), + = new QAction (settings.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); @@ -248,7 +249,7 @@ QToolButton *popdown_button = new QToolButton (); popdown_button->setToolTip (tr ("Actions on current directory")); QMenu *popdown_menu = new QMenu (); - popdown_menu->addAction (rmgr.icon ("user-home"), + popdown_menu->addAction (settings.icon ("user-home"), tr ("Show Home Directory"), this, SLOT (popdownmenu_home (bool))); popdown_menu->addAction (m_sync_browser_directory_action); @@ -256,22 +257,23 @@ popdown_button->setMenu (popdown_menu); popdown_button->setPopupMode (QToolButton::InstantPopup); popdown_button->setDefaultAction ( - new QAction (rmgr.icon ("folder-settings", false, "applications-system"), - "", m_navigation_tool_bar)); + new QAction (settings.icon ("folder-settings", false, + "applications-system"), + "", m_navigation_tool_bar)); popdown_menu->addSeparator (); - popdown_menu->addAction (rmgr.icon ("folder"), + popdown_menu->addAction (settings.icon ("folder"), tr ("Set Browser Directory..."), this, &files_dock_widget::popdownmenu_search_dir); popdown_menu->addSeparator (); - popdown_menu->addAction (rmgr.icon ("edit-find"), + popdown_menu->addAction (settings.icon ("edit-find"), tr ("Find Files..."), this, &files_dock_widget::popdownmenu_findfiles); popdown_menu->addSeparator (); - popdown_menu->addAction (rmgr.icon ("document-new"), + popdown_menu->addAction (settings.icon ("document-new"), tr ("New File..."), this, &files_dock_widget::popdownmenu_newfile); - popdown_menu->addAction (rmgr.icon ("folder-new"), + popdown_menu->addAction (settings.icon ("folder-new"), tr ("New Directory..."), this, &files_dock_widget::popdownmenu_newdir); @@ -286,8 +288,6 @@ connect (m_sync_browser_directory_action, &QAction::triggered, this, &files_dock_widget::do_sync_browser_directory); - gui_settings settings; - // Create the QFileSystemModel starting in the desired directory QDir startup_dir; // take current dir @@ -650,10 +650,10 @@ | QItemSelectionModel::Rows); } - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); + gui_settings settings; // construct the context menu depending on item - menu.addAction (rmgr.icon ("document-open"), tr ("Open"), + menu.addAction (settings.icon ("document-open"), tr ("Open"), this, &files_dock_widget::contextmenu_open); if (info.isDir ()) @@ -670,7 +670,7 @@ this, &files_dock_widget::contextmenu_copy_selection); if (info.isFile () && info.suffix () == "m") - menu.addAction (rmgr.icon ("media-playback-start"), tr ("Run"), + menu.addAction (settings.icon ("media-playback-start"), tr ("Run"), this, &files_dock_widget::contextmenu_run); if (info.isFile ()) @@ -680,7 +680,7 @@ if (info.isDir ()) { menu.addSeparator (); - menu.addAction (rmgr.icon ("go-first"), tr ("Set Current Directory"), + menu.addAction (settings.icon ("go-first"), tr ("Set Current Directory"), this, &files_dock_widget::contextmenu_setcurrentdir); QMenu *add_path_menu = menu.addMenu (tr ("Add to Path")); @@ -699,21 +699,21 @@ menu.addSeparator (); - menu.addAction (rmgr.icon ("edit-find"), tr ("Find Files..."), + menu.addAction (settings.icon ("edit-find"), tr ("Find Files..."), this, &files_dock_widget::contextmenu_findfiles); } menu.addSeparator (); menu.addAction (m_rename_action); - menu.addAction (rmgr.icon ("edit-delete"), tr ("Delete..."), + menu.addAction (settings.icon ("edit-delete"), tr ("Delete..."), this, &files_dock_widget::contextmenu_delete); if (info.isDir ()) { menu.addSeparator (); - menu.addAction (rmgr.icon ("document-new"), tr ("New File..."), + menu.addAction (settings.icon ("document-new"), tr ("New File..."), this, &files_dock_widget::contextmenu_newfile); - menu.addAction (rmgr.icon ("folder-new"), tr ("New Directory..."), + menu.addAction (settings.icon ("folder-new"), tr ("New Directory..."), this, &files_dock_widget::contextmenu_newdir); } diff -r 6dfaaf8ecf3b -r 0645ea65ca6b libgui/src/find-files-dialog.cc --- a/libgui/src/find-files-dialog.cc Fri Dec 02 18:31:30 2022 -0500 +++ b/libgui/src/find-files-dialog.cc Fri Dec 02 18:43:12 2022 -0500 @@ -57,10 +57,10 @@ find_files_dialog::find_files_dialog (QWidget *p, base_qobject& oct_qobj) : QDialog (p), m_octave_qobj (oct_qobj) { - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); + gui_settings settings; setWindowTitle (tr ("Find Files")); - setWindowIcon (rmgr.icon ("edit-find")); + setWindowIcon (settings.icon ("edit-find")); m_dir_iterator = nullptr; @@ -68,8 +68,6 @@ connect (m_timer, &QTimer::timeout, this, &find_files_dialog::look_for_files); - gui_settings settings; - QLabel *file_name_label = new QLabel (tr ("Named:")); m_file_name_edit = new QLineEdit; m_file_name_edit->setToolTip (tr ("Enter the filename search expression")); diff -r 6dfaaf8ecf3b -r 0645ea65ca6b libgui/src/gui-settings.cc --- a/libgui/src/gui-settings.cc Fri Dec 02 18:31:30 2022 -0500 +++ b/libgui/src/gui-settings.cc Fri Dec 02 18:43:12 2022 -0500 @@ -28,8 +28,10 @@ #endif #include +#include #include +#include "gui-preferences-global.h" #include "gui-settings.h" namespace octave @@ -109,4 +111,68 @@ return key_seq; } + void gui_settings::config_icon_theme (void) + { + int theme = global_icon_theme_index.def.toInt (); + + // check for new and old setting and use old if required + if (! contains (global_icon_theme_index.key)) + { + // new pref does not exist + if (value (global_icon_theme).toBool ()) + theme = ICON_THEME_SYSTEM; + else + theme = ICON_THEME_OCTAVE; + setValue (global_icon_theme_index.key, theme); // add new + remove (global_icon_theme.key); // remove deprecated key + } + + QIcon::setThemeName (global_all_icon_themes.at (theme)); + + QStringList icon_fallbacks; + + // set the required fallback search paths + switch (theme) + { + case ICON_THEME_SYSTEM: + icon_fallbacks << global_icon_paths.at (ICON_THEME_OCTAVE); + icon_fallbacks << global_icon_paths.at (ICON_THEME_TANGO); + break; + case ICON_THEME_TANGO: + icon_fallbacks << global_icon_paths.at (ICON_THEME_OCTAVE); + break; + case ICON_THEME_OCTAVE: + icon_fallbacks << global_icon_paths.at (ICON_THEME_TANGO); + break; + } + + icon_fallbacks << global_icon_paths.at (ICON_THEME_CURSORS); + + setValue (global_icon_fallbacks.key, icon_fallbacks); + } + + QIcon gui_settings::icon (const QString& icon_name, bool octave_only, + const QString& icon_alt_name) + { + if (octave_only) + return QIcon (global_icon_paths.at (ICON_THEME_OCTAVE) + icon_name + ".png"); + + if (QIcon::hasThemeIcon (icon_name)) + return QIcon (QIcon::fromTheme (icon_name)); + else if ((! icon_alt_name.isEmpty ()) && QIcon::hasThemeIcon (icon_alt_name)) + return QIcon (QIcon::fromTheme (icon_alt_name)); + + QStringList icon_fallbacks + = value (global_icon_fallbacks.key).toStringList (); + + for (int i = 0; i < icon_fallbacks.length (); i++ ) + { + QString icon_file (icon_fallbacks.at (i) + icon_name + ".png"); + if (QFile (icon_file).exists ()) + return QIcon (icon_file); + } + + //QIcon::setThemeName (current_theme); + return QIcon (); + } } diff -r 6dfaaf8ecf3b -r 0645ea65ca6b libgui/src/gui-settings.h --- a/libgui/src/gui-settings.h Fri Dec 02 18:31:30 2022 -0500 +++ b/libgui/src/gui-settings.h Fri Dec 02 18:43:12 2022 -0500 @@ -26,6 +26,8 @@ #if ! defined (octave_gui_settings_h) #define octave_gui_settings_h 1 +#include +#include #include #include "gui-preferences.h" @@ -123,6 +125,18 @@ QKeySequence sc_def_value (const sc_pref& pref) const; + // Both config_icon_theme and icon could be global functions instead + // of member functions. But at least for the icon function, + // defining it as a member function means that we can create a + // single gui_settings object and access multiple icon objects + // rather than having to create a separate settings object each time + // that an icon is needed. OTOH, creating the base QSettings object + // is supposed to be fast, so that may not matter. Hmm. + + void config_icon_theme (void); + + QIcon icon (const QString& icon_name, bool octave_only = false, + const QString& icon_alt_name = QString ()); }; } diff -r 6dfaaf8ecf3b -r 0645ea65ca6b libgui/src/history-dock-widget.cc --- a/libgui/src/history-dock-widget.cc Fri Dec 02 18:31:30 2022 -0500 +++ b/libgui/src/history-dock-widget.cc Fri Dec 02 18:43:12 2022 -0500 @@ -150,13 +150,13 @@ if (index.isValid () && index.column () == 0) { - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); + gui_settings settings; - menu.addAction (rmgr.icon ("edit-copy"), tr ("Copy"), this, + menu.addAction (settings.icon ("edit-copy"), tr ("Copy"), this, &history_dock_widget::handle_contextmenu_copy); menu.addAction (tr ("Evaluate"), this, &history_dock_widget::handle_contextmenu_evaluate); - menu.addAction (rmgr.icon ("document-new"), tr ("Create script"), this, + menu.addAction (settings.icon ("document-new"), tr ("Create script"), this, &history_dock_widget::handle_contextmenu_create_script); } if (m_filter_shown) diff -r 6dfaaf8ecf3b -r 0645ea65ca6b libgui/src/m-editor/file-editor.cc --- a/libgui/src/m-editor/file-editor.cc Fri Dec 02 18:31:30 2022 -0500 +++ b/libgui/src/m-editor/file-editor.cc Fri Dec 02 18:43:12 2022 -0500 @@ -977,7 +977,7 @@ QObject *fileEditorTab = sender (); if (fileEditorTab) { - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); + gui_settings settings; for (int i = 0; i < m_tab_widget->count (); i++) { @@ -990,7 +990,7 @@ m_current_tab_modified = modified; if (modified) - m_tab_widget->setTabIcon (i, rmgr.icon ("document-save")); + m_tab_widget->setTabIcon (i, settings.icon ("document-save")); else m_tab_widget->setTabIcon (i, QIcon ()); } @@ -1934,6 +1934,7 @@ m_tab_widget = new file_editor_tab_widget (editor_widget, this); // the mru-list and an empty array of actions + gui_settings settings; m_mru_files = settings.value (ed_mru_file_list).toStringList (); @@ -1975,36 +1976,34 @@ m_fileMenu->addSeparator (); - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); - m_save_action - = add_action (m_fileMenu, rmgr.icon ("document-save"), + = add_action (m_fileMenu, settings.icon ("document-save"), tr ("&Save File"), SLOT (request_save_file (bool))); m_save_as_action - = add_action (m_fileMenu, rmgr.icon ("document-save-as"), + = add_action (m_fileMenu, settings.icon ("document-save-as"), tr ("Save File &As..."), SLOT (request_save_file_as (bool))); m_fileMenu->addSeparator (); m_close_action - = add_action (m_fileMenu, rmgr.icon ("window-close", false), + = add_action (m_fileMenu, settings.icon ("window-close", false), tr ("&Close"), SLOT (request_close_file (bool))); m_close_all_action - = add_action (m_fileMenu, rmgr.icon ("window-close", false), + = add_action (m_fileMenu, settings.icon ("window-close", false), tr ("Close All"), SLOT (request_close_all_files (bool))); m_close_others_action - = add_action (m_fileMenu, rmgr.icon ("window-close", false), + = add_action (m_fileMenu, settings.icon ("window-close", false), tr ("Close Other Files"), SLOT (request_close_other_files (bool))); m_fileMenu->addSeparator (); m_print_action - = add_action (m_fileMenu, rmgr.icon ("document-print"), + = add_action (m_fileMenu, settings.icon ("document-print"), tr ("Print..."), SLOT (request_print_file (bool))); // edit menu (undo, copy, paste and select all later via main window) @@ -2012,19 +2011,19 @@ m_edit_menu = add_menu (m_menu_bar, tr ("&Edit")); m_redo_action - = add_action (m_edit_menu, rmgr.icon ("edit-redo"), + = add_action (m_edit_menu, settings.icon ("edit-redo"), tr ("&Redo"), SLOT (request_redo (bool))); m_redo_action->setEnabled (false); m_edit_menu->addSeparator (); m_cut_action - = add_action (m_edit_menu, rmgr.icon ("edit-cut"), + = add_action (m_edit_menu, settings.icon ("edit-cut"), tr ("Cu&t"), SLOT (request_cut (bool))); m_cut_action->setEnabled (false); m_find_action - = add_action (m_edit_menu, rmgr.icon ("edit-find-replace"), + = add_action (m_edit_menu, settings.icon ("edit-find-replace"), tr ("&Find and Replace..."), SLOT (request_find (bool))); m_find_next_action @@ -2176,12 +2175,12 @@ m_edit_menu->addSeparator (); m_preferences_action - = add_action (m_edit_menu, rmgr.icon ("preferences-system"), + = add_action (m_edit_menu, settings.icon ("preferences-system"), tr ("&Preferences..."), SLOT (request_preferences (bool))); m_styles_preferences_action - = add_action (m_edit_menu, rmgr.icon ("preferences-system"), + = add_action (m_edit_menu, settings.icon ("preferences-system"), tr ("&Styles Preferences..."), SLOT (request_styles_preferences (bool))); @@ -2236,16 +2235,16 @@ view_menu->addSeparator (); m_zoom_in_action - = add_action (view_menu, rmgr.icon ("view-zoom-in"), tr ("Zoom &In"), + = add_action (view_menu, settings.icon ("view-zoom-in"), tr ("Zoom &In"), SLOT (zoom_in (bool))); m_zoom_out_action - = add_action (view_menu, rmgr.icon ("view-zoom-out"), tr ("Zoom &Out"), - SLOT (zoom_out (bool))); + = add_action (view_menu, settings.icon ("view-zoom-out"), + tr ("Zoom &Out"), SLOT (zoom_out (bool))); m_zoom_normal_action - = add_action (view_menu, rmgr.icon ("view-zoom-original"), tr ("&Normal Size"), - SLOT (zoom_normal (bool))); + = add_action (view_menu, settings.icon ("view-zoom-original"), + tr ("&Normal Size"), SLOT (zoom_normal (bool))); view_menu->addSeparator (); @@ -2261,22 +2260,22 @@ m_debug_menu = add_menu (m_menu_bar, tr ("&Debug")); m_toggle_breakpoint_action - = add_action (m_debug_menu, rmgr.icon ("bp-toggle"), + = add_action (m_debug_menu, settings.icon ("bp-toggle"), tr ("Toggle &Breakpoint"), SLOT (request_toggle_breakpoint (bool))); m_next_breakpoint_action - = add_action (m_debug_menu, rmgr.icon ("bp-next"), + = add_action (m_debug_menu, settings.icon ("bp-next"), tr ("&Next Breakpoint"), SLOT (request_next_breakpoint (bool))); m_previous_breakpoint_action - = add_action (m_debug_menu, rmgr.icon ("bp-prev"), + = add_action (m_debug_menu, settings.icon ("bp-prev"), tr ("Pre&vious Breakpoint"), SLOT (request_previous_breakpoint (bool))); m_remove_all_breakpoints_action - = add_action (m_debug_menu, rmgr.icon ("bp-rm-all"), + = add_action (m_debug_menu, settings.icon ("bp-rm-all"), tr ("&Remove All Breakpoints"), SLOT (request_remove_breakpoint (bool))); @@ -2290,7 +2289,7 @@ m_run_action = add_action (_run_menu, - rmgr.icon ("system-run"), + settings.icon ("system-run"), tr ("Save File and Run / Continue"), SLOT (request_run_file (bool))); diff -r 6dfaaf8ecf3b -r 0645ea65ca6b libgui/src/main-window.cc --- a/libgui/src/main-window.cc Fri Dec 02 18:31:30 2022 -0500 +++ b/libgui/src/main-window.cc Fri Dec 02 18:43:12 2022 -0500 @@ -135,7 +135,9 @@ setObjectName (gui_obj_name_main_window); - rmgr.config_icon_theme (); + gui_settings settings; + + settings.config_icon_theme (); rmgr.update_network_settings (); @@ -174,8 +176,6 @@ m_default_style = qapp->style ()->objectName (); m_default_palette = qapp->palette (); - gui_settings settings; - bool connect_to_web = true; QDateTime last_checked; int serial = 0; @@ -2195,10 +2195,10 @@ construct_new_menu (file_menu); - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); + gui_settings settings; m_open_action = add_action ( - file_menu, rmgr.icon ("document-open"), tr ("Open..."), + file_menu, settings.icon ("document-open"), tr ("Open..."), SLOT (request_open_file (void)), this); m_open_action->setToolTip (tr ("Open an existing file in editor")); @@ -2240,10 +2240,10 @@ { QMenu *new_menu = p->addMenu (tr ("New")); - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); + gui_settings settings; m_new_script_action = add_action ( - new_menu, rmgr.icon ("document-new"), tr ("New Script"), + new_menu, settings.icon ("document-new"), tr ("New Script"), SLOT (request_new_script (void)), this); m_new_function_action = add_action ( @@ -2261,20 +2261,21 @@ QKeySequence ctrl_shift = Qt::ControlModifier + Qt::ShiftModifier; - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); + gui_settings settings; + m_undo_action - = edit_menu->addAction (rmgr.icon ("edit-undo"), tr ("Undo")); + = edit_menu->addAction (settings.icon ("edit-undo"), tr ("Undo")); m_undo_action->setShortcutContext (Qt::ApplicationShortcut); edit_menu->addSeparator (); m_copy_action - = edit_menu->addAction (rmgr.icon ("edit-copy"), tr ("Copy"), this, + = edit_menu->addAction (settings.icon ("edit-copy"), tr ("Copy"), this, &main_window::copyClipboard); m_copy_action->setShortcutContext (Qt::ApplicationShortcut); m_paste_action - = edit_menu->addAction (rmgr.icon ("edit-paste"), tr ("Paste"), this, + = edit_menu->addAction (settings.icon ("edit-paste"), tr ("Paste"), this, &main_window::pasteClipboard); m_paste_action->setShortcutContext (Qt::ApplicationShortcut); @@ -2290,7 +2291,7 @@ edit_menu->addSeparator (); m_find_files_action - = edit_menu->addAction (rmgr.icon ("edit-find"), tr ("Find Files...")); + = edit_menu->addAction (settings.icon ("edit-find"), tr ("Find Files...")); edit_menu->addSeparator (); @@ -2309,7 +2310,7 @@ = edit_menu->addAction (tr ("Set Path")); m_preferences_action - = edit_menu->addAction (rmgr.icon ("preferences-system"), + = edit_menu->addAction (settings.icon ("preferences-system"), tr ("Preferences...")); connect (m_find_files_action, &QAction::triggered, @@ -2347,8 +2348,9 @@ const QString& item, const char *member) { - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); - QAction *action = add_action (m_debug_menu, rmgr.icon (QString (icon)), + gui_settings settings; + + QAction *action = add_action (m_debug_menu, settings.icon (QString (icon)), item, member); action->setEnabled (false); @@ -2604,12 +2606,14 @@ // need to delete these upon destroying this main_window. m_main_tool_bar->addWidget (new QLabel (tr ("Current Directory: "))); m_main_tool_bar->addWidget (m_current_directory_combo_box); - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); + + gui_settings settings; + QAction *current_dir_up - = m_main_tool_bar->addAction (rmgr.icon ("folder-up", false, "go-up"), + = m_main_tool_bar->addAction (settings.icon ("folder-up", false, "go-up"), tr ("One directory up")); QAction *current_dir_search - = m_main_tool_bar->addAction (rmgr.icon ("folder"), + = m_main_tool_bar->addAction (settings.icon ("folder"), tr ("Browse directories")); connect (m_current_directory_combo_box, SIGNAL (activated (const QString&)), diff -r 6dfaaf8ecf3b -r 0645ea65ca6b libgui/src/octave-dock-widget.cc --- a/libgui/src/octave-dock-widget.cc Fri Dec 02 18:31:30 2022 -0500 +++ b/libgui/src/octave-dock-widget.cc Fri Dec 02 18:43:12 2022 -0500 @@ -73,13 +73,13 @@ } } - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); + gui_settings settings; // the custom (extra) title bar of the widget m_title_widget = new QWidget (); m_dock_action = new QAction - (rmgr.icon ("widget-undock", true), "", this); + (settings.icon ("widget-undock", true), "", this); m_dock_action->setToolTip (tr ("Undock widget")); m_dock_button = new QToolButton (m_title_widget); m_dock_button->setDefaultAction (m_dock_action); @@ -87,7 +87,7 @@ m_dock_button->setIconSize (QSize (m_icon_size, m_icon_size)); m_close_action = new QAction - (rmgr.icon ("widget-close", true), "", this); + (settings.icon ("widget-close", true), "", this); m_close_action->setToolTip (tr ("Close widget")); m_close_button = new QToolButton (m_title_widget); m_close_button->setDefaultAction (m_close_action); @@ -314,8 +314,9 @@ // adjust the (un)dock icon if (titleBarWidget ()) { - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); - m_dock_action->setIcon (rmgr.icon ("widget-dock" + m_icon_color, true)); + gui_settings settings; + + m_dock_action->setIcon (settings.icon ("widget-dock" + m_icon_color, true)); m_dock_action->setToolTip (tr ("Dock widget")); } else @@ -342,14 +343,14 @@ void octave_dock_widget::make_widget (bool) { + gui_settings settings; + bool vis = isVisible (); // Since floating widget has no parent, we have to read it if (m_main_window) { - gui_settings settings; - settings.setValue (mw_state.key, m_main_window->saveState ()); // Stay window, otherwise will bounce back to window by default @@ -373,9 +374,7 @@ this, &octave_dock_widget::make_window); if (titleBarWidget ()) { - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); - - m_dock_action->setIcon (rmgr.icon ("widget-undock" + m_icon_color, true)); + m_dock_action->setIcon (settings.icon ("widget-undock" + m_icon_color, true)); m_dock_action->setToolTip (tr ("Undock widget")); } else @@ -587,11 +586,11 @@ void octave_dock_widget::save_settings (void) { + gui_settings settings; + // save state of this dock-widget QString name = objectName (); - gui_settings settings; - store_geometry (); // conditional needed? @@ -802,13 +801,14 @@ QString full_close_icon = "widget-close" + icon_col; if (titleBarWidget ()) { - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); + gui_settings settings; + titleBarWidget ()->setStyleSheet (css_foreground + css_background); css_button = QString ("QToolButton {background: transparent; border: 0px;}"); m_dock_button->setStyleSheet (css_button); m_close_button->setStyleSheet (css_button); - m_dock_action->setIcon (rmgr.icon (full_dock_icon, true)); - m_close_action->setIcon (rmgr.icon (full_close_icon, true)); + m_dock_action->setIcon (settings.icon (full_dock_icon, true)); + m_close_action->setIcon (settings.icon (full_close_icon, true)); } else { diff -r 6dfaaf8ecf3b -r 0645ea65ca6b libgui/src/octave-qobject.cc --- a/libgui/src/octave-qobject.cc Fri Dec 02 18:31:30 2022 -0500 +++ b/libgui/src/octave-qobject.cc Fri Dec 02 18:43:12 2022 -0500 @@ -46,6 +46,7 @@ #include "community-news.h" #include "documentation-dock-widget.h" #include "files-dock-widget.h" +#include "gui-settings.h" #include "history-dock-widget.h" #include "interpreter-qobject.h" #include "main-window.h" @@ -310,7 +311,10 @@ // After settings. config_translators (); - m_resource_manager.config_icon_theme (); + + gui_settings settings; + + settings.config_icon_theme (); // Initilize the shortcut-manager m_shortcut_manager.init_data (); diff -r 6dfaaf8ecf3b -r 0645ea65ca6b libgui/src/qt-interpreter-events.cc --- a/libgui/src/qt-interpreter-events.cc Fri Dec 02 18:31:30 2022 -0500 +++ b/libgui/src/qt-interpreter-events.cc Fri Dec 02 18:43:12 2022 -0500 @@ -438,8 +438,9 @@ { QMutexLocker autolock (&m_mutex); - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); - m_result = QVariant::fromValue (rmgr.icon (name)); + gui_settings settings; + + m_result = QVariant::fromValue (settings.icon (name)); wake_all (); } diff -r 6dfaaf8ecf3b -r 0645ea65ca6b libgui/src/resource-manager.cc --- a/libgui/src/resource-manager.cc Fri Dec 02 18:31:30 2022 -0500 +++ b/libgui/src/resource-manager.cc Fri Dec 02 18:43:12 2022 -0500 @@ -48,6 +48,7 @@ #include "gui-preferences-cs.h" #include "gui-preferences-ed.h" #include "gui-preferences-global.h" +#include "gui-settings.h" #include "octave-qobject.h" #include "resource-manager.h" #include "variable-editor.h" @@ -139,48 +140,6 @@ } - void resource_manager::config_icon_theme (void) - { - int theme = global_icon_theme_index.def.toInt (); - - gui_settings settings; - - // check for new and old setting and use old if required - if (! settings.contains (global_icon_theme_index.key)) - { - // new pref does not exist - if (settings.value (global_icon_theme).toBool ()) - theme = ICON_THEME_SYSTEM; - else - theme = ICON_THEME_OCTAVE; - settings.setValue (global_icon_theme_index.key, theme); // add new - settings.remove (global_icon_theme.key); // remove deprecated key - } - - QIcon::setThemeName (global_all_icon_themes.at (theme)); - - QStringList icon_fallbacks; - - // set the required fallback search paths - switch (theme) - { - case ICON_THEME_SYSTEM: - icon_fallbacks << global_icon_paths.at (ICON_THEME_OCTAVE); - icon_fallbacks << global_icon_paths.at (ICON_THEME_TANGO); - break; - case ICON_THEME_TANGO: - icon_fallbacks << global_icon_paths.at (ICON_THEME_OCTAVE); - break; - case ICON_THEME_OCTAVE: - icon_fallbacks << global_icon_paths.at (ICON_THEME_TANGO); - break; - } - - icon_fallbacks << global_icon_paths.at (ICON_THEME_CURSORS); - - settings.setValue (global_icon_fallbacks.key, icon_fallbacks); - } - QString resource_manager::get_settings_directory (void) { return m_settings_directory; @@ -568,33 +527,6 @@ sys::env::putenv ("HTTPS_PROXY", proxy_url_str); } - QIcon resource_manager::icon (const QString& icon_name, bool octave_only, - const QString& icon_alt_name) - { - if (octave_only) - return QIcon (global_icon_paths.at (ICON_THEME_OCTAVE) + icon_name + ".png"); - - if (QIcon::hasThemeIcon (icon_name)) - return QIcon (QIcon::fromTheme (icon_name)); - else if ((! icon_alt_name.isEmpty ()) && QIcon::hasThemeIcon (icon_alt_name)) - return QIcon (QIcon::fromTheme (icon_alt_name)); - - gui_settings settings; - - QStringList icon_fallbacks - = settings.value (global_icon_fallbacks.key).toStringList (); - - for (int i = 0; i < icon_fallbacks.length (); i++ ) - { - QString icon_file (icon_fallbacks.at (i) + icon_name + ".png"); - if (QFile (icon_file).exists ()) - return QIcon (icon_file); - } - - //QIcon::setThemeName (current_theme); - return QIcon (); - } - // get a list of all available encodings void resource_manager::get_codecs (QStringList *codecs) { diff -r 6dfaaf8ecf3b -r 0645ea65ca6b libgui/src/resource-manager.h --- a/libgui/src/resource-manager.h Fri Dec 02 18:31:30 2022 -0500 +++ b/libgui/src/resource-manager.h Fri Dec 02 18:43:12 2022 -0500 @@ -27,7 +27,6 @@ #define octave_resource_manager_h 1 #include -#include #include #if defined (HAVE_QSCINTILLA) # include @@ -59,7 +58,6 @@ void config_translators (QTranslator *qt_tr, QTranslator *qsci_tr, QTranslator *gui_tr); - void config_icon_theme (void); QString get_settings_directory (void); @@ -88,9 +86,6 @@ void update_network_settings (void); - QIcon icon (const QString& icon_name, bool octave_only = false, - const QString& icon_alt_name = QString ()); - void get_codecs (QStringList *codecs); void combo_encoding (QComboBox *combo, const QString& current = QString ()); diff -r 6dfaaf8ecf3b -r 0645ea65ca6b libgui/src/variable-editor.cc --- a/libgui/src/variable-editor.cc Fri Dec 02 18:31:30 2022 -0500 +++ b/libgui/src/variable-editor.cc Fri Dec 02 18:43:12 2022 -0500 @@ -114,9 +114,10 @@ m_prev_geom = QRect (0, 0, 0, 0); QHBoxLayout *h_layout = m_title_widget->findChild (); - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); + + gui_settings settings; m_fullscreen_action - = new QAction (rmgr.icon ("view-fullscreen", false), "", this); + = new QAction (settings.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); @@ -149,8 +150,8 @@ if (m_full_screen) { setGeometry (m_prev_geom); - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); - m_fullscreen_action->setIcon (rmgr.icon ("view-fullscreen", false)); + gui_settings settings; + m_fullscreen_action->setIcon (settings.icon ("view-fullscreen", false)); m_full_screen = false; } m_fullscreen_action->setToolTip (tr (DOCKED_FULLSCREEN_BUTTON_TOOLTIP)); @@ -208,12 +209,12 @@ void variable_dock_widget::change_fullscreen (void) { - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); + gui_settings settings; if (! m_full_screen) { m_prev_floating = isFloating (); - m_fullscreen_action->setIcon (rmgr.icon ("view-restore", false)); + m_fullscreen_action->setIcon (settings.icon ("view-restore", false)); if (m_prev_floating) m_fullscreen_action->setToolTip (tr ("Restore geometry")); else @@ -233,7 +234,7 @@ } else { - m_fullscreen_action->setIcon (rmgr.icon ("view-fullscreen", false)); + m_fullscreen_action->setIcon (settings.icon ("view-fullscreen", false)); setGeometry (m_prev_geom); if (m_prev_floating) m_fullscreen_action->setToolTip (tr (UNDOCKED_FULLSCREEN_BUTTON_TOOLTIP)); @@ -644,31 +645,31 @@ variable_editor_view::add_edit_actions (QMenu *menu, const QString& qualifier_string) { - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); + gui_settings settings; - menu->addAction (rmgr.icon ("edit-cut"), + menu->addAction (settings.icon ("edit-cut"), tr ("Cut") + qualifier_string, this, &variable_editor_view::cutClipboard); - menu->addAction (rmgr.icon ("edit-copy"), + menu->addAction (settings.icon ("edit-copy"), tr ("Copy") + qualifier_string, this, &variable_editor_view::copyClipboard); - menu->addAction (rmgr.icon ("edit-paste"), + menu->addAction (settings.icon ("edit-paste"), tr ("Paste"), this, &variable_editor_view::pasteClipboard); menu->addSeparator (); - menu->addAction (rmgr.icon ("edit-delete"), + menu->addAction (settings.icon ("edit-delete"), tr ("Clear") + qualifier_string, this, &variable_editor_view::clearContent); - menu->addAction (rmgr.icon ("edit-delete"), + menu->addAction (settings.icon ("edit-delete"), tr ("Delete") + qualifier_string, this, &variable_editor_view::delete_selected); - menu->addAction (rmgr.icon ("document-new"), + menu->addAction (settings.icon ("document-new"), tr ("Variable from Selection"), this, &variable_editor_view::createVariable); } @@ -1663,22 +1664,23 @@ m_tool_bar->setWindowTitle (tr ("Variable Editor Toolbar")); - resource_manager& rmgr = m_octave_qobj.get_resource_manager (); + gui_settings settings; - m_save_action = add_tool_bar_button (rmgr.icon ("document-save"), tr ("Save"), - this, SLOT (save ())); + m_save_action = add_tool_bar_button (settings.icon ("document-save"), + tr ("Save"), this, SLOT (save ())); addAction (m_save_action); m_save_action->setShortcutContext (Qt::WidgetWithChildrenShortcut); m_save_action->setStatusTip(tr("Save variable to a file")); - QAction *action = new QAction (rmgr.icon ("document-save-as"), tr ("Save in format ..."), m_tool_bar); + QAction *action = new QAction (settings.icon ("document-save-as"), + tr ("Save in format ..."), m_tool_bar); QToolButton *save_tool_button = new HoverToolButton (m_tool_bar); save_tool_button->setDefaultAction (action); save_tool_button->setText (tr ("Save in format ...")); save_tool_button->setToolTip (tr("Save variable to a file in different format")); - save_tool_button->setIcon (rmgr.icon ("document-save-as")); + save_tool_button->setIcon (settings.icon ("document-save-as")); save_tool_button->setPopupMode (QToolButton::InstantPopup); QMenu *save_menu = new ReturnFocusMenu (save_tool_button); @@ -1697,15 +1699,15 @@ m_tool_bar->addSeparator (); - action = add_tool_bar_button (rmgr.icon ("edit-cut"), tr ("Cut"), + action = add_tool_bar_button (settings.icon ("edit-cut"), tr ("Cut"), this, SLOT (cutClipboard ())); action->setStatusTip(tr("Cut data to clipboard")); - action = add_tool_bar_button (rmgr.icon ("edit-copy"), tr ("Copy"), + action = add_tool_bar_button (settings.icon ("edit-copy"), tr ("Copy"), this, SLOT (copyClipboard ())); action->setStatusTip(tr("Copy data to clipboard")); - action = add_tool_bar_button (rmgr.icon ("edit-paste"), tr ("Paste"), + action = add_tool_bar_button (settings.icon ("edit-paste"), tr ("Paste"), this, SLOT (pasteClipboard ())); action->setStatusTip(tr("Paste clipboard into variable data")); @@ -1715,14 +1717,15 @@ // QAction *print_action; /icons/fileprint.png // m_tool_bar->addSeparator (); - action = new QAction (rmgr.icon ("plot-xy-curve"), tr ("Plot"), m_tool_bar); + action = new QAction (settings.icon ("plot-xy-curve"), tr ("Plot"), + m_tool_bar); action->setToolTip (tr ("Plot Selected Data")); QToolButton *plot_tool_button = new HoverToolButton (m_tool_bar); plot_tool_button->setDefaultAction (action); plot_tool_button->setText (tr ("Plot")); plot_tool_button->setToolTip (tr ("Plot selected data")); - plot_tool_button->setIcon (rmgr.icon ("plot-xy-curve")); + plot_tool_button->setIcon (settings.icon ("plot-xy-curve")); plot_tool_button->setPopupMode (QToolButton::InstantPopup); @@ -1738,7 +1741,7 @@ m_tool_bar->addSeparator (); - action = add_tool_bar_button (rmgr.icon ("go-up"), tr ("Up"), this, + action = add_tool_bar_button (settings.icon ("go-up"), tr ("Up"), this, SLOT (levelUp ())); action->setStatusTip(tr("Go one level up in variable hierarchy"));