File indexing completed on 2024-12-01 11:10:35
0001 /* 0002 SPDX-FileCopyrightText: 2020 Michail Vourlakos <mvourlakos@gmail.com> 0003 SPDX-License-Identifier: GPL-2.0-or-later 0004 */ 0005 0006 #include "tabpreferenceshandler.h" 0007 0008 //! local 0009 #include <coretypes.h> 0010 #include "ui_settingsdialog.h" 0011 #include "settingsdialog.h" 0012 #include "../universalsettings.h" 0013 #include "../actionsdialog/actionsdialog.h" 0014 #include "../../apptypes.h" 0015 #include "../../lattecorona.h" 0016 #include "../../plasma/extended/theme.h" 0017 0018 0019 namespace Latte { 0020 namespace Settings { 0021 namespace Handler { 0022 0023 0024 TabPreferences::TabPreferences(Latte::Settings::Dialog::SettingsDialog *parent) 0025 : Generic(parent), 0026 m_parentDialog(parent), 0027 m_corona(m_parentDialog->corona()), 0028 m_ui(m_parentDialog->ui()) 0029 { 0030 initSettings(); 0031 initUi(); 0032 } 0033 0034 void TabPreferences::initUi() 0035 { 0036 //! exclusive groups 0037 m_parabolicSpreadButtons = new QButtonGroup(this); 0038 m_parabolicSpreadButtons->addButton(m_ui->smallParabolicBtn, Data::Preferences::PARABOLICSPREAD); 0039 m_parabolicSpreadButtons->addButton(m_ui->mediumParabolicBtn, 5); 0040 m_parabolicSpreadButtons->addButton(m_ui->largeParabolicBtn, 7); 0041 m_parabolicSpreadButtons->setExclusive(true); 0042 0043 m_thicknessMarginInfluenceButtons = new QButtonGroup(this); 0044 m_thicknessMarginInfluenceButtons->addButton(m_ui->noMarginInfluenceBtn, 0); // 0% 0045 m_thicknessMarginInfluenceButtons->addButton(m_ui->halfMarginInfluenceBtn, 50); // 50% 0046 m_thicknessMarginInfluenceButtons->addButton(m_ui->fullMarginInfluenceBtn, 100); // 100% 0047 m_thicknessMarginInfluenceButtons->setExclusive(true); 0048 0049 m_ui->noMarginInfluenceBtn->setText(i18nc("number in percentage, e.g. 85%","%1%").arg(0)); 0050 m_ui->halfMarginInfluenceBtn->setText(i18nc("number in percentage, e.g. 85%","%1%").arg(50)); 0051 m_ui->fullMarginInfluenceBtn->setText(i18nc("number in percentage, e.g. 85%","%1%").arg(100)); 0052 0053 //! Buttons 0054 connect(m_ui->contextMenuActionsBtn, &QPushButton::clicked, this, &TabPreferences::onActionsBtnPressed); 0055 0056 //! signals 0057 connect(m_parabolicSpreadButtons, static_cast<void(QButtonGroup::*)(int, bool)>(&QButtonGroup::buttonToggled), 0058 [ = ](int id, bool checked) { 0059 if (checked) { 0060 m_preferences.parabolicSpread = id; 0061 emit dataChanged(); 0062 } 0063 }); 0064 0065 connect(m_thicknessMarginInfluenceButtons, static_cast<void(QButtonGroup::*)(int, bool)>(&QButtonGroup::buttonToggled), 0066 [ = ](int id, bool checked) { 0067 if (checked) { 0068 m_preferences.thicknessMarginInfluence = (id / 100.0f); 0069 emit dataChanged(); 0070 } 0071 }); 0072 0073 connect(m_ui->screenTrackerSpinBox, QOverload<int>::of(&QSpinBox::valueChanged), [ = ](int i) { 0074 m_preferences.screensDelay = m_ui->screenTrackerSpinBox->value(); 0075 emit dataChanged(); 0076 }); 0077 0078 connect(m_ui->autostartChkBox, &QCheckBox::stateChanged, this, [&]() { 0079 m_preferences.autostart = m_ui->autostartChkBox->isChecked(); 0080 emit dataChanged(); 0081 }); 0082 0083 connect(m_ui->badges3DStyleChkBox, &QCheckBox::stateChanged, this, [&]() { 0084 m_preferences.badgeStyle3D = m_ui->badges3DStyleChkBox->isChecked(); 0085 emit dataChanged(); 0086 }); 0087 0088 connect(m_ui->broadcastGeomChkBox, &QCheckBox::stateChanged, this, [&]() { 0089 m_preferences.isAvailableGeometryBroadcastedToPlasma = m_ui->broadcastGeomChkBox->isChecked(); 0090 emit dataChanged(); 0091 }); 0092 0093 connect(m_ui->screenTrackerSpinBox, QOverload<int>::of(&QSpinBox::valueChanged), [ = ](int i) { 0094 m_preferences.screensDelay = m_ui->screenTrackerSpinBox->value(); 0095 emit dataChanged(); 0096 }); 0097 0098 connect(m_ui->metaPressChkBox, &QCheckBox::stateChanged, this, [&]() { 0099 m_preferences.metaPressForAppLauncher = m_ui->metaPressChkBox->isChecked(); 0100 emit dataChanged(); 0101 }); 0102 0103 connect(m_ui->metaPressHoldChkBox, &QCheckBox::stateChanged, this, [&]() { 0104 m_preferences.metaHoldForBadges = m_ui->metaPressHoldChkBox->isChecked(); 0105 emit dataChanged(); 0106 }); 0107 0108 connect(m_ui->infoWindowChkBox, &QCheckBox::stateChanged, this, [&]() { 0109 m_preferences.layoutsInformationWindow = m_ui->infoWindowChkBox->isChecked(); 0110 emit dataChanged(); 0111 }); 0112 0113 connect(m_ui->noBordersForMaximizedChkBox, &QCheckBox::stateChanged, this, [&]() { 0114 m_preferences.borderlessMaximized = m_ui->noBordersForMaximizedChkBox->isChecked(); 0115 emit dataChanged(); 0116 }); 0117 0118 connect(this, &TabPreferences::contextActionsChanged, this, &TabPreferences::dataChanged); 0119 } 0120 0121 void TabPreferences::initSettings() 0122 { 0123 o_preferences.autostart = m_corona->universalSettings()->autostart(); 0124 o_preferences.badgeStyle3D = m_corona->universalSettings()->badges3DStyle(); 0125 o_preferences.contextMenuAlwaysActions = m_corona->universalSettings()->contextMenuActionsAlwaysShown(); 0126 o_preferences.isAvailableGeometryBroadcastedToPlasma = m_corona->universalSettings()->isAvailableGeometryBroadcastedToPlasma(); 0127 o_preferences.layoutsInformationWindow = m_corona->universalSettings()->showInfoWindow(); 0128 o_preferences.metaPressForAppLauncher = m_corona->universalSettings()->kwin_metaForwardedToLatte(); 0129 o_preferences.metaHoldForBadges = m_corona->universalSettings()->metaPressAndHoldEnabled(); 0130 o_preferences.borderlessMaximized = m_corona->universalSettings()->canDisableBorders(); 0131 o_preferences.parabolicSpread = m_corona->universalSettings()->parabolicSpread(); 0132 o_preferences.thicknessMarginInfluence = m_corona->universalSettings()->thicknessMarginInfluence(); 0133 o_preferences.screensDelay = m_corona->universalSettings()->screenTrackerInterval(); 0134 0135 m_preferences = o_preferences; 0136 0137 updateUi(); 0138 } 0139 0140 QStringList TabPreferences::contextMenuAlwaysActions() const 0141 { 0142 return m_preferences.contextMenuAlwaysActions; 0143 } 0144 0145 void TabPreferences::setContextMenuAlwaysActions(const QStringList &actions) 0146 { 0147 if (m_preferences.contextMenuAlwaysActions == actions) { 0148 return; 0149 } 0150 0151 m_preferences.contextMenuAlwaysActions = actions; 0152 emit contextActionsChanged(); 0153 } 0154 0155 void TabPreferences::updateUi() 0156 { 0157 //! ui load 0158 m_ui->autostartChkBox->setChecked(m_preferences.autostart); 0159 m_ui->badges3DStyleChkBox->setChecked(m_preferences.badgeStyle3D); 0160 m_ui->infoWindowChkBox->setChecked(m_preferences.layoutsInformationWindow); 0161 m_ui->broadcastGeomChkBox->setChecked(m_preferences.isAvailableGeometryBroadcastedToPlasma); 0162 m_ui->metaPressChkBox->setChecked(m_preferences.metaPressForAppLauncher); 0163 m_ui->metaPressHoldChkBox->setChecked(m_preferences.metaHoldForBadges); 0164 m_ui->noBordersForMaximizedChkBox->setChecked(m_preferences.borderlessMaximized); 0165 m_ui->screenTrackerSpinBox->setValue(m_preferences.screensDelay); 0166 0167 if (m_preferences.parabolicSpread == Data::Preferences::PARABOLICSPREAD) { 0168 m_ui->smallParabolicBtn->setChecked(true); 0169 } else if (m_preferences.parabolicSpread == 5) { 0170 m_ui->mediumParabolicBtn->setChecked(true); 0171 } else if (m_preferences.parabolicSpread == 7) { 0172 m_ui->largeParabolicBtn->setChecked(true); 0173 } 0174 0175 if (m_preferences.thicknessMarginInfluence == 0.0f) { 0176 m_ui->noMarginInfluenceBtn->setChecked(true); 0177 } else if (m_preferences.thicknessMarginInfluence == 0.5f) { 0178 m_ui->halfMarginInfluenceBtn->setChecked(true); 0179 } else if (m_preferences.thicknessMarginInfluence == Data::Preferences::THICKNESSMARGININFLUENCE) { 0180 m_ui->fullMarginInfluenceBtn->setChecked(true); 0181 } 0182 0183 emit dataChanged(); 0184 } 0185 0186 bool TabPreferences::hasChangedData() const 0187 { 0188 return o_preferences != m_preferences; 0189 } 0190 0191 bool TabPreferences::inDefaultValues() const 0192 { 0193 return m_preferences.inDefaultValues(); 0194 } 0195 0196 void TabPreferences::onActionsBtnPressed() 0197 { 0198 auto viewsDlg = new Settings::Dialog::ActionsDialog(m_parentDialog, this); 0199 viewsDlg->exec(); 0200 } 0201 0202 void TabPreferences::reset() 0203 { 0204 m_preferences = o_preferences; 0205 updateUi(); 0206 } 0207 0208 void TabPreferences::resetDefaults() 0209 { 0210 m_preferences.setToDefaults(); 0211 updateUi(); 0212 } 0213 0214 void TabPreferences::save() 0215 { 0216 m_corona->universalSettings()->setAutostart(m_preferences.autostart); 0217 m_corona->universalSettings()->setBadges3DStyle(m_preferences.badgeStyle3D); 0218 m_corona->universalSettings()->setContextMenuActionsAlwaysShown(m_preferences.contextMenuAlwaysActions); 0219 m_corona->universalSettings()->kwin_forwardMetaToLatte(m_preferences.metaPressForAppLauncher); 0220 m_corona->universalSettings()->setIsAvailableGeometryBroadcastedToPlasma(m_preferences.isAvailableGeometryBroadcastedToPlasma); 0221 m_corona->universalSettings()->setMetaPressAndHoldEnabled(m_preferences.metaHoldForBadges); 0222 m_corona->universalSettings()->setShowInfoWindow(m_preferences.layoutsInformationWindow); 0223 m_corona->universalSettings()->setCanDisableBorders(m_preferences.borderlessMaximized); 0224 m_corona->universalSettings()->setParabolicSpread(m_preferences.parabolicSpread); 0225 m_corona->universalSettings()->setThicknessMarginInfluence(m_preferences.thicknessMarginInfluence); 0226 m_corona->universalSettings()->setScreenTrackerInterval(m_preferences.screensDelay); 0227 0228 o_preferences = m_preferences; 0229 emit dataChanged(); 0230 } 0231 0232 } 0233 } 0234 } 0235