forked from qt-creator/qt-creator
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:
@@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user