~ubuntu-branches/ubuntu/utopic/kde-workspace/utopic-proposed

« back to all changes in this revision

Viewing changes to kstyles/oxygen/config/oxygenstyleconfig.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Michał Zając
  • Date: 2011-07-09 08:31:15 UTC
  • Revision ID: james.westby@ubuntu.com-20110709083115-ohyxn6z93mily9fc
Tags: upstream-4.6.90
Import upstream version 4.6.90

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
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>
 
6
 
 
7
originally based on the Keramik configuration dialog:
 
8
Copyright 2003 Maksim Orlovich <maksim.orlovich@kdemail.net>
 
9
 
 
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:
 
16
 
 
17
The above copyright notice and this permission notice shall be included in
 
18
all copies or substantial portions of the Software.
 
19
 
 
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.
 
27
 
 
28
*/
 
29
 
 
30
#include "oxygenstyleconfig.h"
 
31
#include "oxygenstyleconfig.moc"
 
32
#include "oxygenanimationconfigwidget.h"
 
33
#include "oxygenstyleconfigdata.h"
 
34
 
 
35
#include <QtCore/QTextStream>
 
36
#include <QtDBus/QDBusMessage>
 
37
#include <QtDBus/QDBusConnection>
 
38
 
 
39
#include <KGlobal>
 
40
#include <KLocale>
 
41
#include <KSharedConfig>
 
42
#include <KConfigGroup>
 
43
#include <kdemacros.h>
 
44
#include <KDialog>
 
45
 
 
46
#define SCROLLBAR_DEFAULT_WIDTH 15
 
47
#define SCROLLBAR_MINIMUM_WIDTH 10
 
48
#define SCROLLBAR_MAXIMUM_WIDTH 30
 
49
 
 
50
extern "C"
 
51
{
 
52
    KDE_EXPORT QWidget* allocate_kstyle_config(QWidget* parent)
 
53
    {
 
54
        KGlobal::locale()->insertCatalog("kstyle_config");
 
55
        return new Oxygen::StyleConfig(parent);
 
56
    }
 
57
}
 
58
 
 
59
namespace Oxygen
 
60
{
 
61
 
 
62
    //__________________________________________________________________
 
63
    StyleConfig::StyleConfig(QWidget* parent):
 
64
        QWidget(parent),
 
65
        _expertMode( false ),
 
66
        _animationConfigWidget(0)
 
67
    {
 
68
        KGlobal::locale()->insertCatalog("kstyle_config");
 
69
 
 
70
        setupUi(this);
 
71
 
 
72
        // connections
 
73
        connect( _windowDragMode, SIGNAL( currentIndexChanged( int ) ), SLOT( windowDragModeChanged( int ) ) );
 
74
        connect( _viewDrawTriangularExpander, SIGNAL( toggled( bool ) ), _viewTriangularExpanderSize, SLOT( setEnabled( bool ) ) );
 
75
 
 
76
        // toggle expert mode
 
77
        toggleExpertMode( false );
 
78
 
 
79
        // load setup from configData
 
80
        load();
 
81
 
 
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() ) );
 
101
 
 
102
    }
 
103
 
 
104
    //__________________________________________________________________
 
105
    void StyleConfig::save( void )
 
106
    {
 
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() );
 
121
 
 
122
        if( _expertMode )
 
123
        {
 
124
 
 
125
            _animationConfigWidget->save();
 
126
 
 
127
        } else {
 
128
 
 
129
            StyleConfigData::setAnimationsEnabled( _animationsEnabled->isChecked() );
 
130
 
 
131
        }
 
132
 
 
133
        StyleConfigData::setUseWMMoveResize( _useWMMoveResize->isChecked() );
 
134
        if( _windowDragMode->currentIndex() == 0 )
 
135
        {
 
136
 
 
137
            StyleConfigData::setWindowDragEnabled( false  );
 
138
 
 
139
        } else {
 
140
 
 
141
            StyleConfigData::setWindowDragEnabled( true  );
 
142
            StyleConfigData::setWindowDragMode( windowDragMode()  );
 
143
 
 
144
        }
 
145
 
 
146
        StyleConfigData::self()->writeConfig();
 
147
 
 
148
        // emit dbus signal
 
