147 lines
4.4 KiB
QML
147 lines
4.4 KiB
QML
import QtQuick 2.12
|
|
import QtQuick.Controls 2.3
|
|
import QtQuick.Layouts 1.3
|
|
import QtQml.Models 2.3
|
|
import "../../../../imports"
|
|
import "../../../../shared"
|
|
import "../../../../shared/status"
|
|
import "./"
|
|
|
|
PopupMenu {
|
|
property bool isProfile: false
|
|
property bool isSticker: false
|
|
property bool emojiOnly: false
|
|
|
|
id: messageContextMenu
|
|
width: messageContextMenu.isProfile ? profileHeader.width : emojiContainer.width
|
|
|
|
property var identicon: ""
|
|
property var userName: ""
|
|
property string nickname: ""
|
|
property var fromAuthor: ""
|
|
property var text: ""
|
|
|
|
function show(userNameParam, fromAuthorParam, identiconParam, textParam, nicknameParam) {
|
|
userName = userNameParam || ""
|
|
nickname = nicknameParam || ""
|
|
fromAuthor = fromAuthorParam || ""
|
|
identicon = identiconParam || ""
|
|
text = textParam || ""
|
|
popup();
|
|
}
|
|
|
|
Item {
|
|
id: emojiContainer
|
|
visible: messageContextMenu.emojiOnly || !messageContextMenu.isProfile
|
|
width: emojiRow.width
|
|
height: visible ? emojiRow.height : 0
|
|
|
|
Row {
|
|
id: emojiRow
|
|
spacing: Style.current.smallPadding
|
|
leftPadding: Style.current.smallPadding
|
|
rightPadding: Style.current.smallPadding
|
|
bottomPadding: messageContextMenu.emojiOnly ? 0 : Style.current.padding
|
|
|
|
Repeater {
|
|
model: reactionModel
|
|
delegate: EmojiReaction {
|
|
source: "../../../img/" + filename
|
|
emojiId: model.emojiId
|
|
closeModal: function () {
|
|
messageContextMenu.close()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
Rectangle {
|
|
property bool hovered: false
|
|
|
|
id: profileHeader
|
|
visible: messageContextMenu.isProfile
|
|
width: 200
|
|
height: visible ? profileImage.height + username.height + Style.current.padding : 0
|
|
color: hovered ? Style.current.secondaryBackground : Style.current.transparent
|
|
|
|
StatusImageIdenticon {
|
|
id: profileImage
|
|
source: identicon
|
|
anchors.top: parent.top
|
|
anchors.topMargin: 4
|
|
anchors.horizontalCenter: parent.horizontalCenter
|
|
}
|
|
|
|
StyledText {
|
|
id: username
|
|
text: Utils.removeStatusEns(userName)
|
|
horizontalAlignment: Text.AlignHCenter
|
|
wrapMode: Text.WordWrap
|
|
anchors.top: profileImage.bottom
|
|
anchors.topMargin: 4
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: Style.current.smallPadding
|
|
anchors.right: parent.right
|
|
anchors.rightMargin: Style.current.smallPadding
|
|
font.weight: Font.Medium
|
|
font.pixelSize: 15
|
|
}
|
|
|
|
MouseArea {
|
|
cursorShape: Qt.PointingHandCursor
|
|
anchors.fill: parent
|
|
hoverEnabled: true
|
|
onEntered: {
|
|
profileHeader.hovered = true
|
|
}
|
|
onExited: {
|
|
profileHeader.hovered = false
|
|
}
|
|
onClicked: {
|
|
openProfilePopup(userName, fromAuthor, identicon);
|
|
messageContextMenu.close()
|
|
}
|
|
}
|
|
}
|
|
|
|
Separator {
|
|
anchors.bottom: viewProfileAction.top
|
|
visible: !messageContextMenu.emojiOnly
|
|
}
|
|
|
|
Action {
|
|
id: viewProfileAction
|
|
//% "View profile"
|
|
text: qsTrId("view-profile")
|
|
onTriggered: {
|
|
openProfilePopup(userName, fromAuthor, identicon);
|
|
messageContextMenu.close()
|
|
}
|
|
icon.source: "../../../img/profileActive.svg"
|
|
icon.width: 16
|
|
icon.height: 16
|
|
enabled: !emojiOnly
|
|
}
|
|
Action {
|
|
text: messageContextMenu.isProfile ?
|
|
//% "Send message"
|
|
qsTrId("send-message") :
|
|
//% "Reply to"
|
|
qsTrId("reply-to")
|
|
onTriggered: {
|
|
if (messageContextMenu.isProfile) {
|
|
appMain.changeAppSection(Constants.chat)
|
|
chatsModel.joinChat(fromAuthor, Constants.chatTypeOneToOne)
|
|
} else {
|
|
showReplyArea()
|
|
}
|
|
messageContextMenu.close()
|
|
}
|
|
icon.source: "../../../img/messageActive.svg"
|
|
icon.width: 16
|
|
icon.height: 16
|
|
enabled: !isSticker && !emojiOnly
|
|
}
|
|
}
|