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

//////////////////////////////////////////////////////////////////////////////
// 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);
}
}