From ac7e7b1c6d2e9fe7ab0071301f73adefe6f17e26 Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Thu, 8 Apr 2021 20:17:57 +0300 Subject: [PATCH] viewsdialog:support remove dock/panel action --- app/settings/viewsdialog/viewscontroller.cpp | 49 +++++++++++++++++++- app/settings/viewsdialog/viewscontroller.h | 7 +-- app/settings/viewsdialog/viewshandler.cpp | 24 ++++++++++ app/settings/viewsdialog/viewshandler.h | 2 + app/settings/viewsdialog/viewsmodel.cpp | 25 ++++++++++ app/settings/viewsdialog/viewsmodel.h | 6 +++ 6 files changed, 109 insertions(+), 4 deletions(-) diff --git a/app/settings/viewsdialog/viewscontroller.cpp b/app/settings/viewsdialog/viewscontroller.cpp index 724d5da66..21d069a1d 100644 --- a/app/settings/viewsdialog/viewscontroller.cpp +++ b/app/settings/viewsdialog/viewscontroller.cpp @@ -124,6 +124,38 @@ bool Views::hasSelectedView() const return (selectedRow >= 0); } +int Views::rowForId(QString id) const +{ + for (int i = 0; i < m_proxyModel->rowCount(); ++i) { + QString rowId = m_proxyModel->data(m_proxyModel->index(i, Model::Views::IDCOLUMN), Qt::UserRole).toString(); + + if (rowId == id) { + return i; + } + } + + return -1; +} + +const Latte::Data::View Views::selectedViewCurrentData() const +{ + int selectedRow = m_view->currentIndex().row(); + if (selectedRow >= 0) { + QString selectedId = m_proxyModel->data(m_proxyModel->index(selectedRow, Model::Views::IDCOLUMN), Qt::UserRole).toString(); + return m_model->currentData(selectedId); + } else { + return Latte::Data::View(); + } +} + +const Latte::Data::View Views::selectedViewOriginalData() const +{ + int selectedRow = m_view->currentIndex().row(); + QString selectedId = m_proxyModel->data(m_proxyModel->index(selectedRow, Model::Layouts::IDCOLUMN), Qt::UserRole).toString(); + + return m_model->originalData(selectedId); +} + const Latte::Data::View Views::appendViewFromViewTemplate(const Data::View &view) { Data::View newview = view; @@ -132,9 +164,24 @@ const Latte::Data::View Views::appendViewFromViewTemplate(const Data::View &view return newview; } +void Views::removeSelected() +{ + int row = m_view->currentIndex().row(); + + if (row < 0) { + return; + } + + row = qMin(row, m_proxyModel->rowCount() - 1); + m_view->selectRow(row); + + Latte::Data::View selected = selectedViewCurrentData(); + m_model->removeView(selected.id); +} + void Views::selectRow(const QString &id) { - // m_view->selectRow(rowForId(id)); + m_view->selectRow(rowForId(id)); } void Views::onCurrentLayoutChanged() diff --git a/app/settings/viewsdialog/viewscontroller.h b/app/settings/viewsdialog/viewscontroller.h index 2928b2f89..bfdab8901 100644 --- a/app/settings/viewsdialog/viewscontroller.h +++ b/app/settings/viewsdialog/viewscontroller.h @@ -67,8 +67,8 @@ public: void sortByColumn(int column, Qt::SortOrder order); bool hasSelectedView() const; - // const Latte::Data::Layout selectedViewCurrentData() const; - // const Latte::Data::Layout selectedViewOriginalData() const; + const Latte::Data::View selectedViewCurrentData() const; + const Latte::Data::View selectedViewOriginalData() const; const Latte::Data::View appendViewFromViewTemplate(const Data::View &view); @@ -77,7 +77,7 @@ public: //! actions void reset(); // void save(); - // void removeSelected(); + void removeSelected(); signals: void dataChanged(); @@ -85,6 +85,7 @@ signals: private: void init(); + int rowForId(QString id) const; QString uniqueViewName(QString name); private slots: diff --git a/app/settings/viewsdialog/viewshandler.cpp b/app/settings/viewsdialog/viewshandler.cpp index a9d5f954d..9acfd34ca 100644 --- a/app/settings/viewsdialog/viewshandler.cpp +++ b/app/settings/viewsdialog/viewshandler.cpp @@ -95,6 +95,14 @@ void ViewsHandler::init() connect(corona()->templatesManager(), &Latte::Templates::Manager::viewTemplatesChanged, this, &ViewsHandler::initViewTemplatesSubMenu); + //! Remove Button + m_removeViewAction = new QAction(i18nc("remove layout", "Remove"), this); + m_removeViewAction->setToolTip(i18n("Remove selected view")); + m_removeViewAction->setIcon(QIcon::fromTheme("delete")); + m_removeViewAction->setShortcut(QKeySequence(Qt::Key_Delete)); + connectActionWithButton(m_ui->removeBtn, m_removeViewAction); + connect(m_removeViewAction, &QAction::triggered, this, &ViewsHandler::removeSelectedView); + //! signals connect(this, &ViewsHandler::currentLayoutChanged, this, &ViewsHandler::reload); @@ -229,6 +237,22 @@ void ViewsHandler::newView(const Data::Generic &templateData) } } +void ViewsHandler::removeSelectedView() +{ + qDebug() << Q_FUNC_INFO; + + if (!m_removeViewAction->isEnabled()) { + return; + } + + if (!m_viewsController->hasSelectedView()) { + return; + } + + Latte::Data::View selectedView = m_viewsController->selectedViewCurrentData(); + m_viewsController->removeSelected(); +} + void ViewsHandler::onCurrentLayoutIndexChanged(int row) { bool switchtonewlayout{true}; diff --git a/app/settings/viewsdialog/viewshandler.h b/app/settings/viewsdialog/viewshandler.h index 3e29ebbd3..cb23b6ae4 100644 --- a/app/settings/viewsdialog/viewshandler.h +++ b/app/settings/viewsdialog/viewshandler.h @@ -82,6 +82,7 @@ signals: private slots: void initViewTemplatesSubMenu(); + void removeSelectedView(); void updateWindowTitle(); void onCurrentLayoutIndexChanged(int row); @@ -108,6 +109,7 @@ private: //! Actions QAction *m_newViewAction{nullptr}; + QAction *m_removeViewAction{nullptr}; //! Menus QMenu *m_viewTemplatesSubMenu{nullptr}; diff --git a/app/settings/viewsdialog/viewsmodel.cpp b/app/settings/viewsdialog/viewsmodel.cpp index b5f336f9e..6573085ad 100644 --- a/app/settings/viewsdialog/viewsmodel.cpp +++ b/app/settings/viewsdialog/viewsmodel.cpp @@ -73,6 +73,31 @@ int Views::columnCount(const QModelIndex &parent) const return columnCount(); } +int Views::rowForId(const QString &id) const +{ + return m_viewsTable.indexOf(id); +} + +const Latte::Data::View &Views::at(const int &row) +{ + return m_viewsTable[row]; +} + +const Latte::Data::View &Views::currentData(const QString &id) +{ + return m_viewsTable[id]; +} + + +const Latte::Data::View Views::originalData(const QString &id) +{ + if (o_viewsTable.containsId(id)){ + return o_viewsTable[id]; + } + + return Latte::Data::View(); +} + const Latte::Data::ViewsTable &Views::currentViewsData() { return m_viewsTable; diff --git a/app/settings/viewsdialog/viewsmodel.h b/app/settings/viewsdialog/viewsmodel.h index 3807bc826..ee5091469 100644 --- a/app/settings/viewsdialog/viewsmodel.h +++ b/app/settings/viewsdialog/viewsmodel.h @@ -92,6 +92,12 @@ public: bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override; + int rowForId(const QString &id) const; + + const Latte::Data::View &at(const int &row); + const Latte::Data::View ¤tData(const QString &id); + const Latte::Data::View originalData(const QString &id); + const Latte::Data::ViewsTable ¤tViewsData(); const Latte::Data::ViewsTable &originalViewsData();