Warning, file /plasma/latte-dock/app/settings/screensdialog/screenshandler.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
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 }