mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-03 00:15:21 +00:00
feat: 任务栏插件显示大小新增支持自定义宽度(或高度)
新增插件大小策略枚举类型,支持"跟随系统"和"自定义"两种类型,默认类型为"跟随系统",那么 这样系统自带的插件大小就不需要重新写代码控制,当需要控制插件大小时,返回"自定义"类型即 可. Log: 任务栏插件显示大小新增支持自定义宽度(或高度) Task: https://pms.uniontech.com/zentao/task-view-44090.html Change-Id: I6c883a66e6fe37b14b78e34d093aaf86149ee972
This commit is contained in:
parent
039b985355
commit
9188fff15b
@ -42,16 +42,21 @@ void DockPluginsController::itemAdded(PluginsItemInterface *const itemInter, con
|
|||||||
if (mPluginsMap[itemInter].contains(itemKey))
|
if (mPluginsMap[itemInter].contains(itemKey))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// 取 plugin api
|
||||||
|
QPluginLoader *pluginLoader = qobject_cast<QPluginLoader*>(mPluginsMap[itemInter].value("pluginloader"));
|
||||||
|
const QJsonObject &meta = pluginLoader->metaData().value("MetaData").toObject();
|
||||||
|
const QString &pluginApi = meta.value("api").toString();
|
||||||
|
|
||||||
PluginsItem *item = nullptr;
|
PluginsItem *item = nullptr;
|
||||||
if (itemInter->pluginName() == "tray") {
|
if (itemInter->pluginName() == "tray") {
|
||||||
item = new TrayPluginItem(itemInter, itemKey);
|
item = new TrayPluginItem(itemInter, itemKey, pluginApi);
|
||||||
if (item->graphicsEffect()) {
|
if (item->graphicsEffect()) {
|
||||||
item->graphicsEffect()->setEnabled(false);
|
item->graphicsEffect()->setEnabled(false);
|
||||||
}
|
}
|
||||||
connect(static_cast<TrayPluginItem *>(item), &TrayPluginItem::trayVisableCountChanged,
|
connect(static_cast<TrayPluginItem *>(item), &TrayPluginItem::trayVisableCountChanged,
|
||||||
this, &DockPluginsController::trayVisableCountChanged, Qt::UniqueConnection);
|
this, &DockPluginsController::trayVisableCountChanged, Qt::UniqueConnection);
|
||||||
} else {
|
} else {
|
||||||
item = new PluginsItem(itemInter, itemKey);
|
item = new PluginsItem(itemInter, itemKey, pluginApi);
|
||||||
}
|
}
|
||||||
|
|
||||||
mPluginsMap[itemInter][itemKey] = item;
|
mPluginsMap[itemInter][itemKey] = item;
|
||||||
|
@ -23,6 +23,7 @@
|
|||||||
#include "pluginsitem.h"
|
#include "pluginsitem.h"
|
||||||
#include "pluginsiteminterface.h"
|
#include "pluginsiteminterface.h"
|
||||||
|
|
||||||
|
#include "util/utils.h"
|
||||||
#include "util/imagefactory.h"
|
#include "util/imagefactory.h"
|
||||||
|
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
@ -36,10 +37,11 @@
|
|||||||
|
|
||||||
QPoint PluginsItem::MousePressPoint = QPoint();
|
QPoint PluginsItem::MousePressPoint = QPoint();
|
||||||
|
|
||||||
PluginsItem::PluginsItem(PluginsItemInterface *const pluginInter, const QString &itemKey, QWidget *parent)
|
PluginsItem::PluginsItem(PluginsItemInterface *const pluginInter, const QString &itemKey, const QString &plginApi, QWidget *parent)
|
||||||
: DockItem(parent)
|
: DockItem(parent)
|
||||||
, m_pluginInter(pluginInter)
|
, m_pluginInter(pluginInter)
|
||||||
, m_centralWidget(m_pluginInter->itemWidget(itemKey))
|
, m_centralWidget(m_pluginInter->itemWidget(itemKey))
|
||||||
|
, m_pluginApi(plginApi)
|
||||||
, m_itemKey(itemKey)
|
, m_itemKey(itemKey)
|
||||||
, m_dragging(false)
|
, m_dragging(false)
|
||||||
, m_gsettings(nullptr)
|
, m_gsettings(nullptr)
|
||||||
@ -99,6 +101,16 @@ QString PluginsItem::pluginName() const
|
|||||||
return m_pluginInter->pluginName();
|
return m_pluginInter->pluginName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PluginsItemInterface::PluginSizePolicy PluginsItem::pluginSizePolicy() const
|
||||||
|
{
|
||||||
|
// 插件版本大于 1.2.2 才能使用 PluginsItemInterface::pluginSizePolicy 函数
|
||||||
|
if (Utils::comparePluginApi(m_pluginApi, "1.2.2") > 0) {
|
||||||
|
return m_pluginInter->pluginSizePolicy();
|
||||||
|
} else {
|
||||||
|
return PluginsItemInterface::System;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
DockItem::ItemType PluginsItem::itemType() const
|
DockItem::ItemType PluginsItem::itemType() const
|
||||||
{
|
{
|
||||||
if (m_pluginInter->type() == PluginsItemInterface::Normal) {
|
if (m_pluginInter->type() == PluginsItemInterface::Normal) {
|
||||||
|
@ -31,7 +31,7 @@ class PluginsItem : public DockItem
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit PluginsItem(PluginsItemInterface *const pluginInter, const QString &itemKey, QWidget *parent = nullptr);
|
explicit PluginsItem(PluginsItemInterface *const pluginInter, const QString &itemKey, const QString &plginApi, QWidget *parent = nullptr);
|
||||||
~PluginsItem() override;
|
~PluginsItem() override;
|
||||||
|
|
||||||
int itemSortKey() const;
|
int itemSortKey() const;
|
||||||
@ -41,6 +41,7 @@ public:
|
|||||||
void setInContainer(const bool container);
|
void setInContainer(const bool container);
|
||||||
|
|
||||||
QString pluginName() const;
|
QString pluginName() const;
|
||||||
|
PluginsItemInterface::PluginSizePolicy pluginSizePolicy() const;
|
||||||
|
|
||||||
using DockItem::showContextMenu;
|
using DockItem::showContextMenu;
|
||||||
using DockItem::hidePopup;
|
using DockItem::hidePopup;
|
||||||
@ -80,6 +81,7 @@ private:
|
|||||||
PluginsItemInterface *const m_pluginInter;
|
PluginsItemInterface *const m_pluginInter;
|
||||||
QWidget *m_centralWidget;
|
QWidget *m_centralWidget;
|
||||||
|
|
||||||
|
const QString m_pluginApi;
|
||||||
const QString m_itemKey;
|
const QString m_itemKey;
|
||||||
bool m_dragging;
|
bool m_dragging;
|
||||||
|
|
||||||
|
@ -24,8 +24,8 @@
|
|||||||
#include <QEvent>
|
#include <QEvent>
|
||||||
#include <QGSettings>
|
#include <QGSettings>
|
||||||
|
|
||||||
TrayPluginItem::TrayPluginItem(PluginsItemInterface * const pluginInter, const QString &itemKey, QWidget *parent)
|
TrayPluginItem::TrayPluginItem(PluginsItemInterface * const pluginInter, const QString &itemKey, const QString &pluginApi, QWidget *parent)
|
||||||
: PluginsItem(pluginInter, itemKey, parent)
|
: PluginsItem(pluginInter, itemKey, pluginApi, parent)
|
||||||
{
|
{
|
||||||
centralWidget()->installEventFilter(this);
|
centralWidget()->installEventFilter(this);
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@ class TrayPluginItem : public PluginsItem
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TrayPluginItem(PluginsItemInterface* const pluginInter, const QString &itemKey, QWidget *parent = nullptr);
|
TrayPluginItem(PluginsItemInterface* const pluginInter, const QString &itemKey, const QString &pluginApi, QWidget *parent = nullptr);
|
||||||
|
|
||||||
inline ItemType itemType() const override {return ItemType::TrayPlugin;}
|
inline ItemType itemType() const override {return ItemType::TrayPlugin;}
|
||||||
|
|
||||||
|
@ -1058,10 +1058,17 @@ void MainPanelControl::calcuDockIconSize(int w, int h, PluginsItem *trashPlugin,
|
|||||||
if (layout) {
|
if (layout) {
|
||||||
PluginsItem *pItem = static_cast<PluginsItem *>(layout->itemAt(0)->widget());
|
PluginsItem *pItem = static_cast<PluginsItem *>(layout->itemAt(0)->widget());
|
||||||
if (pItem && pItem != trashPlugin && pItem != shutdownPlugin && pItem != keyboardPlugin && pItem !=notificationPlugin) {
|
if (pItem && pItem != trashPlugin && pItem != shutdownPlugin && pItem != keyboardPlugin && pItem !=notificationPlugin) {
|
||||||
if (pItem->pluginName() == "datetime") {
|
// 根据大小策略控制插件大小
|
||||||
pItem->setFixedSize(pItem->sizeHint().width(), h);
|
switch (pItem->pluginSizePolicy()) {
|
||||||
} else {
|
case PluginsItemInterface::System:
|
||||||
pItem->setFixedSize(tray_item_size, tray_item_size);
|
pItem->setFixedSize(tray_item_size, tray_item_size);
|
||||||
|
break;
|
||||||
|
case PluginsItemInterface::Custom:
|
||||||
|
pItem->setFixedSize(pItem->sizeHint().width(), h);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
pItem->setFixedSize(tray_item_size, tray_item_size);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1073,10 +1080,17 @@ void MainPanelControl::calcuDockIconSize(int w, int h, PluginsItem *trashPlugin,
|
|||||||
if (layout) {
|
if (layout) {
|
||||||
PluginsItem *pItem = static_cast<PluginsItem *>(layout->itemAt(0)->widget());
|
PluginsItem *pItem = static_cast<PluginsItem *>(layout->itemAt(0)->widget());
|
||||||
if (pItem && pItem != trashPlugin && pItem != shutdownPlugin && pItem != keyboardPlugin && pItem !=notificationPlugin) {
|
if (pItem && pItem != trashPlugin && pItem != shutdownPlugin && pItem != keyboardPlugin && pItem !=notificationPlugin) {
|
||||||
if (pItem->pluginName() == "datetime") {
|
// 根据大小策略控制插件大小
|
||||||
pItem->setFixedSize(w, pItem->sizeHint().height());
|
switch (pItem->pluginSizePolicy()) {
|
||||||
} else {
|
case PluginsItemInterface::System:
|
||||||
pItem->setFixedSize(tray_item_size, tray_item_size);
|
pItem->setFixedSize(tray_item_size, tray_item_size);
|
||||||
|
break;
|
||||||
|
case PluginsItemInterface::Custom:
|
||||||
|
pItem->setFixedSize(w, pItem->sizeHint().height());
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
pItem->setFixedSize(tray_item_size, tray_item_size);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,6 +32,7 @@ static const QStringList CompatiblePluginApiList {
|
|||||||
"1.1.1",
|
"1.1.1",
|
||||||
"1.2",
|
"1.2",
|
||||||
"1.2.1",
|
"1.2.1",
|
||||||
|
"1.2.2",
|
||||||
DOCK_PLUGIN_API_VERSION
|
DOCK_PLUGIN_API_VERSION
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -194,7 +195,10 @@ void AbstractPluginsController::loadPlugin(const QString &pluginFile)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_pluginsMap.insert(interface, QMap<QString, QObject *>());
|
// 保存 PluginLoader 对象指针
|
||||||
|
QMap<QString, QObject *> interfaceData;
|
||||||
|
interfaceData["pluginloader"] = pluginLoader;
|
||||||
|
m_pluginsMap.insert(interface, interfaceData);
|
||||||
|
|
||||||
QString dbusService = meta.value("depends-daemon-dbus-service").toString();
|
QString dbusService = meta.value("depends-daemon-dbus-service").toString();
|
||||||
if (!dbusService.isEmpty() && !m_dbusDaemonInterface->isServiceRegistered(dbusService).value()) {
|
if (!dbusService.isEmpty() && !m_dbusDaemonInterface->isServiceRegistered(dbusService).value()) {
|
||||||
|
@ -82,6 +82,47 @@ inline bool isSettingConfigured(const QString& id, const QString& path, const QS
|
|||||||
}
|
}
|
||||||
return v.toBool();
|
return v.toBool();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief 比较两个插件版本号的大小
|
||||||
|
* @param pluginApi1 第一个插件版本号
|
||||||
|
* @param pluginApi2 第二个插件版本号
|
||||||
|
* @return 0:两个版本号相等,1:第一个版本号大,-1:第二个版本号大
|
||||||
|
*/
|
||||||
|
inline int comparePluginApi(const QString &pluginApi1, const QString &pluginApi2) {
|
||||||
|
// 版本号相同
|
||||||
|
if (pluginApi1 == pluginApi2)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
// 拆分版本号
|
||||||
|
QStringList subPluginApis1 = pluginApi1.split(".", QString::SkipEmptyParts, Qt::CaseSensitive);
|
||||||
|
QStringList subPluginApis2 = pluginApi2.split(".", QString::SkipEmptyParts, Qt::CaseSensitive);
|
||||||
|
for (int i = 0; i < subPluginApis1.size(); ++i) {
|
||||||
|
auto subPluginApi1 = subPluginApis1[i];
|
||||||
|
if (subPluginApis2.size() > i) {
|
||||||
|
auto subPluginApi2 = subPluginApis2[i];
|
||||||
|
|
||||||
|
// 相等判断下一个子版本号
|
||||||
|
if (subPluginApi1 == subPluginApi2)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// 转成整形比较
|
||||||
|
if (subPluginApi1.toInt() > subPluginApi2.toInt()) {
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 循环结束但是没有返回,说明子版本号个数不同,且前面的子版本号都相同
|
||||||
|
// 子版本号多的版本号大
|
||||||
|
if (subPluginApis1.size() > subPluginApis2.size()) {
|
||||||
|
return 1;
|
||||||
|
} else {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // UTILS
|
#endif // UTILS
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
namespace Dock {
|
namespace Dock {
|
||||||
|
|
||||||
#define DOCK_PLUGIN_MIME "dock/plugin"
|
#define DOCK_PLUGIN_MIME "dock/plugin"
|
||||||
#define DOCK_PLUGIN_API_VERSION "1.2.2"
|
#define DOCK_PLUGIN_API_VERSION "1.2.3"
|
||||||
|
|
||||||
#define PROP_DISPLAY_MODE "DisplayMode"
|
#define PROP_DISPLAY_MODE "DisplayMode"
|
||||||
|
|
||||||
|
@ -40,6 +40,14 @@ public:
|
|||||||
Fixed
|
Fixed
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Plugin size policy
|
||||||
|
*/
|
||||||
|
enum PluginSizePolicy {
|
||||||
|
System = 1 << 0, // Follow the system
|
||||||
|
Custom = 1 << 1 // The custom
|
||||||
|
};
|
||||||
|
|
||||||
///
|
///
|
||||||
/// \brief ~PluginsItemInterface
|
/// \brief ~PluginsItemInterface
|
||||||
/// DON'T try to delete m_proxyInter.
|
/// DON'T try to delete m_proxyInter.
|
||||||
@ -229,6 +237,12 @@ public:
|
|||||||
///
|
///
|
||||||
virtual PluginType type() { return Normal; }
|
virtual PluginType type() { return Normal; }
|
||||||
|
|
||||||
|
///
|
||||||
|
/// \brief plugin size policy
|
||||||
|
/// default plugin size policy
|
||||||
|
///
|
||||||
|
virtual PluginSizePolicy pluginSizePolicy() const { return System; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
///
|
///
|
||||||
/// \brief m_proxyInter
|
/// \brief m_proxyInter
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
{
|
{
|
||||||
"api": "1.1.1"
|
"api": "1.2.3"
|
||||||
}
|
}
|
||||||
|
@ -42,6 +42,11 @@ DatetimePlugin::DatetimePlugin(QObject *parent)
|
|||||||
sessionBus.connect("com.deepin.daemon.Timedate", "/com/deepin/daemon/Timedate", "org.freedesktop.DBus.Properties", "PropertiesChanged", this, SLOT(propertiesChanged()));
|
sessionBus.connect("com.deepin.daemon.Timedate", "/com/deepin/daemon/Timedate", "org.freedesktop.DBus.Properties", "PropertiesChanged", this, SLOT(propertiesChanged()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PluginsItemInterface::PluginSizePolicy DatetimePlugin::pluginSizePolicy() const
|
||||||
|
{
|
||||||
|
return PluginsItemInterface::Custom;
|
||||||
|
}
|
||||||
|
|
||||||
const QString DatetimePlugin::pluginName() const
|
const QString DatetimePlugin::pluginName() const
|
||||||
{
|
{
|
||||||
return "datetime";
|
return "datetime";
|
||||||
|
@ -42,6 +42,8 @@ class DatetimePlugin : public QObject, PluginsItemInterface
|
|||||||
public:
|
public:
|
||||||
explicit DatetimePlugin(QObject *parent = nullptr);
|
explicit DatetimePlugin(QObject *parent = nullptr);
|
||||||
|
|
||||||
|
PluginSizePolicy pluginSizePolicy() const override;
|
||||||
|
|
||||||
const QString pluginName() const override;
|
const QString pluginName() const override;
|
||||||
const QString pluginDisplayName() const override;
|
const QString pluginDisplayName() const override;
|
||||||
void init(PluginProxyInterface *proxyInter) override;
|
void init(PluginProxyInterface *proxyInter) override;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user