File indexing completed on 2024-04-21 05:30:56

0001 /*
0002     SPDX-FileCopyrightText: 2021 Michail Vourlakos <mvourlakos@gmail.com>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #include "screenshandler.h"
0007 
0008 // local
0009 #include <coretypes.h>
0010 #include "ui_screensdialog.h"
0011 #include "screensdialog.h"
0012 #include "screensmodel.h"
0013 #include "delegates/checkboxdelegate.h"
0014 #include "../../lattecorona.h"
0015 #include "../../screenpool.h"
0016 
0017 // KDE
0018 #include <KMessageBox>
0019 
0020 namespace Latte {
0021 namespace Settings {
0022 namespace Handler {
0023 
0024 ScreensHandler::ScreensHandler(Dialog::ScreensDialog *dialog)
0025     : Generic(dialog),
0026       m_dialog(dialog),
0027       m_ui(m_dialog->ui()),
0028       m_screensModel(new Model::Screens(this))
0029 {
0030     init();
0031 }
0032 
0033 ScreensHandler::~ScreensHandler()
0034 {
0035 }
0036 
0037 void ScreensHandler::init()
0038 {
0039     m_ui->screensTable->horizontalHeader()->setSectionsClickable(false);
0040     m_ui->screensTable->verticalHeader()->setVisible(false);
0041 
0042     //! Data Changed
0043     connect(m_screensModel, &Settings::Model::Screens::screenDataChanged, this, &ScreensHandler::dataChanged);
0044 
0045     //! Screens Proxy Model
0046     m_screensProxyModel = new QSortFilterProxyModel(this);
0047     m_screensProxyModel->setSourceModel(m_screensModel);
0048 
0049     m_ui->screensTable->setModel(m_screensProxyModel);
0050 
0051     m_screensProxyModel->setSortRole(Model::Screens::SORTINGROLE);
0052     m_screensProxyModel->setSortCaseSensitivity(Qt::CaseInsensitive);
0053 
0054     m_ui->screensTable->sortByColumn(Model::Screens::SCREENCOLUMN, Qt::DescendingOrder);
0055 
0056     //! Delegates
0057     m_ui->screensTable->setItemDelegateForColumn(Model::Screens::SCREENCOLUMN, new Settings::Screens::Delegate::CheckBox(this));
0058 
0059     //! Buttons
0060     connect(m_ui->deselectAllBtn, &QPushButton::clicked, this, &ScreensHandler::deselectAll);
0061 
0062     //! load data
0063     m_screensModel->setData(m_dialog->layoutsController()->screensData());
0064 
0065     //! signals
0066     connect(m_dialog->removeNowButton(), &QPushButton::clicked, this, &ScreensHandler::onRemoveNow);
0067     connect(m_screensModel, &Settings::Model::Screens::screenDataChanged, this, &ScreensHandler::onScreenDataChanged);
0068 
0069     onScreenDataChanged();
0070 }
0071 
0072 bool ScreensHandler::hasChangedData() const
0073 {
0074     return m_screensModel->hasChangedData();
0075 }
0076 
0077 bool ScreensHandler::inDefaultValues() const
0078 {
0079     return m_screensModel->inDefaultValues();
0080 }
0081 
0082 void ScreensHandler::deselectAll()
0083 {
0084     m_screensModel->deselectAll();
0085 }
0086 
0087 void ScreensHandler::reset()
0088 {
0089     if (m_screensModel->hasChangedData()) {
0090         m_screensModel->reset();
0091     }
0092 }
0093 
0094 void ScreensHandler::resetDefaults()
0095 {
0096     reset();
0097 }
0098 
0099 void ScreensHandler::onRemoveNow()
0100 {
0101     if (!m_screensModel->hasChecked()) {
0102         return;
0103     }
0104 
0105     Data::ScreensTable checkedscreens = m_screensModel->checkedScreens();
0106 
0107     if (removalConfirmation(checkedscreens.names())) {
0108         save();
0109     }
0110 }
0111 
0112 void ScreensHandler::onScreenDataChanged()
0113 {
0114     m_dialog->removeNowButton()->setEnabled(m_screensModel->hasChecked());
0115 }
0116 
0117 
0118 void ScreensHandler::save()
0119 {
0120     if (!m_screensModel->hasChecked()) {
0121         return;
0122     }
0123 
0124     m_dialog->corona()->screenPool()->removeScreens(m_screensModel->checkedScreens());
0125 
0126     //! reload data
0127     m_screensModel->setData(m_dialog->layoutsController()->screensData());
0128 }
0129 
0130 bool ScreensHandler::removalConfirmation(const QStringList &screens) const
0131 {
0132     return (KMessageBox::warningYesNo(m_dialog,
0133                                      i18np("You are going to <b>remove %2</b> reference completely.<br/>Would you like to continue?",
0134                                            "You are going to <b>remove %2</b> references completely.<br/>Would you like to continue?",
0135                                            screens.count(),
0136                                            screens.join(", ")),
0137                                      i18n("Approve Removal")) == KMessageBox::Yes);
0138 }
0139 
0140 }
0141 }
0142 }