00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
#include <stdio.h>
00032
#include <stdlib.h>
00033
00034
#include <qcheckbox.h>
00035
#include <qcombobox.h>
00036
#include <qdrawutil.h>
00037
#include <qevent.h>
00038
#include <qfile.h>
00039
#include <qimage.h>
00040
#include <qlabel.h>
00041
#include <qlayout.h>
00042
#include <qlineedit.h>
00043
#include <qvalidator.h>
00044
#include <qpainter.h>
00045
#include <qpushbutton.h>
00046
#include <qspinbox.h>
00047
#include <qtimer.h>
00048
00049
#include <kapplication.h>
00050
#include <kconfig.h>
00051
#include <kglobal.h>
00052
#include <kglobalsettings.h>
00053
#include <kiconloader.h>
00054
#include <klistbox.h>
00055
#include <klocale.h>
00056
#include <kmessagebox.h>
00057
#include <kseparator.h>
00058
#include <kpalette.h>
00059
#include <kimageeffect.h>
00060
00061
#include "kcolordialog.h"
00062
#include "kcolordrag.h"
00063
#include "kstaticdeleter.h"
00064
#include <config.h>
00065
#include <kdebug.h>
00066
00067
#include "config.h"
00068
#if defined Q_WS_X11 && ! defined K_WS_QTONLY
00069
#include <X11/Xlib.h>
00070
00071
00072
typedef int (*QX11EventFilter) (XEvent*);
00073
extern QX11EventFilter qt_set_x11_event_filter (QX11EventFilter filter);
00074
#endif
00075
00076
static const char *
const recentColors =
"Recent_Colors";
00077
static const char *
const customColors =
"Custom_Colors";
00078
00079
class KColorSpinBox :
public QSpinBox
00080 {
00081
public:
00082 KColorSpinBox(
int minValue,
int maxValue,
int step,
QWidget* parent)
00083 :
QSpinBox(minValue, maxValue, step, parent, "kcolorspinbox")
00084 { }
00085
00086
00087
virtual void valueChange()
00088 {
00089 updateDisplay();
00090 emit valueChanged( value() );
00091 emit valueChanged( currentValueText() );
00092 }
00093
00094 };
00095
00096
00097
#define STANDARD_PAL_SIZE 17
00098
00099 KColor::KColor()
00100 :
QColor()
00101 {
00102 r = 0; g = 0; b = 0; h = 0; s = 0; v = 0;
00103 }
00104
00105 KColor::KColor(
const KColor &col)
00106 :
QColor( col )
00107 {
00108 h = col.
h; s = col.
s; v = col.
v;
00109 r = col.
r; g = col.
g; b = col.
b;
00110 }
00111
00112 KColor::KColor(
const QColor &col)
00113 :
QColor( col )
00114 {
00115 QColor::rgb(&r, &g, &b);
00116 QColor::hsv(&h, &s, &v);
00117 }
00118
00119
bool KColor::operator==(
const KColor& col)
const
00120
{
00121
return (h == col.
h) && (s == col.
s) && (v == col.
v) &&
00122 (r == col.
r) && (g == col.
g) && (b == col.
b);
00123 }
00124
00125
KColor& KColor::operator=(
const KColor& col)
00126 {
00127 *(
QColor *)
this = col;
00128 h = col.
h; s = col.
s; v = col.
v;
00129 r = col.
r; g = col.
g; b = col.
b;
00130
return *
this;
00131 }
00132
00133
void
00134 KColor::setHsv(
int _h,
int _s,
int _v)
00135 {
00136 h = _h; s = _s; v = _v;
00137 QColor::setHsv(h, s, v);
00138 QColor::rgb(&r, &g, &b);
00139 }
00140
00141
void
00142 KColor::setRgb(
int _r,
int _g,
int _b)
00143 {
00144 r = _r; g = _g; b = _b;
00145 QColor::setRgb(r, g, b);
00146 QColor::hsv(&h, &s, &v);
00147 }
00148
00149
void
00150 KColor::rgb(
int *_r,
int *_g,
int *_b)
const
00151
{
00152 *_r = r; *_g = g; *_b = b;
00153 }
00154
00155
void
00156 KColor::hsv(
int *_h,
int *_s,
int *_v)
const
00157
{
00158 *_h = h; *_s = s; *_v = v;
00159 }
00160
00161
00162
static QColor *standardPalette = 0;
00163
static KStaticDeleter<QColor> spd;
00164
00165
static void createStandardPalette()
00166 {
00167
if ( standardPalette )
00168
return;
00169
00170 spd.setObject(standardPalette,
new QColor [STANDARD_PAL_SIZE],
true);
00171
00172
int i = 0;
00173
00174 standardPalette[i++] = Qt::red;
00175 standardPalette[i++] = Qt::green;
00176 standardPalette[i++] = Qt::blue;
00177 standardPalette[i++] = Qt::cyan;
00178 standardPalette[i++] = Qt::magenta;
00179 standardPalette[i++] = Qt::yellow;
00180 standardPalette[i++] = Qt::darkRed;
00181 standardPalette[i++] = Qt::darkGreen;
00182 standardPalette[i++] = Qt::darkBlue;
00183 standardPalette[i++] = Qt::darkCyan;
00184 standardPalette[i++] = Qt::darkMagenta;
00185 standardPalette[i++] = Qt::darkYellow;
00186 standardPalette[i++] = Qt::white;
00187 standardPalette[i++] = Qt::lightGray;
00188 standardPalette[i++] = Qt::gray;
00189 standardPalette[i++] = Qt::darkGray;
00190 standardPalette[i++] = Qt::black;
00191 }
00192
00193
00194 KHSSelector::KHSSelector(
QWidget *parent,
const char *name )
00195 :
KXYSelector( parent, name )
00196 {
00197 setRange( 0, 0, 359, 255 );
00198 }
00199
00200
void KHSSelector::updateContents()
00201 {
00202 drawPalette(&pixmap);
00203 }
00204
00205
void KHSSelector::resizeEvent(
QResizeEvent * )
00206 {
00207 updateContents();
00208 }
00209
00210 void KHSSelector::drawContents(
QPainter *painter )
00211 {
00212 painter->drawPixmap(
contentsRect().x(),
contentsRect().y(), pixmap );
00213 }
00214
00215 void KHSSelector::drawPalette(
QPixmap *pixmap )
00216 {
00217
int xSize =
contentsRect().width(), ySize =
contentsRect().height();
00218
QImage image( xSize, ySize, 32 );
00219
QColor col;
00220
int h, s;
00221 uint *p;
00222
00223
for ( s = ySize-1; s >= 0; s-- )
00224 {
00225 p = (uint *) image.scanLine( ySize - s - 1 );
00226
for( h = 0; h < xSize; h++ )
00227 {
00228 col.setHsv( 359*h/(xSize-1), 255*s/(ySize-1), 192 );
00229 *p = col.rgb();
00230 p++;
00231 }
00232 }
00233
00234
if ( QColor::numBitPlanes() <= 8 )
00235 {
00236 createStandardPalette();
00237 KImageEffect::dither( image, standardPalette, STANDARD_PAL_SIZE );
00238 }
00239 pixmap->convertFromImage( image );
00240 }
00241
00242
00243
00244
00245 KValueSelector::KValueSelector(
QWidget *parent,
const char *name )
00246 :
KSelector(
KSelector::Vertical, parent, name ), _hue(0), _sat(0)
00247 {
00248 setRange( 0, 255 );
00249 pixmap.
setOptimization( QPixmap::BestOptim );
00250 }
00251
00252 KValueSelector::KValueSelector(Orientation o,
QWidget *parent,
const char *name
00253 )
00254 :
KSelector( o, parent, name), _hue(0), _sat(0)
00255 {
00256 setRange( 0, 255 );
00257 pixmap.
setOptimization( QPixmap::BestOptim );
00258 }
00259
00260
void KValueSelector::updateContents()
00261 {
00262 drawPalette(&pixmap);
00263 }
00264
00265
void KValueSelector::resizeEvent(
QResizeEvent * )
00266 {
00267 updateContents();
00268 }
00269
00270 void KValueSelector::drawContents(
QPainter *painter )
00271 {
00272 painter->drawPixmap(
contentsRect().x(),
contentsRect().y(), pixmap );
00273 }
00274
00275 void KValueSelector::drawPalette(
QPixmap *pixmap )
00276 {
00277
int xSize =
contentsRect().width(), ySize =
contentsRect().height();
00278
QImage image( xSize, ySize, 32 );
00279
QColor col;
00280 uint *p;
00281 QRgb rgb;
00282
00283
if (
orientation() == KSelector::Horizontal )
00284 {
00285
for (
int v = 0; v < ySize; v++ )
00286 {
00287 p = (uint *) image.scanLine( ySize - v - 1 );
00288
00289
for(
int x = 0; x < xSize; x++ )
00290 {
00291 col.setHsv( _hue, _sat, 255*x/(xSize-1) );
00292 rgb = col.rgb();
00293 *p++ = rgb;
00294 }
00295 }
00296 }
00297
00298
if(
orientation() == KSelector::Vertical )
00299 {
00300
for (
int v = 0; v < ySize; v++ )
00301 {
00302 p = (uint *) image.scanLine( ySize - v - 1 );
00303 col.setHsv( _hue, _sat, 255*v/(ySize-1) );
00304 rgb = col.rgb();
00305
for (
int i = 0; i < xSize; i++ )
00306 *p++ = rgb;
00307 }
00308 }
00309
00310
if ( QColor::numBitPlanes() <= 8 )
00311 {
00312 createStandardPalette();
00313 KImageEffect::dither( image, standardPalette, STANDARD_PAL_SIZE );
00314 }
00315 pixmap->convertFromImage( image );
00316 }
00317
00318
00319
00320 KColorCells::KColorCells(
QWidget *parent,
int rows,
int cols )
00321 :
QGridView( parent )
00322 {
00323 shade =
true;
00324 setNumRows( rows );
00325 setNumCols( cols );
00326 colors =
new QColor [ rows * cols ];
00327
00328
for (
int i = 0; i < rows * cols; i++ )
00329 colors[i] = QColor();
00330
00331 selected = 0;
00332 inMouse =
false;
00333
00334
00335 setAcceptDrops(
true);
00336
00337 setHScrollBarMode( AlwaysOff );
00338 setVScrollBarMode( AlwaysOff );
00339 viewport()->setBackgroundMode( PaletteBackground );
00340 setBackgroundMode( PaletteBackground );
00341 }
00342
00343 KColorCells::~KColorCells()
00344 {
00345
delete [] colors;
00346 }
00347
00348
void KColorCells::setColor(
int colNum,
const QColor &col )
00349 {
00350 colors[colNum] = col;
00351 updateCell( colNum/numCols(), colNum%numCols() );
00352 }
00353
00354
void KColorCells::paintCell(
QPainter *painter,
int row,
int col )
00355 {
00356
QBrush brush;
00357
int w = 1;
00358
00359
if (shade)
00360 {
00361 qDrawShadePanel( painter, 1, 1, cellWidth()-2,
00362 cellHeight()-2, colorGroup(),
true, 1, &brush );
00363 w = 2;
00364 }
00365
QColor color = colors[ row * numCols() + col ];
00366
if (!color.isValid())
00367 {
00368
if (!shade)
return;
00369 color = backgroundColor();
00370 }
00371
00372 painter->setPen( color );
00373 painter->setBrush(
QBrush( color ) );
00374 painter->drawRect( w, w, cellWidth()-w*2, cellHeight()-w*2 );
00375
00376
if ( row * numCols() + col == selected )
00377 painter->drawWinFocusRect( w, w, cellWidth()-w*2, cellHeight()-w*2 );
00378 }
00379
00380
void KColorCells::resizeEvent(
QResizeEvent * )
00381 {
00382 setCellWidth( width() / numCols() );
00383 setCellHeight( height() / numRows() );
00384 }
00385
00386
void KColorCells::mousePressEvent(
QMouseEvent *e )
00387 {
00388 inMouse =
true;
00389 mPos = e->pos();
00390 }
00391
00392
int KColorCells::posToCell(
const QPoint &pos,
bool ignoreBorders)
00393 {
00394
int row = pos.y() / cellHeight();
00395
int col = pos.x() / cellWidth();
00396
int cell = row * numCols() + col;
00397
00398
if (!ignoreBorders)
00399 {
00400
int border = 2;
00401
int x = pos.x() - col * cellWidth();
00402
int y = pos.y() - row * cellHeight();
00403
if ( (x < border) || (x > cellWidth()-border) ||
00404 (y < border) || (y > cellHeight()-border))
00405
return -1;
00406 }
00407
return cell;
00408 }
00409
00410
void KColorCells::mouseMoveEvent(
QMouseEvent *e )
00411 {
00412
if( !(e->state() && LeftButton))
return;
00413
00414
if(inMouse) {
00415
int delay =
KGlobalSettings::dndEventDelay();
00416
if(e->x() > mPos.x()+delay || e->x() < mPos.x()-delay ||
00417 e->y() > mPos.y()+delay || e->y() < mPos.y()-delay){
00418
00419
int cell = posToCell(mPos);
00420
if ((cell != -1) && colors[cell].isValid())
00421 {
00422
KColorDrag *d =
new KColorDrag( colors[cell],
this);
00423 d->dragCopy();
00424 }
00425 }
00426 }
00427 }
00428
00429
void KColorCells::dragEnterEvent(
QDragEnterEvent *event)
00430 {
00431
event->accept( acceptDrags && KColorDrag::canDecode( event));
00432 }
00433
00434
void KColorCells::dropEvent(
QDropEvent *event)
00435 {
00436
QColor c;
00437
if(
KColorDrag::decode( event, c)) {
00438
int cell = posToCell(
event->pos(),
true);
00439 setColor(cell,c);
00440 }
00441 }
00442
00443
void KColorCells::mouseReleaseEvent(
QMouseEvent *e )
00444 {
00445
int cell = posToCell(mPos);
00446
int currentCell = posToCell(e->pos());
00447
00448
00449
00450
if (currentCell != cell)
00451 cell = -1;
00452
00453
if ( (cell != -1) && (selected != cell) )
00454 {
00455
int prevSel = selected;
00456 selected = cell;
00457 updateCell( prevSel/numCols(), prevSel%numCols() );
00458 updateCell( cell/numCols(), cell%numCols() );
00459 }
00460
00461 inMouse =
false;
00462
if (cell != -1)
00463 emit colorSelected( cell );
00464 }
00465
00466
void KColorCells::mouseDoubleClickEvent(
QMouseEvent * )
00467 {
00468
int cell = posToCell(mPos);
00469
00470
if (cell != -1)
00471 emit colorDoubleClicked( cell );
00472 }
00473
00474
00475
00476
00477 KColorPatch::KColorPatch(
QWidget *parent ) :
QFrame( parent )
00478 {
00479 setFrameStyle( QFrame::Panel | QFrame::Sunken );
00480 colContext = 0;
00481 setAcceptDrops(
true);
00482 }
00483
00484 KColorPatch::~KColorPatch()
00485 {
00486
if ( colContext )
00487 QColor::destroyAllocContext( colContext );
00488 }
00489
00490
void KColorPatch::setColor(
const QColor &col )
00491 {
00492
if ( colContext )
00493 QColor::destroyAllocContext( colContext );
00494 colContext = QColor::enterAllocContext();
00495 color.setRgb( col.rgb() );
00496 color.alloc();
00497 QColor::leaveAllocContext();
00498
00499
QPainter painter;
00500
00501 painter.begin(
this );
00502 drawContents( &painter );
00503 painter.end();
00504 }
00505
00506
void KColorPatch::drawContents(
QPainter *painter )
00507 {
00508 painter->setPen( color );
00509 painter->setBrush(
QBrush( color ) );
00510 painter->drawRect( contentsRect() );
00511 }
00512
00513
void KColorPatch::mouseMoveEvent(
QMouseEvent *e )
00514 {
00515
00516
if( !(e->state() && LeftButton))
return;
00517
KColorDrag *d =
new KColorDrag( color,
this);
00518 d->dragCopy();
00519 }
00520
00521
void KColorPatch::dragEnterEvent(
QDragEnterEvent *event)
00522 {
00523
event->accept( KColorDrag::canDecode( event));
00524 }
00525
00526
void KColorPatch::dropEvent(
QDropEvent *event)
00527 {
00528
QColor c;
00529
if(
KColorDrag::decode( event, c)) {
00530 setColor( c);
00531 emit colorChanged( c);
00532 }
00533 }
00534
00535
class KPaletteTable::KPaletteTablePrivate
00536 {
00537
public:
00538
QMap<QString,QColor> m_namedColorMap;
00539 };
00540
00541 KPaletteTable::KPaletteTable(
QWidget *parent,
int minWidth,
int cols)
00542 :
QWidget( parent ), mMinWidth(minWidth), mCols(cols)
00543 {
00544 d =
new KPaletteTablePrivate;
00545
00546 cells = 0;
00547 mPalette = 0;
00548 i18n_customColors = i18n(
"* Custom Colors *");
00549 i18n_recentColors = i18n(
"* Recent Colors *");
00550 i18n_namedColors = i18n(
"Named Colors");
00551
00552
QStringList paletteList =
KPalette::getPaletteList();
00553 paletteList.remove(customColors);
00554 paletteList.remove(recentColors);
00555 paletteList.prepend(i18n_customColors);
00556 paletteList.prepend(i18n_recentColors);
00557 paletteList.append( i18n_namedColors );
00558
00559
QVBoxLayout *layout =
new QVBoxLayout(
this );
00560
00561 combo =
new QComboBox(
false,
this );
00562 combo->insertStringList( paletteList );
00563 layout->addWidget(combo);
00564
00565 sv =
new QScrollView(
this );
00566
QSize cellSize =
QSize( mMinWidth, 120);
00567 sv->setHScrollBarMode( QScrollView::AlwaysOff);
00568 sv->setVScrollBarMode( QScrollView::AlwaysOn);
00569 QSize minSize = QSize(sv->verticalScrollBar()->width(), 0);
00570 minSize += QSize(sv->frameWidth(), 0);
00571 minSize += QSize(cellSize);
00572 sv->setFixedSize(minSize);
00573 layout->addWidget(sv);
00574
00575 mNamedColorList =
new KListBox(
this,
"namedColorList", 0 );
00576 mNamedColorList->setFixedSize(minSize);
00577 mNamedColorList->hide();
00578 layout->addWidget(mNamedColorList);
00579 connect( mNamedColorList, SIGNAL(highlighted(
const QString & )),
00580
this, SLOT( slotColorTextSelected(
const QString & )) );
00581
00582 setFixedSize( sizeHint());
00583 connect( combo, SIGNAL(activated(
const QString &)),
00584
this, SLOT(slotSetPalette(
const QString &)));
00585 }
00586
00587 KPaletteTable::~KPaletteTable()
00588 {
00589
delete mPalette;
00590
delete d;
00591 }
00592
00593
QString
00594 KPaletteTable::palette()
const
00595
{
00596
return combo->currentText();
00597 }
00598
00599
00600
static const char *
const *namedColorFilePath(
void )
00601 {
00602
00603
00604
00605
00606
static const char *
const path[] =
00607 {
00608
#ifdef X11_RGBFILE
00609
X11_RGBFILE,
00610
#endif
00611
"/usr/X11R6/lib/X11/rgb.txt",
00612
"/usr/openwin/lib/X11/rgb.txt",
00613 0
00614 };
00615
return( path );
00616 }
00617
00618
00619
00620
00621
void
00622 KPaletteTable::readNamedColor(
void )
00623 {
00624
if( mNamedColorList->count() != 0 )
00625 {
00626
return;
00627 }
00628
00629
KGlobal::locale()->
insertCatalogue(
"kdelibs_colors");
00630
00631
00632
00633
00634
00635
const char *
const *path = namedColorFilePath();
00636
for(
int i=0; path[i] != 0; i++ )
00637 {
00638
QFile paletteFile( path[i] );
00639
if( paletteFile.open( IO_ReadOnly ) ==
false )
00640 {
00641
continue;
00642 }
00643
00644
QString line;
00645
QStringList list;
00646
while( paletteFile.readLine( line, 100 ) != -1 )
00647 {
00648
int red, green, blue;
00649
int pos = 0;
00650
00651
if( sscanf(line.ascii(),
"%d %d %d%n", &red, &green, &blue, &pos ) == 3 )
00652 {
00653
00654
00655
00656
00657
QString name = line.mid(pos).stripWhiteSpace();
00658
if(
name.isNull() ==
true ||
name.find(
' ') != -1 ||
00659
name.find(
"gray" ) != -1 ||
name.find(
"grey" ) != -1 )
00660 {
00661
continue;
00662 }
00663
00664
const QColor color ( red, green, blue );
00665
if ( color.isValid() )
00666 {
00667
const QString colorName( i18n(
"color",
name.latin1() ) );
00668 list.append( colorName );
00669 d->m_namedColorMap[ colorName ] = color;
00670 }
00671 }
00672 }
00673
00674 list.sort();
00675 mNamedColorList->insertStringList( list );
00676
break;
00677 }
00678
00679
if( mNamedColorList->count() == 0 )
00680 {
00681
00682
00683
00684
00685
00686
00687
00688 QTimer::singleShot( 10,
this, SLOT(slotShowNamedColorReadError()) );
00689 }
00690 }
00691
00692
00693
void
00694 KPaletteTable::slotShowNamedColorReadError(
void )
00695 {
00696
if( mNamedColorList->count() == 0 )
00697 {
00698
QString msg = i18n(
""
00699
"Unable to read X11 RGB color strings. The following "
00700
"file location(s) were examined:\n");
00701
00702
const char *
const *path = namedColorFilePath();
00703
for(
int i=0; path[i] != 0; i++ )
00704 {
00705 msg += path[i];
00706 msg +=
"\n";
00707 }
00708
KMessageBox::sorry(
this, msg );
00709 }
00710 }
00711
00712
00713
00714
00715
00716
00717
00718
00719
00720
00721
00722
00723
void
00724 KPaletteTable::slotSetPalette(
const QString &_paletteName )
00725 {
00726 setPalette( _paletteName );
00727
if( mNamedColorList->isVisible() ==
true )
00728 {
00729
int item = mNamedColorList->currentItem();
00730 mNamedColorList->setCurrentItem( item < 0 ? 0 : item );
00731 slotColorTextSelected( mNamedColorList->currentText() );
00732 }
00733
else
00734 {
00735 slotColorCellSelected(0);
00736 }
00737 }
00738
00739
00740
void
00741 KPaletteTable::setPalette(
const QString &_paletteName )
00742 {
00743
QString paletteName( _paletteName);
00744
if (paletteName.isEmpty())
00745 paletteName = i18n_recentColors;
00746
00747
if (combo->currentText() != paletteName)
00748 {
00749
bool found =
false;
00750
for(
int i = 0; i < combo->count(); i++)
00751 {
00752
if (combo->text(i) == paletteName)
00753 {
00754 combo->setCurrentItem(i);
00755 found =
true;
00756
break;
00757 }
00758 }
00759
if (!found)
00760 {
00761 combo->insertItem(paletteName);
00762 combo->setCurrentItem(combo->count()-1);
00763 }
00764 }
00765
00766
if (paletteName == i18n_customColors)
00767 paletteName = customColors;
00768
else if (paletteName == i18n_recentColors)
00769 paletteName = recentColors;
00770
00771
00772
00773
00774
00775
00776
00777
00778
00779
00780
if( mPalette == 0 || mPalette->
name() != paletteName )
00781 {
00782
if( paletteName == i18n_namedColors )
00783 {
00784 sv->hide();
00785 mNamedColorList->show();
00786 readNamedColor();
00787
00788
delete cells; cells = 0;
00789
delete mPalette; mPalette = 0;
00790 }
00791
else
00792 {
00793 mNamedColorList->hide();
00794 sv->show();
00795
00796
delete cells;
00797
delete mPalette;
00798 mPalette =
new KPalette(paletteName);
00799
int rows = (mPalette->
nrColors()+mCols-1) / mCols;
00800
if (rows < 1) rows = 1;
00801 cells =
new KColorCells( sv->viewport(), rows, mCols);
00802 cells->
setShading(
false);
00803 cells->
setAcceptDrags(
false);
00804 QSize cellSize = QSize( mMinWidth, mMinWidth * rows / mCols);
00805 cells->setFixedSize( cellSize );
00806
for(
int i = 0; i < mPalette->
nrColors(); i++)
00807 {
00808 cells->
setColor( i, mPalette->
color(i) );
00809 }
00810 connect( cells, SIGNAL( colorSelected(
int ) ),
00811 SLOT( slotColorCellSelected(
int ) ) );
00812 connect( cells, SIGNAL( colorDoubleClicked(
int ) ),
00813 SLOT( slotColorCellDoubleClicked(
int ) ) );
00814 sv->addChild( cells );
00815 cells->show();
00816 sv->updateScrollBars();
00817 }
00818 }
00819 }
00820
00821
00822
00823
void
00824 KPaletteTable::slotColorCellSelected(
int col )
00825 {
00826
if (!mPalette || (col >= mPalette->
nrColors()))
00827
return;
00828 emit colorSelected( mPalette->
color(col), mPalette->
colorName(col) );
00829 }
00830
00831
void
00832 KPaletteTable::slotColorCellDoubleClicked(
int col )
00833 {
00834
if (!mPalette || (col >= mPalette->
nrColors()))
00835
return;
00836 emit colorDoubleClicked( mPalette->
color(col), mPalette->
colorName(col) );
00837 }
00838
00839
00840
void
00841 KPaletteTable::slotColorTextSelected(
const QString &colorText )
00842 {
00843 emit colorSelected( d->m_namedColorMap[ colorText ], colorText );
00844 }
00845
00846
00847
void
00848 KPaletteTable::addToCustomColors(
const QColor &color)
00849 {
00850 setPalette(i18n_customColors);
00851 mPalette->
addColor( color );
00852 mPalette->
save();
00853
delete mPalette;
00854 mPalette = 0;
00855 setPalette(i18n_customColors);
00856 }
00857
00858
void
00859 KPaletteTable::addToRecentColors(
const QColor &color)
00860 {
00861
00862
00863
00864
00865
bool recentIsSelected =
false;
00866
if ( mPalette != 0 && mPalette->
name() == recentColors)
00867 {
00868
delete mPalette;
00869 mPalette = 0;
00870 recentIsSelected =
true;
00871 }
00872 KPalette *recentPal =
new KPalette(recentColors);
00873
if (recentPal->
findColor(color) == -1)
00874 {
00875 recentPal->
addColor( color );
00876 recentPal->
save();
00877 }
00878
delete recentPal;
00879
if (recentIsSelected)
00880 setPalette(i18n_recentColors);
00881 }
00882
00883
class KColorDialog::KColorDialogPrivate {
00884
public:
00885
KPaletteTable *table;
00886
QString originalPalette;
00887
bool bRecursion;
00888
bool bEditRgb;
00889
bool bEditHsv;
00890
bool bEditHtml;
00891
bool bColorPicking;
00892
QLabel *colorName;
00893
QLineEdit *htmlName;
00894 KColorSpinBox *hedit;
00895 KColorSpinBox *sedit;
00896 KColorSpinBox *vedit;
00897 KColorSpinBox *redit;
00898 KColorSpinBox *gedit;
00899 KColorSpinBox *bedit;
00900
KColorPatch *patch;
00901
KHSSelector *hsSelector;
00902 KPalette *palette;
00903
KValueSelector *valuePal;
00904 QVBoxLayout* l_right;
00905
QGridLayout* tl_layout;
00906
QCheckBox *cbDefaultColor;
00907
KColor defaultColor;
00908
KColor selColor;
00909
#if defined Q_WS_X11 && ! defined K_WS_QTONLY
00910
QX11EventFilter oldfilter;
00911
#endif
00912
};
00913
00914
00915 KColorDialog::KColorDialog(
QWidget *parent,
const char *name,
bool modal )
00916 :
KDialogBase( parent, name, modal, i18n("Select Color"),
00917 modal ? Help|Ok|Cancel : Help|Close,
00918 Ok, true )
00919 {
00920 d =
new KColorDialogPrivate;
00921 d->bRecursion =
true;
00922 d->bColorPicking =
false;
00923
#if defined Q_WS_X11 && ! defined K_WS_QTONLY
00924
d->oldfilter = 0;
00925
#endif
00926
d->cbDefaultColor = 0L;
00927 setHelp( QString::fromLatin1(
"kcolordialog.html"), QString::null );
00928 connect(
this, SIGNAL(
okClicked(
void)),
this,SLOT(slotWriteSettings(
void)));
00929 connect(
this, SIGNAL(
closeClicked(
void)),
this,SLOT(slotWriteSettings(
void)));
00930
00931
QLabel *label;
00932
00933
00934
00935
00936
QWidget *page =
new QWidget(
this );
00937 setMainWidget( page );
00938
00939
QGridLayout *tl_layout =
new QGridLayout( page, 3, 3, 0,
spacingHint() );
00940 d->tl_layout = tl_layout;
00941 tl_layout->addColSpacing( 1,
spacingHint() * 2 );
00942
00943
00944
00945
00946
00947 QVBoxLayout *l_left =
new QVBoxLayout();
00948 tl_layout->addLayout(l_left, 0, 0);
00949
00950
00951
00952
00953
00954
QHBoxLayout *l_ltop =
new QHBoxLayout();
00955 l_left->addLayout(l_ltop);
00956
00957
00958 l_left->addSpacing(10);
00959
00960 QGridLayout *l_lbot =
new QGridLayout(3, 6);
00961 l_left->addLayout(l_lbot);
00962
00963
00964
00965
00966 d->hsSelector =
new KHSSelector( page );
00967 d->hsSelector->setMinimumSize(140, 70);
00968 l_ltop->addWidget(d->hsSelector, 8);
00969 connect( d->hsSelector, SIGNAL( valueChanged(
int,
int ) ),
00970 SLOT( slotHSChanged(
int,
int ) ) );
00971
00972 d->valuePal =
new KValueSelector( page );
00973 d->valuePal->setMinimumSize(26, 70);
00974 l_ltop->addWidget(d->valuePal, 1);
00975 connect( d->valuePal, SIGNAL( valueChanged(
int ) ),
00976 SLOT( slotVChanged(
int ) ) );
00977
00978
00979
00980
00981
00982 label =
new QLabel( i18n(
"H:"), page );
00983 label->setAlignment(AlignRight | AlignVCenter);
00984 l_lbot->addWidget(label, 0, 2);
00985 d->hedit =
new KColorSpinBox( 0, 359, 1, page );
00986 d->hedit->setValidator(
new QIntValidator( d->hedit ) );
00987 l_lbot->addWidget(d->hedit, 0, 3);
00988 connect( d->hedit, SIGNAL( valueChanged(
int) ),
00989 SLOT( slotHSVChanged() ) );
00990
00991 label =
new QLabel( i18n(
"S:"), page );
00992 label->setAlignment(AlignRight | AlignVCenter);
00993 l_lbot->addWidget(label, 1, 2);
00994 d->sedit =
new KColorSpinBox( 0, 255, 1, page );
00995 d->sedit->setValidator(
new QIntValidator( d->sedit ) );
00996 l_lbot->addWidget(d->sedit, 1, 3);
00997 connect( d->sedit, SIGNAL( valueChanged(
int) ),
00998 SLOT( slotHSVChanged() ) );
00999
01000 label =
new QLabel( i18n(
"V:"), page );
01001 label->setAlignment(AlignRight | AlignVCenter);
01002 l_lbot->addWidget(label, 2, 2);
01003 d->vedit =
new KColorSpinBox( 0, 255, 1, page );
01004 d->vedit->setValidator(
new QIntValidator( d->vedit ) );
01005 l_lbot->addWidget(d->vedit, 2, 3);
01006 connect( d->vedit, SIGNAL( valueChanged(
int) ),
01007 SLOT( slotHSVChanged() ) );
01008
01009
01010
01011
01012 label =
new QLabel( i18n(
"R:"), page );
01013 label->setAlignment(AlignRight | AlignVCenter);
01014 l_lbot->addWidget(label, 0, 4);
01015 d->redit =
new KColorSpinBox( 0, 255, 1, page );
01016 d->redit->setValidator(
new QIntValidator( d->redit ) );
01017 l_lbot->addWidget(d->redit, 0, 5);
01018 connect( d->redit, SIGNAL( valueChanged(
int) ),
01019 SLOT( slotRGBChanged() ) );
01020
01021 label =
new QLabel( i18n(
"G:"), page );
01022 label->setAlignment(AlignRight | AlignVCenter);
01023 l_lbot->addWidget( label, 1, 4);
01024 d->gedit =
new KColorSpinBox( 0, 255,1, page );
01025 d->gedit->setValidator(
new QIntValidator( d->gedit ) );
01026 l_lbot->addWidget(d->gedit, 1, 5);
01027 connect( d->gedit, SIGNAL( valueChanged(
int) ),
01028 SLOT( slotRGBChanged() ) );
01029
01030 label =
new QLabel( i18n(
"B:"), page );
01031 label->setAlignment(AlignRight | AlignVCenter);
01032 l_lbot->addWidget(label, 2, 4);
01033 d->bedit =
new KColorSpinBox( 0, 255, 1, page );
01034 d->bedit->setValidator(
new QIntValidator( d->bedit ) );
01035 l_lbot->addWidget(d->bedit, 2, 5);
01036 connect( d->bedit, SIGNAL( valueChanged(
int) ),
01037 SLOT( slotRGBChanged() ) );
01038
01039
01040
01041
01042
int w = d->hedit->fontMetrics().width(
"8888888");
01043 d->hedit->setFixedWidth(w);
01044 d->sedit->setFixedWidth(w);
01045 d->vedit->setFixedWidth(w);
01046
01047 d->redit->setFixedWidth(w);
01048 d->gedit->setFixedWidth(w);
01049 d->bedit->setFixedWidth(w);
01050
01051
01052
01053
01054 d->l_right =
new QVBoxLayout;
01055 tl_layout->addLayout(d->l_right, 0, 2);
01056
01057
01058
01059
01060 d->table =
new KPaletteTable( page );
01061 d->l_right->addWidget(d->table, 10);
01062
01063 connect( d->table, SIGNAL(
colorSelected(
const QColor &,
const QString & ) ),
01064 SLOT( slotColorSelected(
const QColor &,
const QString & ) ) );
01065
01066 connect(
01067 d->table,
01068 SIGNAL( colorDoubleClicked(
const QColor &,
const QString & ) ),
01069 SLOT( slotColorDoubleClicked(
const QColor &,
const QString & ) )
01070 );
01071
01072 d->originalPalette = d->table->palette();
01073
01074
01075
01076
01077 d->l_right->addSpacing(10);
01078
01079 QHBoxLayout *l_hbox =
new QHBoxLayout( d->l_right );
01080
01081
01082
01083
01084
QPushButton *button =
new QPushButton( page );
01085 button->setText(i18n(
"&Add to Custom Colors"));
01086 l_hbox->addWidget(button, 0, AlignLeft);
01087 connect( button, SIGNAL( clicked()), SLOT( slotAddToCustomColors()));
01088
01089
01090
01091
01092 button =
new QPushButton( page );
01093 button->setPixmap( BarIcon(
"colorpicker"));
01094 l_hbox->addWidget(button, 0, AlignHCenter );
01095 connect( button, SIGNAL( clicked()), SLOT( slotColorPicker()));
01096
01097
01098
01099
01100 d->l_right->addSpacing(10);
01101
01102
01103
01104
01105 QGridLayout *l_grid =
new QGridLayout( d->l_right, 2, 3);
01106
01107 l_grid->setColStretch(2, 1);
01108
01109 label =
new QLabel( page );
01110 label->setText(i18n(
"Name:"));
01111 l_grid->addWidget(label, 0, 1, AlignLeft);
01112
01113 d->colorName =
new QLabel( page );
01114 l_grid->addWidget(d->colorName, 0, 2, AlignLeft);
01115
01116 label =
new QLabel( page );
01117 label->setText(i18n(
"HTML:"));
01118 l_grid->addWidget(label, 1, 1, AlignLeft);
01119
01120 d->htmlName =
new QLineEdit( page );
01121 d->htmlName->setMaxLength( 7 );
01122 d->htmlName->setText(
"#FFFFFF");
01123 w = d->htmlName->fontMetrics().width(QString::fromLatin1(
"#DDDDDDD"));
01124 d->htmlName->setFixedWidth(w);
01125 l_grid->addWidget(d->htmlName, 1, 2, AlignLeft);
01126
01127 connect( d->htmlName, SIGNAL( textChanged(
const QString &) ),
01128 SLOT( slotHtmlChanged() ) );
01129
01130 d->patch =
new KColorPatch( page );
01131 d->patch->setFixedSize(48, 48);
01132 l_grid->addMultiCellWidget(d->patch, 0, 1, 0, 0, AlignHCenter | AlignVCenter);
01133 connect( d->patch, SIGNAL( colorChanged(
const QColor&)),
01134 SLOT(
setColor(
const QColor&)));
01135
01136 tl_layout->activate();
01137 page->setMinimumSize( page->sizeHint() );
01138
01139 readSettings();
01140 d->bRecursion =
false;
01141 d->bEditHsv =
false;
01142 d->bEditRgb =
false;
01143 d->bEditHtml =
false;
01144
01145
disableResize();
01146
KColor col;
01147 col.
setHsv( 0, 0, 255 );
01148 _setColor( col );
01149
01150 d->htmlName->installEventFilter(
this);
01151 d->hsSelector->installEventFilter(
this);
01152 d->hsSelector->setAcceptDrops(
true);
01153 }
01154
01155 KColorDialog::~KColorDialog()
01156 {
01157
#if defined Q_WS_X11 && ! defined K_WS_QTONLY
01158
if (d->bColorPicking)
01159 qt_set_x11_event_filter(d->oldfilter);
01160
#endif
01161
delete d;
01162 }
01163
01164
bool
01165 KColorDialog::eventFilter(
QObject *obj,
QEvent *ev )
01166 {
01167
if ((obj == d->htmlName) || (obj == d->hsSelector))
01168
switch(ev->type())
01169 {
01170
case QEvent::DragEnter:
01171
case QEvent::DragMove:
01172
case QEvent::DragLeave:
01173
case QEvent::Drop:
01174
case QEvent::DragResponse:
01175 qApp->sendEvent(d->patch, ev);
01176
return true;
01177
default:
01178
break;
01179 }
01180
return KDialogBase::eventFilter(obj, ev);
01181 }
01182
01183
void
01184 KColorDialog::setDefaultColor(
const QColor& col )
01185 {
01186
if ( !d->cbDefaultColor )
01187 {
01188
01189
01190
01191 d->l_right->addSpacing(10);
01192
01193
01194
01195
01196 d->cbDefaultColor =
new QCheckBox( i18n(
"Default color" ),
mainWidget() );
01197 d->cbDefaultColor->setChecked(
true);
01198
01199 d->l_right->addWidget( d->cbDefaultColor );
01200
01201
mainWidget()->setMaximumSize( QWIDGETSIZE_MAX, QWIDGETSIZE_MAX );
01202 d->tl_layout->activate();
01203
mainWidget()->setMinimumSize(
mainWidget()->sizeHint() );
01204
disableResize();
01205
01206 connect( d->cbDefaultColor, SIGNAL( clicked() ), SLOT( slotDefaultColorClicked() ) );
01207 }
01208
01209 d->defaultColor = col;
01210
01211 slotDefaultColorClicked();
01212 }
01213
01214 QColor KColorDialog::defaultColor()
const
01215
{
01216
return d->defaultColor;
01217 }
01218
01219
void KColorDialog::slotDefaultColorClicked()
01220 {
01221
if ( d->cbDefaultColor->isChecked() )
01222 {
01223 d->selColor = d->defaultColor;
01224 showColor( d->selColor, i18n(
"-default-" ) );
01225 }
else
01226 {
01227 showColor( d->selColor, QString::null );
01228 }
01229 }
01230
01231
void
01232 KColorDialog::readSettings()
01233 {
01234
KConfig* config =
KGlobal::config();
01235
01236
QString oldgroup = config->
group();
01237
01238 config->
setGroup(
"Colors");
01239
QString palette = config->
readEntry(
"CurrentPalette");
01240 d->table->setPalette(palette);
01241 config->
setGroup( oldgroup );
01242 }
01243
01244
void
01245 KColorDialog::slotWriteSettings()
01246 {
01247
KConfig* config =
KGlobal::config();
01248 config->
setGroup(
"Colors");
01249
QString palette = d->table->palette();
01250
if (!config->
hasDefault(
"CurrentPalette") &&
01251 (d->table->palette() == d->originalPalette))
01252 {
01253 config->
revertToDefault(
"CurrentPalette");
01254 }
01255
else
01256 {
01257 config->
writeEntry(
"CurrentPalette", d->table->palette());
01258 }
01259 }
01260
01261
QColor
01262 KColorDialog::color()
const
01263
{
01264
if ( d->cbDefaultColor && d->cbDefaultColor->isChecked() )
01265
return QColor();
01266
if ( d->selColor.isValid() )
01267 d->table->addToRecentColors( d->selColor );
01268
return d->selColor;
01269 }
01270
01271 void KColorDialog::setColor(
const QColor &col )
01272 {
01273 _setColor( col );
01274 }
01275
01276
01277
01278
01279 int KColorDialog::getColor(
QColor &theColor,
QWidget *parent )
01280 {
01281
KColorDialog dlg( parent,
"Color Selector",
true );
01282
if ( theColor.isValid() )
01283 dlg.
setColor( theColor );
01284
int result = dlg.exec();
01285
01286
if ( result == Accepted )
01287 {
01288 theColor = dlg.
color();
01289 }
01290
01291
return result;
01292 }
01293
01294
01295
01296
01297 int KColorDialog::getColor(
QColor &theColor,
const QColor& defaultCol,
QWidget *parent )
01298 {
01299
KColorDialog dlg( parent,
"Color Selector",
true );
01300 dlg.
setDefaultColor( defaultCol );
01301 dlg.
setColor( theColor );
01302
int result = dlg.exec();
01303
01304
if ( result == Accepted )
01305 theColor = dlg.
color();
01306
01307
return result;
01308 }
01309
01310
void KColorDialog::slotRGBChanged(
void )
01311 {
01312
if (d->bRecursion)
return;
01313
int red = d->redit->value();
01314
int grn = d->gedit->value();
01315
int blu = d->bedit->value();
01316
01317
if ( red > 255 || red < 0 )
return;
01318
if ( grn > 255 || grn < 0 )
return;
01319
if ( blu > 255 || blu < 0 )
return;
01320
01321
KColor col;
01322 col.
setRgb( red, grn, blu );
01323 d->bEditRgb =
true;
01324 _setColor( col );
01325 d->bEditRgb =
false;
01326 }
01327
01328
void KColorDialog::slotHtmlChanged(
void )
01329 {
01330
if (d->bRecursion || d->htmlName->text().isEmpty())
return;
01331
01332
unsigned int red = 256;
01333
unsigned int grn = 256;
01334
unsigned int blu = 256;
01335
01336
if (sscanf(d->htmlName->text().latin1(),
"#%02x%02x%02x", &red, &grn, &blu)!=3)
01337
return;
01338
01339
if ( red > 255 || grn > 255 || blu > 255)
return;
01340
01341
KColor col;
01342 col.
setRgb( red, grn, blu );
01343 d->bEditHtml =
true;
01344 _setColor( col );
01345 d->bEditHtml =
false;
01346 }
01347
01348
void KColorDialog::slotHSVChanged(
void )
01349 {
01350
if (d->bRecursion)
return;
01351
int hue = d->hedit->value();
01352
int sat = d->sedit->value();
01353
int val = d->vedit->value();
01354
01355
if ( hue > 359 || hue < 0 )
return;
01356
if ( sat > 255 || sat < 0 )
return;
01357
if ( val > 255 || val < 0 )
return;
01358
01359
KColor col;
01360 col.
setHsv( hue, sat, val );
01361 d->bEditHsv =
true;
01362 _setColor( col );
01363 d->bEditHsv =
false;
01364 }
01365
01366
void KColorDialog::slotHSChanged(
int h,
int s )
01367 {
01368
int _h, _s, v;
01369 d->selColor.hsv(&_h, &_s, &v);
01370
if (v < 1)
01371 v = 1;
01372
KColor col;
01373 col.
setHsv( h, s, v );
01374 _setColor( col );
01375 }
01376
01377
void KColorDialog::slotVChanged(
int v )
01378 {
01379
int h, s, _v;
01380 d->selColor.hsv(&h, &s, &_v);
01381
KColor col;
01382 col.
setHsv( h, s, v );
01383 _setColor( col );
01384 }
01385
01386
void KColorDialog::slotColorSelected(
const QColor &color )
01387 {
01388 _setColor( color );
01389 }
01390
01391
void KColorDialog::slotAddToCustomColors( )
01392 {
01393 d->table->addToCustomColors( d->selColor );
01394 }
01395
01396
void KColorDialog::slotColorSelected(
const QColor &color,
const QString &name )
01397 {
01398 _setColor( color, name);
01399 }
01400
01401
void KColorDialog::slotColorDoubleClicked
01402 (
01403
const QColor & color,
01404
const QString &
name
01405 )
01406 {
01407 _setColor(color, name);
01408 accept();
01409 }
01410
01411
void KColorDialog::_setColor(
const KColor &color,
const QString &name)
01412 {
01413
if (color.isValid())
01414 {
01415
if (d->cbDefaultColor && d->cbDefaultColor->isChecked())
01416 d->cbDefaultColor->setChecked(
false);
01417 d->selColor = color;
01418 }
01419
else
01420 {
01421
if (d->cbDefaultColor && d->cbDefaultColor->isChecked())
01422 d->cbDefaultColor->setChecked(
true);
01423 d->selColor = d->defaultColor;
01424 }
01425
01426 showColor( d->selColor, name );
01427
01428 emit
colorSelected( d->selColor );
01429 }
01430
01431
01432
void KColorDialog::showColor(
const KColor &color,
const QString &name )
01433 {
01434 d->bRecursion =
true;
01435
01436
if (
name.isEmpty())
01437 d->colorName->setText( i18n(
"-unnamed-"));
01438
else
01439 d->colorName->setText( name );
01440
01441 d->patch->setColor( color );
01442
01443 setRgbEdit( color );
01444 setHsvEdit( color );
01445 setHtmlEdit( color );
01446
01447
int h, s, v;
01448 color.
hsv( &h, &s, &v );
01449 d->hsSelector->setValues( h, s );
01450 d->valuePal->blockSignals(
true);
01451 d->valuePal->setHue( h );
01452 d->valuePal->setSaturation( s );
01453 d->valuePal->setValue( v );
01454 d->valuePal->updateContents();
01455 d->valuePal->blockSignals(
false);
01456 d->valuePal->repaint(
false );
01457 d->bRecursion =
false;
01458 }
01459
01460
01461
static QWidget *kde_color_dlg_widget = 0;
01462
01463
#if defined Q_WS_X11 && ! defined K_WS_QTONLY
01464
static int kde_color_dlg_handler(XEvent *event)
01465 {
01466
if (
event->type == ButtonRelease)
01467 {
01468
QMouseEvent e( QEvent::MouseButtonRelease,
QPoint(),
01469
QPoint(
event->xmotion.x_root,
event->xmotion.y_root) , 0, 0 );
01470 QApplication::sendEvent( kde_color_dlg_widget, &e );
01471
return true;
01472 }
01473
return false;
01474 }
01475
#endif
01476
void
01477 KColorDialog::slotColorPicker()
01478 {
01479 d->bColorPicking =
true;
01480
#if defined Q_WS_X11 && ! defined K_WS_QTONLY
01481
d->oldfilter = qt_set_x11_event_filter(kde_color_dlg_handler);
01482
#endif
01483
kde_color_dlg_widget =
this;
01484 grabMouse( crossCursor );
01485 grabKeyboard();
01486 }
01487
01488
void
01489 KColorDialog::mouseReleaseEvent(
QMouseEvent *e )
01490 {
01491
if (d->bColorPicking)
01492 {
01493 d->bColorPicking =
false;
01494
#if defined Q_WS_X11 && ! defined K_WS_QTONLY
01495
qt_set_x11_event_filter(d->oldfilter);
01496 d->oldfilter = 0;
01497
#endif
01498
releaseMouse();
01499 releaseKeyboard();
01500 _setColor(
grabColor( e->globalPos() ) );
01501
return;
01502 }
01503 KDialogBase::mouseReleaseEvent( e );
01504 }
01505
01506
QColor
01507 KColorDialog::grabColor(
const QPoint &p)
01508 {
01509
QWidget *desktop = QApplication::desktop();
01510
QPixmap pm = QPixmap::grabWindow( desktop->winId(), p.x(), p.y(), 1, 1);
01511
QImage i = pm.convertToImage();
01512
return i.pixel(0,0);
01513 }
01514
01515
void
01516 KColorDialog::keyPressEvent(
QKeyEvent *e )
01517 {
01518
if (d->bColorPicking)
01519 {
01520
if (e->key() == Key_Escape)
01521 {
01522 d->bColorPicking =
false;
01523
#if defined Q_WS_X11 && ! defined K_WS_QTONLY
01524
qt_set_x11_event_filter(d->oldfilter);
01525 d->oldfilter = 0;
01526
#endif
01527
releaseMouse();
01528 releaseKeyboard();
01529 }
01530 e->accept();
01531
return;
01532 }
01533 KDialogBase::keyPressEvent( e );
01534 }
01535
01536
void KColorDialog::setRgbEdit(
const KColor &col )
01537 {
01538
if (d->bEditRgb)
return;
01539
int r, g, b;
01540 col.
rgb( &r, &g, &b );
01541
01542 d->redit->setValue( r );
01543 d->gedit->setValue( g );
01544 d->bedit->setValue( b );
01545 }
01546
01547
void KColorDialog::setHtmlEdit(
const KColor &col )
01548 {
01549
if (d->bEditHtml)
return;
01550
int r, g, b;
01551 col.
rgb( &r, &g, &b );
01552
QString num;
01553
01554 num.sprintf(
"#%02X%02X%02X", r,g,b);
01555 d->htmlName->setText( num );
01556 }
01557
01558
01559
void KColorDialog::setHsvEdit(
const KColor &col )
01560 {
01561
if (d->bEditHsv)
return;
01562
int h, s, v;
01563 col.
hsv( &h, &s, &v );
01564
01565 d->hedit->setValue( h );
01566 d->sedit->setValue( s );
01567 d->vedit->setValue( v );
01568 }
01569
01570
void KHSSelector::virtual_hook(
int id,
void* data )
01571 { KXYSelector::virtual_hook(
id, data ); }
01572
01573
void KValueSelector::virtual_hook(
int id,
void* data )
01574 { KSelector::virtual_hook(
id, data ); }
01575
01576
void KPaletteTable::virtual_hook(
int,
void* )
01577 { }
01578
01579
void KColorCells::virtual_hook(
int,
void* )
01580 { }
01581
01582
void KColorPatch::virtual_hook(
int,
void* )
01583 { }
01584
01585
void KColorDialog::virtual_hook(
int id,
void* data )
01586 { KDialogBase::virtual_hook(
id, data ); }
01587
01588
01589
#include "kcolordialog.moc"
01590