moment/src/gui/Base/HUserAvatar.qml

100 lines
3.0 KiB
QML
Raw Normal View History

2019-12-19 22:46:16 +11:00
// SPDX-License-Identifier: LGPL-3.0-or-later
import QtQuick 2.12
HAvatar {
property string userId
property string displayName
property string presence: ""
2019-11-30 19:59:02 +11:00
property int powerLevel: 0
property bool shiftMembershipIconPosition: true
property bool invited: false
2019-11-30 19:59:02 +11:00
readonly property bool admin: powerLevel >= 100
readonly property bool moderator: powerLevel >= 50 && ! admin
name: displayName || userId.substring(1) // no leading @
title: "user_" + userId + ".avatar"
2019-11-30 19:59:02 +11:00
HLoader {
active: admin || moderator || invited
2019-11-30 19:59:02 +11:00
anchors.top: parent.top
anchors.left: parent.left
anchors.topMargin: shiftMembershipIconPosition ? -16 / 2 : 0
2019-11-30 19:59:02 +11:00
anchors.leftMargin: anchors.topMargin
z: 100
Behavior on anchors.topMargin { HNumberAnimation {} }
2019-11-30 19:59:02 +11:00
sourceComponent: HIcon {
2019-12-05 00:08:38 +11:00
small: true
svgName:
invited ? "user-invited" :
admin ? "user-power-100" :
"user-power-50"
2019-11-30 19:59:02 +11:00
colorize:
2020-03-13 16:09:04 +11:00
invited ? theme.chat.roomPane.listView.member.invitedIcon :
admin ? theme.chat.roomPane.listView.member.adminIcon :
theme.chat.roomPane.listView.member.moderatorIcon
HoverHandler { id: membershipIcon }
2019-11-30 19:59:02 +11:00
HToolTip {
visible: membershipIcon.hovered
text:
invited ? qsTr("Invited") :
admin ? qsTr("Admin (%1 power)").arg(powerLevel) :
qsTr("Moderator (%1 power)").arg(powerLevel)
2019-11-30 19:59:02 +11:00
}
}
}
HLoader {
property int diameter:
window.settings.compactMode ?
theme.controls.presence.radius * 2 :
theme.controls.presence.radius * 2.5
active: presence && presence !== "offline"
anchors.bottom: parent.bottom
anchors.right: parent.right
anchors.bottomMargin: -diameter / 2
anchors.rightMargin: -diameter / 2
2020-06-30 12:20:37 +10:00
opacity: theme.controls.presence.opacity
z: 300
sourceComponent: Rectangle {
width: diameter
height: diameter
anchors.bottom: parent.bottom
anchors.right: parent.right
radius: diameter / 2
opacity: presence.includes("echo") ? 0.4 : 1
color:
presence.includes("online") ?
2020-06-30 12:20:37 +10:00
theme.controls.presence.online :
presence.includes("unavailable") ?
2020-06-30 12:20:37 +10:00
theme.controls.presence.unavailable :
theme.controls.presence.offline
border.color: theme.controls.presence.border
border.width: theme.controls.presence.borderWidth
2020-06-30 12:20:37 +10:00
Behavior on color { HColorAnimation {} }
Behavior on opacity { HNumberAnimation {} }
2020-06-30 12:20:37 +10:00
HoverHandler { id: presenceHover }
HToolTip {
visible: presenceHover.hovered && ! presence.includes("echo")
text: qsTr(presence.replace(/^\w/, c => c.toUpperCase()))
2020-06-30 12:20:37 +10:00
}
}
}
}