Mercurial > octave
view libgui/src/documentation.h @ 31619:ad014fc78bd6
use individual local gui_settings objects
Previously, we created a single gui_settings object (derived from
QSettings) and accessed it from the resource_manager object. That
design is not necessary and is not the way QSettings was designed to
be used. Instead of managing a single object, we should be using
individual QSettings objects where needed. Each individual QSettings
object manages thread-safe access to a single global collection of
settings. The Qt docs say that operations on QSettings are not thread
safe, but that means that you can't create a QSettings object in one
thread and use it in another without some locking. I'm not sure
whether we were doing that correctly, but with this change it no
longer matters. Each QSettings object does perform locking when
reading or writing the underlying global data.
* resource-manager.h, resource-manager.cc
(resource_manager::m_settings): Delete data member.
(resource_manager::get_settings): Delete.
* annotation-dialog.cc, QTerminal.cc, QTerminal.h, command-widget.cc,
command-widget.h, community-news.cc, dialog.cc,
documentation-bookmarks.cc, documentation-bookmarks.h,
documentation-dock-widget.cc, documentation-dock-widget.h,
documentation.cc, documentation.h, dw-main-window.cc,
dw-main-window.h, external-editor-interface.cc, files-dock-widget.cc,
files-dock-widget.h, find-files-dialog.cc, history-dock-widget.cc,
history-dock-widget.h, file-editor-interface.h, file-editor-tab.cc,
file-editor-tab.h, file-editor.cc, file-editor.h, find-dialog.cc,
octave-qscintilla.cc, main-window.cc, main-window.h, news-reader.cc,
octave-dock-widget.cc, octave-dock-widget.h, qt-interpreter-events.cc,
qt-interpreter-events.h, release-notes.cc, resource-manager.cc,
resource-manager.h, set-path-dialog.cc, settings-dialog.cc,
settings-dialog.h, shortcut-manager.cc, shortcut-manager.h,
terminal-dock-widget.cc, terminal-dock-widget.h, variable-editor.cc,
variable-editor.h, welcome-wizard.cc, workspace-model.cc,
workspace-model.h, workspace-view.cc: Use local gui_settings objects
instead of accessing a pointer to a single gui_settings object owned
by the resource_manager object.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Fri, 02 Dec 2022 14:23:53 -0500 |
parents | 796f54d4ddbf |
children | 431f80aba37a |
line wrap: on
line source
//////////////////////////////////////////////////////////////////////// // // Copyright (C) 2018-2022 The Octave Project Developers // // See the file COPYRIGHT.md in the top-level directory of this // distribution or <https://octave.org/copyright/>. // // This file is part of Octave. // // Octave is free software: you can redistribute it and/or modify it // under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // Octave is distributed in the hope that it will be useful, but // WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with Octave; see the file COPYING. If not, see // <https://www.gnu.org/licenses/>. // //////////////////////////////////////////////////////////////////////// #if ! defined (octave_documentation_h) #define octave_documentation_h 1 #include <QComboBox> #include <QMenu> #include <QShortcut> #include <QSplitter> #include <QTextBrowser> #include <QToolBar> #include <QListWidget> #include <QToolButton> #include <QWidget> #include <QtHelp/QHelpEngine> namespace octave { class base_qobject; class documentation; class documentation_bookmarks; //! Documentation browser derived from Textbrowser class documentation_browser : public QTextBrowser { Q_OBJECT public: documentation_browser (QHelpEngine *help_engine, QWidget *parent = nullptr); ~documentation_browser (void) = default; virtual QVariant loadResource (int type, const QUrl& url); public slots: void handle_index_clicked (const QUrl& url, const QString& keyword = QString ()); void notice_settings (void); void save_settings (void); //! Zooming in and out while taking care of the zoom level //!@{ void zoom_in (void); void zoom_out (void); void zoom_original (void); //!@} protected: void wheelEvent (QWheelEvent *we); private: QHelpEngine *m_help_engine; //! Store the current zoom level int m_zoom_level; //! Minimal and maximal zoom level avoiding calling //! zoom_in and zoom_out without actually zooming but //! with changing the stored zoom level enum { min_zoom_level = -5, max_zoom_level = 10 }; }; //! The documentation main class derived from QSplitter class documentation : public QSplitter { Q_OBJECT public: documentation (QWidget *parent, base_qobject& oct_qobj); ~documentation (void); /*! Generate a string with page name @p title and current anchor from @p url for using in prev/next or bookmarks menu: @param title current title of the page as QString @param url current url as QUrl @return QString "title: anchor" */ QString title_and_anchor (const QString& title, const QUrl& url); signals: void show_single_result (const QUrl&); public slots: void notice_settings (void); void save_settings (void); void copyClipboard (void); void pasteClipboard (void); void selectAll (void); void load_index (void); void load_ref (const QString& name = QString ()); void registerDoc (const QString& name); void unregisterDoc (const QString& name); private slots: void activate_find (void); void global_search (void); void global_search_started (void); void global_search_finished (int hits); void filter_update (const QString& expression); void filter_update_history (void); void find (bool backward = false); void find_backward (void); void find_forward_from_anchor (const QString& text); void record_anchor_position (void); void handle_cursor_position_change (void); void handle_search_result_clicked (const QUrl& url); void update_history_menus (void); void open_hist_url (QAction *a); private: void construct_tool_bar (void); QAction * add_action (const QIcon& icon, const QString& text, const char *member, QWidget *receiver = nullptr, QToolBar *tool_bar = nullptr); void update_history (int new_count, QAction **actions); //! Select all occurrences of a string in the doc browser void select_all_occurrences (const QString& text); base_qobject& m_octave_qobj; QHelpEngine *m_help_engine; QString m_internal_search; documentation_browser *m_doc_browser; documentation_bookmarks *m_bookmarks; QLineEdit *m_find_line_edit; int m_search_anchor_position; QComboBox *m_filter; QString m_collection; QWidget *m_doc_widget; QToolBar *m_tool_bar; QString m_query_string; bool m_indexed; QString m_current_ref_name; QAction *m_action_go_home; QAction *m_action_go_prev; QAction *m_action_go_next; QMenu *m_prev_pages_menu; QMenu *m_next_pages_menu; int m_prev_pages_count; int m_next_pages_count; enum { max_history_entries = 10 }; QAction *m_prev_pages_actions[max_history_entries]; QAction *m_next_pages_actions[max_history_entries]; QAction *m_action_bookmark; QAction *m_action_find; QShortcut *m_findnext_shortcut; QShortcut *m_findprev_shortcut; QAction *m_action_zoom_in; QAction *m_action_zoom_out; QAction *m_action_zoom_original; }; } #endif