1 /*
2 This file is part of the KDE games library
3 SPDX-FileCopyrightText: 2007 Gael de Chalendar (aka Kleag) <kleag@free.fr>
4
5 SPDX-License-Identifier: LGPL-2.0-only
6 */
7
8 #include "kchatbaseitemdelegate.h"
9
10 // own
11 #include "kchatbasemodel.h"
12 // KF
13 #include <KLocalizedString>
14 // Qt
15 #include <QPainter>
16 #include <QDebug>
17
KChatBaseItemDelegate(QObject * parent)18 KChatBaseItemDelegate::KChatBaseItemDelegate(QObject *parent) :
19 QAbstractItemDelegate(parent)
20 {
21 }
22
~KChatBaseItemDelegate()23 KChatBaseItemDelegate::~KChatBaseItemDelegate()
24 {
25 }
26
paint(QPainter * painter,const QStyleOptionViewItem & option,const QModelIndex & index) const27 void KChatBaseItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
28 const QModelIndex &index) const
29 {
30 // qDebug() << "KChatBaseItemDelegate::paint";
31 KChatBaseMessage m = index.model()->data(index, Qt::DisplayRole).value<KChatBaseMessage>();
32 paint(painter, option, index,m.first, m.second);
33 }
34
paint(QPainter * painter,const QStyleOptionViewItem & option,const QModelIndex & index,const QString & sender,const QString & message) const35 void KChatBaseItemDelegate::paint(QPainter *painter,
36 const QStyleOptionViewItem &option,
37 const QModelIndex &index,
38 const QString& sender,
39 const QString& message) const
40 {
41 // qDebug() << "KChatBaseItemDelegate::paint";
42 painter->setFont(((KChatBaseModel*)index.model())->nameFont());
43 painter->drawText(option.rect.x(),
44 QFontMetrics(option.font).height()+option.rect.y(), i18n("%1: ",sender));
45 painter->setFont(((KChatBaseModel*)index.model())->messageFont());
46 painter->drawText(option.rect.x() + 3 + QFontMetrics(((KChatBaseModel*)index.model())->nameFont()).boundingRect(i18n("%1: ",sender)).width(),
47 QFontMetrics(option.font).height()+option.rect.y(), message);
48 }
49
sizeHint(const QStyleOptionViewItem & option,const QModelIndex & index) const50 QSize KChatBaseItemDelegate::sizeHint(const QStyleOptionViewItem & option ,
51 const QModelIndex & index ) const
52 {
53 // qDebug() << "KChatBaseItemDelegate::sizeHint";
54 KChatBaseMessage m = index.model()->data(index, Qt::DisplayRole).value<KChatBaseMessage>();
55 return sizeHint(option, index, m.first, m.second);
56 }
57
sizeHint(const QStyleOptionViewItem & option,const QModelIndex & index,const QString & sender,const QString & message) const58 QSize KChatBaseItemDelegate::sizeHint(const QStyleOptionViewItem & option ,
59 const QModelIndex & index,
60 const QString& sender,
61 const QString& message ) const
62 {
63 // qDebug() << "KChatBaseItemDelegate::sizeHint";
64 int w = 0;
65 w += 6;
66 w += QFontMetrics(option.font).boundingRect(sender+i18n("%1: ",sender)).width();
67 w += QFontMetrics(option.font).boundingRect(message).width();
68 int h = 0;
69 h += 2;
70 if (QFontMetrics(((KChatBaseModel*)index.model())->nameFont()).lineSpacing() >
71 QFontMetrics(((KChatBaseModel*)index.model())->messageFont()).lineSpacing())
72 {
73 h += QFontMetrics(((KChatBaseModel*)index.model())->nameFont()).lineSpacing();
74 }
75 else
76 {
77 h += QFontMetrics(((KChatBaseModel*)index.model())->messageFont()).lineSpacing();
78 }
79 return QSize(w,h);
80 }
81
82
83