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"