File indexing completed on 2024-05-12 04:06:10
0001 /* 0002 This file is part of the KDE games library 0003 SPDX-FileCopyrightText: 2007 Gael de Chalendar (aka Kleag) <kleag@free.fr> 0004 0005 SPDX-License-Identifier: LGPL-2.0-only 0006 */ 0007 0008 #include "kchatbaseitemdelegate.h" 0009 0010 // own 0011 #include "kchatbasemodel.h" 0012 // KF 0013 #include <KLocalizedString> 0014 // Qt 0015 #include <QPainter> 0016 0017 KChatBaseItemDelegate::KChatBaseItemDelegate(QObject *parent) 0018 : QAbstractItemDelegate(parent) 0019 { 0020 } 0021 0022 KChatBaseItemDelegate::~KChatBaseItemDelegate() 0023 { 0024 } 0025 0026 void KChatBaseItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const 0027 { 0028 // qDebug() << "KChatBaseItemDelegate::paint"; 0029 KChatBaseMessage m = index.model()->data(index, Qt::DisplayRole).value<KChatBaseMessage>(); 0030 paint(painter, option, index, m.first, m.second); 0031 } 0032 0033 void KChatBaseItemDelegate::paint(QPainter *painter, 0034 const QStyleOptionViewItem &option, 0035 const QModelIndex &index, 0036 const QString &sender, 0037 const QString &message) const 0038 { 0039 // qDebug() << "KChatBaseItemDelegate::paint"; 0040 painter->setFont(((KChatBaseModel *)index.model())->nameFont()); 0041 painter->drawText(option.rect.x(), QFontMetrics(option.font).height() + option.rect.y(), i18n("%1: ", sender)); 0042 painter->setFont(((KChatBaseModel *)index.model())->messageFont()); 0043 painter->drawText(option.rect.x() + 3 + QFontMetrics(((KChatBaseModel *)index.model())->nameFont()).boundingRect(i18n("%1: ", sender)).width(), 0044 QFontMetrics(option.font).height() + option.rect.y(), 0045 message); 0046 } 0047 0048 QSize KChatBaseItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const 0049 { 0050 // qDebug() << "KChatBaseItemDelegate::sizeHint"; 0051 KChatBaseMessage m = index.model()->data(index, Qt::DisplayRole).value<KChatBaseMessage>(); 0052 return sizeHint(option, index, m.first, m.second); 0053 } 0054 0055 QSize KChatBaseItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index, const QString &sender, const QString &message) const 0056 { 0057 // qDebug() << "KChatBaseItemDelegate::sizeHint"; 0058 int w = 0; 0059 w += 6; 0060 w += QFontMetrics(option.font).boundingRect(sender + i18n("%1: ", sender)).width(); 0061 w += QFontMetrics(option.font).boundingRect(message).width(); 0062 int h = 0; 0063 h += 2; 0064 if (QFontMetrics(((KChatBaseModel *)index.model())->nameFont()).lineSpacing() 0065 > QFontMetrics(((KChatBaseModel *)index.model())->messageFont()).lineSpacing()) { 0066 h += QFontMetrics(((KChatBaseModel *)index.model())->nameFont()).lineSpacing(); 0067 } else { 0068 h += QFontMetrics(((KChatBaseModel *)index.model())->messageFont()).lineSpacing(); 0069 } 0070 return QSize(w, h); 0071 } 0072 0073 #include "moc_kchatbaseitemdelegate.cpp"