configurable-zoom-shortcuts-attempt.patch

File Metadata

Author
igorkushnir
Created
Oct 12 2016, 6:34 PM

configurable-zoom-shortcuts-attempt.patch

From 7aa4041d62d07e54b5c12164372c2a31daa7f060 Mon Sep 17 00:00:00 2001
From: Igor Kushnir <igorkuo@gmail.com>
Date: Thu, 6 Oct 2016 21:30:28 +0300
Subject: [PATCH] Allow assigning shortcuts to documentation zoom actions
TODO: move documentation zoom actions into a shortcut subgroup.
This will make it clear what these actions stand for.
This will eliminate possible collisions with future zoom actions in other components.
---
documentation/documentationview.cpp | 12 +++++++++++-
documentation/documentationview.h | 4 ++++
documentation/standarddocumentationview.cpp | 15 +++++++++++----
documentation/standarddocumentationview.h | 3 +++
shell/documentationcontroller.cpp | 16 ++++++++++++----
5 files changed, 41 insertions(+), 9 deletions(-)
diff --git a/documentation/documentationview.cpp b/documentation/documentationview.cpp
index a927ab6..49c3365 100644
--- a/documentation/documentationview.cpp
+++ b/documentation/documentationview.cpp
@@ -38,6 +38,7 @@
#include <interfaces/idocumentationcontroller.h>
#include <interfaces/iplugincontroller.h>
#include "documentationfindwidget.h"
+#include "standarddocumentationview.h"
#include "debug.h"
Q_LOGGING_CATEGORY(DOCUMENTATION, "kdevplatform.documentation")
@@ -46,7 +47,7 @@ Q_LOGGING_CATEGORY(DOCUMENTATION, "kdevplatform.documentation")
using namespace KDevelop;
DocumentationView::DocumentationView(QWidget* parent, ProvidersModel* model)
- : QWidget(parent), mProvidersModel(model)
+ : QWidget(parent), mProvidersModel(model), mZoomActions{nullptr}
{
setWindowIcon(QIcon::fromTheme(QStringLiteral("documentation"), windowIcon()));
setWindowTitle(i18n("Documentation"));
@@ -102,6 +103,11 @@ DocumentationView::DocumentationView(QWidget* parent, ProvidersModel* model)
QMetaObject::invokeMethod(this, "initialize", Qt::QueuedConnection);
}
+void DocumentationView::setZoomActions(KDevelop::ZoomActions* zoomActions)
+{
+ mZoomActions = zoomActions;
+}
+
void DocumentationView::initialize()
{
mProviders->setModel(mProvidersModel);
@@ -228,6 +234,10 @@ void DocumentationView::updateView()
mFindDoc->hide();
}
+ if (auto* const standardView = qobject_cast<StandardDocumentationView*>(w)) {
+ standardView->setZoomActions(mZoomActions);
+ }
+
QLayoutItem* findWidget = layout()->takeAt(1);
layout()->addWidget(w);
layout()->addItem(findWidget);
diff --git a/documentation/documentationview.h b/documentation/documentationview.h
index c7a0822..3635c3f 100644
--- a/documentation/documentationview.h
+++ b/documentation/documentationview.h
@@ -29,6 +29,7 @@
namespace KDevelop {
class IPlugin;
class DocumentationFindWidget;
+ class ZoomActions;
}
class QModelIndex;
@@ -42,6 +43,8 @@ class KDEVPLATFORMDOCUMENTATION_EXPORT DocumentationView : public QWidget
public:
DocumentationView(QWidget* parent, ProvidersModel* m);
+ void setZoomActions(KDevelop::ZoomActions* zoomActions);
+
void showDocumentation(const KDevelop::IDocumentation::Ptr& doc);
public slots:
@@ -70,6 +73,7 @@ private:
QComboBox* mProviders;
ProvidersModel* mProvidersModel;
KDevelop::DocumentationFindWidget* mFindDoc;
+ KDevelop::ZoomActions* mZoomActions;
};
class KDEVPLATFORMDOCUMENTATION_EXPORT ProvidersModel : public QAbstractListModel
diff --git a/documentation/standarddocumentationview.cpp b/documentation/standarddocumentationview.cpp
index a284f17..349361c 100644
--- a/documentation/standarddocumentationview.cpp
+++ b/documentation/standarddocumentationview.cpp
@@ -30,7 +30,6 @@
#include <QFontDatabase>
#include <QIcon>
#include <QMenu>
-#include <QScopedPointer>
using namespace KDevelop;
@@ -38,7 +37,7 @@ class KDevelop::StandardDocumentationViewPrivate
{
public:
ZoomController* m_zoomController = nullptr;
- QScopedPointer<ZoomActions> m_zoomActions;
+ ZoomActions* m_zoomActions = nullptr;
IDocumentation::Ptr m_doc;
};
@@ -91,9 +90,17 @@ void StandardDocumentationView::initZoom(const QString& configSubGroup)
connect(d->m_zoomController, &ZoomController::factorChanged,
this, &StandardDocumentationView::updateZoomFactor);
updateZoomFactor(d->m_zoomController->factor());
+}
- d->m_zoomActions.reset(new ZoomActions());
- d->m_zoomActions->setZoomController(d->m_zoomController);
+void StandardDocumentationView::setZoomActions(ZoomActions* zoomActions)
+{
+ if (d->m_zoomActions == zoomActions)
+ return;
+ if (d->m_zoomActions)
+ d->m_zoomActions->setZoomController(nullptr);
+ d->m_zoomActions = zoomActions;
+ if (d->m_zoomActions)
+ d->m_zoomActions->setZoomController(d->m_zoomController);
}
void StandardDocumentationView::setDocumentation(const IDocumentation::Ptr& doc)
diff --git a/documentation/standarddocumentationview.h b/documentation/standarddocumentationview.h
index 768f97a..77e5e38 100644
--- a/documentation/standarddocumentationview.h
+++ b/documentation/standarddocumentationview.h
@@ -33,6 +33,7 @@ class QAction;
namespace KDevelop {
+class ZoomActions;
class StandardDocumentationViewPrivate;
/**
@@ -55,6 +56,8 @@ public:
*/
void initZoom(const QString& configSubGroup);
+ void setZoomActions(ZoomActions* zoomActions);
+
void setDocumentation(const IDocumentation::Ptr& doc);
/**
diff --git a/shell/documentationcontroller.cpp b/shell/documentationcontroller.cpp
index aff176d..1d71234 100644
--- a/shell/documentationcontroller.cpp
+++ b/shell/documentationcontroller.cpp
@@ -27,6 +27,7 @@
#include <interfaces/iplugincontroller.h>
#include <interfaces/iuicontroller.h>
#include <shell/core.h>
+#include <util/zoomactions.h>
#include <QAction>
@@ -89,15 +90,21 @@ Declaration* usefulDeclaration(Declaration* decl)
class DocumentationViewFactory: public KDevelop::IToolViewFactory
{
public:
- DocumentationViewFactory()
- {}
+ DocumentationViewFactory(KActionCollection& actionCollection)
+ {
+ actionCollection.addAction(QStringLiteral("documentation_view_zoom_in"), m_zoomActions.zoomInAction());
+ actionCollection.addAction(QStringLiteral("documentation_view_zoom_out"), m_zoomActions.zoomOutAction());
+ actionCollection.addAction(QStringLiteral("documentation_view_reset_zoom"), m_zoomActions.zoomResetAction());
+ }
QWidget* create(QWidget *parent = nullptr) override
{
if (!m_providersModel) {
m_providersModel.reset(new ProvidersModel);
}
- return new DocumentationView(parent, m_providersModel.data());
+ auto* result = new DocumentationView(parent, m_providersModel.data());
+ result->setZoomActions(&m_zoomActions);
+ return result;
}
Qt::DockWidgetArea defaultPosition() override { return Qt::RightDockWidgetArea; }
@@ -105,10 +112,11 @@ public:
private:
QScopedPointer<ProvidersModel> m_providersModel;
+ ZoomActions m_zoomActions;
};
DocumentationController::DocumentationController(Core* core)
- : m_factory(new DocumentationViewFactory)
+ : m_factory(new DocumentationViewFactory(*core->uiController()->activeMainWindow()->actionCollection()))
{
m_showDocumentation = core->uiController()->activeMainWindow()->actionCollection()->addAction(QStringLiteral("showDocumentation"));
m_showDocumentation->setText(i18n("Show Documentation"));
--
2.10.0