25 #include <QtCore/QPointer>
26 #include <QtGui/QPainter>
27 #include <QtGui/qdrawutil.h>
28 #include <QtGui/QApplication>
29 #include <QtGui/QClipboard>
30 #include <QtGui/QStyle>
33 #include <QMouseEvent>
34 #include <QStyleOptionButton>
36 #include "kcolorhelpers_p.h"
43 class KColorButton::KColorButtonPrivate
48 void _k_chooseColor();
49 void _k_colorChosen();
53 bool m_bdefaultColor : 1;
54 bool m_alphaChannel : 1;
59 QWeakPointer<KColorDialog> dialogPtr;
61 void initStyleOption(QStyleOptionButton* opt)
const;
64 KColorButton::KColorButtonPrivate::KColorButtonPrivate(
KColorButton *q)
67 m_bdefaultColor =
false;
68 m_alphaChannel =
false;
69 q->setAcceptDrops(
true);
71 connect(q, SIGNAL(clicked()), q, SLOT(_k_chooseColor()));
76 , d( new KColorButtonPrivate(this) )
82 , d( new KColorButtonPrivate(this) )
89 , d( new KColorButtonPrivate(this) )
116 d->m_alphaChannel = alpha;
121 return d->m_alphaChannel;
126 return d->m_defaultColor;
131 d->m_bdefaultColor = c.isValid();
132 d->m_defaultColor = c;
135 void KColorButton::KColorButtonPrivate::initStyleOption(QStyleOptionButton* opt)
const
138 opt->state |= q->isDown() ? QStyle::State_Sunken : QStyle::State_Raised;
139 opt->features = QStyleOptionButton::None;
141 opt->features |= QStyleOptionButton::DefaultButton;
148 QPainter painter(
this);
149 QStyle *style = QWidget::style();
152 QStyleOptionButton butOpt;
153 d->initStyleOption(&butOpt);
154 style->drawControl( QStyle::CE_PushButtonBevel, &butOpt, &painter,
this );
158 QRect labelRect = style->subElementRect( QStyle::SE_PushButtonContents,
160 int shift = style->pixelMetric( QStyle::PM_ButtonMargin, &butOpt,
this ) / 2;
161 labelRect.adjust(shift, shift, -shift, -shift);
163 labelRect.getRect(&x, &y, &w, &h);
165 if (isChecked() || isDown()) {
166 x += style->pixelMetric( QStyle::PM_ButtonShiftHorizontal, &butOpt,
this );
167 y += style->pixelMetric( QStyle::PM_ButtonShiftVertical, &butOpt,
this );
170 QColor fillCol = isEnabled() ? d->col : palette().color(backgroundRole());
171 qDrawShadePanel( &painter, x, y, w, h, palette(),
true, 1, NULL);
172 if ( fillCol.isValid() ) {
177 QRect focusRect = style->subElementRect( QStyle::SE_PushButtonFocusRect, &butOpt,
this );
178 QStyleOptionFocusRect focusOpt;
180 focusOpt.rect = focusRect;
181 focusOpt.backgroundColor = palette().background().color();
182 style->drawPrimitive( QStyle::PE_FrameFocusRect, &focusOpt, &painter,
this );
188 QStyleOptionButton opt;
189 d->initStyleOption(&opt);
190 return style()->sizeFromContents(QStyle::CT_PushButton, &opt,
QSize(40, 15),
this).
191 expandedTo(QApplication::globalStrut());
196 QStyleOptionButton opt;
197 d->initStyleOption(&opt);
198 return style()->sizeFromContents(QStyle::CT_PushButton, &opt,
QSize(3, 3),
this).
199 expandedTo(QApplication::globalStrut());
217 int key = e->key() | e->modifiers();
220 QMimeData *mime=
new QMimeData;
222 QApplication::clipboard()->setMimeData( mime, QClipboard::Clipboard );
229 QPushButton::keyPressEvent( e );
235 QPushButton::mousePressEvent(e);
240 if( (e->buttons() & Qt::LeftButton) &&
248 void KColorButton::KColorButtonPrivate::_k_chooseColor()
259 if (m_bdefaultColor) {
263 dialog->setAttribute(Qt::WA_DeleteOnClose);
265 connect(dialog, SIGNAL(applyClicked()), q, SLOT(_k_colorChosen()));
266 connect(dialog, SIGNAL(accepted()), q, SLOT(_k_colorChosen()));
271 void KColorButton::KColorButtonPrivate::_k_colorChosen()
278 if (dialog->
color().isValid()) {
280 }
else if (m_bdefaultColor) {
285 #include "kcolorbutton.moc"