mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 09:23:03 +00:00
refactor: 调整插件接口,删除指针引用
去掉插件的指针接口,同时插件根据任务栏图标类别返回不同类型的图标,修改所有已实现的插件接口 Log: Influence: 任务栏-查看快捷设置图标、快捷区域可点击的图标、系统电源图标是否显示正常 Task: https://pms.uniontech.com/task-view-110309.html Change-Id: I9ffc42189471bb6183f264b366434d9be77275a4
This commit is contained in:
parent
752bf51379
commit
0bdc1eb1a2
@ -462,7 +462,7 @@ void QuickDragWidget::dropEvent(QDropEvent *event)
|
|||||||
else
|
else
|
||||||
hide();
|
hide();
|
||||||
|
|
||||||
Q_EMIT requestDropItem();
|
Q_EMIT requestDropItem(event);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -150,8 +150,8 @@ class QuickDragWidget : public AppDragWidget
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void requestDropItem();
|
void requestDropItem(QDropEvent *);
|
||||||
void requestDragMove(QDragMoveEvent *event);
|
void requestDragMove(QDragMoveEvent *);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit QuickDragWidget(QWidget *parent = Q_NULLPTR);
|
explicit QuickDragWidget(QWidget *parent = Q_NULLPTR);
|
||||||
|
@ -64,7 +64,7 @@ DockItem::ItemType QuickSettingItem::itemType() const
|
|||||||
|
|
||||||
const QPixmap QuickSettingItem::dragPixmap()
|
const QPixmap QuickSettingItem::dragPixmap()
|
||||||
{
|
{
|
||||||
QPixmap pm = m_pluginInter->icon()->pixmap(ICONWIDTH, ICONHEIGHT);
|
QPixmap pm = m_pluginInter->icon(DockPart::QuickPanel).pixmap(ICONWIDTH, ICONHEIGHT);
|
||||||
|
|
||||||
QPainter pa(&pm);
|
QPainter pa(&pm);
|
||||||
pa.setPen(foregroundColor());
|
pa.setPen(foregroundColor());
|
||||||
@ -105,7 +105,7 @@ void QuickSettingItem::paintEvent(QPaintEvent *e)
|
|||||||
// 绘制背景色
|
// 绘制背景色
|
||||||
painter.fillRect(rect(), backgroundColor());
|
painter.fillRect(rect(), backgroundColor());
|
||||||
// 让图标填上前景色
|
// 让图标填上前景色
|
||||||
QPixmap pm = m_pluginInter->icon()->pixmap(ICONWIDTH, ICONHEIGHT);
|
QPixmap pm = m_pluginInter->icon(DockPart::QuickPanel).pixmap(ICONWIDTH, ICONHEIGHT);
|
||||||
QPainter pa(&pm);
|
QPainter pa(&pm);
|
||||||
pa.setCompositionMode(QPainter::CompositionMode_SourceIn);
|
pa.setCompositionMode(QPainter::CompositionMode_SourceIn);
|
||||||
pa.fillRect(pm.rect(), painter.pen().brush());
|
pa.fillRect(pm.rect(), painter.pen().brush());
|
||||||
|
@ -40,7 +40,7 @@ class AbstractPluginsController : public QObject, PluginProxyInterface
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit AbstractPluginsController(QObject *parent = 0);
|
explicit AbstractPluginsController(QObject *parent = Q_NULLPTR);
|
||||||
~ AbstractPluginsController() override;
|
~ AbstractPluginsController() override;
|
||||||
|
|
||||||
// implements PluginProxyInterface
|
// implements PluginProxyInterface
|
||||||
@ -52,6 +52,8 @@ 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 {}
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void pluginLoaderFinished();
|
void pluginLoaderFinished();
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2022 ~ 2022 Deepin Technology Co., Ltd.
|
* Copyright (C) 2022 ~ 2022 Deepin Technology Co., Ltd.
|
||||||
*
|
*
|
||||||
* Author: donghualin <donghualin@uniontech.com>
|
* Author: donghualin <donghualin@uniontech.com>
|
||||||
@ -37,10 +37,11 @@
|
|||||||
|
|
||||||
#define ITEMSIZE 22
|
#define ITEMSIZE 22
|
||||||
#define ITEMSPACE 6
|
#define ITEMSPACE 6
|
||||||
#define ICONWIDTH 20
|
#define ICONWIDTH 18
|
||||||
#define ICONHEIGHT 16
|
#define ICONHEIGHT 16
|
||||||
|
|
||||||
static QStringList fixedPluginKeys{ "network-item-key", "sound-item-key", "power" };
|
static QStringList fixedPluginNames{ "network", "sound", "power" };
|
||||||
|
|
||||||
const int itemDataRole = Dtk::UserRole + 1;
|
const int itemDataRole = Dtk::UserRole + 1;
|
||||||
const int itemSortRole = Dtk::UserRole + 2;
|
const int itemSortRole = Dtk::UserRole + 2;
|
||||||
|
|
||||||
@ -69,8 +70,8 @@ void QuickPluginWindow::initUi()
|
|||||||
m_mainLayout->setSpacing(ITEMSPACE);
|
m_mainLayout->setSpacing(ITEMSPACE);
|
||||||
const QList<QuickSettingItem *> &items = QuickSettingController::instance()->settingItems();
|
const QList<QuickSettingItem *> &items = QuickSettingController::instance()->settingItems();
|
||||||
for (QuickSettingItem *settingItem : items) {
|
for (QuickSettingItem *settingItem : items) {
|
||||||
const QString itemKey = settingItem->itemKey();
|
const QString pluginName = settingItem->pluginItem()->pluginName();
|
||||||
if (!fixedPluginKeys.contains(itemKey))
|
if (!fixedPluginNames.contains(pluginName))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
addPlugin(settingItem);
|
addPlugin(settingItem);
|
||||||
@ -93,25 +94,26 @@ void QuickPluginWindow::setPositon(Position position)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int QuickPluginWindow::findActiveTargetIndex(QWidget *widget)
|
int QuickPluginWindow::findActiveTargetIndex(QuickDockItem *widget)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < m_activeSettingItems.size(); i++) {
|
for (int i = 0; i < m_activeSettingItems.size(); i++) {
|
||||||
QuickSettingItem *settingItem = m_activeSettingItems[i];
|
PluginsItemInterface *settingItem = m_activeSettingItems[i];
|
||||||
if (settingItem->pluginItem()->itemWidget(settingItem->itemKey()) == widget)
|
if (widget->pluginItem() == settingItem)
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QuickPluginWindow::dragPlugin(QuickSettingItem *item)
|
void QuickPluginWindow::dragPlugin(PluginsItemInterface *item)
|
||||||
{
|
{
|
||||||
// 释放插件,一般是从快捷设置面板区域移动到这里的,固定插件不支持拖动
|
// 释放插件,一般是从快捷设置面板区域移动到这里的,固定插件不支持拖动
|
||||||
if (fixedPluginKeys.contains(item->itemKey()))
|
if (fixedPluginNames.contains(item->pluginName()))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
QPoint itemPoint = mapFromGlobal(QCursor::pos());
|
QPoint itemPoint = mapFromGlobal(QCursor::pos());
|
||||||
// 查找移动后的位置,如果移动后的插件找不到,就直接放到最后
|
// 查找移动后的位置,如果移动后的插件找不到,就直接放到最后
|
||||||
QWidget *targetWidget = childAt(itemPoint);
|
QuickDockItem *targetWidget = qobject_cast<QuickDockItem *>(childAt(itemPoint));
|
||||||
if (!targetWidget) {
|
if (!targetWidget) {
|
||||||
m_activeSettingItems << item;
|
m_activeSettingItems << item;
|
||||||
} else {
|
} else {
|
||||||
@ -122,6 +124,7 @@ void QuickPluginWindow::dragPlugin(QuickSettingItem *item)
|
|||||||
else
|
else
|
||||||
m_activeSettingItems.insert(targetIndex, item);
|
m_activeSettingItems.insert(targetIndex, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
//排序插入到当前窗体
|
//排序插入到当前窗体
|
||||||
resetPluginDisplay();
|
resetPluginDisplay();
|
||||||
Q_EMIT itemCountChanged();
|
Q_EMIT itemCountChanged();
|
||||||
@ -130,29 +133,30 @@ void QuickPluginWindow::dragPlugin(QuickSettingItem *item)
|
|||||||
void QuickPluginWindow::addPlugin(QuickSettingItem *item)
|
void QuickPluginWindow::addPlugin(QuickSettingItem *item)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < m_mainLayout->count(); i++) {
|
for (int i = 0; i < m_mainLayout->count(); i++) {
|
||||||
QWidget *widget = m_mainLayout->itemAt(i)->widget();
|
QLayoutItem *layoutItem = m_mainLayout->itemAt(i);
|
||||||
if (item == widget) {
|
if (!layoutItem)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
QuickDockItem *dockItem = qobject_cast<QuickDockItem *>(layoutItem->widget());
|
||||||
|
if (!dockItem)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (item->pluginItem() == dockItem->pluginItem()) {
|
||||||
resetPluginDisplay();
|
resetPluginDisplay();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
QWidget *widget = item->pluginItem()->itemWidget(item->itemKey());
|
if (fixedPluginNames.contains(item->pluginItem()->pluginName())) {
|
||||||
if (!widget)
|
|
||||||
return;
|
|
||||||
|
|
||||||
widget->setFixedSize(ICONWIDTH, ICONHEIGHT);
|
|
||||||
widget->installEventFilter(this);
|
|
||||||
if (fixedPluginKeys.contains(item->itemKey())) {
|
|
||||||
// 新插入的插件如果是固定插件,则将其插入到固定插件列表中,并对其进行排序
|
// 新插入的插件如果是固定插件,则将其插入到固定插件列表中,并对其进行排序
|
||||||
m_fixedSettingItems << item;
|
m_fixedSettingItems << item->pluginItem();
|
||||||
qSort(m_fixedSettingItems.begin(), m_fixedSettingItems.end(), [](QuickSettingItem *item1, QuickSettingItem *item2) {
|
qSort(m_fixedSettingItems.begin(), m_fixedSettingItems.end(), [](PluginsItemInterface *item1, PluginsItemInterface *item2) {
|
||||||
int index1 = fixedPluginKeys.indexOf(item1->itemKey());
|
int index1 = fixedPluginNames.indexOf(item1->pluginName());
|
||||||
int index2 = fixedPluginKeys.indexOf(item2->itemKey());
|
int index2 = fixedPluginNames.indexOf(item2->pluginName());
|
||||||
return index1 < index2;
|
return index1 < index2;
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
// 如果是非固定插件,则直接插入到末尾
|
// 如果是非固定插件,则直接插入到末尾
|
||||||
m_activeSettingItems << item;
|
m_activeSettingItems << item->pluginItem();
|
||||||
}
|
}
|
||||||
resetPluginDisplay();
|
resetPluginDisplay();
|
||||||
Q_EMIT itemCountChanged();
|
Q_EMIT itemCountChanged();
|
||||||
@ -175,12 +179,8 @@ QSize QuickPluginWindow::suitableSize()
|
|||||||
return QSize(ITEMSIZE, height);
|
return QSize(ITEMSIZE, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QuickPluginWindow::removePlugin(QuickSettingItem *item)
|
void QuickPluginWindow::removePlugin(PluginsItemInterface *item)
|
||||||
{
|
{
|
||||||
QWidget *widget = item->pluginItem()->itemWidget(item->itemKey());
|
|
||||||
if (widget)
|
|
||||||
widget->setFixedSize(ICONWIDTH, ICONHEIGHT);
|
|
||||||
|
|
||||||
if (m_fixedSettingItems.contains(item))
|
if (m_fixedSettingItems.contains(item))
|
||||||
m_fixedSettingItems.removeOne(item);
|
m_fixedSettingItems.removeOne(item);
|
||||||
else if (m_activeSettingItems.contains(item))
|
else if (m_activeSettingItems.contains(item))
|
||||||
@ -192,16 +192,15 @@ void QuickPluginWindow::removePlugin(QuickSettingItem *item)
|
|||||||
Q_EMIT itemCountChanged();
|
Q_EMIT itemCountChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
QuickSettingItem *QuickPluginWindow::findQuickSettingItem(const QPoint &mousePoint, const QList<QuickSettingItem *> &settingItems)
|
PluginsItemInterface *QuickPluginWindow::findQuickSettingItem(const QPoint &mousePoint, const QList<PluginsItemInterface *> &settingItems)
|
||||||
{
|
{
|
||||||
QWidget *selectWidget = childAt(mousePoint);
|
QuickDockItem *selectWidget = qobject_cast<QuickDockItem *>(childAt(mousePoint));
|
||||||
if (!selectWidget)
|
if (!selectWidget)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
for (int i = 0; i < settingItems.size(); i++) {
|
for (int i = 0; i < settingItems.size(); i++) {
|
||||||
QuickSettingItem *settingItem = settingItems[i];
|
PluginsItemInterface *settingItem = settingItems[i];
|
||||||
QWidget *widget = settingItem->pluginItem()->itemWidget(settingItem->itemKey());
|
if (selectWidget->pluginItem() == settingItem)
|
||||||
if (selectWidget == widget)
|
|
||||||
return settingItem;
|
return settingItem;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -211,7 +210,7 @@ QuickSettingItem *QuickPluginWindow::findQuickSettingItem(const QPoint &mousePoi
|
|||||||
void QuickPluginWindow::mousePressEvent(QMouseEvent *event)
|
void QuickPluginWindow::mousePressEvent(QMouseEvent *event)
|
||||||
{
|
{
|
||||||
// 查找非固定的图标,然后执行拖动
|
// 查找非固定的图标,然后执行拖动
|
||||||
QuickSettingItem *quickItem = findQuickSettingItem(event->pos(), m_activeSettingItems);
|
PluginsItemInterface *quickItem = findQuickSettingItem(event->pos(), m_activeSettingItems);
|
||||||
if (!quickItem)
|
if (!quickItem)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -249,11 +248,11 @@ QPoint QuickPluginWindow::popupPoint() const
|
|||||||
return pointCurrent;
|
return pointCurrent;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QuickPluginWindow::mouseReleaseEvent(QMouseEvent *event)
|
void QuickPluginWindow::onFixedClick()
|
||||||
{
|
{
|
||||||
// 查找固定团图标,然后点击弹出快捷面板
|
// 查找固定团图标,然后点击弹出快捷面板
|
||||||
QuickSettingItem *quickItem = findQuickSettingItem(event->pos(), m_fixedSettingItems);
|
QuickDockItem *dockItem = qobject_cast<QuickDockItem *>(sender());
|
||||||
if (!quickItem)
|
if (!dockItem || !fixedPluginNames.contains(dockItem->pluginItem()->pluginName()))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// 弹出快捷设置面板
|
// 弹出快捷设置面板
|
||||||
@ -261,13 +260,13 @@ void QuickPluginWindow::mouseReleaseEvent(QMouseEvent *event)
|
|||||||
popWindow->show(popupPoint());
|
popWindow->show(popupPoint());
|
||||||
}
|
}
|
||||||
|
|
||||||
void QuickPluginWindow::startDrag(QuickSettingItem *moveItem)
|
void QuickPluginWindow::startDrag(PluginsItemInterface *moveItem)
|
||||||
{
|
{
|
||||||
AppDrag *drag = new AppDrag(this, new QuickDragWidget);
|
AppDrag *drag = new AppDrag(this, new QuickDragWidget);
|
||||||
QuickPluginMimeData *mimedata = new QuickPluginMimeData(moveItem);
|
QuickPluginMimeData *mimedata = new QuickPluginMimeData(moveItem);
|
||||||
drag->setMimeData(mimedata);
|
drag->setMimeData(mimedata);
|
||||||
drag->appDragWidget()->setDockInfo(m_position, QRect(mapToGlobal(pos()), size()));
|
drag->appDragWidget()->setDockInfo(m_position, QRect(mapToGlobal(pos()), size()));
|
||||||
QPixmap dragPixmap = moveItem->pluginItem()->icon()->pixmap(QSize(ITEMSIZE, ITEMSIZE));
|
QPixmap dragPixmap = moveItem->icon(DockPart::QuickPanel).pixmap(QSize(ITEMSIZE, ITEMSIZE));
|
||||||
drag->setPixmap(dragPixmap);
|
drag->setPixmap(dragPixmap);
|
||||||
drag->setHotSpot(QPoint(0, 0));
|
drag->setHotSpot(QPoint(0, 0));
|
||||||
|
|
||||||
@ -275,15 +274,95 @@ void QuickPluginWindow::startDrag(QuickSettingItem *moveItem)
|
|||||||
removePlugin(moveItem);
|
removePlugin(moveItem);
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(static_cast<QuickDragWidget *>(drag->appDragWidget()), &QuickDragWidget::requestDropItem, this, [ this] {
|
connect(static_cast<QuickDragWidget *>(drag->appDragWidget()), &QuickDragWidget::requestDropItem, this, &QuickPluginWindow::onPluginDropItem);
|
||||||
resetPluginDisplay();
|
|
||||||
Q_EMIT itemCountChanged();
|
|
||||||
});
|
|
||||||
connect(static_cast<QuickDragWidget *>(drag->appDragWidget()), &QuickDragWidget::requestDragMove, this, &QuickPluginWindow::onPluginDragMove);
|
connect(static_cast<QuickDragWidget *>(drag->appDragWidget()), &QuickDragWidget::requestDragMove, this, &QuickPluginWindow::onPluginDragMove);
|
||||||
|
|
||||||
drag->exec(Qt::MoveAction | Qt::CopyAction);
|
drag->exec(Qt::MoveAction | Qt::CopyAction);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QuickDockItem *QuickPluginWindow::getDockItemByPlugin(PluginsItemInterface *item)
|
||||||
|
{
|
||||||
|
if (!item)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
for (int i = 0; i < m_mainLayout->count(); i++) {
|
||||||
|
QLayoutItem *layoutItem = m_mainLayout->itemAt(i);
|
||||||
|
if (!layoutItem)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
QuickDockItem *dockItem = qobject_cast<QuickDockItem *>(layoutItem->widget());
|
||||||
|
if (!dockItem)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (dockItem->pluginItem() == item)
|
||||||
|
return dockItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
int QuickPluginWindow::getDropIndex(QPoint point)
|
||||||
|
{
|
||||||
|
QuickDockItem *targetItem = getDockItemByPlugin(findQuickSettingItem(point, m_activeSettingItems));
|
||||||
|
if (targetItem)
|
||||||
|
return m_activeSettingItems.indexOf(targetItem->pluginItem());
|
||||||
|
|
||||||
|
// 上下方向从右向左排列
|
||||||
|
if (m_position == Dock::Position::Top || m_position == Dock::Position::Bottom) {
|
||||||
|
for (int i = 0; i < m_mainLayout->count() - 1; i++) {
|
||||||
|
QLayoutItem *layoutBefore = m_mainLayout->itemAt(i);
|
||||||
|
QLayoutItem *layoutItem = m_mainLayout->itemAt(i + 1);
|
||||||
|
if (!layoutBefore || !layoutItem)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
QuickDockItem *dockBeforeItem = qobject_cast<QuickDockItem *>(layoutBefore->widget());
|
||||||
|
QuickDockItem *dockItem = qobject_cast<QuickDockItem *>(layoutItem->widget());
|
||||||
|
if (dockItem->pluginItem()->isPrimary())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (dockBeforeItem->geometry().x() > point.x() && dockItem->geometry().right() < point.x())
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (int i = 0; i < m_mainLayout->count() - 1; i++) {
|
||||||
|
QLayoutItem *layoutBefore = m_mainLayout->itemAt(i);
|
||||||
|
QLayoutItem *layoutItem = m_mainLayout->itemAt(i + 1);
|
||||||
|
if (!layoutBefore || !layoutItem)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
QuickDockItem *dockBeforeItem = qobject_cast<QuickDockItem *>(layoutBefore->widget());
|
||||||
|
if (dockBeforeItem->pluginItem()->isPrimary())
|
||||||
|
break;
|
||||||
|
|
||||||
|
QuickDockItem *dockItem = qobject_cast<QuickDockItem *>(layoutItem->widget());
|
||||||
|
|
||||||
|
// 从上向下排列
|
||||||
|
if (dockBeforeItem->geometry().bottom() < point.y() && dockItem->geometry().top() > point.y())
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
// 如果都没有找到,直接插入到最后
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void QuickPluginWindow::onPluginDropItem(QDropEvent *event)
|
||||||
|
{
|
||||||
|
const QuickPluginMimeData *data = qobject_cast<const QuickPluginMimeData *>(event->mimeData());
|
||||||
|
if (!data)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// 获取当前鼠标在任务栏快捷图标区域的位置
|
||||||
|
QPoint currentPoint = mapFromGlobal(QCursor::pos());
|
||||||
|
// 获取区域图标插入的位置
|
||||||
|
int dropIndex = getDropIndex(currentPoint);
|
||||||
|
if (dropIndex >= 0)
|
||||||
|
m_activeSettingItems.insert(dropIndex, data->pluginItemInterface());
|
||||||
|
else
|
||||||
|
m_activeSettingItems << data->pluginItemInterface();
|
||||||
|
|
||||||
|
resetPluginDisplay();
|
||||||
|
Q_EMIT itemCountChanged();
|
||||||
|
}
|
||||||
|
|
||||||
void QuickPluginWindow::onPluginDragMove(QDragMoveEvent *event)
|
void QuickPluginWindow::onPluginDragMove(QDragMoveEvent *event)
|
||||||
{
|
{
|
||||||
QPoint currentPoint = mapFromGlobal(QCursor::pos());
|
QPoint currentPoint = mapFromGlobal(QCursor::pos());
|
||||||
@ -291,14 +370,15 @@ void QuickPluginWindow::onPluginDragMove(QDragMoveEvent *event)
|
|||||||
if (!data)
|
if (!data)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
QuickSettingItem *sourceItem = data->quickSettingItem();
|
// 查找移动的
|
||||||
|
PluginsItemInterface *sourceItem = data->pluginItemInterface();
|
||||||
if (!sourceItem)
|
if (!sourceItem)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
QWidget *sourceMoveWidget = sourceItem->pluginItem()->itemWidget(sourceItem->itemKey());
|
QuickDockItem *sourceMoveWidget = getDockItemByPlugin(sourceItem);
|
||||||
QuickSettingItem *targetItem = findQuickSettingItem(currentPoint, m_activeSettingItems);
|
QuickDockItem *targetItem = getDockItemByPlugin(findQuickSettingItem(currentPoint, m_activeSettingItems));
|
||||||
// 如果未找到要移动的目标位置,或者移动的目标位置是固定插件,或者原插件和目标插件是同一个插件,则不做任何操作
|
// 如果未找到要移动的目标位置,或者移动的目标位置是固定插件,或者原插件和目标插件是同一个插件,则不做任何操作
|
||||||
if (!sourceMoveWidget || !targetItem || sourceItem == targetItem)
|
if (!sourceMoveWidget || !targetItem || sourceMoveWidget == targetItem)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// 重新对所有的插件进行排序
|
// 重新对所有的插件进行排序
|
||||||
@ -309,7 +389,7 @@ void QuickPluginWindow::onPluginDragMove(QDragMoveEvent *event)
|
|||||||
}
|
}
|
||||||
// 调整列表中的位置
|
// 调整列表中的位置
|
||||||
int sourceIndex = m_activeSettingItems.indexOf(sourceItem);
|
int sourceIndex = m_activeSettingItems.indexOf(sourceItem);
|
||||||
int targetIndex = m_activeSettingItems.indexOf(targetItem);
|
int targetIndex = m_activeSettingItems.indexOf(targetItem->pluginItem());
|
||||||
if (sourceIndex >= 0)
|
if (sourceIndex >= 0)
|
||||||
m_activeSettingItems.move(sourceIndex, targetIndex);
|
m_activeSettingItems.move(sourceIndex, targetIndex);
|
||||||
else
|
else
|
||||||
@ -318,32 +398,34 @@ void QuickPluginWindow::onPluginDragMove(QDragMoveEvent *event)
|
|||||||
event->accept();
|
event->accept();
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<QuickSettingItem *> QuickPluginWindow::settingItems()
|
|
||||||
{
|
|
||||||
QList<QuickSettingItem *> items;
|
|
||||||
for (int i = 0; i < m_mainLayout->count(); i++) {
|
|
||||||
qInfo() << m_mainLayout->itemAt(i)->widget();
|
|
||||||
QuickSettingItem *item = qobject_cast<QuickSettingItem *>(m_mainLayout->itemAt(i)->widget());
|
|
||||||
if (item)
|
|
||||||
items << item;
|
|
||||||
}
|
|
||||||
return items;
|
|
||||||
}
|
|
||||||
|
|
||||||
void QuickPluginWindow::resetPluginDisplay()
|
void QuickPluginWindow::resetPluginDisplay()
|
||||||
{
|
{
|
||||||
// 先删除所有的widget
|
// 先删除所有的widget
|
||||||
|
QMap<PluginsItemInterface *, QuickDockItem *> pluginItems;
|
||||||
for (int i = m_mainLayout->count() - 1; i >= 0; i--) {
|
for (int i = m_mainLayout->count() - 1; i >= 0; i--) {
|
||||||
QLayoutItem *layoutItem = m_mainLayout->itemAt(i);
|
QLayoutItem *layoutItem = m_mainLayout->itemAt(i);
|
||||||
if (layoutItem) {
|
if (!layoutItem)
|
||||||
layoutItem->widget()->setParent(nullptr);
|
continue;
|
||||||
m_mainLayout->removeItem(layoutItem);
|
|
||||||
}
|
QuickDockItem *dockItem = qobject_cast<QuickDockItem *>(layoutItem->widget());
|
||||||
|
if (!dockItem)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
dockItem->setParent(nullptr);
|
||||||
|
m_mainLayout->removeItem(layoutItem);
|
||||||
|
pluginItems[dockItem->pluginItem()] = dockItem;
|
||||||
}
|
}
|
||||||
// 将列表中所有的控件按照顺序添加到布局上
|
// 将列表中所有的控件按照顺序添加到布局上
|
||||||
auto addWidget = [ this ](const QList<QuickSettingItem *> &items) {
|
auto addWidget = [ = ](const QList<PluginsItemInterface *> &items) {
|
||||||
for (QuickSettingItem *item : items) {
|
for (PluginsItemInterface *item : items) {
|
||||||
QWidget *itemWidget = item->pluginItem()->itemWidget(item->itemKey());
|
QuickDockItem *itemWidget = nullptr;
|
||||||
|
if (pluginItems.contains(item)) {
|
||||||
|
itemWidget = pluginItems[item];
|
||||||
|
} else {
|
||||||
|
itemWidget = new QuickDockItem(item, this);
|
||||||
|
itemWidget->setFixedSize(ICONWIDTH, ICONHEIGHT);
|
||||||
|
}
|
||||||
|
connect(itemWidget, &QuickDockItem::clicked, this, &QuickPluginWindow::onFixedClick);
|
||||||
itemWidget->setParent(this);
|
itemWidget->setParent(this);
|
||||||
m_mainLayout->addWidget(itemWidget);
|
m_mainLayout->addWidget(itemWidget);
|
||||||
}
|
}
|
||||||
@ -356,12 +438,52 @@ void QuickPluginWindow::resetPluginDisplay()
|
|||||||
void QuickPluginWindow::initConnection()
|
void QuickPluginWindow::initConnection()
|
||||||
{
|
{
|
||||||
connect(QuickSettingController::instance(), &QuickSettingController::pluginInserted, this, [ this ](QuickSettingItem * settingItem) {
|
connect(QuickSettingController::instance(), &QuickSettingController::pluginInserted, this, [ this ](QuickSettingItem * settingItem) {
|
||||||
const QString itemKey = settingItem->itemKey();
|
const QString pluginName = settingItem->pluginItem()->pluginName();
|
||||||
if (!fixedPluginKeys.contains(itemKey))
|
if (!fixedPluginNames.contains(pluginName))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
addPlugin(settingItem);
|
addPlugin(settingItem);
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(QuickSettingController::instance(), &QuickSettingController::pluginRemoved, this, &QuickPluginWindow::removePlugin);
|
connect(QuickSettingController::instance(), &QuickSettingController::pluginRemoved, this, [ this ] (QuickSettingItem *settingItem){
|
||||||
|
removePlugin(settingItem->pluginItem());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief QuickDockItem::QuickDockItem
|
||||||
|
* @param pluginItem
|
||||||
|
* @param parent
|
||||||
|
*/
|
||||||
|
QuickDockItem::QuickDockItem(PluginsItemInterface *pluginItem, QWidget *parent)
|
||||||
|
: QWidget(parent)
|
||||||
|
, m_pluginItem(pluginItem)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
QuickDockItem::~QuickDockItem()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
PluginsItemInterface *QuickDockItem::pluginItem()
|
||||||
|
{
|
||||||
|
return m_pluginItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
void QuickDockItem::paintEvent(QPaintEvent *event)
|
||||||
|
{
|
||||||
|
if (!m_pluginItem)
|
||||||
|
return QWidget::paintEvent(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);
|
||||||
|
}
|
||||||
|
|
||||||
|
void QuickDockItem::mouseReleaseEvent(QMouseEvent *event)
|
||||||
|
{
|
||||||
|
Q_EMIT clicked();
|
||||||
|
QWidget::mouseReleaseEvent(event);
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,7 @@ class QStandardItemModel;
|
|||||||
class QStandardItem;
|
class QStandardItem;
|
||||||
class QMouseEvent;
|
class QMouseEvent;
|
||||||
class QBoxLayout;
|
class QBoxLayout;
|
||||||
|
class QuickDockItem;
|
||||||
|
|
||||||
namespace Dtk { namespace Gui { class DRegionMonitor; }
|
namespace Dtk { namespace Gui { class DRegionMonitor; }
|
||||||
namespace Widget { class DListView; class DStandardItem; } }
|
namespace Widget { class DListView; class DStandardItem; } }
|
||||||
@ -48,7 +49,7 @@ public:
|
|||||||
~QuickPluginWindow() override;
|
~QuickPluginWindow() override;
|
||||||
|
|
||||||
void setPositon(Dock::Position position);
|
void setPositon(Dock::Position position);
|
||||||
void dragPlugin(QuickSettingItem *item);
|
void dragPlugin(PluginsItemInterface *item);
|
||||||
|
|
||||||
QSize suitableSize();
|
QSize suitableSize();
|
||||||
|
|
||||||
@ -56,29 +57,53 @@ Q_SIGNALS:
|
|||||||
void itemCountChanged();
|
void itemCountChanged();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void mouseReleaseEvent(QMouseEvent *event) override;
|
|
||||||
void mousePressEvent(QMouseEvent *event) override;
|
void mousePressEvent(QMouseEvent *event) override;
|
||||||
|
|
||||||
private Q_SLOTS:
|
private Q_SLOTS:
|
||||||
void addPlugin(QuickSettingItem *item);
|
void addPlugin(QuickSettingItem *item);
|
||||||
void removePlugin(QuickSettingItem *item);
|
void removePlugin(PluginsItemInterface *item);
|
||||||
|
void onPluginDropItem(QDropEvent *event);
|
||||||
void onPluginDragMove(QDragMoveEvent *event);
|
void onPluginDragMove(QDragMoveEvent *event);
|
||||||
|
void onFixedClick();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void initUi();
|
void initUi();
|
||||||
void initConnection();
|
void initConnection();
|
||||||
void startDrag(QuickSettingItem *moveItem);
|
void startDrag(PluginsItemInterface *moveItem);
|
||||||
QList<QuickSettingItem *> settingItems();
|
PluginsItemInterface *findQuickSettingItem(const QPoint &mousePoint, const QList<PluginsItemInterface *> &settingItems);
|
||||||
QuickSettingItem *findQuickSettingItem(const QPoint &mousePoint, const QList<QuickSettingItem *> &settingItems);
|
int findActiveTargetIndex(QuickDockItem *widget);
|
||||||
int findActiveTargetIndex(QWidget *widget);
|
int getDropIndex(QPoint point);
|
||||||
void resetPluginDisplay();
|
void resetPluginDisplay();
|
||||||
QPoint popupPoint() const;
|
QPoint popupPoint() const;
|
||||||
|
QuickDockItem *getDockItemByPlugin(PluginsItemInterface *item);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QBoxLayout *m_mainLayout;
|
QBoxLayout *m_mainLayout;
|
||||||
Dock::Position m_position;
|
Dock::Position m_position;
|
||||||
QList<QuickSettingItem *> m_activeSettingItems;
|
QList<PluginsItemInterface *> m_activeSettingItems;
|
||||||
QList<QuickSettingItem *> m_fixedSettingItems;
|
QList<PluginsItemInterface *> m_fixedSettingItems;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 用于在任务栏上显示的插件
|
||||||
|
class QuickDockItem : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit QuickDockItem(PluginsItemInterface *pluginItem, QWidget *parent = nullptr);
|
||||||
|
~QuickDockItem();
|
||||||
|
|
||||||
|
PluginsItemInterface *pluginItem();
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
void clicked();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void paintEvent(QPaintEvent *event);
|
||||||
|
void mouseReleaseEvent(QMouseEvent *event);
|
||||||
|
|
||||||
|
private:
|
||||||
|
PluginsItemInterface *m_pluginItem;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // QUICKPLUGINWINDOW_H
|
#endif // QUICKPLUGINWINDOW_H
|
||||||
|
@ -231,7 +231,7 @@ void QuickSettingContainer::mouseMoveEvent(QMouseEvent *event)
|
|||||||
|| qAbs(m_dragPluginPosition.y() - pointCurrent.y()) > 5) {
|
|| qAbs(m_dragPluginPosition.y() - pointCurrent.y()) > 5) {
|
||||||
clearDragPoint();
|
clearDragPoint();
|
||||||
QDrag *drag = new QDrag(this);
|
QDrag *drag = new QDrag(this);
|
||||||
QuickPluginMimeData *mimedata = new QuickPluginMimeData(moveItem);
|
QuickPluginMimeData *mimedata = new QuickPluginMimeData(moveItem->pluginItem());
|
||||||
drag->setMimeData(mimedata);
|
drag->setMimeData(mimedata);
|
||||||
QPixmap dragPixmap = moveItem->dragPixmap();
|
QPixmap dragPixmap = moveItem->dragPixmap();
|
||||||
drag->setPixmap(dragPixmap);
|
drag->setPixmap(dragPixmap);
|
||||||
|
@ -110,12 +110,12 @@ class QuickPluginMimeData : public QMimeData
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit QuickPluginMimeData(QuickSettingItem *item) : QMimeData(), m_item(item) {}
|
explicit QuickPluginMimeData(PluginsItemInterface *item) : QMimeData(), m_item(item) {}
|
||||||
~QuickPluginMimeData() {}
|
~QuickPluginMimeData() {}
|
||||||
QuickSettingItem *quickSettingItem() const { return m_item; }
|
PluginsItemInterface *pluginItemInterface() const { return m_item; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QuickSettingItem *m_item;
|
PluginsItemInterface *m_item;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // PLUGINCONTAINER_H
|
#endif // PLUGINCONTAINER_H
|
||||||
|
@ -170,7 +170,7 @@ void StretchPluginsItem::paintEvent(QPaintEvent *event)
|
|||||||
{
|
{
|
||||||
Q_UNUSED(event);
|
Q_UNUSED(event);
|
||||||
QPainter painter(this);
|
QPainter painter(this);
|
||||||
const QIcon *icon = m_pluginInter->icon();
|
QIcon icon = m_pluginInter->icon(DockPart::SystemPanel);
|
||||||
|
|
||||||
QRect rctPixmap(rect());
|
QRect rctPixmap(rect());
|
||||||
if (needShowText()) {
|
if (needShowText()) {
|
||||||
@ -192,8 +192,7 @@ void StretchPluginsItem::paintEvent(QPaintEvent *event)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 绘制图标
|
// 绘制图标
|
||||||
if (icon)
|
painter.drawPixmap(rctPixmap, icon.pixmap(ICONSIZE, ICONSIZE));
|
||||||
painter.drawPixmap(rctPixmap, icon->pixmap(ICONSIZE, ICONSIZE));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QSize StretchPluginsItem::suitableSize() const
|
QSize StretchPluginsItem::suitableSize() const
|
||||||
|
@ -446,7 +446,7 @@ void TrayManagerWindow::dropEvent(QDropEvent *e)
|
|||||||
if (e->source() == this)
|
if (e->source() == this)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
QuickSettingItem *pluginItem = static_cast<QuickSettingItem *>(mimeData->quickSettingItem());
|
PluginsItemInterface *pluginItem = static_cast<PluginsItemInterface *>(mimeData->pluginItemInterface());
|
||||||
if (pluginItem)
|
if (pluginItem)
|
||||||
m_quickIconWidget->dragPlugin(pluginItem);
|
m_quickIconWidget->dragPlugin(pluginItem);
|
||||||
}
|
}
|
||||||
|
@ -27,6 +27,8 @@
|
|||||||
#include <QtCore>
|
#include <QtCore>
|
||||||
|
|
||||||
class PluginsItemInterface;
|
class PluginsItemInterface;
|
||||||
|
enum class DockPart;
|
||||||
|
|
||||||
class PluginProxyInterface
|
class PluginProxyInterface
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -57,6 +59,13 @@ public:
|
|||||||
/// \param itemKey
|
/// \param itemKey
|
||||||
///
|
///
|
||||||
virtual void itemRemoved(PluginsItemInterface * const itemInter, const QString &itemKey) = 0;
|
virtual void itemRemoved(PluginsItemInterface * const itemInter, const QString &itemKey) = 0;
|
||||||
|
|
||||||
|
///
|
||||||
|
/// update display or information
|
||||||
|
///
|
||||||
|
///
|
||||||
|
virtual void updateDockInfo(const DockPart &) = 0;
|
||||||
|
|
||||||
///
|
///
|
||||||
/// \brief requestContextMenu
|
/// \brief requestContextMenu
|
||||||
/// request show context menu
|
/// request show context menu
|
||||||
|
@ -27,11 +27,19 @@
|
|||||||
#include <QIcon>
|
#include <QIcon>
|
||||||
#include <QtCore>
|
#include <QtCore>
|
||||||
|
|
||||||
|
// 任务栏的部件位置
|
||||||
|
enum class DockPart {
|
||||||
|
QuickShow = 0, // 快捷插件显示区域
|
||||||
|
QuickPanel, // 快捷面板区域
|
||||||
|
SystemPanel // 系统插件显示区域
|
||||||
|
};
|
||||||
|
|
||||||
///
|
///
|
||||||
/// \brief The PluginsItemInterface class
|
/// \brief The PluginsItemInterface class
|
||||||
/// the dock plugins item interface, all dock plugins should
|
/// the dock plugins item interface, all dock plugins should
|
||||||
/// inheirt this class and override all pure virtual function.
|
/// inheirt this class and override all pure virtual function.
|
||||||
///
|
///
|
||||||
|
|
||||||
class PluginsItemInterface
|
class PluginsItemInterface
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -253,7 +261,7 @@ public:
|
|||||||
/// the icon display on plugin panel
|
/// the icon display on plugin panel
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
virtual const QIcon *icon() { return nullptr; }
|
virtual QIcon icon(const DockPart &) { return QIcon(); }
|
||||||
|
|
||||||
///
|
///
|
||||||
/// the plugin status
|
/// the plugin status
|
||||||
|
@ -136,9 +136,9 @@ void HomeMonitorPlugin::invokedMenuItem(const QString &itemKey, const QString &m
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const QIcon *HomeMonitorPlugin::icon()
|
QIcon HomeMonitorPlugin::icon(const DockPart &)
|
||||||
{
|
{
|
||||||
static QIcon pixMapIcon;
|
QIcon pixMapIcon;
|
||||||
QPixmap pixmap;
|
QPixmap pixmap;
|
||||||
QPainter painter(&pixmap);
|
QPainter painter(&pixmap);
|
||||||
painter.begin(&pixmap);
|
painter.begin(&pixmap);
|
||||||
@ -147,9 +147,8 @@ const QIcon *HomeMonitorPlugin::icon()
|
|||||||
painter.setFont(font);
|
painter.setFont(font);
|
||||||
painter.drawText(QPoint(0, 0), m_pluginWidget->textContent());
|
painter.drawText(QPoint(0, 0), m_pluginWidget->textContent());
|
||||||
painter.end();
|
painter.end();
|
||||||
pixMapIcon.detach();
|
|
||||||
pixMapIcon.addPixmap(pixmap);
|
pixMapIcon.addPixmap(pixmap);
|
||||||
return &pixMapIcon;
|
return pixMapIcon;
|
||||||
}
|
}
|
||||||
|
|
||||||
PluginsItemInterface::PluginStatus HomeMonitorPlugin::status() const
|
PluginsItemInterface::PluginStatus HomeMonitorPlugin::status() const
|
||||||
|
@ -31,7 +31,7 @@ public:
|
|||||||
const QString itemContextMenu(const QString &itemKey) override;
|
const QString itemContextMenu(const QString &itemKey) override;
|
||||||
void invokedMenuItem(const QString &itemKey, const QString &menuId, const bool checked) override;
|
void invokedMenuItem(const QString &itemKey, const QString &menuId, const bool checked) override;
|
||||||
|
|
||||||
const QIcon *icon() override;
|
QIcon icon(const DockPart &) override;
|
||||||
PluginStatus status() const override;
|
PluginStatus status() const override;
|
||||||
bool isPrimary() const override;
|
bool isPrimary() const override;
|
||||||
QString description() const override;
|
QString description() const override;
|
||||||
|
@ -27,6 +27,8 @@ dde-dock 插件是根据 Qt 插件标准所开发的共享库文件(`so`),通
|
|||||||
|
|
||||||
PluginsItemInterface 中定义的接口除了displayMode 和 position(历史遗留),从插件的角度来看都是被动的,只能等待被任务栏的插件机制调用。
|
PluginsItemInterface 中定义的接口除了displayMode 和 position(历史遗留),从插件的角度来看都是被动的,只能等待被任务栏的插件机制调用。
|
||||||
|
|
||||||
|
另外定义了DockPart枚举,用于表示返回图标的位置,分别有快捷插件显示区域,快捷图标区域和系统插件显示区域,主要用于区域插件在不同的位置的显示。
|
||||||
|
|
||||||
|名称|简介|
|
|名称|简介|
|
||||||
|-|-|
|
|-|-|
|
||||||
|pluginName | 返回插件名称,用于在 dde-dock 内部管理插件时使用 `必须实现`|
|
|pluginName | 返回插件名称,用于在 dde-dock 内部管理插件时使用 `必须实现`|
|
||||||
@ -51,7 +53,7 @@ PluginsItemInterface 中定义的接口除了displayMode 和 position(历史
|
|||||||
|refreshIcon | 当插件控件的图标需要更新时此接口被调用|
|
|refreshIcon | 当插件控件的图标需要更新时此接口被调用|
|
||||||
|displayMode | 用于插件主动获取 dde-dock 当前的显示模式|
|
|displayMode | 用于插件主动获取 dde-dock 当前的显示模式|
|
||||||
|position | 用于插件主动获取 dde-dock 当前的位置|
|
|position | 用于插件主动获取 dde-dock 当前的位置|
|
||||||
|icon | 用于返回当前插件在快捷设置面板上的图标,正常状态下显示的图标即可 |
|
|icon | 用于返回当前插件在快捷设置面板、快捷设置图标区域,系统插件显示区域等的图标,正常状态下显示的图标即可 |
|
||||||
|status | 用于返回当前快捷设置插件的状态,激活状态还是禁用状态 |
|
|status | 用于返回当前快捷设置插件的状态,激活状态还是禁用状态 |
|
||||||
|isPrimary | 用于标记当前快捷设置的插件是否为主插件(图标占两个图标位置) |
|
|isPrimary | 用于标记当前快捷设置的插件是否为主插件(图标占两个图标位置) |
|
||||||
|description | 用于返回插件的描述(快捷设置面板中isPrimary为true的时候有用) |
|
|description | 用于返回插件的描述(快捷设置面板中isPrimary为true的时候有用) |
|
||||||
@ -65,6 +67,7 @@ PluginsItemInterface 中定义的接口除了displayMode 和 position(历史
|
|||||||
|itemAdded | 向 dde-dock 添加新的主控件(一个插件可以添加多个主控件它们之间使用`ItemKey`区分)|
|
|itemAdded | 向 dde-dock 添加新的主控件(一个插件可以添加多个主控件它们之间使用`ItemKey`区分)|
|
||||||
|itemUpdate | 通知 dde-dock 有主控件需要更新|
|
|itemUpdate | 通知 dde-dock 有主控件需要更新|
|
||||||
|itemRemoved | 从 dde-dock 移除主控件|
|
|itemRemoved | 从 dde-dock 移除主控件|
|
||||||
|
|updateDockInfo | 当插件图标发生变化的时候,响应该函数 |
|
||||||
|requestWindowAutoHide | 设置 dde-dock 是否允许隐藏,通常被用在任务栏被设置为智能隐藏或始终隐藏而插件又需要让 dde-dock 保持显示状态来显示一些重要信息的场景下|
|
|requestWindowAutoHide | 设置 dde-dock 是否允许隐藏,通常被用在任务栏被设置为智能隐藏或始终隐藏而插件又需要让 dde-dock 保持显示状态来显示一些重要信息的场景下|
|
||||||
|requestRefreshWindowVisible | 通知 dde-dock 更新隐藏状态|
|
|requestRefreshWindowVisible | 通知 dde-dock 更新隐藏状态|
|
||||||
|requestSetAppletVisible | 通知 dde-dock 显示或隐藏插件的弹出面板(鼠标左键点击后弹出的控件)|
|
|requestSetAppletVisible | 通知 dde-dock 显示或隐藏插件的弹出面板(鼠标左键点击后弹出的控件)|
|
||||||
|
@ -32,4 +32,4 @@ target_link_libraries(${PLUGIN_NAME} PRIVATE
|
|||||||
${QGSettings_LIBRARIES}
|
${QGSettings_LIBRARIES}
|
||||||
)
|
)
|
||||||
|
|
||||||
install(TARGETS ${PLUGIN_NAME} LIBRARY DESTINATION lib/dde-dock/plugins/system-trays)
|
install(TARGETS ${PLUGIN_NAME} LIBRARY DESTINATION lib/dde-dock/plugins/quick-trays)
|
||||||
|
@ -185,13 +185,14 @@ void PowerPlugin::pluginSettingsChanged()
|
|||||||
refreshPluginItemsVisible();
|
refreshPluginItemsVisible();
|
||||||
}
|
}
|
||||||
|
|
||||||
const QIcon *PowerPlugin::icon()
|
QIcon PowerPlugin::icon(const DockPart &dockPart)
|
||||||
{
|
{
|
||||||
|
Q_UNUSED(dockPart);
|
||||||
static QIcon batteryIcon;
|
static QIcon batteryIcon;
|
||||||
const QPixmap pixmap = m_powerStatusWidget->getBatteryIcon();
|
const QPixmap pixmap = m_powerStatusWidget->getBatteryIcon();
|
||||||
batteryIcon.detach();
|
batteryIcon.detach();
|
||||||
batteryIcon.addPixmap(pixmap);
|
batteryIcon.addPixmap(pixmap);
|
||||||
return &batteryIcon;
|
return batteryIcon;
|
||||||
}
|
}
|
||||||
|
|
||||||
void PowerPlugin::updateBatteryVisible()
|
void PowerPlugin::updateBatteryVisible()
|
||||||
|
@ -58,7 +58,7 @@ public:
|
|||||||
int itemSortKey(const QString &itemKey) override;
|
int itemSortKey(const QString &itemKey) override;
|
||||||
void setSortKey(const QString &itemKey, const int order) override;
|
void setSortKey(const QString &itemKey, const int order) override;
|
||||||
void pluginSettingsChanged() override;
|
void pluginSettingsChanged() override;
|
||||||
const QIcon *icon() override;
|
QIcon icon(const DockPart &dockPart) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void updateBatteryVisible();
|
void updateBatteryVisible();
|
||||||
|
@ -292,12 +292,14 @@ void ShutdownPlugin::pluginSettingsChanged()
|
|||||||
refreshPluginItemsVisible();
|
refreshPluginItemsVisible();
|
||||||
}
|
}
|
||||||
|
|
||||||
const QIcon *ShutdownPlugin::icon()
|
QIcon ShutdownPlugin::icon(const DockPart &dockPart)
|
||||||
{
|
{
|
||||||
|
Q_UNUSED(dockPart);
|
||||||
|
|
||||||
static QIcon shutdownIcon;
|
static QIcon shutdownIcon;
|
||||||
shutdownIcon.detach();
|
shutdownIcon.detach();
|
||||||
shutdownIcon.addPixmap(m_shutdownWidget->loadPixmap());
|
shutdownIcon.addPixmap(m_shutdownWidget->loadPixmap());
|
||||||
return &shutdownIcon;
|
return shutdownIcon;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShutdownPlugin::loadPlugin()
|
void ShutdownPlugin::loadPlugin()
|
||||||
|
@ -61,7 +61,7 @@ public:
|
|||||||
void setSortKey(const QString &itemKey, const int order) override;
|
void setSortKey(const QString &itemKey, const int order) override;
|
||||||
|
|
||||||
void pluginSettingsChanged() override;
|
void pluginSettingsChanged() override;
|
||||||
const QIcon *icon() override;
|
QIcon icon(const DockPart &dockPart) override;
|
||||||
|
|
||||||
// 休眠待机配置,保持和sessionshell一致
|
// 休眠待机配置,保持和sessionshell一致
|
||||||
const QStringList session_ui_configs {
|
const QStringList session_ui_configs {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user