149
        QDBusMessage message( QDBusMessage::createSignal("/OxygenStyle",  "org.kde.Oxygen.Style", "reparseConfiguration") );
 
150
        QDBusConnection::sessionBus().send(message);
 
151
 
 
152
    }
 
153
 
 
154
    //__________________________________________________________________
 
155
    void StyleConfig::defaults( void )
 
156
    {
 
157
        StyleConfigData::self()->setDefaults();
 
158
        load();
 
159
    }
 
160
 
 
161
    //__________________________________________________________________
 
162
    void StyleConfig::reset( void )
 
163
    {
 
164
        StyleConfigData::self()->readConfig();
 
165
        load();
 
166
    }
 
167
 
 
168
    //__________________________________________________________________
 
169
    void StyleConfig::toggleExpertMode( bool value )
 
170
    {
 
171
 
 
172
        _expertMode = value;
 
173
 
 
174
        // update widget visibility based on expert mode
 
175
        if( _expertMode )
 
176
        {
 
177
 
 
178
            // create animationConfigWidget if needed
 
179
            if( !_animationConfigWidget )
 
180
            {
 
181
                _animationConfigWidget = new AnimationConfigWidget();
 
182
                connect( _animationConfigWidget, SIGNAL( changed( bool ) ), SLOT( updateChanged( void ) ) );
 
183
                connect( _animationConfigWidget, SIGNAL( layoutChanged( void ) ), SLOT( updateLayout() ) );
 
184
                _animationConfigWidget->load();
 
185
            }
 
186
 
 
187
            // add animationConfigWidget to tabbar if needed
 
188
            if( tabWidget->indexOf( _animationConfigWidget ) < 0 )
 
189
            { tabWidget->insertTab( 1, _animationConfigWidget, i18n( "Animations" ) ); }
 
190
 
 
191
        } else if( _animationConfigWidget ) {
 
192
 
 
193
            if( int index =tabWidget->indexOf( _animationConfigWidget ) >= 0 )
 
194
            { tabWidget->removeTab( index ); }
 
195
 
 
196
        }
 
197
 
 
198
        _showMnemonics->setVisible( _expertMode );
 
199
        _animationsEnabled->setVisible( !_expertMode );
 
200
        _cacheEnabled->setVisible( _expertMode );
 
201
        _useWMMoveResize->setVisible( _expertMode );
 
202
        _viewsExpertWidget->setVisible( _expertMode );
 
203
 
 
204
    }
 
205
 
 
206
    //__________________________________________________________________
 
207
    void StyleConfig::showEvent( QShowEvent* )
 
208
    {
 
209
 
 
210
        if( _expertMode && _animationConfigWidget )
 
211
        {
 
212
            if( const QWidget* widget = tabWidget->widget( tabWidget->currentIndex() ) )
 
213
            {
 
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 ) );
 
216
            }
 
217
        }
 
218
 
 
219
        return;
 
220
 
 
221
    }
 
222
 
 
223
    //__________________________________________________________________
 
224
    void StyleConfig::updateLayout( void )
 
225
    {
 
226
 
 
227
        if( !_animationConfigWidget ) return;
 
228
        int delta = _animationConfigWidget->minimumSizeHint().height() - _animationConfigWidget->size().height();
 
229
        window()->setMinimumSize( QSize( window()->minimumSizeHint().width(), window()->size().height() + delta ) );
 
230
 
 
231
    }
 
232
 
 
233
    //__________________________________________________________________
 
234
    void StyleConfig::updateChanged()
 
235
    {
 
236
 
 
237
        bool modified( false );
 
238
 
 
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;
 
256
 
 
257
        if( !modified )
 
258
        {
 
259
            switch( _windowDragMode->currentIndex() )
 
260
            {
 
261
                case 0:
 
262
                {
 
263
                    if( StyleConfigData::windowDragEnabled() ) modified = true;
 
264
                    break;
 
265
                }
 
266
 
 
267
                case 1:
 
268
                case 2:
 
269
                default:
 
270
                {
 
271
                    if( !StyleConfigData::windowDragEnabled() || windowDragMode() != StyleConfigData::windowDragMode() )
 
272
                    { modified = true; }
 
273
                    break;
 
274
                }
 
275
 
 
276
            }
 
277
        }
 
278
 
 
279
        emit changed(modified);
 
280
 
 
281
    }
 
