Source Code (Use browser search to find items of interest.)

Class Index

kdelibs'KColorButton (./kdelibs/kdeui/kcolorbtn.h:33)

class KColorButton : public QPushButton
{
	Q_OBJECT
public:
	/**
	* Constructor. Create a KColorButton.
	*/
	KColorButton( QWidget *parent, const char *name = 0L );
	/**
	* Constructor. Create a KColorButton.
	* @param c	The initial colour of the button.
	*/
	KColorButton( const QColor &c, QWidget *parent, const char *name = 0L );
	/**
	* Destructor.
	*/
	virtual ~KColorButton() {}

	/**
	* The current colour.
	* @return The current colour.
	*/
	const QColor color() const
		{	return col; }
	/**
	* Set the current colour.
	*
	* @param c	The colour to set.
	*/
	void setColor( const QColor &c );

signals:
	/**
	* This signal will be emitted when the colour of the widget
	* is changed, either with @ref #setColor or via user selection.
	*/
	void changed( const QColor &newColor );

protected slots:

protected:
	/**
	*/
	virtual void drawButtonLabel( QPainter *p );

	/**
	 * For XDnd
	 */
	virtual void dragEnterEvent( QDragEnterEvent *);
        virtual void dropEvent( QDropEvent *);
        virtual void mousePressEvent( QMouseEvent *e );
        virtual void mouseMoveEvent( QMouseEvent *e);
        virtual void mouseReleaseEvent ( QMouseEvent *e );
private:
        QColor col;
        QPoint mPos;
	bool dragFlag;

  class KColorButtonPrivate;
  KColorButtonPrivate *d;
};

kdelibs'KColorButton::KColorButton() (./kdelibs/kdeui/kcolorbtn.cpp:32)

KColorButton::KColorButton( QWidget *parent, const char *name )
  : QPushButton( parent, name ), dragFlag(false)
{
  setAcceptDrops( true);
}


kdelibs'KColorButton::KColorButton() (./kdelibs/kdeui/kcolorbtn.cpp:38)

KColorButton::KColorButton( const QColor &c, QWidget *parent,
			    const char *name )
  : QPushButton( parent, name ), col(c), dragFlag(false)
{
  setAcceptDrops( true);
}


kdelibs'KColorButton::setColor() (./kdelibs/kdeui/kcolorbtn.cpp:45)

void KColorButton::setColor( const QColor &c )
{
  col = c;
  repaint( false );
}


kdelibs'KColorButton::drawButtonLabel() (./kdelibs/kdeui/kcolorbtn.cpp:51)

void KColorButton::drawButtonLabel( QPainter *painter )
{
  int w = ( style() == WindowsStyle ) ? 11 : 10;
  
  QColor lnCol = colorGroup().text();
  QColor fillCol = isEnabled() ? col : backgroundColor();
  
  if ( style() == WindowsStyle && isDown() ) {
    qDrawPlainRect( painter, w/2+1, w/2+1, width()-w, height()-w,
		    lnCol, 1, 0 );
    w += 2;
    painter->fillRect( w/2+1, w/2+1, width()-w, height()-w, fillCol );
  } else {
    qDrawPlainRect( painter, w/2, w/2, width()-w, height()-w,
		    lnCol, 1, 0 );
    w += 2;
    painter->fillRect( w/2, w/2, width() - w, height() - w, fillCol );
  }
}


kdelibs'KColorButton::dragEnterEvent() (./kdelibs/kdeui/kcolorbtn.cpp:71)

void KColorButton::dragEnterEvent( QDragEnterEvent *event)
{
  event->accept( KColorDrag::canDecode( event) && isEnabled());
}


kdelibs'KColorButton::dropEvent() (./kdelibs/kdeui/kcolorbtn.cpp:76)

void KColorButton::dropEvent( QDropEvent *event)
{
  QColor c;
  if( KColorDrag::decode( event, c)) {
    setColor(c);
    emit changed( c);
  }
}


kdelibs'KColorButton::mousePressEvent() (./kdelibs/kdeui/kcolorbtn.cpp:85)

void KColorButton::mousePressEvent( QMouseEvent *e)
{
  mPos = e->pos();
  QPushButton::mousePressEvent(e);
}


kdelibs'KColorButton::mouseMoveEvent() (./kdelibs/kdeui/kcolorbtn.cpp:91)

void KColorButton::mouseMoveEvent( QMouseEvent *e)
{
  int delay = KGlobalSettings::dndEventDelay();

  if(e->x() >= mPos.x()+delay || e->x() <= mPos.x()-delay ||
     e->y() >= mPos.y()+delay || e->y() <= mPos.y()-delay) {
    // Drag color object
    KColorDrag *d = KColorDrag::makeDrag( color(), this);
    d->dragCopy();
    dragFlag = true;
    // Fake a release event for QPushButton (mosfet)
    QMouseEvent evTmp(QEvent::MouseButtonRelease,
		      e->pos(), e->globalPos(),
    		      QMouseEvent::LeftButton,
    		      QMouseEvent::LeftButton);
    mouseReleaseEvent(&evTmp);
    dragFlag = false;
  }
}


kdelibs'KColorButton::mouseReleaseEvent() (./kdelibs/kdeui/kcolorbtn.cpp:111)

void KColorButton::mouseReleaseEvent( QMouseEvent *e )
{
  QPushButton::mouseReleaseEvent(e);
  if (!dragFlag) {
    if (KColorDialog::getColor( col, this ) == QDialog::Rejected )
      return;
    repaint( false );
    emit changed( col );
  }
}