mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-01 07:05:48 +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))
|
||||
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;
|
||||
if (itemInter->pluginName() == "tray") {
|
||||
item = new TrayPluginItem(itemInter, itemKey);
|
||||
item = new TrayPluginItem(itemInter, itemKey, pluginApi);
|
||||
if (item->graphicsEffect()) {
|
||||
item->graphicsEffect()->setEnabled(false);
|
||||
}
|
||||
connect(static_cast<TrayPluginItem *>(item), &TrayPluginItem::trayVisableCountChanged,
|
||||
this, &DockPluginsController::trayVisableCountChanged, Qt::UniqueConnection);
|
||||
} else {
|
||||
item = new PluginsItem(itemInter, itemKey);
|
||||
item = new PluginsItem(itemInter, itemKey, pluginApi);
|
||||
}
|
||||
|
||||
mPluginsMap[itemInter][itemKey] = item;
|
||||
|
@ -23,6 +23,7 @@
|
||||
#include "pluginsitem.h"
|
||||
#include "pluginsiteminterface.h"
|
||||
|
||||
#include "util/utils.h"
|
||||
#include "util/imagefactory.h"
|
||||
|
||||
#include <QPainter>
|
||||
@ -36,10 +37,11 @@
|
||||
|
||||
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)
|
||||
, m_pluginInter(pluginInter)
|
||||
, m_centralWidget(m_pluginInter->itemWidget(itemKey))
|
||||
, m_pluginApi(plginApi)
|
||||
, m_itemKey(itemKey)
|
||||
, m_dragging(false)
|
||||
, m_gsettings(nullptr)
|
||||
@ -99,6 +101,16 @@ QString PluginsItem::pluginName() const
|
||||
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
|
||||
{
|
||||
if (m_pluginInter->type() == PluginsItemInterface::Normal) {
|
||||
|
@ -31,7 +31,7 @@ class PluginsItem : public DockItem
|
||||
Q_OBJECT
|
||||
|
||||
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;
|
||||
|
||||
int itemSortKey() const;
|
||||
@ -41,6 +41,7 @@ public:
|
||||
void setInContainer(const bool container);
|
||||
|
||||
QString pluginName() const;
|
||||
PluginsItemInterface::PluginSizePolicy pluginSizePolicy() const;
|
||||
|
||||
using DockItem::showContextMenu;
|
||||
using DockItem::hidePopup;
|
||||
@ -80,6 +81,7 @@ private:
|
||||
PluginsItemInterface *const m_pluginInter;
|
||||
QWidget *m_centralWidget;
|
||||
|
||||
const QString m_pluginApi;
|
||||
const QString m_itemKey;
|
||||
bool m_dragging;
|
||||
|
||||
|
@ -24,8 +24,8 @@
|
||||
#include <QEvent>
|
||||
#include <QGSettings>
|
||||
|
||||
TrayPluginItem::TrayPluginItem(PluginsItemInterface * const pluginInter, const QString &itemKey, QWidget *parent)
|
||||
: PluginsItem(pluginInter, itemKey, parent)
|
||||
TrayPluginItem::TrayPluginItem(PluginsItemInterface * const pluginInter, const QString &itemKey, const QString &pluginApi, QWidget *parent)
|
||||
: PluginsItem(pluginInter, itemKey, pluginApi, parent)
|
||||
{
|
||||
centralWidget()->installEventFilter(this);
|
||||
}
|
||||
|
@ -29,7 +29,7 @@ class TrayPluginItem : public PluginsItem
|
||||
Q_OBJECT
|
||||
|
||||
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;}
|
||||
|
||||
|
@ -1058,10 +1058,17 @@ void MainPanelControl::calcuDockIconSize(int w, int h, PluginsItem *trashPlugin,
|
||||
if (layout) {
|
||||
PluginsItem *pItem = static_cast<PluginsItem *>(layout->itemAt(0)->widget());
|
||||
if (pItem && pItem != trashPlugin && pItem != shutdownPlugin && pItem != keyboardPlugin && pItem !=notificationPlugin) {
|
||||
if (pItem->pluginName() == "datetime") {
|
||||
pItem->setFixedSize(pItem->sizeHint().width(), h);
|
||||
} else {
|
||||
// 根据大小策略控制插件大小
|
||||
switch (pItem->pluginSizePolicy()) {
|
||||
case PluginsItemInterface::System:
|
||||
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) {
|
||||
PluginsItem *pItem = static_cast<PluginsItem *>(layout->itemAt(0)->widget());
|
||||
if (pItem && pItem != trashPlugin && pItem != shutdownPlugin && pItem != keyboardPlugin && pItem !=notificationPlugin) {
|
||||
if (pItem->pluginName() == "datetime") {
|
||||
pItem->setFixedSize(w, pItem->sizeHint().height());
|
||||
} else {
|
||||
// 根据大小策略控制插件大小
|
||||
switch (pItem->pluginSizePolicy()) {
|
||||
case PluginsItemInterface::System:
|
||||
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.2",
|
||||
"1.2.1",
|
||||
"1.2.2",
|
||||
DOCK_PLUGIN_API_VERSION
|
||||
};
|
||||
|
||||
@ -194,7 +195,10 @@ void AbstractPluginsController::loadPlugin(const QString &pluginFile)
|
||||
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();
|
||||
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();
|
||||
}
|
||||
|
||||
/**
|
||||
* @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
|
||||
|
@ -27,7 +27,7 @@
|
||||
namespace Dock {
|
||||
|
||||
#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"
|
||||
|
||||
|
@ -40,6 +40,14 @@ public:
|
||||
Fixed
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Plugin size policy
|
||||
*/
|
||||
enum PluginSizePolicy {
|
||||
System = 1 << 0, // Follow the system
|
||||
Custom = 1 << 1 // The custom
|
||||
};
|
||||
|
||||
///
|
||||
/// \brief ~PluginsItemInterface
|
||||
/// DON'T try to delete m_proxyInter.
|
||||
@ -229,6 +237,12 @@ public:
|
||||
///
|
||||
virtual PluginType type() { return Normal; }
|
||||
|
||||
///
|
||||
/// \brief plugin size policy
|
||||
/// default plugin size policy
|
||||
///
|
||||
virtual PluginSizePolicy pluginSizePolicy() const { return System; }
|
||||
|
||||
protected:
|
||||
///
|
||||
/// \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()));
|
||||
}
|
||||
|
||||
PluginsItemInterface::PluginSizePolicy DatetimePlugin::pluginSizePolicy() const
|
||||
{
|
||||
return PluginsItemInterface::Custom;
|
||||
}
|
||||
|
||||
const QString DatetimePlugin::pluginName() const
|
||||
{
|
||||
return "datetime";
|
||||
|
@ -42,6 +42,8 @@ class DatetimePlugin : public QObject, PluginsItemInterface
|
||||
public:
|
||||
explicit DatetimePlugin(QObject *parent = nullptr);
|
||||
|
||||
PluginSizePolicy pluginSizePolicy() const override;
|
||||
|
||||
const QString pluginName() const override;
|
||||
const QString pluginDisplayName() const override;
|
||||
void init(PluginProxyInterface *proxyInter) override;
|
||||
|
Loading…
x
Reference in New Issue
Block a user