diff --git a/plugins/cmake/cmakehelpdocumentation.cpp b/plugins/cmake/cmakehelpdocumentation.cpp index 403d519e1d..47941c5faf 100644 --- a/plugins/cmake/cmakehelpdocumentation.cpp +++ b/plugins/cmake/cmakehelpdocumentation.cpp @@ -1,50 +1,59 @@ /* KDevelop CMake Support * * Copyright 2009 Aleix Pol * * This program 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 2 * of the License, or (at your option) any later version. * * This program 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 this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ #include "cmakehelpdocumentation.h" #include #include #include "cmakedoc.h" #include "icmakedocumentation.h" #include "cmakedocumentation.h" #include "cmakecommandscontents.h" +#include #include #include #include QString CMakeHomeDocumentation::name() const { return i18n("CMake Content Page"); } KDevelop::IDocumentationProvider* CMakeHomeDocumentation::provider() const { return CMakeDoc::s_provider; } QWidget* CMakeHomeDocumentation::documentationWidget(KDevelop::DocumentationFindWidget*, QWidget* parent) { auto* contents=new QTreeView(parent); + contents->viewport()->installEventFilter(this); contents->header()->setVisible(false); contents->setModel(CMakeDoc::s_provider->model()); QObject::connect(contents, &QTreeView::clicked, CMakeDoc::s_provider->model(), &CMakeCommandsContents::showItemAt); return contents; } + +bool CMakeHomeDocumentation::eventFilter(QObject* watched, QEvent* event) +{ + if (event->type() == QEvent::MouseButtonPress) + event->ignore(); // Propagate to DocumentationView + return QObject::eventFilter(watched, event); +} diff --git a/plugins/cmake/cmakehelpdocumentation.h b/plugins/cmake/cmakehelpdocumentation.h index a0a7302791..543ba0ff74 100644 --- a/plugins/cmake/cmakehelpdocumentation.h +++ b/plugins/cmake/cmakehelpdocumentation.h @@ -1,37 +1,40 @@ /* KDevelop CMake Support * * Copyright 2009 Aleix Pol * * This program 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 2 * of the License, or (at your option) any later version. * * This program 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 this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ #ifndef CMAKEHELPDOCUMENTATION_H #define CMAKEHELPDOCUMENTATION_H #include class CMakeHomeDocumentation : public KDevelop::IDocumentation { Q_OBJECT public: KDevelop::IDocumentationProvider* provider() const override; QString name() const override; QString description() const override { return name(); } QWidget* documentationWidget ( KDevelop::DocumentationFindWidget* findWidget, QWidget* parent = nullptr ) override; + + private: + bool eventFilter(QObject* watched, QEvent* event) override; }; #endif diff --git a/plugins/manpage/manpagedocumentationwidget.cpp b/plugins/manpage/manpagedocumentationwidget.cpp index 6bad50904c..81b0eb1f1b 100644 --- a/plugins/manpage/manpagedocumentationwidget.cpp +++ b/plugins/manpage/manpagedocumentationwidget.cpp @@ -1,98 +1,107 @@ /* This file is part of KDevelop Copyright 2010 Benjamin Port Copyright 2010 Yannick Motta This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "manpagedocumentationwidget.h" #include "manpagedocumentation.h" #include "manpageplugin.h" #include #include #include #include +#include #include #include ManPageDocumentationWidget::ManPageDocumentationWidget(QWidget *parent) : QStackedWidget(parent) , m_loadingWidget(nullptr) { ManPageModel* model = ManPageDocumentation::s_provider->model(); m_treeView = new QTreeView(this); + m_treeView->viewport()->installEventFilter(this); m_treeView->header()->setVisible(false); connect(m_treeView, &QTreeView::clicked, model, &ManPageModel::showItem); addWidget(m_treeView); if(!model->isLoaded()){ m_loadingWidget = new QWidget(this); m_progressBar = new QProgressBar(m_loadingWidget); m_statusLabel = new QLabel(i18n("Loading man pages...")); if(model->sectionCount() == 0){ connect(model, &ManPageModel::sectionListUpdated, this, &ManPageDocumentationWidget::sectionListUpdated ); } else { sectionListUpdated(); } connect(model, &ManPageModel::sectionParsed, this, &ManPageDocumentationWidget::sectionParsed ); connect(model, &ManPageModel::manPagesLoaded, this, &ManPageDocumentationWidget::manIndexLoaded); connect(model, &ManPageModel::error, this, &ManPageDocumentationWidget::handleError); m_statusLabel->setAlignment(Qt::AlignHCenter); auto* layout = new QVBoxLayout(); layout->addWidget(m_statusLabel); layout->addWidget(m_progressBar); layout->addStretch(); m_loadingWidget->setLayout(layout); addWidget(m_loadingWidget); setCurrentWidget(m_loadingWidget); if(model->hasError()) handleError(model->errorString()); } else { manIndexLoaded(); } } void ManPageDocumentationWidget::manIndexLoaded() { ManPageModel* model = ManPageDocumentation::s_provider->model(); m_treeView->setModel(model); setCurrentWidget(m_treeView); if(m_loadingWidget){ removeWidget(m_loadingWidget); delete m_loadingWidget; m_loadingWidget = nullptr; } } void ManPageDocumentationWidget::sectionListUpdated() { ManPageModel* model = ManPageDocumentation::s_provider->model(); m_progressBar->setRange(0, model->sectionCount()); } void ManPageDocumentationWidget::sectionParsed() { ManPageModel* model = ManPageDocumentation::s_provider->model(); m_progressBar->setValue(model->nbSectionLoaded()); } void ManPageDocumentationWidget::handleError(const QString& errorString) { delete m_progressBar; m_progressBar = nullptr; m_statusLabel->setWordWrap(true); m_statusLabel->setText(i18n("Error while loading man pages:\n%1", errorString)); } + +bool ManPageDocumentationWidget::eventFilter(QObject* watched, QEvent* event) +{ + if (event->type() == QEvent::MouseButtonPress) + event->ignore(); // Propagate to DocumentationView + return QStackedWidget::eventFilter(watched, event); +} diff --git a/plugins/manpage/manpagedocumentationwidget.h b/plugins/manpage/manpagedocumentationwidget.h index 1839575ecd..0ffdd05209 100644 --- a/plugins/manpage/manpagedocumentationwidget.h +++ b/plugins/manpage/manpagedocumentationwidget.h @@ -1,48 +1,50 @@ /* This file is part of KDevelop Copyright 2010 Benjamin Port Copyright 2010 Yannick Motta This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef MANPAGEDOCUMENTATIONWIDGET_H #define MANPAGEDOCUMENTATIONWIDGET_H #include class QString; class QLabel; class QTreeView; class QProgressBar; class ManPageDocumentationWidget : public QStackedWidget { Q_OBJECT public: explicit ManPageDocumentationWidget(QWidget *parent = nullptr); public Q_SLOTS: void manIndexLoaded(); void sectionListUpdated(); void sectionParsed(); void handleError(const QString& errorString); private: + bool eventFilter(QObject* watched, QEvent* event) override; + QWidget* m_loadingWidget; QTreeView* m_treeView; QLabel* m_statusLabel; QProgressBar* m_progressBar; }; #endif // MANPAGEDOCUMENTATIONWIDGET_H