fix: 修复任务栏无法响应插件状态变化引起图标变化的问题

当快捷设置区域的图标发生变化的时候,外部插件需要响应对应的图标变化接口,修改插件区域图标

Log:
Influence: 快捷设置区域-查看图标变化
Task: https://pms.uniontech.com/task-view-110311.html
Change-Id: I19be98ec53145d45db3ee7023c4a0d4012e68a93
This commit is contained in:
donghualin 2022-06-09 13:16:49 +08:00
parent f25258ca20
commit 8bd51673bc
9 changed files with 35 additions and 13 deletions

View File

@ -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() QuickSettingController *QuickSettingController::instance()
{ {
static QuickSettingController instance; static QuickSettingController instance;

View File

@ -36,6 +36,7 @@ public:
Q_SIGNALS: Q_SIGNALS:
void pluginInserted(QuickSettingItem *); void pluginInserted(QuickSettingItem *);
void pluginRemoved(QuickSettingItem *); void pluginRemoved(QuickSettingItem *);
void pluginUpdated(PluginsItemInterface *, const DockPart &);
protected: protected:
void startLoader(); void startLoader();
@ -49,6 +50,7 @@ protected:
void requestWindowAutoHide(PluginsItemInterface * const, const QString &, const bool) override {} void requestWindowAutoHide(PluginsItemInterface * const, const QString &, const bool) override {}
void requestRefreshWindowVisible(PluginsItemInterface * const, const QString &) override {} void requestRefreshWindowVisible(PluginsItemInterface * const, const QString &) override {}
void requestSetAppletVisible(PluginsItemInterface * const, const QString &, const bool) override {} void requestSetAppletVisible(PluginsItemInterface * const, const QString &, const bool) override {}
void updateDockInfo(PluginsItemInterface * const itemInter, const DockPart &part) override;
private: private:
void sortPlugins(); void sortPlugins();

View File

@ -36,7 +36,10 @@
#define BGWIDTH 128 #define BGWIDTH 128
#define BGSIZE 36 #define BGSIZE 36
#define MARGINLEFTSPACE 10
#define OPENICONSIZE 12 #define OPENICONSIZE 12
#define MARGINRIGHTSPACE 12
static QSize expandSize = QSize(6, 10); static QSize expandSize = QSize(6, 10);
QuickSettingItem::QuickSettingItem(PluginsItemInterface *const pluginInter, const QString &itemKey, QWidget *parent) 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()); pa.fillRect(pm.rect(), painter.pen().brush());
if (m_pluginInter->isPrimary()) { if (m_pluginInter->isPrimary()) {
// 如果是主图标,则显示阴影背景 // 如果是主图标,则显示阴影背景
int marginXSpace = xMarginSpace();
int marginYSpace = yMarginSpace(); int marginYSpace = yMarginSpace();
QRect iconBg(marginXSpace, marginYSpace, BGSIZE, BGSIZE); QRect iconBg(MARGINLEFTSPACE, marginYSpace, BGSIZE, BGSIZE);
QPixmap bgPixmap = ImageUtil::getShadowPixmap(pm, shadowColor(), QSize(BGSIZE, BGSIZE)); QPixmap bgPixmap = ImageUtil::getShadowPixmap(pm, shadowColor(), QSize(BGSIZE, BGSIZE));
painter.drawPixmap(iconBg, bgPixmap); painter.drawPixmap(iconBg, bgPixmap);
// 绘制文字 // 绘制文字
@ -140,8 +142,8 @@ void QuickSettingItem::paintEvent(QPaintEvent *e)
pen.setColor(QColor(0, 0, 0)); pen.setColor(QColor(0, 0, 0));
pen.setWidth(2); pen.setWidth(2);
painter.setPen(pen); painter.setPen(pen);
int iconLeft = rect().width() - marginXSpace - expandSize.width(); int iconLeft = rect().width() - MARGINRIGHTSPACE - expandSize.width();
int iconRight = rect().width() - marginXSpace; int iconRight = rect().width() - MARGINRIGHTSPACE;
painter.drawLine(QPoint(iconLeft, (iconBg.y() + (iconBg.height() - expandSize.height()) / 2)), painter.drawLine(QPoint(iconLeft, (iconBg.y() + (iconBg.height() - expandSize.height()) / 2)),
QPoint(iconRight, (iconBg.y() + iconBg.height() / 2))); QPoint(iconRight, (iconBg.y() + iconBg.height() / 2)));
painter.drawLine(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()) { if (m_pluginInter->isPrimary()) {
QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event); QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
QRect rctExpand(rect().width() - xMarginSpace() - expandSize.width(), QRect rctExpand(rect().width() - MARGINRIGHTSPACE - expandSize.width(),
(rect().height() - expandSize.height()) / 2, (rect().height() - expandSize.height()) / 2,
expandSize.width(), expandSize.height()); expandSize.width(), expandSize.height());
if (rctExpand.contains(mapFromGlobal(mouseEvent->globalPos()))) 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() int QuickSettingItem::yMarginSpace()
{ {
return (rect().height() - BGSIZE) / 2; return (rect().height() - BGSIZE) / 2;

View File

@ -53,7 +53,6 @@ protected:
void mouseReleaseEvent(QMouseEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override;
private: private:
int xMarginSpace();
int yMarginSpace(); int yMarginSpace();
private: private:

View File

@ -52,7 +52,7 @@ public:
void itemUpdate(PluginsItemInterface * const, const QString &) override {} void itemUpdate(PluginsItemInterface * const, const QString &) override {}
void itemRemoved(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: signals:
void pluginLoaderFinished(); void pluginLoaderFinished();

View File

@ -260,6 +260,17 @@ void QuickPluginWindow::onFixedClick()
popWindow->show(popupPoint()); 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) void QuickPluginWindow::startDrag(PluginsItemInterface *moveItem)
{ {
AppDrag *drag = new AppDrag(this, new QuickDragWidget); AppDrag *drag = new AppDrag(this, new QuickDragWidget);
@ -448,6 +459,8 @@ void QuickPluginWindow::initConnection()
connect(QuickSettingController::instance(), &QuickSettingController::pluginRemoved, this, [ this ] (QuickSettingItem *settingItem){ connect(QuickSettingController::instance(), &QuickSettingController::pluginRemoved, this, [ this ] (QuickSettingItem *settingItem){
removePlugin(settingItem->pluginItem()); 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); QPixmap pixmap = m_pluginItem->icon(DockPart::QuickPanel).pixmap(ICONHEIGHT, ICONHEIGHT);
QRect pixmapRect = QRect((rect().width() - ICONHEIGHT) / 2, (rect().height() - ICONHEIGHT) / 2, QRect pixmapRect = QRect((rect().width() - ICONHEIGHT) / 2, (rect().height() - ICONHEIGHT) / 2,
ICONHEIGHT, ICONHEIGHT); ICONHEIGHT, ICONHEIGHT);
QPainter painter(this); QPainter painter(this);
painter.drawPixmap(pixmapRect, pixmap); painter.drawPixmap(pixmapRect, pixmap);
} }

View File

@ -34,6 +34,7 @@ class QStandardItem;
class QMouseEvent; class QMouseEvent;
class QBoxLayout; class QBoxLayout;
class QuickDockItem; class QuickDockItem;
enum class DockPart;
namespace Dtk { namespace Gui { class DRegionMonitor; } namespace Dtk { namespace Gui { class DRegionMonitor; }
namespace Widget { class DListView; class DStandardItem; } } namespace Widget { class DListView; class DStandardItem; } }
@ -65,6 +66,7 @@ private Q_SLOTS:
void onPluginDropItem(QDropEvent *event); void onPluginDropItem(QDropEvent *event);
void onPluginDragMove(QDragMoveEvent *event); void onPluginDragMove(QDragMoveEvent *event);
void onFixedClick(); void onFixedClick();
void onUpdatePlugin(PluginsItemInterface *itemInter, const DockPart &dockPart);
private: private:
void initUi(); void initUi();

View File

@ -283,6 +283,9 @@ void QuickSettingContainer::initUi()
m_pluginLayout->setContentsMargins(0, 0, 0, 0); m_pluginLayout->setContentsMargins(0, 0, 0, 0);
m_pluginLayout->setSpacing(ITEMSPACE); 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_pluginWidget->setLayout(m_pluginLayout);
m_mainlayout->addWidget(m_pluginWidget); m_mainlayout->addWidget(m_pluginWidget);

View File

@ -101,7 +101,7 @@ public:
/// update display or information /// update display or information
/// ///
/// ///
virtual void updateDockInfo(const DockPart &) = 0; virtual void updateDockInfo(PluginsItemInterface *const itemInter, const DockPart &) = 0;
}; };
#endif // PLUGINPROXYINTERFACE_H #endif // PLUGINPROXYINTERFACE_H