Help: Remove indirection when synchronizing current page

Task-number: QTCREATORBUG-20558
Change-Id: Ia76b6a11ed39f6b65d1c949fe57f8c3c4064c3ed
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Eike Ziller
2019-09-03 09:03:38 +02:00
parent b34102ceea
commit 25935d2da9
8 changed files with 47 additions and 58 deletions

View File

@@ -494,18 +494,6 @@ HelpViewer *HelpWidget::currentViewer() const
return qobject_cast<HelpViewer *>(m_viewerStack->currentWidget()); return qobject_cast<HelpViewer *>(m_viewerStack->currentWidget());
} }
void HelpWidget::setCurrentViewer(HelpViewer *viewer)
{
m_viewerStack->setCurrentWidget(viewer);
m_backAction->setEnabled(viewer->isBackwardAvailable());
m_forwardAction->setEnabled(viewer->isForwardAvailable());
m_addBookmarkAction->setEnabled(isBookmarkable(viewer->source()));
m_openOnlineDocumentationAction->setEnabled(LocalHelpManager::canOpenOnlineHelp(viewer->source()));
if (m_style == ExternalWindow)
updateWindowTitle();
emit sourceChanged(viewer->source());
}
int HelpWidget::currentIndex() const int HelpWidget::currentIndex() const
{ {
return m_viewerStack->currentIndex(); return m_viewerStack->currentIndex();
@@ -513,7 +501,17 @@ int HelpWidget::currentIndex() const
void HelpWidget::setCurrentIndex(int index) void HelpWidget::setCurrentIndex(int index)
{ {
setCurrentViewer(viewerAt(index)); HelpViewer *viewer = viewerAt(index);
m_viewerStack->setCurrentIndex(index);
m_backAction->setEnabled(viewer->isBackwardAvailable());
m_forwardAction->setEnabled(viewer->isForwardAvailable());
m_addBookmarkAction->setEnabled(isBookmarkable(viewer->source()));
m_openOnlineDocumentationAction->setEnabled(
LocalHelpManager::canOpenOnlineHelp(viewer->source()));
if (m_style == ExternalWindow)
updateWindowTitle();
emit sourceChanged(viewer->source());
emit currentIndexChanged(index);
} }
HelpViewer *HelpWidget::addViewer(const QUrl &url, qreal zoom) HelpViewer *HelpWidget::addViewer(const QUrl &url, qreal zoom)
@@ -570,7 +568,7 @@ void HelpWidget::removeViewerAt(int index)
m_model.endRemoveRows(); m_model.endRemoveRows();
delete viewerWidget; delete viewerWidget;
if (m_viewerStack->currentWidget()) if (m_viewerStack->currentWidget())
setCurrentViewer(qobject_cast<HelpViewer *>(m_viewerStack->currentWidget())); setCurrentIndex(m_viewerStack->currentIndex());
updateCloseButton(); updateCloseButton();
} }

View File

@@ -83,7 +83,6 @@ public:
QAbstractItemModel *model(); QAbstractItemModel *model();
HelpViewer *currentViewer() const; HelpViewer *currentViewer() const;
void setCurrentViewer(HelpViewer *viewer);
int currentIndex() const; int currentIndex() const;
void setCurrentIndex(int index); void setCurrentIndex(int index);
HelpViewer *addViewer(const QUrl &url, qreal zoom = 0); HelpViewer *addViewer(const QUrl &url, qreal zoom = 0);
@@ -111,6 +110,7 @@ signals:
void aboutToClose(); void aboutToClose();
void sourceChanged(const QUrl &url); void sourceChanged(const QUrl &url);
void filterActivated(const QString &name); void filterActivated(const QString &name);
void currentIndexChanged(int index);
private: private:
int indexOf(HelpViewer *viewer) const; int indexOf(HelpViewer *viewer) const;

View File

