libkdegames
kchatbaseitemdelegate.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "kchatbaseitemdelegate.h"
00021 #include "kchatbasemodel.h"
00022
00023 #include <kdebug.h>
00024 #include <klocale.h>
00025 #include <QPainter>
00026
00027 KChatBaseItemDelegate::KChatBaseItemDelegate(QObject *parent) :
00028 QAbstractItemDelegate(parent)
00029 {
00030 }
00031
00032 KChatBaseItemDelegate::~KChatBaseItemDelegate()
00033 {
00034 }
00035
00036 void KChatBaseItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
00037 const QModelIndex &index) const
00038 {
00039
00040 KChatBaseMessage m = index.model()->data(index, Qt::DisplayRole).value<KChatBaseMessage>();
00041 paint(painter, option, index,m.first, m.second);
00042 }
00043
00044 void KChatBaseItemDelegate::paint(QPainter *painter,
00045 const QStyleOptionViewItem &option,
00046 const QModelIndex &index,
00047 const QString& sender,
00048 const QString& message) const
00049 {
00050
00051 QFontMetrics fm = painter->fontMetrics();
00052 painter->setFont(((KChatBaseModel*)index.model())->nameFont());
00053 painter->drawText(option.rect.x(),
00054 QFontMetrics(option.font).height()+option.rect.y(), i18n("%1: ",sender));
00055 painter->setFont(((KChatBaseModel*)index.model())->messageFont());
00056 painter->drawText(option.rect.x() + 3 + QFontMetrics(((KChatBaseModel*)index.model())->nameFont()).width(i18n("%1: ",sender)),
00057 QFontMetrics(option.font).height()+option.rect.y(), message);
00058 }
00059
00060 QSize KChatBaseItemDelegate::sizeHint(const QStyleOptionViewItem & option ,
00061 const QModelIndex & index ) const
00062 {
00063
00064 KChatBaseMessage m = index.model()->data(index, Qt::DisplayRole).value<KChatBaseMessage>();
00065 return sizeHint(option, index, m.first, m.second);
00066 }
00067
00068 QSize KChatBaseItemDelegate::sizeHint(const QStyleOptionViewItem & option ,
00069 const QModelIndex & index,
00070 const QString& sender,
00071 const QString& message ) const
00072 {
00073
00074 int w = 0;
00075 w += 6;
00076 w += QFontMetrics(option.font).width(sender+i18n("%1: ",sender));
00077 w += QFontMetrics(option.font).width(message);
00078 int h = 0;
00079 h += 2;
00080 if (QFontMetrics(((KChatBaseModel*)index.model())->nameFont()).lineSpacing() >
00081 QFontMetrics(((KChatBaseModel*)index.model())->messageFont()).lineSpacing())
00082 {
00083 h += QFontMetrics(((KChatBaseModel*)index.model())->nameFont()).lineSpacing();
00084 }
00085 else
00086 {
00087 h += QFontMetrics(((KChatBaseModel*)index.model())->messageFont()).lineSpacing();
00088 }
00089 return QSize(w,h);
00090 }
00091
00092 #include "kchatbaseitemdelegate.moc"