-rw-r--r-- | libqtaux/qcolordialog.cpp | 837 | ||||
-rw-r--r-- | libqtaux/qcolordialog.h | 315 |
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 | |||
@@ -16,1163 +16,855 @@ | |||
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 | |||
72 | struct QWellArrayData; | ||
73 | |||
74 | class 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 | |||
82 | public: | ||
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 | |||
113 | signals: | ||
114 | void selected( int row, int col ); | ||
115 | |||
116 | protected: | ||
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 | |||
130 | private: | ||
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 | |||
153 | struct 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 | |||
167 | QWellArray::QWellArray( QWidget *parent, const char * name, bool popup ) | 65 | QWellArray::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 | ||
207 | QSize QWellArray::sizeHint() const | 105 | QSize 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 | ||
217 | void QWellArray::paintCell( QPainter* p, int row, int col ) | 115 | void 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 | */ |
272 | void QWellArray::drawContents( QPainter *p ) | 170 | void 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 | */ |
280 | void QWellArray::drawContents( QPainter *p, int row, int col, const QRect &r ) | 178 | void 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 | */ |
296 | void QWellArray::mousePressEvent( QMouseEvent* e ) | 194 | void 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 | */ |
306 | void QWellArray::mouseReleaseEvent( QMouseEvent* ) | 204 | void 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 | */ |
316 | void QWellArray::mouseMoveEvent( QMouseEvent* e ) | 214 | void 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 | ||
331 | void QWellArray::setCurrent( int row, int col ) | 229 | void 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 | ||
358 | void QWellArray::setSelected( int row, int col ) | 256 | void 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 | */ |
386 | void QWellArray::focusInEvent( QFocusEvent* ) | 284 | void 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 | */ |
398 | void QWellArray::setDimension( int rows, int cols ) | 296 | void 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 | ||
412 | void QWellArray::setCellBrush( int row, int col, const QBrush &b ) | 310 | void 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 | ||
433 | QBrush QWellArray::cellBrush( int row, int col ) | 331 | QBrush 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 | ||
445 | void QWellArray::focusOutEvent( QFocusEvent* ) | 343 | void QWellArray::focusOutEvent( QFocusEvent* ) |
446 | { | 344 | { |
447 | updateCell( curRow, curCol ); | 345 | updateCell( curRow, curCol ); |
448 | } | 346 | } |
449 | 347 | ||
450 | /*\reimp | 348 | /*\reimp |
451 | */ | 349 | */ |
452 | void QWellArray::keyPressEvent( QKeyEvent* e ) | 350 | void 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 | ||
503 | static bool initrgb = FALSE; | 401 | static bool initrgb = FALSE; |
504 | static QRgb stdrgb[6*8]; | 402 | static QRgb stdrgb[6*8]; |
505 | static QRgb cusrgb[2*8]; | 403 | static QRgb cusrgb[2*8]; |
506 | 404 | ||
507 | 405 | ||
508 | static void initRGB() | 406 | static 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 | */ |
527 | int QColorDialog::customCount() | 425 | int 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 | */ |
535 | QRgb QColorDialog::customColor( int i ) | 433 | QRgb 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 | */ |
550 | void QColorDialog::setCustomColor( int i, QRgb c ) | 448 | void 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 | ||
562 | static inline void rgb2hsv( QRgb rgb, int&h, int&s, int&v ) | 460 | static 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 | ||
569 | class QColorWell : public QWellArray | ||
570 | { | ||
571 | public: | ||
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 | |||
577 | protected: | ||
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 | |||
590 | private: | ||
591 | QRgb *values; | ||
592 | bool mousePressed; | ||
593 | QPoint pressPos; | ||
594 | QPoint oldCurrent; | ||
595 | |||
596 | }; | ||
597 | |||
598 | QSizePolicy QColorWell::sizePolicy() const | 467 | QSizePolicy QColorWell::sizePolicy() const |
599 | { | 468 | { |
600 | return QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum ); | 469 | return QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Minimum ); |
601 | } | 470 | } |
602 | 471 | ||
603 | void QColorWell::drawContents( QPainter *p, int row, int col, const QRect &r ) | 472 | void 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 | ||
609 | void QColorWell::mousePressEvent( QMouseEvent *e ) | 478 | void 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 | ||
617 | void QColorWell::mouseMoveEvent( QMouseEvent *e ) | 486 | void 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 |
641 | void QColorWell::dragEnterEvent( QDragEnterEvent *e ) | 510 | void 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 | ||
650 | void QColorWell::dragLeaveEvent( QDragLeaveEvent * ) | 519 | void QColorWell::dragLeaveEvent( QDragLeaveEvent * ) |
651 | { | 520 | { |
652 | if ( hasFocus() ) | 521 | if ( hasFocus() ) |
653 | parentWidget()->setFocus(); | 522 | parentWidget()->setFocus(); |
654 | } | 523 | } |
655 | 524 | ||
656 | void QColorWell::dragMoveEvent( QDragMoveEvent *e ) | 525 | void 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 | ||
665 | void QColorWell::dropEvent( QDropEvent *e ) | 534 | void 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 | ||
681 | void QColorWell::mouseReleaseEvent( QMouseEvent *e ) | 550 | void 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 | ||
689 | class QColorPicker : public QFrame | ||
690 | { | ||
691 | Q_OBJECT | ||
692 | public: | ||
693 | QColorPicker(QWidget* parent=0, const char* name=0); | ||
694 | ~QColorPicker(); | ||
695 | |||
696 | public slots: | ||
697 | void setCol( int h, int s ); | ||
698 | |||
699 | signals: | ||
700 | void newCol( int h, int s ); | ||
701 | |||
702 | protected: | ||
703 | QSize sizeHint() const; | ||
704 | QSizePolicy sizePolicy() const; | ||
705 | void drawContents(QPainter* p); | ||
706 | void mouseMoveEvent( QMouseEvent * ); | ||
707 | void mousePressEvent( QMouseEvent * ); | ||
708 | |||
709 | private: | ||
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 | |||
721 | static int pWidth = 200; | 558 | static int pWidth = 200; |
722 | static int pHeight = 200; | 559 | static int pHeight = 200; |
723 | 560 | ||
724 | class QColorLuminancePicker : public QWidget | ||
725 | { | ||
726 | Q_OBJECT | ||
727 | public: | ||
728 | QColorLuminancePicker(QWidget* parent=0, const char* name=0); | ||
729 | ~QColorLuminancePicker(); | ||
730 | |||
731 | public slots: | ||
732 | void setCol( int h, int s, int v ); | ||
733 | void setCol( int h, int s ); | ||
734 | |||
735 | signals: | ||
736 | void newHsv( int h, int s, int v ); | ||
737 | |||
738 | protected: | ||
739 | // QSize sizeHint() const; | ||
740 | // QSizePolicy sizePolicy() const; | ||
741 | void paintEvent( QPaintEvent*); | ||
742 | void mouseMoveEvent( QMouseEvent * ); | ||
743 | void mousePressEvent( QMouseEvent * ); | ||
744 | |||
745 | private: | ||
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 | |||
759 | int QColorLuminancePicker::y2val( int y ) | 561 | int 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 | ||
765 | int QColorLuminancePicker::val2y( int v ) | 567 | int 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 | ||
771 | QColorLuminancePicker::QColorLuminancePicker(QWidget* parent, | 573 | QColorLuminancePicker::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 | ||
780 | QColorLuminancePicker::~QColorLuminancePicker() | 582 | QColorLuminancePicker::~QColorLuminancePicker() |
781 | { | 583 | { |
782 | delete pix; | 584 | delete pix; |
783 | } | 585 | } |
784 | 586 | ||
785 | void QColorLuminancePicker::mouseMoveEvent( QMouseEvent *m ) | 587 | void QColorLuminancePicker::mouseMoveEvent( QMouseEvent *m ) |
786 | { | 588 | { |
787 | setVal( y2val(m->y()) ); | 589 | setVal( y2val(m->y()) ); |
788 | } | 590 | } |
789 | void QColorLuminancePicker::mousePressEvent( QMouseEvent *m ) | 591 | void QColorLuminancePicker::mousePressEvent( QMouseEvent *m ) |
790 | { | 592 | { |
791 | setVal( y2val(m->y()) ); | 593 | setVal( y2val(m->y()) ); |
792 | } | 594 | } |
793 | 595 | ||
794 | void QColorLuminancePicker::setVal( int v ) | 596 | void 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. |
805 | void QColorLuminancePicker::setCol( int h, int s ) | 607 | void 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 | ||
811 | void QColorLuminancePicker::paintEvent( QPaintEvent * ) | 613 | void 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 | ||
845 | void QColorLuminancePicker::setCol( int h, int s , int v ) | 647 | void 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 | ||
854 | QPoint QColorPicker::colPt() | 656 | QPoint 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 ); } |
856 | int QColorPicker::huePt( const QPoint &pt ) | 658 | int QColorPicker::huePt( const QPoint &pt ) |
857 | { return 360 - pt.x()*360/(pWidth-1); } | 659 | { return 360 - pt.x()*360/(pWidth-1); } |
858 | int QColorPicker::satPt( const QPoint &pt ) | 660 | int QColorPicker::satPt( const QPoint &pt ) |
859 | { return 255 - pt.y()*255/(pHeight-1) ; } | 661 | { return 255 - pt.y()*255/(pHeight-1) ; } |
860 | void QColorPicker::setCol( const QPoint &pt ) | 662 | void QColorPicker::setCol( const QPoint &pt ) |
861 | { setCol( huePt(pt), satPt(pt) ); } | 663 | { setCol( huePt(pt), satPt(pt) ); } |
862 | 664 | ||
863 | QColorPicker::QColorPicker(QWidget* parent, const char* name ) | 665 | QColorPicker::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 | ||
882 | QColorPicker::~QColorPicker() | 684 | QColorPicker::~QColorPicker() |
883 | { | 685 | { |
884 | delete pix; | 686 | delete pix; |
885 | } | 687 | } |
886 | 688 | ||
887 | QSize QColorPicker::sizeHint() const | 689 | QSize 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 | ||
892 | QSizePolicy QColorPicker::sizePolicy() const | 694 | QSizePolicy QColorPicker::sizePolicy() const |
893 | { | 695 | { |
894 | return QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ); | 696 | return QSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ); |
895 | } | 697 | } |
896 | 698 | ||
897 | void QColorPicker::setCol( int h, int s ) | 699 | void 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 | ||
911 | void QColorPicker::mouseMoveEvent( QMouseEvent *m ) | 713 | void 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 | ||
918 | void QColorPicker::mousePressEvent( QMouseEvent *m ) | 720 | void 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 | ||
925 | void QColorPicker::drawContents(QPainter* p) | 727 | void 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 | ||
938 | class QColorShowLabel; | ||
939 | |||
940 | |||
941 | |||
942 | class QColIntValidator: public QIntValidator | ||
943 | { | ||
944 | public: | ||
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 | |||
952 | QValidator::State QColIntValidator::validate( QString &s, int &pos ) const | 740 | QValidator::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 | |||
972 | class QColNumLineEdit : public QLineEdit | ||
973 | { | ||
974 | public: | ||
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 | |||
992 | class QColorShower : public QWidget | ||
993 | { | ||
994 | Q_OBJECT | ||
995 | public: | ||
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 | |||
1008 | public slots: | ||
1009 | void setRgb( QRgb rgb ); | ||
1010 | |||
1011 | signals: | ||
1012 | void newCol( QRgb rgb ); | ||
1013 | private slots: | ||
1014 | void rgbEd(); | ||
1015 | void hsvEd(); | ||
1016 | private: | ||
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 | |||
1032 | class QColorShowLabel : public QFrame | ||
1033 | { | ||
1034 | Q_OBJECT | ||
1035 | |||
1036 | public: | ||
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 | |||
1045 | signals: | ||
1046 | void colorDropped( QRgb ); | ||
1047 | |||
1048 | protected: | ||
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 | |||
1059 | private: | ||
1060 | QColor col; | ||
1061 | bool mousePressed; | ||
1062 | QPoint pressPos; | ||
1063 | |||
1064 | }; | ||
1065 | |||
1066 | void QColorShowLabel::drawContents( QPainter *p ) | 758 | void QColorShowLabel::drawContents( QPainter *p ) |
1067 | { | 759 | { |
1068 | p->fillRect( contentsRect(), col ); | 760 | p->fillRect( contentsRect(), col ); |
1069 | } | 761 | } |
1070 | 762 | ||
1071 | void QColorShower::showAlpha( bool b ) | 763 | void 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 | ||
1082 | void QColorShowLabel::mousePressEvent( QMouseEvent *e ) | 774 | void QColorShowLabel::mousePressEvent( QMouseEvent *e ) |
1083 | { | 775 | { |
1084 | mousePressed = TRUE; | 776 | mousePressed = TRUE; |
1085 | pressPos = e->pos(); | 777 | pressPos = e->pos(); |
1086 | } | 778 | } |
1087 | 779 | ||
1088 | void QColorShowLabel::mouseMoveEvent( QMouseEvent *e ) | 780 | void 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 |
1108 | void QColorShowLabel::dragEnterEvent( QDragEnterEvent *e ) | 800 | void 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 | ||
1116 | void QColorShowLabel::dragLeaveEvent( QDragLeaveEvent * ) | 808 | void QColorShowLabel::dragLeaveEvent( QDragLeaveEvent * ) |
1117 | { | 809 | { |
1118 | } | 810 | } |
1119 | 811 | ||
1120 | void QColorShowLabel::dropEvent( QDropEvent *e ) | 812 | void 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 | ||
1133 | void QColorShowLabel::mouseReleaseEvent( QMouseEvent * ) | 825 | void 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 | ||
1140 | QColorShower::QColorShower( QWidget *parent, const char *name ) | 832 | QColorShower::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 ); |
@@ -1265,216 +957,187 @@ void QColorShower::setRgb( QRgb rgb ) | |||
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 | ||
1271 | void QColorShower::setHsv( int h, int s, int v ) | 963 | void 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 | ||
1289 | class QColorDialogPrivate : public QObject | ||
1290 | { | ||
1291 | Q_OBJECT | ||
1292 | public: | ||
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 | |||
1301 | private 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 ); | ||
1308 | private: | ||
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 |
1319 | void QColorDialogPrivate::newHsv( int h, int s, int v ) | 982 | void 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 |
1327 | void QColorDialogPrivate::setCurrentColor( QRgb rgb ) | 990 | void 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 |
1334 | void QColorDialogPrivate::newColorTypedIn( QRgb rgb ) | 997 | void 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 | ||
1342 | void QColorDialogPrivate::newCustom( int r, int c ) | 1005 | void 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 | ||
1350 | void QColorDialogPrivate::newStandard( int r, int c ) | 1013 | void 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 | ||
1356 | QColorDialogPrivate::QColorDialogPrivate( QColorDialog *dialog ) : | 1019 | QColorDialogPrivate::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 | ||
1460 | void QColorDialogPrivate::addCustom() | 1123 | void 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 |
@@ -1489,97 +1152,97 @@ void QColorDialogPrivate::addCustom() | |||
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 | ||
1497 | QColorDialog::QColorDialog(QWidget* parent, const char* name, bool modal) : | 1160 | QColorDialog::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 | ||
1512 | QColor QColorDialog::getColor( QColor initial, QWidget *parent, | 1175 | QColor 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 | ||
1545 | QRgb QColorDialog::getRgba( QRgb initial, bool *ok, | 1208 | QRgb 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 | ||
1578 | QColor QColorDialog::color() const | 1241 | QColor 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 | ||
diff --git a/libqtaux/qcolordialog.h b/libqtaux/qcolordialog.h index 89c6283..50c6482 100644 --- a/libqtaux/qcolordialog.h +++ b/libqtaux/qcolordialog.h | |||
@@ -21,64 +21,375 @@ | |||
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 | |||
50 | struct QWellArrayData; | ||
51 | |||
52 | class 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 | |||
60 | public: | ||
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 | |||
91 | signals: | ||
92 | void selected( int row, int col ); | ||
93 | |||
94 | protected: | ||
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 | |||
108 | private: | ||
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 | |||
118 | private: // Disabled copy constructor and operator= | ||
119 | #if defined(Q_DISABLE_COPY) | ||
120 | QWellArray( const QWellArray & ); | ||
121 | QWellArray& operator=( const QWellArray & ); | ||
122 | #endif | ||
123 | }; | ||
124 | |||
125 | struct QWellArrayData { | ||
126 | QBrush *brush; | ||
127 | }; | ||
128 | |||
129 | class QColNumLineEdit : public QLineEdit | ||
130 | { | ||
131 | public: | ||
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 | |||
148 | class QColorShowLabel : public QFrame | ||
149 | { | ||
150 | Q_OBJECT | ||
151 | |||
152 | public: | ||
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 | |||
161 | signals: | ||
162 | void colorDropped( QRgb ); | ||
163 | |||
164 | protected: | ||
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 | |||
175 | private: | ||
176 | QColor col; | ||
177 | bool mousePressed; | ||
178 | QPoint pressPos; | ||
179 | |||
180 | }; | ||
181 | |||
182 | class QColorShower : public QWidget | ||
183 | { | ||
184 | Q_OBJECT | ||
185 | public: | ||
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 | |||
198 | public slots: | ||
199 | void setRgb( QRgb rgb ); | ||
200 | |||
201 | signals: | ||
202 | void newCol( QRgb rgb ); | ||
203 | private slots: | ||
204 | void rgbEd(); | ||
205 | void hsvEd(); | ||
206 | private: | ||
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 | |||
222 | class QColorPicker : public QFrame | ||
223 | { | ||
224 | Q_OBJECT | ||
225 | public: | ||
226 | QColorPicker(QWidget* parent=0, const char* name=0); | ||
227 | ~QColorPicker(); | ||
228 | |||
229 | public slots: | ||
230 | void setCol( int h, int s ); | ||
231 | |||
232 | signals: | ||
233 | void newCol( int h, int s ); | ||
234 | |||
235 | protected: | ||
236 | QSize sizeHint() const; | ||
237 | QSizePolicy sizePolicy() const; | ||
238 | void drawContents(QPainter* p); | ||
239 | void mouseMoveEvent( QMouseEvent * ); | ||
240 | void mousePressEvent( QMouseEvent * ); | ||
241 | |||
242 | private: | ||
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 | |||
254 | class QColorLuminancePicker : public QWidget | ||
255 | { | ||
256 | Q_OBJECT | ||
257 | public: | ||
258 | QColorLuminancePicker(QWidget* parent=0, const char* name=0); | ||
259 | ~QColorLuminancePicker(); | ||
260 | |||
261 | public slots: | ||
262 | void setCol( int h, int s, int v ); | ||
263 | void setCol( int h, int s ); | ||
264 | |||
265 | signals: | ||
266 | void newHsv( int h, int s, int v ); | ||
267 | |||
268 | protected: | ||
269 | // QSize sizeHint() const; | ||
270 | // QSizePolicy sizePolicy() const; | ||
271 | void paintEvent( QPaintEvent*); | ||
272 | void mouseMoveEvent( QMouseEvent * ); | ||
273 | void mousePressEvent( QMouseEvent * ); | ||
274 | |||
275 | private: | ||
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 | |||
288 | class QColorWell : public QWellArray | ||
289 | { | ||
290 | public: | ||
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 | |||
296 | protected: | ||
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 | |||
309 | private: | ||
310 | QRgb *values; | ||
311 | bool mousePressed; | ||
312 | QPoint pressPos; | ||
313 | QPoint oldCurrent; | ||
314 | |||
315 | }; | ||
316 | |||
317 | class QColIntValidator: public QIntValidator | ||
318 | { | ||
319 | public: | ||
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 | |||
45 | class QColorDialogPrivate; | 327 | class QColorDialogPrivate; |
46 | 328 | ||
47 | class Q_EXPORT QColorDialog : public QDialog | 329 | class Q_EXPORT QColorDialog : public QDialog |
48 | { | 330 | { |
49 | Q_OBJECT | 331 | Q_OBJECT |
50 | 332 | ||
51 | public: | 333 | public: |
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 | ||
61 | private: | 343 | private: |
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 | ||
68 | private: | 350 | private: |
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 ); |
73 | private: | 355 | private: |
74 | QColorDialogPrivate *d; | 356 | QColorDialogPrivate *d; |
75 | friend class QColorDialogPrivate; | 357 | friend class QColorDialogPrivate; |
76 | 358 | ||
77 | private:// Disabled copy constructor and operator= | 359 | private: // 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 | ||
366 | class QColorDialogPrivate : public QObject | ||
367 | { | ||
368 | Q_OBJECT | ||
369 | public: | ||
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 | |||
378 | private 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 ); | ||
385 | private: | ||
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 |