kaddressbook Library API Documentation

colorlistbox.cpp

00001 /* 00002 * kmail: KDE mail client 00003 * This file: Copyright (C) 2000 Espen Sand, espen@kde.org 00004 * 00005 * This program is free software; you can redistribute it and/or modify 00006 * it under the terms of the GNU General Public License as published by 00007 * the Free Software Foundation; either version 2 of the License, or 00008 * (at your option) any later version. 00009 * 00010 * This program 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 00013 * GNU General Public License for more details. 00014 * 00015 * You should have received a copy of the GNU General Public License 00016 * along with this program; if not, write to the Free Software 00017 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 00018 * 00019 */ 00020 00021 #include <qpainter.h> 00022 00023 #include <kcolordialog.h> 00024 #include <kcolordrag.h> 00025 00026 #include "colorlistbox.h" 00027 00028 ColorListBox::ColorListBox( QWidget *parent, const char *name, WFlags f ) 00029 :KListBox( parent, name, f ), mCurrentOnDragEnter(-1) 00030 { 00031 connect( this, SIGNAL(selected(int)), this, SLOT(newColor(int)) ); 00032 setAcceptDrops( true); 00033 } 00034 00035 00036 void ColorListBox::setEnabled( bool state ) 00037 { 00038 if( state == isEnabled() ) 00039 { 00040 return; 00041 } 00042 00043 QListBox::setEnabled( state ); 00044 for( uint i=0; i<count(); i++ ) 00045 { 00046 updateItem( i ); 00047 } 00048 } 00049 00050 00051 void ColorListBox::setColor( uint index, const QColor &color ) 00052 { 00053 if( index < count() ) 00054 { 00055 ColorListItem *colorItem = (ColorListItem*)item(index); 00056 colorItem->setColor(color); 00057 updateItem( colorItem ); 00058 } 00059 } 00060 00061 00062 QColor ColorListBox::color( uint index ) const 00063 { 00064 if( index < count() ) 00065 { 00066 ColorListItem *colorItem = (ColorListItem*)item(index); 00067 return( colorItem->color() ); 00068 } 00069 else 00070 { 00071 return( black ); 00072 } 00073 } 00074 00075 00076 void ColorListBox::newColor( int index ) 00077 { 00078 if( isEnabled() == false ) 00079 { 00080 return; 00081 } 00082 00083 if( (uint)index < count() ) 00084 { 00085 QColor c = color( index ); 00086 if( KColorDialog::getColor( c, this ) != QDialog::Rejected ) 00087 { 00088 setColor( index, c ); 00089 } 00090 } 00091 } 00092 00093 00094 void ColorListBox::dragEnterEvent( QDragEnterEvent *e ) 00095 { 00096 if( KColorDrag::canDecode(e) && isEnabled() ) 00097 { 00098 mCurrentOnDragEnter = currentItem(); 00099 e->accept( true ); 00100 } 00101 else 00102 { 00103 mCurrentOnDragEnter = -1; 00104 e->accept( false ); 00105 } 00106 } 00107 00108 00109 void ColorListBox::dragLeaveEvent( QDragLeaveEvent * ) 00110 { 00111 if( mCurrentOnDragEnter != -1 ) 00112 { 00113 setCurrentItem( mCurrentOnDragEnter ); 00114 mCurrentOnDragEnter = -1; 00115 } 00116 } 00117 00118 00119 void ColorListBox::dragMoveEvent( QDragMoveEvent *e ) 00120 { 00121 if( KColorDrag::canDecode(e) && isEnabled() ) 00122 { 00123 ColorListItem *item = (ColorListItem*)itemAt( e->pos() ); 00124 if( item != 0 ) 00125 { 00126 setCurrentItem ( item ); 00127 } 00128 } 00129 } 00130 00131 00132 void ColorListBox::dropEvent( QDropEvent *e ) 00133 { 00134 QColor color; 00135 if( KColorDrag::decode( e, color ) ) 00136 { 00137 int index = currentItem(); 00138 if( index != -1 ) 00139 { 00140 ColorListItem *colorItem = (ColorListItem*)item(index); 00141 colorItem->setColor(color); 00142 triggerUpdate( false ); // Redraw item 00143 } 00144 mCurrentOnDragEnter = -1; 00145 } 00146 } 00147 00148 00149 00150 ColorListItem::ColorListItem( const QString &text, const QColor &color ) 00151 : QListBoxItem(), mColor( color ), mBoxWidth( 30 ) 00152 { 00153 setText( text ); 00154 } 00155 00156 00157 const QColor &ColorListItem::color( void ) 00158 { 00159 return( mColor ); 00160 } 00161 00162 00163 void ColorListItem::setColor( const QColor &color ) 00164 { 00165 mColor = color; 00166 } 00167 00168 00169 void ColorListItem::paint( QPainter *p ) 00170 { 00171 QFontMetrics fm = p->fontMetrics(); 00172 int h = fm.height(); 00173 00174 p->drawText( mBoxWidth+3*2, fm.ascent() + fm.leading()/2, text() ); 00175 00176 p->setPen( Qt::black ); 00177 p->drawRect( 3, 1, mBoxWidth, h-1 ); 00178 p->fillRect( 4, 2, mBoxWidth-2, h-3, mColor ); 00179 } 00180 00181 00182 int ColorListItem::height(const QListBox *lb ) const 00183 { 00184 return( lb->fontMetrics().lineSpacing()+1 ); 00185 } 00186 00187 00188 int ColorListItem::width(const QListBox *lb ) const 00189 { 00190 return( mBoxWidth + lb->fontMetrics().width( text() ) + 6 ); 00191 } 00192 00193 #include "colorlistbox.moc"
KDE Logo
This file is part of the documentation for kaddressbook Library Version 3.3.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Thu Oct 21 19:46:36 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003