From 1a910a73e4756e28c2ebbace66261809ee19e563 Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Wed, 21 Apr 2021 20:39:47 +0300 Subject: [PATCH] viewsdialog:provide duplicate action --- app/settings/viewsdialog/viewsdialog.ui | 10 +++++++ app/settings/viewsdialog/viewshandler.cpp | 36 +++++++++++++++++++++-- app/settings/viewsdialog/viewshandler.h | 2 ++ 3 files changed, 45 insertions(+), 3 deletions(-) diff --git a/app/settings/viewsdialog/viewsdialog.ui b/app/settings/viewsdialog/viewsdialog.ui index b57a20085..f3dfb8904 100644 --- a/app/settings/viewsdialog/viewsdialog.ui +++ b/app/settings/viewsdialog/viewsdialog.ui @@ -121,6 +121,16 @@ + + + + Duplicate + + + + + + diff --git a/app/settings/viewsdialog/viewshandler.cpp b/app/settings/viewsdialog/viewshandler.cpp index 57ac548b6..ded635dc7 100644 --- a/app/settings/viewsdialog/viewshandler.cpp +++ b/app/settings/viewsdialog/viewshandler.cpp @@ -91,6 +91,14 @@ void ViewsHandler::init() connect(corona()->templatesManager(), &Latte::Templates::Manager::viewTemplatesChanged, this, &ViewsHandler::initViewTemplatesSubMenu); + //! Duplicate Button + m_duplicateViewAction = new QAction(i18nc("duplicate dock or panel", "&Duplicate"), this); + m_duplicateViewAction->setToolTip(i18n("Duplicate selected dock or panel")); + m_duplicateViewAction->setIcon(QIcon::fromTheme("edit-copy")); + m_duplicateViewAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_D)); + connectActionWithButton(m_ui->duplicateBtn, m_duplicateViewAction); + connect(m_duplicateViewAction, &QAction::triggered, this, &ViewsHandler::duplicateSelectedView); + //! Remove Button m_removeViewAction = new QAction(i18nc("remove layout", "Remove"), this); m_removeViewAction->setToolTip(i18n("Remove selected view")); @@ -242,15 +250,37 @@ void ViewsHandler::newView(const Data::Generic &templateData) } } -void ViewsHandler::removeSelectedView() +void ViewsHandler::duplicateSelectedView() { qDebug() << Q_FUNC_INFO; - if (!m_removeViewAction->isEnabled()) { + if (!m_duplicateViewAction->isEnabled() || !m_viewsController->hasSelectedView()) { return; } - if (!m_viewsController->hasSelectedView()) { + Latte::Data::View selectedview = m_viewsController->selectedViewCurrentData(); + + if (selectedview.state() == Data::View::IsCreated) { + Latte::Data::Layout originallayout = originalData(); + Latte::Data::Layout currentlayout = currentData(); + Latte::CentralLayout *centralActive = isSelectedLayoutOriginal() ? m_dialog->corona()->layoutsManager()->synchronizer()->centralLayout(originallayout.name) : nullptr; + Latte::CentralLayout *central = centralActive ? centralActive : new Latte::CentralLayout(this, currentlayout.id); + + QString storedviewpath = central->storedView(selectedview.id.toInt()); + Latte::Data::View duplicatedview = selectedview; + duplicatedview.setState(Data::View::OriginFromViewTemplate, storedviewpath); + m_viewsController->appendViewFromViewTemplate(duplicatedview); + } else if (selectedview.state() == Data::View::OriginFromViewTemplate) { + Latte::Data::View duplicatedview = selectedview; + m_viewsController->appendViewFromViewTemplate(duplicatedview); + } +} + +void ViewsHandler::removeSelectedView() +{ + qDebug() << Q_FUNC_INFO; + + if (!m_removeViewAction->isEnabled() || !m_viewsController->hasSelectedView()) { return; } diff --git a/app/settings/viewsdialog/viewshandler.h b/app/settings/viewsdialog/viewshandler.h index ffb3dc1e4..f51ed6e1a 100644 --- a/app/settings/viewsdialog/viewshandler.h +++ b/app/settings/viewsdialog/viewshandler.h @@ -85,6 +85,7 @@ signals: private slots: void initViewTemplatesSubMenu(); + void duplicateSelectedView(); void removeSelectedView(); void updateWindowTitle(); @@ -115,6 +116,7 @@ private: //! Actions QAction *m_newViewAction{nullptr}; + QAction *m_duplicateViewAction{nullptr}; QAction *m_removeViewAction{nullptr}; //! Menus