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

View File

@ -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();

View File

@ -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<QMouseEvent *>(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;

View File

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

View File

@ -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();

View File

@ -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);
}

View File

@ -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();

View File

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

View File

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