summary refs log tree commit diff
path: root/resources/qml/UserProfile.qml
diff options
context:
space:
mode:
Diffstat (limited to 'resources/qml/UserProfile.qml')
-rw-r--r--resources/qml/UserProfile.qml258
1 files changed, 258 insertions, 0 deletions
diff --git a/resources/qml/UserProfile.qml b/resources/qml/UserProfile.qml
new file mode 100644

index 00000000..115a73c4 --- /dev/null +++ b/resources/qml/UserProfile.qml
@@ -0,0 +1,258 @@ +import QtQuick 2.9 +import QtQuick.Controls 2.3 +import QtQuick.Layouts 1.2 +import QtQuick.Window 2.3 + +import im.nheko 1.0 + +import "./device-verification" + +ApplicationWindow{ + property var profile + + id: userProfileDialog + height: 650 + width: 420 + modality: Qt.WindowModal + Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter + palette: colors + + Connections{ + target: deviceVerificationList + onUpdateProfile: { + profile.fetchDeviceList(profile.userid) + } + } + + Component { + id: deviceVerificationDialog + DeviceVerification {} + } + Component{ + id: deviceVerificationFlow + DeviceVerificationFlow {} + } + + background: Item{ + id: userProfileItem + width: userProfileDialog.width + height: userProfileDialog.height + + // Layout.fillHeight : true + + ColumnLayout{ + anchors.fill: userProfileItem + width: userProfileDialog.width + spacing: 10 + + Avatar { + url: profile.avatarUrl.replace("mxc://", "image://MxcImage/") + height: 130 + width: 130 + displayName: profile.displayName + userid: profile.userid + Layout.alignment: Qt.AlignHCenter + Layout.margins : { + top: 10 + } + } + + Label { + text: profile.displayName + fontSizeMode: Text.HorizontalFit + font.pixelSize: 20 + color: TimelineManager.userColor(profile.userid, colors.window) + font.bold: true + Layout.alignment: Qt.AlignHCenter + } + + Label { + text: profile.userid + fontSizeMode: Text.HorizontalFit + font.pixelSize: 15 + color: colors.text + Layout.alignment: Qt.AlignHCenter + } + + Button { + id: verifyUserButton + text: "Verify" + Layout.alignment: Qt.AlignHCenter + enabled: profile.isUserVerified?false:true + visible: profile.isUserVerified?false:true + palette { + button: "white" + } + contentItem: Text { + text: verifyUserButton.text + color: "black" + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + onClicked: { + var newFlow = profile.createFlow(true); + newFlow.userId = profile.userid; + newFlow.sender = true; + deviceVerificationList.add(newFlow.tranId); + var dialog = deviceVerificationDialog.createObject(userProfileDialog, {flow: newFlow,isRequest: true}); + dialog.show(); + } + } + + RowLayout { + Layout.alignment: Qt.AlignHCenter + ImageButton { + image:":/icons/icons/ui/do-not-disturb-rounded-sign.png" + Layout.margins: { + left: 5 + right: 5 + } + ToolTip.visible: hovered + ToolTip.text: qsTr("Ban the user") + onClicked : { + profile.banUser() + } + } + // ImageButton{ + // image:":/icons/icons/ui/volume-off-indicator.png" + // Layout.margins: { + // left: 5 + // right: 5 + // } + // ToolTip.visible: hovered + // ToolTip.text: qsTr("Ignore messages from this user") + // onClicked : { + // profile.ignoreUser() + // } + // } + ImageButton{ + image:":/icons/icons/ui/black-bubble-speech.png" + Layout.margins: { + left: 5 + right: 5 + } + ToolTip.visible: hovered + ToolTip.text: qsTr("Start a private chat") + onClicked : { + profile.startChat() + } + } + ImageButton{ + image:":/icons/icons/ui/round-remove-button.png" + Layout.margins: { + left: 5 + right: 5 + } + ToolTip.visible: hovered + ToolTip.text: qsTr("Kick the user") + onClicked : { + profile.kickUser() + } + } + } + + ScrollView { + implicitHeight: userProfileDialog.height/2-13 + implicitWidth: userProfileDialog.width-20 + clip: true + Layout.alignment: Qt.AlignHCenter + + ListView{ + id: devicelist + anchors.fill: parent + clip: true + spacing: 4 + + model: profile.deviceList + + delegate: RowLayout{ + width: parent.width + Layout.margins : { + top : 50 + } + ColumnLayout{ + Text{ + Layout.fillWidth: true + color: colors.text + font.bold: true + Layout.alignment: Qt.AlignLeft + text: model.deviceId + } + Text{ + Layout.fillWidth: true + color:colors.text + Layout.alignment: Qt.AlignRight + text: model.deviceName + } + } + RowLayout{ + Image{ + Layout.preferredWidth: 20 + Layout.preferredHeight: 20 + source: ((model.verificationStatus == VerificationStatus.VERIFIED)?"image://colorimage/:/icons/icons/ui/lock.png?green": + ((model.verificationStatus == VerificationStatus.UNVERIFIED)?"image://colorimage/:/icons/icons/ui/unlock.png?yellow": + "image://colorimage/:/icons/icons/ui/unlock.png?red")) + } + Button{ + id: verifyButton + text:(model.verificationStatus != VerificationStatus.VERIFIED)?"Verify":"Unverify" + onClicked: { + var newFlow = profile.createFlow(false); + newFlow.userId = profile.userid; + newFlow.sender = true; + newFlow.deviceId = model.deviceId; + if(model.verificationStatus == VerificationStatus.VERIFIED){ + newFlow.unverify(); + deviceVerificationList.updateProfile(newFlow.userId); + }else{ + deviceVerificationList.add(newFlow.tranId); + var dialog = deviceVerificationDialog.createObject(userProfileDialog, {flow: newFlow,isRequest:false}); + dialog.show(); + } + } + Layout.margins:{ + right: 10 + } + palette { + button: "white" + } + contentItem: Text { + text: verifyButton.text + color: "black" + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + } + } + } + } + } + + Button{ + id: okbutton + text:"OK" + onClicked: userProfileDialog.close() + + Layout.alignment: Qt.AlignRight | Qt.AlignBottom + + Layout.margins : { + right : 10 + bottom: 5 + } + + palette { + button: "white" + } + + contentItem: Text { + text: okbutton.text + color: "black" + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + } + } + + Item { Layout.fillHeight: true } + } +}