feat: 增加回收站和电源插件在控制中心的显示和隐藏

响应DConfig配置文件的变化,根据当前新增或删除的配置来新增或删除插件

Log:
Influence: 从控制中心勾选或者取消勾选回收站和电源插件,观察任务栏的变化
Task: https://pms.uniontech.com/task-view-216841.html
Change-Id: Ia79ae924180d07e1b11f26bd119c83a8932cb80d
This commit is contained in:
donghualin 2022-11-30 11:13:45 +08:00
parent 224066836a
commit 8cb6cb89d7
11 changed files with 194 additions and 50 deletions

View File

@ -137,6 +137,11 @@ ProxyPluginController::ProxyPluginController(QObject *parent)
QMetaObject::invokeMethod(this, &ProxyPluginController::startLoader, Qt::QueuedConnection); QMetaObject::invokeMethod(this, &ProxyPluginController::startLoader, Qt::QueuedConnection);
} }
bool ProxyPluginController::pluginIsLoaded(PluginsItemInterface *itemInter)
{
return m_pluginsItems.contains(itemInter);
}
QPluginLoader *ProxyPluginController::pluginLoader(PluginsItemInterface * const itemInter) QPluginLoader *ProxyPluginController::pluginLoader(PluginsItemInterface * const itemInter)
{ {
QMap<PluginsItemInterface *, QMap<QString, QObject *> > &plugin = pluginsMap(); QMap<PluginsItemInterface *, QMap<QString, QObject *> > &plugin = pluginsMap();

View File

@ -51,6 +51,8 @@ protected:
explicit ProxyPluginController(QObject *parent = nullptr); explicit ProxyPluginController(QObject *parent = nullptr);
~ProxyPluginController() override {} ~ProxyPluginController() override {}
bool pluginIsLoaded(PluginsItemInterface *itemInter) override;
void pluginItemAdded(PluginsItemInterface * const itemInter, const QString &itemKey) override; void pluginItemAdded(PluginsItemInterface * const itemInter, const QString &itemKey) override;
void pluginItemUpdate(PluginsItemInterface * const itemInter, const QString &itemKey) override; void pluginItemUpdate(PluginsItemInterface * const itemInter, const QString &itemKey) override;
void pluginItemRemoved(PluginsItemInterface * const itemInter, const QString &itemKey) override; void pluginItemRemoved(PluginsItemInterface * const itemInter, const QString &itemKey) override;

View File

@ -31,6 +31,7 @@ ToolAppHelper::ToolAppHelper(QWidget *toolAreaWidget, QObject *parent)
: QObject(parent) : QObject(parent)
, m_toolAreaWidget(toolAreaWidget) , m_toolAreaWidget(toolAreaWidget)
, m_displayMode(DisplayMode::Efficient) , m_displayMode(DisplayMode::Efficient)
, m_position(Dock::Position::Bottom)
{ {
connect(QuickSettingController::instance(), &QuickSettingController::pluginInserted, this, [ = ](PluginsItemInterface *itemInter, const QuickSettingController::PluginAttribute pluginAttr) { connect(QuickSettingController::instance(), &QuickSettingController::pluginInserted, this, [ = ](PluginsItemInterface *itemInter, const QuickSettingController::PluginAttribute pluginAttr) {
if (pluginAttr != QuickSettingController::PluginAttribute::Tool) if (pluginAttr != QuickSettingController::PluginAttribute::Tool)
@ -38,27 +39,28 @@ ToolAppHelper::ToolAppHelper(QWidget *toolAreaWidget, QObject *parent)
pluginItemAdded(itemInter); pluginItemAdded(itemInter);
}); });
connect(QuickSettingController::instance(), &QuickSettingController::pluginRemoved, this, [ = ](PluginsItemInterface *itemInter) {
pluginItemRemoved(itemInter);
});
QList<PluginsItemInterface *> pluginItems = QuickSettingController::instance()->pluginItems(QuickSettingController::PluginAttribute::Tool); QList<PluginsItemInterface *> pluginItems = QuickSettingController::instance()->pluginItems(QuickSettingController::PluginAttribute::Tool);
for (PluginsItemInterface *pluginItem : pluginItems) for (PluginsItemInterface *pluginItem : pluginItems)
pluginItemAdded(pluginItem); pluginItemAdded(pluginItem);
updateToolArea();
} }
void ToolAppHelper::setDisplayMode(DisplayMode displayMode) void ToolAppHelper::setDisplayMode(DisplayMode displayMode)
{ {
m_displayMode = displayMode; m_displayMode = displayMode;
updateWidgetStatus();
moveToolWidget(); moveToolWidget();
updateWidgetStatus();
} }
void ToolAppHelper::removePluginItem(DockItem *dockItem) void ToolAppHelper::setPosition(Position position)
{ {
removeToolArea(dockItem); m_toolAreaWidget->setFixedSize(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX);
m_position = position;
if (m_toolAreaWidget->layout()->count() == 0 && toolIsVisible())
updateWidgetStatus();
Q_EMIT requestUpdate();
} }
bool ToolAppHelper::toolIsVisible() const bool ToolAppHelper::toolIsVisible() const
@ -78,11 +80,12 @@ void ToolAppHelper::appendToToolArea(int index, DockItem *dockItem)
Q_EMIT requestUpdate(); Q_EMIT requestUpdate();
} }
bool ToolAppHelper::removeToolArea(DockItem *dockItem) bool ToolAppHelper::removeToolArea(PluginsItemInterface *itemInter)
{ {
QBoxLayout *boxLayout = static_cast<QBoxLayout *>(m_toolAreaWidget->layout()); QBoxLayout *boxLayout = static_cast<QBoxLayout *>(m_toolAreaWidget->layout());
for (int i = 0; i < boxLayout->count(); i++) { for (int i = 0; i < boxLayout->count(); i++) {
if (boxLayout->itemAt(i)->widget() == dockItem) { PluginsItem *dockItem = qobject_cast<PluginsItem *>(boxLayout->itemAt(i)->widget());
if (dockItem && dockItem->pluginItem() == itemInter) {
boxLayout->removeWidget(dockItem); boxLayout->removeWidget(dockItem);
return true; return true;
} }
@ -115,6 +118,38 @@ void ToolAppHelper::moveToolWidget()
} }
} }
void ToolAppHelper::updateToolArea()
{
bool oldVisible = m_toolAreaWidget->isVisible();
QLayout *layout = m_toolAreaWidget->layout();
if (m_position == Dock::Position::Bottom || m_position == Dock::Position::Top) {
int size = 0;
for (int i = 0; i < layout->count(); i++) {
PluginsItem *dockItem = qobject_cast<PluginsItem *>(layout->itemAt(i)->widget());
if (!dockItem)
continue;
size += dockItem->width();
}
m_toolAreaWidget->setFixedWidth(size);
m_toolAreaWidget->setVisible(size > 0);
} else {
int size = 0;
for (int i = 0; i < layout->count(); i++) {
PluginsItem *dockItem = qobject_cast<PluginsItem *>(layout->itemAt(i)->widget());
if (!dockItem)
continue;
size += dockItem->height();
}
m_toolAreaWidget->setFixedHeight(size);
m_toolAreaWidget->setVisible(size > 0);
}
bool isVisible = m_toolAreaWidget->isVisible();
if (oldVisible != isVisible)
Q_EMIT toolVisibleChanged(isVisible);
}
void ToolAppHelper::updateWidgetStatus() void ToolAppHelper::updateWidgetStatus()
{ {
bool oldVisible = toolIsVisible(); bool oldVisible = toolIsVisible();
@ -130,13 +165,9 @@ void ToolAppHelper::updateWidgetStatus()
Q_EMIT toolVisibleChanged(visible); Q_EMIT toolVisibleChanged(visible);
} }
bool ToolAppHelper::pluginInTool(DockItem *dockItem) const bool ToolAppHelper::pluginInTool(PluginsItemInterface *itemInter) const
{ {
PluginsItem *pluginItem = qobject_cast<PluginsItem *>(dockItem); return (QuickSettingController::instance()->pluginAttribute(itemInter) == QuickSettingController::PluginAttribute::Tool);
if (!pluginItem)
return false;
return (QuickSettingController::instance()->pluginAttribute(pluginItem->pluginItem()) == QuickSettingController::PluginAttribute::Tool);
} }
void ToolAppHelper::pluginItemAdded(PluginsItemInterface *itemInter) void ToolAppHelper::pluginItemAdded(PluginsItemInterface *itemInter)
@ -145,9 +176,23 @@ void ToolAppHelper::pluginItemAdded(PluginsItemInterface *itemInter)
return; return;
QuickSettingController *quickController = QuickSettingController::instance(); QuickSettingController *quickController = QuickSettingController::instance();
PluginsItem *pluginItem = quickController->pluginItemWidget(itemInter); if (pluginInTool(itemInter)) {
if (pluginInTool(pluginItem)) PluginsItem *pluginItem = quickController->pluginItemWidget(itemInter);
appendToToolArea(0, pluginItem); appendToToolArea(0, pluginItem);
updateToolArea();
Q_EMIT requestUpdate();
}
}
void ToolAppHelper::pluginItemRemoved(PluginsItemInterface *itemInter)
{
QuickSettingController *quickController = QuickSettingController::instance();
if (pluginInTool(itemInter)) {
PluginsItem *pluginItem = quickController->pluginItemWidget(itemInter);
removeToolArea(pluginItem->pluginItem());
updateToolArea();
Q_EMIT requestUpdate();
}
} }
bool ToolAppHelper::pluginExists(PluginsItemInterface *itemInter) const bool ToolAppHelper::pluginExists(PluginsItemInterface *itemInter) const

