KDevelop API Documentation

parts/replace/replaceitem.cpp

Go to the documentation of this file.
00001 /*************************************************************************** 00002 * Copyright (C) 2003 by Jens Dagerbo * 00003 * jens.dagerbo@swipnet.se * 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 ***************************************************************************/ 00011 00012 #include <qpainter.h> 00013 #include <qstyle.h> 00014 #include <qpalette.h> 00015 #include <qcheckbox.h> 00016 00017 #include "replaceitem.h" 00018 00019 bool ReplaceItem::s_listview_done = false; 00020 00021 00022 bool ReplaceItem::hasCheckedChildren() const 00023 { 00024 ReplaceItem const * item = firstChild(); 00025 while ( item ) 00026 { 00027 if ( item->isOn() ) 00028 { 00029 return true; 00030 } 00031 item = item->nextSibling(); 00032 } 00033 return false; 00034 } 00035 00036 void ReplaceItem::stateChange( bool state ) 00037 { 00038 if ( s_listview_done && justClicked() ) 00039 { 00040 setChecked( state ); 00041 } 00042 } 00043 00044 void ReplaceItem::setChecked( bool checked ) 00045 { 00046 if ( !isFile() ) // this is a child item 00047 { 00048 if ( checked || !(parent()->hasCheckedChildren())) 00049 { 00050 if ( parent()->isOn() != checked ) 00051 { 00052 parent()->_clicked = false; 00053 parent()->setOn( checked ); 00054 } 00055 } 00056 return; 00057 } 00058 00059 // this is a parent item, set self and children 00060 ReplaceItem * item = firstChild(); 00061 while ( item ) 00062 { 00063 if ( item->isOn() != checked ) 00064 { 00065 item->_clicked = false; 00066 item->setOn( checked ); 00067 } 00068 item = item->nextSibling(); 00069 } 00070 } 00071 00072 #if KDE_VERSION > 305 00073 // code mostly lifted from QCheckListItem::paintCell() 00074 void ReplaceItem::paintCell( QPainter * p, const QColorGroup & cg, int column, int width, int align ) 00075 { 00076 if ( !p ) 00077 return; 00078 00079 QListView *lvv = listView(); 00080 if ( !lvv ) 00081 return; 00082 00083 ReplaceView * lv = static_cast<ReplaceView*>(lvv); 00084 00085 const BackgroundMode bgmode = lv->viewport()->backgroundMode(); 00086 const QColorGroup::ColorRole crole = QPalette::backgroundRoleFromMode( bgmode ); 00087 00088 if ( cg.brush( crole ) != lv->colorGroup().brush( crole ) ) 00089 p->fillRect( 0, 0, width, height(), cg.brush( crole ) ); 00090 else 00091 lv->paintEmptyArea( p, QRect( 0, 0, width, height() ) ); 00092 00093 QFontMetrics fm( lv->fontMetrics() ); 00094 int boxsize = lv->style().pixelMetric(QStyle::PM_CheckListButtonSize, lv); 00095 int marg = lv->itemMargin(); 00096 int r = marg; 00097 00098 // Draw controller / checkbox / radiobutton --------------------- 00099 int styleflags = QStyle::Style_Default; 00100 if ( isOn() ) 00101 styleflags |= QStyle::Style_On; 00102 else 00103 styleflags |= QStyle::Style_Off; 00104 if ( isSelected() ) 00105 styleflags |= QStyle::Style_Selected; 00106 if ( isEnabled() && lv->isEnabled() ) 00107 styleflags |= QStyle::Style_Enabled; 00108 00109 int x = 0; 00110 int y = 0; 00111 00112 x += 3; 00113 00114 if ( align & AlignVCenter ) 00115 y = ( ( height() - boxsize ) / 2 ) + marg; 00116 00117 else 00118 y = (fm.height() + 2 + marg - boxsize) / 2; 00119 00120 lv->style().drawPrimitive(QStyle::PE_CheckListIndicator, p, 00121 QRect(x, y, boxsize, 00122 fm.height() + 2 + marg), 00123 cg, styleflags, QStyleOption(this)); 00124 00125 r += boxsize + 4; 00126 00127 // Draw text ---------------------------------------------------- 00128 p->translate( r, 0 ); 00129 p->setPen( QPen( cg.text() ) ); 00130 00131 QColorGroup mcg = cg; 00132 mcg.setColor( QColorGroup::Text, ( isFile() ? Qt::darkGreen : Qt::blue ) ); 00133 mcg.setColor( QColorGroup::HighlightedText, ( isFile() ? Qt::darkGreen : Qt::blue ) ); 00134 00135 QListViewItem::paintCell( p, mcg, column, width - r, align ); 00136 } 00137 #endif 00138 00139 void ReplaceItem::activate( int, QPoint const & localPos ) 00140 { 00141 QListView * lv = listView(); 00142 QCheckBox cb(0); 00143 int boxsize = cb.sizeHint().width(); 00144 //that's KDE-3.1 only int boxsize = lv->style().pixelMetric(QStyle::PM_CheckListButtonSize, lv); 00145 int rightside = lv->itemMargin() + boxsize + ( isFile() ? 0 : lv->treeStepSize() ); 00146 00147 // _lineclicked indicates if the click was on the line or in the checkbox 00148 _lineclicked = rightside < localPos.x(); 00149 }
KDE Logo
This file is part of the documentation for KDevelop Version 3.0.4.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Oct 19 08:01:52 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003