nheko/resources/qml/TopBar.qml

196 lines
6.1 KiB
QML
Raw Normal View History

2021-03-05 00:35:15 +01:00
// SPDX-FileCopyrightText: 2021 Nheko Contributors
//
2021-03-05 00:35:15 +01:00
// SPDX-License-Identifier: GPL-3.0-or-later
2021-03-14 22:22:52 +01:00
import Qt.labs.platform 1.1 as Platform
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.2
import im.nheko 1.0
Rectangle {
id: topBar
2021-06-08 22:18:51 +02:00
property bool showBackButton: false
property string roomName: room ? room.roomName : qsTr("No room selected")
2021-09-08 02:38:39 +02:00
property string roomId: room ? room.roomId : ""
property string avatarUrl: room ? room.roomAvatarUrl : ""
property string roomTopic: room ? room.roomTopic : ""
property bool isEncrypted: room ? room.isEncrypted : false
property int trustlevel: room ? room.trustlevel : Crypto.Unverified
2021-09-08 02:38:39 +02:00
property bool isDirect: room ? room.isDirect : false
property string directChatOtherUserId: room ? room.directChatOtherUserId : ""
2021-06-08 22:18:51 +02:00
Layout.fillWidth: true
2021-05-14 23:35:34 +02:00
implicitHeight: topLayout.height + Nheko.paddingMedium * 2
z: 3
2021-05-13 08:23:56 +02:00
color: Nheko.colors.window
2021-03-14 22:22:52 +01:00
TapHandler {
2021-04-11 22:24:39 +02:00
onSingleTapped: {
if (room) {
let p = topBar.mapToItem(roomTopicC, eventPoint.position.x, eventPoint.position.y);
let link = roomTopicC.linkAt(p.x, p.y);
if (link) {
Nheko.openLink(link);
} else {
TimelineManager.openRoomSettings(room.roomId);
}
}
2021-04-11 22:24:39 +02:00
eventPoint.accepted = true;
}
gesturePolicy: TapHandler.ReleaseWithinBounds
}
HoverHandler {
grabPermissions: PointerHandler.TakeOverForbidden | PointerHandler.CanTakeOverFromAnything
//cursorShape: Qt.PointingHandCursor
}
2021-11-19 00:28:47 +01:00
CursorShape {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
}
GridLayout {
id: topLayout
anchors.left: parent.left
anchors.right: parent.right
2021-05-14 23:35:34 +02:00
anchors.margins: Nheko.paddingMedium
anchors.verticalCenter: parent.verticalCenter
ImageButton {
id: backToRoomsButton
Layout.column: 0
Layout.row: 0
Layout.rowSpan: 2
Layout.alignment: Qt.AlignVCenter
Layout.preferredHeight: Nheko.avatarSize - Nheko.paddingMedium
Layout.preferredWidth: Nheko.avatarSize - Nheko.paddingMedium
2021-06-08 22:18:51 +02:00
visible: showBackButton
2021-11-14 02:23:10 +01:00
image: ":/icons/icons/ui/angle-arrow-left.svg"
ToolTip.visible: hovered
ToolTip.text: qsTr("Back to room list")
2021-06-08 22:18:51 +02:00
onClicked: Rooms.resetCurrentRoom()
}
Avatar {
Layout.column: 1
Layout.row: 0
Layout.rowSpan: 2
Layout.alignment: Qt.AlignVCenter
2021-05-13 11:32:20 +02:00
width: Nheko.avatarSize
height: Nheko.avatarSize
url: avatarUrl.replace("mxc://", "image://MxcImage/")
2021-09-08 02:38:39 +02:00
roomid: roomId
userid: isDirect ? directChatOtherUserId : ""
displayName: roomName
enabled: false
}
Label {
Layout.fillWidth: true
Layout.column: 2
Layout.row: 0
2021-05-13 08:23:56 +02:00
color: Nheko.colors.text
font.pointSize: fontMetrics.font.pointSize * 1.1
text: roomName
2020-12-13 16:05:48 +01:00
maximumLineCount: 1
2021-04-27 11:08:21 +02:00
elide: Text.ElideRight
textFormat: Text.RichText
}
MatrixText {
id: roomTopicC
Layout.fillWidth: true
Layout.column: 2
Layout.row: 1
Layout.maximumHeight: fontMetrics.lineSpacing * 2 // show 2 lines
selectByMouse: false
enabled: false
clip: true
text: roomTopic
}
EncryptionIndicator {
Layout.column: 3
Layout.row: 0
Layout.rowSpan: 2
Layout.preferredHeight: Nheko.avatarSize - Nheko.paddingMedium
Layout.preferredWidth: Nheko.avatarSize - Nheko.paddingMedium
sourceSize.height: Layout.preferredHeight
sourceSize.width: Layout.preferredWidth
visible: isEncrypted
encrypted: isEncrypted
trust: trustlevel
ToolTip.text: {
if (!encrypted)
return qsTr("This room is not encrypted!");
switch (trust) {
case Crypto.Verified:
return qsTr("This room contains only verified devices.");
case Crypto.TOFU:
2021-10-19 18:25:59 +02:00
return qsTr("This room contains verified devices and devices which have never changed their master key.");
default:
return qsTr("This room contains unverified devices!");
}
}
}
ImageButton {
id: roomOptionsButton
visible: !!room
Layout.column: 4
Layout.row: 0
Layout.rowSpan: 2
Layout.alignment: Qt.AlignVCenter
Layout.preferredHeight: Nheko.avatarSize - Nheko.paddingMedium
Layout.preferredWidth: Nheko.avatarSize - Nheko.paddingMedium
2021-11-14 02:23:10 +01:00
image: ":/icons/icons/ui/options.svg"
ToolTip.visible: hovered
ToolTip.text: qsTr("Room options")
2021-03-14 22:22:52 +01:00
onClicked: roomOptionsMenu.open(roomOptionsButton)
2021-03-14 22:22:52 +01:00
Platform.Menu {
id: roomOptionsMenu
2021-03-14 22:22:52 +01:00
Platform.MenuItem {
visible: room ? room.permissions.canInvite() : false
text: qsTr("Invite users")
2021-09-08 02:38:39 +02:00
onTriggered: TimelineManager.openInviteUsers(roomId)
}
2021-03-14 22:22:52 +01:00
Platform.MenuItem {
text: qsTr("Members")
2021-08-13 23:58:26 +02:00
onTriggered: TimelineManager.openRoomMembers(room)
}
2021-03-14 22:22:52 +01:00
Platform.MenuItem {
text: qsTr("Leave room")
2021-09-08 02:38:39 +02:00
onTriggered: TimelineManager.openLeaveRoomDialog(roomId)
}
2021-03-14 22:22:52 +01:00
Platform.MenuItem {
text: qsTr("Settings")
2021-09-08 02:38:39 +02:00
onTriggered: TimelineManager.openRoomSettings(roomId)
}
}
}
}
CursorShape {
anchors.fill: parent
cursorShape: Qt.PointingHandCursor
}
}