View File

@ -41,7 +41,7 @@ public:
explicit ToolAppHelper(QWidget *toolAreaWidget, QObject *parent = nullptr); explicit ToolAppHelper(QWidget *toolAreaWidget, QObject *parent = nullptr);
void setDisplayMode(DisplayMode displayMode); void setDisplayMode(DisplayMode displayMode);
void removePluginItem(DockItem *dockItem); void setPosition(Dock::Position position);
bool toolIsVisible() const; bool toolIsVisible() const;
Q_SIGNALS: Q_SIGNALS:
@ -50,17 +50,20 @@ Q_SIGNALS:
private: private:
void appendToToolArea(int index, DockItem *dockItem); void appendToToolArea(int index, DockItem *dockItem);
bool removeToolArea(DockItem *dockItem); bool removeToolArea(PluginsItemInterface *itemInter);
void moveToolWidget(); void moveToolWidget();
void updateToolArea();
void updateWidgetStatus(); void updateWidgetStatus();
bool pluginInTool(DockItem *dockItem) const; bool pluginInTool(PluginsItemInterface *itemInter) const;
void pluginItemAdded(PluginsItemInterface *itemInter); void pluginItemAdded(PluginsItemInterface *itemInter);
void pluginItemRemoved(PluginsItemInterface *itemInter);
bool pluginExists(PluginsItemInterface *itemInter) const; bool pluginExists(PluginsItemInterface *itemInter) const;
private: private:
QWidget *m_toolAreaWidget; QWidget *m_toolAreaWidget;
DisplayMode m_displayMode; DisplayMode m_displayMode;
Dock::Position m_position;
QList<DockItem *> m_sequentPluginItems; QList<DockItem *> m_sequentPluginItems;
}; };

