You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
188 lines
7.6 KiB
188 lines
7.6 KiB
////////////////////////////////////////////////////////////////////////////// |
|
// breezeconfigurationui.cpp |
|
// ------------------- |
|
// |
|
// SPDX-FileCopyrightText: 2009 Hugo Pereira Da Costa <hugo.pereira@free.fr> |
|
// |
|
// SPDX-License-Identifier: MIT |
|
////////////////////////////////////////////////////////////////////////////// |
|
|
|
#include "breezeconfigwidget.h" |
|
#include "breezeexceptionlist.h" |
|
|
|
#include <KLocalizedString> |
|
|
|
#include <QDBusConnection> |
|
#include <QDBusMessage> |
|
#include <QFontDatabase> |
|
|
|
namespace Breeze |
|
{ |
|
//_________________________________________________________ |
|
ConfigWidget::ConfigWidget(QWidget *parent, const QVariantList &args) |
|
: KCModule(parent, args) |
|
, m_configuration(KSharedConfig::openConfig(QStringLiteral("breezerc"))) |
|
, m_changed(false) |
|
{ |
|
// configuration |
|
m_ui.setupUi(this); |
|
|
|
// track ui changes |
|
connect(m_ui.titleAlignment, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged())); |
|
connect(m_ui.buttonSize, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged())); |
|
connect(m_ui.outlineCloseButton, &QAbstractButton::clicked, this, &ConfigWidget::updateChanged); |
|
connect(m_ui.drawBorderOnMaximizedWindows, &QAbstractButton::clicked, this, &ConfigWidget::updateChanged); |
|
connect(m_ui.drawSizeGrip, &QAbstractButton::clicked, this, &ConfigWidget::updateChanged); |
|
connect(m_ui.drawBackgroundGradient, &QAbstractButton::clicked, this, &ConfigWidget::updateChanged); |
|
|
|
// track shadows changes |
|
connect(m_ui.shadowSize, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged())); |
|
connect(m_ui.shadowStrength, SIGNAL(valueChanged(int)), SLOT(updateChanged())); |
|
connect(m_ui.shadowColor, &KColorButton::changed, this, &ConfigWidget::updateChanged); |
|
|
|
// track exception changes |
|
connect(m_ui.exceptions, &ExceptionListWidget::changed, this, &ConfigWidget::updateChanged); |
|
|
|
// set formatting |
|
m_ui.drawBorderOnMaximizedWindowsHelpLabel->setFont(QFontDatabase::systemFont(QFontDatabase::SmallestReadableFont)); |
|
} |
|
|
|
//_________________________________________________________ |
|
void ConfigWidget::load() |
|
{ |
|
// create internal settings and load from rc files |
|
m_internalSettings = InternalSettingsPtr(new InternalSettings()); |
|
m_internalSettings->load(); |
|
|
|
// assign to ui |
|
m_ui.titleAlignment->setCurrentIndex(m_internalSettings->titleAlignment()); |
|
m_ui.buttonSize->setCurrentIndex(m_internalSettings->buttonSize()); |
|
m_ui.drawBorderOnMaximizedWindows->setChecked(m_internalSettings->drawBorderOnMaximizedWindows()); |
|
m_ui.outlineCloseButton->setChecked(m_internalSettings->outlineCloseButton()); |
|
m_ui.drawSizeGrip->setChecked(m_internalSettings->drawSizeGrip()); |
|
m_ui.drawBackgroundGradient->setChecked(m_internalSettings->drawBackgroundGradient()); |
|
|
|
// load shadows |
|
if (m_internalSettings->shadowSize() <= InternalSettings::ShadowVeryLarge) |
|
m_ui.shadowSize->setCurrentIndex(m_internalSettings->shadowSize()); |
|
else |
|
m_ui.shadowSize->setCurrentIndex(InternalSettings::ShadowLarge); |
|
|
|
m_ui.shadowStrength->setValue(qRound(qreal(m_internalSettings->shadowStrength() * 100) / 255)); |
|
m_ui.shadowColor->setColor(m_internalSettings->shadowColor()); |
|
|
|
// load exceptions |
|
ExceptionList exceptions; |
|
exceptions.readConfig(m_configuration); |
|
m_ui.exceptions->setExceptions(exceptions.get()); |
|
setChanged(false); |
|
} |
|
|
|
//_________________________________________________________ |
|
void ConfigWidget::save() |
|
{ |
|
// create internal settings and load from rc files |
|
m_internalSettings = InternalSettingsPtr(new InternalSettings()); |
|
m_internalSettings->load(); |
|
|
|
// apply modifications from ui |
|
m_internalSettings->setTitleAlignment(m_ui.titleAlignment->currentIndex()); |
|
m_internalSettings->setButtonSize(m_ui.buttonSize->currentIndex()); |
|
m_internalSettings->setOutlineCloseButton(m_ui.outlineCloseButton->isChecked()); |
|
m_internalSettings->setDrawBorderOnMaximizedWindows(m_ui.drawBorderOnMaximizedWindows->isChecked()); |
|
m_internalSettings->setDrawSizeGrip(m_ui.drawSizeGrip->isChecked()); |
|
m_internalSettings->setDrawBackgroundGradient(m_ui.drawBackgroundGradient->isChecked()); |
|
|
|
m_internalSettings->setShadowSize(m_ui.shadowSize->currentIndex()); |
|
m_internalSettings->setShadowStrength(qRound(qreal(m_ui.shadowStrength->value() * 255) / 100)); |
|
m_internalSettings->setShadowColor(m_ui.shadowColor->color()); |
|
|
|
// save configuration |
|
m_internalSettings->save(); |
|
|
|
// get list of exceptions and write |
|
InternalSettingsList exceptions(m_ui.exceptions->exceptions()); |
|
ExceptionList(exceptions).writeConfig(m_configuration); |
|
|
|
// sync configuration |
|
m_configuration->sync(); |
|
setChanged(false); |
|
|
|
// needed to tell kwin to reload when running from external kcmshell |
|
{ |
|
QDBusMessage message = QDBusMessage::createSignal("/KWin", "org.kde.KWin", "reloadConfig"); |
|
QDBusConnection::sessionBus().send(message); |
|
} |
|
|
|
// needed for breeze style to reload shadows |
|
{ |
|
QDBusMessage message(QDBusMessage::createSignal("/BreezeDecoration", "org.kde.Breeze.Style", "reparseConfiguration")); |
|
QDBusConnection::sessionBus().send(message); |
|
} |
|
} |
|
|
|
//_________________________________________________________ |
|
void ConfigWidget::defaults() |
|
{ |
|
// create internal settings and load from rc files |
|
m_internalSettings = InternalSettingsPtr(new InternalSettings()); |
|
m_internalSettings->setDefaults(); |
|
|
|
// assign to ui |
|
m_ui.titleAlignment->setCurrentIndex(m_internalSettings->titleAlignment()); |
|
m_ui.buttonSize->setCurrentIndex(m_internalSettings->buttonSize()); |
|
m_ui.outlineCloseButton->setChecked(m_internalSettings->outlineCloseButton()); |
|
m_ui.drawBorderOnMaximizedWindows->setChecked(m_internalSettings->drawBorderOnMaximizedWindows()); |
|
m_ui.drawSizeGrip->setChecked(m_internalSettings->drawSizeGrip()); |
|
m_ui.drawBackgroundGradient->setChecked(m_internalSettings->drawBackgroundGradient()); |
|
|
|
m_ui.shadowSize->setCurrentIndex(m_internalSettings->shadowSize()); |
|
m_ui.shadowStrength->setValue(qRound(qreal(m_internalSettings->shadowStrength() * 100) / 255)); |
|
m_ui.shadowColor->setColor(m_internalSettings->shadowColor()); |
|
} |
|
|
|
//_______________________________________________ |
|
void ConfigWidget::updateChanged() |
|
{ |
|
// check configuration |
|
if (!m_internalSettings) |
|
return; |
|
|
|
// track modifications |
|
bool modified(false); |
|
|
|
if (m_ui.titleAlignment->currentIndex() != m_internalSettings->titleAlignment()) |
|
modified = true; |
|
else if (m_ui.buttonSize->currentIndex() != m_internalSettings->buttonSize()) |
|
modified = true; |
|
else if (m_ui.outlineCloseButton->isChecked() != m_internalSettings->outlineCloseButton()) |
|
modified = true; |
|
else if (m_ui.drawBorderOnMaximizedWindows->isChecked() != m_internalSettings->drawBorderOnMaximizedWindows()) |
|
modified = true; |
|
else if (m_ui.drawSizeGrip->isChecked() != m_internalSettings->drawSizeGrip()) |
|
modified = true; |
|
else if (m_ui.drawBackgroundGradient->isChecked() != m_internalSettings->drawBackgroundGradient()) |
|
modified = true; |
|
|
|
// shadows |
|
else if (m_ui.shadowSize->currentIndex() != m_internalSettings->shadowSize()) |
|
modified = true; |
|
else if (qRound(qreal(m_ui.shadowStrength->value() * 255) / 100) != m_internalSettings->shadowStrength()) |
|
modified = true; |
|
else if (m_ui.shadowColor->color() != m_internalSettings->shadowColor()) |
|
modified = true; |
|
|
|
// exceptions |
|
else if (m_ui.exceptions->isChanged()) |
|
modified = true; |
|
|
|
setChanged(modified); |
|
} |
|
|
|
//_______________________________________________ |
|
void ConfigWidget::setChanged(bool value) |
|
{ |
|
emit changed(value); |
|
} |
|
|
|
}
|
|
|