@@ -60,16 +60,27 @@ OpenPagesManager::OpenPagesManager(HelpWidget *helpWidget)
m_comboBox = new QComboBox; m_comboBox = new QComboBox;
m_comboBox->setModel(m_helpWidget->model()); m_comboBox->setModel(m_helpWidget->model());
m_comboBox->setContextMenuPolicy(Qt::CustomContextMenu); m_comboBox->setContextMenuPolicy(Qt::CustomContextMenu);
connect(m_comboBox, QOverload<int>::of(&QComboBox::activated), connect(m_comboBox,
this, &OpenPagesManager::setCurrentPageByRow); QOverload<int>::of(&QComboBox::activated),
connect(m_comboBox, &QWidget::customContextMenuRequested, this, m_helpWidget,
&OpenPagesManager::openPagesContextMenu); &HelpWidget::setCurrentIndex);
connect(m_helpWidget, &HelpWidget::currentIndexChanged, m_comboBox, &QComboBox::setCurrentIndex);
connect(m_comboBox,
&QWidget::customContextMenuRequested,
this,
&OpenPagesManager::openPagesContextMenu);
m_openPagesSwitcher = new OpenPagesSwitcher(m_helpWidget->model()); m_openPagesSwitcher = new OpenPagesSwitcher(m_helpWidget->model());
connect(m_openPagesSwitcher, &OpenPagesSwitcher::closePage, this, connect(m_openPagesSwitcher, &OpenPagesSwitcher::closePage, this,
&OpenPagesManager::closePage); &OpenPagesManager::closePage);
connect(m_openPagesSwitcher, &OpenPagesSwitcher::setCurrentPage, connect(m_openPagesSwitcher,
this, &OpenPagesManager::setCurrentPage); &OpenPagesSwitcher::setCurrentPage,
m_helpWidget,
[this](const QModelIndex &index) { m_helpWidget->setCurrentIndex(index.row()); });
connect(m_helpWidget,
&HelpWidget::currentIndexChanged,
m_openPagesSwitcher,
&OpenPagesSwitcher::selectCurrentPage);
} }
OpenPagesManager ::~OpenPagesManager() OpenPagesManager ::~OpenPagesManager()
@@ -88,8 +99,14 @@ QWidget *OpenPagesManager::openPagesWidget() const
{ {
if (!m_openPagesWidget) { if (!m_openPagesWidget) {
m_openPagesWidget = new OpenPagesWidget(m_helpWidget->model()); m_openPagesWidget = new OpenPagesWidget(m_helpWidget->model());
connect(m_openPagesWidget, &OpenPagesWidget::setCurrentPage, connect(m_openPagesWidget,
this, &OpenPagesManager::setCurrentPage); &OpenPagesWidget::setCurrentPage,
m_helpWidget,
[this](const QModelIndex &index) { m_helpWidget->setCurrentIndex(index.row()); });
connect(m_helpWidget,
&HelpWidget::currentIndexChanged,
m_openPagesWidget,
&OpenPagesWidget::selectCurrentPage);
connect(m_openPagesWidget, &OpenPagesWidget::closePage, connect(m_openPagesWidget, &OpenPagesWidget::closePage,
this, &OpenPagesManager::closePage); this, &OpenPagesManager::closePage);
connect(m_openPagesWidget, &OpenPagesWidget::closePagesExcept, connect(m_openPagesWidget, &OpenPagesWidget::closePagesExcept,
@@ -153,8 +170,7 @@ void OpenPagesManager::setupInitialPages()
if (m_helpWidget->viewerCount() == 0) if (m_helpWidget->viewerCount() == 0)
m_helpWidget->addViewer(homePage); m_helpWidget->addViewer(homePage);
setCurrentPageByRow(std::max(initialPage, m_helpWidget->viewerCount() - 1)); m_helpWidget->setCurrentIndex(std::max(initialPage, m_helpWidget->viewerCount() - 1));
m_openPagesSwitcher->selectCurrentPage();
} }
HelpViewer *OpenPagesManager::createPage() HelpViewer *OpenPagesManager::createPage()
@@ -168,26 +184,11 @@ HelpViewer *OpenPagesManager::createPage(const QUrl &url)
return nullptr; return nullptr;
HelpViewer *page = m_helpWidget->addViewer(url); HelpViewer *page = m_helpWidget->addViewer(url);
setCurrentPageByRow(m_helpWidget->viewerCount() - 1); m_helpWidget->setCurrentIndex(m_helpWidget->viewerCount() - 1);
return page; return page;
} }
void OpenPagesManager::setCurrentPageByRow(int index)
{
m_helpWidget->setCurrentIndex(index);
m_comboBox->setCurrentIndex(index);
if (m_openPagesWidget)
m_openPagesWidget->selectCurrentPage();
}
void OpenPagesManager::setCurrentPage(const QModelIndex &index)
{
if (index.isValid())
setCurrentPageByRow(index.row());
}
void OpenPagesManager::closeCurrentPage() void OpenPagesManager::closeCurrentPage()
{ {
if (!m_openPagesWidget) if (!m_openPagesWidget)
@@ -230,7 +231,6 @@ void OpenPagesManager::closePagesExcept(const QModelIndex &index)
void OpenPagesManager::gotoNextPage() void OpenPagesManager::gotoNextPage()
{ {
if (!m_openPagesSwitcher->isVisible()) { if (!m_openPagesSwitcher->isVisible()) {
m_openPagesSwitcher->selectCurrentPage();
m_openPagesSwitcher->gotoNextPage(); m_openPagesSwitcher->gotoNextPage();
showTwicherOrSelectPage(); showTwicherOrSelectPage();
} else { } else {
@@ -241,7 +241,6 @@ void OpenPagesManager::gotoNextPage()
void OpenPagesManager::gotoPreviousPage() void OpenPagesManager::gotoPreviousPage()
{ {
if (!m_openPagesSwitcher->isVisible()) { if (!m_openPagesSwitcher->isVisible()) {
m_openPagesSwitcher->selectCurrentPage();
m_openPagesSwitcher->gotoPreviousPage(); m_openPagesSwitcher->gotoPreviousPage();
showTwicherOrSelectPage(); showTwicherOrSelectPage();
} else { } else {
@@ -256,9 +255,6 @@ void OpenPagesManager::removePage(int index)
QTC_ASSERT(index < m_helpWidget->viewerCount(), return ); QTC_ASSERT(index < m_helpWidget->viewerCount(), return );
m_helpWidget->removeViewerAt(index); m_helpWidget->removeViewerAt(index);
if (m_openPagesWidget)
m_openPagesWidget->selectCurrentPage();
} }
void OpenPagesManager::showTwicherOrSelectPage() const void OpenPagesManager::showTwicherOrSelectPage() const

View File

@@ -63,9 +63,6 @@ public:
HelpViewer *createPage(); HelpViewer *createPage();
HelpViewer *createPage(const QUrl &url); HelpViewer *createPage(const QUrl &url);
void setCurrentPageByRow(int index);
void setCurrentPage(const QModelIndex &index);
void closeCurrentPage(); void closeCurrentPage();
void closePage(const QModelIndex &index); void closePage(const QModelIndex &index);
void closePagesExcept(const QModelIndex &index); void closePagesExcept(const QModelIndex &index);

View File

@@ -85,9 +85,9 @@ void OpenPagesSwitcher::selectAndHide()
emit setCurrentPage(m_openPagesWidget->currentIndex()); emit setCurrentPage(m_openPagesWidget->currentIndex());
} }
void OpenPagesSwitcher::selectCurrentPage() void OpenPagesSwitcher::selectCurrentPage(int index)
{ {
m_openPagesWidget->selectCurrentPage(); m_openPagesWidget->selectCurrentPage(index);
} }
void OpenPagesSwitcher::setVisible(bool visible) void OpenPagesSwitcher::setVisible(bool visible)

View File

@@ -49,7 +49,7 @@ public:
void gotoPreviousPage(); void gotoPreviousPage();
void selectAndHide(); void selectAndHide();
void selectCurrentPage(); void selectCurrentPage(int index);
void setVisible(bool visible) override; void setVisible(bool visible) override;
void focusInEvent(QFocusEvent *event) override; void focusInEvent(QFocusEvent *event) override;

View File

@@ -25,8 +25,6 @@
#include "openpageswidget.h" #include "openpageswidget.h"
#include "centralwidget.h"
#include <coreplugin/coreconstants.h> #include <coreplugin/coreconstants.h>
#include <utils/stringutils.h> #include <utils/stringutils.h>
@@ -61,12 +59,12 @@ OpenPagesWidget::OpenPagesWidget(QAbstractItemModel *sourceModel, QWidget *paren
OpenPagesWidget::~OpenPagesWidget() = default; OpenPagesWidget::~OpenPagesWidget() = default;
void OpenPagesWidget::selectCurrentPage() void OpenPagesWidget::selectCurrentPage(int index)
{ {
QItemSelectionModel * const selModel = selectionModel(); QItemSelectionModel * const selModel = selectionModel();
selModel->clearSelection(); selModel->clearSelection();
selModel->select(model()->index(CentralWidget::instance()->currentIndex(), 0), selModel->select(model()->index(index, 0),
QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows); QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);
scrollTo(currentIndex()); scrollTo(currentIndex());
} }

View File

@@ -38,7 +38,7 @@ public:
explicit OpenPagesWidget(QAbstractItemModel *model, QWidget *parent = nullptr); explicit OpenPagesWidget(QAbstractItemModel *model, QWidget *parent = nullptr);
~OpenPagesWidget() override; ~OpenPagesWidget() override;
void selectCurrentPage(); void selectCurrentPage(int index);
void allowContextMenu(bool ok); void allowContextMenu(bool ok);
signals: signals: