24 #include <QFontMetrics>
25 #include <QStyleOptionViewItem>
26 #include <QModelIndex>
28 #include <QLinearGradient>
30 QAbstractItemDelegate( parent ),
32 mpCheckBox( new QCheckBox() )
48 const QStyleOptionViewItem & theOption,
49 const QModelIndex & theIndex )
const
53 if ( qVariantCanConvert<QgsDetailedItemData>( theIndex.data( Qt::UserRole ) ) )
56 qVariantValue<QgsDetailedItemData>( theIndex.data( Qt::UserRole ) );
66 thepPainter->restore();
72 const QStyleOptionViewItem & theOption,
73 const QModelIndex & theIndex )
const
75 if ( qVariantCanConvert<QgsDetailedItemData>( theIndex.data( Qt::UserRole ) ) )
78 qVariantValue<QgsDetailedItemData>( theIndex.data( Qt::UserRole ) );
81 return QSize( 378,
mpWidget->height() );
86 return QSize( 50,
height( theOption, myData ) );
92 return QSize( 50, 50 );
97 const QStyleOptionViewItem & theOption,
113 QFontMetrics myTitleMetrics(
titleFont( theOption ) );
114 QFontMetrics myDetailMetrics(
detailFont( theOption ) );
122 if ( theOption.state & QStyle::State_Selected )
125 thepPainter->setPen( theOption.palette.highlightedText().color() );
129 thepPainter->setPen( theOption.palette.text().color() );
138 thepPainter->drawPixmap( theOption.rect.x(),
146 bool myIconFlag =
false;
147 QPixmap myDecoPixmap = theData.
icon();
148 if ( !myDecoPixmap.isNull() )
150 int iconWidth = 32, iconHeight = 32;
152 if ( myDecoPixmap.width() <= iconWidth && myDecoPixmap.height() <= iconHeight )
155 int offsetX = 0, offsetY = 0;
156 if ( myDecoPixmap.width() < iconWidth )
157 offsetX = ( iconWidth - myDecoPixmap.width() ) / 2;
158 if ( myDecoPixmap.height() < iconHeight )
159 offsetY = ( iconHeight - myDecoPixmap.height() ) / 2;
161 thepPainter->drawPixmap( myTextStartX + offsetX,
162 myTextStartY + offsetY,
168 thepPainter->drawPixmap( myTextStartX, myTextStartY, iconWidth, iconHeight, myDecoPixmap );
176 myTextStartY += myHeight / 2;
177 thepPainter->setFont(
titleFont( theOption ) );
178 thepPainter->drawText( myTextStartX,
184 thepPainter->setFont(
detailFont( theOption ) );
194 wordWrap( theData.
detail(), myDetailMetrics, theOption.rect.width() - myTextStartX );
195 QStringListIterator myLineWrapIterator( myList );
196 while ( myLineWrapIterator.hasNext() )
198 QString myLine = myLineWrapIterator.next();
199 thepPainter->drawText( myTextStartX,
208 const QStyleOptionViewItem & theOption,
215 mpWidget->setAutoFillBackground(
true );
218 if ( theOption.state & QStyle::State_Selected )
222 QPixmap myPixmap = QPixmap::grabWidget(
mpWidget );
223 thepPainter->drawPixmap( theOption.rect.x(),
229 QPainter * thepPainter,
230 int theHeight )
const
232 QColor myColor1 = theOption.palette.highlight().color();
233 QColor myColor2 = myColor1;
234 myColor2 = myColor2.lighter( 110 );
235 QLinearGradient myGradient( QPointF( 0, theOption.rect.y() ),
236 QPointF( 0, theOption.rect.y() + theHeight ) );
237 myGradient.setColorAt( 0, myColor1 );
238 myGradient.setColorAt( 0.1, myColor2 );
239 myGradient.setColorAt( 0.5, myColor1 );
240 myGradient.setColorAt( 0.9, myColor2 );
241 myGradient.setColorAt( 1, myColor2 );
242 thepPainter->fillRect( theOption.rect, QBrush( myGradient ) );
248 QFontMetrics myTitleMetrics(
titleFont( theOption ) );
249 QFontMetrics myDetailMetrics(
detailFont( theOption ) );
256 myHeight += ( myList.count() + 1 ) * ( myDetailMetrics.height() -
verticalSpacing() );
263 QFont myFont = theOption.font;
270 myTitleFont.setBold(
true );
271 myTitleFont.setPointSize( myTitleFont.pointSize() );
277 QFontMetrics theMetrics,
280 if ( theString.isEmpty() )
return QStringList();
281 if ( 50 >= theWidth )
return QStringList() << theString;
286 QString myCumulativeLine =
"";
287 QString myStringToPreviousSpace =
"";
288 int myPreviousSpacePos = 0;
289 for (
int i = 0; i < theString.count(); ++i )
291 QChar myChar = theString.at( i );
292 if ( myChar == QChar(
' ' ) )
294 myStringToPreviousSpace = myCumulativeLine;
295 myPreviousSpacePos = i;
297 myCumulativeLine += myChar;
298 if ( theMetrics.width( myCumulativeLine ) >= theWidth )
303 myList << myStringToPreviousSpace.trimmed();
304 i = myPreviousSpacePos;
305 myStringToPreviousSpace =
"";
306 myCumulativeLine =
"";
310 if ( !myCumulativeLine.trimmed().isEmpty() )
312 myList << myCumulativeLine.trimmed();