From 8504252142b386ef2859b87dbf369132f68d0517 Mon Sep 17 00:00:00 2001 From: Jacob Young Date: Mon, 5 Apr 2021 06:25:22 +0100 Subject: [PATCH] Handle tab icon updates Closes PR #135 --- src/private/Frame.cpp | 7 +++++-- src/private/Frame_p.h | 1 + src/private/TabWidget_p.h | 3 +++ src/private/quick/FrameQuick.cpp | 7 +++++++ src/private/quick/FrameQuick_p.h | 2 ++ src/private/quick/TabWidgetQuick.cpp | 6 ++++++ src/private/quick/TabWidgetQuick_p.h | 1 + src/private/widgets/FrameWidget.cpp | 4 ++++ src/private/widgets/FrameWidget_p.h | 1 + src/private/widgets/TabWidgetWidget.cpp | 5 +++++ src/private/widgets/TabWidgetWidget_p.h | 1 + 11 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/private/Frame.cpp b/src/private/Frame.cpp index a54dcb20..458595e1 100644 --- a/src/private/Frame.cpp +++ b/src/private/Frame.cpp @@ -107,8 +107,11 @@ void Frame::onDockWidgetTitleChanged() updateTitleAndIcon(); if (!m_inCtor) { // don't call pure virtual in ctor - if (auto dw = qobject_cast(sender())) - renameTab(indexOfDockWidget(dw), dw->title()); + if (auto dw = qobject_cast(sender())) { + int index = indexOfDockWidget(dw); + renameTab(index, dw->title()); + changeTabIcon(index, dw->icon(DockWidgetBase::IconPlace::TabBar)); + } } } diff --git a/src/private/Frame_p.h b/src/private/Frame_p.h index 6e328d62..72e37fcb 100644 --- a/src/private/Frame_p.h +++ b/src/private/Frame_p.h @@ -275,6 +275,7 @@ protected Q_SLOTS: protected: virtual void renameTab(int index, const QString &) = 0; + virtual void changeTabIcon(int index, const QIcon &) = 0; /** * @brief Returns the minimum size of the dock widgets. diff --git a/src/private/TabWidget_p.h b/src/private/TabWidget_p.h index 28886e11..4fd5591f 100644 --- a/src/private/TabWidget_p.h +++ b/src/private/TabWidget_p.h @@ -131,6 +131,9 @@ public: ///@brief rename's the tab's text virtual void renameTab(int index, const QString &) = 0; + ///@brief change the tab's icon + virtual void changeTabIcon(int index, const QIcon &) = 0; + /** * @brief Returns the current index */ diff --git a/src/private/quick/FrameQuick.cpp b/src/private/quick/FrameQuick.cpp index a9023529..b555805a 100644 --- a/src/private/quick/FrameQuick.cpp +++ b/src/private/quick/FrameQuick.cpp @@ -148,6 +148,13 @@ void FrameQuick::renameTab(int, const QString &) // Not needed for QtQuick. Our model reacts to titleChanged() } + +void FrameQuick::changeTabIcon(int index, const QIcon &) +{ + Q_UNUSED(index); + qDebug() << Q_FUNC_INFO << "Not implemented"; +} + void FrameQuick::setStackLayout(QQuickItem *stackLayout) { if (m_stackLayout || !stackLayout) { diff --git a/src/private/quick/FrameQuick_p.h b/src/private/quick/FrameQuick_p.h index 6677ff4c..fbfedf02 100644 --- a/src/private/quick/FrameQuick_p.h +++ b/src/private/quick/FrameQuick_p.h @@ -57,6 +57,8 @@ protected: DockWidgetBase *dockWidgetAt_impl(int index) const override; DockWidgetBase *currentDockWidget_impl() const override; void renameTab(int index, const QString &) override; + void changeTabIcon(int index, const QIcon &) override; + Q_INVOKABLE void setStackLayout(QQuickItem *); int nonContentsHeight() const override; diff --git a/src/private/quick/TabWidgetQuick.cpp b/src/private/quick/TabWidgetQuick.cpp index 7a66a001..cea172eb 100644 --- a/src/private/quick/TabWidgetQuick.cpp +++ b/src/private/quick/TabWidgetQuick.cpp @@ -87,6 +87,12 @@ void TabWidgetQuick::renameTab(int index, const QString &) qWarning() << Q_FUNC_INFO << "Not implemented"; } +void TabWidgetQuick::changeTabIcon(int index, const QIcon &) +{ + Q_UNUSED(index); + qWarning() << Q_FUNC_INFO << "Not implemented"; +} + DockWidgetBase *TabWidgetQuick::dockwidgetAt(int index) const { return m_dockWidgetModel->dockWidgetAt(index); diff --git a/src/private/quick/TabWidgetQuick_p.h b/src/private/quick/TabWidgetQuick_p.h index 1b45b5b5..29fdd69c 100644 --- a/src/private/quick/TabWidgetQuick_p.h +++ b/src/private/quick/TabWidgetQuick_p.h @@ -66,6 +66,7 @@ protected: bool isPositionDraggable(QPoint p) const override; void setTabBarAutoHide(bool) override; void renameTab(int index, const QString &) override; + void changeTabIcon(int index, const QIcon &) override; private: Q_DISABLE_COPY(TabWidgetQuick) diff --git a/src/private/widgets/FrameWidget.cpp b/src/private/widgets/FrameWidget.cpp index 96df8f8c..c600781c 100644 --- a/src/private/widgets/FrameWidget.cpp +++ b/src/private/widgets/FrameWidget.cpp @@ -169,6 +169,10 @@ void FrameWidget::renameTab(int index, const QString &text) m_tabWidget->renameTab(index, text); } +void FrameWidget::changeTabIcon(int index, const QIcon &icon) +{ + m_tabWidget->changeTabIcon(index, icon); +} int KDDockWidgets::FrameWidget::nonContentsHeight() const { diff --git a/src/private/widgets/FrameWidget_p.h b/src/private/widgets/FrameWidget_p.h index fe0f28c5..8a97fd8c 100644 --- a/src/private/widgets/FrameWidget_p.h +++ b/src/private/widgets/FrameWidget_p.h @@ -49,6 +49,7 @@ protected: DockWidgetBase *dockWidgetAt_impl(int index) const override; QRect dragRect() const override; void renameTab(int index, const QString &) override; + void changeTabIcon(int index, const QIcon &) override; int nonContentsHeight() const override; private: friend class ::TestDocks; diff --git a/src/private/widgets/TabWidgetWidget.cpp b/src/private/widgets/TabWidgetWidget.cpp index 399a5bab..a67bcd3b 100644 --- a/src/private/widgets/TabWidgetWidget.cpp +++ b/src/private/widgets/TabWidgetWidget.cpp @@ -135,6 +135,11 @@ void TabWidgetWidget::renameTab(int index, const QString &text) setTabText(index, text); } +void TabWidgetWidget::changeTabIcon(int index, const QIcon &icon) +{ + setTabIcon(index, icon); +} + DockWidgetBase *TabWidgetWidget::dockwidgetAt(int index) const { return qobject_cast(widget(index)); diff --git a/src/private/widgets/TabWidgetWidget_p.h b/src/private/widgets/TabWidgetWidget_p.h index d9e7e34d..7642f627 100644 --- a/src/private/widgets/TabWidgetWidget_p.h +++ b/src/private/widgets/TabWidgetWidget_p.h @@ -55,6 +55,7 @@ protected: bool insertDockWidget(int index, DockWidgetBase *, const QIcon&, const QString &title) override; void setTabBarAutoHide(bool) override; void renameTab(int index, const QString &) override; + void changeTabIcon(int index, const QIcon &) override; DockWidgetBase *dockwidgetAt(int index) const override; int currentIndex() const override;