Warning, /network/tokodon/src/content/ui/UserInfo.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2022 Tobias Fella <fella@posteo.de>
0002 // SPDX-License-Identifier: GPL-2.0-or-later
0003
0004 import QtQuick
0005 import QtQuick.Controls 2 as QQC2
0006 import QtQuick.Layouts
0007 import org.kde.kirigami 2 as Kirigami
0008 import org.kde.kirigamiaddons.delegates 1 as Delegates
0009 import org.kde.kirigamiaddons.labs.components 1 as KirigamiComponents
0010
0011 import org.kde.tokodon
0012
0013 QQC2.Pane {
0014 id: userInfo
0015
0016 property alias accountsListVisible: accounts.visible
0017 property var addAccount
0018
0019 visible: AccountManager.selectedAccount
0020 padding: 0
0021
0022 function openAccountPage() {
0023 const accountId = AccountManager.selectedAccountId;
0024 if (!pageStack.currentItem.model || !pageStack.currentItem.model.accountId || accountId !== pageStack.currentItem.accountId) {
0025 const item = pageStack.push(Qt.createComponent("org.kde.tokodon", "AccountInfo"), {
0026 accountId: accountId,
0027 });
0028 }
0029 }
0030
0031 contentItem: ColumnLayout {
0032 id: content
0033
0034 spacing: 0
0035
0036 Delegates.RoundedItemDelegate {
0037 id: currentAccountDelegate
0038
0039 readonly property string name: {
0040 if (!AccountManager.selectedAccount) {
0041 return '';
0042 }
0043
0044 if (AccountManager.selectedAccount.identity.displayNameHtml.length !== 0) {
0045 return AccountManager.selectedAccount.identity.displayNameHtml;
0046 }
0047
0048 return AccountManager.selectedAccount.username;
0049 }
0050
0051 text: name
0052
0053 onClicked: openAccountPage()
0054 Layout.fillWidth: true
0055
0056 contentItem: RowLayout {
0057 spacing: Kirigami.Units.smallSpacing
0058
0059 QQC2.AbstractButton {
0060 Layout.preferredHeight: Kirigami.Units.iconSizes.medium
0061 Layout.preferredWidth: Kirigami.Units.iconSizes.medium
0062 Layout.leftMargin: Kirigami.Units.smallSpacing
0063 Layout.rightMargin: Kirigami.Units.smallSpacing
0064
0065 contentItem: KirigamiComponents.Avatar {
0066 name: currentAccountDelegate.name
0067 source: AccountManager.selectedAccount ? AccountManager.selectedAccount.identity.avatarUrl : ''
0068 }
0069
0070 onClicked: openAccountPage()
0071 }
0072
0073 Delegates.SubtitleContentItem {
0074 subtitle: AccountManager.selectedAccount ? AccountManager.selectedAccount.instanceName : ''
0075 subtitleItem.textFormat: Text.PlainText
0076 itemDelegate: currentAccountDelegate
0077 Layout.fillWidth: true
0078 }
0079
0080 QQC2.ToolButton {
0081 icon.name: "system-switch-user"
0082 onClicked: {
0083 userInfo.accountsListVisible = !userInfo.accountsListVisible
0084 }
0085 text: i18n("Switch Account")
0086 display: QQC2.AbstractButton.IconOnly
0087 QQC2.ToolTip.text: text
0088 QQC2.ToolTip.visible: hovered
0089 QQC2.ToolTip.delay: Kirigami.Units.toolTipDelay
0090 Layout.minimumWidth: Layout.preferredWidth
0091 }
0092 }
0093 }
0094
0095 ListView {
0096 id: accounts
0097
0098 model: AccountManager
0099 currentIndex: AccountManager.selectedIndex
0100
0101 header: Kirigami.Separator {
0102 anchors {
0103 left: parent.left
0104 leftMargin: Kirigami.Units.smallSpacing
0105
0106 right: parent.right
0107 rightMargin: Kirigami.Units.smallSpacing
0108 }
0109 }
0110
0111 footer: Delegates.RoundedItemDelegate {
0112 id: addAccountDelegaze
0113
0114 width: parent.width
0115 highlighted: focus
0116 icon {
0117 name: "list-add"
0118 width: Kirigami.Units.iconSizes.medium
0119 height: Kirigami.Units.iconSizes.medium
0120 }
0121 text: i18n("Add Account")
0122 enabled: AccountManager.hasAccounts && applicationWindow().pageStack.depth > 0 && applicationWindow().pageStack.get(0).objectName !== 'loginPage' && applicationWindow().pageStack.get(0).objectName !== 'authorizationPage' && (applicationWindow().pageStack.layers.depth === 1 || applicationWindow().pageStack.layers.get(1).objectName !== 'loginPage' && applicationWindow().pageStack.layers.get(1).objectName !== 'authorizationPage')
0123
0124 contentItem: Delegates.SubtitleContentItem {
0125 itemDelegate: addAccountDelegaze
0126 subtitle: i18n("Log in to an existing account")
0127 }
0128
0129 onClicked: {
0130 pageStack.pushDialogLayer(Qt.createComponent("org.kde.tokodon", "WelcomePage"));
0131 userInfo.accountsListVisible = false
0132 accounts.currentIndex = AccountManager.selectedIndex
0133 }
0134
0135 Component.onCompleted: userInfo.addAccount = this
0136 Keys.onUpPressed: {
0137 accounts.currentIndex = accounts.count - 1
0138 accounts.forceActiveFocus()
0139 }
0140 Keys.onDownPressed: {
0141 accounts.currentIndex = 0
0142 accounts.forceActiveFocus()
0143 }
0144 }
0145
0146 visible: false
0147 onVisibleChanged: if (visible) focus = true
0148 clip: true
0149
0150 keyNavigationEnabled: false
0151 Keys.onDownPressed: {
0152 if (accounts.currentIndex === accounts.count - 1) {
0153 addAccount.forceActiveFocus()
0154 accounts.currentIndex = -1
0155 } else {
0156 accounts.incrementCurrentIndex()
0157 }
0158 }
0159 Keys.onUpPressed: {
0160 if (accounts.currentIndex === 0) {
0161 addAccount.forceActiveFocus()
0162 accounts.currentIndex = -1
0163 } else {
0164 accounts.decrementCurrentIndex()
0165 }
0166 }
0167
0168 Keys.onReleased: if (event.key == Qt.Key_Escape) {
0169 userInfo.accountsListVisible = false
0170 }
0171
0172 Layout.fillWidth: true
0173 Layout.preferredHeight: contentHeight
0174 Layout.topMargin: Kirigami.Units.smallSpacing
0175
0176 delegate: Delegates.RoundedItemDelegate {
0177 id: accountDelegate
0178
0179 required property int index
0180 required property string displayName
0181 required property string instance
0182 required property var account
0183
0184 text: displayName
0185
0186 contentItem: RowLayout {
0187 spacing: Kirigami.Units.smallSpacing
0188
0189 KirigamiComponents.Avatar {
0190 source: accountDelegate.account.identity.avatarUrl
0191 name: accountDelegate.displayName
0192 Layout.preferredHeight: Kirigami.Units.iconSizes.medium
0193 Layout.preferredWidth: Kirigami.Units.iconSizes.medium
0194 Layout.leftMargin: Kirigami.Units.smallSpacing
0195 Layout.rightMargin: Kirigami.Units.smallSpacing
0196 }
0197
0198 Delegates.SubtitleContentItem {
0199 itemDelegate: accountDelegate
0200 subtitleItem.textFormat: Text.PlainText
0201 subtitle: accountDelegate.instance
0202 Layout.fillWidth: true
0203 }
0204 }
0205
0206 onClicked: {
0207 if (AccountManager.selectedAccount !== accountDelegate.account) {
0208 AccountManager.selectedAccount = accountDelegate.account;
0209 accounts.currentIndex = accountDelegate.index;
0210 }
0211 userInfo.accountsListVisible = false
0212 }
0213 }
0214 }
0215
0216 }
0217 }