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
00536 KPaletteTable::KPaletteTable(
QWidget *parent,
int minWidth,
int cols)
00537 :
QWidget( parent ), mMinWidth(minWidth), mCols(cols)
00538 {
00539 cells = 0;
00540 mPalette = 0;
00541 i18n_customColors = i18n(
"* Custom Colors *");
00542 i18n_recentColors = i18n(
"* Recent Colors *");
00543 i18n_namedColors = i18n(
"Named Colors");
00544
00545
QStringList paletteList =
KPalette::getPaletteList();
00546 paletteList.remove(customColors);
00547 paletteList.remove(recentColors);
00548 paletteList.prepend(i18n_customColors);
00549 paletteList.prepend(i18n_recentColors);
00550 paletteList.append( i18n_namedColors );
00551
00552
QVBoxLayout *
layout =
new QVBoxLayout(
this );
00553
00554 combo =
new QComboBox(
false,
this );
00555 combo->insertStringList( paletteList );
00556 layout->addWidget(combo);
00557
00558 sv =
new QScrollView(
this );
00559
QSize cellSize =
QSize( mMinWidth, 120);
00560 sv->setHScrollBarMode( QScrollView::AlwaysOff);
00561 sv->setVScrollBarMode( QScrollView::AlwaysOn);
00562
QSize minSize =
QSize(sv->verticalScrollBar()->width(), 0);
00563 minSize +=
QSize(sv->frameWidth(), 0);
00564 minSize +=
QSize(cellSize);
00565 sv->setFixedSize(minSize);
00566 layout->addWidget(sv);
00567
00568 mNamedColorList =
new KListBox(
this,
"namedColorList", 0 );
00569 mNamedColorList->setFixedSize(minSize);
00570 mNamedColorList->hide();
00571 layout->addWidget(mNamedColorList);
00572 connect( mNamedColorList, SIGNAL(highlighted(
const QString & )),
00573
this, SLOT( slotColorTextSelected(
const QString & )) );
00574
00575
setFixedSize(
sizeHint());
00576 connect( combo, SIGNAL(activated(
const QString &)),
00577
this, SLOT(slotSetPalette(
const QString &)));
00578 }
00579
00580 KPaletteTable::~KPaletteTable()
00581 {
00582
delete mPalette;
00583 }
00584
00585
QString
00586
KPaletteTable::palette()
const
00587
{
00588
return combo->
currentText();
00589 }
00590
00591
00592
static const char *
const *namedColorFilePath(
void )
00593 {
00594
00595
00596
00597
00598
static const char *
const path[] =
00599 {
00600
#ifdef X11_RGBFILE
00601
X11_RGBFILE,
00602
#endif
00603
"/usr/X11R6/lib/X11/rgb.txt",
00604
"/usr/openwin/lib/X11/rgb.txt",
00605 0
00606 };
00607
return( path );
00608 }
00609
00610
00611
00612
00613
void
00614 KPaletteTable::readNamedColor(
void )
00615 {
00616
if( mNamedColorList->
count() != 0 )
00617 {
00618
return;
00619 }
00620
00621
KGlobal::locale()->
insertCatalogue(
"kdelibs_colors");
00622
00623
00624
00625
00626
00627
const char *
const *path = namedColorFilePath();
00628
for(
int i=0; path[i] != 0; i++ )
00629 {
00630
QFile paletteFile( path[i] );
00631
if( paletteFile.open( IO_ReadOnly ) ==
false )
00632 {
00633
continue;
00634 }
00635
00636
QString line;
00637
QStringList list;
00638
while( paletteFile.readLine( line, 100 ) != -1 )
00639 {
00640
int red, green, blue;
00641
int pos = 0;
00642
00643
if( sscanf(line.
ascii(),
"%d %d %d%n", &red, &green, &blue, &pos ) == 3 )
00644 {
00645
00646
00647
00648
00649
QString name = line.
mid(pos).stripWhiteSpace();
00650
if(
name.
isNull() ==
true ||
name.
find(
' ') != -1 ||
00651
name.
find(
"gray" ) != -1 ||
name.
find(
"grey" ) != -1 )
00652 {
00653
continue;
00654 }
00655 list.append( i18n(
"color",
name.
latin1() ) );
00656 }
00657 }
00658
00659 list.
sort();
00660 mNamedColorList->
insertStringList( list );
00661
break;
00662 }
00663
00664
if( mNamedColorList->
count() == 0 )
00665 {
00666
00667
00668
00669
00670
00671
00672
00673
QTimer::singleShot( 10,
this, SLOT(slotShowNamedColorReadError()) );
00674 }
00675 }
00676
00677
00678
void
00679 KPaletteTable::slotShowNamedColorReadError(
void )
00680 {
00681
if( mNamedColorList->
count() == 0 )
00682 {
00683
QString msg = i18n(
""
00684
"Unable to read X11 RGB color strings. The following "
00685
"file location(s) were examined:\n");
00686
00687
const char *
const *path = namedColorFilePath();
00688
for(
int i=0; path[i] != 0; i++ )
00689 {
00690 msg += path[i];
00691 msg +=
"\n";
00692 }
00693
KMessageBox::sorry(
this, msg );
00694 }
00695 }
00696
00697
00698
00699
00700
00701
00702
00703
00704
00705
00706
00707
00708
void
00709 KPaletteTable::slotSetPalette(
const QString &_paletteName )
00710 {
00711
setPalette( _paletteName );
00712
if( mNamedColorList->isVisible() ==
true )
00713 {
00714
int item = mNamedColorList->
currentItem();
00715 mNamedColorList->
setCurrentItem( item < 0 ? 0 : item );
00716 slotColorTextSelected( mNamedColorList->
currentText() );
00717 }
00718
else
00719 {
00720 slotColorCellSelected(0);
00721 }
00722 }
00723
00724
00725
void
00726
KPaletteTable::setPalette(
const QString &_paletteName )
00727 {
00728
QString paletteName( _paletteName);
00729
if (paletteName.isEmpty())
00730 paletteName = i18n_recentColors;
00731
00732
if (combo->
currentText() != paletteName)
00733 {
00734
bool found =
false;
00735
for(
int i = 0; i < combo->
count(); i++)
00736 {
00737
if (combo->
text(i) == paletteName)
00738 {
00739 combo->
setCurrentItem(i);
00740 found =
true;
00741
break;
00742 }
00743 }
00744
if (!found)
00745 {
00746 combo->
insertItem(paletteName);
00747 combo->
setCurrentItem(combo->
count()-1);
00748 }
00749 }
00750
00751
if (paletteName == i18n_customColors)
00752 paletteName = customColors;
00753
else if (paletteName == i18n_recentColors)
00754 paletteName = recentColors;
00755
00756
00757
00758
00759
00760
00761
00762
00763
00764
00765
if( mPalette == 0 || mPalette->
name() != paletteName )
00766 {
00767
if( paletteName == i18n_namedColors )
00768 {
00769 sv->hide();
00770 mNamedColorList->show();
00771 readNamedColor();
00772
00773
delete cells; cells = 0;
00774
delete mPalette; mPalette = 0;
00775 }
00776
else
00777 {
00778 mNamedColorList->hide();
00779 sv->show();
00780
00781
delete cells;
00782
delete mPalette;
00783 mPalette =
new KPalette(paletteName);
00784
int rows = (mPalette->
nrColors()+mCols-1) / mCols;
00785
if (rows < 1) rows = 1;
00786 cells =
new KColorCells( sv->
viewport(), rows, mCols);
00787 cells->
setShading(
false);
00788 cells->
setAcceptDrags(
false);
00789
QSize cellSize =
QSize( mMinWidth, mMinWidth * rows / mCols);
00790 cells->setFixedSize( cellSize );
00791
for(
int i = 0; i < mPalette->
nrColors(); i++)
00792 {
00793 cells->
setColor( i, mPalette->
color(i) );
00794 }
00795 connect( cells, SIGNAL( colorSelected(
int ) ),
00796 SLOT( slotColorCellSelected(
int ) ) );
00797 connect( cells, SIGNAL( colorDoubleClicked(
int ) ),
00798 SLOT( slotColorCellDoubleClicked(
int ) ) );
00799 sv->
addChild( cells );
00800 cells->show();
00801 sv->
updateScrollBars();
00802 }
00803 }
00804 }
00805
00806
00807
00808
void
00809 KPaletteTable::slotColorCellSelected(
int col )
00810 {
00811
if (!mPalette || (col >= mPalette->
nrColors()))
00812
return;
00813 emit colorSelected( mPalette->
color(col), mPalette->
colorName(col) );
00814 }
00815
00816
void
00817 KPaletteTable::slotColorCellDoubleClicked(
int col )
00818 {
00819
if (!mPalette || (col >= mPalette->
nrColors()))
00820
return;
00821 emit colorDoubleClicked( mPalette->
color(col), mPalette->
colorName(col) );
00822 }
00823
00824
00825
void
00826 KPaletteTable::slotColorTextSelected(
const QString &colorText )
00827 {
00828 emit colorSelected(
QColor (colorText), colorText );
00829 }
00830
00831
00832
void
00833 KPaletteTable::addToCustomColors(
const QColor &color)
00834 {
00835
setPalette(i18n_customColors);
00836 mPalette->
addColor( color );
00837 mPalette->
save();
00838
delete mPalette;
00839 mPalette = 0;
00840
setPalette(i18n_customColors);
00841 }
00842
00843
void
00844 KPaletteTable::addToRecentColors(
const QColor &color)
00845 {
00846
00847
00848
00849
00850
bool recentIsSelected =
false;
00851
if ( mPalette != 0 && mPalette->
name() == recentColors)
00852 {
00853
delete mPalette;
00854 mPalette = 0;
00855 recentIsSelected =
true;
00856 }
00857
KPalette *recentPal =
new KPalette(recentColors);
00858
if (recentPal->
findColor(color) == -1)
00859 {
00860 recentPal->
addColor( color );
00861 recentPal->
save();
00862 }
00863
delete recentPal;
00864
if (recentIsSelected)
00865
setPalette(i18n_recentColors);
00866 }
00867
00868
class KColorDialog::KColorDialogPrivate {
00869
public:
00870
KPaletteTable *table;
00871
QString originalPalette;
00872
bool bRecursion;
00873
bool bEditRgb;
00874
bool bEditHsv;
00875
bool bEditHtml;
00876
bool bColorPicking;
00877
QLabel *colorName;
00878
QLineEdit *htmlName;
00879 KColorSpinBox *hedit;
00880 KColorSpinBox *sedit;
00881 KColorSpinBox *vedit;
00882 KColorSpinBox *redit;
00883 KColorSpinBox *gedit;
00884 KColorSpinBox *bedit;
00885
KColorPatch *patch;
00886
KHSSelector *hsSelector;
00887
KPalette *palette;
00888
KValueSelector *valuePal;
00889
QVBoxLayout* l_right;
00890
QGridLayout* tl_layout;
00891
QCheckBox *cbDefaultColor;
00892
KColor defaultColor;
00893
KColor selColor;
00894
#if defined Q_WS_X11 && ! defined K_WS_QTONLY
00895
QX11EventFilter oldfilter;
00896
#endif
00897
};
00898
00899
00900 KColorDialog::KColorDialog(
QWidget *parent,
const char *name,
bool modal )
00901 :
KDialogBase( parent, name, modal, i18n(
"Select Color"),
00902 modal ? Help|Ok|Cancel : Help|Close,
00903 Ok, true )
00904 {
00905 d =
new KColorDialogPrivate;
00906 d->bRecursion =
true;
00907 d->bColorPicking =
false;
00908
#if defined Q_WS_X11 && ! defined K_WS_QTONLY
00909
d->oldfilter = 0;
00910
#endif
00911
d->cbDefaultColor = 0L;
00912
setHelp( QString::fromLatin1(
"kcolordialog.html"), QString::null );
00913 connect(
this, SIGNAL(
okClicked(
void)),
this,SLOT(slotWriteSettings(
void)));
00914 connect(
this, SIGNAL(
closeClicked(
void)),
this,SLOT(slotWriteSettings(
void)));
00915
00916
QLabel *label;
00917
00918
00919
00920
00921
QWidget *page =
new QWidget(
this );
00922
setMainWidget( page );
00923
00924
QGridLayout *tl_layout =
new QGridLayout( page, 3, 3, 0,
spacingHint() );
00925 d->tl_layout = tl_layout;
00926 tl_layout->addColSpacing( 1,
spacingHint() * 2 );
00927
00928
00929
00930
00931
00932
QVBoxLayout *l_left =
new QVBoxLayout();
00933 tl_layout->
addLayout(l_left, 0, 0);
00934
00935
00936
00937
00938
00939
QHBoxLayout *l_ltop =
new QHBoxLayout();
00940 l_left->addLayout(l_ltop);
00941
00942
00943 l_left->addSpacing(10);
00944
00945 QGridLayout *l_lbot =
new QGridLayout(3, 6);
00946 l_left->addLayout(l_lbot);
00947
00948
00949
00950
00951 d->hsSelector =
new KHSSelector( page );
00952 d->hsSelector->setMinimumSize(140, 70);
00953 l_ltop->addWidget(d->hsSelector, 8);
00954 connect( d->hsSelector, SIGNAL( valueChanged(
int,
int ) ),
00955 SLOT( slotHSChanged(
int,
int ) ) );
00956
00957 d->valuePal =
new KValueSelector( page );
00958 d->valuePal->setMinimumSize(26, 70);
00959 l_ltop->addWidget(d->valuePal, 1);
00960 connect( d->valuePal, SIGNAL( valueChanged(
int ) ),
00961 SLOT( slotVChanged(
int ) ) );
00962
00963
00964
00965
00966
00967 label =
new QLabel( i18n(
"H:"), page );
00968 label->setAlignment(AlignRight | AlignVCenter);
00969 l_lbot->
addWidget(label, 0, 2);
00970 d->hedit =
new KColorSpinBox( 0, 359, 1, page );
00971 d->hedit->setValidator(
new QIntValidator( d->hedit ) );
00972 l_lbot->
addWidget(d->hedit, 0, 3);
00973 connect( d->hedit, SIGNAL( valueChanged(
int) ),
00974 SLOT( slotHSVChanged() ) );
00975
00976 label =
new QLabel( i18n(
"S:"), page );
00977 label->setAlignment(AlignRight | AlignVCenter);
00978 l_lbot->
addWidget(label, 1, 2);
00979 d->sedit =
new KColorSpinBox( 0, 255, 1, page );
00980 d->sedit->setValidator(
new QIntValidator( d->sedit ) );
00981 l_lbot->
addWidget(d->sedit, 1, 3);
00982 connect( d->sedit, SIGNAL( valueChanged(
int) ),
00983 SLOT( slotHSVChanged() ) );
00984
00985 label =
new QLabel( i18n(
"V:"), page );
00986 label->setAlignment(AlignRight | AlignVCenter);
00987 l_lbot->
addWidget(label, 2, 2);
00988 d->vedit =
new KColorSpinBox( 0, 255, 1, page );
00989 d->vedit->setValidator(
new QIntValidator( d->vedit ) );
00990 l_lbot->
addWidget(d->vedit, 2, 3);
00991 connect( d->vedit, SIGNAL( valueChanged(
int) ),
00992 SLOT( slotHSVChanged() ) );
00993
00994
00995
00996
00997 label =
new QLabel( i18n(
"R:"), page );
00998 label->setAlignment(AlignRight | AlignVCenter);
00999 l_lbot->
addWidget(label, 0, 4);
01000 d->redit =
new KColorSpinBox( 0, 255, 1, page );
01001 d->redit->setValidator(
new QIntValidator( d->redit ) );
01002 l_lbot->
addWidget(d->redit, 0, 5);
01003 connect( d->redit, SIGNAL( valueChanged(
int) ),
01004 SLOT( slotRGBChanged() ) );
01005
01006 label =
new QLabel( i18n(
"G:"), page );
01007 label->setAlignment(AlignRight | AlignVCenter);
01008 l_lbot->
addWidget( label, 1, 4);
01009 d->gedit =
new KColorSpinBox( 0, 255,1, page );
01010 d->gedit->setValidator(
new QIntValidator( d->gedit ) );
01011 l_lbot->
addWidget(d->gedit, 1, 5);
01012 connect( d->gedit, SIGNAL( valueChanged(
int) ),
01013 SLOT( slotRGBChanged() ) );
01014
01015 label =
new QLabel( i18n(
"B:"), page );
01016 label->setAlignment(AlignRight | AlignVCenter);
01017 l_lbot->
addWidget(label, 2, 4);
01018 d->bedit =
new KColorSpinBox( 0, 255, 1, page );
01019 d->bedit->setValidator(
new QIntValidator( d->bedit ) );
01020 l_lbot->
addWidget(d->bedit, 2, 5);
01021 connect( d->bedit, SIGNAL( valueChanged(
int) ),
01022 SLOT( slotRGBChanged() ) );
01023
01024
01025
01026
01027
int w = d->hedit->fontMetrics().width(
"8888888");
01028 d->hedit->setFixedWidth(w);
01029 d->sedit->setFixedWidth(w);
01030 d->vedit->setFixedWidth(w);
01031
01032 d->redit->setFixedWidth(w);
01033 d->gedit->setFixedWidth(w);
01034 d->bedit->setFixedWidth(w);
01035
01036
01037
01038
01039 d->l_right =
new QVBoxLayout;
01040 tl_layout->
addLayout(d->l_right, 0, 2);
01041
01042
01043
01044
01045 d->table =
new KPaletteTable( page );
01046 d->l_right->addWidget(d->table, 10);
01047
01048 connect( d->table, SIGNAL(
colorSelected(
const QColor &,
const QString & ) ),
01049 SLOT( slotColorSelected(
const QColor &,
const QString & ) ) );
01050
01051 connect(
01052 d->table,
01053 SIGNAL( colorDoubleClicked(
const QColor &,
const QString & ) ),
01054 SLOT( slotColorDoubleClicked(
const QColor &,
const QString & ) )
01055 );
01056
01057 d->originalPalette = d->table->palette();
01058
01059
01060
01061
01062 d->l_right->addSpacing(10);
01063
01064 QHBoxLayout *l_hbox =
new QHBoxLayout( d->l_right );
01065
01066
01067
01068
01069
QPushButton *button =
new QPushButton( page );
01070 button->
setText(i18n(
"&Add to Custom Colors"));
01071 l_hbox->addWidget(button, 0, AlignLeft);
01072 connect( button, SIGNAL( clicked()), SLOT( slotAddToCustomColors()));
01073
01074
01075
01076
01077 button =
new QPushButton( page );
01078 button->
setPixmap( BarIcon(
"colorpicker"));
01079 l_hbox->addWidget(button, 0, AlignHCenter );
01080 connect( button, SIGNAL( clicked()), SLOT( slotColorPicker()));
01081
01082
01083
01084
01085 d->l_right->addSpacing(10);
01086
01087
01088
01089
01090 QGridLayout *l_grid =
new QGridLayout( d->l_right, 2, 3);
01091
01092 l_grid->
setColStretch(2, 1);
01093
01094 label =
new QLabel( page );
01095 label->setText(i18n(
"Name:"));
01096 l_grid->
addWidget(label, 0, 1, AlignLeft);
01097
01098 d->colorName =
new QLabel( page );
01099 l_grid->
addWidget(d->colorName, 0, 2, AlignLeft);
01100
01101 label =
new QLabel( page );
01102 label->setText(i18n(
"HTML:"));
01103 l_grid->
addWidget(label, 1, 1, AlignLeft);
01104
01105 d->htmlName =
new QLineEdit( page );
01106 d->htmlName->setMaxLength( 7 );
01107 d->htmlName->setText(
"#FFFFFF");
01108 w = d->htmlName->fontMetrics().width(QString::fromLatin1(
"#DDDDDDD"));
01109 d->htmlName->setFixedWidth(w);
01110 l_grid->
addWidget(d->htmlName, 1, 2, AlignLeft);
01111
01112 connect( d->htmlName, SIGNAL( textChanged(
const QString &) ),
01113 SLOT( slotHtmlChanged() ) );
01114
01115 d->patch =
new KColorPatch( page );
01116 d->patch->setFixedSize(48, 48);
01117 l_grid->
addMultiCellWidget(d->patch, 0, 1, 0, 0, AlignHCenter | AlignVCenter);
01118 connect( d->patch, SIGNAL( colorChanged(
const QColor&)),
01119 SLOT(
setColor(
const QColor&)));
01120
01121 tl_layout->activate();
01122 page->
setMinimumSize( page->
sizeHint() );
01123
01124 readSettings();
01125 d->bRecursion =
false;
01126 d->bEditHsv =
false;
01127 d->bEditRgb =
false;
01128 d->bEditHtml =
false;
01129
01130
disableResize();
01131
KColor col;
01132 col.
setHsv( 0, 0, 255 );
01133 _setColor( col );
01134
01135 d->htmlName->installEventFilter(
this);
01136 d->hsSelector->installEventFilter(
this);
01137 d->hsSelector->setAcceptDrops(
true);
01138 }
01139
01140 KColorDialog::~KColorDialog()
01141 {
01142
#if defined Q_WS_X11 && ! defined K_WS_QTONLY
01143
if (d->bColorPicking)
01144 qt_set_x11_event_filter(d->oldfilter);
01145
#endif
01146
delete d;
01147 }
01148
01149
bool
01150 KColorDialog::eventFilter(
QObject *obj,
QEvent *ev )
01151 {
01152
if ((obj == d->htmlName) || (obj == d->hsSelector))
01153
switch(ev->
type())
01154 {
01155
case QEvent::DragEnter:
01156
case QEvent::DragMove:
01157
case QEvent::DragLeave:
01158
case QEvent::Drop:
01159
case QEvent::DragResponse:
01160 qApp->sendEvent(d->patch, ev);
01161
return true;
01162
default:
01163
break;
01164 }
01165
return KDialogBase::eventFilter(obj, ev);
01166 }
01167
01168
void
01169 KColorDialog::setDefaultColor(
const QColor& col )
01170 {
01171
if ( !d->cbDefaultColor )
01172 {
01173
01174
01175
01176 d->l_right->addSpacing(10);
01177
01178
01179
01180
01181 d->cbDefaultColor =
new QCheckBox( i18n(
"Default color" ),
mainWidget() );
01182 d->cbDefaultColor->setChecked(
true);
01183
01184 d->l_right->addWidget( d->cbDefaultColor );
01185
01186
mainWidget()->
setMaximumSize( QWIDGETSIZE_MAX, QWIDGETSIZE_MAX );
01187 d->tl_layout->activate();
01188
mainWidget()->
setMinimumSize(
mainWidget()->sizeHint() );
01189
disableResize();
01190
01191 connect( d->cbDefaultColor, SIGNAL( clicked() ), SLOT( slotDefaultColorClicked() ) );
01192 }
01193
01194 d->defaultColor = col;
01195
01196 slotDefaultColorClicked();
01197 }
01198
01199 QColor KColorDialog::defaultColor()
const
01200
{
01201
return d->defaultColor;
01202 }
01203
01204
void KColorDialog::slotDefaultColorClicked()
01205 {
01206
if ( d->cbDefaultColor->isChecked() )
01207 {
01208 d->selColor = d->defaultColor;
01209 showColor( d->selColor, i18n(
"-default-" ) );
01210 }
else
01211 {
01212 showColor( d->selColor, QString::null );
01213 }
01214 }
01215
01216
void
01217 KColorDialog::readSettings()
01218 {
01219
KConfig* config =
KGlobal::config();
01220
01221
QString oldgroup = config->
group();
01222
01223 config->
setGroup(
"Colors");
01224
QString palette = config->
readEntry(
"CurrentPalette");
01225 d->table->setPalette(palette);
01226 config->
setGroup( oldgroup );
01227 }
01228
01229
void
01230 KColorDialog::slotWriteSettings()
01231 {
01232
KConfig* config =
KGlobal::config();
01233 config->
setGroup(
"Colors");
01234
QString palette = d->table->palette();
01235
if (!config->
hasDefault(
"CurrentPalette") &&
01236 (d->table->palette() == d->originalPalette))
01237 {
01238 config->
revertToDefault(
"CurrentPalette");
01239 }
01240
else
01241 {
01242 config->
writeEntry(
"CurrentPalette", d->table->palette());
01243 }
01244 }
01245
01246
QColor
01247 KColorDialog::color()
const
01248
{
01249
if ( d->cbDefaultColor && d->cbDefaultColor->isChecked() )
01250
return QColor();
01251
if ( d->selColor.isValid() )
01252 d->table->addToRecentColors( d->selColor );
01253
return d->selColor;
01254 }
01255
01256 void KColorDialog::setColor(
const QColor &col )
01257 {
01258 _setColor( col );
01259 }
01260
01261
01262
01263
01264 int KColorDialog::getColor(
QColor &theColor,
QWidget *parent )
01265 {
01266
KColorDialog dlg( parent,
"Color Selector",
true );
01267
if ( theColor.
isValid() )
01268 dlg.
setColor( theColor );
01269
int result = dlg.
exec();
01270
01271
if ( result == Accepted )
01272 {
01273 theColor = dlg.
color();
01274 }
01275
01276
return result;
01277 }
01278
01279
01280
01281
01282 int KColorDialog::getColor(
QColor &theColor,
const QColor& defaultCol,
QWidget *parent )
01283 {
01284
KColorDialog dlg( parent,
"Color Selector",
true );
01285 dlg.
setDefaultColor( defaultCol );
01286 dlg.
setColor( theColor );
01287
int result = dlg.
exec();
01288
01289
if ( result == Accepted )
01290 theColor = dlg.
color();
01291
01292
return result;
01293 }
01294
01295
void KColorDialog::slotRGBChanged(
void )
01296 {
01297
if (d->bRecursion)
return;
01298
int red = d->redit->value();
01299
int grn = d->gedit->value();
01300
int blu = d->bedit->value();
01301
01302
if ( red > 255 || red < 0 )
return;
01303
if ( grn > 255 || grn < 0 )
return;
01304
if ( blu > 255 || blu < 0 )
return;
01305
01306
KColor col;
01307 col.
setRgb( red, grn, blu );
01308 d->bEditRgb =
true;
01309 _setColor( col );
01310 d->bEditRgb =
false;
01311 }
01312
01313
void KColorDialog::slotHtmlChanged(
void )
01314 {
01315
if (d->bRecursion || d->htmlName->text().isEmpty())
return;
01316
01317
unsigned int red = 256;
01318
unsigned int grn = 256;
01319
unsigned int blu = 256;
01320
01321
if (sscanf(d->htmlName->text().latin1(),
"#%02x%02x%02x", &red, &grn, &blu)!=3)
01322
return;
01323
01324
if ( red > 255 || grn > 255 || blu > 255)
return;
01325
01326
KColor col;
01327 col.
setRgb( red, grn, blu );
01328 d->bEditHtml =
true;
01329 _setColor( col );
01330 d->bEditHtml =
false;
01331 }
01332
01333
void KColorDialog::slotHSVChanged(
void )
01334 {
01335
if (d->bRecursion)
return;
01336
int hue = d->hedit->value();
01337
int sat = d->sedit->value();
01338
int val = d->vedit->value();
01339
01340
if ( hue > 359 || hue < 0 )
return;
01341
if ( sat > 255 || sat < 0 )
return;
01342
if ( val > 255 || val < 0 )
return;
01343
01344
KColor col;
01345 col.
setHsv( hue, sat, val );
01346 d->bEditHsv =
true;
01347 _setColor( col );
01348 d->bEditHsv =
false;
01349 }
01350
01351
void KColorDialog::slotHSChanged(
int h,
int s )
01352 {
01353
int _h, _s, v;
01354 d->selColor.hsv(&_h, &_s, &v);
01355
if (v < 1)
01356 v = 1;
01357
KColor col;
01358 col.
setHsv( h, s, v );
01359 _setColor( col );
01360 }
01361
01362
void KColorDialog::slotVChanged(
int v )
01363 {
01364
int h, s, _v;
01365 d->selColor.hsv(&h, &s, &_v);
01366
KColor col;
01367 col.
setHsv( h, s, v );
01368 _setColor( col );
01369 }
01370
01371
void KColorDialog::slotColorSelected(
const QColor &color )
01372 {
01373 _setColor( color );
01374 }
01375
01376
void KColorDialog::slotAddToCustomColors( )
01377 {
01378 d->table->addToCustomColors( d->selColor );
01379 }
01380
01381
void KColorDialog::slotColorSelected(
const QColor &color,
const QString &name )
01382 {
01383 _setColor( color, name);
01384 }
01385
01386
void KColorDialog::slotColorDoubleClicked
01387 (
01388
const QColor & color,
01389
const QString &
name
01390 )
01391 {
01392 _setColor(color, name);
01393 accept();
01394 }
01395
01396
void KColorDialog::_setColor(
const KColor &color,
const QString &name)
01397 {
01398
if (color.
isValid())
01399 {
01400
if (d->cbDefaultColor && d->cbDefaultColor->isChecked())
01401 d->cbDefaultColor->setChecked(
false);
01402 d->selColor = color;
01403 }
01404
else
01405 {
01406
if (d->cbDefaultColor && d->cbDefaultColor->isChecked())
01407 d->cbDefaultColor->setChecked(
true);
01408 d->selColor = d->defaultColor;
01409 }
01410
01411 showColor( d->selColor, name );
01412
01413 emit
colorSelected( d->selColor );
01414 }
01415
01416
01417
void KColorDialog::showColor(
const KColor &color,
const QString &name )
01418 {
01419 d->bRecursion =
true;
01420
01421
if (
name.
isEmpty())
01422 d->colorName->setText( i18n(
"-unnamed-"));
01423
else
01424 d->colorName->setText( name );
01425
01426 d->patch->setColor( color );
01427
01428 setRgbEdit( color );
01429 setHsvEdit( color );
01430 setHtmlEdit( color );
01431
01432
int h, s, v;
01433 color.
hsv( &h, &s, &v );
01434 d->hsSelector->setValues( h, s );
01435 d->valuePal->blockSignals(
true);
01436 d->valuePal->setHue( h );
01437 d->valuePal->setSaturation( s );
01438 d->valuePal->setValue( v );
01439 d->valuePal->updateContents();
01440 d->valuePal->blockSignals(
false);
01441 d->valuePal->repaint(
false );
01442 d->bRecursion =
false;
01443 }
01444
01445
01446
static QWidget *kde_color_dlg_widget = 0;
01447
01448
#if defined Q_WS_X11 && ! defined K_WS_QTONLY
01449
static int kde_color_dlg_handler(XEvent *event)
01450 {
01451
if (
event->type == ButtonRelease)
01452 {
01453
QMouseEvent e( QEvent::MouseButtonRelease,
QPoint(),
01454
QPoint(
event->xmotion.x_root,
event->xmotion.y_root) , 0, 0 );
01455
QApplication::sendEvent( kde_color_dlg_widget, &e );
01456
return true;
01457 }
01458
return false;
01459 }
01460
#endif
01461
void
01462 KColorDialog::slotColorPicker()
01463 {
01464 d->bColorPicking =
true;
01465
#if defined Q_WS_X11 && ! defined K_WS_QTONLY
01466
d->oldfilter = qt_set_x11_event_filter(kde_color_dlg_handler);
01467
#endif
01468
kde_color_dlg_widget =
this;
01469 grabMouse( crossCursor );
01470 grabKeyboard();
01471 }
01472
01473
void
01474 KColorDialog::mouseReleaseEvent(
QMouseEvent *e )
01475 {
01476
if (d->bColorPicking)
01477 {
01478 d->bColorPicking =
false;
01479
#if defined Q_WS_X11 && ! defined K_WS_QTONLY
01480
qt_set_x11_event_filter(d->oldfilter);
01481 d->oldfilter = 0;
01482
#endif
01483
releaseMouse();
01484 releaseKeyboard();
01485 _setColor(
grabColor( e->
globalPos() ) );
01486
return;
01487 }
01488 KDialogBase::mouseReleaseEvent( e );
01489 }
01490
01491
QColor
01492 KColorDialog::grabColor(
const QPoint &p)
01493 {
01494
QWidget *desktop =
QApplication::desktop();
01495
QPixmap pm =
QPixmap::grabWindow( desktop->
winId(), p.
x(), p.
y(), 1, 1);
01496
QImage i = pm.
convertToImage();
01497
return i.
pixel(0,0);
01498 }
01499
01500
void
01501 KColorDialog::keyPressEvent(
QKeyEvent *e )
01502 {
01503
if (d->bColorPicking)
01504 {
01505
if (e->
key() == Key_Escape)
01506 {
01507 d->bColorPicking =
false;
01508
#if defined Q_WS_X11 && ! defined K_WS_QTONLY
01509
qt_set_x11_event_filter(d->oldfilter);
01510 d->oldfilter = 0;
01511
#endif
01512
releaseMouse();
01513 releaseKeyboard();
01514 }
01515 e->
accept();
01516
return;
01517 }
01518
KDialogBase::keyPressEvent( e );
01519 }
01520
01521
void KColorDialog::setRgbEdit(
const KColor &col )
01522 {
01523
if (d->bEditRgb)
return;
01524
int r, g, b;
01525 col.
rgb( &r, &g, &b );
01526
01527 d->redit->setValue( r );
01528 d->gedit->setValue( g );
01529 d->bedit->setValue( b );
01530 }
01531
01532
void KColorDialog::setHtmlEdit(
const KColor &col )
01533 {
01534
if (d->bEditHtml)
return;
01535
int r, g, b;
01536 col.
rgb( &r, &g, &b );
01537
QString num;
01538
01539 num.
sprintf(
"#%02X%02X%02X", r,g,b);
01540 d->htmlName->setText( num );
01541 }
01542
01543
01544
void KColorDialog::setHsvEdit(
const KColor &col )
01545 {
01546
if (d->bEditHsv)
return;
01547
int h, s, v;
01548 col.
hsv( &h, &s, &v );
01549
01550 d->hedit->setValue( h );
01551 d->sedit->setValue( s );
01552 d->vedit->setValue( v );
01553 }
01554
01555
void KHSSelector::virtual_hook(
int id,
void* data )
01556 { KXYSelector::virtual_hook(
id, data ); }
01557
01558
void KValueSelector::virtual_hook(
int id,
void* data )
01559 { KSelector::virtual_hook(
id, data ); }
01560
01561
void KPaletteTable::virtual_hook(
int,
void* )
01562 { }
01563
01564
void KColorCells::virtual_hook(
int,
void* )
01565 { }
01566
01567
void KColorPatch::virtual_hook(
int,
void* )
01568 { }
01569
01570
void KColorDialog::virtual_hook(
int id,
void* data )
01571 { KDialogBase::virtual_hook(
id, data ); }
01572
01573
01574
#include "kcolordialog.moc"
01575