1 /****************************************************************************
3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4 ** All rights reserved.
5 ** Contact: Nokia Corporation (qt-info@nokia.com)
7 ** This file is part of the tools applications of the Qt Toolkit.
9 ** $QT_BEGIN_LICENSE:LGPL$
10 ** No Commercial Usage
11 ** This file contains pre-release code and may not be distributed.
12 ** You may use this file in accordance with the terms and conditions
13 ** contained in the Technology Preview License Agreement accompanying
16 ** GNU Lesser General Public License Usage
17 ** Alternatively, this file may be used under the terms of the GNU Lesser
18 ** General Public License version 2.1 as published by the Free Software
19 ** Foundation and appearing in the file LICENSE.LGPL included in the
20 ** packaging of this file. Please review the following information to
21 ** ensure the GNU Lesser General Public License version 2.1 requirements
22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
24 ** In addition, as a special exception, Nokia gives you certain additional
25 ** rights. These rights are described in the Nokia Qt LGPL Exception
26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
28 ** If you have questions regarding the use of this file, please contact
29 ** Nokia at qt-info@nokia.com.
40 ****************************************************************************/
42 #include "paletteeditoradvanced.h"
43 #include "colorbutton.h"
47 #include <QApplication>
48 #include <QPushButton>
54 PaletteEditorAdvanced::PaletteEditorAdvanced( QWidget
* parent
,
55 const char * name
, bool modal
, Qt::WindowFlags f
)
56 : PaletteEditorAdvancedBase( parent
, name
, modal
, f
), selectedPalette(0)
58 // work around buggy UI file
59 comboEffect
->setEnabled(false);
60 buttonEffect
->setEnabled(false);
61 onToggleBuildEffects(true);
63 editPalette
= QApplication::palette();
64 setPreviewPalette( editPalette
);
67 PaletteEditorAdvanced::~PaletteEditorAdvanced()
71 void PaletteEditorAdvanced::onToggleBuildInactive( bool v
)
73 if (selectedPalette
== 1) {
74 groupCentral
->setDisabled(v
);
75 groupEffect
->setDisabled(v
);
84 void PaletteEditorAdvanced::onToggleBuildDisabled( bool v
)
86 if (selectedPalette
== 2) {
87 groupCentral
->setDisabled(v
);
88 groupEffect
->setDisabled(v
);
97 void PaletteEditorAdvanced::paletteSelected(int p
)
101 if(p
== 1) { // inactive
102 groupCentral
->setDisabled(checkBuildInactive
->isChecked());
103 groupEffect
->setDisabled(checkBuildInactive
->isChecked());
105 else if (p
== 2) { // disabled
106 groupCentral
->setDisabled(checkBuildDisabled
->isChecked());
107 groupEffect
->setDisabled(checkBuildDisabled
->isChecked());
110 groupCentral
->setEnabled(true);
111 groupEffect
->setEnabled(true);
113 updateColorButtons();
116 void PaletteEditorAdvanced::onChooseCentralColor()
118 switch(selectedPalette
) {
121 mapToActiveCentralRole( buttonCentral
->color() );
124 mapToInactiveCentralRole( buttonCentral
->color() );
127 mapToDisabledCentralRole( buttonCentral
->color() );
130 updateColorButtons();
133 void PaletteEditorAdvanced::onChooseEffectColor()
135 switch(selectedPalette
) {
138 mapToActiveEffectRole( buttonEffect
->color() );
141 mapToInactiveEffectRole( buttonEffect
->color() );
144 mapToDisabledEffectRole( buttonEffect
->color() );
147 updateColorButtons();
150 void PaletteEditorAdvanced::onToggleBuildEffects( bool on
)
154 buildInactiveEffect();
155 buildDisabledEffect();
158 QColorGroup::ColorRole
PaletteEditorAdvanced::centralFromItem( int item
)
162 return QColorGroup::Window
;
164 return QColorGroup::WindowText
;
166 return QColorGroup::Button
;
168 return QColorGroup::Base
;
170 return QColorGroup::Text
;
172 return QColorGroup::BrightText
;
174 return QColorGroup::ButtonText
;
176 return QColorGroup::Highlight
;
178 return QColorGroup::HighlightedText
;
180 return QColorGroup::NColorRoles
;
184 QColorGroup::ColorRole
PaletteEditorAdvanced::effectFromItem( int item
)
188 return QColorGroup::Light
;
190 return QColorGroup::Midlight
;
192 return QColorGroup::Mid
;
194 return QColorGroup::Dark
;
196 return QColorGroup::Shadow
;
198 return QColorGroup::NColorRoles
;
202 void PaletteEditorAdvanced::onCentral( int item
)
206 switch(selectedPalette
) {
209 c
= editPalette
.active().color( centralFromItem(item
) );
212 c
= editPalette
.inactive().color( centralFromItem(item
) );
215 c
= editPalette
.disabled().color( centralFromItem(item
) );
219 buttonCentral
->setColor(c
);
222 void PaletteEditorAdvanced::onEffect( int item
)
225 switch(selectedPalette
) {
228 c
= editPalette
.active().color( effectFromItem(item
) );
231 editPalette
.inactive().color( effectFromItem(item
) );
234 editPalette
.disabled().color( effectFromItem(item
) );
237 buttonEffect
->setColor(c
);
240 void PaletteEditorAdvanced::mapToActiveCentralRole( const QColor
& c
)
242 QColorGroup cg
= editPalette
.active();
243 cg
.setColor( centralFromItem(comboCentral
->currentItem()), c
);
244 editPalette
.setActive( cg
);
247 if(checkBuildInactive
->isChecked())
249 if(checkBuildDisabled
->isChecked())
252 setPreviewPalette( editPalette
);
255 void PaletteEditorAdvanced::mapToActiveEffectRole( const QColor
& c
)
257 QColorGroup cg
= editPalette
.active();
258 cg
.setColor( effectFromItem(comboEffect
->currentItem()), c
);
259 editPalette
.setActive( cg
);
261 if(checkBuildInactive
->isChecked())
263 if(checkBuildDisabled
->isChecked())
266 setPreviewPalette( editPalette
);
269 void PaletteEditorAdvanced::mapToActivePixmapRole( const QPixmap
& pm
)
271 QColorGroup::ColorRole role
= centralFromItem(comboCentral
->currentItem());
272 QColorGroup cg
= editPalette
.active();
274 cg
.setBrush( role
, QBrush( cg
.color( role
), pm
) );
276 cg
.setBrush( role
, QBrush( cg
.color( role
) ) );
277 editPalette
.setActive( cg
);
281 if(checkBuildInactive
->isChecked())
283 if(checkBuildDisabled
->isChecked())
286 setPreviewPalette( editPalette
);
289 void PaletteEditorAdvanced::mapToInactiveCentralRole( const QColor
& c
)
291 QColorGroup cg
= editPalette
.inactive();
292 cg
.setColor( centralFromItem(comboCentral
->currentItem()), c
);
293 editPalette
.setInactive( cg
);
295 buildInactiveEffect();
297 setPreviewPalette( editPalette
);
300 void PaletteEditorAdvanced::mapToInactiveEffectRole( const QColor
& c
)
302 QColorGroup cg
= editPalette
.inactive();
303 cg
.setColor( effectFromItem(comboEffect
->currentItem()), c
);
304 editPalette
.setInactive( cg
);
306 setPreviewPalette( editPalette
);
309 void PaletteEditorAdvanced::mapToInactivePixmapRole( const QPixmap
& pm
)
311 QColorGroup::ColorRole role
= centralFromItem(comboCentral
->currentItem());
312 QColorGroup cg
= editPalette
.inactive();
314 cg
.setBrush( role
, QBrush( cg
.color( role
), pm
) );
316 cg
.setBrush( role
, QBrush( cg
.color( role
) ) );
317 editPalette
.setInactive( cg
);
319 setPreviewPalette( editPalette
);
322 void PaletteEditorAdvanced::mapToDisabledCentralRole( const QColor
& c
)
324 QColorGroup cg
= editPalette
.disabled();
325 cg
.setColor( centralFromItem(comboCentral
->currentItem()), c
);
326 editPalette
.setDisabled( cg
);
328 buildDisabledEffect();
330 setPreviewPalette( editPalette
);
333 void PaletteEditorAdvanced::mapToDisabledEffectRole( const QColor
& c
)
335 QColorGroup cg
= editPalette
.disabled();
336 cg
.setColor( effectFromItem(comboEffect
->currentItem()), c
);
337 editPalette
.setDisabled( cg
);
339 setPreviewPalette( editPalette
);
342 void PaletteEditorAdvanced::mapToDisabledPixmapRole( const QPixmap
& pm
)
344 QColorGroup::ColorRole role
= centralFromItem(comboCentral
->currentItem());
345 QColorGroup cg
= editPalette
.disabled();
347 cg
.setBrush( role
, QBrush( cg
.color( role
), pm
) );
349 cg
.setBrush( role
, QBrush( cg
.color( role
) ) );
351 editPalette
.setDisabled( cg
);
353 setPreviewPalette( editPalette
);
356 void PaletteEditorAdvanced::buildActiveEffect()
358 QColorGroup cg
= editPalette
.active();
359 QColor btn
= cg
.color( QColorGroup::Button
);
361 QPalette
temp( btn
, btn
);
363 for (int i
= 0; i
<5; i
++)
364 cg
.setColor( effectFromItem(i
), temp
.active().color( effectFromItem(i
) ) );
366 editPalette
.setActive( cg
);
367 setPreviewPalette( editPalette
);
369 updateColorButtons();
372 void PaletteEditorAdvanced::buildInactive()
374 editPalette
.setInactive( editPalette
.active() );
375 if ( checkBuildEffect
->isChecked() )
376 buildInactiveEffect();
378 setPreviewPalette( editPalette
);
379 updateColorButtons();
384 void PaletteEditorAdvanced::buildInactiveEffect()
386 QColorGroup cg
= editPalette
.inactive();
388 QColor light
, midlight
, mid
, dark
, shadow
;
389 QColor btn
= cg
.color( QColorGroup::Button
);
391 light
= btn
.light(150);
392 midlight
= btn
.light(115);
397 cg
.setColor( QColorGroup::Light
, light
);
398 cg
.setColor( QColorGroup::Midlight
, midlight
);
399 cg
.setColor( QColorGroup::Mid
, mid
);
400 cg
.setColor( QColorGroup::Dark
, dark
);
401 cg
.setColor( QColorGroup::Shadow
, shadow
);
403 editPalette
.setInactive( cg
);
404 setPreviewPalette( editPalette
);
405 updateColorButtons();
408 void PaletteEditorAdvanced::buildDisabled()
410 QColorGroup cg
= editPalette
.active();
411 cg
.setColor( QColorGroup::ButtonText
, Qt::darkGray
);
412 cg
.setColor( QColorGroup::WindowText
, Qt::darkGray
);
413 cg
.setColor( QColorGroup::Text
, Qt::darkGray
);
414 cg
.setColor( QColorGroup::HighlightedText
, Qt::darkGray
);
415 editPalette
.setDisabled( cg
);
417 if ( checkBuildEffect
->isChecked() )
418 buildDisabledEffect();
420 setPreviewPalette( editPalette
);
421 updateColorButtons();
425 void PaletteEditorAdvanced::buildDisabledEffect()
427 QColorGroup cg
= editPalette
.disabled();
429 QColor light
, midlight
, mid
, dark
, shadow
;
430 QColor btn
= cg
.color( QColorGroup::Button
);
432 light
= btn
.light(150);
433 midlight
= btn
.light(115);
438 cg
.setColor( QColorGroup::Light
, light
);
439 cg
.setColor( QColorGroup::Midlight
, midlight
);
440 cg
.setColor( QColorGroup::Mid
, mid
);
441 cg
.setColor( QColorGroup::Dark
, dark
);
442 cg
.setColor( QColorGroup::Shadow
, shadow
);
444 editPalette
.setDisabled( cg
);
445 setPreviewPalette( editPalette
);
446 updateColorButtons();
449 void PaletteEditorAdvanced::setPreviewPalette( const QPalette
& pal
)
453 switch (selectedPalette
) {
465 previewPalette
.setActive( cg
);
466 previewPalette
.setInactive( cg
);
467 previewPalette
.setDisabled( cg
);
470 void PaletteEditorAdvanced::updateColorButtons()
472 QColor central
, effect
;
473 switch (selectedPalette
) {
476 central
= editPalette
.active().color( centralFromItem( comboCentral
->currentItem() ) );
477 effect
= editPalette
.active().color( effectFromItem( comboEffect
->currentItem() ) );
480 central
= editPalette
.inactive().color( centralFromItem( comboCentral
->currentItem() ) );
481 effect
= editPalette
.inactive().color( effectFromItem( comboEffect
->currentItem() ) );
484 central
= editPalette
.disabled().color( centralFromItem( comboCentral
->currentItem() ) );
485 effect
= editPalette
.disabled().color( effectFromItem( comboEffect
->currentItem() ) );
489 buttonCentral
->setColor(central
);
490 buttonEffect
->setColor(effect
);
493 void PaletteEditorAdvanced::setPal( const QPalette
& pal
)
496 setPreviewPalette( pal
);
497 updateColorButtons();
500 QPalette
PaletteEditorAdvanced::pal() const
505 void PaletteEditorAdvanced::setupBackgroundMode( Qt::BackgroundMode mode
)
510 case Qt::PaletteBackground
:
513 case Qt::PaletteForeground
:
516 case Qt::PaletteButton
:
519 case Qt::PaletteBase
:
522 case Qt::PaletteText
:
525 case Qt::PaletteBrightText
:
528 case Qt::PaletteButtonText
:
531 case Qt::PaletteHighlight
:
534 case Qt::PaletteHighlightedText
:
537 case Qt::PaletteLight
:
540 case Qt::PaletteMidlight
:
543 case Qt::PaletteDark
:
549 case Qt::PaletteShadow
:
557 if ( initRole
<= -1 ) return;
560 comboEffect
->setCurrentItem( initRole
- 9 );
563 comboCentral
->setCurrentItem( initRole
);
567 QPalette
PaletteEditorAdvanced::getPalette( bool *ok
, const QPalette
&init
,
568 Qt::BackgroundMode mode
, QWidget
* parent
,
571 PaletteEditorAdvanced
* dlg
= new PaletteEditorAdvanced( parent
, name
, true );
572 dlg
->setupBackgroundMode( mode
);
574 if ( init
!= QPalette() )
576 int resultCode
= dlg
->exec();
578 QPalette result
= init
;
579 if ( resultCode
== QDialog::Accepted
) {