kitchensync Library API Documentation

partbar.cpp

00001 /* 00002 This file is part of KitchenSync. 00003 00004 Copyright (c) 2002 Holger Freyther <zecke@handhelds.org> 00005     Copyright (c) 2002 Maximilian Reiß <harlekin@handhelds.org> 00006 00007 This library is free software; you can redistribute it and/or 00008 modify it under the terms of the GNU Library General Public 00009 License as published by the Free Software Foundation; either 00010 version 2 of the License, or (at your option) any later version. 00011 00012 This library is distributed in the hope that it will be useful, 00013 but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00015 Library General Public License for more details. 00016 00017 You should have received a copy of the GNU Library General Public License 00018 along with this library; see the file COPYING.LIB. If not, write to 00019 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 00020 Boston, MA 02111-1307, USA. 00021 */ 00022 00023 #include <qpainter.h> 00024 #include <qdrawutil.h> 00025 00026 #include <kiconloader.h> 00027 #include <kdebug.h> 00028 00029 #include "actionpart.h" 00030 #include "partbar.h" 00031 00032 using namespace KSync; 00033 00034 PartBarItem::PartBarItem( PartBar *parent, ActionPart *part ) 00035 : QListBoxPixmap( KIconLoader::unknown() ) 00036 { 00037 m_Parents = parent; 00038 m_Part = part; 00039 m_Pixmap = m_Part->pixmap(); 00040 setCustomHighlighting( true ); 00041 setText( part->title() ); 00042 //tooltip(part->description() ); 00043 } 00044 00045 PartBarItem::~PartBarItem() 00046 { 00047 } 00048 00049 ActionPart *PartBarItem::part() 00050 { 00051 return m_Part; 00052 } 00053 00054 //QString PartBarItem::toolTip() const { 00055 // return ( m_Part->description() ); 00056 //} 00057 00058 int PartBarItem::width( const QListBox *listbox) const 00059 { 00060 return listbox->viewport()->width(); 00061 } 00062 00063 int PartBarItem::height( const QListBox *listbox) const 00064 { 00065 int min = 0; 00066 min = listbox->fontMetrics().lineSpacing() + pixmap()->height() + 6; 00067 return min; 00068 } 00069 00070 void PartBarItem::paint(QPainter *p) 00071 { 00072 QListBox *box = listBox(); 00073 int w = width( box ); 00074 static const int margin = 3; 00075 int y = margin; 00076 const QPixmap *pm = pixmap(); 00077 00078 if ( !pm->isNull() ) { 00079 int x = (w - pm->width()) / 2; 00080 x = QMAX( x, margin ); 00081 p->drawPixmap( x, y, *pm ); 00082 } 00083 00084 if ( !text().isEmpty() ) { 00085 QFontMetrics fm = p->fontMetrics(); 00086 y += pm->height() + fm.height() - fm.descent(); 00087 int x = (w - fm.width( text() )) / 2; 00088 x = QMAX( x, margin ); 00089 p->drawText( x, y, text() ); 00090 } 00091 // draw sunken 00092 if ( isCurrent() || isSelected() ) { 00093 qDrawShadePanel( p, 1, 0, w -2, height(box), 00094 box->colorGroup(), true, 1, 0 ); 00095 } 00096 } 00097 00098 00099 PartBar::PartBar(QWidget *parent, const char *name, WFlags f) 00100 : QFrame ( parent, name, f ), 00101 m_listBox( 0 ), 00102 m_activeItem ( 0 ) 00103 { 00104 setListBox( 0 ); 00105 setSizePolicy( QSizePolicy( QSizePolicy::Maximum, QSizePolicy::Preferred ) ); 00106 } 00107 00108 PartBarItem *PartBar::insertItem( ActionPart *part, int pos ) 00109 { 00110 // kdDebug(5210) << part->name() << "\n" << part->description() << "\n"; 00111 PartBarItem *item = new PartBarItem( this , part ); 00112 m_listBox->insertItem( item, pos ); 00113 return item; 00114 } 00115 00116 void PartBar::setListBox(KListBox *view) 00117 { 00118 delete m_listBox; 00119 00120 if ( !view ) { 00121 m_listBox = new KListBox( this ); 00122 } else { 00123 m_listBox = view; 00124 if ( m_listBox->parentWidget() != this ) { 00125 m_listBox->reparent( this, QPoint( 0, 0 ) ); 00126 } 00127 m_listBox->resize( width(), height() ); 00128 } 00129 00130 m_listBox->setSelectionMode( KListBox::Single ); 00131 QPalette pal = palette(); 00132 QColor gray = pal.color(QPalette::Normal, QColorGroup::Mid ); 00133 pal.setColor( QPalette::Normal, QColorGroup::Base, gray ); 00134 pal.setColor( QPalette::Inactive, QColorGroup::Base, gray ); 00135 00136 setPalette( pal ); 00137 m_listBox->viewport()->setBackgroundMode( PaletteMid); 00138 00139 connect( m_listBox, SIGNAL( clicked ( QListBoxItem * ) ), 00140 SLOT( slotSelected( QListBoxItem * ) ) ); 00141 } 00142 00143 void PartBar::clear() 00144 { 00145 m_listBox->clear(); 00146 } 00147 00148 void PartBar::resizeEvent( QResizeEvent *e ) 00149 { 00150 QFrame::resizeEvent( e ); 00151 m_listBox->resize( width(), height() ); 00152 } 00153 00154 QSize PartBar::sizeHint() const 00155 { 00156 int w = 0; 00157 int h = 0; 00158 00159 QListBoxItem *item; 00160 00161 for ( item = m_listBox->firstItem(); item; item = item->next() ) { 00162 w = QMAX(w , item->width( m_listBox )); 00163 h += item->height( m_listBox ); 00164 } 00165 00166 if (m_listBox->verticalScrollBar()->isVisible() ) { 00167 w += m_listBox->verticalScrollBar()->width(); 00168 } 00169 00170 if ( w == 0 && h == 0) { 00171 return QSize( 100, 200 ); 00172 } else { 00173 return QSize( 6 + w , h ); 00174 } 00175 } 00176 00177 QSize PartBar::minimumSizeHint() const 00178 { 00179 QSize s = sizeHint(); 00180 int h = s.height() + m_listBox->horizontalScrollBar()->height(); 00181 int w = s.width() + m_listBox->verticalScrollBar()->width(); 00182 return QSize( w, h ); 00183 } 00184 00185 void PartBar::slotSelected( QListBoxItem *item ) 00186 { 00187 if ( item && item != m_activeItem ) { 00188 PartBarItem* it = static_cast<PartBarItem*>( item ); 00189 m_activeItem = it; 00190 emit activated( it->part() ); 00191 } 00192 } 00193 00194 PartBarItem * PartBar::currentItem() const 00195 { 00196 QListBoxItem *item = m_listBox->item( m_listBox->currentItem() ); 00197 if ( item ) { 00198 return static_cast<PartBarItem *>( item ); 00199 } else { 00200 return 0; 00201 } 00202 } 00203 00204 void PartBar::selectPart( const QString &name ) 00205 { 00206 for( uint i = 0; i < m_listBox->count(); ++i ) { 00207 PartBarItem *item = static_cast<PartBarItem *>( m_listBox->item( i ) ); 00208 if ( item->part()->name() == name ) { 00209 m_listBox->setSelected( item, true ); 00210 slotSelected( item ); 00211 break; 00212 } 00213 } 00214 } 00215 00216 #include "partbar.moc"
KDE Logo
This file is part of the documentation for kitchensync Library Version 3.3.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Fri Aug 27 12:50:49 2004 by doxygen 1.3.8 written by Dimitri van Heesch, © 1997-2003