View File

@ -48,17 +48,19 @@ PluginsItem::PluginsItem(PluginsItemInterface *const pluginInter, const QString
{ {
qDebug() << "load plugins item: " << pluginInter->pluginName() << itemKey << m_centralWidget; qDebug() << "load plugins item: " << pluginInter->pluginName() << itemKey << m_centralWidget;
m_centralWidget->setParent(this); if (m_centralWidget) {
m_centralWidget->setVisible(true); m_centralWidget->setParent(this);
m_centralWidget->setObjectName(pluginInter->pluginName() + "-centralwidget"); m_centralWidget->setVisible(true);
m_centralWidget->installEventFilter(this); m_centralWidget->setObjectName(pluginInter->pluginName() + "-centralwidget");
m_centralWidget->installEventFilter(this);
QBoxLayout *hLayout = new QHBoxLayout; QBoxLayout *hLayout = new QHBoxLayout;
hLayout->addWidget(m_centralWidget); hLayout->addWidget(m_centralWidget);
hLayout->setSpacing(0); hLayout->setSpacing(0);
hLayout->setMargin(0); hLayout->setMargin(0);
setLayout(hLayout); setLayout(hLayout);
}
setAccessibleName(pluginInter->pluginName()); setAccessibleName(pluginInter->pluginName());
setAttribute(Qt::WA_TranslucentBackground); setAttribute(Qt::WA_TranslucentBackground);

View File

@ -24,6 +24,7 @@
#include "pluginsiteminterface_v20.h" #include "pluginsiteminterface_v20.h"
#include "pluginadapter.h" #include "pluginadapter.h"
#include "utils.h" #include "utils.h"
#include "settingconfig.h"
#include <DNotifySender> #include <DNotifySender>
#include <DSysInfo> #include <DSysInfo>
@ -49,6 +50,7 @@ AbstractPluginsController::AbstractPluginsController(QObject *parent)
refreshPluginSettings(); refreshPluginSettings();
connect(SETTINGCONFIG, &SettingConfig::valueChanged, this, &AbstractPluginsController::onConfigChanged);
connect(m_dockDaemonInter, &DockInter::PluginSettingsSynced, this, &AbstractPluginsController::refreshPluginSettings, Qt::QueuedConnection); connect(m_dockDaemonInter, &DockInter::PluginSettingsSynced, this, &AbstractPluginsController::refreshPluginSettings, Qt::QueuedConnection);
} }
@ -95,7 +97,9 @@ void AbstractPluginsController::itemAdded(PluginsItemInterface * const itemInter
pluginAdapter->setItemKey(itemKey); pluginAdapter->setItemKey(itemKey);
m_pluginExists << pluginItem; m_pluginExists << pluginItem;
pluginItemAdded(pluginItem, itemKey); m_pluginItemKeyMap[pluginItem] = itemKey;
if (canAddedPlugin(pluginItem))
pluginItemAdded(pluginItem, itemKey);
} }
void AbstractPluginsController::itemUpdate(PluginsItemInterface * const itemInter, const QString &itemKey) void AbstractPluginsController::itemUpdate(PluginsItemInterface * const itemInter, const QString &itemKey)
@ -106,6 +110,7 @@ void AbstractPluginsController::itemUpdate(PluginsItemInterface * const itemInte
void AbstractPluginsController::itemRemoved(PluginsItemInterface * const itemInter, const QString &itemKey) void AbstractPluginsController::itemRemoved(PluginsItemInterface * const itemInter, const QString &itemKey)
{ {
m_pluginExists.removeOne(itemInter); m_pluginExists.removeOne(itemInter);
m_pluginItemKeyMap.remove(itemInter);
pluginItemRemoved(getPluginInterface(itemInter), itemKey); pluginItemRemoved(getPluginInterface(itemInter), itemKey);
} }
@ -483,3 +488,56 @@ bool AbstractPluginsController::eventFilter(QObject *o, QEvent *e)
return false; return false;
} }
bool AbstractPluginsController::canAddRemove(PluginsItemInterface *plugin) const
{
if (!plugin->flags() & PluginFlag::Attribute_CanSetting)
return false;
if (plugin->flags() & PluginFlag::Type_Tool)
return true;
if (plugin->flags() & PluginFlag::Type_System)
return true;
return false;
}
bool AbstractPluginsController::canAddedPlugin(PluginsItemInterface *plugin) const
{
if (!canAddRemove(plugin))
return true;
const QStringList configPlugins = SETTINGCONFIG->value("Dock_Quick_Plugin_Name").toStringList();
return configPlugins.contains(plugin->pluginName());
}
void AbstractPluginsController::onConfigChanged(const QString &key, const QVariant &value)
{
QStringList pluginNames = value.toStringList();
if (key == "Dock_Quick_Plugin_Name") {
// 这里只处理工具插件(回收站)和系统插件(电源插件)
for (PluginsItemInterface *plugin : pluginCurrent()) {
if (!canAddRemove(plugin))
continue;
const QString itemKey = m_pluginItemKeyMap.value(plugin);
if (!pluginNames.contains(plugin->pluginName()) && pluginIsLoaded(plugin)) {
// 如果当前配置中不包含当前插件,但是当前插件已经加载,那么就移除该插件
pluginItemRemoved(plugin, itemKey);
QWidget *itemWidget = plugin->itemWidget(itemKey);
if (itemWidget)
itemWidget->setVisible(false);
} else if (pluginNames.contains(plugin->pluginName()) && !pluginIsLoaded(plugin)) {
// 如果当前配置中包含当前插件,但是当前插件并未加载,那么就加载该插件
pluginItemAdded(plugin, itemKey);
// 只有工具插件是通过QWidget的方式进行显示的因此这里只处理工具插件
if (plugin->flags() & PluginFlag::Type_Tool) {
QWidget *itemWidget = plugin->itemWidget(itemKey);
if (itemWidget)
itemWidget->setVisible(true);
}
}
}
}
}

