File indexing completed on 2024-05-19 05:35:23
0001 /* 0002 SPDX-FileCopyrightText: 2010 Hugo Pereira Da Costa <hugo.pereira@free.fr> 0003 SPDX-FileCopyrightText: 2009 Matthew Woehlke <mw.triad@users.sourceforge.net> 0004 SPDX-FileCopyrightText: 2009 Long Huynh Huu <long.upcase@googlemail.com> 0005 SPDX-FileCopyrightText: 2003 Sandro Giessl <ceebx@users.sourceforge.net> 0006 0007 originally based on the Keramik configuration dialog: 0008 SPDX-FileCopyrightText: 2003 Maksim Orlovich <maksim.orlovich@kdemail.net> 0009 0010 SPDX-License-Identifier: MIT 0011 0012 */ 0013 0014 #include "oxygenstyleconfig.h" 0015 #include "../oxygen.h" 0016 #include "config-liboxygen.h" 0017 #include "oxygenanimationconfigwidget.h" 0018 #include "oxygenstyleconfigdata.h" 0019 0020 #include <QDBusConnection> 0021 #include <QDBusMessage> 0022 #include <QTextStream> 0023 0024 #include <KConfigGroup> 0025 #include <KLocalizedString> 0026 #include <KSharedConfig> 0027 0028 #define SCROLLBAR_DEFAULT_WIDTH 15 0029 #define SCROLLBAR_MINIMUM_WIDTH 10 0030 #define SCROLLBAR_MAXIMUM_WIDTH 30 0031 0032 extern "C" { 0033 Q_DECL_EXPORT QWidget *allocate_kstyle_config(QWidget *parent) 0034 { 0035 return new Oxygen::StyleConfig(parent); 0036 } 0037 } 0038 0039 namespace Oxygen 0040 { 0041 //__________________________________________________________________ 0042 StyleConfig::StyleConfig(QWidget *parent) 0043 : QWidget(parent) 0044 { 0045 setupUi(this); 0046 0047 // load setup from configData 0048 load(); 0049 0050 connect(_useBackgroundGradient, SIGNAL(toggled(bool)), SLOT(updateChanged())); 0051 connect(_toolBarDrawItemSeparator, SIGNAL(toggled(bool)), SLOT(updateChanged())); 0052 connect(_splitterProxyEnabled, SIGNAL(toggled(bool)), SLOT(updateChanged())); 0053 connect(_mnemonicsMode, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged())); 0054 connect(_viewDrawFocusIndicator, SIGNAL(toggled(bool)), SLOT(updateChanged())); 0055 connect(_viewTriangularExpanderSize, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged())); 0056 connect(_viewDrawTreeBranchLines, SIGNAL(toggled(bool)), SLOT(updateChanged())); 0057 connect(_scrollBarWidth, SIGNAL(valueChanged(int)), SLOT(updateChanged())); 0058 connect(_scrollBarAddLineButtons, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged())); 0059 connect(_scrollBarSubLineButtons, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged())); 0060 connect(_menuHighlightDark, SIGNAL(toggled(bool)), SLOT(updateChanged())); 0061 connect(_menuHighlightStrong, SIGNAL(toggled(bool)), SLOT(updateChanged())); 0062 connect(_menuHighlightSubtle, SIGNAL(toggled(bool)), SLOT(updateChanged())); 0063 connect(_windowDragMode, SIGNAL(currentIndexChanged(int)), SLOT(updateChanged())); 0064 0065 connect(_animationConfigWidget, SIGNAL(changed(bool)), SLOT(updateChanged())); 0066 connect(_animationConfigWidget, SIGNAL(layoutChanged()), SLOT(updateLayout())); 0067 } 0068 0069 //__________________________________________________________________ 0070 void StyleConfig::save(void) 0071 { 0072 StyleConfigData::setUseBackgroundGradient(_useBackgroundGradient->isChecked()); 0073 StyleConfigData::setToolBarDrawItemSeparator(_toolBarDrawItemSeparator->isChecked()); 0074 StyleConfigData::setSplitterProxyEnabled(_splitterProxyEnabled->isChecked()); 0075 StyleConfigData::setMnemonicsMode(_mnemonicsMode->currentIndex()); 0076 StyleConfigData::setViewDrawFocusIndicator(_viewDrawFocusIndicator->isChecked()); 0077 StyleConfigData::setViewTriangularExpanderSize(triangularExpanderSize()); 0078 StyleConfigData::setViewDrawTreeBranchLines(_viewDrawTreeBranchLines->isChecked()); 0079 StyleConfigData::setScrollBarWidth(_scrollBarWidth->value()); 0080 StyleConfigData::setScrollBarAddLineButtons(_scrollBarAddLineButtons->currentIndex()); 0081 StyleConfigData::setScrollBarSubLineButtons(_scrollBarSubLineButtons->currentIndex()); 0082 StyleConfigData::setMenuHighlightMode(menuMode()); 0083 StyleConfigData::setWindowDragMode(_windowDragMode->currentIndex()); 0084 StyleConfigData::setWindowDragEnabled(_windowDragMode->currentIndex() != StyleConfigData::WD_NONE); 0085 0086 _animationConfigWidget->save(); 0087 0088 StyleConfigData::self()->save(); 0089 0090 // emit dbus signal 0091 QDBusMessage message( 0092 QDBusMessage::createSignal(QStringLiteral("/OxygenStyle"), QStringLiteral("org.kde.Oxygen.Style"), QStringLiteral("reparseConfiguration"))); 0093 QDBusConnection::sessionBus().send(message); 0094 } 0095 0096 //__________________________________________________________________ 0097 void StyleConfig::defaults(void) 0098 { 0099 StyleConfigData::self()->setDefaults(); 0100 load(); 0101 } 0102 0103 //__________________________________________________________________ 0104 void StyleConfig::reset(void) 0105 { 0106 // reparse configuration 0107 StyleConfigData::self()->load(); 0108 0109 load(); 0110 } 0111 0112 //__________________________________________________________________ 0113 bool StyleConfig::event(QEvent *event) 0114 { 0115 const bool result(QWidget::event(event)); 0116 switch (event->type()) { 0117 case QEvent::Show: 0118 case QEvent::ShowToParent: 0119 0120 // explicitly update minimum size from hint 0121 // this is needed to automatically resize the window to fit animations tab 0122 setMinimumSize(minimumSizeHint()); 0123 break; 0124 0125 default: 0126 break; 0127 } 0128 0129 return result; 0130 } 0131 0132 //__________________________________________________________________ 0133 void StyleConfig::updateLayout(void) 0134 { 0135 const int delta = _animationConfigWidget->minimumSizeHint().height() - _animationConfigWidget->size().height(); 0136 window()->setMinimumSize(QSize(window()->minimumSizeHint().width(), window()->size().height() + delta)); 0137 } 0138 0139 //__________________________________________________________________ 0140 void StyleConfig::updateChanged() 0141 { 0142 bool modified(false); 0143 0144 // check if any value was modified 0145 if (_useBackgroundGradient->isChecked() != StyleConfigData::useBackgroundGradient()) 0146 modified = true; 0147 if (_toolBarDrawItemSeparator->isChecked() != StyleConfigData::toolBarDrawItemSeparator()) 0148 modified = true; 0149 else if (_mnemonicsMode->currentIndex() != StyleConfigData::mnemonicsMode()) 0150 modified = true; 0151 else if (_viewDrawTreeBranchLines->isChecked() != StyleConfigData::viewDrawTreeBranchLines()) 0152 modified = true; 0153 else if (_scrollBarWidth->value() != StyleConfigData::scrollBarWidth()) 0154 modified = true; 0155 else if (_scrollBarAddLineButtons->currentIndex() != StyleConfigData::scrollBarAddLineButtons()) 0156 modified = true; 0157 else if (_scrollBarSubLineButtons->currentIndex() != StyleConfigData::scrollBarSubLineButtons()) 0158 modified = true; 0159 else if (_splitterProxyEnabled->isChecked() != StyleConfigData::splitterProxyEnabled()) 0160 modified = true; 0161 else if (menuMode() != StyleConfigData::menuHighlightMode()) 0162 modified = true; 0163 else if (_viewDrawFocusIndicator->isChecked() != StyleConfigData::viewDrawFocusIndicator()) 0164 modified = true; 0165 else if (triangularExpanderSize() != StyleConfigData::viewTriangularExpanderSize()) 0166 modified = true; 0167 else if (_animationConfigWidget && _animationConfigWidget->isChanged()) 0168 modified = true; 0169 else if (_windowDragMode->currentIndex() != StyleConfigData::windowDragMode()) 0170 modified = true; 0171 0172 emit changed(modified); 0173 } 0174 0175 //__________________________________________________________________ 0176 void StyleConfig::load(void) 0177 { 0178 _useBackgroundGradient->setChecked(StyleConfigData::useBackgroundGradient()); 0179 _toolBarDrawItemSeparator->setChecked(StyleConfigData::toolBarDrawItemSeparator()); 0180 _mnemonicsMode->setCurrentIndex(StyleConfigData::mnemonicsMode()); 0181 _splitterProxyEnabled->setChecked(StyleConfigData::splitterProxyEnabled()); 0182 _viewDrawTreeBranchLines->setChecked(StyleConfigData::viewDrawTreeBranchLines()); 0183 0184 _scrollBarWidth->setValue(qMin(SCROLLBAR_MAXIMUM_WIDTH, qMax(SCROLLBAR_MINIMUM_WIDTH, StyleConfigData::scrollBarWidth()))); 0185 0186 _scrollBarAddLineButtons->setCurrentIndex(StyleConfigData::scrollBarAddLineButtons()); 0187 _scrollBarSubLineButtons->setCurrentIndex(StyleConfigData::scrollBarSubLineButtons()); 0188 0189 // menu highlight 0190 _menuHighlightDark->setChecked(StyleConfigData::menuHighlightMode() == StyleConfigData::MM_DARK); 0191 _menuHighlightStrong->setChecked(StyleConfigData::menuHighlightMode() == StyleConfigData::MM_STRONG); 0192 _menuHighlightSubtle->setChecked(StyleConfigData::menuHighlightMode() == StyleConfigData::MM_SUBTLE); 0193 0194 _windowDragMode->setCurrentIndex(StyleConfigData::windowDragMode()); 0195 0196 _viewDrawFocusIndicator->setChecked(StyleConfigData::viewDrawFocusIndicator()); 0197 switch (StyleConfigData::viewTriangularExpanderSize()) { 0198 case StyleConfigData::TE_TINY: 0199 _viewTriangularExpanderSize->setCurrentIndex(0); 0200 break; 0201 case StyleConfigData::TE_SMALL: 0202 default: 0203 _viewTriangularExpanderSize->setCurrentIndex(1); 0204 break; 0205 case StyleConfigData::TE_NORMAL: 0206 _viewTriangularExpanderSize->setCurrentIndex(2); 0207 break; 0208 } 0209 0210 // animation config widget 0211 if (_animationConfigWidget) 0212 _animationConfigWidget->load(); 0213 } 0214 0215 //____________________________________________________________ 0216 int StyleConfig::menuMode(void) const 0217 { 0218 if (_menuHighlightDark->isChecked()) 0219 return StyleConfigData::MM_DARK; 0220 else if (_menuHighlightSubtle->isChecked()) 0221 return StyleConfigData::MM_SUBTLE; 0222 else 0223 return StyleConfigData::MM_STRONG; 0224 } 0225 0226 //____________________________________________________________ 0227 int StyleConfig::triangularExpanderSize(void) const 0228 { 0229 switch (_viewTriangularExpanderSize->currentIndex()) { 0230 case 0: 0231 return StyleConfigData::TE_TINY; 0232 case 1: 0233 default: 0234 return StyleConfigData::TE_SMALL; 0235 case 2: 0236 return StyleConfigData::TE_NORMAL; 0237 } 0238 } 0239 }