From 5660e0ec9c60209310d66369f0529fd052b3af8b Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Sat, 3 Feb 2018 22:19:35 +0200 Subject: [PATCH] preparing layouts menu in containmentactions --- app/dockcorona.cpp | 3 ++ app/dockcorona.h | 12 ++++- containmentactions/contextmenu/menu.cpp | 71 ++++++++++++++++++------- containmentactions/contextmenu/menu.h | 1 + 4 files changed, 67 insertions(+), 20 deletions(-) diff --git a/app/dockcorona.cpp b/app/dockcorona.cpp index 8be16aeab..bd56705ed 100644 --- a/app/dockcorona.cpp +++ b/app/dockcorona.cpp @@ -48,6 +48,8 @@ #include #include +#include + #include #include #include @@ -56,6 +58,7 @@ #include #include #include +#include #include #include diff --git a/app/dockcorona.h b/app/dockcorona.h index db8953c5c..70e8e00a4 100644 --- a/app/dockcorona.h +++ b/app/dockcorona.h @@ -27,10 +27,14 @@ #include #include -#include +//#include #include -#include +//#include + +namespace KDeclarative { +class QmlObject; +} namespace Plasma { class Corona; @@ -38,6 +42,10 @@ class Containment; class Types; } +namespace PlasmaQuick { +class ConfigView; +} + namespace KActivities { class Consumer; } diff --git a/containmentactions/contextmenu/menu.cpp b/containmentactions/contextmenu/menu.cpp index 42433fa29..23bf1c5d8 100644 --- a/containmentactions/contextmenu/menu.cpp +++ b/containmentactions/contextmenu/menu.cpp @@ -19,8 +19,13 @@ #include "menu.h" +#include "../../app/dockcorona.h" +#include "../../app/layoutmanager.h" +#include "../../liblattedock/dock.h" + #include #include +#include #include #include @@ -64,24 +69,6 @@ void Menu::makeActions() m_configureAction = new QAction(QIcon::fromTheme("configure"), i18nc("dock/panel settings window", "Dock/Panel Settings"), this); m_configureAction->setShortcut(QKeySequence()); connect(m_configureAction, &QAction::triggered, this, &Menu::requestConfiguration); - - /*foreach (const QString &id, m_consumer.activities(KActivities::Info::Running)) { - KActivities::Info info(id); - QAction *action = new QAction(QIcon::fromTheme(info.icon()), info.name(), this); - action->setData(id); - - if (id == m_consumer.currentActivity()) { - QFont font = action->font(); - font.setBold(true); - action->setFont(font); - } - - connect(action, &QAction::triggered, [ = ]() { - switchTo(action); - }); - - m_actions << action; - }*/ } @@ -100,6 +87,8 @@ QList Menu::contextualActions() actions << m_addWidgetsAction; actions << m_configureAction; + populateLayoutsMenu(); + return actions; } @@ -114,6 +103,52 @@ QAction *Menu::action(const QString &name) return nullptr; } +void Menu::populateLayoutsMenu() +{ + auto *dockCorona = qobject_cast(containment()->corona()); + + if (dockCorona && dockCorona->layoutManager()->menuLayouts().count() > 1) { + const QIcon identityIcon = QIcon::fromTheme("user-identity"); + QMenu *layoutsMenu = new QMenu; //(desktopMenu); + + QAction *layoutsAction = new QAction(identityIcon, i18n("Layouts"), this); + layoutsAction->setIcon(identityIcon); + layoutsAction->setCheckable(false); + layoutsAction->setText(i18n("Layouts")); + layoutsAction->setStatusTip(i18n("Switch to another layout")); + + QStringList activeLayouts = dockCorona->layoutManager()->activeLayoutsNames(); + Latte::Dock::LayoutsMemoryUsage memoryUsage = dockCorona->layoutManager()->memoryUsage(); + QString currentName = dockCorona->layoutManager()->currentLayoutName(); + + foreach (auto layout, dockCorona->layoutManager()->menuLayouts()) { + QString currentText = (memoryUsage == Latte::Dock::MultipleLayouts && layout == currentName) ? + (" " + i18nc("current layout", "(Current)")) : ""; + QString layoutName = layout + currentText; + + QAction *layoutAction = new QAction(layoutName, layoutsMenu); + + layoutAction->setCheckable(true); + + if (activeLayouts.contains(layout)) { + layoutAction->setChecked(true); + } else { + layoutAction->setChecked(false); + } + + connect(layoutAction, &QAction::triggered, this, [this, dockCorona, layout] { + dockCorona->layoutManager()->switchToLayout(layout); + }); + + layoutsMenu->addAction(layoutAction); + + qDebug() << layout; + } + + layoutsMenu->addSeparator(); + } +} + K_EXPORT_PLASMA_CONTAINMENTACTIONS_WITH_JSON(lattecontextmenu, Menu, "plasma-containmentactions-lattecontextmenu.json") #include "menu.moc" diff --git a/containmentactions/contextmenu/menu.h b/containmentactions/contextmenu/menu.h index 6efc98935..18f6a5676 100644 --- a/containmentactions/contextmenu/menu.h +++ b/containmentactions/contextmenu/menu.h @@ -39,6 +39,7 @@ public: private Q_SLOTS: void makeActions(); void requestConfiguration(); + void populateLayoutsMenu(); private: QListm_actions;