282
 
 
283
    //__________________________________________________________________
 
284
    void StyleConfig::load( void )
 
285
    {
 
286
 
 
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() );
 
293
 
 
294
        _scrollBarWidth->setValue(
 
295
            qMin(SCROLLBAR_MAXIMUM_WIDTH, qMax(SCROLLBAR_MINIMUM_WIDTH,
 
296
            StyleConfigData::scrollBarWidth())) );
 
297
 
 
298
        _scrollBarAddLineButtons->setCurrentIndex( StyleConfigData::scrollBarAddLineButtons() );
 
299
        _scrollBarSubLineButtons->setCurrentIndex( StyleConfigData::scrollBarSubLineButtons() );
 
300
 
 
301
        // menu highlight
 
302
        _menuHighlightDark->setChecked( StyleConfigData::menuHighlightMode() == StyleConfigData::MM_DARK );
 
303
        _menuHighlightStrong->setChecked( StyleConfigData::menuHighlightMode() == StyleConfigData::MM_STRONG );
 
304
        _menuHighlightSubtle->setChecked( StyleConfigData::menuHighlightMode() == StyleConfigData::MM_SUBTLE );
 
305
 
 
306
        // tab style
 
307
        _tabStyleSingle->setChecked( StyleConfigData::tabStyle() == StyleConfigData::TS_SINGLE );
 
308
        _tabStylePlain->setChecked( StyleConfigData::tabStyle() == StyleConfigData::TS_PLAIN );
 
309
 
 
310
        _animationsEnabled->setChecked( StyleConfigData::animationsEnabled() );
 
311
        _cacheEnabled->setChecked( StyleConfigData::cacheEnabled() );
 
312
 
 
313
        if( !StyleConfigData::windowDragEnabled() ) _windowDragMode->setCurrentIndex(0);
 
314
        else if( StyleConfigData::windowDragMode() == StyleConfigData::WD_MINIMAL ) _windowDragMode->setCurrentIndex(1);
 
315
        else _windowDragMode->setCurrentIndex(2);
 
316
 
 
317
        switch( StyleConfigData::viewTriangularExpanderSize() )
 
318
        {
 
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;
 
322
        }
 
323
 
 
324
        _useWMMoveResize->setChecked( StyleConfigData::useWMMoveResize() );
 
325
 
 
326
        // animation config widget
 
327
        if( _animationConfigWidget ) _animationConfigWidget->load();
 
328
 
 
329
    }
 
330
 
 
331
    //__________________________________________________________________
 
332
    void StyleConfig::windowDragModeChanged( int value )
 
333
    { _useWMMoveResize->setEnabled( value != 0 ); }
 
334
 
 
335
    //____________________________________________________________
 
336
    int StyleConfig::menuMode( void ) const
 
337
    {
 
338
        if (_menuHighlightDark->isChecked()) return StyleConfigData::MM_DARK;
 
339
        else if (_menuHighlightSubtle->isChecked()) return StyleConfigData::MM_SUBTLE;
 
340
        else return StyleConfigData::MM_STRONG;
 
341
    }
 
342
 
 
343
    //____________________________________________________________
 
344
    int StyleConfig::tabStyle( void ) const
 
345
    {
 
346
        if( _tabStylePlain->isChecked() ) return StyleConfigData::TS_PLAIN;
 
347
        else return StyleConfigData::TS_SINGLE;
 
348
    }
 
349
 
 
350
    //____________________________________________________________
 
351
    int StyleConfig::windowDragMode( void ) const
 
352
    {
 
353
        switch( _windowDragMode->currentIndex() )
 
354
        {
 
355
            case 1: return StyleConfigData::WD_MINIMAL;
 
356
            case 2: default: return StyleConfigData::WD_FULL;
 
357
        }
 
358
    }
 
359
 
 
360
    //____________________________________________________________
 
361
    int StyleConfig::triangularExpanderSize( void ) const
 
362
    {
 
363
        switch( _viewTriangularExpanderSize->currentIndex() )
 
364
        {
 
365
            case 0: return StyleConfigData::TE_TINY;
 
366
            case 1: default: return StyleConfigData::TE_SMALL;
 
367
            case 2: return StyleConfigData::TE_NORMAL;
 
368
        }
 
369
 
 
370
    }
 
371
 
 
372
}