1 /*
2     SPDX-FileCopyrightText: 2020 Michail Vourlakos <mvourlakos@gmail.com>
3     SPDX-License-Identifier: GPL-2.0-or-later
4 */
5 
6 #include "tabpreferenceshandler.h"
7 
8 //! local
9 #include <coretypes.h>
10 #include "ui_settingsdialog.h"
11 #include "settingsdialog.h"
12 #include "../universalsettings.h"
13 #include "../actionsdialog/actionsdialog.h"
14 #include "../../apptypes.h"
15 #include "../../lattecorona.h"
16 #include "../../plasma/extended/theme.h"
17 
18 
19 namespace Latte {
20 namespace Settings {
21 namespace Handler {
22 
23 
TabPreferences(Latte::Settings::Dialog::SettingsDialog * parent)24 TabPreferences::TabPreferences(Latte::Settings::Dialog::SettingsDialog *parent)
25     : Generic(parent),
26       m_parentDialog(parent),
27       m_corona(m_parentDialog->corona()),
28       m_ui(m_parentDialog->ui())
29 {
30     initSettings();
31     initUi();
32 }
33 
initUi()34 void TabPreferences::initUi()
35 {
36     //! exclusive group
37     m_mouseSensitivityButtons = new QButtonGroup(this);
38     m_mouseSensitivityButtons->addButton(m_ui->lowSensitivityBtn, Latte::Settings::LowMouseSensitivity);
39     m_mouseSensitivityButtons->addButton(m_ui->mediumSensitivityBtn, Latte::Settings::MediumMouseSensitivity);
40     m_mouseSensitivityButtons->addButton(m_ui->highSensitivityBtn, Latte::Settings::HighMouseSensitivity);
41     m_mouseSensitivityButtons->setExclusive(true);
42 
43     //! Buttons
44     connect(m_ui->contextMenuActionsBtn, &QPushButton::clicked, this, &TabPreferences::onActionsBtnPressed);
45 
46     //! signals
47     connect(m_mouseSensitivityButtons, static_cast<void(QButtonGroup::*)(int, bool)>(&QButtonGroup::buttonToggled),
48             [ = ](int id, bool checked) {
49         if (checked) {
50             m_preferences.mouseSensitivity = static_cast<Latte::Settings::MouseSensitivity>(id);
51             emit dataChanged();
52         }
53     });
54 
55     connect(m_ui->screenTrackerSpinBox, QOverload<int>::of(&QSpinBox::valueChanged), [ = ](int i) {
56         m_preferences.screensDelay = m_ui->screenTrackerSpinBox->value();
57         emit dataChanged();
58     });
59 
60     connect(m_ui->autostartChkBox, &QCheckBox::stateChanged, this, [&]() {
61         m_preferences.autostart = m_ui->autostartChkBox->isChecked();
62         emit dataChanged();
63     });
64 
65     connect(m_ui->badges3DStyleChkBox, &QCheckBox::stateChanged, this, [&]() {
66         m_preferences.badgeStyle3D = m_ui->badges3DStyleChkBox->isChecked();
67         emit dataChanged();
68     });
69 
70     connect(m_ui->broadcastGeomChkBox, &QCheckBox::stateChanged, this, [&]() {
71         m_preferences.isAvailableGeometryBroadcastedToPlasma = m_ui->broadcastGeomChkBox->isChecked();
72         emit dataChanged();
73     });
74 
75     connect(m_ui->screenTrackerSpinBox, QOverload<int>::of(&QSpinBox::valueChanged), [ = ](int i) {
76         m_preferences.screensDelay = m_ui->screenTrackerSpinBox->value();
77         emit dataChanged();
78     });
79 
80     connect(m_ui->metaPressChkBox, &QCheckBox::stateChanged, this, [&]() {
81         m_preferences.metaPressForAppLauncher = m_ui->metaPressChkBox->isChecked();
82         emit dataChanged();
83     });
84 
85     connect(m_ui->metaPressHoldChkBox, &QCheckBox::stateChanged, this, [&]() {
86         m_preferences.metaHoldForBadges = m_ui->metaPressHoldChkBox->isChecked();
87         emit dataChanged();
88     });
89 
90     connect(m_ui->infoWindowChkBox, &QCheckBox::stateChanged, this, [&]() {
91         m_preferences.layoutsInformationWindow = m_ui->infoWindowChkBox->isChecked();
92         emit dataChanged();
93     });
94 
95     connect(m_ui->noBordersForMaximizedChkBox, &QCheckBox::stateChanged, this, [&]() {
96         m_preferences.borderlessMaximized = m_ui->noBordersForMaximizedChkBox->isChecked();
97         emit dataChanged();
98     });
99 
100     connect(this, &TabPreferences::contextActionsChanged, this, &TabPreferences::dataChanged);
101 }
102 
initSettings()103 void TabPreferences::initSettings()
104 {
105     o_preferences.autostart = m_corona->universalSettings()->autostart();
106     o_preferences.badgeStyle3D = m_corona->universalSettings()->badges3DStyle();
107     o_preferences.contextMenuAlwaysActions = m_corona->universalSettings()->contextMenuActionsAlwaysShown();
108     o_preferences.isAvailableGeometryBroadcastedToPlasma = m_corona->universalSettings()->isAvailableGeometryBroadcastedToPlasma();
109     o_preferences.layoutsInformationWindow = m_corona->universalSettings()->showInfoWindow();
110     o_preferences.metaPressForAppLauncher = m_corona->universalSettings()->kwin_metaForwardedToLatte();
111     o_preferences.metaHoldForBadges = m_corona->universalSettings()->metaPressAndHoldEnabled();
112     o_preferences.borderlessMaximized = m_corona->universalSettings()->canDisableBorders();
113     o_preferences.mouseSensitivity = m_corona->universalSettings()->sensitivity();
114     o_preferences.screensDelay = m_corona->universalSettings()->screenTrackerInterval();
115 
116     m_preferences = o_preferences;
117 
118     updateUi();
119 }
120 
contextMenuAlwaysActions() const121 QStringList TabPreferences::contextMenuAlwaysActions() const
122 {
123     return m_preferences.contextMenuAlwaysActions;
124 }
125 
setContextMenuAlwaysActions(const QStringList & actions)126 void TabPreferences::setContextMenuAlwaysActions(const QStringList &actions)
127 {
128     if (m_preferences.contextMenuAlwaysActions == actions) {
129         return;
130     }
131 
132     m_preferences.contextMenuAlwaysActions = actions;
133     emit contextActionsChanged();
134 }
135 
updateUi()136 void TabPreferences::updateUi()
137 {
138     //! ui load
139     m_ui->autostartChkBox->setChecked(m_preferences.autostart);
140     m_ui->badges3DStyleChkBox->setChecked(m_preferences.badgeStyle3D);
141     m_ui->infoWindowChkBox->setChecked(m_preferences.layoutsInformationWindow);
142     m_ui->broadcastGeomChkBox->setChecked(m_preferences.isAvailableGeometryBroadcastedToPlasma);
143     m_ui->metaPressChkBox->setChecked(m_preferences.metaPressForAppLauncher);
144     m_ui->metaPressHoldChkBox->setChecked(m_preferences.metaHoldForBadges);
145     m_ui->noBordersForMaximizedChkBox->setChecked(m_preferences.borderlessMaximized);
146     m_ui->screenTrackerSpinBox->setValue(m_preferences.screensDelay);
147 
148     if (m_preferences.mouseSensitivity == Settings::LowMouseSensitivity) {
149         m_ui->lowSensitivityBtn->setChecked(true);
150     } else if (m_preferences.mouseSensitivity == Settings::MediumMouseSensitivity) {
151         m_ui->mediumSensitivityBtn->setChecked(true);
152     } else if (m_preferences.mouseSensitivity == Settings::HighMouseSensitivity) {
153         m_ui->highSensitivityBtn->setChecked(true);
154     }
155 
156     emit dataChanged();
157 }
158 
hasChangedData() const159 bool TabPreferences::hasChangedData() const
160 {
161     return o_preferences != m_preferences;
162 }
163 
inDefaultValues() const164 bool TabPreferences::inDefaultValues() const
165 {
166     return m_preferences.inDefaultValues();
167 }
168 
onActionsBtnPressed()169 void TabPreferences::onActionsBtnPressed()
170 {
171     auto viewsDlg = new Settings::Dialog::ActionsDialog(m_parentDialog, this);
172     viewsDlg->exec();
173 }
174 
reset()175 void TabPreferences::reset()
176 {
177     m_preferences = o_preferences;
178     updateUi();
179 }
180 
resetDefaults()181 void TabPreferences::resetDefaults()
182 {
183     m_preferences.setToDefaults();
184     updateUi();
185 }
186 
save()187 void TabPreferences::save()
188 {
189     m_corona->universalSettings()->setSensitivity(m_preferences.mouseSensitivity);
190     m_corona->universalSettings()->setAutostart(m_preferences.autostart);
191     m_corona->universalSettings()->setBadges3DStyle(m_preferences.badgeStyle3D);
192     m_corona->universalSettings()->setContextMenuActionsAlwaysShown(m_preferences.contextMenuAlwaysActions);
193     m_corona->universalSettings()->kwin_forwardMetaToLatte(m_preferences.metaPressForAppLauncher);
194     m_corona->universalSettings()->setIsAvailableGeometryBroadcastedToPlasma(m_preferences.isAvailableGeometryBroadcastedToPlasma);
195     m_corona->universalSettings()->setMetaPressAndHoldEnabled(m_preferences.metaHoldForBadges);
196     m_corona->universalSettings()->setShowInfoWindow(m_preferences.layoutsInformationWindow);
197     m_corona->universalSettings()->setCanDisableBorders(m_preferences.borderlessMaximized);
198     m_corona->universalSettings()->setScreenTrackerInterval(m_preferences.screensDelay);
199 
200     o_preferences = m_preferences;
201     emit dataChanged();
202 }
203 
204 }
205 }
206 }
207 
208