kdeui Library API Documentation

kcolorbutton.cpp

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., 59 Temple Place - Suite 330, 00018 Boston, MA 02111-1307, 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"
KDE Logo
This file is part of the documentation for kdeui Library Version 3.4.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Apr 12 22:56:20 2005 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003