feat: 插件增加标记

插件接口类中增加flag接口,用于返回不同的插件的属性,在各插件的实现中实现这个接口

Log:
Influence: 任务栏插件
Task: https://pms.uniontech.com/task-view-220099.html
Change-Id: I9e8b8e0f5f9818856b70a76bbda9eb31dc4ebf65
This commit is contained in:
donghualin 2022-11-28 14:37:54 +08:00
parent 6bcaead473
commit c7df15ce0e
20 changed files with 104 additions and 4 deletions

View File

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

View File

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

View File

@ -287,7 +287,7 @@ void AbstractPluginsController::loadPlugin(const QString &pluginFile)
PluginsItemInterface_V20 *interface_v20 = qobject_cast<PluginsItemInterface_V20 *>(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;

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -164,6 +164,11 @@ PluginsItemInterface::PluginType ShowDesktopPlugin::type()
return PluginType::Fixed;
}
PluginFlags ShowDesktopPlugin::flags() const
{
return PluginFlag::Type_Fixed;
}
void ShowDesktopPlugin::updateVisible()
{
if (pluginIsDisable())

View File

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

View File

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

View File

@ -62,6 +62,7 @@ public:
void pluginSettingsChanged() override;
QIcon icon(const DockPart &dockPart) override;
PluginFlags flags() const override;
// 休眠待机配置保持和sessionshell一致
const QStringList session_ui_configs {

View File

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

View File

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

View File

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

View File

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