View File

@ -62,6 +62,17 @@ public:
Q_SIGNALS: Q_SIGNALS:
void pluginLoaderFinished(); void pluginLoaderFinished();
protected:
virtual bool pluginIsLoaded(PluginsItemInterface *itemInter) { return true; }
QObject *pluginItemAt(PluginsItemInterface * const itemInter, const QString &itemKey) const;
PluginsItemInterface *pluginInterAt(const QString &itemKey);
PluginsItemInterface *pluginInterAt(QObject *destItem);
bool eventFilter(QObject *o, QEvent *e) override;
bool canAddRemove(PluginsItemInterface *plugin) const;
bool canAddedPlugin(PluginsItemInterface *plugin) const;
private: private:
// implements PluginProxyInterface // implements PluginProxyInterface
void saveValue(PluginsItemInterface *const itemInter, const QString &key, const QVariant &value) override; void saveValue(PluginsItemInterface *const itemInter, const QString &key, const QVariant &value) override;
@ -74,15 +85,8 @@ private:
void requestWindowAutoHide(PluginsItemInterface * const itemInter, const QString &itemKey, const bool autoHide) override; void requestWindowAutoHide(PluginsItemInterface * const itemInter, const QString &itemKey, const bool autoHide) override;
void requestRefreshWindowVisible(PluginsItemInterface * const itemInter, const QString &itemKey) override; void requestRefreshWindowVisible(PluginsItemInterface * const itemInter, const QString &itemKey) override;
void requestSetAppletVisible(PluginsItemInterface * const itemInter, const QString &itemKey, const bool visible) override; void requestSetAppletVisible(PluginsItemInterface * const itemInter, const QString &itemKey, const bool visible) override;
PluginsItemInterface *getPluginInterface(PluginsItemInterface * const itemInter); PluginsItemInterface *getPluginInterface(PluginsItemInterface * const itemInter);
protected:
QObject *pluginItemAt(PluginsItemInterface * const itemInter, const QString &itemKey) const;
PluginsItemInterface *pluginInterAt(const QString &itemKey);
PluginsItemInterface *pluginInterAt(QObject *destItem);
bool eventFilter(QObject *o, QEvent *e) override;
protected Q_SLOTS: protected Q_SLOTS:
void startLoader(PluginLoader *loader); void startLoader(PluginLoader *loader);
@ -92,6 +96,7 @@ private slots:
void loadPlugin(const QString &pluginFile); void loadPlugin(const QString &pluginFile);
void initPlugin(PluginsItemInterface *interface); void initPlugin(PluginsItemInterface *interface);
void refreshPluginSettings(); void refreshPluginSettings();
void onConfigChanged(const QString &key, const QVariant &value);
private: private:
QDBusConnectionInterface *m_dbusDaemonInterface; QDBusConnectionInterface *m_dbusDaemonInterface;
@ -103,6 +108,7 @@ private:
// filepath, interface, loaded // filepath, interface, loaded
QMap<QPair<QString, PluginsItemInterface *>, bool> m_pluginLoadMap; QMap<QPair<QString, PluginsItemInterface *>, bool> m_pluginLoadMap;
QList<PluginsItemInterface *> m_pluginExists; QList<PluginsItemInterface *> m_pluginExists;
QMap<PluginsItemInterface *, QString> m_pluginItemKeyMap;
QJsonObject m_pluginSettingsObject; QJsonObject m_pluginSettingsObject;
QMap<qulonglong, PluginAdapter *> m_pluginAdapterMap; QMap<qulonglong, PluginAdapter *> m_pluginAdapterMap;

