matrixion/resources/qml/Root.qml

396 lines
10 KiB
QML
Raw Normal View History

// SPDX-FileCopyrightText: 2021 Nheko Contributors
// SPDX-FileCopyrightText: 2022 Nheko Contributors
// SPDX-FileCopyrightText: 2023 Nheko Contributors
//
// SPDX-License-Identifier: GPL-3.0-or-later
import "./delegates"
import "./device-verification"
import "./dialogs"
import "./emoji"
2022-01-09 08:56:02 +03:00
import "./pages"
import "./voip"
2022-01-30 21:14:33 +03:00
import "./ui"
import Qt.labs.platform 1.1 as Platform
import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.3
import QtQuick.Window 2.15
import im.nheko 1.0
import im.nheko.EmojiModel 1.0
2022-01-12 21:09:46 +03:00
Pane {
id: timelineRoot
palette: Nheko.colors
2022-01-12 21:09:46 +03:00
background: null
padding: 0
FontMetrics {
id: fontMetrics
}
RoomDirectoryModel {
id: publicRooms
}
//Timer {
// onTriggered: gc()
// interval: 1000
// running: true
// repeat: true
//}
EmojiPicker {
id: emojiPopup
colors: palette
model: TimelineManager.completerFor("allemoji", "")
}
2022-07-08 18:28:28 +03:00
function showAliasEditor(settings) {
2022-10-01 03:28:02 +03:00
var dialog = Qt.createComponent("qrc:/qml/dialogs/AliasEditor.qml").createObject(timelineRoot, {
2022-07-08 18:28:28 +03:00
"roomSettings": settings
});
dialog.show();
destroyOnClose(dialog);
}
function showPLEditor(settings) {
2022-10-01 03:28:02 +03:00
var dialog = Qt.createComponent("qrc:/qml/dialogs/PowerLevelEditor.qml").createObject(timelineRoot, {
2022-07-08 18:28:28 +03:00
"roomSettings": settings
});
dialog.show();
destroyOnClose(dialog);
}
2022-05-27 17:31:54 +03:00
function showSpacePLApplyPrompt(settings, editingModel) {
2022-10-01 03:28:02 +03:00
var dialog = Qt.createComponent("qrc:/qml/dialogs/PowerLevelSpacesApplyDialog.qml").createObject(timelineRoot, {
"roomSettings": settings,
"editingModel": editingModel
});
dialog.show();
destroyOnClose(dialog);
}
function showAllowedRoomsEditor(settings) {
2022-10-01 03:28:02 +03:00
var dialog = Qt.createComponent("qrc:/qml/dialogs/AllowedRoomsSettingsDialog.qml").createObject(timelineRoot, {
"roomSettings": settings
});
dialog.show();
destroyOnClose(dialog);
}
Component {
id: readReceiptsDialog
ReadReceipts {
}
}
2022-01-24 02:41:55 +03:00
Shortcut {
sequence: StandardKey.Quit
onActivated: Qt.quit()
}
Shortcut {
sequence: "Ctrl+K"
onActivated: {
2022-10-01 15:47:42 +03:00
var quickSwitch = Qt.createComponent("qrc:/qml/QuickSwitcher.qml").createObject(timelineRoot);
quickSwitch.open();
2022-03-01 03:59:06 +03:00
destroyOnClosed(quickSwitch);
}
}
Shortcut {
// Add alternative shortcut, because sometimes Alt+A is stolen by the TextEdit
sequences: ["Alt+A", "Ctrl+Shift+A"]
onActivated: Rooms.nextRoomWithActivity()
}
2021-05-29 00:25:57 +03:00
Shortcut {
sequence: "Ctrl+Down"
onActivated: Rooms.nextRoom()
2021-05-29 00:25:57 +03:00
}
2021-05-29 00:25:57 +03:00
Shortcut {
sequence: "Ctrl+Up"
onActivated: Rooms.previousRoom()
2021-05-29 00:25:57 +03:00
}
2021-09-30 03:15:25 +03:00
Connections {
function onOpenLogoutDialog() {
2022-10-01 03:28:02 +03:00
var dialog = Qt.createComponent("qrc:/qml/dialogs/LogoutDialog.qml").createObject(timelineRoot);
2021-09-30 03:15:25 +03:00
dialog.open();
destroyOnClose(dialog);
2021-09-30 03:15:25 +03:00
}
2021-09-25 04:32:06 +03:00
function onOpenJoinRoomDialog() {
2022-10-01 03:28:02 +03:00
var dialog = Qt.createComponent("qrc:/qml/dialogs/JoinRoomDialog.qml").createObject(timelineRoot);
2021-09-25 04:32:06 +03:00
dialog.show();
destroyOnClose(dialog);
2021-09-25 04:32:06 +03:00
}
function onShowRoomJoinPrompt(summary) {
2022-10-01 03:28:02 +03:00
var dialog = Qt.createComponent("qrc:/qml/dialogs/ConfirmJoinRoomDialog.qml").createObject(timelineRoot, {"summary": summary});
dialog.show();
destroyOnClose(dialog);
}
2021-09-30 03:15:25 +03:00
target: Nheko
}
Connections {
function onNewDeviceVerificationRequest(flow) {
2022-10-01 15:47:42 +03:00
var dialog = Qt.createComponent("qrc:/qml/device-verification/DeviceVerification.qml").createObject(timelineRoot, {
"flow": flow
});
dialog.show();
destroyOnClose(dialog);
}
target: VerificationManager
}
function destroyOnClose(obj) {
if (obj.closing != undefined) obj.closing.connect(() => obj.destroy(1000));
else if (obj.aboutToHide != undefined) obj.aboutToHide.connect(() => obj.destroy(1000));
}
2022-03-01 03:59:06 +03:00
function destroyOnClosed(obj) {
obj.aboutToHide.connect(() => obj.destroy(1000));
2022-03-01 03:59:06 +03:00
}
Connections {
function onOpenProfile(profile) {
2022-10-01 03:28:02 +03:00
var userProfile = Qt.createComponent("qrc:/qml/dialogs/UserProfile.qml").createObject(timelineRoot, {
"profile": profile
});
userProfile.show();
destroyOnClose(userProfile);
}
function onShowImagePackSettings(room, packlist) {
2022-10-01 03:28:02 +03:00
var packSet = Qt.createComponent("qrc:/qml/dialogs/ImagePackSettingsDialog.qml").createObject(timelineRoot, {
"room": room,
"packlist": packlist
});
packSet.show();
destroyOnClose(packSet);
}
2021-08-14 00:58:26 +03:00
function onOpenRoomMembersDialog(members, room) {
2022-10-01 03:28:02 +03:00
var membersDialog = Qt.createComponent("qrc:/qml/dialogs/RoomMembers.qml").createObject(timelineRoot, {
2021-06-11 03:13:12 +03:00
"members": members,
2021-08-14 00:58:26 +03:00
"room": room
2021-06-11 03:13:12 +03:00
});
membersDialog.show();
destroyOnClose(membersDialog);
2021-06-11 03:13:12 +03:00
}
function onOpenRoomSettingsDialog(settings) {
2022-10-01 03:28:02 +03:00
var roomSettings = Qt.createComponent("qrc:/qml/dialogs/RoomSettings.qml").createObject(timelineRoot, {
2021-06-11 03:13:12 +03:00
"roomSettings": settings
});
roomSettings.show();
destroyOnClose(roomSettings);
2021-06-11 03:13:12 +03:00
}
function onOpenInviteUsersDialog(invitees) {
2022-10-01 03:28:02 +03:00
var dialog = Qt.createComponent("qrc:/qml/dialogs/InviteDialog.qml").createObject(timelineRoot, {
2021-07-17 23:16:18 +03:00
"roomId": Rooms.currentRoom.roomId,
2021-07-21 02:17:20 +03:00
"plainRoomName": Rooms.currentRoom.plainRoomName,
2021-07-18 01:23:21 +03:00
"invitees": invitees
2021-07-17 23:16:18 +03:00
});
2021-06-11 03:13:12 +03:00
dialog.show();
destroyOnClose(dialog);
2021-06-11 03:13:12 +03:00
}
2022-03-31 00:38:38 +03:00
function onOpenLeaveRoomDialog(roomid, reason) {
2022-10-01 03:28:02 +03:00
var dialog = Qt.createComponent("qrc:/qml/dialogs/LeaveRoomDialog.qml").createObject(timelineRoot, {
2022-03-31 00:38:38 +03:00
"roomId": roomid,
"reason": reason
});
dialog.open();
destroyOnClose(dialog);
}
2022-05-10 04:19:53 +03:00
function onShowImageOverlay(room, eventId, url, originalWidth, proportionalHeight) {
2022-10-01 03:28:02 +03:00
var dialog = Qt.createComponent("qrc:/qml/dialogs/ImageOverlay.qml").createObject(timelineRoot, {
"room": room,
"eventId": eventId,
"url": url,
"originalWidth": originalWidth ?? 0,
"proportionalHeight": proportionalHeight ?? 0
});
2022-05-10 04:19:53 +03:00
dialog.showFullScreen();
destroyOnClose(dialog);
}
target: TimelineManager
}
Connections {
function onNewInviteState() {
if (CallManager.haveCallInvite && Settings.mobileMode) {
2022-10-01 15:47:42 +03:00
var dialog = Qt.createComponent("qrc:/qml/voip/CallInvite.qml").createObject(timelineRoot);
dialog.open();
destroyOnClose(dialog);
}
}
target: CallManager
2021-06-11 03:13:12 +03:00
}
SelfVerificationCheck {
}
InputDialog {
id: uiaPassPrompt
echoMode: TextInput.Password
title: UIA.title
prompt: qsTr("Please enter your login password to continue:")
onAccepted: (t) => {
return UIA.continuePassword(t);
}
}
InputDialog {
id: uiaEmailPrompt
title: UIA.title
prompt: qsTr("Please enter a valid email address to continue:")
onAccepted: (t) => {
return UIA.continueEmail(t);
}
}
PhoneNumberInputDialog {
id: uiaPhoneNumberPrompt
title: UIA.title
prompt: qsTr("Please enter a valid phone number to continue:")
onAccepted: (p, t) => {
return UIA.continuePhoneNumber(p, t);
}
}
InputDialog {
id: uiaTokenPrompt
title: UIA.title
prompt: qsTr("Please enter the token which has been sent to you:")
onAccepted: (t) => {
return UIA.submit3pidToken(t);
}
}
Platform.MessageDialog {
id: uiaErrorDialog
buttons: Platform.MessageDialog.Ok
}
Platform.MessageDialog {
id: uiaConfirmationLinkDialog
buttons: Platform.MessageDialog.Ok
text: qsTr("Wait for the confirmation link to arrive, then continue.")
onAccepted: UIA.continue3pidReceived()
}
Connections {
function onPassword() {
console.log("UIA: password needed");
uiaPassPrompt.show();
}
function onEmail() {
uiaEmailPrompt.show();
}
function onPhoneNumber() {
uiaPhoneNumberPrompt.show();
}
function onPrompt3pidToken() {
uiaTokenPrompt.show();
}
function onConfirm3pidToken() {
uiaConfirmationLinkDialog.open();
}
function onError(msg) {
uiaErrorDialog.text = msg;
uiaErrorDialog.open();
}
target: UIA
}
2022-01-09 02:28:03 +03:00
StackView {
id: mainWindow
anchors.fill: parent
2022-01-24 02:41:55 +03:00
initialItem: welcomePage
}
Component {
id: welcomePage
WelcomePage {
2022-01-09 02:28:03 +03:00
}
}
2022-01-12 21:09:46 +03:00
Component {
id: chatPage
ChatPage {
}
}
2022-01-24 02:41:55 +03:00
Component {
id: loginPage
LoginPage {
}
}
2022-01-28 17:24:56 +03:00
Component {
id: registerPage
RegisterPage {
2022-01-28 17:24:56 +03:00
}
}
2022-10-01 03:28:02 +03:00
Component {
id: userSettingsPage
UserSettingsPage {
}
}
2022-01-30 21:14:33 +03:00
Snackbar { id: snackbar }
2022-01-12 21:09:46 +03:00
Connections {
function onSwitchToChatPage() {
2022-01-24 02:41:55 +03:00
mainWindow.replace(null, chatPage);
}
function onSwitchToLoginPage(error) {
mainWindow.replace(welcomePage, {}, loginPage, {"error": error}, StackView.PopTransition);
2022-01-12 21:09:46 +03:00
}
2022-01-30 21:14:33 +03:00
function onShowNotification(msg) {
snackbar.showNotification(msg);
console.log("New snack: " + msg);
}
2022-01-12 21:09:46 +03:00
target: MainWindow
}
}