diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | ce4a32fe52ef09d8f5ff1dd22c001110902b60a2 (patch) | |
tree | 5ac38a06f3dde268dc7927dc155896926aaf7012 /kdeui/kcolorbutton.cpp | |
download | tdelibs-ce4a32fe52ef09d8f5ff1dd22c001110902b60a2.tar.gz tdelibs-ce4a32fe52ef09d8f5ff1dd22c001110902b60a2.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdelibs@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kdeui/kcolorbutton.cpp')
-rw-r--r-- | kdeui/kcolorbutton.cpp | 207 |
1 files changed, 207 insertions, 0 deletions
diff --git a/kdeui/kcolorbutton.cpp b/kdeui/kcolorbutton.cpp new file mode 100644 index 000000000..a3602ed4e --- /dev/null +++ b/kdeui/kcolorbutton.cpp @@ -0,0 +1,207 @@ +/* This file is part of the KDE libraries + Copyright (C) 1997 Martin Jones ([email protected]) + Copyright (C) 1999 Cristian Tibirna ([email protected]) + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. +*/ + +#include <config.h> + +#include <qpainter.h> +#include <qdrawutil.h> +#include <qapplication.h> +#include <qclipboard.h> +#include <qstyle.h> +#include <kglobalsettings.h> +#include <kstdaccel.h> +#include "kcolordialog.h" +#include "kcolorbutton.h" +#include "kcolordrag.h" + +class KColorButton::KColorButtonPrivate +{ +public: + bool m_bdefaultColor; + QColor m_defaultColor; +}; + +KColorButton::KColorButton( QWidget *parent, const char *name ) + : QPushButton( parent, name ) +{ + d = new KColorButtonPrivate; + d->m_bdefaultColor = false; + d->m_defaultColor = QColor(); + setAcceptDrops( true); + + // 2000-10-15 (putzer): fixes broken keyboard usage + connect (this, SIGNAL(clicked()), this, SLOT(chooseColor())); +} + +KColorButton::KColorButton( const QColor &c, QWidget *parent, + const char *name ) + : QPushButton( parent, name ), col(c) +{ + d = new KColorButtonPrivate; + d->m_bdefaultColor = false; + d->m_defaultColor = QColor(); + setAcceptDrops( true); + + // 2000-10-15 (putzer): fixes broken keyboard usage + connect (this, SIGNAL(clicked()), this, SLOT(chooseColor())); +} + +KColorButton::KColorButton( const QColor &c, const QColor &defaultColor, QWidget *parent, + const char *name ) + : QPushButton( parent, name ), col(c) +{ + d = new KColorButtonPrivate; + d->m_bdefaultColor = true; + d->m_defaultColor = defaultColor; + setAcceptDrops( true); + + // 2000-10-15 (putzer): fixes broken keyboard usage + connect (this, SIGNAL(clicked()), this, SLOT(chooseColor())); +} + +KColorButton::~KColorButton() +{ + delete d; +} + +void KColorButton::setColor( const QColor &c ) +{ + if ( col != c ) { + col = c; + repaint( false ); + emit changed( col ); + } +} + +QColor KColorButton::defaultColor() const +{ + return d->m_defaultColor; +} + +void KColorButton::setDefaultColor( const QColor &c ) +{ + d->m_bdefaultColor = c.isValid(); + d->m_defaultColor = c; +} + + +void KColorButton::drawButtonLabel( QPainter *painter ) +{ + int x, y, w, h; + QRect r = style().subRect( QStyle::SR_PushButtonContents, this ); + r.rect(&x, &y, &w, &h); + + int margin = style().pixelMetric( QStyle::PM_ButtonMargin, this ); + x += margin; + y += margin; + w -= 2*margin; + h -= 2*margin; + + if (isOn() || isDown()) { + x += style().pixelMetric( QStyle::PM_ButtonShiftHorizontal, this ); + y += style().pixelMetric( QStyle::PM_ButtonShiftVertical, this ); + } + + QColor fillCol = isEnabled() ? col : backgroundColor(); + qDrawShadePanel( painter, x, y, w, h, colorGroup(), true, 1, NULL); + if ( fillCol.isValid() ) + painter->fillRect( x+1, y+1, w-2, h-2, fillCol ); + + if ( hasFocus() ) { + QRect focusRect = style().subRect( QStyle::SR_PushButtonFocusRect, this ); + style().drawPrimitive( QStyle::PE_FocusRect, painter, focusRect, colorGroup() ); + } +} + +QSize KColorButton::sizeHint() const +{ + return style().sizeFromContents(QStyle::CT_PushButton, this, QSize(40, 15)). + expandedTo(QApplication::globalStrut()); +} + +void KColorButton::dragEnterEvent( QDragEnterEvent *event) +{ + event->accept( KColorDrag::canDecode( event) && isEnabled()); +} + +void KColorButton::dropEvent( QDropEvent *event) +{ + QColor c; + if( KColorDrag::decode( event, c)) { + setColor(c); + } +} + +void KColorButton::keyPressEvent( QKeyEvent *e ) +{ + KKey key( e ); + + if ( KStdAccel::copy().contains( key ) ) { + QMimeSource* mime = new KColorDrag( color() ); + QApplication::clipboard()->setData( mime, QClipboard::Clipboard ); + } + else if ( KStdAccel::paste().contains( key ) ) { + QColor color; + KColorDrag::decode( QApplication::clipboard()->data( QClipboard::Clipboard ), color ); + setColor( color ); + } + else + QPushButton::keyPressEvent( e ); +} + +void KColorButton::mousePressEvent( QMouseEvent *e) +{ + mPos = e->pos(); + QPushButton::mousePressEvent(e); +} + +void KColorButton::mouseMoveEvent( QMouseEvent *e) +{ + if( (e->state() & LeftButton) && + (e->pos()-mPos).manhattanLength() > KGlobalSettings::dndEventDelay() ) + { + // Drag color object + KColorDrag *dg = new KColorDrag( color(), this); + dg->dragCopy(); + setDown(false); + } +} + +void KColorButton::chooseColor() +{ + QColor c = color(); + if ( d->m_bdefaultColor ) + { + if( KColorDialog::getColor( c, d->m_defaultColor, this ) != QDialog::Rejected ) { + setColor( c ); + } + } + else + { + if( KColorDialog::getColor( c, this ) != QDialog::Rejected ) { + setColor( c ); + } + } +} + +void KColorButton::virtual_hook( int, void* ) +{ /*BASE::virtual_hook( id, data );*/ } + +#include "kcolorbutton.moc" |