View File

@ -45,6 +45,7 @@ DockTrayWindow::DockTrayWindow(DockInter *dockInter, QWidget *parent)
, m_position(Dock::Position::Bottom) , m_position(Dock::Position::Bottom)
, m_displayMode(Dock::DisplayMode::Efficient) , m_displayMode(Dock::DisplayMode::Efficient)
, m_mainBoxLayout(new QBoxLayout(QBoxLayout::Direction::RightToLeft, this)) , m_mainBoxLayout(new QBoxLayout(QBoxLayout::Direction::RightToLeft, this))
, m_frontWidget(new QWidget(this))
, m_toolWidget(new QWidget(this)) , m_toolWidget(new QWidget(this))
, m_toolLayout(new QBoxLayout(QBoxLayout::RightToLeft, m_toolWidget)) , m_toolLayout(new QBoxLayout(QBoxLayout::RightToLeft, m_toolWidget))
, m_toolLineLabel(new QLabel(this)) , m_toolLineLabel(new QLabel(this))
@ -78,6 +79,7 @@ void DockTrayWindow::setDisplayMode(const Dock::DisplayMode &displayMode)
{ {
m_displayMode = displayMode; m_displayMode = displayMode;
moveToolPlugin(); moveToolPlugin();
updateToolWidget();
// 如果当前模式为高效模式则设置当前的trayView为其计算位置的参照 // 如果当前模式为高效模式则设置当前的trayView为其计算位置的参照
if (displayMode == Dock::DisplayMode::Efficient) if (displayMode == Dock::DisplayMode::Efficient)
ExpandIconWidget::popupTrayView()->setReferGridView(m_trayView); ExpandIconWidget::popupTrayView()->setReferGridView(m_trayView);
@ -131,6 +133,9 @@ void DockTrayWindow::resizeEvent(QResizeEvent *event)
void DockTrayWindow::paintEvent(QPaintEvent *event) void DockTrayWindow::paintEvent(QPaintEvent *event)
{ {
QWidget::paintEvent(event); QWidget::paintEvent(event);
if (!m_toolLineLabel->isVisible())
return;
QPainter painter(this); QPainter painter(this);
QColor color; QColor color;
if (DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::LightType) { if (DGuiApplicationHelper::instance()->themeType() == DGuiApplicationHelper::LightType) {
@ -271,6 +276,13 @@ void DockTrayWindow::moveToolPlugin()
} }
} }
void DockTrayWindow::updateToolWidget()
{
m_toolWidget->setVisible(m_toolLayout->count() > 0);
m_toolLineLabel->setVisible(m_toolLayout->count() > 0);
m_frontWidget->setVisible(m_toolLayout->count() > 0);
}
void DockTrayWindow::initUi() void DockTrayWindow::initUi()
{ {
m_toolLayout->setContentsMargins(0, 0, 0, 0); m_toolLayout->setContentsMargins(0, 0, 0, 0);
@ -279,7 +291,7 @@ void DockTrayWindow::initUi()
m_systemPuginWidget->setDisplayMode(Dock::DisplayMode::Efficient); m_systemPuginWidget->setDisplayMode(Dock::DisplayMode::Efficient);
m_mainBoxLayout->setContentsMargins(0, 0, 0, 0); m_mainBoxLayout->setContentsMargins(0, 0, 0, 0);
m_mainBoxLayout->setSpacing(0); m_mainBoxLayout->setSpacing(0);
m_mainBoxLayout->addSpacing(FRONTSPACING); m_mainBoxLayout->addWidget(m_frontWidget);
m_mainBoxLayout->addWidget(m_toolWidget); m_mainBoxLayout->addWidget(m_toolWidget);
m_mainBoxLayout->addSpacing(SPLITESPACE); m_mainBoxLayout->addSpacing(SPLITESPACE);
m_mainBoxLayout->addWidget(m_toolLineLabel); m_mainBoxLayout->addWidget(m_toolLineLabel);
@ -293,6 +305,7 @@ void DockTrayWindow::initUi()
m_toolLineLabel->setFixedSize(0, 0); m_toolLineLabel->setFixedSize(0, 0);
m_mainBoxLayout->addStretch(); m_mainBoxLayout->addStretch();
updateToolWidget();
} }
void DockTrayWindow::initConnection() void DockTrayWindow::initConnection()
@ -353,6 +366,7 @@ void DockTrayWindow::onUpdateComponentSize()
case Dock::Position::Left: case Dock::Position::Left:
case Dock::Position::Right: case Dock::Position::Right:
m_toolLineLabel->setFixedSize(width() * 0.6, SPLITERSIZE); m_toolLineLabel->setFixedSize(width() * 0.6, SPLITERSIZE);
m_frontWidget->setFixedSize(QWIDGETSIZE_MAX, FRONTSPACING);
m_dateTimeWidget->setFixedSize(QWIDGETSIZE_MAX, m_dateTimeWidget->suitableSize().height()); m_dateTimeWidget->setFixedSize(QWIDGETSIZE_MAX, m_dateTimeWidget->suitableSize().height());
m_systemPuginWidget->setFixedSize(QWIDGETSIZE_MAX, m_systemPuginWidget->suitableSize().height()); m_systemPuginWidget->setFixedSize(QWIDGETSIZE_MAX, m_systemPuginWidget->suitableSize().height());
m_quickIconWidget->setFixedSize(QWIDGETSIZE_MAX, m_quickIconWidget->suitableSize().height()); m_quickIconWidget->setFixedSize(QWIDGETSIZE_MAX, m_quickIconWidget->suitableSize().height());
@ -361,6 +375,7 @@ void DockTrayWindow::onUpdateComponentSize()
case Dock::Position::Top: case Dock::Position::Top:
case Dock::Position::Bottom: case Dock::Position::Bottom:
m_toolLineLabel->setFixedSize(SPLITERSIZE, height() * 0.6); m_toolLineLabel->setFixedSize(SPLITERSIZE, height() * 0.6);
m_frontWidget->setFixedSize(FRONTSPACING, QWIDGETSIZE_MAX);
m_dateTimeWidget->setFixedSize(m_dateTimeWidget->suitableSize().width(), QWIDGETSIZE_MAX); m_dateTimeWidget->setFixedSize(m_dateTimeWidget->suitableSize().width(), QWIDGETSIZE_MAX);
m_systemPuginWidget->setFixedSize(m_systemPuginWidget->suitableSize().width(), QWIDGETSIZE_MAX); m_systemPuginWidget->setFixedSize(m_systemPuginWidget->suitableSize().width(), QWIDGETSIZE_MAX);
m_quickIconWidget->setFixedSize(m_quickIconWidget->suitableSize().width(), QWIDGETSIZE_MAX); m_quickIconWidget->setFixedSize(m_quickIconWidget->suitableSize().width(), QWIDGETSIZE_MAX);
@ -380,6 +395,7 @@ void DockTrayWindow::onItemAdded(PluginsItemInterface *itemInter)
pluginItem->setVisible(true); pluginItem->setVisible(true);
m_toolLayout->addWidget(pluginItem); m_toolLayout->addWidget(pluginItem);
updateToolWidget();
Q_EMIT requestUpdate(); Q_EMIT requestUpdate();
} }
@ -396,6 +412,7 @@ void DockTrayWindow::onItemRemove(PluginsItemInterface *itemInter)
continue; continue;
m_toolLayout->removeWidget(pluginItem); m_toolLayout->removeWidget(pluginItem);
updateToolWidget();
Q_EMIT requestUpdate(); Q_EMIT requestUpdate();
break; break;

