You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
latte-dock/app/settings/settingsdialog/tabpreferenceshandler.cpp

186 lines
6.6 KiB
C++

/*
* Copyright 2020 Michail Vourlakos <mvourlakos@gmail.com>
*
* This file is part of Latte-Dock
*
* Latte-Dock is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* Latte-Dock is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "tabpreferenceshandler.h"
//! local
#include <coretypes.h>
#include "ui_settingsdialog.h"
#include "settingsdialog.h"
#include "../universalsettings.h"
#include "../../apptypes.h"
#include "../../lattecorona.h"
#include "../../plasma/extended/theme.h"
namespace Latte {
namespace Settings {
namespace Handler {
TabPreferences::TabPreferences(Latte::Settings::Dialog::SettingsDialog *parent)
: Generic(parent),
m_parentDialog(parent),
m_corona(m_parentDialog->corona()),
m_ui(m_parentDialog->ui())
{
initSettings();
initUi();
}
void TabPreferences::initUi()
{
//! exclusive group
m_mouseSensitivityButtons = new QButtonGroup(this);
m_mouseSensitivityButtons->addButton(m_ui->lowSensitivityBtn, Latte::Settings::LowMouseSensitivity);
m_mouseSensitivityButtons->addButton(m_ui->mediumSensitivityBtn, Latte::Settings::MediumMouseSensitivity);
m_mouseSensitivityButtons->addButton(m_ui->highSensitivityBtn, Latte::Settings::HighMouseSensitivity);
m_mouseSensitivityButtons->setExclusive(true);
//! signals
connect(m_mouseSensitivityButtons, static_cast<void(QButtonGroup::*)(int, bool)>(&QButtonGroup::buttonToggled),
[ = ](int id, bool checked) {
if (checked) {
m_preferences.mouseSensitivity = static_cast<Latte::Settings::MouseSensitivity>(id);
emit dataChanged();
}
});
connect(m_ui->screenTrackerSpinBox, QOverload<int>::of(&QSpinBox::valueChanged), [ = ](int i) {
m_preferences.screensDelay = m_ui->screenTrackerSpinBox->value();
emit dataChanged();
});
connect(m_ui->autostartChkBox, &QCheckBox::stateChanged, this, [&]() {
m_preferences.autostart = m_ui->autostartChkBox->isChecked();
emit dataChanged();
});
connect(m_ui->badges3DStyleChkBox, &QCheckBox::stateChanged, this, [&]() {
m_preferences.badgeStyle3D = m_ui->badges3DStyleChkBox->isChecked();
emit dataChanged();
});
connect(m_ui->screenTrackerSpinBox, QOverload<int>::of(&QSpinBox::valueChanged), [ = ](int i) {
m_preferences.screensDelay = m_ui->screenTrackerSpinBox->value();
emit dataChanged();
});
connect(m_ui->metaPressChkBox, &QCheckBox::stateChanged, this, [&]() {
m_preferences.metaPressForAppLauncher = m_ui->metaPressChkBox->isChecked();
emit dataChanged();
});
connect(m_ui->metaPressHoldChkBox, &QCheckBox::stateChanged, this, [&]() {
m_preferences.metaHoldForBadges = m_ui->metaPressHoldChkBox->isChecked();
emit dataChanged();
});
connect(m_ui->infoWindowChkBox, &QCheckBox::stateChanged, this, [&]() {
m_preferences.layoutsInformationWindow = m_ui->infoWindowChkBox->isChecked();
emit dataChanged();
});
connect(m_ui->noBordersForMaximizedChkBox, &QCheckBox::stateChanged, this, [&]() {
m_preferences.borderlessMaximized = m_ui->noBordersForMaximizedChkBox->isChecked();
emit dataChanged();
});
}
void TabPreferences::initSettings()
{
o_preferences.autostart = m_corona->universalSettings()->autostart();
o_preferences.badgeStyle3D = m_corona->universalSettings()->badges3DStyle();
o_preferences.layoutsInformationWindow = m_corona->universalSettings()->showInfoWindow();
o_preferences.metaPressForAppLauncher = m_corona->universalSettings()->kwin_metaForwardedToLatte();
o_preferences.metaHoldForBadges = m_corona->universalSettings()->metaPressAndHoldEnabled();
o_preferences.borderlessMaximized = m_corona->universalSettings()->canDisableBorders();
o_preferences.mouseSensitivity = m_corona->universalSettings()->sensitivity();
o_preferences.screensDelay = m_corona->universalSettings()->screenTrackerInterval();
m_preferences = o_preferences;
updateUi();
}
void TabPreferences::updateUi()
{
//! ui load
m_ui->autostartChkBox->setChecked(m_preferences.autostart);
m_ui->badges3DStyleChkBox->setChecked(m_preferences.badgeStyle3D);
m_ui->infoWindowChkBox->setChecked(m_preferences.layoutsInformationWindow);
m_ui->metaPressChkBox->setChecked(m_preferences.metaPressForAppLauncher);
m_ui->metaPressHoldChkBox->setChecked(m_preferences.metaHoldForBadges);
m_ui->noBordersForMaximizedChkBox->setChecked(m_preferences.borderlessMaximized);
m_ui->screenTrackerSpinBox->setValue(m_preferences.screensDelay);
if (m_preferences.mouseSensitivity == Settings::LowMouseSensitivity) {
m_ui->lowSensitivityBtn->setChecked(true);
} else if (m_preferences.mouseSensitivity == Settings::MediumMouseSensitivity) {
m_ui->mediumSensitivityBtn->setChecked(true);
} else if (m_preferences.mouseSensitivity == Settings::HighMouseSensitivity) {
m_ui->highSensitivityBtn->setChecked(true);
}
emit dataChanged();
}
bool TabPreferences::hasChangedData() const
{
return o_preferences != m_preferences;
}
bool TabPreferences::inDefaultValues() const
{
return m_preferences.inDefaultValues();
}
void TabPreferences::reset()
{
m_preferences = o_preferences;
updateUi();
}
void TabPreferences::resetDefaults()
{
m_preferences.setToDefaults();
updateUi();
}
void TabPreferences::save()
{
m_corona->universalSettings()->setSensitivity(m_preferences.mouseSensitivity);
m_corona->universalSettings()->setAutostart(m_preferences.autostart);
m_corona->universalSettings()->setBadges3DStyle(m_preferences.badgeStyle3D);
m_corona->universalSettings()->kwin_forwardMetaToLatte(m_preferences.metaPressForAppLauncher);
m_corona->universalSettings()->setMetaPressAndHoldEnabled(m_preferences.metaHoldForBadges);
m_corona->universalSettings()->setShowInfoWindow(m_preferences.layoutsInformationWindow);
m_corona->universalSettings()->setCanDisableBorders(m_preferences.borderlessMaximized);
m_corona->universalSettings()->setScreenTrackerInterval(m_preferences.screensDelay);
o_preferences = m_preferences;
emit dataChanged();
}
}
}
}