status-desktop/ui/app/AppLayouts/Chat/components/MessageContextMenu.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
}
}