View File

@ -68,6 +68,7 @@ private:
void resizeTool() const; void resizeTool() const;
bool pluginExists(PluginsItemInterface *itemInter) const; bool pluginExists(PluginsItemInterface *itemInter) const;
void moveToolPlugin(); void moveToolPlugin();
void updateToolWidget();
private Q_SLOTS: private Q_SLOTS:
void onUpdateComponentSize(); void onUpdateComponentSize();
@ -80,6 +81,7 @@ private:
Dock::Position m_position; Dock::Position m_position;
Dock::DisplayMode m_displayMode; Dock::DisplayMode m_displayMode;
QBoxLayout *m_mainBoxLayout; QBoxLayout *m_mainBoxLayout;
QWidget *m_frontWidget;
QWidget *m_toolWidget; QWidget *m_toolWidget;
QBoxLayout *m_toolLayout; QBoxLayout *m_toolLayout;
QLabel *m_toolLineLabel; QLabel *m_toolLineLabel;

View File

@ -371,6 +371,7 @@ void MainPanelControl::setPositonValue(Dock::Position position)
m_position = position; m_position = position;
m_tray->setPositon(position); m_tray->setPositon(position);
m_toolHelper->setPosition(position);
QMetaObject::invokeMethod(this, &MainPanelControl::updateMainPanelLayout, Qt::QueuedConnection); QMetaObject::invokeMethod(this, &MainPanelControl::updateMainPanelLayout, Qt::QueuedConnection);
} }
@ -428,9 +429,6 @@ void MainPanelControl::removeItem(DockItem *item)
case DockItem::Placeholder: case DockItem::Placeholder:
m_recentHelper->removeAppItem(item); m_recentHelper->removeAppItem(item);
break; break;
case DockItem::Plugins:
m_toolHelper->removePluginItem(item);
break;
case DockItem::AppMultiWindow: case DockItem::AppMultiWindow:
m_multiHelper->removeMultiWindow(static_cast<AppMultiItem *>(item)); m_multiHelper->removeMultiWindow(static_cast<AppMultiItem *>(item));
break; break;
@ -908,7 +906,6 @@ DockItem *MainPanelControl::dropTargetItem(DockItem *sourceItem, QPoint point)
return targetItem; return targetItem;
} }
void MainPanelControl::updateDisplayMode() void MainPanelControl::updateDisplayMode()
{ {
updateModeChange(); updateModeChange();
@ -918,7 +915,6 @@ void MainPanelControl::updateDisplayMode()
void MainPanelControl::updateModeChange() void MainPanelControl::updateModeChange()
{ {
m_toolAreaWidget->setVisible(m_displayMode == DisplayMode::Fashion); m_toolAreaWidget->setVisible(m_displayMode == DisplayMode::Fashion);
m_toolSonAreaWidget->setVisible(m_displayMode == DisplayMode::Fashion);
onRecentVisibleChanged(m_recentHelper->recentIsVisible()); onRecentVisibleChanged(m_recentHelper->recentIsVisible());
onDockAppVisibleChanged(m_recentHelper->dockAppIsVisible()); onDockAppVisibleChanged(m_recentHelper->dockAppIsVisible());
onToolVisibleChanged(m_toolHelper->toolIsVisible()); onToolVisibleChanged(m_toolHelper->toolIsVisible());

View File

@ -177,14 +177,22 @@ QSize TrayManagerWindow::suitableSize(const Dock::Position &position) const
{ {
QMargins m = m_mainLayout->contentsMargins(); QMargins m = m_mainLayout->contentsMargins();
if (position == Dock::Position::Top || position == Dock::Position::Bottom) { if (position == Dock::Position::Top || position == Dock::Position::Bottom) {
return QSize(appDatetimeSize(position) + int width = appDatetimeSize(position);
m_systemPluginWidget->suitableSize(position).width() + m_mainLayout->spacing() + int systemWidgetWidth = m_systemPluginWidget->suitableSize(position).width();
m.left() + m.right(), QWIDGETSIZE_MAX); if (systemWidgetWidth > 0) {
width += systemWidgetWidth + m_mainLayout->spacing();
}
width += m.left() + m.right();
return QSize(width, QWIDGETSIZE_MAX);
} }
return QSize(QWIDGETSIZE_MAX, appDatetimeSize(position) + int height = appDatetimeSize(position);
m_systemPluginWidget->suitableSize(position).height() + m_mainLayout->spacing() + int systemWidgetHeight = m_systemPluginWidget->suitableSize(position).height();
m.top() + m.bottom()); if (systemWidgetHeight > 0) {
height += systemWidgetHeight + m_mainLayout->spacing();
}
height += m.top() + m.bottom();
return QSize(QWIDGETSIZE_MAX, height);
} }
// 用于返回需要绘制的圆形区域 // 用于返回需要绘制的圆形区域