From 8bd51673bca36e2f90a2e9755eade389862c398e Mon Sep 17 00:00:00 2001 From: donghualin Date: Thu, 9 Jun 2022 13:16:49 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E6=A0=8F=E6=97=A0=E6=B3=95=E5=93=8D=E5=BA=94=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E5=8F=98=E5=8C=96=E5=BC=95=E8=B5=B7=E5=9B=BE?= =?UTF-8?q?=E6=A0=87=E5=8F=98=E5=8C=96=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 当快捷设置区域的图标发生变化的时候,外部插件需要响应对应的图标变化接口,修改插件区域图标 Log: Influence: 快捷设置区域-查看图标变化 Task: https://pms.uniontech.com/task-view-110311.html Change-Id: I19be98ec53145d45db3ee7023c4a0d4012e68a93 --- frame/controller/quicksettingcontroller.cpp | 5 +++++ frame/controller/quicksettingcontroller.h | 2 ++ frame/item/quicksettingitem.cpp | 17 +++++++---------- frame/item/quicksettingitem.h | 1 - frame/util/abstractpluginscontroller.h | 2 +- frame/window/quickpluginwindow.cpp | 14 ++++++++++++++ frame/window/quickpluginwindow.h | 2 ++ frame/window/quicksettingcontainer.cpp | 3 +++ interfaces/pluginproxyinterface.h | 2 +- 9 files changed, 35 insertions(+), 13 deletions(-) diff --git a/frame/controller/quicksettingcontroller.cpp b/frame/controller/quicksettingcontroller.cpp index 383ed9ca4..a5bdb523f 100644 --- a/frame/controller/quicksettingcontroller.cpp +++ b/frame/controller/quicksettingcontroller.cpp @@ -103,6 +103,11 @@ void QuickSettingController::itemRemoved(PluginsItemInterface * const itemInter, } } +void QuickSettingController::updateDockInfo(PluginsItemInterface * const itemInter, const DockPart &part) +{ + Q_EMIT pluginUpdated(itemInter, part); +} + QuickSettingController *QuickSettingController::instance() { static QuickSettingController instance; diff --git a/frame/controller/quicksettingcontroller.h b/frame/controller/quicksettingcontroller.h index 0525c6be9..859aacbd8 100644 --- a/frame/controller/quicksettingcontroller.h +++ b/frame/controller/quicksettingcontroller.h @@ -36,6 +36,7 @@ public: Q_SIGNALS: void pluginInserted(QuickSettingItem *); void pluginRemoved(QuickSettingItem *); + void pluginUpdated(PluginsItemInterface *, const DockPart &); protected: void startLoader(); @@ -49,6 +50,7 @@ protected: void requestWindowAutoHide(PluginsItemInterface * const, const QString &, const bool) override {} void requestRefreshWindowVisible(PluginsItemInterface * const, const QString &) override {} void requestSetAppletVisible(PluginsItemInterface * const, const QString &, const bool) override {} + void updateDockInfo(PluginsItemInterface * const itemInter, const DockPart &part) override; private: void sortPlugins(); diff --git a/frame/item/quicksettingitem.cpp b/frame/item/quicksettingitem.cpp index b0dd92d99..16a08f0ee 100644 --- a/frame/item/quicksettingitem.cpp +++ b/frame/item/quicksettingitem.cpp @@ -36,7 +36,10 @@ #define BGWIDTH 128 #define BGSIZE 36 +#define MARGINLEFTSPACE 10 #define OPENICONSIZE 12 +#define MARGINRIGHTSPACE 12 + static QSize expandSize = QSize(6, 10); QuickSettingItem::QuickSettingItem(PluginsItemInterface *const pluginInter, const QString &itemKey, QWidget *parent) @@ -111,9 +114,8 @@ void QuickSettingItem::paintEvent(QPaintEvent *e) pa.fillRect(pm.rect(), painter.pen().brush()); if (m_pluginInter->isPrimary()) { // 如果是主图标,则显示阴影背景 - int marginXSpace = xMarginSpace(); int marginYSpace = yMarginSpace(); - QRect iconBg(marginXSpace, marginYSpace, BGSIZE, BGSIZE); + QRect iconBg(MARGINLEFTSPACE, marginYSpace, BGSIZE, BGSIZE); QPixmap bgPixmap = ImageUtil::getShadowPixmap(pm, shadowColor(), QSize(BGSIZE, BGSIZE)); painter.drawPixmap(iconBg, bgPixmap); // 绘制文字 @@ -140,8 +142,8 @@ void QuickSettingItem::paintEvent(QPaintEvent *e) pen.setColor(QColor(0, 0, 0)); pen.setWidth(2); painter.setPen(pen); - int iconLeft = rect().width() - marginXSpace - expandSize.width(); - int iconRight = rect().width() - marginXSpace; + int iconLeft = rect().width() - MARGINRIGHTSPACE - expandSize.width(); + int iconRight = rect().width() - MARGINRIGHTSPACE; painter.drawLine(QPoint(iconLeft, (iconBg.y() + (iconBg.height() - expandSize.height()) / 2)), QPoint(iconRight, (iconBg.y() + iconBg.height() / 2))); painter.drawLine(QPoint(iconRight, (iconBg.y() + iconBg.height() / 2)), @@ -203,7 +205,7 @@ void QuickSettingItem::mouseReleaseEvent(QMouseEvent *event) // 如果是鼠标的按下事件 if (m_pluginInter->isPrimary()) { QMouseEvent *mouseEvent = static_cast(event); - QRect rctExpand(rect().width() - xMarginSpace() - expandSize.width(), + QRect rctExpand(rect().width() - MARGINRIGHTSPACE - expandSize.width(), (rect().height() - expandSize.height()) / 2, expandSize.width(), expandSize.height()); if (rctExpand.contains(mapFromGlobal(mouseEvent->globalPos()))) @@ -218,11 +220,6 @@ void QuickSettingItem::mouseReleaseEvent(QMouseEvent *event) } } -int QuickSettingItem::xMarginSpace() -{ - return (rect().width() - BGWIDTH) / 2; -} - int QuickSettingItem::yMarginSpace() { return (rect().height() - BGSIZE) / 2; diff --git a/frame/item/quicksettingitem.h b/frame/item/quicksettingitem.h index 1d1eb47c4..07321b9bf 100644 --- a/frame/item/quicksettingitem.h +++ b/frame/item/quicksettingitem.h @@ -53,7 +53,6 @@ protected: void mouseReleaseEvent(QMouseEvent *event) override; private: - int xMarginSpace(); int yMarginSpace(); private: diff --git a/frame/util/abstractpluginscontroller.h b/frame/util/abstractpluginscontroller.h index b914fd10b..d0cd93c84 100644 --- a/frame/util/abstractpluginscontroller.h +++ b/frame/util/abstractpluginscontroller.h @@ -52,7 +52,7 @@ public: void itemUpdate(PluginsItemInterface * const, const QString &) override {} void itemRemoved(PluginsItemInterface * const, const QString &) override {} - void updateDockInfo(const DockPart &) override {} + void updateDockInfo(PluginsItemInterface *const, const DockPart &) override {} signals: void pluginLoaderFinished(); diff --git a/frame/window/quickpluginwindow.cpp b/frame/window/quickpluginwindow.cpp index e7b2acf18..4bf10fad9 100644 --- a/frame/window/quickpluginwindow.cpp +++ b/frame/window/quickpluginwindow.cpp @@ -260,6 +260,17 @@ void QuickPluginWindow::onFixedClick() popWindow->show(popupPoint()); } +void QuickPluginWindow::onUpdatePlugin(PluginsItemInterface *itemInter, const DockPart &dockPart) +{ + //update plugin status + if (dockPart != DockPart::QuickShow) + return; + + QuickDockItem *dockItem = getDockItemByPlugin(itemInter); + if (dockItem) + dockItem->update(); +} + void QuickPluginWindow::startDrag(PluginsItemInterface *moveItem) { AppDrag *drag = new AppDrag(this, new QuickDragWidget); @@ -448,6 +459,8 @@ void QuickPluginWindow::initConnection() connect(QuickSettingController::instance(), &QuickSettingController::pluginRemoved, this, [ this ] (QuickSettingItem *settingItem){ removePlugin(settingItem->pluginItem()); }); + + connect(QuickSettingController::instance(), &QuickSettingController::pluginUpdated, this, &QuickPluginWindow::onUpdatePlugin); } /** @@ -478,6 +491,7 @@ void QuickDockItem::paintEvent(QPaintEvent *event) QPixmap pixmap = m_pluginItem->icon(DockPart::QuickPanel).pixmap(ICONHEIGHT, ICONHEIGHT); QRect pixmapRect = QRect((rect().width() - ICONHEIGHT) / 2, (rect().height() - ICONHEIGHT) / 2, ICONHEIGHT, ICONHEIGHT); + QPainter painter(this); painter.drawPixmap(pixmapRect, pixmap); } diff --git a/frame/window/quickpluginwindow.h b/frame/window/quickpluginwindow.h index 34a015267..db7bbf70a 100644 --- a/frame/window/quickpluginwindow.h +++ b/frame/window/quickpluginwindow.h @@ -34,6 +34,7 @@ class QStandardItem; class QMouseEvent; class QBoxLayout; class QuickDockItem; +enum class DockPart; namespace Dtk { namespace Gui { class DRegionMonitor; } namespace Widget { class DListView; class DStandardItem; } } @@ -65,6 +66,7 @@ private Q_SLOTS: void onPluginDropItem(QDropEvent *event); void onPluginDragMove(QDragMoveEvent *event); void onFixedClick(); + void onUpdatePlugin(PluginsItemInterface *itemInter, const DockPart &dockPart); private: void initUi(); diff --git a/frame/window/quicksettingcontainer.cpp b/frame/window/quicksettingcontainer.cpp index c2c9153dd..fcacc4ff6 100644 --- a/frame/window/quicksettingcontainer.cpp +++ b/frame/window/quicksettingcontainer.cpp @@ -283,6 +283,9 @@ void QuickSettingContainer::initUi() m_pluginLayout->setContentsMargins(0, 0, 0, 0); m_pluginLayout->setSpacing(ITEMSPACE); + m_pluginLayout->setAlignment(Qt::AlignLeft); + for (int i = 0; i < COLUMNCOUNT; i++) + m_pluginLayout->setColumnMinimumWidth(i, ITEMWIDTH); m_pluginWidget->setLayout(m_pluginLayout); m_mainlayout->addWidget(m_pluginWidget); diff --git a/interfaces/pluginproxyinterface.h b/interfaces/pluginproxyinterface.h index 037928d2d..6854a78a2 100644 --- a/interfaces/pluginproxyinterface.h +++ b/interfaces/pluginproxyinterface.h @@ -101,7 +101,7 @@ public: /// update display or information /// /// - virtual void updateDockInfo(const DockPart &) = 0; + virtual void updateDockInfo(PluginsItemInterface *const itemInter, const DockPart &) = 0; }; #endif // PLUGINPROXYINTERFACE_H