diff options
-rw-r--r-- | src/plugins/help/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/plugins/help/help.pro | 2 | ||||
-rw-r--r-- | src/plugins/help/help.qbs | 1 | ||||
-rw-r--r-- | src/plugins/help/helpplugin.cpp | 2 | ||||
-rw-r--r-- | src/plugins/help/helpwidget.cpp | 95 | ||||
-rw-r--r-- | src/plugins/help/helpwidget.h | 31 | ||||
-rw-r--r-- | src/plugins/help/openpagesmanager.cpp | 117 | ||||
-rw-r--r-- | src/plugins/help/openpagesmanager.h | 25 | ||||
-rw-r--r-- | src/plugins/help/openpagesmodel.cpp | 104 | ||||
-rw-r--r-- | src/plugins/help/openpagesmodel.h | 60 |
10 files changed, 175 insertions, 263 deletions
diff --git a/src/plugins/help/CMakeLists.txt b/src/plugins/help/CMakeLists.txt index bbac6a91565..8e25a3a31c0 100644 --- a/src/plugins/help/CMakeLists.txt +++ b/src/plugins/help/CMakeLists.txt @@ -19,7 +19,6 @@ add_qtc_plugin(Help helpwidget.cpp helpwidget.h localhelpmanager.cpp localhelpmanager.h openpagesmanager.cpp openpagesmanager.h - openpagesmodel.cpp openpagesmodel.h openpagesswitcher.cpp openpagesswitcher.h openpageswidget.cpp openpageswidget.h remotehelpfilter.cpp remotehelpfilter.h remotehelpfilter.ui diff --git a/src/plugins/help/help.pro b/src/plugins/help/help.pro index 5d9cf340781..c4dd38b1160 100644 --- a/src/plugins/help/help.pro +++ b/src/plugins/help/help.pro @@ -22,7 +22,6 @@ HEADERS += \ helpplugin.h \ helpviewer.h \ openpagesmanager.h \ - openpagesmodel.h \ openpagesswitcher.h \ openpageswidget.h \ remotehelpfilter.h \ @@ -45,7 +44,6 @@ SOURCES += \ helpplugin.cpp \ helpviewer.cpp \ openpagesmanager.cpp \ - openpagesmodel.cpp \ openpagesswitcher.cpp \ openpageswidget.cpp \ remotehelpfilter.cpp \ diff --git a/src/plugins/help/help.qbs b/src/plugins/help/help.qbs index 38eda44aa6f..7503b442b45 100644 --- a/src/plugins/help/help.qbs +++ b/src/plugins/help/help.qbs @@ -43,7 +43,6 @@ QtcPlugin { "helpwidget.cpp", "helpwidget.h", "localhelpmanager.cpp", "localhelpmanager.h", "openpagesmanager.cpp", "openpagesmanager.h", - "openpagesmodel.cpp", "openpagesmodel.h", "openpagesswitcher.cpp", "openpagesswitcher.h", "openpageswidget.cpp", "openpageswidget.h", "remotehelpfilter.cpp", "remotehelpfilter.h", "remotehelpfilter.ui", diff --git a/src/plugins/help/helpplugin.cpp b/src/plugins/help/helpplugin.cpp index a4592468908..37e9eba60f6 100644 --- a/src/plugins/help/helpplugin.cpp +++ b/src/plugins/help/helpplugin.cpp @@ -39,7 +39,6 @@ #include "helpviewer.h" #include "localhelpmanager.h" #include "openpagesmanager.h" -#include "openpagesmodel.h" #include "remotehelpfilter.h" #include "searchwidget.h" #include "searchtaskhandler.h" @@ -166,7 +165,6 @@ public: bool m_setupNeeded = true; LocalHelpManager m_localHelpManager; - OpenPagesManager m_openPagesManager; QPointer<HelpWidget> m_externalWindow; QRect m_externalWindowState; diff --git a/src/plugins/help/helpwidget.cpp b/src/plugins/help/helpwidget.cpp index 90363debec8..a90ff5accc7 100644 --- a/src/plugins/help/helpwidget.cpp +++ b/src/plugins/help/helpwidget.cpp @@ -55,8 +55,8 @@ #include <QCoreApplication> #include <QHBoxLayout> #include <QMenu> -#include <QPrinter> #include <QPrintDialog> +#include <QPrinter> #include <QStackedWidget> #include <QStatusBar> #include <QToolButton> @@ -67,6 +67,39 @@ static const char kModeSideBarSettingsKey[] = "Help/ModeSideBar"; namespace Help { namespace Internal { +OpenPagesModel::OpenPagesModel(HelpWidget *parent) + : m_parent(parent) +{} + +int OpenPagesModel::rowCount(const QModelIndex &parent) const +{ + return parent.isValid() ? 0 : m_parent->viewerCount(); +} + +int OpenPagesModel::columnCount(const QModelIndex &parent) const +{ + // page title + funky close button + return parent.isValid() ? 0 : 2; +} + +QVariant OpenPagesModel::data(const QModelIndex &index, int role) const +{ + if (!index.isValid() || index.row() >= rowCount() || index.column() >= columnCount() - 1) + return QVariant(); + + switch (role) { + case Qt::ToolTipRole: + return m_parent->viewerAt(index.row())->source().toString(); + case Qt::DisplayRole: { + const QString title = m_parent->viewerAt(index.row())->title(); + return title.isEmpty() ? HelpWidget::tr("(Untitled)") : title; + } + default: + break; + } + return QVariant(); +} + static void openUrlInWindow(const QUrl &url) { HelpPlugin::showHelpUrl(url, Core::HelpManager::ExternalHelpAlways); @@ -77,12 +110,16 @@ static bool isBookmarkable(const QUrl &url) return !url.isEmpty() && url != QUrl(Help::Constants::AboutBlank); } -HelpWidget::HelpWidget(const Core::Context &context, WidgetStyle style, QWidget *parent) : - QWidget(parent), - m_style(style) +HelpWidget::HelpWidget(const Core::Context &context, WidgetStyle style, QWidget *parent) + : QWidget(parent) + , m_model(this) + , m_style(style) { m_viewerStack = new QStackedWidget; + if (style == ModeWidget) + m_openPagesManager = new OpenPagesManager(this); + auto topLayout = new QVBoxLayout; topLayout->setContentsMargins(0, 0, 0, 0); topLayout->setSpacing(0); @@ -299,9 +336,8 @@ HelpWidget::HelpWidget(const Core::Context &context, WidgetStyle style, QWidget } if (style != ModeWidget) { - HelpViewer *viewer = HelpPlugin::createHelpViewer(qreal(0.0)); - addViewer(viewer); - setCurrentViewer(viewer); + addViewer({}); + setCurrentIndex(0); } } @@ -333,6 +369,12 @@ HelpWidget::~HelpWidget() Core::ActionManager::unregisterAction(m_scaleDown, TextEditor::Constants::DECREASE_FONT_SIZE); if (m_resetScale) Core::ActionManager::unregisterAction(m_resetScale, TextEditor::Constants::RESET_FONT_SIZE); + delete m_openPagesManager; +} + +QAbstractItemModel *HelpWidget::model() +{ + return &m_model; } void HelpWidget::addSideBar() @@ -469,8 +511,15 @@ int HelpWidget::currentIndex() const return m_viewerStack->currentIndex(); } -void HelpWidget::addViewer(HelpViewer *viewer) +void HelpWidget::setCurrentIndex(int index) +{ + setCurrentViewer(viewerAt(index)); +} + +HelpViewer *HelpWidget::addViewer(const QUrl &url, qreal zoom) { + m_model.beginInsertRows(QModelIndex(), viewerCount(), viewerCount()); + HelpViewer *viewer = HelpPlugin::createHelpViewer(zoom); m_viewerStack->addWidget(viewer); viewer->setFocus(Qt::OtherFocusReason); viewer->setActionVisible(HelpViewer::Action::NewPage, m_style == ModeWidget); @@ -490,28 +539,36 @@ void HelpWidget::addViewer(HelpViewer *viewer) if (currentViewer() == viewer) m_backAction->setEnabled(available); }); - connect(viewer, &HelpViewer::printRequested, this, [viewer, this]() { - print(viewer); - }); + connect(viewer, &HelpViewer::printRequested, this, [viewer, this]() { print(viewer); }); if (m_style == ExternalWindow) connect(viewer, &HelpViewer::titleChanged, this, &HelpWidget::updateWindowTitle); + connect(viewer, &HelpViewer::titleChanged, &m_model, [this, viewer] { + const int i = indexOf(viewer); + QTC_ASSERT(i >= 0, return ); + m_model.dataChanged(m_model.index(i, 0), m_model.index(i, 0)); + }); connect(viewer, &HelpViewer::loadFinished, this, &HelpWidget::highlightSearchTerms); connect(viewer, &HelpViewer::newPageRequested, [](const QUrl &url) { OpenPagesManager::instance().createPage(url); }); connect(viewer, &HelpViewer::externalPageRequested, this, &openUrlInWindow); - updateCloseButton(); + m_model.endInsertRows(); + if (url.isValid()) + viewer->setSource(url); + return viewer; } void HelpWidget::removeViewerAt(int index) { - QWidget *viewerWidget = m_viewerStack->widget(index); + HelpViewer *viewerWidget = viewerAt(index); QTC_ASSERT(viewerWidget, return); + m_model.beginRemoveRows(QModelIndex(), index, index); + viewerWidget->stop(); m_viewerStack->removeWidget(viewerWidget); - // do not delete, that is done in the model - // delete viewerWidget; + m_model.endRemoveRows(); + delete viewerWidget; if (m_viewerStack->currentWidget()) setCurrentViewer(qobject_cast<HelpViewer *>(m_viewerStack->currentWidget())); updateCloseButton(); @@ -581,6 +638,14 @@ void HelpWidget::closeEvent(QCloseEvent *) emit aboutToClose(); } +int HelpWidget::indexOf(HelpViewer *viewer) const +{ + for (int i = 0; i < viewerCount(); ++i) + if (viewerAt(i) == viewer) + return i; + return -1; +} + void HelpWidget::updateBackMenu() { m_backMenu->clear(); diff --git a/src/plugins/help/helpwidget.h b/src/plugins/help/helpwidget.h index bc38dcaa070..74fdb0a8ab2 100644 --- a/src/plugins/help/helpwidget.h +++ b/src/plugins/help/helpwidget.h @@ -27,8 +27,9 @@ #include <coreplugin/icontext.h> -#include <qglobal.h> +#include <QAbstractTableModel> #include <QWidget> +#include <qglobal.h> QT_BEGIN_NAMESPACE class QAction; @@ -47,6 +48,24 @@ namespace Help { namespace Internal { class HelpViewer; +class HelpWidget; +class OpenPagesManager; + +class OpenPagesModel : public QAbstractTableModel +{ +public: + OpenPagesModel(HelpWidget *parent); + + int rowCount(const QModelIndex &parent = QModelIndex()) const override; + int columnCount(const QModelIndex &parent = QModelIndex()) const override; + + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; + +private: + HelpWidget *m_parent; + + friend class HelpWidget; +}; class HelpWidget : public QWidget { @@ -61,13 +80,15 @@ public: HelpWidget(const Core::Context &context, WidgetStyle style, QWidget *parent = nullptr); ~HelpWidget() override; + QAbstractItemModel *model(); + HelpViewer *currentViewer() const; void setCurrentViewer(HelpViewer *viewer); int currentIndex() const; - void addViewer(HelpViewer *viewer); + void setCurrentIndex(int index); + HelpViewer *addViewer(const QUrl &url, qreal zoom = 0); void removeViewerAt(int index); - // so central widget can save the state int viewerCount() const; HelpViewer *viewerAt(int index) const; @@ -92,6 +113,8 @@ signals: void filterActivated(const QString &name); private: + int indexOf(HelpViewer *viewer) const; + void updateBackMenu(); void updateForwardMenu(); void updateWindowTitle(); @@ -111,6 +134,8 @@ private: void addSideBar(); QString sideBarSettingsKey() const; + OpenPagesModel m_model; + OpenPagesManager *m_openPagesManager = nullptr; Core::IContext *m_context = nullptr; WidgetStyle m_style; QAction *m_toggleSideBarAction = nullptr; diff --git a/src/plugins/help/openpagesmanager.cpp b/src/plugins/help/openpagesmanager.cpp index 9a3c50e51a0..d11ce6728bb 100644 --- a/src/plugins/help/openpagesmanager.cpp +++ b/src/plugins/help/openpagesmanager.cpp @@ -25,11 +25,10 @@ #include "openpagesmanager.h" -#include "centralwidget.h" #include "helpconstants.h" #include "helpviewer.h" +#include "helpwidget.h" #include "localhelpmanager.h" -#include "openpagesmodel.h" #include "openpagesswitcher.h" #include "openpageswidget.h" @@ -42,6 +41,7 @@ #include <coreplugin/coreconstants.h> #include <coreplugin/modemanager.h> +#include <utils/qtcassert.h> using namespace Core; using namespace Help::Internal; @@ -50,23 +50,22 @@ OpenPagesManager *OpenPagesManager::m_instance = nullptr; // -- OpenPagesManager -OpenPagesManager::OpenPagesManager(QObject *parent) - : QObject(parent) +OpenPagesManager::OpenPagesManager(HelpWidget *helpWidget) + : m_helpWidget(helpWidget) { Q_ASSERT(!m_instance); m_instance = this; - m_model = new OpenPagesModel(this); m_comboBox = new QComboBox; - m_comboBox->setModel(m_model); + m_comboBox->setModel(m_helpWidget->model()); m_comboBox->setContextMenuPolicy(Qt::CustomContextMenu); connect(m_comboBox, QOverload<int>::of(&QComboBox::activated), this, &OpenPagesManager::setCurrentPageByRow); connect(m_comboBox, &QWidget::customContextMenuRequested, this, &OpenPagesManager::openPagesContextMenu); - m_openPagesSwitcher = new OpenPagesSwitcher(m_model); + m_openPagesSwitcher = new OpenPagesSwitcher(m_helpWidget->model()); connect(m_openPagesSwitcher, &OpenPagesSwitcher::closePage, this, &OpenPagesManager::closePage); connect(m_openPagesSwitcher, &OpenPagesSwitcher::setCurrentPage, @@ -88,7 +87,7 @@ OpenPagesManager &OpenPagesManager::instance() QWidget *OpenPagesManager::openPagesWidget() const { if (!m_openPagesWidget) { - m_openPagesWidget = new OpenPagesWidget(m_model); + m_openPagesWidget = new OpenPagesWidget(m_helpWidget->model()); connect(m_openPagesWidget, &OpenPagesWidget::setCurrentPage, this, &OpenPagesManager::setCurrentPage); connect(m_openPagesWidget, &OpenPagesWidget::closePage, @@ -118,47 +117,43 @@ void OpenPagesManager::setupInitialPages() int initialPage = 0; switch (option) { - case LocalHelpManager::ShowHomePage: { - m_model->addPage(homePage); - } break; - - case LocalHelpManager::ShowBlankPage: { - m_model->addPage(QUrl(Help::Constants::AboutBlank)); - } break; - - case LocalHelpManager::ShowLastPages: { - const QStringList &lastShownPageList = LocalHelpManager::lastShownPages(); - const int pageCount = lastShownPageList.count(); - - if (pageCount > 0) { - QList<float> zoomFactors = LocalHelpManager::lastShownPagesZoom(); - while (zoomFactors.count() < pageCount) - zoomFactors.append(0.); - - initialPage = LocalHelpManager::lastSelectedTab(); - for (int curPage = 0; curPage < pageCount; ++curPage) { - const QString &curFile = lastShownPageList.at(curPage); - if (engine.findFile(curFile).isValid() - || curFile == Help::Constants::AboutBlank) { - m_model->addPage(curFile, zoomFactors.at(curPage)); - } else if (curPage <= initialPage && initialPage > 0) { - --initialPage; - } + case LocalHelpManager::ShowHomePage: + m_helpWidget->addViewer(homePage); + break; + + case LocalHelpManager::ShowBlankPage: + m_helpWidget->addViewer(QUrl(Help::Constants::AboutBlank)); + break; + + case LocalHelpManager::ShowLastPages: { + const QStringList &lastShownPageList = LocalHelpManager::lastShownPages(); + const int pageCount = lastShownPageList.count(); + + if (pageCount > 0) { + QList<float> zoomFactors = LocalHelpManager::lastShownPagesZoom(); + while (zoomFactors.count() < pageCount) + zoomFactors.append(0.); + + initialPage = LocalHelpManager::lastSelectedTab(); + for (int curPage = 0; curPage < pageCount; ++curPage) { + const QString &curFile = lastShownPageList.at(curPage); + if (engine.findFile(curFile).isValid() || curFile == Help::Constants::AboutBlank) { + m_helpWidget->addViewer(curFile, zoomFactors.at(curPage)); + } else if (curPage <= initialPage && initialPage > 0) { + --initialPage; } } - } break; + } + } break; - default: break; + default: + break; } - if (m_model->rowCount() == 0) - m_model->addPage(homePage); - - for (int i = 0; i < m_model->rowCount(); ++i) - CentralWidget::instance()->addViewer(m_model->pageAt(i)); + if (m_helpWidget->viewerCount() == 0) + m_helpWidget->addViewer(homePage); - setCurrentPageByRow((initialPage >= m_model->rowCount()) - ? m_model->rowCount() - 1 : initialPage); + setCurrentPageByRow(std::max(initialPage, m_helpWidget->viewerCount() - 1)); m_openPagesSwitcher->selectCurrentPage(); } @@ -172,20 +167,15 @@ HelpViewer *OpenPagesManager::createPage(const QUrl &url) if (url.isValid() && HelpViewer::launchWithExternalApp(url)) return nullptr; - m_model->addPage(url); - - const int index = m_model->rowCount() - 1; - HelpViewer * const page = m_model->pageAt(index); - CentralWidget::instance()->addViewer(page); - - setCurrentPageByRow(index); + HelpViewer *page = m_helpWidget->addViewer(url); + setCurrentPageByRow(m_helpWidget->viewerCount() - 1); return page; } void OpenPagesManager::setCurrentPageByRow(int index) { - CentralWidget::instance()->setCurrentViewer(m_model->pageAt(index)); + m_helpWidget->setCurrentIndex(index); m_comboBox->setCurrentIndex(index); if (m_openPagesWidget) @@ -209,10 +199,10 @@ void OpenPagesManager::closeCurrentPage() const bool returnOnClose = LocalHelpManager::returnOnClose(); - if (m_model->rowCount() == 1 && returnOnClose) { + if (m_helpWidget->viewerCount() == 1 && returnOnClose) { ModeManager::activateMode(Core::Constants::MODE_EDIT); } else { - Q_ASSERT(indexes.count() == 1); + QTC_ASSERT(indexes.count() == 1, return ); removePage(indexes.first().row()); } } @@ -227,9 +217,9 @@ void OpenPagesManager::closePagesExcept(const QModelIndex &index) { if (index.isValid()) { int i = 0; - HelpViewer *viewer = m_model->pageAt(index.row()); - while (m_model->rowCount() > 1) { - if (m_model->pageAt(i) != viewer) + HelpViewer *viewer = m_helpWidget->viewerAt(index.row()); + while (m_helpWidget->viewerCount() > 1) { + if (m_helpWidget->viewerAt(i) != viewer) removePage(i); else i++; @@ -263,10 +253,9 @@ void OpenPagesManager::gotoPreviousPage() void OpenPagesManager::removePage(int index) { - Q_ASSERT(m_model->rowCount() > 1); + QTC_ASSERT(index < m_helpWidget->viewerCount(), return ); - m_model->removePage(index); - CentralWidget::instance()->removeViewerAt(index); + m_helpWidget->removeViewerAt(index); if (m_openPagesWidget) m_openPagesWidget->selectCurrentPage(); @@ -275,9 +264,9 @@ void OpenPagesManager::removePage(int index) void OpenPagesManager::showTwicherOrSelectPage() const { if (QApplication::keyboardModifiers() != Qt::NoModifier) { - const int width = CentralWidget::instance()->width(); - const int height = CentralWidget::instance()->height(); - const QPoint p(CentralWidget::instance()->mapToGlobal(QPoint(0, 0))); + const int width = m_helpWidget->width(); + const int height = m_helpWidget->height(); + const QPoint p(m_helpWidget->mapToGlobal(QPoint(0, 0))); m_openPagesSwitcher->move((width - m_openPagesSwitcher->width()) / 2 + p.x(), (height - m_openPagesSwitcher->height()) / 2 + p.y()); m_openPagesSwitcher->setVisible(true); @@ -288,8 +277,8 @@ void OpenPagesManager::showTwicherOrSelectPage() const void OpenPagesManager::openPagesContextMenu(const QPoint &point) { - const QModelIndex &index = m_model->index(m_comboBox->currentIndex(), 0); - const QString &fileName = m_model->data(index, Qt::ToolTipRole).toString(); + const QModelIndex &index = m_helpWidget->model()->index(m_comboBox->currentIndex(), 0); + const QString &fileName = m_helpWidget->model()->data(index, Qt::ToolTipRole).toString(); if (fileName.isEmpty()) return; diff --git a/src/plugins/help/openpagesmanager.h b/src/plugins/help/openpagesmanager.h index dd4f3b88c4d..83357bb60f3 100644 --- a/src/plugins/help/openpagesmanager.h +++ b/src/plugins/help/openpagesmanager.h @@ -27,18 +27,21 @@ #include <QObject> -QT_FORWARD_DECLARE_CLASS(QComboBox) -QT_FORWARD_DECLARE_CLASS(QListView) -QT_FORWARD_DECLARE_CLASS(QModelIndex) -QT_FORWARD_DECLARE_CLASS(QPoint) -QT_FORWARD_DECLARE_CLASS(QUrl) -QT_FORWARD_DECLARE_CLASS(QWidget) +QT_BEGIN_NAMESPACE +class QAbstractItemModel; +class QComboBox; +class QListView; +class QModelIndex; +class QPoint; +class QUrl; +class QWidget; +QT_END_NAMESPACE namespace Help { - namespace Internal { +namespace Internal { +class HelpWidget; class HelpViewer; -class OpenPagesModel; class OpenPagesSwitcher; class OpenPagesWidget; @@ -47,7 +50,7 @@ class OpenPagesManager : public QObject Q_OBJECT public: - OpenPagesManager(QObject *parent = nullptr); + OpenPagesManager(HelpWidget *helpWidget); ~OpenPagesManager() override; static OpenPagesManager &instance(); @@ -76,12 +79,12 @@ private: void openPagesContextMenu(const QPoint &point); QComboBox *m_comboBox = nullptr; - OpenPagesModel *m_model = nullptr; + HelpWidget *m_helpWidget = nullptr; mutable OpenPagesWidget *m_openPagesWidget = nullptr; OpenPagesSwitcher *m_openPagesSwitcher = nullptr; static OpenPagesManager *m_instance; }; - } // namespace Internal +} // namespace Internal } // namespace Help diff --git a/src/plugins/help/openpagesmodel.cpp b/src/plugins/help/openpagesmodel.cpp deleted file mode 100644 index 3587acfc096..00000000000 --- a/src/plugins/help/openpagesmodel.cpp +++ /dev/null @@ -1,104 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ - -#include "openpagesmodel.h" -#include "helpplugin.h" -#include "helpviewer.h" - -#include <QUrl> - -using namespace Help::Internal; - -OpenPagesModel::OpenPagesModel(QObject *parent) - : QAbstractTableModel(parent) -{ -} - -int OpenPagesModel::rowCount(const QModelIndex &parent) const -{ - return parent.isValid() ? 0 : m_pages.count(); -} - -int OpenPagesModel::columnCount(const QModelIndex &/*parent*/) const -{ - return 2; -} - -QVariant OpenPagesModel::data(const QModelIndex &index, int role) const -{ - if (!index.isValid() || index.row() >= rowCount() - || index.column() >= columnCount() - 1) - return QVariant(); - - switch (role) { - case Qt::ToolTipRole: - return m_pages.at(index.row())->source().toString(); - case Qt::DisplayRole: { - const QString title = m_pages.at(index.row())->title(); - return title.isEmpty() ? tr("(Untitled)") : title; - } - default: - break; - } - return QVariant(); -} - -void OpenPagesModel::addPage(const QUrl &url, qreal zoom) -{ - beginInsertRows(QModelIndex(), rowCount(), rowCount()); - HelpViewer *page = HelpPlugin::createHelpViewer(zoom); - connect(page, &HelpViewer::titleChanged, - this, &OpenPagesModel::handleTitleChanged); - m_pages << page; - endInsertRows(); - if (url.isValid()) - page->setSource(url); -} - -void OpenPagesModel::removePage(int index) -{ - Q_ASSERT(index >= 0 && index < rowCount()); - beginRemoveRows(QModelIndex(), index, index); - HelpViewer *page = m_pages.at(index); - page->stop(); - m_pages.removeAt(index); - endRemoveRows(); - page->deleteLater(); -} - -HelpViewer *OpenPagesModel::pageAt(int index) const -{ - Q_ASSERT(index >= 0 && index < rowCount()); - return m_pages.at(index); -} - -void OpenPagesModel::handleTitleChanged() -{ - auto page = static_cast<HelpViewer *>(sender()); - const int row = m_pages.indexOf(page); - Q_ASSERT(row != -1 ); - const QModelIndex &item = index(row, 0); - emit dataChanged(item, item); -} diff --git a/src/plugins/help/openpagesmodel.h b/src/plugins/help/openpagesmodel.h deleted file mode 100644 index 4d990ef791b..00000000000 --- a/src/plugins/help/openpagesmodel.h +++ /dev/null @@ -1,60 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of Qt Creator. -** -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3 as published by the Free Software -** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-3.0.html. -** -****************************************************************************/ - -#pragma once - -#include <QList> -#include <QAbstractTableModel> - -QT_FORWARD_DECLARE_CLASS(QUrl) - -namespace Help { - namespace Internal { - -class HelpViewer; - -class OpenPagesModel : public QAbstractTableModel -{ - Q_OBJECT - -public: - OpenPagesModel(QObject *parent); - - int rowCount(const QModelIndex &parent = QModelIndex()) const override; - int columnCount(const QModelIndex &parent = QModelIndex()) const override; - QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; - - void addPage(const QUrl &url, qreal zoom = 0); - void removePage(int index); - HelpViewer *pageAt(int index) const; - -private: - void handleTitleChanged(); - - QList<HelpViewer *> m_pages; -}; - - } // namespace Internal -} // namespace Help |