From 77515be7c6db89114d1a5b671ea3282d2d2db3d3 Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Wed, 12 Aug 2020 18:56:46 +0300 Subject: [PATCH] settings:expose LayoutTemplates to New button --- app/settings/handlers/tablayoutshandler.cpp | 28 ++++++++++++++++++--- app/settings/handlers/tablayoutshandler.h | 3 ++- app/templates/templatesmanager.cpp | 20 +++++++++++++++ app/templates/templatesmanager.h | 3 +++ 4 files changed, 50 insertions(+), 4 deletions(-) diff --git a/app/settings/handlers/tablayoutshandler.cpp b/app/settings/handlers/tablayoutshandler.cpp index 5543e8870..58c10692d 100644 --- a/app/settings/handlers/tablayoutshandler.cpp +++ b/app/settings/handlers/tablayoutshandler.cpp @@ -134,8 +134,30 @@ void TabLayouts::initLayoutMenu() m_newLayoutAction->setToolTip(i18n("New layout")); m_newLayoutAction->setIcon(QIcon::fromTheme("add")); m_newLayoutAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_N)); + + /*Add Layout Templates for New Action*/ + QMenu *layoutTemplatesSubMenu = new QMenu(m_layoutMenu); connectActionWithButton(m_ui->newButton, m_newLayoutAction); - connect(m_newLayoutAction, &QAction::triggered, this, &TabLayouts::on_new_layout); + connect(m_newLayoutAction, &QAction::triggered, m_ui->newButton, &QPushButton::showMenu); + + Data::LayoutsTable templates = m_corona->templatesManager()->systemLayoutTemplates(); + + for (int i=0; iaddSeparator(); + } + + QAction *newlayout = layoutTemplatesSubMenu->addAction(templates[i].name); + QString templatename = templates[i].name; + + connect(newlayout, &QAction::triggered, this, [&, templatename]() { + newLayout(templatename); + }); + } + + m_newLayoutAction->setMenu(layoutTemplatesSubMenu); + m_ui->newButton->setMenu(layoutTemplatesSubMenu); + layoutTemplatesSubMenu->setMinimumWidth(m_ui->newButton->width() * 2); m_copyLayoutAction = m_layoutMenu->addAction(i18nc("copy layout", "&Copy")); m_copyLayoutAction->setToolTip(i18n("Copy selected layout")); @@ -372,7 +394,7 @@ void TabLayouts::updatePerLayoutButtonsState() setTwinProperty(m_detailsAction, TWINENABLED, true); } -void TabLayouts::on_new_layout() +void TabLayouts::newLayout(const QString &templateName) { qDebug() << Q_FUNC_INFO; @@ -381,7 +403,7 @@ void TabLayouts::on_new_layout() } //! retrieve Default layout template - Data::Layout tdata = m_corona->templatesManager()->layoutTemplateForName(i18n(Latte::Templates::DEFAULTLAYOUTTEMPLATENAME)); + Data::Layout tdata = m_corona->templatesManager()->layoutTemplateForName(templateName); if (!tdata.isNull()) { Data::Layout newlayout = m_layoutsController->addLayoutForFile(tdata.id, tdata.name, true); diff --git a/app/settings/handlers/tablayoutshandler.h b/app/settings/handlers/tablayoutshandler.h index c989cdb71..e925070db 100644 --- a/app/settings/handlers/tablayoutshandler.h +++ b/app/settings/handlers/tablayoutshandler.h @@ -90,7 +90,6 @@ private slots: void loadConfig(); void saveConfig(); - void on_new_layout(); void on_copy_layout(); void on_download_layout(); void on_pause_layout(); @@ -107,6 +106,8 @@ private slots: void on_rawLayoutDropped(const QString &rawLayout); void updatePerLayoutButtonsState(); + void newLayout(const QString &templateName); + private: bool isHoveringLayoutsTable(const QPoint &pos); diff --git a/app/templates/templatesmanager.cpp b/app/templates/templatesmanager.cpp index 46314fe38..5e885135e 100644 --- a/app/templates/templatesmanager.cpp +++ b/app/templates/templatesmanager.cpp @@ -76,6 +76,26 @@ Data::Layout Manager::layoutTemplateForName(const QString &layoutName) return Data::Layout(); } +Data::LayoutsTable Manager::systemLayoutTemplates() +{ + Data::LayoutsTable templates; + + QString id = m_layoutTemplates.idForName(i18n(DEFAULTLAYOUTTEMPLATENAME)); + templates << m_layoutTemplates[id]; + id = m_layoutTemplates.idForName(i18n(EMPTYLAYOUTTEMPLATENAME)); + templates << m_layoutTemplates[id]; + + for (int i=0; i