From e0e5621b807d987a329a9f5058f660eca5c9be6b Mon Sep 17 00:00:00 2001 From: Eike Ziller Date: Mon, 2 Sep 2019 15:52:01 +0200 Subject: Help: De-duplicate management of help viewer pages For the help mode, the help viewer pages were managed both by the OpenPagesModel and the HelpWidget, and needed manual keeping in sync. Instead make the model just an aspect of the HelpWidget, manage creation/deletion of pages via the HelpWidget, and use the model only for the pure MVC API purposes. Task-number: QTCREATORBUG-20558 Change-Id: Ib7d6f2561239b0d5f3328dfd30c84718f81af0a1 Reviewed-by: David Schulz --- src/plugins/help/CMakeLists.txt | 1 - src/plugins/help/help.pro | 2 - src/plugins/help/help.qbs | 1 - src/plugins/help/helpplugin.cpp | 2 - src/plugins/help/helpwidget.cpp | 95 ++++++++++++++++++++++----- src/plugins/help/helpwidget.h | 31 ++++++++- src/plugins/help/openpagesmanager.cpp | 117 +++++++++++++++------------------- src/plugins/help/openpagesmanager.h | 25 ++++---- src/plugins/help/openpagesmodel.cpp | 104 ------------------------------ src/plugins/help/openpagesmodel.h | 60 ----------------- 10 files changed, 175 insertions(+), 263 deletions(-) delete mode 100644 src/plugins/help/openpagesmodel.cpp delete mode 100644 src/plugins/help/openpagesmodel.h (limited to 'src/plugins/help') diff --git a/src/plugins/help/CMakeLists.txt b/src/plugins/help/CMakeLists.txt index bbac6a9156..8e25a3a31c 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 5d9cf34078..c4dd38b116 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 38eda44aa6..7503b442b4 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 a459246890..37e9eba60f 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 m_externalWindow; QRect m_externalWindowState; diff --git a/src/plugins/help/helpwidget.cpp b/src/plugins/help/helpwidget.cpp index 90363debec..a90ff5accc 100644 --- a/src/plugins/help/helpwidget.cpp +++ b/src/plugins/help/helpwidget.cpp @@ -55,8 +55,8 @@ #include #include #include -#include #include +#include #include #include #include @@ -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(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 bc38dcaa07..74fdb0a8ab 100644 --- a/src/plugins/help/helpwidget.h +++ b/src/plugins/help/helpwidget.h @@ -27,8 +27,9 @@ #include -#include +#include #include +#include 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 9a3c50e51a..d11ce6728b 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 #include +#include 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::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 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 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 dd4f3b88c4..83357bb60f 100644 --- a/src/plugins/help/openpagesmanager.h +++ b/src/plugins/help/openpagesmanager.h @@ -27,18 +27,21 @@ #include -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 3587acfc09..0000000000 --- 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 - -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(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 4d990ef791..0000000000 --- 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 -#include - -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 m_pages; -}; - - } // namespace Internal -} // namespace Help -- cgit v1.2.1