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