28 #include <QStylePainter>
29 #include <QColorDialog>
30 #include <QPaintEvent>
32 #include <QPlastiqueStyle>
33 #include <QStyleOptionButton>
40 #include <ui_klfcolorchoosewidget.h>
41 #include <ui_klfcolordialog.h>
50 u =
new Ui::KLFColorDialog;
52 setObjectName(
"KLFColorDialog");
61 return u->mColorChooseWidget;
67 dlg.u->mColorChooseWidget->setAlphaEnabled(alphaenabled);
68 dlg.u->mColorChooseWidget->setColor(startwith);
70 if ( r != QDialog::Accepted )
72 QColor color = dlg.u->mColorChooseWidget->color();
80 :
QWidget(parent), _color(color), _size(size), _removable(removable)
82 setFocusPolicy(Qt::StrongFocus);
84 setContextMenuPolicy(Qt::DefaultContextMenu);
89 p.fillRect(0, 0, width(), height(),
QBrush(_color));
92 option.initFrom(
this);
103 if (kev->
key() == Qt::Key_Space) {
112 menu->
addAction(
"Remove",
this, SLOT(internalWantRemove()));
116 void KLFColorClickSquare::internalWantRemove()
149 _img =
QImage(width(), height(), QImage::Format_ARGB32);
152 for (x = 0; x < _img.
width(); ++x) {
153 for (y = 0; y < _img.
height(); ++y) {
163 if (x < 0) x = 0;
if (x >= width()) x = width()-1;
169 if (y < 0) y = 0;
if (y >= height()) y = height()-1;
177 int x = e->
pos().x();
178 int y = e->
pos().y();
186 int x = e->
pos().x();
187 int y = e->
pos().y();
188 if (x < 0) x = 0;
if (x >= width()) x = width()-1;
189 if (y < 0) y = 0;
if (y >= height()) y = height()-1;
195 int step = - 10 * e->
delta() / 120;
198 bool isA = (e->orientation() == Qt::Horizontal);
218 _currow(0), _curcol(0)
260 if (component ==
"hue") {
262 }
else if (component ==
"sat") {
264 }
else if (component ==
"val") {
265 value = color.
value();
266 }
else if (component ==
"red") {
268 }
else if (component ==
"green") {
269 value = color.
green();
270 }
else if (component ==
"blue") {
271 value = color.
blue();
272 }
else if (component ==
"alpha") {
273 value = color.
alpha();
274 }
else if (component ==
"fix" || component.
isEmpty()) {
277 qWarning(
"Unknown color component property : %s", component.
toLocal8Bit().constData());
284 if (component ==
"hue")
286 else if (component ==
"sat" || component ==
"val" ||
287 component ==
"red" || component ==
"green" ||
288 component ==
"blue" || component ==
"alpha")
290 else if (component ==
"fix" || component.
isEmpty())
293 qWarning(
"Unknown color component property : %s", component.
toLocal8Bit().constData());
381 connect(
this, SIGNAL(
valueChanged(
int)),
this, SLOT(internalChanged(
int)));
393 void KLFColorComponentSpinBox::internalChanged(
int newvalue)
414 KLFColorList * KLFColorChooseWidget::_standardcolors = 0;
421 _recentcolors->
list = recentcolors;
423 _customcolors->
list = customcolors;
440 u =
new Ui::KLFColorChooseWidget;
442 setObjectName(
"KLFColorChooseWidget");
444 _alphaenabled =
true;
448 if (_standardcolors->
list.
size() == 0) {
452 rgbs << 0x000000 << 0x303030 << 0x585858 << 0x808080 << 0xa0a0a0 << 0xc3c3c3
453 << 0xdcdcdc << 0xffffff << 0x400000 << 0x800000 << 0xc00000 << 0xff0000
454 << 0xffc0c0 << 0x004000 << 0x008000 << 0x00c000 << 0x00ff00 << 0xc0ffc0
455 << 0x000040 << 0x000080 << 0x0000c0 << 0x0000ff << 0xc0c0ff << 0x404000
456 << 0x808000 << 0xc0c000 << 0xffff00 << 0xffffc0 << 0x004040 << 0x008080
457 << 0x00c0c0 << 0x00ffff << 0xc0ffff << 0x400040 << 0x800080 << 0xc000c0
458 << 0xff00ff << 0xffc0ff << 0xc05800 << 0xff8000 << 0xffa858 << 0xffdca8 ;
459 for (
int k = 0; k < rgbs.
size(); ++k)
463 _connectedColorChoosers.
append(u->mDisplayColor);
464 _connectedColorChoosers.
append(u->mHueSatPane);
465 _connectedColorChoosers.
append(u->mValPane);
466 _connectedColorChoosers.
append(u->mAlphaPane);
467 _connectedColorChoosers.
append(u->mColorTriangle);
468 _connectedColorChoosers.
append(u->mHueSlider);
469 _connectedColorChoosers.
append(u->mSatSlider);
470 _connectedColorChoosers.
append(u->mValSlider);
471 _connectedColorChoosers.
append(u->mRedSlider);
472 _connectedColorChoosers.
append(u->mGreenSlider);
473 _connectedColorChoosers.
append(u->mBlueSlider);
474 _connectedColorChoosers.
append(u->mAlphaSlider);
475 _connectedColorChoosers.
append(u->spnHue);
476 _connectedColorChoosers.
append(u->spnSat);
477 _connectedColorChoosers.
append(u->spnVal);
478 _connectedColorChoosers.
append(u->spnRed);
479 _connectedColorChoosers.
append(u->spnGreen);
480 _connectedColorChoosers.
append(u->spnBlue);
481 _connectedColorChoosers.
append(u->spnAlpha);
497 for (k = 0; k < _connectedColorChoosers.
size(); ++k) {
504 connect(u->txtHex, SIGNAL(textChanged(
const QString&)),
507 connect(u->btnAddCustomColor, SIGNAL(clicked()),
511 for (k = 0; k < colornames.size(); ++k) {
522 QColor newcolor = wanted_newcolor;
527 for (k = 0; k < _connectedColorChoosers.
size(); ++k) {
528 _connectedColorChoosers[k]->blockSignals(
true);
529 _connectedColorChoosers[k]->setProperty(
"color",
QVariant(newcolor));
530 _connectedColorChoosers[k]->blockSignals(
false);
533 if (u->txtHex->text() != newcolorname) {
534 u->txtHex->blockSignals(
true);
535 u->txtHex->setText(newcolorname);
536 u->txtHex->blockSignals(
false);
555 static QRegExp rx(
"\\#?[0-9A-Za-z]{6}");
557 u->txtHex->setProperty(
"invalidInput",
true);
558 u->txtHex->setStyleSheet(
"background-color: rgb(255,128,128)");
561 u->txtHex->setProperty(
"invalidInput",
QVariant());
562 u->txtHex->setStyleSheet(
"");
573 if (!_alphaenabled && color.
rgb() == _color.
rgb())
581 _alphaenabled = enabled;
582 u->spnAlpha->setShown(enabled);
583 u->lblAlpha->setShown(enabled);
584 u->mAlphaPane->setShown(enabled);
585 u->lblsAlpha->setShown(enabled);
586 u->mAlphaSlider->setShown(enabled);
596 for (k = 0; k < colorlist->
list.
size(); ++k) {
598 (colorlist == _customcolors ||
599 colorlist == _recentcolors),
601 connect(sq, SIGNAL(colorActivated(
const QColor&)),
603 connect(sq, SIGNAL(wantRemoveColor(
const QColor&)),
604 colorlist, SLOT(removeColor(
const QColor&)));
626 fillPalette(_recentcolors, u->mRecentColorsPalette);
630 fillPalette(_standardcolors, u->mStandardColorsPalette);
634 fillPalette(_customcolors, u->mCustomColorsPalette);
642 if ( _recentcolors == 0 )
644 if ( _standardcolors == 0 )
646 if ( _customcolors == 0 )
655 while (it != _recentcolors->
list.
end()) {
690 bool changed =
false;
703 QStyle *KLFColorChooser::mReplaceButtonStyle = NULL;
706 :
QPushButton(parent), _color(0,0,0,255), _pix(), _allowdefaultstate(false),
707 _defaultstatestring(tr(
"[ Default ]")), _autoadd(true), _size(120, 20),
708 _xalignfactor(0.5f), _yalignfactor(0.5f), _alphaenabled(true), mMenu(0)
710 ensureColorListInstance();
711 connect(_colorlist, SIGNAL(listChanged()),
this, SLOT(
_makemenu()));
717 if ( mReplaceButtonStyle == NULL )
719 setStyle(mReplaceButtonStyle);
749 w +=
style()->pixelMetric(QStyle::PM_MenuButtonIndicator, &opt,
this);
751 return (
style()->sizeFromContents(QStyle::CT_PushButton, &opt,
QSize(w, h),
this).
752 expandedTo(QApplication::globalStrut()));
757 if ( ! _allowdefaultstate && ! col.
isValid() )
766 if (_autoadd && _color.
isValid()) {
779 _allowdefaultstate = allow;
784 _defaultstatestring = str;
815 mMenu->deleteLater();
820 mMenu =
new QMenu(
this);
822 if (_allowdefaultstate) {
829 ensureColorListInstance();
831 for (k = 0; k < n; ++k) {
837 if (col.
alpha() == 255)
844 a->setProperty(
"setColor", QVariant::fromValue<QColor>(col));
856 QPushButton::paintEvent(e);
862 void KLFColorChooser::_setpix()
865 _pix = colorPixmap(_color, _size);
903 int KLFColorChooser::staticUserMaxColors = 10;
909 staticUserMaxColors = maxColors;
913 void KLFColorChooser::ensureColorListInstance()
915 if ( _colorlist == 0 )
921 ensureColorListInstance();
922 _colorlist->
list = colors;
929 ensureColorListInstance();
static QList< QColor > colorList()
void mousePressEvent(QMouseEvent *event)
KLFColorChooseWidget * colorChooseWidget()
void removeColor(const QColor &color)
void setAllowDefaultState(bool allow)
fillRect(const QRectF &rectangle, const QBrush &brush)
static int valueMax(const QString &component)
void setSenderPropertyColor()
fill(const QColor &fillColor=Qt::white)
A Layout that lays out its children in a grid, flowing left to right, top to bottom.
QColor colorFromValues(QColor color_base, int value_a, int value_b=-1)
split(const QString &sep, SplitBehavior behavior=KeepEmptyParts, Qt::CaseSensitivity cs=Qt::CaseSensitive)
#define MAX_RECENT_COLORS
void colorChanged(const QColor &color)
arg(const QString &a, int fieldWidth=0, const QChar &fillChar=QLatin1Char( ' ')
KLFGridFlowLayout(int columns, QWidget *parent)
void wantRemoveColor(const QColor &color)
drawLine(const QLineF &line)
KLFColorChooser(QWidget *parent)
setRgb(int r, int g, int b, int a=255)
drawPrimitive(QStyle::PrimitiveElement pe, const QStyleOption &option)
int valueBFromNewColor(const QColor &color) const
indexOf(const T &value, int from=0)
KLFColorComponentSpinBox(QWidget *parent)
void paintEvent(QPaintEvent *event)
bool refreshColorFromInternalValues(int value_a, int value_b=-1)
void paintEvent(QPaintEvent *event)
static QColor getColor(QColor startwith=Qt::black, bool alphaenabled=true, QWidget *parent=0)
static void setColorList(const QList< QColor > &colorlist)
drawPixmap(const QRectF &target, const QPixmap &pixmap, const QRectF &source)
static int valueFromNewColor(const QColor &color, const QString &component)
KLFColorDialog(QWidget *parent=0)
void setDefaultStateString(const QString &str)
void addColor(const QColor &color)
virtual QSize sizeHint() const
void setAlphaEnabled(bool alpha_enabled)
QList< QWidget * > mGridFlowWidgets
virtual ~KLFColorDialog()
KLFColorClickSquare(QColor color=Qt::white, int size=16, bool removable=true, QWidget *parent=0)
void setColor(const QColor &color)
void setColorComponent(const QString &component)
setPixel(const QPoint &position, uint index_or_rgb)
int valueAFromNewColor(const QColor &color) const
drawImage(const QRectF &target, const QImage &image, const QRectF &source, Qt::ImageConversionFlags flags=Qt::AutoColor)
setClipRect(const QRectF &rectangle, Qt::ClipOperation operation=Qt::ReplaceClip)
void contextMenuEvent(QContextMenuEvent *event)
addItem(QLayoutItem *item, int row, int column, int rowSpan=1, int columnSpan=1, Qt::Alignment alignment=0)
void setColor(const QColor &color)
setHsv(int h, int s, int v, int a=255)
void colorChanged(const QColor &newcolor)
A dialog to let the user select a color.
void keyPressEvent(QKeyEvent *event)
QString _colorcomponent_b
exactMatch(const QString &str)
virtual void insertGridFlowWidget(QWidget *w, Qt::Alignment align=0)
static void setUserMaxColors(int maxcolors)