diff --git a/frame/controller/dockitemcontroller.cpp b/frame/controller/dockitemcontroller.cpp index a69ebf565..c9b147d3d 100644 --- a/frame/controller/dockitemcontroller.cpp +++ b/frame/controller/dockitemcontroller.cpp @@ -48,6 +48,11 @@ const QList DockItemController::itemList() const return m_itemList; } +const QList DockItemController::pluginList() const +{ + return m_pluginsInter->m_pluginList.keys(); +} + bool DockItemController::appIsOnDock(const QString &appDesktop) const { return m_appInter->IsOnDock(appDesktop); diff --git a/frame/controller/dockitemcontroller.h b/frame/controller/dockitemcontroller.h index 78e5dd03e..6dcaeefbd 100644 --- a/frame/controller/dockitemcontroller.h +++ b/frame/controller/dockitemcontroller.h @@ -42,6 +42,7 @@ public: ~DockItemController(); const QList itemList() const; + const QList pluginList() const; bool appIsOnDock(const QString &appDesktop) const; bool itemIsInContainer(DockItem * const item) const; void setDropping(const bool dropping); diff --git a/frame/controller/dockpluginscontroller.h b/frame/controller/dockpluginscontroller.h index 46de8ff1e..ede0d3ba5 100644 --- a/frame/controller/dockpluginscontroller.h +++ b/frame/controller/dockpluginscontroller.h @@ -35,6 +35,8 @@ class DockPluginsController : public QObject, PluginProxyInterface { Q_OBJECT + friend class DockItemController; + public: explicit DockPluginsController(DockItemController *itemControllerInter = 0); ~DockPluginsController(); @@ -61,8 +63,6 @@ private: PluginsItem *pluginItemAt(PluginsItemInterface * const itemInter, const QString &itemKey) const; private: -// QList m_pluginsInterfaceList; -// QList m_pluginLoaderList; QMap> m_pluginList; DockItemController *m_itemControllerInter; }; diff --git a/frame/util/docksettings.cpp b/frame/util/docksettings.cpp index 48c5b03ef..d019cf14e 100644 --- a/frame/util/docksettings.cpp +++ b/frame/util/docksettings.cpp @@ -110,10 +110,15 @@ DockSettings::DockSettings(QWidget *parent) QAction *statusSubMenuAct = new QAction(tr("Status"), this); statusSubMenuAct->setMenu(statusSubMenu); + m_hideSubMenu = new WhiteMenu(&m_settingsMenu); + QAction *hideSubMenuAct = new QAction(tr("Hide"), this); + hideSubMenuAct->setMenu(m_hideSubMenu); + m_settingsMenu.addAction(modeSubMenuAct); m_settingsMenu.addAction(locationSubMenuAct); m_settingsMenu.addAction(sizeSubMenuAct); m_settingsMenu.addAction(statusSubMenuAct); + m_settingsMenu.addAction(hideSubMenuAct); m_settingsMenu.setTitle("Settings Menu"); connect(&m_settingsMenu, &WhiteMenu::triggered, this, &DockSettings::menuActionClicked); @@ -236,6 +241,24 @@ void DockSettings::showDockSettingsMenu() { m_autoHide = false; + qDeleteAll(m_hideSubMenu->actions()); + for (auto *p : m_itemController->pluginList()) + { + if (!p->pluginIsAllowDisable()) + continue; + + const bool enable = !p->pluginIsDisable(); + const QString &name = p->pluginName(); + const QString &display = p->pluginDisplayName(); + + QAction *act = new QAction(display, this); + act->setCheckable(true); + act->setChecked(enable); + act->setData(name); + + m_hideSubMenu->addAction(act); + } + m_fashionModeAct.setChecked(m_displayMode == Fashion); m_efficientModeAct.setChecked(m_displayMode == Efficient); m_topPosAct.setChecked(m_position == Top); @@ -299,6 +322,16 @@ void DockSettings::menuActionClicked(QAction *action) return m_dockInter->setHideMode(KeepHidden); if (action == &m_smartHideAct) return m_dockInter->setHideMode(SmartHide); + + // check plugin hide menu. + const QString &data = action->data().toString(); + if (data.isEmpty()) + return; + for (auto *p : m_itemController->pluginList()) + { + if (p->pluginName() == data) + return p->pluginStateSwitched(); + } } void DockSettings::onPositionChanged() diff --git a/frame/util/docksettings.h b/frame/util/docksettings.h index 27bce8abb..7b582785e 100644 --- a/frame/util/docksettings.h +++ b/frame/util/docksettings.h @@ -113,6 +113,7 @@ private: QSize m_mainWindowSize; WhiteMenu m_settingsMenu; + WhiteMenu *m_hideSubMenu; QAction m_fashionModeAct; QAction m_efficientModeAct; QAction m_topPosAct; diff --git a/interfaces/pluginsiteminterface.h b/interfaces/pluginsiteminterface.h index 10124f65a..5712925f4 100644 --- a/interfaces/pluginsiteminterface.h +++ b/interfaces/pluginsiteminterface.h @@ -47,6 +47,7 @@ public: /// \return /// virtual const QString pluginName() const = 0; + virtual const QString pluginDisplayName() const { return QString(); } /// /// \brief init /// init your plugins, you need to save proxyInter to m_proxyInter @@ -165,6 +166,10 @@ public: /// virtual void setItemIsInContainer(const QString &itemKey, const bool container) {Q_UNUSED(itemKey); Q_UNUSED(container);} + virtual bool pluginIsAllowDisable() { return false; } + virtual bool pluginIsDisable() { return false; } + virtual void pluginStateSwitched() {} + /// /// \brief displayModeChanged /// override this function to receive display mode changed signal diff --git a/plugins/network/networkplugin.cpp b/plugins/network/networkplugin.cpp index 0a3e0f452..9cc89712a 100644 --- a/plugins/network/networkplugin.cpp +++ b/plugins/network/networkplugin.cpp @@ -39,6 +39,11 @@ const QString NetworkPlugin::pluginName() const return "network"; } +const QString NetworkPlugin::pluginDisplayName() const +{ + return tr("Network"); +} + void NetworkPlugin::init(PluginProxyInterface *proxyInter) { m_proxyInter = proxyInter; @@ -75,6 +80,11 @@ void NetworkPlugin::refershIcon(const QString &itemKey) item->refreshIcon(); } +bool NetworkPlugin::pluginIsDisable() +{ + return true; +} + const QString NetworkPlugin::itemCommand(const QString &itemKey) { for (auto deviceItem : m_deviceItemList) diff --git a/plugins/network/networkplugin.h b/plugins/network/networkplugin.h index 5fa093933..f70b1763d 100644 --- a/plugins/network/networkplugin.h +++ b/plugins/network/networkplugin.h @@ -36,9 +36,12 @@ public: explicit NetworkPlugin(QObject *parent = 0); const QString pluginName() const; + const QString pluginDisplayName() const; void init(PluginProxyInterface *proxyInter); void invokedMenuItem(const QString &itemKey, const QString &menuId, const bool checked); void refershIcon(const QString &itemKey); + bool pluginIsAllowDisable() { return true; } + bool pluginIsDisable(); const QString itemCommand(const QString &itemKey); const QString itemContextMenu(const QString &itemKey); QWidget *itemWidget(const QString &itemKey);