Mercurial > octave
view libgui/src/documentation.h @ 25155:17387d4edd1d stable
Add standard key bindings and actions to in-page Documentation find (bug #53006)
* documentation.cc (documentation::documentation): Connect m_doc_browser
cursor position change signal to slot that records position. Connect
m_find_line_edit text-edited signal to find_forward_from_anchor() to provide
search-while-type. Replace QKeySequence "Ctrl+F" definition with Qt's
pre-defined QKeySequence::Find. Change the context of the key press from
Qt::WidgetWithChildrenShortcut to the broader Qt::WindowShortcut and rename
the sequence show_shortcut. Connect show_shortcut object's activated()
signal to parent widget's show() slot and to m_find_line_edit's selectAll()
and setFocus() slots. Create a hide_shortcut QShortcut with QKeySequence
"Escape" and connect its activated() signal to parent widget's hide() slot
and m_doc_browser's setFocus() slot. Create a findnext_shortcut and connect
its activated() signal to the documentation class's find_forward() slot.
Create a findnext_shortcut and connect its activated() signal to the
documentation class's find_backward() slot. Set m_search_anchor_position to
zero.
(documentation::find_forward): After doing the find operation, record the
current "anchor" position of the QTextEdit's cursor position.
(documentation::find_backward): Ditto.
(documentation::toggle_hidden_find): Removed.
(documentation::find_forward_from_anchor): Added. For search-while-type,
set the QTextEdit's cursor position back to the anchor position before
calling the find() routine and allow "undoing" the search-while-type.
(documentation::record_anchor_position): Added. Record the QTextEdit
cursor's current position.
(documentation::handle_cursor_position_change): Added. Upon the QTextEdit's
cursor change, call record_anchor_position() but only if that position change
was due to user action within the window.
* documentation.h (documentation:public QSplitter): Add new integer member
variable m_search_anchor_position.
(documentation::find_forward_from_anchor): Added. Slot declaration.
(documentation::record_anchor_position): Ditto.
(documentation::handle_cursor_position_change): Ditto.
author | Daniel J Sebald <daniel.sebald@ieee.org> |
---|---|
date | Thu, 05 Apr 2018 11:35:58 -0500 |
parents | 9578133ca03e |
children | 41bbdf17f51a |
line wrap: on
line source
/* Copyright (C) 2018 Torsten <mttl@maibox.org> 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 <QWidget> #include <QSettings> #include <QSplitter> #include <QTextBrowser> #include <QtHelp/QHelpEngine> namespace octave { // The documentation browser class documentation_browser : public QTextBrowser { Q_OBJECT public: documentation_browser (QHelpEngine *help_engine, QWidget *parent = nullptr); ~documentation_browser (void); virtual QVariant loadResource (int type, const QUrl &url); public slots: void handle_index_clicked (const QUrl& url, const QString& keyword = QString ()); void notice_settings (const QSettings *settings); private: QHelpEngine *m_help_engine; }; // The documentaiton main class (splitter) class documentation : public QSplitter { Q_OBJECT public: documentation (QWidget *parent = nullptr); ~documentation (void); public slots: void notice_settings (const QSettings *settings); void copyClipboard (void); void pasteClipboard (void); void selectAll (void); void load_ref (const QString & name); void registerDoc (const QString & name); void unregisterDoc (const QString & name); private slots: 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_forward (void); void find_backward (void); void find_forward_from_anchor (const QString& text); void record_anchor_position (void); void handle_cursor_position_change (void); private: QHelpEngine *m_help_engine; documentation_browser *m_doc_browser; QLineEdit *m_find_line_edit; int m_search_anchor_position; QComboBox *m_filter; QString m_collection; }; } #endif