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