File indexing completed on 2024-12-08 04:34:36
0001 /* 0002 SPDX-FileCopyrightText: 2024 Laurent Montel <montel@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 #include "switchchanneldelegate.h" 0008 #include "common/delegatepaintutil.h" 0009 #include "misc/avatarcachemanager.h" 0010 #include "model/switchchannelhistorymodel.h" 0011 #include "rocketchataccount.h" 0012 0013 #include <QPainter> 0014 0015 namespace 0016 { 0017 constexpr uint padding = 4; 0018 } 0019 0020 SwitchChannelDelegate::SwitchChannelDelegate(QObject *parent) 0021 : QItemDelegate(parent) 0022 , mAvatarCacheManager(new AvatarCacheManager(Utils::AvatarType::Room, this)) 0023 { 0024 mAvatarCacheManager->setMaxEntries(15); 0025 } 0026 0027 SwitchChannelDelegate::~SwitchChannelDelegate() = default; 0028 0029 void SwitchChannelDelegate::setCurrentRocketChatAccount(RocketChatAccount *currentRocketChatAccount) 0030 { 0031 mAvatarCacheManager->setCurrentRocketChatAccount(currentRocketChatAccount); 0032 mAvatarCacheManager->clearCache(); 0033 mRocketChatAccount = currentRocketChatAccount; 0034 } 0035 0036 void SwitchChannelDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const 0037 { 0038 // [M] <icon> [M] <name> 0039 drawBackground(painter, option, index); 0040 const QString text = index.data(SwitchChannelHistoryModel::Name).toString(); 0041 const int margin = DelegatePaintUtil::margin(); 0042 int xPos = 0; 0043 const Utils::AvatarInfo info = index.data(SwitchChannelHistoryModel::AvatarInfo).value<Utils::AvatarInfo>(); 0044 if (info.isValid()) { 0045 const QRect displayRect(margin, option.rect.y(), option.rect.height(), option.rect.height()); 0046 const QPixmap pix = mAvatarCacheManager->makeAvatarPixmap(option.widget, info, option.rect.height()); 0047 if (!pix.isNull()) { 0048 drawDecoration(painter, option, displayRect, pix); 0049 xPos = margin + option.rect.height(); 0050 } 0051 } 0052 const int xText = option.rect.x() + margin + xPos; 0053 0054 const QRect displayRect(xText, option.rect.y(), option.rect.width() - xText, option.rect.height()); 0055 drawDisplay(painter, option, displayRect, text); 0056 } 0057 0058 QSize SwitchChannelDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const 0059 { 0060 return QItemDelegate::sizeHint(option, index) + QSize(0, padding); 0061 } 0062 0063 #include "moc_switchchanneldelegate.cpp"