summaryrefslogtreecommitdiff
authordrw <drw>2004-02-21 22:54:19 (UTC)
committer drw <drw>2004-02-21 22:54:19 (UTC)
commitf36efd3490299fb9402a2dc2a6bd2a029fcd93cb (patch) (unidiff)
tree701f649c97a730794a45f47a94e09b9d2ce670d0
parent1a89ecd8e2d11d48a8e80b2fd8b1e95b738a286c (diff)
downloadopie-f36efd3490299fb9402a2dc2a6bd2a029fcd93cb.zip
opie-f36efd3490299fb9402a2dc2a6bd2a029fcd93cb.tar.gz
opie-f36efd3490299fb9402a2dc2a6bd2a029fcd93cb.tar.bz2
Moved class defines in qcolordialog.cpp to header so that apps can properly link to libqtaux
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libqtaux/qcolordialog.cpp837
-rw-r--r--libqtaux/qcolordialog.h315
2 files changed, 563 insertions, 589 deletions
diff --git a/libqtaux/qcolordialog.cpp b/libqtaux/qcolordialog.cpp
index 5881a89..1574841 100644
--- a/libqtaux/qcolordialog.cpp
+++ b/libqtaux/qcolordialog.cpp
@@ -1,1218 +1,910 @@
1/**************************************************************************** 1/****************************************************************************
2** $Id$ 2** $Id$
3** 3**
4** Implementation of QColorDialog class 4** Implementation of QColorDialog class
5** 5**
6** Created : 990222 6** Created : 990222
7** 7**
8** Copyright (C) 1999-2000 Trolltech AS. All rights reserved. 8** Copyright (C) 1999-2000 Trolltech AS. All rights reserved.
9** 9**
10** This file is part of the dialogs module of the Qt GUI Toolkit. 10** This file is part of the dialogs module of the Qt GUI Toolkit.
11** 11**
12** This file may be distributed under the terms of the Q Public License 12** This file may be distributed under the terms of the Q Public License
13** as defined by Trolltech AS of Norway and appearing in the file 13** as defined by Trolltech AS of Norway and appearing in the file
14** LICENSE.QPL included in the packaging of this file. 14** LICENSE.QPL included in the packaging of this file.
15** 15**
16** This file may be distributed and/or modified under the terms of the 16** This file may be distributed and/or modified under the terms of the
17** GNU General Public License version 2 as published by the Free Software 17** GNU General Public License version 2 as published by the Free Software
18** Foundation and appearing in the file LICENSE.GPL included in the 18** Foundation and appearing in the file LICENSE.GPL included in the
19** packaging of this file. 19** packaging of this file.
20** 20**
21** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition 21** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
22** licenses may use this file in accordance with the Qt Commercial License 22** licenses may use this file in accordance with the Qt Commercial License
23** Agreement provided with the Software. 23** Agreement provided with the Software.
24** 24**
25** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 25** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
26** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 26** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
27** 27**
28** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for 28** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
29** information about Qt Commercial License Agreements. 29** information about Qt Commercial License Agreements.
30** See http://www.trolltech.com/qpl/ for QPL licensing information. 30** See http://www.trolltech.com/qpl/ for QPL licensing information.
31** See http://www.trolltech.com/gpl/ for GPL licensing information. 31** See http://www.trolltech.com/gpl/ for GPL licensing information.
32** 32**
33** Contact info@trolltech.com if any conditions of this licensing are 33** Contact info@trolltech.com if any conditions of this licensing are
34** not clear to you. 34** not clear to you.
35** 35**
36**********************************************************************/ 36**********************************************************************/
37 37
38#include "qcolordialog.h" 38#include "qcolordialog.h"
39 39
40#include "qpainter.h" 40#include <qpainter.h>
41#include "qlayout.h" 41#include <qlayout.h>
42#include "qlabel.h" 42#include <qpushbutton.h>
43#include "qpushbutton.h" 43#include <qimage.h>
44#include "qlineedit.h" 44#include <qpixmap.h>
45#include "qimage.h" 45#include <qdrawutil.h>
46#include "qpixmap.h" 46#include <qdragobject.h>
47#include "qdrawutil.h" 47#include <qapplication.h>
48#include "qvalidator.h" 48#include <qdragobject.h>
49#include "qdragobject.h"
50#include "qapplication.h"
51#include "qdragobject.h"
52 49
53//////////// QWellArray BEGIN 50//////////// QWellArray BEGIN
54 51
55#include "qobjectdict.h" 52#include <qobjectdict.h>
56 53
57// 54//
58// W A R N I N G 55// W A R N I N G
59// ------------- 56// -------------
60// 57//
61// This file is not part of the Qt API. It exists for the convenience 58// This file is not part of the Qt API. It exists for the convenience
62// of qwellarray.cpp and qcolordialog.cpp. 59// of qwellarray.cpp and qcolordialog.cpp.
63// This header file may change from version to version without notice, 60// This header file may change from version to version without notice,
64// or even be removed. 61// or even be removed.
65// 62//
66// 63//
67 64
68
69#include "qtableview.h"
70
71
72struct QWellArrayData;
73
74class QWellArray : public QTableView
75{
76 Q_OBJECT
77 Q_PROPERTY( int numCols READ numCols )
78 Q_PROPERTY( int numRows READ numRows )
79 Q_PROPERTY( int selectedColumn READ selectedColumn )
80 Q_PROPERTY( int selectedRow READ selectedRow )
81
82public:
83 QWellArray( QWidget *parent=0, const char *name=0, bool popup = FALSE );
84
85 ~QWellArray() {}
86 QString cellContent( int row, int col ) const;
87 // ### Paul !!! virtual void setCellContent( int row, int col, const QString &);
88
89 // ##### Obsolete since not const
90 int numCols() { return nCols; }
91 int numRows() { return nRows; }
92
93 int numCols() const { return nCols; }
94 int numRows() const { return nRows; }
95
96 // ##### Obsolete since not const
97 int selectedColumn() { return selCol; }
98 int selectedRow() { return selRow; }
99
100 int selectedColumn() const { return selCol; }
101 int selectedRow() const { return selRow; }
102
103 virtual void setSelected( int row, int col );
104
105 void setCellSize( int w, int h ) { setCellWidth(w);setCellHeight( h ); }
106
107 QSize sizeHint() const;
108
109 virtual void setDimension( int rows, int cols );
110 virtual void setCellBrush( int row, int col, const QBrush & );
111 QBrush cellBrush( int row, int col );
112
113signals:
114 void selected( int row, int col );
115
116protected:
117 virtual void setCurrent( int row, int col );
118
119 virtual void drawContents( QPainter *, int row, int col, const QRect& );
120 void drawContents( QPainter * );
121
122 void paintCell( QPainter*, int row, int col );
123 void mousePressEvent( QMouseEvent* );
124 void mouseReleaseEvent( QMouseEvent* );
125 void mouseMoveEvent( QMouseEvent* );
126 void keyPressEvent( QKeyEvent* );
127 void focusInEvent( QFocusEvent* );
128 void focusOutEvent( QFocusEvent* );
129
130private:
131 int curRow;
132 int curCol;
133 int selRow;
134 int selCol;
135 int nCols;
136 int nRows;
137 bool smallStyle;
138 QWellArrayData *d;
139
140 private:// Disabled copy constructor and operator=
141#if defined(Q_DISABLE_COPY)
142 QWellArray( const QWellArray & );
143 QWellArray& operator=( const QWellArray & );
144#endif
145};
146
147
148
149// non-interface ...
150
151
152
153struct QWellArrayData {
154 QBrush *brush;
155};
156
157// NOT REVISED
158/* WARNING, NOT
159 \class QWellArray qwellarray_p.h
160 \brief ....
161
162 ....
163
164 \ingroup advanced
165*/
166
167QWellArray::QWellArray( QWidget *parent, const char * name, bool popup ) 65QWellArray::QWellArray( QWidget *parent, const char * name, bool popup )
168 : QTableView( parent, name, 66 : QTableView( parent, name,
169 popup ? (WStyle_Customize|WStyle_Tool|WStyle_NoBorder) : 0 ) 67 popup ? (WStyle_Customize|WStyle_Tool|WStyle_NoBorder) : 0 )
170{ 68{
171 d = 0; 69 d = 0;
172 setFocusPolicy( StrongFocus ); 70 setFocusPolicy( StrongFocus );
173 setBackgroundMode( PaletteButton ); 71 setBackgroundMode( PaletteButton );
174 nCols = 7; 72 nCols = 7;
175 nRows = 7; 73 nRows = 7;
176 int w = 24; // cell width 74 int w = 24; // cell width
177 int h = 21; // cell height 75 int h = 21; // cell height
178 smallStyle = popup; 76 smallStyle = popup;
179 77
180 if ( popup ) { 78 if ( popup ) {
181 w = h = 18; 79 w = h = 18;
182 if ( style() == WindowsStyle ) 80 if ( style() == WindowsStyle )
183 setFrameStyle( QFrame::WinPanel | QFrame::Raised ); 81 setFrameStyle( QFrame::WinPanel | QFrame::Raised );
184 else 82 else
185 setFrameStyle( QFrame::Panel | QFrame::Raised ); 83 setFrameStyle( QFrame::Panel | QFrame::Raised );
186 setMargin( 1 ); 84 setMargin( 1 );
187 setLineWidth( 2 ); 85 setLineWidth( 2 );
188 } 86 }
189 setNumCols( nCols ); 87 setNumCols( nCols );
190 setNumRows( nRows ); 88 setNumRows( nRows );
191 setCellWidth( w ); 89 setCellWidth( w );
192 setCellHeight( h ); 90 setCellHeight( h );
193 curCol = 0; 91 curCol = 0;
194 curRow = 0; 92 curRow = 0;
195 selCol = -1; 93 selCol = -1;
196 selRow = -1; 94 selRow = -1;
197 95
198 if ( smallStyle ) 96 if ( smallStyle )
199 setMouseTracking( TRUE ); 97 setMouseTracking( TRUE );
200 setOffset( 5 , 10 ); 98 setOffset( 5 , 10 );
201 99
202 resize( sizeHint() ); 100 resize( sizeHint() );
203 101
204} 102}
205 103
206 104
207QSize QWellArray::sizeHint() const 105QSize QWellArray::sizeHint() const
208{ 106{
209 constPolish(); 107 constPolish();
210 int f = frameWidth() * 2; 108 int f = frameWidth() * 2;
211 int w = nCols * cellWidth() + f; 109 int w = nCols * cellWidth() + f;
212 int h = nRows * cellHeight() + f; 110 int h = nRows * cellHeight() + f;
213 return QSize( w, h ); 111 return QSize( w, h );
214} 112}
215 113
216 114
217void QWellArray::paintCell( QPainter* p, int row, int col ) 115void QWellArray::paintCell( QPainter* p, int row, int col )
218{ 116{
219 int w = cellWidth( col ); // width of cell in pixels 117 int w = cellWidth( col ); // width of cell in pixels
220 int h = cellHeight( row ); // height of cell in pixels 118 int h = cellHeight( row ); // height of cell in pixels
221 int b = 1; 119 int b = 1;
222 120
223 if ( !smallStyle ) 121 if ( !smallStyle )
224 b = 3; 122 b = 3;
225 123
226 const QColorGroup & g = colorGroup(); 124 const QColorGroup & g = colorGroup();
227 p->setPen( QPen( black, 0, SolidLine ) ); 125 p->setPen( QPen( black, 0, SolidLine ) );
228 if ( !smallStyle && row ==selRow && col == selCol && 126 if ( !smallStyle && row ==selRow && col == selCol &&
229 style() != MotifStyle ) { 127 style() != MotifStyle ) {
230 int n = 2; 128 int n = 2;
231 p->drawRect( n, n, w-2*n, h-2*n ); 129 p->drawRect( n, n, w-2*n, h-2*n );
232 } 130 }
233 131
234 132
235 if ( style() == WindowsStyle ) { 133 if ( style() == WindowsStyle ) {
236 qDrawWinPanel( p, b, b , w - 2*b, h - 2*b, 134 qDrawWinPanel( p, b, b , w - 2*b, h - 2*b,
237 g, TRUE ); 135 g, TRUE );
238 b += 2; 136 b += 2;
239 } else { 137 } else {
240 if ( smallStyle ) { 138 if ( smallStyle ) {
241 qDrawShadePanel( p, b, b , w - 2*b, h - 2*b, 139 qDrawShadePanel( p, b, b , w - 2*b, h - 2*b,
242 g, TRUE, 2 ); 140 g, TRUE, 2 );
243 b += 2; 141 b += 2;
244 } else { 142 } else {
245 int t = ( row == selRow && col == selCol ) ? 2 : 0; 143 int t = ( row == selRow && col == selCol ) ? 2 : 0;
246 b -= t; 144 b -= t;
247 qDrawShadePanel( p, b, b , w - 2*b, h - 2*b, 145 qDrawShadePanel( p, b, b , w - 2*b, h - 2*b,
248 g, TRUE, 2 ); 146 g, TRUE, 2 );
249 b += 2 + t; 147 b += 2 + t;
250 } 148 }
251 } 149 }
252 150
253 151
254 if ( (row == curRow) && (col == curCol) ) { 152 if ( (row == curRow) && (col == curCol) ) {
255 if ( smallStyle ) { 153 if ( smallStyle ) {
256 p->setPen ( white ); 154 p->setPen ( white );
257 p->drawRect( 1, 1, w-2, h-2 ); 155 p->drawRect( 1, 1, w-2, h-2 );
258 p->setPen ( black ); 156 p->setPen ( black );
259 p->drawRect( 0, 0, w, h ); 157 p->drawRect( 0, 0, w, h );
260 p->drawRect( 2, 2, w-4, h-4 ); 158 p->drawRect( 2, 2, w-4, h-4 );
261 b = 3; 159 b = 3;
262 } else if ( hasFocus() ) { 160 } else if ( hasFocus() ) {
263 style().drawFocusRect(p, QRect(0,0,w,h), g ); 161 style().drawFocusRect(p, QRect(0,0,w,h), g );
264 } 162 }
265 } 163 }
266 drawContents( p, row, col, QRect(b, b, w - 2*b, h - 2*b) ); 164 drawContents( p, row, col, QRect(b, b, w - 2*b, h - 2*b) );
267} 165}
268 166
269/*! 167/*!
270 Pass-through to QTableView::drawContents() to avoid hiding. 168 Pass-through to QTableView::drawContents() to avoid hiding.
271*/ 169*/
272void QWellArray::drawContents( QPainter *p ) 170void QWellArray::drawContents( QPainter *p )
273{ 171{
274 QTableView::drawContents(p); 172 QTableView::drawContents(p);
275} 173}
276 174
277/*! 175/*!
278 Reimplement this function to change the contents of the well array. 176 Reimplement this function to change the contents of the well array.
279 */ 177 */
280void QWellArray::drawContents( QPainter *p, int row, int col, const QRect &r ) 178void QWellArray::drawContents( QPainter *p, int row, int col, const QRect &r )
281{ 179{
282 180
283 if ( d ) { 181 if ( d ) {
284 p->fillRect( r, d->brush[row*nCols+col] ); 182 p->fillRect( r, d->brush[row*nCols+col] );
285 } else { 183 } else {
286 p->fillRect( r, white ); 184 p->fillRect( r, white );
287 p->setPen( black ); 185 p->setPen( black );
288 p->drawLine( r.topLeft(), r.bottomRight() ); 186 p->drawLine( r.topLeft(), r.bottomRight() );
289 p->drawLine( r.topRight(), r.bottomLeft() ); 187 p->drawLine( r.topRight(), r.bottomLeft() );
290 } 188 }
291} 189}
292 190
293 191
294/*\reimp 192/*\reimp
295*/ 193*/
296void QWellArray::mousePressEvent( QMouseEvent* e ) 194void QWellArray::mousePressEvent( QMouseEvent* e )
297{ 195{
298 // The current cell marker is set to the cell the mouse is pressed 196 // The current cell marker is set to the cell the mouse is pressed
299 // in. 197 // in.
300 QPoint pos = e->pos(); 198 QPoint pos = e->pos();
301 setCurrent( findRow( pos.y() ), findCol( pos.x() ) ); 199 setCurrent( findRow( pos.y() ), findCol( pos.x() ) );
302} 200}
303 201
304/*\reimp 202/*\reimp
305*/ 203*/
306void QWellArray::mouseReleaseEvent( QMouseEvent* ) 204void QWellArray::mouseReleaseEvent( QMouseEvent* )
307{ 205{
308 // The current cell marker is set to the cell the mouse is clicked 206 // The current cell marker is set to the cell the mouse is clicked
309 // in. 207 // in.
310 setSelected( curRow, curCol ); 208 setSelected( curRow, curCol );
311} 209}
312 210
313 211
314/*\reimp 212/*\reimp
315*/ 213*/
316void QWellArray::mouseMoveEvent( QMouseEvent* e ) 214void QWellArray::mouseMoveEvent( QMouseEvent* e )
317{ 215{
318 // The current cell marker is set to the cell the mouse is 216 // The current cell marker is set to the cell the mouse is
319 // clicked in. 217 // clicked in.
320 if ( smallStyle ) { 218 if ( smallStyle ) {
321 QPoint pos = e->pos(); 219 QPoint pos = e->pos();
322 setCurrent( findRow( pos.y() ), findCol( pos.x() ) ); 220 setCurrent( findRow( pos.y() ), findCol( pos.x() ) );
323 } 221 }
324} 222}
325 223
326/* 224/*
327 Sets the cell currently having the focus. This is not necessarily 225 Sets the cell currently having the focus. This is not necessarily
328 the same as the currently selected cell. 226 the same as the currently selected cell.
329*/ 227*/
330 228
331void QWellArray::setCurrent( int row, int col ) 229void QWellArray::setCurrent( int row, int col )
332{ 230{
333 231
334 if ( (curRow == row) && (curCol == col) ) 232 if ( (curRow == row) && (curCol == col) )
335 return; 233 return;
336 234
337 if ( row < 0 || col < 0 ) 235 if ( row < 0 || col < 0 )
338 row = col = -1; 236 row = col = -1;
339 237
340 int oldRow = curRow; 238 int oldRow = curRow;
341 int oldCol = curCol; 239 int oldCol = curCol;
342 240
343 curRow = row; 241 curRow = row;
344 curCol = col; 242 curCol = col;
345 243
346 updateCell( oldRow, oldCol ); 244 updateCell( oldRow, oldCol );
347 updateCell( curRow, curCol ); 245 updateCell( curRow, curCol );
348} 246}
349 247
350 248
351/*! 249/*!
352 Sets the currently selected cell to \a row, \a col. If \a row or \a 250 Sets the currently selected cell to \a row, \a col. If \a row or \a
353 col are less than zero, the current cell is unselected. 251 col are less than zero, the current cell is unselected.
354 252
355 Does not set the position of the focus indicator. 253 Does not set the position of the focus indicator.
356*/ 254*/
357 255
358void QWellArray::setSelected( int row, int col ) 256void QWellArray::setSelected( int row, int col )
359{ 257{
360 if ( (selRow == row) && (selCol == col) ) 258 if ( (selRow == row) && (selCol == col) )
361 return; 259 return;
362 260
363 int oldRow = selRow; 261 int oldRow = selRow;
364 int oldCol = selCol; 262 int oldCol = selCol;
365 263
366 if ( row < 0 || col < 0 ) 264 if ( row < 0 || col < 0 )
367 row = col = -1; 265 row = col = -1;
368 266
369 selCol = col; 267 selCol = col;
370 selRow = row; 268 selRow = row;
371 269
372 updateCell( oldRow, oldCol ); 270 updateCell( oldRow, oldCol );
373 updateCell( selRow, selCol ); 271 updateCell( selRow, selCol );
374 if ( row >= 0 ) 272 if ( row >= 0 )
375 emit selected( row, col ); 273 emit selected( row, col );
376 274
377 if ( isVisible() && parentWidget() && parentWidget()->inherits("QPopupMenu") ) 275 if ( isVisible() && parentWidget() && parentWidget()->inherits("QPopupMenu") )
378 parentWidget()->close(); 276 parentWidget()->close();
379 277
380} 278}
381 279
382 280
383 281
384/*!\reimp 282/*!\reimp
385*/ 283*/
386void QWellArray::focusInEvent( QFocusEvent* ) 284void QWellArray::focusInEvent( QFocusEvent* )
387{ 285{
388 updateCell( curRow, curCol ); 286 updateCell( curRow, curCol );
389} 287}
390 288
391 289
392/*! 290/*!
393 Sets the size of the well array to be \c rows cells by \c cols. 291 Sets the size of the well array to be \c rows cells by \c cols.
394 Resets any brush info set by setCellBrush(). 292 Resets any brush info set by setCellBrush().
395 293
396 Must be called by reimplementors. 294 Must be called by reimplementors.
397 */ 295 */
398void QWellArray::setDimension( int rows, int cols ) 296void QWellArray::setDimension( int rows, int cols )
399{ 297{
400 nRows = rows; 298 nRows = rows;
401 nCols = cols; 299 nCols = cols;
402 if ( d ) { 300 if ( d ) {
403 if ( d->brush ) 301 if ( d->brush )
404 delete[] d->brush; 302 delete[] d->brush;
405 delete d; 303 delete d;
406 d = 0; 304 d = 0;
407 } 305 }
408 setNumCols( nCols ); 306 setNumCols( nCols );
409 setNumRows( nRows ); 307 setNumRows( nRows );
410} 308}
411 309
412void QWellArray::setCellBrush( int row, int col, const QBrush &b ) 310void QWellArray::setCellBrush( int row, int col, const QBrush &b )
413{ 311{
414 if ( !d ) { 312 if ( !d ) {
415 d = new QWellArrayData; 313 d = new QWellArrayData;
416 d->brush = new QBrush[nRows*nCols]; 314 d->brush = new QBrush[nRows*nCols];
417 } 315 }
418 if ( row >= 0 && row < nRows && col >= 0 && col < nCols ) 316 if ( row >= 0 && row < nRows && col >= 0 && col < nCols )
419 d->brush[row*nCols+col] = b; 317 d->brush[row*nCols+col] = b;
420#ifdef CHECK_RANGE 318#ifdef CHECK_RANGE
421 else 319 else
422 qWarning( "QWellArray::setCellBrush( %d, %d ) out of range", row, col ); 320 qWarning( "QWellArray::setCellBrush( %d, %d ) out of range", row, col );
423#endif 321#endif
424} 322}
425 323
426 324
427 325
428/*! 326/*!
429 Returns the brush set for the cell at \a row, \a col. If no brush is set, 327 Returns the brush set for the cell at \a row, \a col. If no brush is set,
430 \c NoBrush is returned. 328 \c NoBrush is returned.
431*/ 329*/
432 330
433QBrush QWellArray::cellBrush( int row, int col ) 331QBrush QWellArray::cellBrush( int row, int col )
434{ 332{
435 if ( d && row >= 0 && row < nRows && col >= 0 && col < nCols ) 333 if ( d && row >= 0 && row < nRows && col >= 0 && col < nCols )
436 return d->brush[row*nCols+col]; 334 return d->brush[row*nCols+col];
437 return NoBrush; 335 return NoBrush;
438} 336}
439 337
440 338
441 339
442/*!\reimp 340/*!\reimp
443*/ 341*/
444 342
445void QWellArray::focusOutEvent( QFocusEvent* ) 343void QWellArray::focusOutEvent( QFocusEvent* )
446{ 344{
447 updateCell( curRow, curCol ); 345 updateCell( curRow, curCol );
448} 346}
449 347
450/*\reimp 348/*\reimp
451*/ 349*/
452void QWellArray::keyPressEvent( QKeyEvent* e ) 350void QWellArray::keyPressEvent( QKeyEvent* e )
453{ 351{
454 switch( e->key() ) { // Look at the key code 352 switch( e->key() ) { // Look at the key code
455 case Key_Left: // If 'left arrow'-key, 353 case Key_Left: // If 'left arrow'-key,
456 if( curCol > 0 ) { // and cr't not in leftmost col 354 if( curCol > 0 ) { // and cr't not in leftmost col
457 setCurrent( curRow, curCol - 1);// set cr't to next left column 355 setCurrent( curRow, curCol - 1); // set cr't to next left column
458 int edge = leftCell(); // find left edge 356 int edge = leftCell(); // find left edge
459 if ( curCol < edge ) // if we have moved off edge, 357 if ( curCol < edge ) // if we have moved off edge,
460 setLeftCell( edge - 1 );// scroll view to rectify 358 setLeftCell( edge - 1 ); // scroll view to rectify
461 } 359 }
462 break; 360 break;
463 case Key_Right: // Correspondingly... 361 case Key_Right: // Correspondingly...
464 if( curCol < numCols()-1 ) { 362 if( curCol < numCols()-1 ) {
465 setCurrent( curRow, curCol + 1); 363 setCurrent( curRow, curCol + 1);
466 int edge = lastColVisible(); 364 int edge = lastColVisible();
467 if ( curCol >= edge ) 365 if ( curCol >= edge )
468 setLeftCell( leftCell() + 1 ); 366 setLeftCell( leftCell() + 1 );
469 } 367 }
470 break; 368 break;
471 case Key_Up: 369 case Key_Up:
472 if( curRow > 0 ) { 370 if( curRow > 0 ) {
473 setCurrent( curRow - 1, curCol); 371 setCurrent( curRow - 1, curCol);
474 int edge = topCell(); 372 int edge = topCell();
475 if ( curRow < edge ) 373 if ( curRow < edge )
476 setTopCell( edge - 1 ); 374 setTopCell( edge - 1 );
477 } else if ( smallStyle ) 375 } else if ( smallStyle )
478 focusNextPrevChild( FALSE ); 376 focusNextPrevChild( FALSE );
479 break; 377 break;
480 case Key_Down: 378 case Key_Down:
481 if( curRow < numRows()-1 ) { 379 if( curRow < numRows()-1 ) {
482 setCurrent( curRow + 1, curCol); 380 setCurrent( curRow + 1, curCol);
483 int edge = lastRowVisible(); 381 int edge = lastRowVisible();
484 if ( curRow >= edge ) 382 if ( curRow >= edge )
485 setTopCell( topCell() + 1 ); 383 setTopCell( topCell() + 1 );
486 } else if ( smallStyle ) 384 } else if ( smallStyle )
487 focusNextPrevChild( TRUE ); 385 focusNextPrevChild( TRUE );
488 break; 386 break;
489 case Key_Space: 387 case Key_Space:
490 case Key_Return: 388 case Key_Return:
491 case Key_Enter: 389 case Key_Enter:
492 setSelected( curRow, curCol ); 390 setSelected( curRow, curCol );
493 break; 391 break;
494 default: // If not an interesting key, 392 default: // If not an interesting key,
495 e->ignore(); // we don't accept the event 393 e->ignore(); // we don't accept the event
496 return; 394 return;
497 } 395 }
498 396
499} 397}
500 398
501//////////// QWellArray END 399//////////// QWellArray END
502 400
503static bool initrgb = FALSE; 401static bool initrgb = FALSE;
504static QRgb stdrgb[6*8]; 402static QRgb stdrgb[6*8];
505static QRgb cusrgb[2*8]; 403static QRgb cusrgb[2*8];
506 404
507 405
508static void initRGB() 406static void initRGB()
509{ 407{
510 if ( initrgb ) 408 if ( initrgb )
511 return; 409 return;
512 initrgb = TRUE; 410 initrgb = TRUE;
513 int i = 0; 411 int i = 0;
514 for ( int g = 0; g < 4; g++ ) 412 for ( int g = 0; g < 4; g++ )
515 for ( int r = 0; r < 4; r++ ) 413 for ( int r = 0; r < 4; r++ )
516 for ( int b = 0; b < 3; b++ ) 414 for ( int b = 0; b < 3; b++ )
517 stdrgb[i++] = qRgb( r*255/3, g*255/3, b*255/2 ); 415 stdrgb[i++] = qRgb( r*255/3, g*255/3, b*255/2 );
518 416
519 for ( i = 0; i < 2*8; i++ ) 417 for ( i = 0; i < 2*8; i++ )
520 cusrgb[i] = qRgb(0xff,0xff,0xff); 418 cusrgb[i] = qRgb(0xff,0xff,0xff);
521} 419}
522 420
523/*! 421/*!
524 Returns the number of custom colors supported by 422 Returns the number of custom colors supported by
525 QColorDialog. All color dialogs share the same custom colors. 423 QColorDialog. All color dialogs share the same custom colors.
526*/ 424*/
527int QColorDialog::customCount() 425int QColorDialog::customCount()
528{ 426{
529 return 2*8; 427 return 2*8;
530} 428}
531 429
532/*! 430/*!
533 Returns custom color number \a i as a QRgb. 431 Returns custom color number \a i as a QRgb.
534 */ 432 */
535QRgb QColorDialog::customColor( int i ) 433QRgb QColorDialog::customColor( int i )
536{ 434{
537 initRGB(); 435 initRGB();
538 if ( i < 0 || i >= customCount() ) { 436 if ( i < 0 || i >= customCount() ) {
539#ifdef CHECK_RANGE 437#ifdef CHECK_RANGE
540 qWarning( "QColorDialog::customColor() index %d out of range", i ); 438 qWarning( "QColorDialog::customColor() index %d out of range", i );
541 #endif 439#endif
542 i = 0; 440 i = 0;
543 } 441 }
544 return cusrgb[i]; 442 return cusrgb[i];
545} 443}
546 444
547/*! 445/*!
548 Sets custom color number \a i to the QRgb value \a c. 446 Sets custom color number \a i to the QRgb value \a c.
549*/ 447*/
550void QColorDialog::setCustomColor( int i, QRgb c ) 448void QColorDialog::setCustomColor( int i, QRgb c )
551{ 449{
552 initRGB(); 450 initRGB();
553 if ( i < 0 || i >= customCount() ) { 451 if ( i < 0 || i >= customCount() ) {
554#ifdef CHECK_RANGE 452#ifdef CHECK_RANGE
555 qWarning( "QColorDialog::customColor() index %d out of range", i ); 453 qWarning( "QColorDialog::customColor() index %d out of range", i );
556 #endif 454#endif
557 return; 455 return;
558 } 456 }
559 cusrgb[i] = c; 457 cusrgb[i] = c;
560} 458}
561 459
562static inline void rgb2hsv( QRgb rgb, int&h, int&s, int&v ) 460static inline void rgb2hsv( QRgb rgb, int&h, int&s, int&v )
563{ 461{
564 QColor c; 462 QColor c;
565 c.setRgb( rgb ); 463 c.setRgb( rgb );
566 c.getHsv(h,s,v); 464 c.getHsv(h,s,v);
567} 465}
568 466
569class QColorWell : public QWellArray
570{
571public:
572 QColorWell( QWidget *parent, int r, int c, QRgb *vals )
573 :QWellArray( parent, "" ), values( vals ), mousePressed( FALSE ), oldCurrent( -1, -1 )
574 { setDimension(r,c); setWFlags( WResizeNoErase ); }
575 QSizePolicy sizePolicy() const;
576
577protected:
578 void drawContents( QPainter *, int row, int col, const QRect& );
579 void drawContents( QPainter *p ) { QWellArray::drawContents(p); }
580 void mousePressEvent( QMouseEvent *e );
581 void mouseMoveEvent( QMouseEvent *e );
582 void mouseReleaseEvent( QMouseEvent *e );
583#ifndef QT_NO_DRAGANDDROP
584 void dragEnterEvent( QDragEnterEvent *e );
585 void dragLeaveEvent( QDragLeaveEvent *e );
586 void dragMoveEvent( QDragMoveEvent *e );
587 void dropEvent( QDropEvent *e );
588#endif
589
590private:
591 QRgb *values;
592 bool mousePressed;
593 QPoint pressPos;
594 QPoint oldCurrent;
595
596};
597
598QSizePolicy QColorWell::sizePolicy() const 467QSizePolicy QColorWell::sizePolicy() const
599{ 468{
600 return QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum ); 469 return QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum );
601} 470}
602 471
603void QColorWell::drawContents( QPainter *p, int row, int col, const QRect &r ) 472void QColorWell::drawContents( QPainter *p, int row, int col, const QRect &r )
604{ 473{
605 int i = row + col*numRows(); 474 int i = row + col*numRows();
606 p->fillRect( r, QColor( values[i] ) ); 475 p->fillRect( r, QColor( values[i] ) );
607} 476}
608 477
609void QColorWell::mousePressEvent( QMouseEvent *e ) 478void QColorWell::mousePressEvent( QMouseEvent *e )
610{ 479{
611 oldCurrent = QPoint( selectedRow(), selectedColumn() ); 480 oldCurrent = QPoint( selectedRow(), selectedColumn() );
612 QWellArray::mousePressEvent( e ); 481 QWellArray::mousePressEvent( e );
613 mousePressed = TRUE; 482 mousePressed = TRUE;
614 pressPos = e->pos(); 483 pressPos = e->pos();
615} 484}
616 485
617void QColorWell::mouseMoveEvent( QMouseEvent *e ) 486void QColorWell::mouseMoveEvent( QMouseEvent *e )
618{ 487{
619 QWellArray::mouseMoveEvent( e ); 488 QWellArray::mouseMoveEvent( e );
620#ifndef QT_NO_DRAGANDDROP 489#ifndef QT_NO_DRAGANDDROP
621 if ( !mousePressed ) 490 if ( !mousePressed )
622 return; 491 return;
623 if ( ( pressPos - e->pos() ).manhattanLength() > QApplication::startDragDistance() ) { 492 if ( ( pressPos - e->pos() ).manhattanLength() > QApplication::startDragDistance() ) {
624 setCurrent( oldCurrent.x(), oldCurrent.y() ); 493 setCurrent( oldCurrent.x(), oldCurrent.y() );
625 int i = findRow( e->y() ) + findCol( e->x() ) * numRows(); 494 int i = findRow( e->y() ) + findCol( e->x() ) * numRows();
626 QColor col( values[ i ] ); 495 QColor col( values[ i ] );
627 QColorDrag *drg = new QColorDrag( col, this ); 496 QColorDrag *drg = new QColorDrag( col, this );
628 QPixmap pix( cellWidth(), cellHeight() ); 497 QPixmap pix( cellWidth(), cellHeight() );
629 pix.fill( col ); 498 pix.fill( col );
630 QPainter p( &pix ); 499 QPainter p( &pix );
631 p.drawRect( 0, 0, pix.width(), pix.height() ); 500 p.drawRect( 0, 0, pix.width(), pix.height() );
632 p.end(); 501 p.end();
633 drg->setPixmap( pix ); 502 drg->setPixmap( pix );
634 mousePressed = FALSE; 503 mousePressed = FALSE;
635 drg->dragCopy(); 504 drg->dragCopy();
636 } 505 }
637#endif 506#endif
638} 507}
639 508
640#ifndef QT_NO_DRAGANDDROP 509#ifndef QT_NO_DRAGANDDROP
641void QColorWell::dragEnterEvent( QDragEnterEvent *e ) 510void QColorWell::dragEnterEvent( QDragEnterEvent *e )
642{ 511{
643 setFocus(); 512 setFocus();
644 if ( QColorDrag::canDecode( e ) ) 513 if ( QColorDrag::canDecode( e ) )
645 e->accept(); 514 e->accept();
646 else 515 else
647 e->ignore(); 516 e->ignore();
648} 517}
649 518
650void QColorWell::dragLeaveEvent( QDragLeaveEvent * ) 519void QColorWell::dragLeaveEvent( QDragLeaveEvent * )
651{ 520{
652 if ( hasFocus() ) 521 if ( hasFocus() )
653 parentWidget()->setFocus(); 522 parentWidget()->setFocus();
654} 523}
655 524
656void QColorWell::dragMoveEvent( QDragMoveEvent *e ) 525void QColorWell::dragMoveEvent( QDragMoveEvent *e )
657{ 526{
658 if ( QColorDrag::canDecode( e ) ) { 527 if ( QColorDrag::canDecode( e ) ) {
659 setCurrent( findRow( e->pos().y() ), findCol( e->pos().x() ) ); 528 setCurrent( findRow( e->pos().y() ), findCol( e->pos().x() ) );
660 e->accept(); 529 e->accept();
661 } else 530 } else
662 e->ignore(); 531 e->ignore();
663} 532}
664 533
665void QColorWell::dropEvent( QDropEvent *e ) 534void QColorWell::dropEvent( QDropEvent *e )
666{ 535{
667 if ( QColorDrag::canDecode( e ) ) { 536 if ( QColorDrag::canDecode( e ) ) {
668 int i = findRow( e->pos().y() ) + findCol( e->pos().x() ) * numRows(); 537 int i = findRow( e->pos().y() ) + findCol( e->pos().x() ) * numRows();
669 QColor col; 538 QColor col;
670 QColorDrag::decode( e, col ); 539 QColorDrag::decode( e, col );
671 values[ i ] = col.rgb(); 540 values[ i ] = col.rgb();
672 repaint( FALSE ); 541 repaint( FALSE );
673 e->accept(); 542 e->accept();
674 } else { 543 } else {
675 e->ignore(); 544 e->ignore();
676 } 545 }
677} 546}
678 547
679#endif // QT_NO_DRAGANDDROP 548#endif // QT_NO_DRAGANDDROP
680 549
681void QColorWell::mouseReleaseEvent( QMouseEvent *e ) 550void QColorWell::mouseReleaseEvent( QMouseEvent *e )
682{ 551{
683 if ( !mousePressed ) 552 if ( !mousePressed )
684 return; 553 return;
685 QWellArray::mouseReleaseEvent( e ); 554 QWellArray::mouseReleaseEvent( e );
686 mousePressed = FALSE; 555 mousePressed = FALSE;
687} 556}
688 557
689class QColorPicker : public QFrame
690{
691 Q_OBJECT
692public:
693 QColorPicker(QWidget* parent=0, const char* name=0);
694 ~QColorPicker();
695
696public slots:
697 void setCol( int h, int s );
698
699signals:
700 void newCol( int h, int s );
701
702protected:
703 QSize sizeHint() const;
704 QSizePolicy sizePolicy() const;
705 void drawContents(QPainter* p);
706 void mouseMoveEvent( QMouseEvent * );
707 void mousePressEvent( QMouseEvent * );
708
709private:
710 int hue;
711 int sat;
712
713 QPoint colPt();
714 int huePt( const QPoint &pt );
715 int satPt( const QPoint &pt );
716 void setCol( const QPoint &pt );
717
718 QPixmap *pix;
719};
720
721static int pWidth = 200; 558static int pWidth = 200;
722static int pHeight = 200; 559static int pHeight = 200;
723 560
724class QColorLuminancePicker : public QWidget
725{
726 Q_OBJECT
727public:
728 QColorLuminancePicker(QWidget* parent=0, const char* name=0);
729 ~QColorLuminancePicker();
730
731public slots:
732 void setCol( int h, int s, int v );
733 void setCol( int h, int s );
734
735signals:
736 void newHsv( int h, int s, int v );
737
738protected:
739// QSize sizeHint() const;
740// QSizePolicy sizePolicy() const;
741 void paintEvent( QPaintEvent*);
742 void mouseMoveEvent( QMouseEvent * );
743 void mousePressEvent( QMouseEvent * );
744
745private:
746 enum { foff = 3, coff = 4 }; //frame and contents offset
747 int val;
748 int hue;
749 int sat;
750
751 int y2val( int y );
752 int val2y( int val );
753 void setVal( int v );
754
755 QPixmap *pix;
756};
757
758
759int QColorLuminancePicker::y2val( int y ) 561int QColorLuminancePicker::y2val( int y )
760{ 562{
761 int d = height() - 2*coff - 1; 563 int d = height() - 2*coff - 1;
762 return 255 - (y - coff)*255/d; 564 return 255 - (y - coff)*255/d;
763} 565}
764 566
765int QColorLuminancePicker::val2y( int v ) 567int QColorLuminancePicker::val2y( int v )
766{ 568{
767 int d = height() - 2*coff - 1; 569 int d = height() - 2*coff - 1;
768 return coff + (255-v)*d/255; 570 return coff + (255-v)*d/255;
769} 571}
770 572
771QColorLuminancePicker::QColorLuminancePicker(QWidget* parent, 573QColorLuminancePicker::QColorLuminancePicker(QWidget* parent,
772 const char* name) 574 const char* name)
773 :QWidget( parent, name ) 575 :QWidget( parent, name )
774{ 576{
775 hue = 100; val = 100; sat = 100; 577 hue = 100; val = 100; sat = 100;
776 pix = 0; 578 pix = 0;
777 // setBackgroundMode( NoBackground ); 579 // setBackgroundMode( NoBackground );
778} 580}
779 581
780QColorLuminancePicker::~QColorLuminancePicker() 582QColorLuminancePicker::~QColorLuminancePicker()
781{ 583{
782 delete pix; 584 delete pix;
783} 585}
784 586
785void QColorLuminancePicker::mouseMoveEvent( QMouseEvent *m ) 587void QColorLuminancePicker::mouseMoveEvent( QMouseEvent *m )
786{ 588{
787 setVal( y2val(m->y()) ); 589 setVal( y2val(m->y()) );
788} 590}
789void QColorLuminancePicker::mousePressEvent( QMouseEvent *m ) 591void QColorLuminancePicker::mousePressEvent( QMouseEvent *m )
790{ 592{
791 setVal( y2val(m->y()) ); 593 setVal( y2val(m->y()) );
792} 594}
793 595
794void QColorLuminancePicker::setVal( int v ) 596void QColorLuminancePicker::setVal( int v )
795{ 597{
796 if ( val == v ) 598 if ( val == v )
797 return; 599 return;
798 val = QMAX( 0, QMIN(v,255)); 600 val = QMAX( 0, QMIN(v,255));
799 delete pix; pix=0; 601 delete pix; pix=0;
800 repaint( FALSE ); //### 602 repaint( FALSE ); //###
801 emit newHsv( hue, sat, val ); 603 emit newHsv( hue, sat, val );
802} 604}
803 605
804//receives from a hue,sat chooser and relays. 606//receives from a hue,sat chooser and relays.
805void QColorLuminancePicker::setCol( int h, int s ) 607void QColorLuminancePicker::setCol( int h, int s )
806{ 608{
807 setCol( h, s, val ); 609 setCol( h, s, val );
808 emit newHsv( h, s, val ); 610 emit newHsv( h, s, val );
809} 611}
810 612
811void QColorLuminancePicker::paintEvent( QPaintEvent * ) 613void QColorLuminancePicker::paintEvent( QPaintEvent * )
812{ 614{
813 int w = width() - 5; 615 int w = width() - 5;
814 616
815 QRect r( 0, foff, w, height() - 2*foff ); 617 QRect r( 0, foff, w, height() - 2*foff );
816 int wi = r.width() - 2; 618 int wi = r.width() - 2;
817 int hi = r.height() - 2; 619 int hi = r.height() - 2;
818 if ( !pix || pix->height() != hi || pix->width() != wi ) { 620 if ( !pix || pix->height() != hi || pix->width() != wi ) {
819 delete pix; 621 delete pix;
820 QImage img( wi, hi, 32 ); 622 QImage img( wi, hi, 32 );
821 int y; 623 int y;
822 for ( y = 0; y < hi; y++ ) { 624 for ( y = 0; y < hi; y++ ) {
823 QColor c( hue, sat, y2val(y+coff), QColor::Hsv ); 625 QColor c( hue, sat, y2val(y+coff), QColor::Hsv );
824 QRgb r = c.rgb(); 626 QRgb r = c.rgb();
825 int x; 627 int x;
826 for ( x = 0; x < wi; x++ ) 628 for ( x = 0; x < wi; x++ )
827 img.setPixel( x, y, r ); 629 img.setPixel( x, y, r );
828 } 630 }
829 pix = new QPixmap; 631 pix = new QPixmap;
830 pix->convertFromImage(img); 632 pix->convertFromImage(img);
831 } 633 }
832 QPainter p(this); 634 QPainter p(this);
833 p.drawPixmap( 1, coff, *pix ); 635 p.drawPixmap( 1, coff, *pix );
834 QColorGroup g = colorGroup(); 636 QColorGroup g = colorGroup();
835 qDrawShadePanel( &p, r, g, TRUE ); 637 qDrawShadePanel( &p, r, g, TRUE );
836 p.setPen( g.foreground() ); 638 p.setPen( g.foreground() );
837 p.setBrush( g.foreground() ); 639 p.setBrush( g.foreground() );
838 QPointArray a; 640 QPointArray a;
839 int y = val2y(val); 641 int y = val2y(val);
840 a.setPoints( 3, w, y, w+5, y+5, w+5, y-5 ); 642 a.setPoints( 3, w, y, w+5, y+5, w+5, y-5 );
841 erase( w, 0, 5, height() ); 643 erase( w, 0, 5, height() );
842 p.drawPolygon( a ); 644 p.drawPolygon( a );
843} 645}
844 646
845void QColorLuminancePicker::setCol( int h, int s , int v ) 647void QColorLuminancePicker::setCol( int h, int s , int v )
846{ 648{
847 val = v; 649 val = v;
848 hue = h; 650 hue = h;
849 sat = s; 651 sat = s;
850 delete pix; pix=0; 652 delete pix; pix=0;
851 repaint( FALSE );//#### 653 repaint( FALSE );//####
852} 654}
853 655
854QPoint QColorPicker::colPt() 656QPoint QColorPicker::colPt()
855{ return QPoint( (360-hue)*(pWidth-1)/360, (255-sat)*(pHeight-1)/255 ); } 657{ return QPoint( (360-hue)*(pWidth-1)/360, (255-sat)*(pHeight-1)/255 ); }
856int QColorPicker::huePt( const QPoint &pt ) 658int QColorPicker::huePt( const QPoint &pt )
857{ return 360 - pt.x()*360/(pWidth-1); } 659{ return 360 - pt.x()*360/(pWidth-1); }
858int QColorPicker::satPt( const QPoint &pt ) 660int QColorPicker::satPt( const QPoint &pt )
859{ return 255 - pt.y()*255/(pHeight-1) ; } 661{ return 255 - pt.y()*255/(pHeight-1) ; }
860void QColorPicker::setCol( const QPoint &pt ) 662void QColorPicker::setCol( const QPoint &pt )
861{ setCol( huePt(pt), satPt(pt) ); } 663{ setCol( huePt(pt), satPt(pt) ); }
862 664
863QColorPicker::QColorPicker(QWidget* parent, const char* name ) 665QColorPicker::QColorPicker(QWidget* parent, const char* name )
864 : QFrame( parent, name ) 666 : QFrame( parent, name )
865{ 667{
866 hue = 0; sat = 0; 668 hue = 0; sat = 0;
867 setCol( 150, 255 ); 669 setCol( 150, 255 );
868 670
869 QImage img( pWidth, pHeight, 32 ); 671 QImage img( pWidth, pHeight, 32 );
870 int x,y; 672 int x,y;
871 for ( y = 0; y < pHeight; y++ ) 673 for ( y = 0; y < pHeight; y++ )
872 for ( x = 0; x < pWidth; x++ ) { 674 for ( x = 0; x < pWidth; x++ ) {
873 QPoint p( x, y ); 675 QPoint p( x, y );
874 img.setPixel( x, y, QColor(huePt(p), satPt(p), 676 img.setPixel( x, y, QColor(huePt(p), satPt(p),
875 200, QColor::Hsv).rgb() ); 677 200, QColor::Hsv).rgb() );
876 } 678 }
877 pix = new QPixmap; 679 pix = new QPixmap;
878 pix->convertFromImage(img); 680 pix->convertFromImage(img);
879 setBackgroundMode( NoBackground ); 681 setBackgroundMode( NoBackground );
880} 682}
881 683
882QColorPicker::~QColorPicker() 684QColorPicker::~QColorPicker()
883{ 685{
884 delete pix; 686 delete pix;
885} 687}
886 688
887QSize QColorPicker::sizeHint() const 689QSize QColorPicker::sizeHint() const
888{ 690{
889 return QSize( pWidth + 2*frameWidth(), pHeight + 2*frameWidth() ); 691 return QSize( pWidth + 2*frameWidth(), pHeight + 2*frameWidth() );
890} 692}
891 693
892QSizePolicy QColorPicker::sizePolicy() const 694QSizePolicy QColorPicker::sizePolicy() const
893{ 695{
894 return QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ); 696 return QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed );
895} 697}
896 698
897void QColorPicker::setCol( int h, int s ) 699void QColorPicker::setCol( int h, int s )
898{ 700{
899 int nhue = QMIN( QMAX(0,h), 360 ); 701 int nhue = QMIN( QMAX(0,h), 360 );
900 int nsat = QMIN( QMAX(0,s), 255); 702 int nsat = QMIN( QMAX(0,s), 255);
901 if ( nhue == hue && nsat == sat ) 703 if ( nhue == hue && nsat == sat )
902 return; 704 return;
903 QRect r( colPt(), QSize(20,20) ); 705 QRect r( colPt(), QSize(20,20) );
904 hue = nhue; sat = nsat; 706 hue = nhue; sat = nsat;
905 r = r.unite( QRect( colPt(), QSize(20,20) ) ); 707 r = r.unite( QRect( colPt(), QSize(20,20) ) );
906 r.moveBy( contentsRect().x()-9, contentsRect().y()-9 ); 708 r.moveBy( contentsRect().x()-9, contentsRect().y()-9 );
907 // update( r ); 709 // update( r );
908 repaint( r, FALSE ); 710 repaint( r, FALSE );
909} 711}
910 712
911void QColorPicker::mouseMoveEvent( QMouseEvent *m ) 713void QColorPicker::mouseMoveEvent( QMouseEvent *m )
912{ 714{
913 QPoint p = m->pos() - contentsRect().topLeft(); 715 QPoint p = m->pos() - contentsRect().topLeft();
914 setCol( p ); 716 setCol( p );
915 emit newCol( hue, sat ); 717 emit newCol( hue, sat );
916} 718}
917 719
918void QColorPicker::mousePressEvent( QMouseEvent *m ) 720void QColorPicker::mousePressEvent( QMouseEvent *m )
919{ 721{
920 QPoint p = m->pos() - contentsRect().topLeft(); 722 QPoint p = m->pos() - contentsRect().topLeft();
921 setCol( p ); 723 setCol( p );
922 emit newCol( hue, sat ); 724 emit newCol( hue, sat );
923} 725}
924 726
925void QColorPicker::drawContents(QPainter* p) 727void QColorPicker::drawContents(QPainter* p)
926{ 728{
927 QRect r = contentsRect(); 729 QRect r = contentsRect();
928 730
929 p->drawPixmap( r.topLeft(), *pix ); 731 p->drawPixmap( r.topLeft(), *pix );
930 QPoint pt = colPt() + r.topLeft(); 732 QPoint pt = colPt() + r.topLeft();
931 p->setPen( QPen(black) ); 733 p->setPen( QPen(black) );
932 734
933 p->fillRect( pt.x()-9, pt.y(), 20, 2, black ); 735 p->fillRect( pt.x()-9, pt.y(), 20, 2, black );
934 p->fillRect( pt.x(), pt.y()-9, 2, 20, black ); 736 p->fillRect( pt.x(), pt.y()-9, 2, 20, black );
935 737
936} 738}
937 739
938class QColorShowLabel;
939
940
941
942class QColIntValidator: public QIntValidator
943{
944public:
945 QColIntValidator( int bottom, int top,
946 QWidget * parent, const char *name = 0 )
947 :QIntValidator( bottom, top, parent, name ) {}
948
949 QValidator::State validate( QString &, int & ) const;
950};
951
952QValidator::State QColIntValidator::validate( QString &s, int &pos ) const 740QValidator::State QColIntValidator::validate( QString &s, int &pos ) const
953{ 741{
954 State state = QIntValidator::validate(s,pos); 742 State state = QIntValidator::validate(s,pos);
955 if ( state == Valid ) { 743 if ( state == Valid ) {
956 long int val = s.toLong(); 744 long int val = s.toLong();
957 // This is not a general solution, assumes that top() > 0 and 745 // This is not a general solution, assumes that top() > 0 and
958 // bottom >= 0 746 // bottom >= 0
959 if ( val < 0 ) { 747 if ( val < 0 ) {
960 s = "0"; 748 s = "0";
961 pos = 1; 749 pos = 1;
962 } else if ( val > top() ) { 750 } else if ( val > top() ) {
963 s.setNum( top() ); 751 s.setNum( top() );
964 pos = s.length(); 752 pos = s.length();
965 } 753 }
966 } 754 }
967 return state; 755 return state;
968} 756}
969 757
970
971
972class QColNumLineEdit : public QLineEdit
973{
974public:
975 QColNumLineEdit( QWidget *parent, const char* name = 0 )
976 : QLineEdit( parent, name ) { setMaxLength( 3 );}
977 QSize sizeHint() const {
978 return QSize( 30, //#####
979 QLineEdit::sizeHint().height() ); }
980 void setNum( int i ) {
981 QString s;
982 s.setNum(i);
983 bool block = signalsBlocked();
984 blockSignals(TRUE);
985 setText( s );
986 blockSignals(block);
987 }
988 int val() const { return text().toInt(); }
989};
990
991
992class QColorShower : public QWidget
993{
994 Q_OBJECT
995public:
996 QColorShower( QWidget *parent, const char *name = 0 );
997
998 //things that don't emit signals
999 void setHsv( int h, int s, int v );
1000
1001 int currentAlpha() const { return alphaEd->val(); }
1002 void setCurrentAlpha( int a ) { alphaEd->setNum( a ); }
1003 void showAlpha( bool b );
1004
1005
1006 QRgb currentColor() const { return curCol; }
1007
1008public slots:
1009 void setRgb( QRgb rgb );
1010
1011signals:
1012 void newCol( QRgb rgb );
1013private slots:
1014 void rgbEd();
1015 void hsvEd();
1016private:
1017 void showCurrentColor();
1018 int hue, sat, val;
1019 QRgb curCol;
1020 QColNumLineEdit *hEd;
1021 QColNumLineEdit *sEd;
1022 QColNumLineEdit *vEd;
1023 QColNumLineEdit *rEd;
1024 QColNumLineEdit *gEd;
1025 QColNumLineEdit *bEd;
1026 QColNumLineEdit *alphaEd;
1027 QLabel *alphaLab;
1028 QColorShowLabel *lab;
1029 bool rgbOriginal;
1030};
1031
1032class QColorShowLabel : public QFrame
1033{
1034 Q_OBJECT
1035
1036public:
1037 QColorShowLabel( QWidget *parent ) :QFrame( parent ) {
1038 setFrameStyle( QFrame::Panel|QFrame::Sunken );
1039 setBackgroundMode( PaletteBackground );
1040 setAcceptDrops( TRUE );
1041 mousePressed = FALSE;
1042 }
1043 void setColor( QColor c ) { col = c; }
1044
1045signals:
1046 void colorDropped( QRgb );
1047
1048protected:
1049 void drawContents( QPainter *p );
1050 void mousePressEvent( QMouseEvent *e );
1051 void mouseMoveEvent( QMouseEvent *e );
1052 void mouseReleaseEvent( QMouseEvent *e );
1053#ifndef QT_NO_DRAGANDDROP
1054 void dragEnterEvent( QDragEnterEvent *e );
1055 void dragLeaveEvent( QDragLeaveEvent *e );
1056 void dropEvent( QDropEvent *e );
1057#endif
1058
1059private:
1060 QColor col;
1061 bool mousePressed;
1062 QPoint pressPos;
1063
1064};
1065
1066void QColorShowLabel::drawContents( QPainter *p ) 758void QColorShowLabel::drawContents( QPainter *p )
1067{ 759{
1068 p->fillRect( contentsRect(), col ); 760 p->fillRect( contentsRect(), col );
1069} 761}
1070 762
1071void QColorShower::showAlpha( bool b ) 763void QColorShower::showAlpha( bool b )
1072{ 764{
1073 if ( b ) { 765 if ( b ) {
1074 alphaLab->show(); 766 alphaLab->show();
1075 alphaEd->show(); 767 alphaEd->show();
1076 } else { 768 } else {
1077 alphaLab->hide(); 769 alphaLab->hide();
1078 alphaEd->hide(); 770 alphaEd->hide();
1079 } 771 }
1080} 772}
1081 773
1082void QColorShowLabel::mousePressEvent( QMouseEvent *e ) 774void QColorShowLabel::mousePressEvent( QMouseEvent *e )
1083{ 775{
1084 mousePressed = TRUE; 776 mousePressed = TRUE;
1085 pressPos = e->pos(); 777 pressPos = e->pos();
1086} 778}
1087 779
1088void QColorShowLabel::mouseMoveEvent( QMouseEvent *e ) 780void QColorShowLabel::mouseMoveEvent( QMouseEvent *e )
1089{ 781{
1090#ifndef QT_NO_DRAGANDDROP 782#ifndef QT_NO_DRAGANDDROP
1091 if ( !mousePressed ) 783 if ( !mousePressed )
1092 return; 784 return;
1093 if ( ( pressPos - e->pos() ).manhattanLength() > QApplication::startDragDistance() ) { 785 if ( ( pressPos - e->pos() ).manhattanLength() > QApplication::startDragDistance() ) {
1094 QColorDrag *drg = new QColorDrag( col, this ); 786 QColorDrag *drg = new QColorDrag( col, this );
1095 QPixmap pix( 30, 20 ); 787 QPixmap pix( 30, 20 );
1096 pix.fill( col ); 788 pix.fill( col );
1097 QPainter p( &pix ); 789 QPainter p( &pix );
1098 p.drawRect( 0, 0, pix.width(), pix.height() ); 790 p.drawRect( 0, 0, pix.width(), pix.height() );
1099 p.end(); 791 p.end();
1100 drg->setPixmap( pix ); 792 drg->setPixmap( pix );
1101 mousePressed = FALSE; 793 mousePressed = FALSE;
1102 drg->dragCopy(); 794 drg->dragCopy();
1103 } 795 }
1104#endif 796#endif
1105} 797}
1106 798
1107#ifndef QT_NO_DRAGANDDROP 799#ifndef QT_NO_DRAGANDDROP
1108void QColorShowLabel::dragEnterEvent( QDragEnterEvent *e ) 800void QColorShowLabel::dragEnterEvent( QDragEnterEvent *e )
1109{ 801{
1110 if ( QColorDrag::canDecode( e ) ) 802 if ( QColorDrag::canDecode( e ) )
1111 e->accept(); 803 e->accept();
1112 else 804 else
1113 e->ignore(); 805 e->ignore();
1114} 806}
1115 807
1116void QColorShowLabel::dragLeaveEvent( QDragLeaveEvent * ) 808void QColorShowLabel::dragLeaveEvent( QDragLeaveEvent * )
1117{ 809{
1118} 810}
1119 811
1120void QColorShowLabel::dropEvent( QDropEvent *e ) 812void QColorShowLabel::dropEvent( QDropEvent *e )
1121{ 813{
1122 if ( QColorDrag::canDecode( e ) ) { 814 if ( QColorDrag::canDecode( e ) ) {
1123 QColorDrag::decode( e, col ); 815 QColorDrag::decode( e, col );
1124 repaint( FALSE ); 816 repaint( FALSE );
1125 emit colorDropped( col.rgb() ); 817 emit colorDropped( col.rgb() );
1126 e->accept(); 818 e->accept();
1127 } else { 819 } else {
1128 e->ignore(); 820 e->ignore();
1129 } 821 }
1130} 822}
1131#endif // QT_NO_DRAGANDDROP 823#endif // QT_NO_DRAGANDDROP
1132 824
1133void QColorShowLabel::mouseReleaseEvent( QMouseEvent * ) 825void QColorShowLabel::mouseReleaseEvent( QMouseEvent * )
1134{ 826{
1135 if ( !mousePressed ) 827 if ( !mousePressed )
1136 return; 828 return;
1137 mousePressed = FALSE; 829 mousePressed = FALSE;
1138} 830}
1139 831
1140QColorShower::QColorShower( QWidget *parent, const char *name ) 832QColorShower::QColorShower( QWidget *parent, const char *name )
1141 :QWidget( parent, name) 833 :QWidget( parent, name)
1142{ 834{
1143 curCol = qRgb( -1, -1, -1 ); 835 curCol = qRgb( -1, -1, -1 );
1144 QColIntValidator *val256 = new QColIntValidator( 0, 255, this ); 836 QColIntValidator *val256 = new QColIntValidator( 0, 255, this );
1145 QColIntValidator *val360 = new QColIntValidator( 0, 360, this ); 837 QColIntValidator *val360 = new QColIntValidator( 0, 360, this );
1146 838
1147 QGridLayout *gl = new QGridLayout( this, 1, 1, 6 ); 839 QGridLayout *gl = new QGridLayout( this, 1, 1, 6 );
1148 lab = new QColorShowLabel( this ); 840 lab = new QColorShowLabel( this );
1149 lab->setMinimumWidth( 60 ); //### 841 lab->setMinimumWidth( 60 ); //###
1150 gl->addMultiCellWidget(lab, 0,-1,0,0); 842 gl->addMultiCellWidget(lab, 0,-1,0,0);
1151 connect( lab, SIGNAL( colorDropped(QRgb) ), 843 connect( lab, SIGNAL( colorDropped(QRgb) ),
1152 this, SIGNAL( newCol(QRgb) ) ); 844 this, SIGNAL( newCol(QRgb) ) );
1153 connect( lab, SIGNAL( colorDropped(QRgb) ), 845 connect( lab, SIGNAL( colorDropped(QRgb) ),
1154 this, SLOT( setRgb(QRgb) ) ); 846 this, SLOT( setRgb(QRgb) ) );
1155 847
1156 hEd = new QColNumLineEdit( this ); 848 hEd = new QColNumLineEdit( this );
1157 hEd->setValidator( val360 ); 849 hEd->setValidator( val360 );
1158 QLabel *l = new QLabel( hEd, QColorDialog::tr("Hu&e:"), this ); 850 QLabel *l = new QLabel( hEd, QColorDialog::tr("Hu&e:"), this );
1159 l->setAlignment( AlignRight|AlignVCenter ); 851 l->setAlignment( AlignRight|AlignVCenter );
1160 gl->addWidget( l, 0, 1 ); 852 gl->addWidget( l, 0, 1 );
1161 gl->addWidget( hEd, 0, 2 ); 853 gl->addWidget( hEd, 0, 2 );
1162 854
1163 sEd = new QColNumLineEdit( this ); 855 sEd = new QColNumLineEdit( this );
1164 sEd->setValidator( val256 ); 856 sEd->setValidator( val256 );
1165 l = new QLabel( sEd, QColorDialog::tr("&Sat:"), this ); 857 l = new QLabel( sEd, QColorDialog::tr("&Sat:"), this );
1166 l->setAlignment( AlignRight|AlignVCenter ); 858 l->setAlignment( AlignRight|AlignVCenter );
1167 gl->addWidget( l, 1, 1 ); 859 gl->addWidget( l, 1, 1 );
1168 gl->addWidget( sEd, 1, 2 ); 860 gl->addWidget( sEd, 1, 2 );
1169 861
1170 vEd = new QColNumLineEdit( this ); 862 vEd = new QColNumLineEdit( this );
1171 vEd->setValidator( val256 ); 863 vEd->setValidator( val256 );
1172 l = new QLabel( vEd, QColorDialog::tr("&Val:"), this ); 864 l = new QLabel( vEd, QColorDialog::tr("&Val:"), this );
1173 l->setAlignment( AlignRight|AlignVCenter ); 865 l->setAlignment( AlignRight|AlignVCenter );
1174 gl->addWidget( l, 2, 1 ); 866 gl->addWidget( l, 2, 1 );
1175 gl->addWidget( vEd, 2, 2 ); 867 gl->addWidget( vEd, 2, 2 );
1176 868
1177 rEd = new QColNumLineEdit( this ); 869 rEd = new QColNumLineEdit( this );
1178 rEd->setValidator( val256 ); 870 rEd->setValidator( val256 );
1179 l = new QLabel( rEd, QColorDialog::tr("&Red:"), this ); 871 l = new QLabel( rEd, QColorDialog::tr("&Red:"), this );
1180 l->setAlignment( AlignRight|AlignVCenter ); 872 l->setAlignment( AlignRight|AlignVCenter );
1181 gl->addWidget( l, 0, 3 ); 873 gl->addWidget( l, 0, 3 );
1182 gl->addWidget( rEd, 0, 4 ); 874 gl->addWidget( rEd, 0, 4 );
1183 875
1184 gEd = new QColNumLineEdit( this ); 876 gEd = new QColNumLineEdit( this );
1185 gEd->setValidator( val256 ); 877 gEd->setValidator( val256 );
1186 l = new QLabel( gEd, QColorDialog::tr("&Green:"), this ); 878 l = new QLabel( gEd, QColorDialog::tr("&Green:"), this );
1187 l->setAlignment( AlignRight|AlignVCenter ); 879 l->setAlignment( AlignRight|AlignVCenter );
1188 gl->addWidget( l, 1, 3 ); 880 gl->addWidget( l, 1, 3 );
1189 gl->addWidget( gEd, 1, 4 ); 881 gl->addWidget( gEd, 1, 4 );
1190 882
1191 bEd = new QColNumLineEdit( this ); 883 bEd = new QColNumLineEdit( this );
1192 bEd->setValidator( val256 ); 884 bEd->setValidator( val256 );
1193 l = new QLabel( bEd, QColorDialog::tr("Bl&ue:"), this ); 885 l = new QLabel( bEd, QColorDialog::tr("Bl&ue:"), this );
1194 l->setAlignment( AlignRight|AlignVCenter ); 886 l->setAlignment( AlignRight|AlignVCenter );
1195 gl->addWidget( l, 2, 3 ); 887 gl->addWidget( l, 2, 3 );
1196 gl->addWidget( bEd, 2, 4 ); 888 gl->addWidget( bEd, 2, 4 );
1197 889
1198 alphaEd = new QColNumLineEdit( this ); 890 alphaEd = new QColNumLineEdit( this );
1199 alphaEd->setValidator( val256 ); 891 alphaEd->setValidator( val256 );
1200 alphaLab = new QLabel( alphaEd, QColorDialog::tr("A&lpha channel:"), this ); 892 alphaLab = new QLabel( alphaEd, QColorDialog::tr("A&lpha channel:"), this );
1201 alphaLab->setAlignment( AlignRight|AlignVCenter ); 893 alphaLab->setAlignment( AlignRight|AlignVCenter );
1202 gl->addMultiCellWidget( alphaLab, 3, 3, 1, 3 ); 894 gl->addMultiCellWidget( alphaLab, 3, 3, 1, 3 );
1203 gl->addWidget( alphaEd, 3, 4 ); 895 gl->addWidget( alphaEd, 3, 4 );
1204 alphaEd->hide(); 896 alphaEd->hide();
1205 alphaLab->hide(); 897 alphaLab->hide();
1206 898
1207 connect( hEd, SIGNAL(textChanged(const QString&)), this, SLOT(hsvEd()) ); 899 connect( hEd, SIGNAL(textChanged(const QString&)), this, SLOT(hsvEd()) );
1208 connect( sEd, SIGNAL(textChanged(const QString&)), this, SLOT(hsvEd()) ); 900 connect( sEd, SIGNAL(textChanged(const QString&)), this, SLOT(hsvEd()) );
1209 connect( vEd, SIGNAL(textChanged(const QString&)), this, SLOT(hsvEd()) ); 901 connect( vEd, SIGNAL(textChanged(const QString&)), this, SLOT(hsvEd()) );
1210 902
1211 connect( rEd, SIGNAL(textChanged(const QString&)), this, SLOT(rgbEd()) ); 903 connect( rEd, SIGNAL(textChanged(const QString&)), this, SLOT(rgbEd()) );
1212 connect( gEd, SIGNAL(textChanged(const QString&)), this, SLOT(rgbEd()) ); 904 connect( gEd, SIGNAL(textChanged(const QString&)), this, SLOT(rgbEd()) );
1213 connect( bEd, SIGNAL(textChanged(const QString&)), this, SLOT(rgbEd()) ); 905 connect( bEd, SIGNAL(textChanged(const QString&)), this, SLOT(rgbEd()) );
1214} 906}
1215 907
1216void QColorShower::showCurrentColor() 908void QColorShower::showCurrentColor()
1217{ 909{
1218 lab->setColor( currentColor() ); 910 lab->setColor( currentColor() );
@@ -1225,401 +917,372 @@ void QColorShower::rgbEd()
1225 curCol = qRgb( rEd->val(), gEd->val(), bEd->val() ); 917 curCol = qRgb( rEd->val(), gEd->val(), bEd->val() );
1226 rgb2hsv(currentColor(), hue, sat, val ); 918 rgb2hsv(currentColor(), hue, sat, val );
1227 919
1228 hEd->setNum( hue ); 920 hEd->setNum( hue );
1229 sEd->setNum( sat ); 921 sEd->setNum( sat );
1230 vEd->setNum( val ); 922 vEd->setNum( val );
1231 923
1232 showCurrentColor(); 924 showCurrentColor();
1233 emit newCol( currentColor() ); 925 emit newCol( currentColor() );
1234} 926}
1235 927
1236void QColorShower::hsvEd() 928void QColorShower::hsvEd()
1237{ 929{
1238 rgbOriginal = FALSE; 930 rgbOriginal = FALSE;
1239 hue = hEd->val(); 931 hue = hEd->val();
1240 sat = sEd->val(); 932 sat = sEd->val();
1241 val = vEd->val(); 933 val = vEd->val();
1242 934
1243 curCol = QColor( hue, sat, val, QColor::Hsv ).rgb(); 935 curCol = QColor( hue, sat, val, QColor::Hsv ).rgb();
1244 936
1245 rEd->setNum( qRed(currentColor()) ); 937 rEd->setNum( qRed(currentColor()) );
1246 gEd->setNum( qGreen(currentColor()) ); 938 gEd->setNum( qGreen(currentColor()) );
1247 bEd->setNum( qBlue(currentColor()) ); 939 bEd->setNum( qBlue(currentColor()) );
1248 940
1249 showCurrentColor(); 941 showCurrentColor();
1250 emit newCol( currentColor() ); 942 emit newCol( currentColor() );
1251} 943}
1252 944
1253void QColorShower::setRgb( QRgb rgb ) 945void QColorShower::setRgb( QRgb rgb )
1254{ 946{
1255 rgbOriginal = TRUE; 947 rgbOriginal = TRUE;
1256 curCol = rgb; 948 curCol = rgb;
1257 949
1258 rgb2hsv( currentColor(), hue, sat, val ); 950 rgb2hsv( currentColor(), hue, sat, val );
1259 951
1260 hEd->setNum( hue ); 952 hEd->setNum( hue );
1261 sEd->setNum( sat ); 953 sEd->setNum( sat );
1262 vEd->setNum( val ); 954 vEd->setNum( val );
1263 955
1264 rEd->setNum( qRed(currentColor()) ); 956 rEd->setNum( qRed(currentColor()) );
1265 gEd->setNum( qGreen(currentColor()) ); 957 gEd->setNum( qGreen(currentColor()) );
1266 bEd->setNum( qBlue(currentColor()) ); 958 bEd->setNum( qBlue(currentColor()) );
1267 959
1268 showCurrentColor(); 960 showCurrentColor();
1269} 961}
1270 962
1271void QColorShower::setHsv( int h, int s, int v ) 963void QColorShower::setHsv( int h, int s, int v )
1272{ 964{
1273 rgbOriginal = FALSE; 965 rgbOriginal = FALSE;
1274 hue = h; val = v; sat = s; //Range check### 966 hue = h; val = v; sat = s; //Range check###
1275 curCol = QColor( hue, sat, val, QColor::Hsv ).rgb(); 967 curCol = QColor( hue, sat, val, QColor::Hsv ).rgb();
1276 968
1277 hEd->setNum( hue ); 969 hEd->setNum( hue );
1278 sEd->setNum( sat ); 970 sEd->setNum( sat );
1279 vEd->setNum( val ); 971 vEd->setNum( val );
1280 972
1281 rEd->setNum( qRed(currentColor()) ); 973 rEd->setNum( qRed(currentColor()) );
1282 gEd->setNum( qGreen(currentColor()) ); 974 gEd->setNum( qGreen(currentColor()) );
1283 bEd->setNum( qBlue(currentColor()) ); 975 bEd->setNum( qBlue(currentColor()) );
1284 976
1285 977
1286 showCurrentColor(); 978 showCurrentColor();
1287} 979}
1288 980
1289class QColorDialogPrivate : public QObject
1290{
1291Q_OBJECT
1292public:
1293 QColorDialogPrivate( QColorDialog *p );
1294 QRgb currentColor() const { return cs->currentColor(); }
1295 void setCurrentColor( QRgb rgb );
1296
1297 int currentAlpha() const { return cs->currentAlpha(); }
1298 void setCurrentAlpha( int a ) { cs->setCurrentAlpha( a ); }
1299 void showAlpha( bool b ) { cs->showAlpha( b ); }
1300
1301private slots:
1302 void addCustom();
1303
1304 void newHsv( int h, int s, int v );
1305 void newColorTypedIn( QRgb rgb );
1306 void newCustom( int, int );
1307 void newStandard( int, int );
1308private:
1309 QColorPicker *cp;
1310 QColorLuminancePicker *lp;
1311 QWellArray *custom;
1312 QWellArray *standard;
1313 QColorShower *cs;
1314 int nextCust;
1315 bool compact;
1316};
1317
1318//sets all widgets to display h,s,v 981//sets all widgets to display h,s,v
1319void QColorDialogPrivate::newHsv( int h, int s, int v ) 982void QColorDialogPrivate::newHsv( int h, int s, int v )
1320{ 983{
1321 cs->setHsv( h, s, v ); 984 cs->setHsv( h, s, v );
1322 cp->setCol( h, s ); 985 cp->setCol( h, s );
1323 lp->setCol( h, s, v ); 986 lp->setCol( h, s, v );
1324} 987}
1325 988
1326//sets all widgets to display rgb 989//sets all widgets to display rgb
1327void QColorDialogPrivate::setCurrentColor( QRgb rgb ) 990void QColorDialogPrivate::setCurrentColor( QRgb rgb )
1328{ 991{
1329 cs->setRgb( rgb ); 992 cs->setRgb( rgb );
1330 newColorTypedIn( rgb ); 993 newColorTypedIn( rgb );
1331} 994}
1332 995
1333//sets all widgets exept cs to display rgb 996//sets all widgets exept cs to display rgb
1334void QColorDialogPrivate::newColorTypedIn( QRgb rgb ) 997void QColorDialogPrivate::newColorTypedIn( QRgb rgb )
1335{ 998{
1336 int h, s, v; 999 int h, s, v;
1337 rgb2hsv(rgb, h, s, v ); 1000 rgb2hsv(rgb, h, s, v );
1338 cp->setCol( h, s ); 1001 cp->setCol( h, s );
1339 lp->setCol( h, s, v); 1002 lp->setCol( h, s, v);
1340} 1003}
1341 1004
1342void QColorDialogPrivate::newCustom( int r, int c ) 1005void QColorDialogPrivate::newCustom( int r, int c )
1343{ 1006{
1344 int i = r+2*c; 1007 int i = r+2*c;
1345 setCurrentColor( cusrgb[i] ); 1008 setCurrentColor( cusrgb[i] );
1346 nextCust = i; 1009 nextCust = i;
1347 standard->setSelected(-1,-1); 1010 standard->setSelected(-1,-1);
1348} 1011}
1349 1012
1350void QColorDialogPrivate::newStandard( int r, int c ) 1013void QColorDialogPrivate::newStandard( int r, int c )
1351{ 1014{
1352 setCurrentColor( stdrgb[r+c*6] ); 1015 setCurrentColor( stdrgb[r+c*6] );
1353 custom->setSelected(-1,-1); 1016 custom->setSelected(-1,-1);
1354} 1017}
1355 1018
1356QColorDialogPrivate::QColorDialogPrivate( QColorDialog *dialog ) : 1019QColorDialogPrivate::QColorDialogPrivate( QColorDialog *dialog ) :
1357 QObject(dialog) 1020 QObject(dialog)
1358{ 1021{
1359 compact = FALSE; 1022 compact = FALSE;
1360 // small displays (e.g. PDAs cannot fit the full color dialog, 1023 // small displays (e.g. PDAs cannot fit the full color dialog,
1361 // so just use the color picker. 1024 // so just use the color picker.
1362 if ( qApp->desktop()->width() < 480 || qApp->desktop()->height() < 350 ) 1025 if ( qApp->desktop()->width() < 480 || qApp->desktop()->height() < 350 )
1363 compact = TRUE; 1026 compact = TRUE;
1364 1027
1365 nextCust = 0; 1028 nextCust = 0;
1366 const int lumSpace = 3; 1029 const int lumSpace = 3;
1367 int border = 12; 1030 int border = 12;
1368 if ( compact ) 1031 if ( compact )
1369 border = 6; 1032 border = 6;
1370 QHBoxLayout *topLay = new QHBoxLayout( dialog, border, 6 ); 1033 QHBoxLayout *topLay = new QHBoxLayout( dialog, border, 6 );
1371 QVBoxLayout *leftLay = 0; 1034 QVBoxLayout *leftLay = 0;
1372 1035
1373 if ( !compact ) 1036 if ( !compact )
1374 leftLay = new QVBoxLayout( topLay ); 1037 leftLay = new QVBoxLayout( topLay );
1375 1038
1376 initRGB(); 1039 initRGB();
1377 1040
1378 if ( !compact ) { 1041 if ( !compact ) {
1379 standard = new QColorWell( dialog, 6, 8, stdrgb ); 1042 standard = new QColorWell( dialog, 6, 8, stdrgb );
1380 standard->setCellSize( 28, 24 ); 1043 standard->setCellSize( 28, 24 );
1381 QLabel * lab = new QLabel( standard, 1044 QLabel * lab = new QLabel( standard,
1382 QColorDialog::tr( "&Basic colors"), dialog ); 1045 QColorDialog::tr( "&Basic colors"), dialog );
1383 connect( standard, SIGNAL(selected(int,int)), SLOT(newStandard(int,int))); 1046 connect( standard, SIGNAL(selected(int,int)), SLOT(newStandard(int,int)));
1384 leftLay->addWidget( lab ); 1047 leftLay->addWidget( lab );
1385 leftLay->addWidget( standard ); 1048 leftLay->addWidget( standard );
1386 1049
1387 1050
1388 leftLay->addStretch(); 1051 leftLay->addStretch();
1389 1052
1390 custom = new QColorWell( dialog, 2, 8, cusrgb ); 1053 custom = new QColorWell( dialog, 2, 8, cusrgb );
1391 custom->setCellSize( 28, 24 ); 1054 custom->setCellSize( 28, 24 );
1392 custom->setAcceptDrops( TRUE ); 1055 custom->setAcceptDrops( TRUE );
1393 1056
1394 connect( custom, SIGNAL(selected(int,int)), SLOT(newCustom(int,int))); 1057 connect( custom, SIGNAL(selected(int,int)), SLOT(newCustom(int,int)));
1395 lab = new QLabel( custom, QColorDialog::tr( "&Custom colors") , dialog ); 1058 lab = new QLabel( custom, QColorDialog::tr( "&Custom colors") , dialog );
1396 leftLay->addWidget( lab ); 1059 leftLay->addWidget( lab );
1397 leftLay->addWidget( custom ); 1060 leftLay->addWidget( custom );
1398 1061
1399 QPushButton *custbut = 1062 QPushButton *custbut =
1400 new QPushButton( QColorDialog::tr("&Define Custom Colors >>"), 1063 new QPushButton( QColorDialog::tr("&Define Custom Colors >>"),
1401 dialog ); 1064 dialog );
1402 custbut->setEnabled( FALSE ); 1065 custbut->setEnabled( FALSE );
1403 leftLay->addWidget( custbut ); 1066 leftLay->addWidget( custbut );
1404 } else { 1067 } else {
1405 // better color picker size for small displays 1068 // better color picker size for small displays
1406 pWidth = 150; 1069 pWidth = 150;
1407 pHeight = 100; 1070 pHeight = 100;
1408 } 1071 }
1409 1072
1410 QVBoxLayout *rightLay = new QVBoxLayout( topLay ); 1073 QVBoxLayout *rightLay = new QVBoxLayout( topLay );
1411 1074
1412 QHBoxLayout *pickLay = new QHBoxLayout( rightLay ); 1075 QHBoxLayout *pickLay = new QHBoxLayout( rightLay );
1413 1076
1414 1077
1415 QVBoxLayout *cLay = new QVBoxLayout( pickLay ); 1078 QVBoxLayout *cLay = new QVBoxLayout( pickLay );
1416 cp = new QColorPicker( dialog ); 1079 cp = new QColorPicker( dialog );
1417 cp->setFrameStyle( QFrame::Panel + QFrame::Sunken ); 1080 cp->setFrameStyle( QFrame::Panel + QFrame::Sunken );
1418 cLay->addSpacing( lumSpace ); 1081 cLay->addSpacing( lumSpace );
1419 cLay->addWidget( cp ); 1082 cLay->addWidget( cp );
1420 cLay->addSpacing( lumSpace ); 1083 cLay->addSpacing( lumSpace );
1421 1084
1422 lp = new QColorLuminancePicker( dialog ); 1085 lp = new QColorLuminancePicker( dialog );
1423 lp->setFixedWidth( 20 ); //### 1086 lp->setFixedWidth( 20 ); //###
1424 pickLay->addWidget( lp ); 1087 pickLay->addWidget( lp );
1425 1088
1426 connect( cp, SIGNAL(newCol(int,int)), lp, SLOT(setCol(int,int)) ); 1089 connect( cp, SIGNAL(newCol(int,int)), lp, SLOT(setCol(int,int)) );
1427 connect( lp, SIGNAL(newHsv(int,int,int)), this, SLOT(newHsv(int,int,int)) ); 1090 connect( lp, SIGNAL(newHsv(int,int,int)), this, SLOT(newHsv(int,int,int)) );
1428 1091
1429 rightLay->addStretch(); 1092 rightLay->addStretch();
1430 1093
1431 cs = new QColorShower( dialog ); 1094 cs = new QColorShower( dialog );
1432 connect( cs, SIGNAL(newCol(QRgb)), this, SLOT(newColorTypedIn(QRgb))); 1095 connect( cs, SIGNAL(newCol(QRgb)), this, SLOT(newColorTypedIn(QRgb)));
1433 rightLay->addWidget( cs ); 1096 rightLay->addWidget( cs );
1434 1097
1435 QHBoxLayout *buttons; 1098 QHBoxLayout *buttons;
1436 if ( compact ) 1099 if ( compact )
1437 buttons = new QHBoxLayout( rightLay ); 1100 buttons = new QHBoxLayout( rightLay );
1438 else 1101 else
1439 buttons = new QHBoxLayout( leftLay ); 1102 buttons = new QHBoxLayout( leftLay );
1440 1103
1441 QPushButton *ok, *cancel; 1104 QPushButton *ok, *cancel;
1442 ok = new QPushButton( QColorDialog::tr("OK"), dialog ); 1105 ok = new QPushButton( QColorDialog::tr("OK"), dialog );
1443 connect( ok, SIGNAL(clicked()), dialog, SLOT(accept()) ); 1106 connect( ok, SIGNAL(clicked()), dialog, SLOT(accept()) );
1444 ok->setDefault(TRUE); 1107 ok->setDefault(TRUE);
1445 cancel = new QPushButton( QColorDialog::tr("Cancel"), dialog ); 1108 cancel = new QPushButton( QColorDialog::tr("Cancel"), dialog );
1446 connect( cancel, SIGNAL(clicked()), dialog, SLOT(reject()) ); 1109 connect( cancel, SIGNAL(clicked()), dialog, SLOT(reject()) );
1447 buttons->addWidget( ok ); 1110 buttons->addWidget( ok );
1448 buttons->addWidget( cancel ); 1111 buttons->addWidget( cancel );
1449 buttons->addStretch(); 1112 buttons->addStretch();
1450 1113
1451 if ( !compact ) { 1114 if ( !compact ) {
1452 QPushButton *addCusBt = new QPushButton( 1115 QPushButton *addCusBt = new QPushButton(
1453 QColorDialog::tr("&Add To Custom Colors"), 1116 QColorDialog::tr("&Add To Custom Colors"),
1454 dialog ); 1117 dialog );
1455 rightLay->addWidget( addCusBt ); 1118 rightLay->addWidget( addCusBt );
1456 connect( addCusBt, SIGNAL(clicked()), this, SLOT(addCustom()) ); 1119 connect( addCusBt, SIGNAL(clicked()), this, SLOT(addCustom()) );
1457 } 1120 }
1458} 1121}
1459 1122
1460void QColorDialogPrivate::addCustom() 1123void QColorDialogPrivate::addCustom()
1461{ 1124{
1462 cusrgb[nextCust] = cs->currentColor(); 1125 cusrgb[nextCust] = cs->currentColor();
1463 custom->repaint( FALSE ); //### 1126 custom->repaint( FALSE ); //###
1464 nextCust = (nextCust+1) % 16; 1127 nextCust = (nextCust+1) % 16;
1465} 1128}
1466 1129
1467 1130
1468// BEING REVISED: jo 1131// BEING REVISED: jo
1469/*! 1132/*!
1470 \class QColorDialog qcolordialog.h 1133 \class QColorDialog qcolordialog.h
1471 \brief The QColorDialog class provides a dialog widget for specifying colors. 1134 \brief The QColorDialog class provides a dialog widget for specifying colors.
1472 \ingroup dialogs 1135 \ingroup dialogs
1473 1136
1474 The color dialog's function is to allow users to choose colors - 1137 The color dialog's function is to allow users to choose colors -
1475 for instance, you might use this in a drawing program to allow the 1138 for instance, you might use this in a drawing program to allow the
1476 user to set the brush color. 1139 user to set the brush color.
1477 1140
1478 This version of Qt only provides modal color dialogs. The static 1141 This version of Qt only provides modal color dialogs. The static
1479 getColor() function shows the dialog and allows the user to specify a color, 1142 getColor() function shows the dialog and allows the user to specify a color,
1480 while getRgba() does the same but allows the user to specify a color with an 1143 while getRgba() does the same but allows the user to specify a color with an
1481 alpha channel (transparency) value. 1144 alpha channel (transparency) value.
1482 1145
1483 The user can store customCount() different custom colors. The custom 1146 The user can store customCount() different custom colors. The custom
1484 colors are shared by all color dialogs, and remembered during the 1147 colors are shared by all color dialogs, and remembered during the
1485 execution of the program. Use setCustomColor() to set the 1148 execution of the program. Use setCustomColor() to set the
1486 custom colors, and customColor() to get them. 1149 custom colors, and customColor() to get them.
1487 1150
1488 <img src=qcolordlg-m.png> <img src=qcolordlg-w.png> 1151 <img src=qcolordlg-m.png> <img src=qcolordlg-w.png>
1489*/ 1152*/
1490 1153
1491/*! 1154/*!
1492 Constructs a default color dialog. Use setColor() for setting an initial value. 1155 Constructs a default color dialog. Use setColor() for setting an initial value.
1493 1156
1494 \sa getColor() 1157 \sa getColor()
1495*/ 1158*/
1496 1159
1497QColorDialog::QColorDialog(QWidget* parent, const char* name, bool modal) : 1160QColorDialog::QColorDialog(QWidget* parent, const char* name, bool modal) :
1498 QDialog(parent, name, modal ) 1161 QDialog(parent, name, modal )
1499{ 1162{
1500 setSizeGripEnabled( TRUE ); 1163 setSizeGripEnabled( TRUE );
1501 d = new QColorDialogPrivate( this ); 1164 d = new QColorDialogPrivate( this );
1502} 1165}
1503 1166
1504 1167
1505/*! 1168/*!
1506 Pops up a modal color dialog letting the user choose a color and returns 1169 Pops up a modal color dialog letting the user choose a color and returns
1507 that color. The color is initially set to \a initial. Returns an \link QColor::isValid() invalid\endlink color if the user cancels 1170 that color. The color is initially set to \a initial. Returns an \link QColor::isValid() invalid\endlink color if the user cancels
1508 the dialog. All colors allocated by the dialog will be deallocated 1171 the dialog. All colors allocated by the dialog will be deallocated
1509 before this function returns. 1172 before this function returns.
1510*/ 1173*/
1511 1174
1512QColor QColorDialog::getColor( QColor initial, QWidget *parent, 1175QColor QColorDialog::getColor( QColor initial, QWidget *parent,
1513 const char *name ) 1176 const char *name )
1514{ 1177{
1515 int allocContext = QColor::enterAllocContext(); 1178 int allocContext = QColor::enterAllocContext();
1516 QColorDialog *dlg = new QColorDialog( parent, name, TRUE ); //modal 1179 QColorDialog *dlg = new QColorDialog( parent, name, TRUE ); //modal
1517 if ( parent && parent->icon() && !parent->icon()->isNull() ) 1180 if ( parent && parent->icon() && !parent->icon()->isNull() )
1518 dlg->setIcon( *parent->icon() ); 1181 dlg->setIcon( *parent->icon() );
1519 else if ( qApp->mainWidget() && qApp->mainWidget()->icon() && !qApp->mainWidget()->icon()->isNull() ) 1182 else if ( qApp->mainWidget() && qApp->mainWidget()->icon() && !qApp->mainWidget()->icon()->isNull() )
1520 dlg->setIcon( *qApp->mainWidget()->icon() ); 1183 dlg->setIcon( *qApp->mainWidget()->icon() );
1521 1184
1522 dlg->setCaption( QColorDialog::tr( "Select color" ) ); 1185 dlg->setCaption( QColorDialog::tr( "Select color" ) );
1523 dlg->setColor( initial ); 1186 dlg->setColor( initial );
1524 int resultCode = dlg->exec(); 1187 int resultCode = dlg->exec();
1525 QColor::leaveAllocContext(); 1188 QColor::leaveAllocContext();
1526 QColor result; 1189 QColor result;
1527 if ( resultCode == QDialog::Accepted ) 1190 if ( resultCode == QDialog::Accepted )
1528 result = dlg->color(); 1191 result = dlg->color();
1529 QColor::destroyAllocContext(allocContext); 1192 QColor::destroyAllocContext(allocContext);
1530 delete dlg; 1193 delete dlg;
1531 return result; 1194 return result;
1532} 1195}
1533 1196
1534 1197
1535/*! 1198/*!
1536 Pops up a modal color dialog, letting the user choose a color and an 1199 Pops up a modal color dialog, letting the user choose a color and an
1537 alpha channel value. The color+alpha is initially set to \a initial. 1200 alpha channel value. The color+alpha is initially set to \a initial.
1538 1201
1539 If \a ok is non-null, \c *ok is set to TRUE if the user clicked OK, 1202 If \a ok is non-null, \c *ok is set to TRUE if the user clicked OK,
1540 and FALSE if the user clicked Cancel. 1203 and FALSE if the user clicked Cancel.
1541 1204
1542 If the user clicks Cancel the \a initial value is returned. 1205 If the user clicks Cancel the \a initial value is returned.
1543*/ 1206*/
1544 1207
1545QRgb QColorDialog::getRgba( QRgb initial, bool *ok, 1208QRgb QColorDialog::getRgba( QRgb initial, bool *ok,
1546 QWidget *parent, const char* name ) 1209 QWidget *parent, const char* name )
1547{ 1210{
1548 int allocContext = QColor::enterAllocContext(); 1211 int allocContext = QColor::enterAllocContext();
1549 QColorDialog *dlg = new QColorDialog( parent, name, TRUE ); //modal 1212 QColorDialog *dlg = new QColorDialog( parent, name, TRUE ); //modal
1550 dlg->setColor( initial ); 1213 dlg->setColor( initial );
1551 dlg->setSelectedAlpha( qAlpha(initial) ); 1214 dlg->setSelectedAlpha( qAlpha(initial) );
1552 int resultCode = dlg->exec(); 1215 int resultCode = dlg->exec();
1553 QColor::leaveAllocContext(); 1216 QColor::leaveAllocContext();
1554 QRgb result = initial; 1217 QRgb result = initial;
1555 if ( resultCode == QDialog::Accepted ) { 1218 if ( resultCode == QDialog::Accepted ) {
1556 QRgb c = dlg->color().rgb(); 1219 QRgb c = dlg->color().rgb();
1557 int alpha = dlg->selectedAlpha(); 1220 int alpha = dlg->selectedAlpha();
1558 result = qRgba( qRed(c), qGreen(c), qBlue(c), alpha ); 1221 result = qRgba( qRed(c), qGreen(c), qBlue(c), alpha );
1559 } 1222 }
1560 if ( ok ) 1223 if ( ok )
1561 *ok = resultCode == QDialog::Accepted; 1224 *ok = resultCode == QDialog::Accepted;
1562 1225
1563 QColor::destroyAllocContext(allocContext); 1226 QColor::destroyAllocContext(allocContext);
1564 delete dlg; 1227 delete dlg;
1565 return result; 1228 return result;
1566} 1229}
1567 1230
1568 1231
1569 1232
1570 1233
1571 1234
1572/*! 1235/*!
1573 Returns the color currently selected in the dialog. 1236 Returns the color currently selected in the dialog.
1574 1237
1575 \sa setColor() 1238 \sa setColor()
1576*/ 1239*/
1577 1240
1578QColor QColorDialog::color() const 1241QColor QColorDialog::color() const
1579{ 1242{
1580 return QColor(d->currentColor()); 1243 return QColor(d->currentColor());
1581} 1244}
1582 1245
1583 1246
1584/*! Destructs the dialog and frees any memory it allocated. 1247/*! Destructs the dialog and frees any memory it allocated.
1585 1248
1586*/ 1249*/
1587 1250
1588QColorDialog::~QColorDialog() 1251QColorDialog::~QColorDialog()
1589{ 1252{
1590 //d inherits QObject, so it is deleted by Qt. 1253 //d inherits QObject, so it is deleted by Qt.
1591} 1254}
1592 1255
1593 1256
1594/*! 1257/*!
1595 Sets the color shown in the dialog to \a c. 1258 Sets the color shown in the dialog to \a c.
1596 1259
1597 \sa color() 1260 \sa color()
1598*/ 1261*/
1599 1262
1600void QColorDialog::setColor( QColor c ) 1263void QColorDialog::setColor( QColor c )
1601{ 1264{
1602 d->setCurrentColor( c.rgb() ); 1265 d->setCurrentColor( c.rgb() );
1603} 1266}
1604 1267
1605 1268
1606 1269
1607 1270
1608/*! 1271/*!
1609 Sets the initial alpha channel value to \a a, and show the alpha channel 1272 Sets the initial alpha channel value to \a a, and show the alpha channel
1610 entry box. 1273 entry box.
1611*/ 1274*/
1612 1275
1613void QColorDialog::setSelectedAlpha( int a ) 1276void QColorDialog::setSelectedAlpha( int a )
1614{ 1277{
1615 d->showAlpha( TRUE ); 1278 d->showAlpha( TRUE );
1616 d->setCurrentAlpha( a ); 1279 d->setCurrentAlpha( a );
1617} 1280}
1618 1281
1619 1282
1620/*! 1283/*!
1621 Returns the value selected for the alpha channel. 1284 Returns the value selected for the alpha channel.
1622*/ 1285*/
1623 1286
1624int QColorDialog::selectedAlpha() const 1287int QColorDialog::selectedAlpha() const
1625{ 1288{
diff --git a/libqtaux/qcolordialog.h b/libqtaux/qcolordialog.h
index 89c6283..50c6482 100644
--- a/libqtaux/qcolordialog.h
+++ b/libqtaux/qcolordialog.h
@@ -1,84 +1,395 @@
1/**************************************************************************** 1/****************************************************************************
2** $Id$ 2** $Id$
3** 3**
4** Definition of QColorDialog class 4** Definition of QColorDialog class
5** 5**
6** Created : 990222 6** Created : 990222
7** 7**
8** Copyright (C) 1992-2000 Trolltech AS. All rights reserved. 8** Copyright (C) 1992-2000 Trolltech AS. All rights reserved.
9** 9**
10** This file is part of the dialogs module of the Qt GUI Toolkit. 10** This file is part of the dialogs module of the Qt GUI Toolkit.
11** 11**
12** This file may be distributed under the terms of the Q Public License 12** This file may be distributed under the terms of the Q Public License
13** as defined by Trolltech AS of Norway and appearing in the file 13** as defined by Trolltech AS of Norway and appearing in the file
14** LICENSE.QPL included in the packaging of this file. 14** LICENSE.QPL included in the packaging of this file.
15** 15**
16** This file may be distributed and/or modified under the terms of the 16** This file may be distributed and/or modified under the terms of the
17** GNU General Public License version 2 as published by the Free Software 17** GNU General Public License version 2 as published by the Free Software
18** Foundation and appearing in the file LICENSE.GPL included in the 18** Foundation and appearing in the file LICENSE.GPL included in the
19** packaging of this file. 19** packaging of this file.
20** 20**
21** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition 21** Licensees holding valid Qt Enterprise Edition or Qt Professional Edition
22** licenses may use this file in accordance with the Qt Commercial License 22** licenses may use this file in accordance with the Qt Commercial License
23** Agreement provided with the Software. 23** Agreement provided with the Software.
24** 24**
25** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 25** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
26** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 26** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
27** 27**
28** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for 28** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
29** information about Qt Commercial License Agreements. 29** information about Qt Commercial License Agreements.
30** See http://www.trolltech.com/qpl/ for QPL licensing information. 30** See http://www.trolltech.com/qpl/ for QPL licensing information.
31** See http://www.trolltech.com/gpl/ for GPL licensing information. 31** See http://www.trolltech.com/gpl/ for GPL licensing information.
32** 32**
33** Contact info@trolltech.com if any conditions of this licensing are 33** Contact info@trolltech.com if any conditions of this licensing are
34** not clear to you. 34** not clear to you.
35** 35**
36**********************************************************************/ 36**********************************************************************/
37 37
38#ifndef QCOLORDIALOG_H 38#ifndef QCOLORDIALOG_H
39#define QCOLORDIALOG_H 39#define QCOLORDIALOG_H
40 40
41#ifndef QT_H 41#ifndef QT_H
42#include <qdialog.h> 42#include <qdialog.h>
43#endif // QT_H 43#endif // QT_H
44 44
45#include <qlabel.h>
46#include <qlineedit.h>
47#include <qtableview.h>
48#include <qvalidator.h>
49
50struct QWellArrayData;
51
52class QWellArray : public QTableView
53{
54 Q_OBJECT
55// Q_PROPERTY( int numCols READ numCols )
56// Q_PROPERTY( int numRows READ numRows )
57// Q_PROPERTY( int selectedColumn READ selectedColumn )
58// Q_PROPERTY( int selectedRow READ selectedRow )
59
60public:
61 QWellArray( QWidget *parent=0, const char *name=0, bool popup = FALSE );
62
63 ~QWellArray() {}
64 QString cellContent( int row, int col ) const;
65 // ### Paul !!! virtual void setCellContent( int row, int col, const QString &);
66
67 // ##### Obsolete since not const
68 int numCols() { return nCols; }
69 int numRows() { return nRows; }
70
71 int numCols() const { return nCols; }
72 int numRows() const { return nRows; }
73
74 // ##### Obsolete since not const
75 int selectedColumn() { return selCol; }
76 int selectedRow() { return selRow; }
77
78 int selectedColumn() const { return selCol; }
79 int selectedRow() const { return selRow; }
80
81 virtual void setSelected( int row, int col );
82
83 void setCellSize( int w, int h ) { setCellWidth(w);setCellHeight( h ); }
84
85 QSize sizeHint() const;
86
87 virtual void setDimension( int rows, int cols );
88 virtual void setCellBrush( int row, int col, const QBrush & );
89 QBrush cellBrush( int row, int col );
90
91signals:
92 void selected( int row, int col );
93
94protected:
95 virtual void setCurrent( int row, int col );
96
97 virtual void drawContents( QPainter *, int row, int col, const QRect& );
98 void drawContents( QPainter * );
99
100 void paintCell( QPainter*, int row, int col );
101 void mousePressEvent( QMouseEvent* );
102 void mouseReleaseEvent( QMouseEvent* );
103 void mouseMoveEvent( QMouseEvent* );
104 void keyPressEvent( QKeyEvent* );
105 void focusInEvent( QFocusEvent* );
106 void focusOutEvent( QFocusEvent* );
107
108private:
109 int curRow;
110 int curCol;
111 int selRow;
112 int selCol;
113 int nCols;
114 int nRows;
115 bool smallStyle;
116 QWellArrayData *d;
117
118private: // Disabled copy constructor and operator=
119#if defined(Q_DISABLE_COPY)
120 QWellArray( const QWellArray & );
121 QWellArray& operator=( const QWellArray & );
122#endif
123};
124
125struct QWellArrayData {
126 QBrush *brush;
127};
128
129class QColNumLineEdit : public QLineEdit
130{
131public:
132 QColNumLineEdit( QWidget *parent, const char* name = 0 )
133 : QLineEdit( parent, name ) { setMaxLength( 3 );}
134 QSize sizeHint() const {
135 return QSize( 30, //#####
136 QLineEdit::sizeHint().height() ); }
137 void setNum( int i ) {
138 QString s;
139 s.setNum(i);
140 bool block = signalsBlocked();
141 blockSignals(TRUE);
142 setText( s );
143 blockSignals(block);
144 }
145 int val() const { return text().toInt(); }
146};
147
148class QColorShowLabel : public QFrame
149{
150 Q_OBJECT
151
152public:
153 QColorShowLabel( QWidget *parent ) :QFrame( parent ) {
154 setFrameStyle( QFrame::Panel|QFrame::Sunken );
155 setBackgroundMode( PaletteBackground );
156 setAcceptDrops( TRUE );
157 mousePressed = FALSE;
158 }
159 void setColor( QColor c ) { col = c; }
160
161signals:
162 void colorDropped( QRgb );
163
164protected:
165 void drawContents( QPainter *p );
166 void mousePressEvent( QMouseEvent *e );
167 void mouseMoveEvent( QMouseEvent *e );
168 void mouseReleaseEvent( QMouseEvent *e );
169#ifndef QT_NO_DRAGANDDROP
170 void dragEnterEvent( QDragEnterEvent *e );
171 void dragLeaveEvent( QDragLeaveEvent *e );
172 void dropEvent( QDropEvent *e );
173#endif
174
175private:
176 QColor col;
177 bool mousePressed;
178 QPoint pressPos;
179
180};
181
182class QColorShower : public QWidget
183{
184 Q_OBJECT
185public:
186 QColorShower( QWidget *parent, const char *name = 0 );
187
188 //things that don't emit signals
189 void setHsv( int h, int s, int v );
190
191 int currentAlpha() const { return alphaEd->val(); }
192 void setCurrentAlpha( int a ) { alphaEd->setNum( a ); }
193 void showAlpha( bool b );
194
195
196 QRgb currentColor() const { return curCol; }
197
198public slots:
199 void setRgb( QRgb rgb );
200
201signals:
202 void newCol( QRgb rgb );
203private slots:
204 void rgbEd();
205 void hsvEd();
206private:
207 void showCurrentColor();
208 int hue, sat, val;
209 QRgb curCol;
210 QColNumLineEdit *hEd;
211 QColNumLineEdit *sEd;
212 QColNumLineEdit *vEd;
213 QColNumLineEdit *rEd;
214 QColNumLineEdit *gEd;
215 QColNumLineEdit *bEd;
216 QColNumLineEdit *alphaEd;
217 QLabel *alphaLab;
218 QColorShowLabel *lab;
219 bool rgbOriginal;
220};
221
222class QColorPicker : public QFrame
223{
224 Q_OBJECT
225public:
226 QColorPicker(QWidget* parent=0, const char* name=0);
227 ~QColorPicker();
228
229public slots:
230 void setCol( int h, int s );
231
232signals:
233 void newCol( int h, int s );
234
235protected:
236 QSize sizeHint() const;
237 QSizePolicy sizePolicy() const;
238 void drawContents(QPainter* p);
239 void mouseMoveEvent( QMouseEvent * );
240 void mousePressEvent( QMouseEvent * );
241
242private:
243 int hue;
244 int sat;
245
246 QPoint colPt();
247 int huePt( const QPoint &pt );
248 int satPt( const QPoint &pt );
249 void setCol( const QPoint &pt );
250
251 QPixmap *pix;
252};
253
254class QColorLuminancePicker : public QWidget
255{
256 Q_OBJECT
257public:
258 QColorLuminancePicker(QWidget* parent=0, const char* name=0);
259 ~QColorLuminancePicker();
260
261public slots:
262 void setCol( int h, int s, int v );
263 void setCol( int h, int s );
264
265signals:
266 void newHsv( int h, int s, int v );
267
268protected:
269// QSize sizeHint() const;
270// QSizePolicy sizePolicy() const;
271 void paintEvent( QPaintEvent*);
272 void mouseMoveEvent( QMouseEvent * );
273 void mousePressEvent( QMouseEvent * );
274
275private:
276 enum { foff = 3, coff = 4 }; //frame and contents offset
277 int val;
278 int hue;
279 int sat;
280
281 int y2val( int y );
282 int val2y( int val );
283 void setVal( int v );
284
285 QPixmap *pix;
286};
287
288class QColorWell : public QWellArray
289{
290public:
291 QColorWell( QWidget *parent, int r, int c, QRgb *vals )
292 :QWellArray( parent, "" ), values( vals ), mousePressed( FALSE ), oldCurrent( -1, -1 )
293 { setDimension(r,c); setWFlags( WResizeNoErase ); }
294 QSizePolicy sizePolicy() const;
295
296protected:
297 void drawContents( QPainter *, int row, int col, const QRect& );
298 void drawContents( QPainter *p ) { QWellArray::drawContents(p); }
299 void mousePressEvent( QMouseEvent *e );
300 void mouseMoveEvent( QMouseEvent *e );
301 void mouseReleaseEvent( QMouseEvent *e );
302#ifndef QT_NO_DRAGANDDROP
303 void dragEnterEvent( QDragEnterEvent *e );
304 void dragLeaveEvent( QDragLeaveEvent *e );
305 void dragMoveEvent( QDragMoveEvent *e );
306 void dropEvent( QDropEvent *e );
307#endif
308
309private:
310 QRgb *values;
311 bool mousePressed;
312 QPoint pressPos;
313 QPoint oldCurrent;
314
315};
316
317class QColIntValidator: public QIntValidator
318{
319public:
320 QColIntValidator( int bottom, int top,
321 QWidget * parent, const char *name = 0 )
322 :QIntValidator( bottom, top, parent, name ) {}
323
324 QValidator::State validate( QString &, int & ) const;
325};
326
45class QColorDialogPrivate; 327class QColorDialogPrivate;
46 328
47class Q_EXPORT QColorDialog : public QDialog 329class Q_EXPORT QColorDialog : public QDialog
48{ 330{
49 Q_OBJECT 331 Q_OBJECT
50 332
51public: 333public:
52 static QColor getColor( QColor, QWidget *parent=0, const char* name=0 ); // ### 3.0: make const QColor& 334 static QColor getColor( QColor, QWidget *parent=0, const char* name=0 ); // ### 3.0: make const QColor&
53 static QRgb getRgba( QRgb, bool* ok = 0, 335 static QRgb getRgba( QRgb, bool* ok = 0,
54 QWidget *parent=0, const char* name=0 ); 336 QWidget *parent=0, const char* name=0 );
55 337
56 338
57 static int customCount(); 339 static int customCount();
58 static QRgb customColor( int ); 340 static QRgb customColor( int );
59 static void setCustomColor( int, QRgb ); 341 static void setCustomColor( int, QRgb );
60 342
61private: 343private:
62 ~QColorDialog(); 344 ~QColorDialog();
63 345
64 QColorDialog( QWidget* parent=0, const char* name=0, bool modal=FALSE ); 346 QColorDialog( QWidget* parent=0, const char* name=0, bool modal=FALSE );
65 void setColor( QColor ); // ### 3.0: make const QColor& 347 void setColor( QColor ); // ### 3.0: make const QColor&
66 QColor color() const; 348 QColor color() const;
67 349
68private: 350private:
69 void setSelectedAlpha( int ); 351 void setSelectedAlpha( int );
70 int selectedAlpha() const; 352 int selectedAlpha() const;
71 353
72 void showCustom( bool=TRUE ); 354 void showCustom( bool=TRUE );
73private: 355private:
74 QColorDialogPrivate *d; 356 QColorDialogPrivate *d;
75 friend class QColorDialogPrivate; 357 friend class QColorDialogPrivate;
76 358
77 private:// Disabled copy constructor and operator= 359private: // Disabled copy constructor and operator=
78#if defined(Q_DISABLE_COPY) 360#if defined(Q_DISABLE_COPY)
79 QColorDialog( const QColorDialog & ); 361 QColorDialog( const QColorDialog & );
80 QColorDialog& operator=( const QColorDialog & ); 362 QColorDialog& operator=( const QColorDialog & );
81#endif 363#endif
82}; 364};
83 365
366class QColorDialogPrivate : public QObject
367{
368Q_OBJECT
369public:
370 QColorDialogPrivate( QColorDialog *p );
371 QRgb currentColor() const { return cs->currentColor(); }
372 void setCurrentColor( QRgb rgb );
373
374 int currentAlpha() const { return cs->currentAlpha(); }
375 void setCurrentAlpha( int a ) { cs->setCurrentAlpha( a ); }
376 void showAlpha( bool b ) { cs->showAlpha( b ); }
377
378private slots:
379 void addCustom();
380
381 void newHsv( int h, int s, int v );
382 void newColorTypedIn( QRgb rgb );
383 void newCustom( int, int );
384 void newStandard( int, int );
385private:
386 QColorPicker *cp;
387 QColorLuminancePicker *lp;
388 QWellArray *custom;
389 QWellArray *standard;
390 QColorShower *cs;
391 int nextCust;
392 bool compact;
393};
394
84#endif 395#endif