kmail 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 #ifdef HAVE_CONFIG_H 00022 #include <config.h> 00023 #endif 00024 00025 #include <qpainter.h> 00026 00027 #include <kcolordialog.h> 00028 #include <kcolordrag.h> 00029 00030 #include "colorlistbox.h" 00031 00032 ColorListBox::ColorListBox( QWidget *parent, const char *name, WFlags f ) 00033 :KListBox( parent, name, f ), mCurrentOnDragEnter(-1) 00034 { 00035 connect( this, SIGNAL(selected(int)), this, SLOT(newColor(int)) ); 00036 setAcceptDrops( true); 00037 } 00038 00039 00040 void ColorListBox::setEnabled( bool state ) 00041 { 00042 if( state == isEnabled() ) 00043 { 00044 return; 00045 } 00046 00047 QListBox::setEnabled( state ); 00048 for( uint i=0; i<count(); i++ ) 00049 { 00050 updateItem( i ); 00051 } 00052 } 00053 00054 00055 void ColorListBox::setColor( uint index, const QColor &color ) 00056 { 00057 if( index < count() ) 00058 { 00059 ColorListItem *colorItem = (ColorListItem*)item(index); 00060 colorItem->setColor(color); 00061 updateItem( colorItem ); 00062 emit changed(); 00063 } 00064 } 00065 00066 00067 QColor ColorListBox::color( uint index ) const 00068 { 00069 if( index < count() ) 00070 { 00071 ColorListItem *colorItem = (ColorListItem*)item(index); 00072 return( colorItem->color() ); 00073 } 00074 else 00075 { 00076 return( black ); 00077 } 00078 } 00079 00080 00081 void ColorListBox::newColor( int index ) 00082 { 00083 if( isEnabled() == false ) 00084 { 00085 return; 00086 } 00087 00088 if( (uint)index < count() ) 00089 { 00090 QColor c = color( index ); 00091 if( KColorDialog::getColor( c, this ) != QDialog::Rejected ) 00092 { 00093 setColor( index, c ); 00094 } 00095 } 00096 } 00097 00098 00099 void ColorListBox::dragEnterEvent( QDragEnterEvent *e ) 00100 { 00101 if( KColorDrag::canDecode(e) && isEnabled() ) 00102 { 00103 mCurrentOnDragEnter = currentItem(); 00104 e->accept( true ); 00105 } 00106 else 00107 { 00108 mCurrentOnDragEnter = -1; 00109 e->accept( false ); 00110 } 00111 } 00112 00113 00114 void ColorListBox::dragLeaveEvent( QDragLeaveEvent * ) 00115 { 00116 if( mCurrentOnDragEnter != -1 ) 00117 { 00118 setCurrentItem( mCurrentOnDragEnter ); 00119 mCurrentOnDragEnter = -1; 00120 } 00121 } 00122 00123 00124 void ColorListBox::dragMoveEvent( QDragMoveEvent *e ) 00125 { 00126 if( KColorDrag::canDecode(e) && isEnabled() ) 00127 { 00128 ColorListItem *item = (ColorListItem*)itemAt( e->pos() ); 00129 if( item != 0 ) 00130 { 00131 setCurrentItem ( item ); 00132 } 00133 } 00134 } 00135 00136 00137 void ColorListBox::dropEvent( QDropEvent *e ) 00138 { 00139 QColor color; 00140 if( KColorDrag::decode( e, color ) ) 00141 { 00142 int index = currentItem(); 00143 if( index != -1 ) 00144 { 00145 ColorListItem *colorItem = (ColorListItem*)item(index); 00146 colorItem->setColor(color); 00147 triggerUpdate( false ); // Redraw item 00148 } 00149 mCurrentOnDragEnter = -1; 00150 } 00151 } 00152 00153 00154 00155 ColorListItem::ColorListItem( const QString &text, const QColor &color ) 00156 : QListBoxItem(), mColor( color ), mBoxWidth( 30 ) 00157 { 00158 setText( text ); 00159 } 00160 00161 00162 const QColor &ColorListItem::color( void ) 00163 { 00164 return( mColor ); 00165 } 00166 00167 00168 void ColorListItem::setColor( const QColor &color ) 00169 { 00170 mColor = color; 00171 } 00172 00173 00174 void ColorListItem::paint( QPainter *p ) 00175 { 00176 QFontMetrics fm = p->fontMetrics(); 00177 int h = fm.height(); 00178 00179 p->drawText( mBoxWidth+3*2, fm.ascent() + fm.leading()/2, text() ); 00180 00181 p->setPen( Qt::black ); 00182 p->drawRect( 3, 1, mBoxWidth, h-1 ); 00183 p->fillRect( 4, 2, mBoxWidth-2, h-3, mColor ); 00184 } 00185 00186 00187 int ColorListItem::height(const QListBox *lb ) const 00188 { 00189 return( lb->fontMetrics().lineSpacing()+1 ); 00190 } 00191 00192 00193 int ColorListItem::width(const QListBox *lb ) const 00194 { 00195 return( mBoxWidth + lb->fontMetrics().width( text() ) + 6 ); 00196 } 00197 00198 #include "colorlistbox.moc"
KDE Logo
This file is part of the documentation for kmail Library Version 3.3.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Thu Oct 21 19:46:44 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003