From c7df15ce0eed83f6149983bdf400ce84eb034cd9 Mon Sep 17 00:00:00 2001 From: donghualin Date: Mon, 28 Nov 2022 14:37:54 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=8F=92=E4=BB=B6=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=A0=87=E8=AE=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 插件接口类中增加flag接口,用于返回不同的插件的属性,在各插件的实现中实现这个接口 Log: Influence: 任务栏插件 Task: https://pms.uniontech.com/task-view-220099.html Change-Id: I9e8b8e0f5f9818856b70a76bbda9eb31dc4ebf65 --- frame/pluginadapter/pluginadapter.cpp | 13 +++++++-- frame/pluginadapter/pluginadapter.h | 4 ++- frame/util/abstractpluginscontroller.cpp | 2 +- interfaces/pluginsiteminterface.h | 28 +++++++++++++++++++ plugins/bluetooth/bluetoothplugin.cpp | 9 ++++++ plugins/bluetooth/bluetoothplugin.h | 1 + plugins/multitasking/multitaskingplugin.cpp | 5 ++++ plugins/multitasking/multitaskingplugin.h | 1 + .../overlay-warning-plugin.cpp | 5 ++++ .../overlay-warning/overlay-warning-plugin.h | 1 + plugins/power/powerplugin.cpp | 9 ++++++ plugins/power/powerplugin.h | 1 + plugins/show-desktop/showdesktopplugin.cpp | 5 ++++ plugins/show-desktop/showdesktopplugin.h | 1 + plugins/shutdown/shutdownplugin.cpp | 5 ++++ plugins/shutdown/shutdownplugin.h | 1 + plugins/sound/soundplugin.cpp | 9 ++++++ plugins/sound/soundplugin.h | 1 + plugins/trash/trashplugin.cpp | 6 ++++ plugins/trash/trashplugin.h | 1 + 20 files changed, 104 insertions(+), 4 deletions(-) diff --git a/frame/pluginadapter/pluginadapter.cpp b/frame/pluginadapter/pluginadapter.cpp index 0e0443a07..ed00d9a53 100644 --- a/frame/pluginadapter/pluginadapter.cpp +++ b/frame/pluginadapter/pluginadapter.cpp @@ -25,8 +25,9 @@ #define ICONWIDTH 24 #define ICONHEIGHT 24 -PluginAdapter::PluginAdapter(PluginsItemInterface_V20 *pluginInter) +PluginAdapter::PluginAdapter(PluginsItemInterface_V20 *pluginInter, QPluginLoader *pluginLoader) : m_pluginInter(pluginInter) + , m_pluginLoader(pluginLoader) { } @@ -191,7 +192,15 @@ PluginsItemInterface::PluginStatus PluginAdapter::status() const QString PluginAdapter::description() const { - return tr("actived"); + return m_pluginInter->pluginDisplayName(); +} + +PluginFlags PluginAdapter::flags() const +{ + if (m_pluginLoader->fileName().contains(TRAY_PATH)) + return PluginFlag::Type_Tray | PluginFlag::Attribute_CanDrag | PluginFlag::Attribute_CanInsert; + + return PluginsItemInterface::flags(); } void PluginAdapter::setItemKey(const QString &itemKey) diff --git a/frame/pluginadapter/pluginadapter.h b/frame/pluginadapter/pluginadapter.h index ad9c2a271..c60b8eb8c 100644 --- a/frame/pluginadapter/pluginadapter.h +++ b/frame/pluginadapter/pluginadapter.h @@ -36,7 +36,7 @@ class PluginAdapter : public QObject, public PluginsItemInterface Q_INTERFACES(PluginsItemInterface) public: - PluginAdapter(PluginsItemInterface_V20 *pluginInter); + PluginAdapter(PluginsItemInterface_V20 *pluginInter, QPluginLoader *pluginLoader); ~PluginAdapter(); const QString pluginName() const override; @@ -68,12 +68,14 @@ public: QIcon icon(const DockPart &dockPart) override; PluginStatus status() const override; QString description() const override; + PluginFlags flags() const override; void setItemKey(const QString &itemKey); private: PluginsItemInterface_V20 *m_pluginInter; QString m_itemKey; + QPluginLoader *m_pluginLoader; }; #endif // PLUGINADAPTER_H diff --git a/frame/util/abstractpluginscontroller.cpp b/frame/util/abstractpluginscontroller.cpp index b1fde6484..4f143a562 100644 --- a/frame/util/abstractpluginscontroller.cpp +++ b/frame/util/abstractpluginscontroller.cpp @@ -287,7 +287,7 @@ void AbstractPluginsController::loadPlugin(const QString &pluginFile) PluginsItemInterface_V20 *interface_v20 = qobject_cast(pluginLoader->instance()); if (interface_v20) { // 将v20插件接口通过适配器转换成v23的接口,方便在后面识别 - PluginAdapter *pluginAdapter = new PluginAdapter(interface_v20); + PluginAdapter *pluginAdapter = new PluginAdapter(interface_v20, pluginLoader); // 将适配器的地址保存到map列表中,因为适配器自己会调用itemAdded方法,转换成PluginsItemInterface类,但是实际上它 // 对应的是PluginAdapter类,因此,这个map用于在后面的itemAdded方法中用来查找 m_pluginAdapterMap[(qulonglong)(interface_v20)] = pluginAdapter; diff --git a/interfaces/pluginsiteminterface.h b/interfaces/pluginsiteminterface.h index 7aa1dd28d..4957db431 100644 --- a/interfaces/pluginsiteminterface.h +++ b/interfaces/pluginsiteminterface.h @@ -35,6 +35,28 @@ enum class DockPart { DCCSetting // 显示在控制中心个性化设置的图标 }; +enum PluginFlag { + Type_NoneFlag = 0x1, // 插件类型-没有任何的属性,不在任何地方显示 + Type_Common = 0x2, // 插件类型-快捷插件区 + Type_Tool = 0x4, // 插件类型-工具插件,例如回收站 + Type_System = 0x8, // 插件类型-系统插件,例如关机插件 + Type_Tray = 0x10, // 插件类型-托盘区,例如U盘插件 + Type_Fixed = 0x20, // 插件类型-固定区域,例如多任务视图和显示桌面 + + Quick_Single = 0x40, // 当插件类型为Common时,快捷插件区域只有一列的那种插件 + Quick_Multi = 0x80, // 当插件类型为Common时,快捷插件区占两列的那种插件 + Quick_Full = 0x100, // 当插件类型为Common时,快捷插件区占用4列的那种插件,例如声音、亮度设置和音乐等 + + Attribute_CanDrag = 0x200, // 插件属性-是否支持拖动 + Attribute_CanInsert = 0x400, // 插件属性-是否支持在其前面插入其他的插件,普通的快捷插件是支持的 + Attribute_CanSetting = 0x800, // 插件属性-是否可以在控制中心设置显示或隐藏 + + FlagMask = 0xffffffff // 掩码 +}; + +Q_DECLARE_FLAGS(PluginFlags, PluginFlag) +Q_DECLARE_OPERATORS_FOR_FLAGS(PluginFlags) + // 快捷面板详情页面的itemWidget对应的itemKey #define QUICK_ITEM_KEY "quick_item_key" /// @@ -284,6 +306,12 @@ public: /// virtual QIcon icon(const DockPart &dockPart, int themeType) { return icon(dockPart); } + /// + /// \brief m_proxyInter + /// return the falgs for current plugin + /// + virtual PluginFlags flags() const { return PluginFlag::Type_Common | PluginFlag::Quick_Single | PluginFlag::Attribute_CanDrag | PluginFlag::Attribute_CanInsert | PluginFlag::Attribute_CanSetting; } + protected: /// /// \brief m_proxyInter diff --git a/plugins/bluetooth/bluetoothplugin.cpp b/plugins/bluetooth/bluetoothplugin.cpp index e64b25b76..4c1c5fe51 100644 --- a/plugins/bluetooth/bluetoothplugin.cpp +++ b/plugins/bluetooth/bluetoothplugin.cpp @@ -192,6 +192,15 @@ QString BluetoothPlugin::description() const return tr("close"); } +PluginFlags BluetoothPlugin::flags() const +{ + return PluginFlag::Type_Common + | PluginFlag::Quick_Multi + | PluginFlag::Attribute_CanDrag + | PluginFlag::Attribute_CanInsert + | PluginFlag::Attribute_CanSetting; +} + void BluetoothPlugin::refreshPluginItemsVisible() { if (pluginIsDisable()) diff --git a/plugins/bluetooth/bluetoothplugin.h b/plugins/bluetooth/bluetoothplugin.h index 7190e538f..c8508acdf 100644 --- a/plugins/bluetooth/bluetoothplugin.h +++ b/plugins/bluetooth/bluetoothplugin.h @@ -60,6 +60,7 @@ public: QIcon icon(const DockPart &dockPart, int themeType) override; PluginStatus status() const override; QString description() const override; + PluginFlags flags() const override; private: void refreshPluginItemsVisible(); diff --git a/plugins/multitasking/multitaskingplugin.cpp b/plugins/multitasking/multitaskingplugin.cpp index 1ffafb5f6..70d750151 100644 --- a/plugins/multitasking/multitaskingplugin.cpp +++ b/plugins/multitasking/multitaskingplugin.cpp @@ -184,6 +184,11 @@ PluginsItemInterface::PluginType MultitaskingPlugin::type() return PluginType::Fixed; } +PluginFlags MultitaskingPlugin::flags() const +{ + return PluginFlag::Type_Fixed; +} + void MultitaskingPlugin::updateVisible() { if (pluginIsDisable() || !DWindowManagerHelper::instance()->hasComposite()) { diff --git a/plugins/multitasking/multitaskingplugin.h b/plugins/multitasking/multitaskingplugin.h index 813fa0d2d..9da4037c0 100644 --- a/plugins/multitasking/multitaskingplugin.h +++ b/plugins/multitasking/multitaskingplugin.h @@ -55,6 +55,7 @@ public: void setSortKey(const QString &itemKey, const int order) override; void pluginSettingsChanged() override; PluginType type() override; + PluginFlags flags() const override; private: void updateVisible(); diff --git a/plugins/overlay-warning/overlay-warning-plugin.cpp b/plugins/overlay-warning/overlay-warning-plugin.cpp index f6d8d2969..504ec497a 100644 --- a/plugins/overlay-warning/overlay-warning-plugin.cpp +++ b/plugins/overlay-warning/overlay-warning-plugin.cpp @@ -132,6 +132,11 @@ void OverlayWarningPlugin::setSortKey(const QString &itemKey, const int order) m_proxyInter->saveValue(this, key, order); } +PluginFlags OverlayWarningPlugin::flags() const +{ + return PluginFlag::Type_NoneFlag; +} + void OverlayWarningPlugin::loadPlugin() { if (m_pluginLoaded) { diff --git a/plugins/overlay-warning/overlay-warning-plugin.h b/plugins/overlay-warning/overlay-warning-plugin.h index ebb793184..95da096d3 100644 --- a/plugins/overlay-warning/overlay-warning-plugin.h +++ b/plugins/overlay-warning/overlay-warning-plugin.h @@ -59,6 +59,7 @@ public: int itemSortKey(const QString &itemKey) override; void setSortKey(const QString &itemKey, const int order) override; + PluginFlags flags() const override; private: void loadPlugin(); diff --git a/plugins/power/powerplugin.cpp b/plugins/power/powerplugin.cpp index a55fe2123..b4f7faf9a 100644 --- a/plugins/power/powerplugin.cpp +++ b/plugins/power/powerplugin.cpp @@ -187,6 +187,15 @@ QIcon PowerPlugin::icon(const DockPart &dockPart) return batteryIcon; } +PluginFlags PowerPlugin::flags() const +{ + // 电池插件只在任务栏上面展示,不在快捷面板展示,并且可以拖动,可以在其前面插入其他插件,可以在控制中心设置是否显示隐藏 + return PluginFlag::Type_Common + | PluginFlag::Attribute_CanDrag + | PluginFlag::Attribute_CanInsert + | PluginFlag::Attribute_CanSetting; +} + void PowerPlugin::updateBatteryVisible() { const bool exist = !m_powerInter->batteryPercentage().isEmpty(); diff --git a/plugins/power/powerplugin.h b/plugins/power/powerplugin.h index 8d2ae4420..17979b7a0 100644 --- a/plugins/power/powerplugin.h +++ b/plugins/power/powerplugin.h @@ -58,6 +58,7 @@ public: void setSortKey(const QString &itemKey, const int order) override; void pluginSettingsChanged() override; QIcon icon(const DockPart &dockPart) override; + PluginFlags flags() const override; private: void updateBatteryVisible(); diff --git a/plugins/show-desktop/showdesktopplugin.cpp b/plugins/show-desktop/showdesktopplugin.cpp index 526e14829..3f6b94f31 100644 --- a/plugins/show-desktop/showdesktopplugin.cpp +++ b/plugins/show-desktop/showdesktopplugin.cpp @@ -164,6 +164,11 @@ PluginsItemInterface::PluginType ShowDesktopPlugin::type() return PluginType::Fixed; } +PluginFlags ShowDesktopPlugin::flags() const +{ + return PluginFlag::Type_Fixed; +} + void ShowDesktopPlugin::updateVisible() { if (pluginIsDisable()) diff --git a/plugins/show-desktop/showdesktopplugin.h b/plugins/show-desktop/showdesktopplugin.h index 49d01fd52..75b7d10bf 100644 --- a/plugins/show-desktop/showdesktopplugin.h +++ b/plugins/show-desktop/showdesktopplugin.h @@ -54,6 +54,7 @@ public: void setSortKey(const QString &itemKey, const int order) override; void pluginSettingsChanged() override; PluginType type() override; + PluginFlags flags() const override; private: void updateVisible(); diff --git a/plugins/shutdown/shutdownplugin.cpp b/plugins/shutdown/shutdownplugin.cpp index f1c0e2ab4..d1dc7cee6 100644 --- a/plugins/shutdown/shutdownplugin.cpp +++ b/plugins/shutdown/shutdownplugin.cpp @@ -312,6 +312,11 @@ QIcon ShutdownPlugin::icon(const DockPart &dockPart) return shutdownIcon; } +PluginFlags ShutdownPlugin::flags() const +{ + return PluginFlag::Type_System | PluginFlag::Attribute_CanSetting; +} + void ShutdownPlugin::loadPlugin() { if (m_pluginLoaded) { diff --git a/plugins/shutdown/shutdownplugin.h b/plugins/shutdown/shutdownplugin.h index 1f5c65d1d..aac7b11e5 100644 --- a/plugins/shutdown/shutdownplugin.h +++ b/plugins/shutdown/shutdownplugin.h @@ -62,6 +62,7 @@ public: void pluginSettingsChanged() override; QIcon icon(const DockPart &dockPart) override; + PluginFlags flags() const override; // 休眠待机配置,保持和sessionshell一致 const QStringList session_ui_configs { diff --git a/plugins/sound/soundplugin.cpp b/plugins/sound/soundplugin.cpp index c0b67258a..60df9c6ff 100644 --- a/plugins/sound/soundplugin.cpp +++ b/plugins/sound/soundplugin.cpp @@ -160,6 +160,15 @@ PluginsItemInterface::PluginStatus SoundPlugin::status() const return SoundPlugin::Active; } +PluginFlags SoundPlugin::flags() const +{ + return PluginFlag::Type_Common + | PluginFlag::Quick_Full + | PluginFlag::Attribute_CanDrag + | PluginFlag::Attribute_CanInsert + | PluginFlag::Attribute_CanSetting; +} + void SoundPlugin::refreshPluginItemsVisible() { if (pluginIsDisable()) diff --git a/plugins/sound/soundplugin.h b/plugins/sound/soundplugin.h index ca3202862..566c8666a 100644 --- a/plugins/sound/soundplugin.h +++ b/plugins/sound/soundplugin.h @@ -54,6 +54,7 @@ public: QIcon icon(const DockPart &) override; QIcon icon(const DockPart &dockPart, int themeType) override; PluginStatus status() const override; + PluginFlags flags() const override; private: void refreshPluginItemsVisible(); diff --git a/plugins/trash/trashplugin.cpp b/plugins/trash/trashplugin.cpp index a87e14f47..0add94fc3 100644 --- a/plugins/trash/trashplugin.cpp +++ b/plugins/trash/trashplugin.cpp @@ -196,6 +196,12 @@ QIcon TrashPlugin::icon(const DockPart &dockPart, int themeType) return QIcon(); } +PluginFlags TrashPlugin::flags() const +{ + return PluginFlag::Type_Tool + | PluginFlag::Attribute_CanSetting; +} + void TrashPlugin::refreshPluginItemsVisible() { if (pluginIsDisable()) { diff --git a/plugins/trash/trashplugin.h b/plugins/trash/trashplugin.h index 0ac09d8e4..b986f8ec7 100644 --- a/plugins/trash/trashplugin.h +++ b/plugins/trash/trashplugin.h @@ -63,6 +63,7 @@ public: void displayModeChanged(const Dock::DisplayMode displayMode) override; void pluginSettingsChanged() override; QIcon icon(const DockPart &dockPart, int themeType) override; + PluginFlags flags() const override; private: void refreshPluginItemsVisible();