From 2bb170fba8f815f56c619a1f2ff8a78e28e63462 Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Thu, 8 Apr 2021 12:33:39 +0300 Subject: [PATCH] expose views templates in Views New dialog button --- app/settings/viewsdialog/viewshandler.cpp | 70 +++++++++++++++++++++++ app/settings/viewsdialog/viewshandler.h | 15 ++++- app/templates/templatesmanager.cpp | 2 +- app/templates/templatesmanager.h | 7 +-- 4 files changed, 88 insertions(+), 6 deletions(-) diff --git a/app/settings/viewsdialog/viewshandler.cpp b/app/settings/viewsdialog/viewshandler.cpp index 837c967bd..28730738c 100644 --- a/app/settings/viewsdialog/viewshandler.cpp +++ b/app/settings/viewsdialog/viewshandler.cpp @@ -28,15 +28,22 @@ #include "../settingsdialog/layoutsmodel.h" #include "../settingsdialog/delegates/layoutcmbitemdelegate.h" #include "../../data/layoutstable.h" +#include "../../data/genericbasictable.h" #include "../../lattecorona.h" #include "../../layout/abstractlayout.h" #include "../../layout/centrallayout.h" #include "../../layouts/manager.h" #include "../../layouts/synchronizer.h" +#include "../../templates/templatesmanager.h" +#include "../../tools/commontools.h" // Qt #include +//! KDE +#include +#include + namespace Latte { namespace Settings { namespace Handler { @@ -72,6 +79,21 @@ void ViewsHandler::init() m_ui->layoutsCmb->setModelColumn(Model::Layouts::NAMECOLUMN); m_ui->layoutsCmb->setItemDelegate(new Settings::Layout::Delegate::LayoutCmbItemDelegate(this)); + //! New Button + m_newViewAction = new QAction(i18nc("new view", "&New"), this); + m_newViewAction->setToolTip(i18n("New dock or panel")); + m_newViewAction->setIcon(QIcon::fromTheme("add")); + m_newViewAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_N)); + connectActionWithButton(m_ui->newBtn, m_newViewAction); + connect(m_newViewAction, &QAction::triggered, m_ui->newBtn, &QPushButton::showMenu); + + initViewTemplatesSubMenu(); + m_newViewAction->setMenu(m_viewTemplatesSubMenu); + m_ui->newBtn->setMenu(m_viewTemplatesSubMenu); + + connect(corona()->templatesManager(), &Latte::Templates::Manager::viewTemplatesChanged, this, &ViewsHandler::initViewTemplatesSubMenu); + + //! signals connect(this, &ViewsHandler::currentLayoutChanged, this, &ViewsHandler::reload); reload(); @@ -85,6 +107,48 @@ void ViewsHandler::init() connect(m_viewsController, &Settings::Controller::Views::dataChanged, this, &ViewsHandler::dataChanged); } +void ViewsHandler::initViewTemplatesSubMenu() +{ + + + if (!m_viewTemplatesSubMenu) { + m_viewTemplatesSubMenu = new QMenu(m_ui->newBtn); + m_viewTemplatesSubMenu->setMinimumWidth(m_ui->newBtn->width() * 2); + } else { + m_viewTemplatesSubMenu->clear(); + } + + /*Add View Templates for New Action*/ + Data::GenericBasicTable templates = corona()->templatesManager()->viewTemplates(); + + bool customtemplateseparatoradded{false}; + + for (int i=0; iaddSeparator(); + customtemplateseparatoradded = true; + } + + QAction *newview = m_viewTemplatesSubMenu->addAction(templates[i].name); + newview->setIcon(QIcon::fromTheme("document-new")); + QString templateid = templates[i].id; + + connect(newview, &QAction::triggered, this, [&, templateid]() { + newView(templateid); + }); + } + + if (templates.rowCount() > 0) { + QAction *openTemplatesDirectory = m_viewTemplatesSubMenu->addAction(i18n("Templates...")); + openTemplatesDirectory->setToolTip(i18n("Open templates directory")); + openTemplatesDirectory->setIcon(QIcon::fromTheme("edit")); + + connect(openTemplatesDirectory, &QAction::triggered, this, [&]() { + KIO::highlightInFileManager({QString(Latte::configPath() + "/latte/templates/Dock.view.latte")}); + }); + } +} + void ViewsHandler::reload() { m_dialog->layoutsController()->initializeSelectedLayoutViews(); @@ -146,6 +210,12 @@ void ViewsHandler::save() // m_dialog->layoutsController()->setLayoutProperties(currentData()); } + +void ViewsHandler::newView(const QString &templateId) +{ + qDebug() << "new view from template :: " << templateId; +} + void ViewsHandler::onCurrentLayoutIndexChanged(int row) { bool switchtonewlayout{true}; diff --git a/app/settings/viewsdialog/viewshandler.h b/app/settings/viewsdialog/viewshandler.h index a27f3ed49..435edc34c 100644 --- a/app/settings/viewsdialog/viewshandler.h +++ b/app/settings/viewsdialog/viewshandler.h @@ -27,7 +27,9 @@ #include "../../layout/abstractlayout.h" // Qt +#include #include +#include #include namespace Ui { @@ -79,11 +81,16 @@ signals: void currentLayoutChanged(); private slots: - void onCurrentLayoutIndexChanged(int row); + void initViewTemplatesSubMenu(); void updateWindowTitle(); + void onCurrentLayoutIndexChanged(int row); + + void newView(const QString &templateId); + private: void init(); + void reload(); void loadLayout(const Latte::Data::Layout &data); @@ -98,6 +105,12 @@ private: QSortFilterProxyModel *m_layoutsProxyModel{nullptr}; Latte::Data::Layout o_data; + + //! Actions + QAction *m_newViewAction{nullptr}; + + //! Menus + QMenu *m_viewTemplatesSubMenu{nullptr}; }; } diff --git a/app/templates/templatesmanager.cpp b/app/templates/templatesmanager.cpp index 3e550bf1c..960b8a4c4 100644 --- a/app/templates/templatesmanager.cpp +++ b/app/templates/templatesmanager.cpp @@ -151,7 +151,7 @@ Data::LayoutsTable Manager::layoutTemplates() return templates; } -Data::GenericTable Manager::viewTemplates() +Data::GenericBasicTable Manager::viewTemplates() { return m_viewTemplates; } diff --git a/app/templates/templatesmanager.h b/app/templates/templatesmanager.h index e65eabc4f..67eae3ffd 100644 --- a/app/templates/templatesmanager.h +++ b/app/templates/templatesmanager.h @@ -25,8 +25,7 @@ #include "../data/appletdata.h" #include "../data/layoutdata.h" #include "../data/layoutstable.h" -#include "../data/genericdata.h" -#include "../data/generictable.h" +#include "../data/genericbasictable.h" // Qt #include @@ -66,7 +65,7 @@ public: Data::Layout layoutTemplateForName(const QString &layoutName); Data::LayoutsTable layoutTemplates(); - Data::GenericTable viewTemplates(); + Data::GenericBasicTable viewTemplates(); //! creates a new layout with layoutName based on specific layout template and returns the new layout path QString newLayout(QString layoutName, QString layoutTemplate = i18n(DEFAULTLAYOUTTEMPLATENAME)); @@ -100,7 +99,7 @@ private: Latte::Corona *m_corona; Data::LayoutsTable m_layoutTemplates; - Data::GenericTable m_viewTemplates; + Data::GenericBasicTable m_viewTemplates; };