Added optional display status icon from friendslist context menu

This commit is contained in:
defnax 2024-06-24 23:36:45 +02:00
parent 3461da7c3a
commit 56b6b0cb5a
5 changed files with 70 additions and 5 deletions

View file

@ -65,7 +65,7 @@ static const uint32_t NODE_DETAILS_UPDATE_DELAY = 5; // update each node every 5
RsFriendListModel::RsFriendListModel(QObject *parent)
: QAbstractItemModel(parent)
, mDisplayGroups(true), mDisplayStatusString(true)
, mDisplayGroups(true), mDisplayStatusString(true), mDisplayStatusIcon (false)
, mLastInternalDataUpdate(0), mLastNodeUpdate(0)
{
mFilterStrings.clear();
@ -141,6 +141,24 @@ template<> bool RsFriendListModel::convertInternalIdToIndex<8>(quintptr ref,Entr
return true;
}
static QIcon createAvatar(const QPixmap &avatar, const QPixmap &overlay)
{
int avatarWidth = avatar.width();
int avatarHeight = avatar.height();
QPixmap pixmap(avatar);
int overlaySize = (avatarWidth > avatarHeight) ? (avatarWidth/2.5) : (avatarHeight/2.5);
int overlayX = avatarWidth - overlaySize;
int overlayY = avatarHeight - overlaySize;
QPainter painter(&pixmap);
painter.drawPixmap(overlayX, overlayY, overlaySize, overlaySize, overlay);
QIcon icon;
icon.addPixmap(pixmap);
return icon;
}
void RsFriendListModel::setDisplayStatusString(bool b)
{
@ -148,6 +166,12 @@ void RsFriendListModel::setDisplayStatusString(bool b)
postMods();
}
void RsFriendListModel::setDisplayStatusIcon(bool b)
{
mDisplayStatusIcon = b;
postMods();
}
void RsFriendListModel::setDisplayGroups(bool b)
{
mDisplayGroups = b;
@ -908,14 +932,23 @@ QVariant RsFriendListModel::decorationRole(const EntryIndex& entry,int col) cons
if(!isProfileExpanded(entry))
{
QPixmap sslAvatar = FilesDefs::getPixmapFromQtResourcePath(AVATAR_DEFAULT_IMAGE);
QPixmap sslOverlayIcon;
sslOverlayIcon = FilesDefs::getPixmapFromQtResourcePath(StatusDefs::imageStatus(onlineRole(entry,col).toInt()));
const HierarchicalProfileInformation *hn = getProfileInfo(entry);
for(uint32_t i=0;i<hn->child_node_indices.size();++i)
if(AvatarDefs::getAvatarFromSslId(RsPeerId(mLocations[hn->child_node_indices[i]].node_info.id.toStdString()), sslAvatar))
return QVariant(QIcon(sslAvatar));
if (mDisplayStatusIcon)
return QVariant(QIcon(createAvatar(sslAvatar, sslOverlayIcon)));
else
return QVariant(QIcon(sslAvatar));
return QVariant(QIcon(sslAvatar));
if (mDisplayStatusIcon)
return QVariant(QIcon(createAvatar(sslAvatar, sslOverlayIcon)));
else
return QVariant(QIcon(sslAvatar));
}
return QVariant();
@ -929,9 +962,14 @@ QVariant RsFriendListModel::decorationRole(const EntryIndex& entry,int col) cons
return QVariant();
QPixmap sslAvatar;
AvatarDefs::getAvatarFromSslId(RsPeerId(hn->node_info.id.toStdString()), sslAvatar);
QPixmap sslOverlayIcon;
sslOverlayIcon = FilesDefs::getPixmapFromQtResourcePath(StatusDefs::imageStatus(statusRole(entry,col).toInt()));
return QVariant(QIcon(sslAvatar));
AvatarDefs::getAvatarFromSslId(RsPeerId(hn->node_info.id.toStdString()), sslAvatar);
if (mDisplayStatusIcon)
return QVariant(QIcon(createAvatar(sslAvatar, sslOverlayIcon)));
else
return QVariant(QIcon(sslAvatar));
}
default: return QVariant();
}