From 282e933225c3784aeae0e263f16484743cfff606 Mon Sep 17 00:00:00 2001 From: donghualin Date: Tue, 16 Aug 2022 17:20:51 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=88=A0=E9=99=A4=E6=8F=92=E4=BB=B6?= =?UTF-8?q?=E5=9F=BA=E7=B1=BB=E7=9A=84isPrimary=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 删除isPrimary()接口,插件继承的时候无需实现该接口,任务栏读取是否主插件的时候从json中读取配置即可 Log: 优化任务栏插件的接口 Influence: 安装网络插件,查看网络插件是否在快捷设置面板中显示两列图标 Task: https://pms.uniontech.com/task-view-121387.html Change-Id: I1d47e6c7b4162f4fdc36bf4879bbd85c0caaff69 --- frame/controller/quicksettingcontroller.cpp | 8 +++++-- frame/item/quicksettingitem.cpp | 15 +++++++++++--- frame/item/quicksettingitem.h | 4 +++- frame/window/quickpluginwindow.cpp | 23 +++++++++++++++++---- frame/window/quickpluginwindow.h | 4 +++- frame/window/quicksettingcontainer.cpp | 6 +++--- interfaces/pluginsiteminterface.h | 6 ------ 7 files changed, 46 insertions(+), 20 deletions(-) diff --git a/frame/controller/quicksettingcontroller.cpp b/frame/controller/quicksettingcontroller.cpp index 7d8d45bd3..e507291b8 100644 --- a/frame/controller/quicksettingcontroller.cpp +++ b/frame/controller/quicksettingcontroller.cpp @@ -40,7 +40,7 @@ void QuickSettingController::sortPlugins() QList primarySettingItems; QList quickItems; for (QuickSettingItem *item : m_quickSettingItems) { - if (item->pluginItem()->isPrimary()) + if (item->isPrimary()) primarySettingItems << item; else quickItems << item; @@ -70,7 +70,11 @@ void QuickSettingController::itemAdded(PluginsItemInterface * const itemInter, c if (findItemIterator != m_quickSettingItems.end()) return; - QuickSettingItem *quickItem = new QuickSettingItem(itemInter, itemKey); + QPluginLoader *pluginLoader = ProxyPluginController::instance(PluginType::QuickPlugin)->pluginLoader(itemInter); + QJsonObject metaData; + if (pluginLoader) + metaData = pluginLoader->metaData().value("MetaData").toObject(); + QuickSettingItem *quickItem = new QuickSettingItem(itemInter, itemKey, metaData); m_quickSettingItems << quickItem; sortPlugins(); diff --git a/frame/item/quicksettingitem.cpp b/frame/item/quicksettingitem.cpp index 58f36610e..2e2e75063 100644 --- a/frame/item/quicksettingitem.cpp +++ b/frame/item/quicksettingitem.cpp @@ -43,10 +43,11 @@ static QSize expandSize = QSize(20, 20); -QuickSettingItem::QuickSettingItem(PluginsItemInterface *const pluginInter, const QString &itemKey, QWidget *parent) +QuickSettingItem::QuickSettingItem(PluginsItemInterface *const pluginInter, const QString &itemKey, const QJsonObject &metaData, QWidget *parent) : DockItem(parent) , m_pluginInter(pluginInter) , m_itemKey(itemKey) + , m_metaData(metaData) { setAcceptDrops(true); this->installEventFilter(this); @@ -96,6 +97,14 @@ const QString QuickSettingItem::itemKey() const return m_itemKey; } +bool QuickSettingItem::isPrimary() const +{ + if (m_metaData.contains("primary")) + return m_metaData.value("primary").toBool(); + + return false; +} + void QuickSettingItem::paintEvent(QPaintEvent *e) { QWidget::paintEvent(e); @@ -125,7 +134,7 @@ void QuickSettingItem::paintEvent(QPaintEvent *e) QPainter pa(&pm); pa.setCompositionMode(QPainter::CompositionMode_SourceIn); pa.fillRect(pm.rect(), painter.pen().brush()); - if (m_pluginInter->isPrimary()) { + if (isPrimary()) { // 如果是主图标,则显示阴影背景 int marginYSpace = yMarginSpace(); QRect iconBg(MARGINLEFTSPACE, marginYSpace, BGSIZE, BGSIZE); @@ -201,7 +210,7 @@ QColor QuickSettingItem::foregroundColor() const void QuickSettingItem::mouseReleaseEvent(QMouseEvent *event) { // 如果是鼠标的按下事件 - if (m_pluginInter->isPrimary()) { + if (isPrimary()) { QMouseEvent *mouseEvent = static_cast(event); QRect rctExpand(rect().width() - MARGINRIGHTSPACE - expandSize.width(), (rect().height() - expandSize.height()) / 2, diff --git a/frame/item/quicksettingitem.h b/frame/item/quicksettingitem.h index 69b824db3..08c416395 100644 --- a/frame/item/quicksettingitem.h +++ b/frame/item/quicksettingitem.h @@ -39,9 +39,10 @@ public: ItemType itemType() const override; const QPixmap dragPixmap(); const QString itemKey() const; + bool isPrimary() const; protected: - QuickSettingItem(PluginsItemInterface *const pluginInter, const QString &itemKey, QWidget *parent = nullptr); + QuickSettingItem(PluginsItemInterface *const pluginInter, const QString &itemKey, const QJsonObject &metaData, QWidget *parent = nullptr); ~QuickSettingItem() override; void paintEvent(QPaintEvent *e) override; @@ -57,6 +58,7 @@ private: private: PluginsItemInterface *m_pluginInter; QString m_itemKey; + QJsonObject m_metaData; }; #endif // QUICKSETTINGITEM_H diff --git a/frame/window/quickpluginwindow.cpp b/frame/window/quickpluginwindow.cpp index 573510990..40604d604 100644 --- a/frame/window/quickpluginwindow.cpp +++ b/frame/window/quickpluginwindow.cpp @@ -24,6 +24,7 @@ #include "pluginsiteminterface.h" #include "quicksettingcontainer.h" #include "appdrag.h" +#include "proxyplugincontroller.h" #include #include @@ -334,7 +335,7 @@ int QuickPluginWindow::getDropIndex(QPoint point) QuickDockItem *dockBeforeItem = qobject_cast(layoutBefore->widget()); QuickDockItem *dockItem = qobject_cast(layoutItem->widget()); - if (dockItem->pluginItem()->isPrimary()) + if (dockItem->isPrimary()) continue; if (dockBeforeItem->geometry().x() > point.x() && dockItem->geometry().right() < point.x()) @@ -348,7 +349,7 @@ int QuickPluginWindow::getDropIndex(QPoint point) continue; QuickDockItem *dockBeforeItem = qobject_cast(layoutBefore->widget()); - if (dockBeforeItem->pluginItem()->isPrimary()) + if (dockBeforeItem->isPrimary()) break; QuickDockItem *dockItem = qobject_cast(layoutItem->widget()); @@ -439,7 +440,12 @@ void QuickPluginWindow::resetPluginDisplay() if (pluginItems.contains(item)) { itemWidget = pluginItems[item]; } else { - itemWidget = new QuickDockItem(item, this); + QJsonObject metaData; + QPluginLoader *pluginLoader = ProxyPluginController::instance(PluginType::QuickPlugin)->pluginLoader(item); + if (pluginLoader) + metaData = pluginLoader->metaData().value("MetaData").toObject(); + + itemWidget = new QuickDockItem(item, metaData, this); itemWidget->setFixedSize(ICONWIDTH, ICONHEIGHT); } connect(itemWidget, &QuickDockItem::clicked, this, &QuickPluginWindow::onFixedClick); @@ -474,9 +480,10 @@ void QuickPluginWindow::initConnection() * @param pluginItem * @param parent */ -QuickDockItem::QuickDockItem(PluginsItemInterface *pluginItem, QWidget *parent) +QuickDockItem::QuickDockItem(PluginsItemInterface *pluginItem, const QJsonObject &metaData, QWidget *parent) : QWidget(parent) , m_pluginItem(pluginItem) + , m_metaData(metaData) { } @@ -489,6 +496,14 @@ PluginsItemInterface *QuickDockItem::pluginItem() return m_pluginItem; } +bool QuickDockItem::isPrimary() const +{ + if (m_metaData.contains("primary")) + return m_metaData.value("primary").toBool(); + + return false; +} + void QuickDockItem::paintEvent(QPaintEvent *event) { if (!m_pluginItem) diff --git a/frame/window/quickpluginwindow.h b/frame/window/quickpluginwindow.h index ffad4a3a4..a873e0882 100644 --- a/frame/window/quickpluginwindow.h +++ b/frame/window/quickpluginwindow.h @@ -93,10 +93,11 @@ class QuickDockItem : public QWidget Q_OBJECT public: - explicit QuickDockItem(PluginsItemInterface *pluginItem, QWidget *parent = nullptr); + explicit QuickDockItem(PluginsItemInterface *pluginItem, const QJsonObject &metaData, QWidget *parent = nullptr); ~QuickDockItem(); PluginsItemInterface *pluginItem(); + bool isPrimary() const; Q_SIGNALS: void clicked(); @@ -107,6 +108,7 @@ protected: private: PluginsItemInterface *m_pluginItem; + QJsonObject m_metaData; }; #endif // QUICKPLUGINWINDOW_H diff --git a/frame/window/quicksettingcontainer.cpp b/frame/window/quicksettingcontainer.cpp index 133686b0d..0cc5141db 100644 --- a/frame/window/quicksettingcontainer.cpp +++ b/frame/window/quicksettingcontainer.cpp @@ -203,7 +203,7 @@ void QuickSettingContainer::mousePressEvent(QMouseEvent *event) return QWidget::mousePressEvent(event); QuickSettingItem *moveItem = qobject_cast(childAt(event->pos())); - if (!moveItem || moveItem->pluginItem()->isPrimary()) + if (!moveItem || moveItem->isPrimary()) return QWidget::mousePressEvent(event); m_dragPluginPosition = event->pos(); @@ -257,7 +257,7 @@ void QuickSettingContainer::updateItemLayout() int column = 0; QList quickSettings = m_pluginLoader->settingItems(); for (QuickSettingItem *item : quickSettings) { - int usedColumn = item->pluginItem()->isPrimary() ? 2 : 1; + int usedColumn = item->isPrimary() ? 2 : 1; m_pluginLayout->addWidget(item, row, column, 1, usedColumn); column += usedColumn; if (column >= COLUMNCOUNT) { @@ -361,7 +361,7 @@ void QuickSettingContainer::resizeView() int selfPluginCount = 0; for (QuickSettingItem *item : pluginItems) { // 如果是置顶的插件,则认为它占用两个普通插件的位置 - int increCount = (item->pluginItem()->isPrimary() ? 2 : 1); + int increCount = (item->isPrimary() ? 2 : 1); selfPluginCount += increCount; } int rowCount = selfPluginCount / COLUMNCOUNT; diff --git a/interfaces/pluginsiteminterface.h b/interfaces/pluginsiteminterface.h index e061bb03b..c296829b6 100644 --- a/interfaces/pluginsiteminterface.h +++ b/interfaces/pluginsiteminterface.h @@ -269,12 +269,6 @@ public: /// virtual PluginStatus status() const { return PluginStatus::Deactive; } - /// - /// return is primary plugin,if true, the plugin will display on top - /// the default value is false - /// - virtual bool isPrimary() const { return false; } - /// /// return the detail value, it will display in the center ///