feat: 删除插件基类的isPrimary接口

删除isPrimary()接口,插件继承的时候无需实现该接口,任务栏读取是否主插件的时候从json中读取配置即可

Log: 优化任务栏插件的接口
Influence: 安装网络插件,查看网络插件是否在快捷设置面板中显示两列图标
Task: https://pms.uniontech.com/task-view-121387.html
Change-Id: I1d47e6c7b4162f4fdc36bf4879bbd85c0caaff69
This commit is contained in:
donghualin 2022-08-16 17:20:51 +00:00
parent 1691e7188c
commit 282e933225
7 changed files with 46 additions and 20 deletions

View File

@ -40,7 +40,7 @@ void QuickSettingController::sortPlugins()
QList<QuickSettingItem *> primarySettingItems;
QList<QuickSettingItem *> 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();

View File

@ -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<QMouseEvent *>(event);
QRect rctExpand(rect().width() - MARGINRIGHTSPACE - expandSize.width(),
(rect().height() - expandSize.height()) / 2,

View File

@ -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

View File

@ -24,6 +24,7 @@
#include "pluginsiteminterface.h"
#include "quicksettingcontainer.h"
#include "appdrag.h"
#include "proxyplugincontroller.h"
#include <DStyleOption>
#include <DStandardItem>
@ -334,7 +335,7 @@ int QuickPluginWindow::getDropIndex(QPoint point)
QuickDockItem *dockBeforeItem = qobject_cast<QuickDockItem *>(layoutBefore->widget());
QuickDockItem *dockItem = qobject_cast<QuickDockItem *>(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<QuickDockItem *>(layoutBefore->widget());
if (dockBeforeItem->pluginItem()->isPrimary())
if (dockBeforeItem->isPrimary())
break;
QuickDockItem *dockItem = qobject_cast<QuickDockItem *>(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)

View File

@ -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

View File

@ -203,7 +203,7 @@ void QuickSettingContainer::mousePressEvent(QMouseEvent *event)
return QWidget::mousePressEvent(event);
QuickSettingItem *moveItem = qobject_cast<QuickSettingItem *>(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<QuickSettingItem *> 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;

View File

@ -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
///