2
Copyright 2010 Hugo Pereira Da Costa <hugo@oxygen-icons.org>
3
Copyright 2009 Matthew Woehlke <mw.triad@users.sourceforge.net>
4
Copyright 2009 Long Huynh Huu <long.upcase@googlemail.com>
5
Copyright 2003 Sandro Giessl <ceebx@users.sourceforge.net>
7
originally based on the Keramik configuration dialog:
8
Copyright 2003 Maksim Orlovich <maksim.orlovich@kdemail.net>
10
Permission is hereby granted, free of charge, to any person obtaining a
11
copy of this software and associated documentation files (the "Software"),
12
to deal in the Software without restriction, including without limitation
13
the rights to use, copy, modify, merge, publish, distribute, sublicense,
14
and/or sell copies of the Software, and to permit persons to whom the
15
Software is furnished to do so, subject to the following conditions:
17
The above copyright notice and this permission notice shall be included in
18
all copies or substantial portions of the Software.
20
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
23
THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
25
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
26
DEALINGS IN THE SOFTWARE.
30
#include "oxygenstyleconfig.h"
31
#include "oxygenstyleconfig.moc"
32
#include "oxygenanimationconfigwidget.h"
33
#include "oxygenstyleconfigdata.h"
35
#include <QtCore/QTextStream>
36
#include <QtDBus/QDBusMessage>
37
#include <QtDBus/QDBusConnection>
41
#include <KSharedConfig>
42
#include <KConfigGroup>
43
#include <kdemacros.h>
46
#define SCROLLBAR_DEFAULT_WIDTH 15
47
#define SCROLLBAR_MINIMUM_WIDTH 10
48
#define SCROLLBAR_MAXIMUM_WIDTH 30
52
KDE_EXPORT QWidget* allocate_kstyle_config(QWidget* parent)
54
KGlobal::locale()->insertCatalog("kstyle_config");
55
return new Oxygen::StyleConfig(parent);
62
//__________________________________________________________________
63
StyleConfig::StyleConfig(QWidget* parent):
66
_animationConfigWidget(0)
68
KGlobal::locale()->insertCatalog("kstyle_config");
73
connect( _windowDragMode, SIGNAL( currentIndexChanged( int ) ), SLOT( windowDragModeChanged( int ) ) );
74
connect( _viewDrawTriangularExpander, SIGNAL( toggled( bool ) ), _viewTriangularExpanderSize, SLOT( setEnabled( bool ) ) );
77
toggleExpertMode( false );
79
// load setup from configData
82
connect( _toolBarDrawItemSeparator, SIGNAL( toggled(bool) ), SLOT( updateChanged() ) );
83
connect( _checkDrawX, SIGNAL( toggled(bool) ), SLOT( updateChanged() ) );
84
connect( _showMnemonics, SIGNAL( toggled(bool) ), SLOT( updateChanged() ) );
85
connect( _animationsEnabled, SIGNAL( toggled(bool) ), SLOT( updateChanged() ) );
86
connect( _cacheEnabled, SIGNAL( toggled(bool) ), SLOT( updateChanged() ) );
87
connect( _viewDrawTriangularExpander, SIGNAL( toggled(bool) ), SLOT( updateChanged() ) );
88
connect( _viewTriangularExpanderSize, SIGNAL( currentIndexChanged( int ) ), SLOT( updateChanged() ) );
89
connect( _viewDrawFocusIndicator, SIGNAL( toggled(bool) ), SLOT( updateChanged() ) );
90
connect( _viewDrawTreeBranchLines, SIGNAL( toggled(bool) ), SLOT( updateChanged() ) );
91
connect( _scrollBarWidth, SIGNAL( valueChanged(int) ), SLOT( updateChanged() ) );
92
connect( _scrollBarAddLineButtons, SIGNAL( currentIndexChanged(int) ), SLOT( updateChanged() ) );
93
connect( _scrollBarSubLineButtons, SIGNAL( currentIndexChanged(int) ), SLOT( updateChanged() ) );
94
connect( _menuHighlightDark, SIGNAL( toggled(bool) ), SLOT( updateChanged() ) );
95
connect( _menuHighlightStrong, SIGNAL( toggled(bool) ), SLOT( updateChanged() ) );
96
connect( _menuHighlightSubtle, SIGNAL( toggled(bool) ), SLOT( updateChanged() ) );
97
connect( _tabStylePlain, SIGNAL( toggled(bool)), SLOT( updateChanged() ) );
98
connect( _tabStyleSingle, SIGNAL( toggled(bool)), SLOT( updateChanged() ) );
99
connect( _windowDragMode, SIGNAL( currentIndexChanged( int ) ), SLOT( updateChanged() ) );
100
connect( _useWMMoveResize, SIGNAL( toggled( bool ) ), SLOT( updateChanged() ) );
104
//__________________________________________________________________
105
void StyleConfig::save( void )
107
StyleConfigData::setToolBarDrawItemSeparator( _toolBarDrawItemSeparator->isChecked() );
108
StyleConfigData::setCheckBoxStyle( ( _checkDrawX->isChecked() ? StyleConfigData::CS_X : StyleConfigData::CS_CHECK ) );
109
StyleConfigData::setShowMnemonics( _showMnemonics->isChecked() );
110
StyleConfigData::setCacheEnabled( _cacheEnabled->isChecked() );
111
StyleConfigData::setViewDrawTriangularExpander( _viewDrawTriangularExpander->isChecked() );
112
StyleConfigData::setViewTriangularExpanderSize( triangularExpanderSize() );
113
StyleConfigData::setViewDrawFocusIndicator( _viewDrawFocusIndicator->isChecked() );
114
StyleConfigData::setViewDrawTreeBranchLines( _viewDrawTreeBranchLines->isChecked() );
115
StyleConfigData::setScrollBarWidth( _scrollBarWidth->value() );
116
StyleConfigData::setScrollBarAddLineButtons( _scrollBarAddLineButtons->currentIndex() );
117
StyleConfigData::setScrollBarSubLineButtons( _scrollBarSubLineButtons->currentIndex() );
118
StyleConfigData::setMenuHighlightMode( menuMode() );
119
StyleConfigData::setTabStyle( tabStyle() );
120
StyleConfigData::setViewTriangularExpanderSize( triangularExpanderSize() );
125
_animationConfigWidget->save();
129
StyleConfigData::setAnimationsEnabled( _animationsEnabled->isChecked() );
133
StyleConfigData::setUseWMMoveResize( _useWMMoveResize->isChecked() );
134
if( _windowDragMode->currentIndex() == 0 )
137
StyleConfigData::setWindowDragEnabled( false );
141
StyleConfigData::setWindowDragEnabled( true );
142
StyleConfigData::setWindowDragMode( windowDragMode() );
146
StyleConfigData::self()->writeConfig();
149
QDBusMessage message( QDBusMessage::createSignal("/OxygenStyle", "org.kde.Oxygen.Style", "reparseConfiguration") );
150
QDBusConnection::sessionBus().send(message);
154
//__________________________________________________________________
155
void StyleConfig::defaults( void )
157
StyleConfigData::self()->setDefaults();
161
//__________________________________________________________________
162
void StyleConfig::reset( void )
164
StyleConfigData::self()->readConfig();
168
//__________________________________________________________________
169
void StyleConfig::toggleExpertMode( bool value )
174
// update widget visibility based on expert mode
178
// create animationConfigWidget if needed
179
if( !_animationConfigWidget )
181
_animationConfigWidget = new AnimationConfigWidget();
182
connect( _animationConfigWidget, SIGNAL( changed( bool ) ), SLOT( updateChanged( void ) ) );
183
connect( _animationConfigWidget, SIGNAL( layoutChanged( void ) ), SLOT( updateLayout() ) );
184
_animationConfigWidget->load();
187
// add animationConfigWidget to tabbar if needed
188
if( tabWidget->indexOf( _animationConfigWidget ) < 0 )
189
{ tabWidget->insertTab( 1, _animationConfigWidget, i18n( "Animations" ) ); }
191
} else if( _animationConfigWidget ) {
193
if( int index =tabWidget->indexOf( _animationConfigWidget ) >= 0 )
194
{ tabWidget->removeTab( index ); }
198
_showMnemonics->setVisible( _expertMode );
199
_animationsEnabled->setVisible( !_expertMode );
200
_cacheEnabled->setVisible( _expertMode );
201
_useWMMoveResize->setVisible( _expertMode );
202
_viewsExpertWidget->setVisible( _expertMode );
206
//__________________________________________________________________
207
void StyleConfig::showEvent( QShowEvent* )
210
if( _expertMode && _animationConfigWidget )
212
if( const QWidget* widget = tabWidget->widget( tabWidget->currentIndex() ) )
214
int delta = qMax( 0, _animationConfigWidget->sizeHint().height() - widget->size().height() );
215
if( delta > 0 ) window()->setMinimumSize( QSize( window()->minimumSizeHint().width(), window()->size().height() + delta ) );
223
//__________________________________________________________________
224
void StyleConfig::updateLayout( void )
227
if( !_animationConfigWidget ) return;
228
int delta = _animationConfigWidget->minimumSizeHint().height() - _animationConfigWidget->size().height();
229
window()->setMinimumSize( QSize( window()->minimumSizeHint().width(), window()->size().height() + delta ) );
233
//__________________________________________________________________
234
void StyleConfig::updateChanged()
237
bool modified( false );
239
// check if any value was modified
240
if ( _toolBarDrawItemSeparator->isChecked() != StyleConfigData::toolBarDrawItemSeparator() ) modified = true;
241
else if ( _showMnemonics->isChecked() != StyleConfigData::showMnemonics() ) modified = true;
242
else if( _viewDrawTriangularExpander->isChecked() != StyleConfigData::viewDrawTriangularExpander() ) modified = true;
243
else if( _viewDrawFocusIndicator->isChecked() != StyleConfigData::viewDrawFocusIndicator() ) modified = true;
244
else if( _viewDrawTreeBranchLines->isChecked() != StyleConfigData::viewDrawTreeBranchLines() ) modified = true;
245
else if( _scrollBarWidth->value() != StyleConfigData::scrollBarWidth() ) modified = true;
246
else if( _scrollBarAddLineButtons->currentIndex() != StyleConfigData::scrollBarAddLineButtons() ) modified = true;
247
else if( _scrollBarSubLineButtons->currentIndex() != StyleConfigData::scrollBarSubLineButtons() ) modified = true;
248
else if( (_checkDrawX->isChecked() ? StyleConfigData::CS_X : StyleConfigData::CS_CHECK) != StyleConfigData::checkBoxStyle() ) modified = true;
249
else if( menuMode() != StyleConfigData::menuHighlightMode() ) modified = true;
250
else if( tabStyle() != StyleConfigData::tabStyle() ) modified = true;
251
else if( _animationsEnabled->isChecked() != StyleConfigData::animationsEnabled() ) modified = true;
252
else if( _cacheEnabled->isChecked() != StyleConfigData::cacheEnabled() ) modified = true;
253
else if( _useWMMoveResize->isChecked() != StyleConfigData::useWMMoveResize() ) modified = true;
254
else if( triangularExpanderSize() != StyleConfigData::viewTriangularExpanderSize() ) modified = true;
255
else if( _animationConfigWidget && _animationConfigWidget->isChanged() ) modified = true;
259
switch( _windowDragMode->currentIndex() )
263
if( StyleConfigData::windowDragEnabled() ) modified = true;
271
if( !StyleConfigData::windowDragEnabled() || windowDragMode() != StyleConfigData::windowDragMode() )
279
emit changed(modified);
283
//__________________________________________________________________
284
void StyleConfig::load( void )
287
_toolBarDrawItemSeparator->setChecked( StyleConfigData::toolBarDrawItemSeparator() );
288
_showMnemonics->setChecked( StyleConfigData::showMnemonics() );
289
_checkDrawX->setChecked( StyleConfigData::checkBoxStyle() == StyleConfigData::CS_X );
290
_viewDrawTriangularExpander->setChecked( StyleConfigData::viewDrawTriangularExpander() );
291
_viewDrawFocusIndicator->setChecked( StyleConfigData::viewDrawFocusIndicator() );
292
_viewDrawTreeBranchLines->setChecked(StyleConfigData::viewDrawTreeBranchLines() );
294
_scrollBarWidth->setValue(
295
qMin(SCROLLBAR_MAXIMUM_WIDTH, qMax(SCROLLBAR_MINIMUM_WIDTH,
296
StyleConfigData::scrollBarWidth())) );
298
_scrollBarAddLineButtons->setCurrentIndex( StyleConfigData::scrollBarAddLineButtons() );
299
_scrollBarSubLineButtons->setCurrentIndex( StyleConfigData::scrollBarSubLineButtons() );
302
_menuHighlightDark->setChecked( StyleConfigData::menuHighlightMode() == StyleConfigData::MM_DARK );
303
_menuHighlightStrong->setChecked( StyleConfigData::menuHighlightMode() == StyleConfigData::MM_STRONG );
304
_menuHighlightSubtle->setChecked( StyleConfigData::menuHighlightMode() == StyleConfigData::MM_SUBTLE );
307
_tabStyleSingle->setChecked( StyleConfigData::tabStyle() == StyleConfigData::TS_SINGLE );
308
_tabStylePlain->setChecked( StyleConfigData::tabStyle() == StyleConfigData::TS_PLAIN );
310
_animationsEnabled->setChecked( StyleConfigData::animationsEnabled() );
311
_cacheEnabled->setChecked( StyleConfigData::cacheEnabled() );
313
if( !StyleConfigData::windowDragEnabled() ) _windowDragMode->setCurrentIndex(0);
314
else if( StyleConfigData::windowDragMode() == StyleConfigData::WD_MINIMAL ) _windowDragMode->setCurrentIndex(1);
315
else _windowDragMode->setCurrentIndex(2);
317
switch( StyleConfigData::viewTriangularExpanderSize() )
319
case StyleConfigData::TE_TINY: _viewTriangularExpanderSize->setCurrentIndex(0); break;
320
case StyleConfigData::TE_SMALL: default: _viewTriangularExpanderSize->setCurrentIndex(1); break;
321
case StyleConfigData::TE_NORMAL: _viewTriangularExpanderSize->setCurrentIndex(2); break;
324
_useWMMoveResize->setChecked( StyleConfigData::useWMMoveResize() );
326
// animation config widget
327
if( _animationConfigWidget ) _animationConfigWidget->load();
331
//__________________________________________________________________
332
void StyleConfig::windowDragModeChanged( int value )
333
{ _useWMMoveResize->setEnabled( value != 0 ); }
335
//____________________________________________________________
336
int StyleConfig::menuMode( void ) const
338
if (_menuHighlightDark->isChecked()) return StyleConfigData::MM_DARK;
339
else if (_menuHighlightSubtle->isChecked()) return StyleConfigData::MM_SUBTLE;
340
else return StyleConfigData::MM_STRONG;
343
//____________________________________________________________
344
int StyleConfig::tabStyle( void ) const
346
if( _tabStylePlain->isChecked() ) return StyleConfigData::TS_PLAIN;
347
else return StyleConfigData::TS_SINGLE;
350
//____________________________________________________________
351
int StyleConfig::windowDragMode( void ) const
353
switch( _windowDragMode->currentIndex() )
355
case 1: return StyleConfigData::WD_MINIMAL;
356
case 2: default: return StyleConfigData::WD_FULL;
360
//____________________________________________________________
361
int StyleConfig::triangularExpanderSize( void ) const
363
switch( _viewTriangularExpanderSize->currentIndex() )
365
case 0: return StyleConfigData::TE_TINY;
366
case 1: default: return StyleConfigData::TE_SMALL;
367
case 2: return StyleConfigData::TE_NORMAL;