• Skip to content
  • Skip to link menu
KDE 3.5 API Reference
  • KDE API Reference
  • API Reference
  • Sitemap
  • Contact Us
 

kdeui

kcolorbutton.cpp

Go to the documentation of this file.
00001 /*  This file is part of the KDE libraries
00002     Copyright (C) 1997 Martin Jones (mjones@kde.org)
00003     Copyright (C) 1999 Cristian Tibirna (ctibirna@kde.org)
00004 
00005     This library is free software; you can redistribute it and/or
00006     modify it under the terms of the GNU Library General Public
00007     License as published by the Free Software Foundation; either
00008     version 2 of the License, or (at your option) any later version.
00009 
00010     This library is distributed in the hope that it will be useful,
00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013     Library General Public License for more details.
00014 
00015     You should have received a copy of the GNU Library General Public License
00016     along with this library; see the file COPYING.LIB.  If not, write to
00017     the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00018     Boston, MA 02110-1301, USA.
00019 */
00020 
00021 #include <config.h>
00022 
00023 #include <qpainter.h>
00024 #include <qdrawutil.h>
00025 #include <qapplication.h>
00026 #include <qclipboard.h>
00027 #include <qstyle.h>
00028 #include <kglobalsettings.h>
00029 #include <kstdaccel.h>
00030 #include "kcolordialog.h"
00031 #include "kcolorbutton.h"
00032 #include "kcolordrag.h"
00033 
00034 class KColorButton::KColorButtonPrivate
00035 {
00036 public:
00037     bool m_bdefaultColor;
00038     QColor m_defaultColor;
00039 };
00040 
00041 KColorButton::KColorButton( QWidget *parent, const char *name )
00042   : QPushButton( parent, name )
00043 {
00044   d = new KColorButtonPrivate;
00045   d->m_bdefaultColor = false;
00046   d->m_defaultColor = QColor();
00047   setAcceptDrops( true);
00048 
00049   // 2000-10-15 (putzer): fixes broken keyboard usage
00050   connect (this, SIGNAL(clicked()), this, SLOT(chooseColor()));
00051 }
00052 
00053 KColorButton::KColorButton( const QColor &c, QWidget *parent,
00054                 const char *name )
00055   : QPushButton( parent, name ), col(c)
00056 {
00057   d = new KColorButtonPrivate;
00058   d->m_bdefaultColor = false;
00059   d->m_defaultColor = QColor();
00060   setAcceptDrops( true);
00061 
00062   // 2000-10-15 (putzer): fixes broken keyboard usage
00063   connect (this, SIGNAL(clicked()), this, SLOT(chooseColor()));
00064 }
00065 
00066 KColorButton::KColorButton( const QColor &c, const QColor &defaultColor, QWidget *parent,
00067                 const char *name )
00068   : QPushButton( parent, name ), col(c)
00069 {
00070   d = new KColorButtonPrivate;
00071   d->m_bdefaultColor = true;
00072   d->m_defaultColor = defaultColor;
00073   setAcceptDrops( true);
00074 
00075   // 2000-10-15 (putzer): fixes broken keyboard usage
00076   connect (this, SIGNAL(clicked()), this, SLOT(chooseColor()));
00077 }
00078 
00079 KColorButton::~KColorButton()
00080 {
00081   delete d;
00082 }
00083 
00084 void KColorButton::setColor( const QColor &c )
00085 {
00086   if ( col != c ) {
00087     col = c;
00088     repaint( false );
00089     emit changed( col );
00090   }
00091 }
00092 
00093 QColor KColorButton::defaultColor() const
00094 {
00095   return d->m_defaultColor;
00096 }
00097 
00098 void KColorButton::setDefaultColor( const QColor &c )
00099 {
00100   d->m_bdefaultColor = c.isValid();
00101   d->m_defaultColor = c;
00102 }
00103 
00104 
00105 void KColorButton::drawButtonLabel( QPainter *painter )
00106 {
00107   int x, y, w, h;
00108   QRect r = style().subRect( QStyle::SR_PushButtonContents, this );
00109   r.rect(&x, &y, &w, &h);
00110 
00111   int margin = style().pixelMetric( QStyle::PM_ButtonMargin, this );
00112   x += margin;
00113   y += margin;
00114   w -= 2*margin;
00115   h -= 2*margin;
00116 
00117   if (isOn() || isDown()) {
00118     x += style().pixelMetric( QStyle::PM_ButtonShiftHorizontal, this );
00119     y += style().pixelMetric( QStyle::PM_ButtonShiftVertical, this );
00120   }
00121 
00122   QColor fillCol = isEnabled() ? col : backgroundColor();
00123   qDrawShadePanel( painter, x, y, w, h, colorGroup(), true, 1, NULL);
00124   if ( fillCol.isValid() )
00125     painter->fillRect( x+1, y+1, w-2, h-2, fillCol );
00126 
00127   if ( hasFocus() ) {
00128     QRect focusRect = style().subRect( QStyle::SR_PushButtonFocusRect, this );
00129     style().drawPrimitive( QStyle::PE_FocusRect, painter, focusRect, colorGroup() );
00130   }
00131 }
00132 
00133 QSize KColorButton::sizeHint() const
00134 {
00135   return style().sizeFromContents(QStyle::CT_PushButton, this, QSize(40, 15)).
00136         expandedTo(QApplication::globalStrut());
00137 }
00138 
00139 void KColorButton::dragEnterEvent( QDragEnterEvent *event)
00140 {
00141   event->accept( KColorDrag::canDecode( event) && isEnabled());
00142 }
00143 
00144 void KColorButton::dropEvent( QDropEvent *event)
00145 {
00146   QColor c;
00147   if( KColorDrag::decode( event, c)) {
00148     setColor(c);
00149   }
00150 }
00151 
00152 void KColorButton::keyPressEvent( QKeyEvent *e )
00153 {
00154   KKey key( e );
00155 
00156   if ( KStdAccel::copy().contains( key ) ) {
00157     QMimeSource* mime = new KColorDrag( color() );
00158     QApplication::clipboard()->setData( mime, QClipboard::Clipboard );
00159   }
00160   else if ( KStdAccel::paste().contains( key ) ) {
00161     QColor color;
00162     KColorDrag::decode( QApplication::clipboard()->data( QClipboard::Clipboard ), color );
00163     setColor( color );
00164   }
00165   else
00166     QPushButton::keyPressEvent( e );
00167 }
00168 
00169 void KColorButton::mousePressEvent( QMouseEvent *e)
00170 {
00171   mPos = e->pos();
00172   QPushButton::mousePressEvent(e);
00173 }
00174 
00175 void KColorButton::mouseMoveEvent( QMouseEvent *e)
00176 {
00177   if( (e->state() & LeftButton) &&
00178     (e->pos()-mPos).manhattanLength() > KGlobalSettings::dndEventDelay() )
00179   {
00180     // Drag color object
00181     KColorDrag *dg = new KColorDrag( color(), this);
00182     dg->dragCopy();
00183     setDown(false);
00184   }
00185 }
00186 
00187 void KColorButton::chooseColor()
00188 {
00189   QColor c = color();
00190   if ( d->m_bdefaultColor )
00191   {
00192       if( KColorDialog::getColor( c, d->m_defaultColor, this ) != QDialog::Rejected ) {
00193           setColor( c );
00194       }
00195   }
00196   else
00197   {
00198       if( KColorDialog::getColor( c, this ) != QDialog::Rejected ) {
00199           setColor( c );
00200       }
00201   }
00202 }
00203 
00204 void KColorButton::virtual_hook( int, void* )
00205 { /*BASE::virtual_hook( id, data );*/ }
00206 
00207 #include "kcolorbutton.moc"

kdeui

Skip menu "kdeui"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

API Reference

Skip menu "API Reference"
  • dcop
  • DNSSD
  • interfaces
  • Kate
  • kconf_update
  • KDECore
  • KDED
  • kdefx
  • KDEsu
  • kdeui
  • KDocTools
  • KHTML
  • KImgIO
  • KInit
  • kio
  • kioslave
  • KJS
  • KNewStuff
  • KParts
  • KUtils
Generated for API Reference by doxygen 1.5.9
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal