Source Code (Use browser search to find items of interest.)
Class Index
kdelibs'KDualColorButton (./kdelibs/kdeui/kdualcolorbtn.h:43)
class KDualColorButton : public QWidget
{
Q_OBJECT
public:
enum DualColor{Foreground, Background};
/**
* Constructs a new KDualColorButton using the default black and white
* colors.
*
*/
KDualColorButton(QWidget *parent=0, const char *name=0);
/**
* Constructs a new KDualColorButton with the supplied foreground and
* background colors.
*/
KDualColorButton(const QColor &fgColor, const QColor &bgColor,
QWidget *parent=0, const char *name=0);
~KDualColorButton();
/**
* Returns the current foreground color.
*/
QColor foreground();
/**
* Returns the current background color.
*/
QColor background();
/**
* Returns the current color item selected by the user.
*/
KDualColorButton::DualColor current();
/**
* Returns the color of the selected item.
*/
QColor currentColor();
/**
* Returns the minimum size needed to display the widget and all it's
* controls.
*/
virtual QSize sizeHint() const;
public slots:
/**
* Sets the foreground color.
*/
void slotSetForeground(const QColor &c);
/**
* Sets the background color.
*/
void slotSetBackground(const QColor &c);
/**
* Sets the current selected color item.
*/
void slotSetCurrent(KDualColorButton::DualColor s);
/**
* Sets the color of the selected item.
*/
void slotSetCurrentColor(const QColor &c);
signals:
/**
* Emitted when the foreground color is changed.
*/
void fgChanged(const QColor &c);
/**
* Emitted when the background color is changed.
*/
void bgChanged(const QColor &c);
/**
* Emitted when the user changes the current color selection.
*/
void currentChanged(KDualColorButton::DualColor s);
protected:
/**
* Sets the supplied rectangles to the proper size and position for the
* current widget size. You can reimplement this to change the layout
* of the widget. Restrictions are that the swap control will always
* be at the top right, the reset control will always be at the bottom
* left, and you must leave at least a 14x14 space in those corners.
*/
virtual void metrics(QRect &fgRect, QRect &bgRect);
virtual void paintEvent(QPaintEvent *ev);
virtual void mousePressEvent(QMouseEvent *ev);
virtual void mouseMoveEvent(QMouseEvent *ev);
virtual void mouseReleaseEvent(QMouseEvent *ev);
// Dnd
virtual void dragEnterEvent(QDragEnterEvent *ev);
virtual void dropEvent(QDropEvent *ev);
private:
QBitmap *arrowBitmap;
QPixmap *resetPixmap;
QBrush fg, bg;
QPoint mPos;
bool dragFlag, miniCtlFlag;
DualColor curColor, tmpColor;
class KDualColorPrivate;
KDualColorPrivate *d;
};
kdelibs'KDualColorButton::KDualColorButton() (./kdelibs/kdeui/kdualcolorbtn.cpp:28)
KDualColorButton::KDualColorButton(QWidget *parent, const char *name)
: QWidget(parent, name)
{
arrowBitmap = new QBitmap(dcolorarrow_width, dcolorarrow_height,
(const unsigned char *)dcolorarrow_bits, true);
arrowBitmap->setMask(*arrowBitmap); // heh
resetPixmap = new QPixmap((const char **)dcolorreset_xpm);
fg = QBrush(Qt::black, SolidPattern);
bg = QBrush(Qt::white, SolidPattern);
curColor = Foreground;
dragFlag = false;
miniCtlFlag = false;
if(sizeHint().isValid())
setMinimumSize(sizeHint());
setAcceptDrops(true);
}
kdelibs'KDualColorButton::KDualColorButton() (./kdelibs/kdeui/kdualcolorbtn.cpp:45)
KDualColorButton::KDualColorButton(const QColor &fgColor, const QColor &bgColor,
QWidget *parent, const char *name)
: QWidget(parent, name)
{
arrowBitmap = new QBitmap(dcolorarrow_width, dcolorarrow_height,
(const unsigned char *)dcolorarrow_bits, true);
arrowBitmap->setMask(*arrowBitmap);
resetPixmap = new QPixmap((const char **)dcolorreset_xpm);
fg = QBrush(fgColor, SolidPattern);
bg = QBrush(bgColor, SolidPattern);
curColor = Foreground;
dragFlag = false;
miniCtlFlag = false;
if(sizeHint().isValid())
setMinimumSize(sizeHint());
setAcceptDrops(true);
}
kdelibs'KDualColorButton::~KDualColorButton() (./kdelibs/kdeui/kdualcolorbtn.cpp:63)
KDualColorButton::~KDualColorButton()
{
delete arrowBitmap;
delete resetPixmap;
}
kdelibs'KDualColorButton::foreground() (./kdelibs/kdeui/kdualcolorbtn.cpp:69)
QColor KDualColorButton::foreground()
{
return(fg.color());
}
kdelibs'KDualColorButton::background() (./kdelibs/kdeui/kdualcolorbtn.cpp:74)
QColor KDualColorButton::background()
{
return(bg.color());
}
KDualColorButton::DualColor KDualColorButton::current()
{
return(curColor);
}
kdelibs'KDualColorButton::currentColor() (./kdelibs/kdeui/kdualcolorbtn.cpp:84)
QColor KDualColorButton::currentColor()
{
return(curColor == Background ? bg.color() : fg.color());
}
kdelibs'KDualColorButton::sizeHint() (./kdelibs/kdeui/kdualcolorbtn.cpp:89)
QSize KDualColorButton::sizeHint() const
{
return(QSize(34, 34));
}
kdelibs'KDualColorButton::slotSetForeground() (./kdelibs/kdeui/kdualcolorbtn.cpp:94)
void KDualColorButton::slotSetForeground(const QColor &c)
{
fg = QBrush(c, SolidPattern);
repaint(false);
}
kdelibs'KDualColorButton::slotSetBackground() (./kdelibs/kdeui/kdualcolorbtn.cpp:100)
void KDualColorButton::slotSetBackground(const QColor &c)
{
bg = QBrush(c, SolidPattern);
repaint(false);
}
kdelibs'KDualColorButton::slotSetCurrentColor() (./kdelibs/kdeui/kdualcolorbtn.cpp:106)
void KDualColorButton::slotSetCurrentColor(const QColor &c)
{
if(curColor == Background)
bg = QBrush(c, SolidPattern);
else
fg = QBrush(c, SolidPattern);
repaint(false);
}
kdelibs'KDualColorButton::slotSetCurrent() (./kdelibs/kdeui/kdualcolorbtn.cpp:115)
void KDualColorButton::slotSetCurrent(DualColor s)
{
curColor = s;
repaint(false);
}
kdelibs'KDualColorButton::metrics() (./kdelibs/kdeui/kdualcolorbtn.cpp:121)
void KDualColorButton::metrics(QRect &fgRect, QRect &bgRect)
{
fgRect = QRect(0, 0, width()-14, height()-14);
bgRect = QRect(14, 14, width()-14, height()-14);
}
kdelibs'KDualColorButton::paintEvent() (./kdelibs/kdeui/kdualcolorbtn.cpp:127)
void KDualColorButton::paintEvent(QPaintEvent *)
{
QRect fgRect, bgRect;
QPainter p(this);
metrics(fgRect, bgRect);
QBrush defBrush = colorGroup().brush(QColorGroup::Button);
qDrawShadeRect(&p, bgRect, colorGroup(), curColor == Background, 2, 0,
isEnabled() ? &bg : &defBrush);
qDrawShadeRect(&p, fgRect, colorGroup(), curColor == Foreground, 2, 0,
isEnabled() ? &fg : &defBrush);
p.setPen(colorGroup().shadow());
p.drawPixmap(fgRect.right()+2, 0, *arrowBitmap);
p.drawPixmap(0, fgRect.bottom()+2, *resetPixmap);
}
kdelibs'KDualColorButton::dragEnterEvent() (./kdelibs/kdeui/kdualcolorbtn.cpp:145)
void KDualColorButton::dragEnterEvent(QDragEnterEvent *ev)
{
ev->accept(isEnabled() && KColorDrag::canDecode(ev));
}
kdelibs'KDualColorButton::dropEvent() (./kdelibs/kdeui/kdualcolorbtn.cpp:150)
void KDualColorButton::dropEvent(QDropEvent *ev)
{
QColor c;
if(KColorDrag::decode(ev, c)){
if(curColor == Foreground){
fg.setColor(c);
emit fgChanged(c);
}
else{
bg.setColor(c);
emit(bgChanged(c));
}
}
}
kdelibs'KDualColorButton::mousePressEvent() (./kdelibs/kdeui/kdualcolorbtn.cpp:165)
void KDualColorButton::mousePressEvent(QMouseEvent *ev)
{
QRect fgRect, bgRect;
metrics(fgRect, bgRect);
mPos = ev->pos();
tmpColor = curColor;
dragFlag = false;
if(fgRect.contains(mPos)){
curColor = Foreground;
miniCtlFlag = false;
}
else if(bgRect.contains(mPos)){
curColor = Background;
miniCtlFlag = false;
}
else if(ev->pos().x() > fgRect.width()){
// We handle the swap and reset controls as soon as the mouse is
// is pressed and ignore further events on this click (mosfet).
QBrush c = fg;
fg = bg;
bg = c;
emit fgChanged(fg.color());
emit bgChanged(bg.color());
miniCtlFlag = true;
}
else if(ev->pos().x() < bgRect.x()){
fg.setColor(Qt::black);
bg.setColor(Qt::white);
emit fgChanged(fg.color());
emit bgChanged(bg.color());
miniCtlFlag = true;
}
repaint(false);
}
kdelibs'KDualColorButton::mouseMoveEvent() (./kdelibs/kdeui/kdualcolorbtn.cpp:201)
void KDualColorButton::mouseMoveEvent(QMouseEvent *ev)
{
if(!miniCtlFlag){
int delay = KGlobalSettings::dndEventDelay();
if(ev->x() >= mPos.x()+delay || ev->x() <= mPos.x()-delay ||
ev->y() >= mPos.y()+delay || ev->y() <= mPos.y()-delay) {
KColorDrag *d = KColorDrag::makeDrag( curColor == Foreground ?
fg.color() : bg.color(),
this);
d->dragCopy();
dragFlag = true;
}
}
}
kdelibs'KDualColorButton::mouseReleaseEvent() (./kdelibs/kdeui/kdualcolorbtn.cpp:216)
void KDualColorButton::mouseReleaseEvent(QMouseEvent *ev)
{
if(!miniCtlFlag){
QRect fgRect, bgRect;
metrics(fgRect, bgRect);
if(dragFlag)
curColor = tmpColor;
else if(fgRect.contains(ev->pos()) && curColor == Foreground){
if(tmpColor == Background){
curColor = Foreground;
emit currentChanged(Foreground);
}
else{
QColor newColor = fg.color();
if(KColorDialog::getColor(newColor) != QDialog::Rejected){
fg.setColor(newColor);
emit fgChanged(newColor);
}
}
}
else if(bgRect.contains(ev->pos()) && curColor == Background){
if(tmpColor == Foreground){
curColor = Background;
emit currentChanged(Background);
}
else{
QColor newColor = bg.color();
if(KColorDialog::getColor(newColor) != QDialog::Rejected){
bg.setColor(newColor);
emit bgChanged(newColor);
}
}
}
repaint(false);
dragFlag = false;
}
else
miniCtlFlag = false;
}