source: trunk/tools/qtconfig/paletteeditoradvanced.cpp@ 280

Last change on this file since 280 was 2, checked in by Dmitry A. Kuminov, 16 years ago

Initially imported qt-all-opensource-src-4.5.1 from Trolltech.

File size: 15.6 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4** Contact: Qt Software Information ([email protected])
5**
6** This file is part of the tools applications of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL$
9** Commercial Usage
10** Licensees holding valid Qt Commercial licenses may use this file in
11** accordance with the Qt Commercial License Agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and Nokia.
14**
15** GNU Lesser General Public License Usage
16** Alternatively, this file may be used under the terms of the GNU Lesser
17** General Public License version 2.1 as published by the Free Software
18** Foundation and appearing in the file LICENSE.LGPL included in the
19** packaging of this file. Please review the following information to
20** ensure the GNU Lesser General Public License version 2.1 requirements
21** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
22**
23** In addition, as a special exception, Nokia gives you certain
24** additional rights. These rights are described in the Nokia Qt LGPL
25** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
26** package.
27**
28** GNU General Public License Usage
29** Alternatively, this file may be used under the terms of the GNU
30** General Public License version 3.0 as published by the Free Software
31** Foundation and appearing in the file LICENSE.GPL included in the
32** packaging of this file. Please review the following information to
33** ensure the GNU General Public License version 3.0 requirements will be
34** met: http://www.gnu.org/copyleft/gpl.html.
35**
36** If you are unsure which license is appropriate for your use, please
37** contact the sales department at [email protected].
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42#include "paletteeditoradvanced.h"
43#include "colorbutton.h"
44
45#include <QCheckBox>
46#include <QComboBox>
47#include <QApplication>
48#include <QPushButton>
49#include <QPainter>
50#include <QGroupBox>
51
52QT_BEGIN_NAMESPACE
53
54PaletteEditorAdvanced::PaletteEditorAdvanced( QWidget * parent,
55 const char * name, bool modal, Qt::WindowFlags f )
56 : PaletteEditorAdvancedBase( parent, name, modal, f ), selectedPalette(0)
57{
58 // work around buggy ui file
59 comboEffect->setEnabled(false);
60 buttonEffect->setEnabled(false);
61 onToggleBuildEffects(true);
62
63 editPalette = QApplication::palette();
64 setPreviewPalette( editPalette );
65}
66
67PaletteEditorAdvanced::~PaletteEditorAdvanced()
68{
69}
70
71void PaletteEditorAdvanced::onToggleBuildInactive( bool v )
72{
73 if (selectedPalette == 1) {
74 groupCentral->setDisabled(v);
75 groupEffect->setDisabled(v);
76 }
77
78 if (v) {
79 buildInactive();
80 updateColorButtons();
81 }
82}
83
84void PaletteEditorAdvanced::onToggleBuildDisabled( bool v )
85{
86 if (selectedPalette == 2) {
87 groupCentral->setDisabled(v);
88 groupEffect->setDisabled(v);
89 }
90
91 if (v) {
92 buildDisabled();
93 updateColorButtons();
94 }
95}
96
97void PaletteEditorAdvanced::paletteSelected(int p)
98{
99 selectedPalette = p;
100
101 if(p == 1) { // inactive
102 groupCentral->setDisabled(checkBuildInactive->isChecked());
103 groupEffect->setDisabled(checkBuildInactive->isChecked());
104 }
105 else if (p == 2) { // disabled
106 groupCentral->setDisabled(checkBuildDisabled->isChecked());
107 groupEffect->setDisabled(checkBuildDisabled->isChecked());
108 }
109 else {
110 groupCentral->setEnabled(true);
111 groupEffect->setEnabled(true);
112 }
113 updateColorButtons();
114}
115
116void PaletteEditorAdvanced::onChooseCentralColor()
117{
118 switch(selectedPalette) {
119 case 0:
120 default:
121 mapToActiveCentralRole( buttonCentral->color() );
122 break;
123 case 1:
124 mapToInactiveCentralRole( buttonCentral->color() );
125 break;
126 case 2:
127 mapToDisabledCentralRole( buttonCentral->color() );
128 break;
129 }
130 updateColorButtons();
131}
132
133void PaletteEditorAdvanced::onChooseEffectColor()
134{
135 switch(selectedPalette) {
136 case 0:
137 default:
138 mapToActiveEffectRole( buttonEffect->color() );
139 break;
140 case 1:
141 mapToInactiveEffectRole( buttonEffect->color() );
142 break;
143 case 2:
144 mapToDisabledEffectRole( buttonEffect->color() );
145 break;
146 }
147 updateColorButtons();
148}
149
150void PaletteEditorAdvanced::onToggleBuildEffects( bool on )
151{
152 if (!on) return;
153 buildActiveEffect();
154 buildInactiveEffect();
155 buildDisabledEffect();
156}
157
158QColorGroup::ColorRole PaletteEditorAdvanced::centralFromItem( int item )
159{
160 switch( item ) {
161 case 0:
162 return QColorGroup::Window;
163 case 1:
164 return QColorGroup::WindowText;
165 case 2:
166 return QColorGroup::Button;
167 case 3:
168 return QColorGroup::Base;
169 case 4:
170 return QColorGroup::Text;
171 case 5:
172 return QColorGroup::BrightText;
173 case 6:
174 return QColorGroup::ButtonText;
175 case 7:
176 return QColorGroup::Highlight;
177 case 8:
178 return QColorGroup::HighlightedText;
179 default:
180 return QColorGroup::NColorRoles;
181 }
182}
183
184QColorGroup::ColorRole PaletteEditorAdvanced::effectFromItem( int item )
185{
186 switch( item ) {
187 case 0:
188 return QColorGroup::Light;
189 case 1:
190 return QColorGroup::Midlight;
191 case 2:
192 return QColorGroup::Mid;
193 case 3:
194 return QColorGroup::Dark;
195 case 4:
196 return QColorGroup::Shadow;
197 default:
198 return QColorGroup::NColorRoles;
199 }
200}
201
202void PaletteEditorAdvanced::onCentral( int item )
203{
204 QColor c;
205
206 switch(selectedPalette) {
207 case 0:
208 default:
209 c = editPalette.active().color( centralFromItem(item) );
210 break;
211 case 1:
212 c = editPalette.inactive().color( centralFromItem(item) );
213 break;
214 case 2:
215 c = editPalette.disabled().color( centralFromItem(item) );
216 break;
217 }
218
219 buttonCentral->setColor(c);
220}
221
222void PaletteEditorAdvanced::onEffect( int item )
223{
224 QColor c;
225 switch(selectedPalette) {
226 case 0:
227 default:
228 c = editPalette.active().color( effectFromItem(item) );
229 break;
230 case 1:
231 editPalette.inactive().color( effectFromItem(item) );
232 break;
233 case 2:
234 editPalette.disabled().color( effectFromItem(item) );
235 break;
236 }
237 buttonEffect->setColor(c);
238}
239
240void PaletteEditorAdvanced::mapToActiveCentralRole( const QColor& c )
241{
242 QColorGroup cg = editPalette.active();
243 cg.setColor( centralFromItem(comboCentral->currentItem()), c );
244 editPalette.setActive( cg );
245
246 buildActiveEffect();
247 if(checkBuildInactive->isChecked())
248 buildInactive();
249 if(checkBuildDisabled->isChecked())
250 buildDisabled();
251
252 setPreviewPalette( editPalette );
253}
254
255void PaletteEditorAdvanced::mapToActiveEffectRole( const QColor& c )
256{
257 QColorGroup cg = editPalette.active();
258 cg.setColor( effectFromItem(comboEffect->currentItem()), c );
259 editPalette.setActive( cg );
260
261 if(checkBuildInactive->isChecked())
262 buildInactive();
263 if(checkBuildDisabled->isChecked())
264 buildDisabled();
265
266 setPreviewPalette( editPalette );
267}
268
269void PaletteEditorAdvanced::mapToActivePixmapRole( const QPixmap& pm )
270{
271 QColorGroup::ColorRole role = centralFromItem(comboCentral->currentItem());
272 QColorGroup cg = editPalette.active();
273 if ( !pm.isNull() )
274 cg.setBrush( role, QBrush( cg.color( role ), pm ) );
275 else
276 cg.setBrush( role, QBrush( cg.color( role ) ) );
277 editPalette.setActive( cg );
278
279
280 buildActiveEffect();
281 if(checkBuildInactive->isChecked())
282 buildInactive();
283 if(checkBuildDisabled->isChecked())
284 buildDisabled();
285
286 setPreviewPalette( editPalette );
287}
288
289void PaletteEditorAdvanced::mapToInactiveCentralRole( const QColor& c )
290{
291 QColorGroup cg = editPalette.inactive();
292 cg.setColor( centralFromItem(comboCentral->currentItem()), c );
293 editPalette.setInactive( cg );
294
295 buildInactiveEffect();
296
297 setPreviewPalette( editPalette );
298}
299
300void PaletteEditorAdvanced::mapToInactiveEffectRole( const QColor& c )
301{
302 QColorGroup cg = editPalette.inactive();
303 cg.setColor( effectFromItem(comboEffect->currentItem()), c );
304 editPalette.setInactive( cg );
305
306 setPreviewPalette( editPalette );
307}
308
309void PaletteEditorAdvanced::mapToInactivePixmapRole( const QPixmap& pm )
310{
311 QColorGroup::ColorRole role = centralFromItem(comboCentral->currentItem());
312 QColorGroup cg = editPalette.inactive();
313 if ( !pm.isNull() )
314 cg.setBrush( role, QBrush( cg.color( role ), pm ) );
315 else
316 cg.setBrush( role, QBrush( cg.color( role ) ) );
317 editPalette.setInactive( cg );
318
319 setPreviewPalette( editPalette );
320}
321
322void PaletteEditorAdvanced::mapToDisabledCentralRole( const QColor& c )
323{
324 QColorGroup cg = editPalette.disabled();
325 cg.setColor( centralFromItem(comboCentral->currentItem()), c );
326 editPalette.setDisabled( cg );
327
328 buildDisabledEffect();
329
330 setPreviewPalette( editPalette );
331}
332
333void PaletteEditorAdvanced::mapToDisabledEffectRole( const QColor& c )
334{
335 QColorGroup cg = editPalette.disabled();
336 cg.setColor( effectFromItem(comboEffect->currentItem()), c );
337 editPalette.setDisabled( cg );
338
339 setPreviewPalette( editPalette );
340}
341
342void PaletteEditorAdvanced::mapToDisabledPixmapRole( const QPixmap& pm )
343{
344 QColorGroup::ColorRole role = centralFromItem(comboCentral->currentItem());
345 QColorGroup cg = editPalette.disabled();
346 if ( !pm.isNull() )
347 cg.setBrush( role, QBrush( cg.color( role ), pm ) );
348 else
349 cg.setBrush( role, QBrush( cg.color( role ) ) );
350
351 editPalette.setDisabled( cg );
352
353 setPreviewPalette( editPalette );
354}
355
356void PaletteEditorAdvanced::buildActiveEffect()
357{
358 QColorGroup cg = editPalette.active();
359 QColor btn = cg.color( QColorGroup::Button );
360
361 QPalette temp( btn, btn );
362
363 for (int i = 0; i<5; i++)
364 cg.setColor( effectFromItem(i), temp.active().color( effectFromItem(i) ) );
365
366 editPalette.setActive( cg );
367 setPreviewPalette( editPalette );
368
369 updateColorButtons();
370}
371
372void PaletteEditorAdvanced::buildInactive()
373{
374 editPalette.setInactive( editPalette.active() );
375 if ( checkBuildEffect->isChecked() )
376 buildInactiveEffect();
377 else {
378 setPreviewPalette( editPalette );
379 updateColorButtons();
380 }
381
382}
383
384void PaletteEditorAdvanced::buildInactiveEffect()
385{
386 QColorGroup cg = editPalette.inactive();
387
388 QColor light, midlight, mid, dark, shadow;
389 QColor btn = cg.color( QColorGroup::Button );
390
391 light = btn.light(150);
392 midlight = btn.light(115);
393 mid = btn.dark(150);
394 dark = btn.dark();
395 shadow = Qt::black;
396
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 );
402
403 editPalette.setInactive( cg );
404 setPreviewPalette( editPalette );
405 updateColorButtons();
406}
407
408void PaletteEditorAdvanced::buildDisabled()
409{
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 );