Port most Avatar usage to new KirigamiAddons Avatar

(cherry picked from commit 847f41e1ad)
This commit is contained in:
Carl Schwan
2023-07-21 11:17:15 +02:00
parent b380c74b0e
commit 410befa4bf
21 changed files with 263 additions and 174 deletions

View File

@@ -8,6 +8,7 @@ import QtQuick.Controls 2.15 as QQC2
import QtQuick.Templates 2.15 as T import QtQuick.Templates 2.15 as T
import org.kde.kirigami 2.20 as Kirigami import org.kde.kirigami 2.20 as Kirigami
import org.kde.kirigamiaddons.delegates 1.0 as Delegates import org.kde.kirigamiaddons.delegates 1.0 as Delegates
import org.kde.kirigamiaddons.labs.components 1.0 as KirigamiComponents
Delegates.RoundedItemDelegate { Delegates.RoundedItemDelegate {
id: root id: root
@@ -30,7 +31,7 @@ Delegates.RoundedItemDelegate {
onTapped: root.contextMenuRequested() onTapped: root.contextMenuRequested()
} }
contentItem: Kirigami.Avatar { contentItem: KirigamiComponents.Avatar {
source: root.source source: root.source
name: root.text name: root.text
} }

View File

@@ -8,6 +8,8 @@ import QtQuick.Controls 2.15 as QQC2
import Qt.labs.qmlmodels 1.0 import Qt.labs.qmlmodels 1.0
import org.kde.kirigami 2.15 as Kirigami import org.kde.kirigami 2.15 as Kirigami
import org.kde.kirigamiaddons.delegates 1.0 as Delegates
import org.kde.kirigamiaddons.labs.components 1.0 as KirigamiComponents
import org.kde.neochat 1.0 import org.kde.neochat 1.0
@@ -43,6 +45,7 @@ QQC2.Popup {
rightPadding: 0 rightPadding: 0
topPadding: 0 topPadding: 0
bottomPadding: 0 bottomPadding: 0
implicitHeight: Math.min(completions.contentHeight, Kirigami.Units.gridUnit * 10) implicitHeight: Math.min(completions.contentHeight, Kirigami.Units.gridUnit * 10)
contentItem: ListView { contentItem: ListView {
@@ -53,23 +56,35 @@ QQC2.Popup {
currentIndex: 0 currentIndex: 0
keyNavigationWraps: true keyNavigationWraps: true
highlightMoveDuration: 100 highlightMoveDuration: 100
delegate: Kirigami.BasicListItem { delegate: Delegates.RoundedItemDelegate {
text: model.text id: completionDelegate
subtitle: model.subtitle ?? ""
required property int index
required property string displayName
required property string subtitle
required property string iconName
text: displayName
contentItem: RowLayout {
KirigamiComponents.Avatar {
visible: completionDelegate.iconName !== "invalid"
Layout.preferredWidth: Kirigami.Units.iconSizes.medium
Layout.preferredHeight: Kirigami.Units.iconSizes.medium
source: completionDelegate.iconName === "invalid" ? "" : ("image://" + completionDelegate.iconName)
name: completionDelegate.text
}
Delegates.SubtitleContentItem {
itemDelegate: completionDelegate
labelItem.textFormat: Text.PlainText labelItem.textFormat: Text.PlainText
subtitle: completionDelegate.subtitle ?? ""
subtitleItem.textFormat: Text.PlainText subtitleItem.textFormat: Text.PlainText
leading: RowLayout {
Kirigami.Avatar {
visible: model.icon !== "invalid"
Layout.preferredWidth: height
Layout.fillHeight: true
source: model.icon === "invalid" ? "" : ("image://mxc/" + model.icon)
name: model.text
} }
} }
onClicked: completionMenu.chatDocumentHandler.complete(model.index) onClicked: completionMenu.chatDocumentHandler.complete(completionDelegate.index)
} }
} }
background: Rectangle { background: Rectangle {
color: Kirigami.Theme.backgroundColor color: Kirigami.Theme.backgroundColor
} }

View File

@@ -6,7 +6,8 @@ import QtQuick 2.15
import QtQuick.Layouts 1.15 import QtQuick.Layouts 1.15
import QtQuick.Controls 2.15 as QQC2 import QtQuick.Controls 2.15 as QQC2
import org.kde.kirigami 2.14 as Kirigami import org.kde.kirigami 2.15 as Kirigami
import org.kde.kirigamiaddons.labs.components 1.0 as KirigamiComponents
import org.kde.neochat 1.0 import org.kde.neochat 1.0
@@ -40,7 +41,7 @@ GridLayout {
implicitWidth: Kirigami.Units.smallSpacing implicitWidth: Kirigami.Units.smallSpacing
color: userColor color: userColor
} }
Kirigami.Avatar { KirigamiComponents.Avatar {
id: replyAvatar id: replyAvatar
implicitWidth: Kirigami.Units.iconSizes.small implicitWidth: Kirigami.Units.iconSizes.small

View File

@@ -9,6 +9,7 @@ import QtLocation 5.15
import QtPositioning 5.15 import QtPositioning 5.15
import org.kde.kirigami 2.15 as Kirigami import org.kde.kirigami 2.15 as Kirigami
import org.kde.kirigamiaddons.labs.components 1.0 as KirigamiComponents
import org.kde.neochat 1.0 import org.kde.neochat 1.0
@@ -44,7 +45,7 @@ MapQuickItem {
isMask: true isMask: true
color: parent.color color: parent.color
} }
Kirigami.Avatar { KirigamiComponents.Avatar {
anchors.centerIn: parent anchors.centerIn: parent
anchors.verticalCenterOffset: -parent.height / 8 anchors.verticalCenterOffset: -parent.height / 8
visible: root.asset === "m.self" visible: root.asset === "m.self"

View File

@@ -5,6 +5,7 @@ import QtQuick 2.15
import QtQuick.Controls 2.15 as QQC2 import QtQuick.Controls 2.15 as QQC2
import org.kde.kirigami 2.15 as Kirigami import org.kde.kirigami 2.15 as Kirigami
import org.kde.kirigamiaddons.labs.components 1.0 as KirigamiComponents
Flow { Flow {
id: root id: root
@@ -17,11 +18,11 @@ Flow {
spacing: -avatarSize / 2 spacing: -avatarSize / 2
Repeater { Repeater {
id: avatarFlowRepeater id: avatarFlowRepeater
delegate: Kirigami.Avatar { delegate: KirigamiComponents.Avatar {
topInset: Kirigami.Units.smallSpacing / 2 required property var modelData
topPadding: Kirigami.Units.smallSpacing / 2
implicitWidth: avatarSize implicitWidth: root.avatarSize
implicitHeight: avatarSize + Kirigami.Units.smallSpacing / 2 implicitHeight: root.avatarSize
name: modelData.displayName name: modelData.displayName
source: modelData.avatarSource source: modelData.avatarSource

View File

@@ -7,6 +7,7 @@ import QtQuick.Controls 2.15 as QQC2
import QtQuick.Layouts 1.15 import QtQuick.Layouts 1.15
import org.kde.kirigami 2.15 as Kirigami import org.kde.kirigami 2.15 as Kirigami
import org.kde.kirigamiaddons.labs.components 1.0 as KirigamiComponents
import org.kde.neochat 1.0 import org.kde.neochat 1.0
@@ -93,7 +94,7 @@ Item {
implicitWidth: Kirigami.Units.smallSpacing implicitWidth: Kirigami.Units.smallSpacing
color: root.author.color color: root.author.color
} }
Kirigami.Avatar { KirigamiComponents.Avatar {
id: replyAvatar id: replyAvatar
implicitWidth: Kirigami.Units.iconSizes.small implicitWidth: Kirigami.Units.iconSizes.small

View File

@@ -6,6 +6,7 @@ import QtQuick.Controls 2.15 as QQC2
import QtQuick.Layouts 1.15 import QtQuick.Layouts 1.15
import org.kde.kirigami 2.15 as Kirigami import org.kde.kirigami 2.15 as Kirigami
import org.kde.kirigamiaddons.labs.components 1.0 as KirigamiComponents
import org.kde.neochat 1.0 import org.kde.neochat 1.0
@@ -21,14 +22,23 @@ RowLayout {
implicitHeight: Math.max(label.contentHeight, stateAvatar.implicitHeight) implicitHeight: Math.max(label.contentHeight, stateAvatar.implicitHeight)
Kirigami.Avatar { KirigamiComponents.Avatar {
id: stateAvatar id: stateAvatar
Layout.preferredWidth: Kirigami.Units.iconSizes.small Layout.preferredWidth: Kirigami.Units.iconSizes.small
Layout.preferredHeight: Kirigami.Units.iconSizes.small Layout.preferredHeight: Kirigami.Units.iconSizes.small
name: root.name name: root.name
color: root.color color: root.color
Rectangle {
radius: height
height: 4
width: 4
color: root.color
anchors.centerIn: parent
}
MouseArea { MouseArea {
anchors.fill: parent anchors.fill: parent
cursorShape: Qt.PointingHandCursor cursorShape: Qt.PointingHandCursor

View File

@@ -6,6 +6,7 @@ import QtQuick.Controls 2.15 as QQC2
import QtQuick.Layouts 1.15 import QtQuick.Layouts 1.15
import org.kde.kirigami 2.15 as Kirigami import org.kde.kirigami 2.15 as Kirigami
import org.kde.kirigamiaddons.labs.components 1.0 as KirigamiComponents
import org.kde.neochat 1.0 import org.kde.neochat 1.0
@@ -71,34 +72,61 @@ QQC2.Control {
Flow { Flow {
visible: columnLayout.folded visible: columnLayout.folded
spacing: -Kirigami.Units.iconSizes.small / 2 spacing: -Kirigami.Units.iconSizes.small / 2
Repeater { Repeater {
model: authorList model: authorList
delegate: Kirigami.Avatar { delegate: Item {
topInset: Kirigami.Units.smallSpacing / 2 id: avatarDelegate
topPadding: Kirigami.Units.smallSpacing / 2
required property var modelData
implicitWidth: Kirigami.Units.iconSizes.small implicitWidth: Kirigami.Units.iconSizes.small
implicitHeight: Kirigami.Units.iconSizes.small + Kirigami.Units.smallSpacing / 2 implicitHeight: Kirigami.Units.iconSizes.small + Kirigami.Units.smallSpacing / 2
name: modelData.displayName KirigamiComponents.Avatar {
source: modelData.avatarSource y: Kirigami.Units.smallSpacing / 2
color: modelData.color
implicitWidth: Kirigami.Units.iconSizes.small
implicitHeight: Kirigami.Units.iconSizes.small
name: parent.modelData.displayName
source: parent.modelData.avatarSource
color: parent.modelData.color
Rectangle {
radius: height
height: 4
width: 4
color: avatarDelegate.modelData.color
anchors.centerIn: parent
} }
} }
}
}
QQC2.Label { QQC2.Label {
id: excessAuthorsLabel id: excessAuthorsLabel
text: model.excessAuthors text: model.excessAuthors
visible: model.excessAuthors !== "" visible: model.excessAuthors !== ""
color: Kirigami.Theme.textColor color: Kirigami.Theme.textColor
horizontalAlignment: Text.AlignHCenter horizontalAlignment: Text.AlignHCenter
background: Kirigami.ShadowedRectangle { background: Kirigami.ShadowedRectangle {
color: Kirigami.Theme.backgroundColor
Kirigami.Theme.inherit: false Kirigami.Theme.inherit: false
Kirigami.Theme.colorSet: Kirigami.Theme.View Kirigami.Theme.colorSet: Kirigami.Theme.View
color: Kirigami.Theme.backgroundColor
radius: height / 2 radius: height / 2
shadow.size: Kirigami.Units.smallSpacing
shadow.color: Qt.rgba(Kirigami.Theme.textColor.r, Kirigami.Theme.textColor.g, Kirigami.Theme.textColor.b, 0.10) shadow {
border.color: Kirigami.ColorUtils.tintWithAlpha(color, Kirigami.Theme.textColor, 0.15) size: Kirigami.Units.smallSpacing
border.width: 1 color: Qt.rgba(Kirigami.Theme.textColor.r, Kirigami.Theme.textColor.g, Kirigami.Theme.textColor.b, 0.10)
}
border {
color: Kirigami.ColorUtils.tintWithAlpha(color, Kirigami.Theme.textColor, 0.15)
width: 1
}
} }
height: Kirigami.Units.iconSizes.small + Kirigami.Units.smallSpacing height: Kirigami.Units.iconSizes.small + Kirigami.Units.smallSpacing
@@ -125,13 +153,13 @@ QQC2.Control {
visible: !columnLayout.folded visible: !columnLayout.folded
} }
QQC2.ToolButton { QQC2.ToolButton {
icon.name: (!columnLayout.folded ? "go-up" : "go-down") icon {
icon.width: Kirigami.Units.iconSizes.small name: (!columnLayout.folded ? "go-up" : "go-down")
icon.height: Kirigami.Units.iconSizes.small width: Kirigami.Units.iconSizes.small
height: Kirigami.Units.iconSizes.small
onClicked: {
columnLayout.toggleFolded()
} }
onClicked: columnLayout.toggleFolded()
} }
} }
Repeater { Repeater {

View File

@@ -6,6 +6,7 @@ import QtQuick.Controls 2.15 as QQC2
import QtQuick.Layouts 1.15 import QtQuick.Layouts 1.15
import org.kde.kirigami 2.15 as Kirigami import org.kde.kirigami 2.15 as Kirigami
import org.kde.kirigamiaddons.labs.components 1.0 as KirigamiComponents
import org.kde.neochat 1.0 import org.kde.neochat 1.0
@@ -353,15 +354,10 @@ ColumnLayout {
} }
} }
Kirigami.Avatar { KirigamiComponents.Avatar {
id: avatar id: avatar
width: visible || Config.showAvatarInTimeline ? Kirigami.Units.gridUnit * 2 + Kirigami.Units.smallSpacing * 2 : 0 width: visible || Config.showAvatarInTimeline ? Kirigami.Units.gridUnit + Kirigami.Units.largeSpacing * 2: 0
height: width height: width
padding: Kirigami.Units.smallSpacing
topInset: Kirigami.Units.smallSpacing
bottomInset: Kirigami.Units.smallSpacing
leftInset: Kirigami.Units.smallSpacing
rightInset: Kirigami.Units.smallSpacing
anchors { anchors {
left: parent.left left: parent.left
leftMargin: Kirigami.Units.smallSpacing leftMargin: Kirigami.Units.smallSpacing

View File

@@ -7,6 +7,7 @@ import QtQuick.Controls 2.15 as QQC2
import QtQuick.Layouts 1.15 import QtQuick.Layouts 1.15
import org.kde.kirigami 2.20 as Kirigami import org.kde.kirigami 2.20 as Kirigami
import org.kde.kirigamiaddons.labs.components 1.0 as KirigamiComponents
import org.kde.neochat 1.0 import org.kde.neochat 1.0
@@ -37,7 +38,7 @@ Kirigami.OverlaySheet {
Layout.bottomMargin: Kirigami.Units.largeSpacing Layout.bottomMargin: Kirigami.Units.largeSpacing
spacing: Kirigami.Units.largeSpacing spacing: Kirigami.Units.largeSpacing
Kirigami.Avatar { KirigamiComponents.Avatar {
Layout.preferredWidth: Kirigami.Units.iconSizes.huge Layout.preferredWidth: Kirigami.Units.iconSizes.huge
Layout.preferredHeight: Kirigami.Units.iconSizes.huge Layout.preferredHeight: Kirigami.Units.iconSizes.huge

View File

@@ -6,6 +6,7 @@ import QtQuick 2.15
import QtQuick.Controls 2.15 as QQC2 import QtQuick.Controls 2.15 as QQC2
import QtQuick.Layouts 1.15 import QtQuick.Layouts 1.15
import org.kde.kirigami 2.15 as Kirigami import org.kde.kirigami 2.15 as Kirigami
import org.kde.kirigamiaddons.labs.components 1.0 as KirigamiComponents
import org.kde.neochat 1.0 import org.kde.neochat 1.0
@@ -222,11 +223,11 @@ Loader {
Layout.fillWidth: true Layout.fillWidth: true
Layout.margins: Kirigami.Units.largeSpacing Layout.margins: Kirigami.Units.largeSpacing
spacing: Kirigami.Units.largeSpacing spacing: Kirigami.Units.largeSpacing
Kirigami.Avatar { KirigamiComponents.Avatar {
id: avatar id: avatar
source: author.avatarSource source: author.avatarSource
Layout.preferredWidth: Kirigami.Units.gridUnit * 3 Layout.preferredWidth: Kirigami.Units.gridUnit * 2
Layout.preferredHeight: Kirigami.Units.gridUnit * 3 Layout.preferredHeight: Kirigami.Units.gridUnit * 2
Layout.alignment: Qt.AlignTop Layout.alignment: Qt.AlignTop
} }
ColumnLayout { ColumnLayout {

View File

@@ -6,6 +6,8 @@ import QtQuick.Controls 2.15 as QQC2
import QtQuick.Layouts 1.15 import QtQuick.Layouts 1.15
import org.kde.kirigami 2.15 as Kirigami import org.kde.kirigami 2.15 as Kirigami
import org.kde.kirigamiaddons.delegates 1.0 as Delegates
import org.kde.kirigamiaddons.labs.components 1.0 as KirigamiComponents
import org.kde.neochat 1.0 import org.kde.neochat 1.0
@@ -68,19 +70,31 @@ Kirigami.ScrollablePage {
text: i18n("No users available") text: i18n("No users available")
} }
delegate: Kirigami.BasicListItem { delegate: Delegates.RoundedItemDelegate {
id: delegate id: delegate
required property string userID
required property string name
required property string avatar
property bool inRoom: room && room.containsUser(userID) property bool inRoom: room && room.containsUser(userID)
label: model.name text: name
subtitle: model.userID
leading: Kirigami.Avatar { contentItem: RowLayout {
implicitWidth: height KirigamiComponents.Avatar {
source: model.avatar ? ("image://mxc/" + model.avatar) : "" Layout.preferredWidth: Kirigami.Units.iconSizes.medium
name: model.name Layout.preferredHeight: Kirigami.Units.iconSizes.medium
source: delegate.avatar ? ("image://mxc/" + delegate.avatar) : ""
name: delegate.name
} }
trailing: QQC2.ToolButton {
Delegates.SubtitleContentItem {
itemDelegate: delegate
subtitle: delegate.userID
}
QQC2.ToolButton {
id: inviteButton id: inviteButton
icon.name: "document-send" icon.name: "document-send"
text: i18n("Send invitation") text: i18n("Send invitation")
@@ -92,7 +106,7 @@ Kirigami.ScrollablePage {
if (inRoom) { if (inRoom) {
checked = true checked = true
} else { } else {
room.inviteToRoom(model.userID); room.inviteToRoom(delegate.userID);
applicationWindow().pageStack.layers.pop(); applicationWindow().pageStack.layers.pop();
} }
} }
@@ -104,3 +118,4 @@ Kirigami.ScrollablePage {
} }
} }
} }
}

View File

@@ -8,6 +8,7 @@ import QtQuick.Layouts 1.15
import Qt.labs.qmlmodels 1.0 import Qt.labs.qmlmodels 1.0
import org.kde.kirigami 2.15 as Kirigami import org.kde.kirigami 2.15 as Kirigami
import org.kde.kirigamiaddons.labs.components 1.0 as KirigamiComponents
import org.kde.neochat 1.0 import org.kde.neochat 1.0
@@ -202,7 +203,7 @@ Kirigami.ScrollablePage {
applicationWindow().pageStack.layers.pop(); applicationWindow().pageStack.layers.pop();
} }
contentItem: RowLayout { contentItem: RowLayout {
Kirigami.Avatar { KirigamiComponents.Avatar {
Layout.preferredWidth: Kirigami.Units.gridUnit * 2 Layout.preferredWidth: Kirigami.Units.gridUnit * 2
Layout.preferredHeight: Kirigami.Units.gridUnit * 2 Layout.preferredHeight: Kirigami.Units.gridUnit * 2

View File

@@ -7,6 +7,7 @@ import QtQuick.Layouts 1.15
import QtQml.Models 2.15 import QtQml.Models 2.15
import org.kde.kirigami 2.15 as Kirigami import org.kde.kirigami 2.15 as Kirigami
import org.kde.kirigamiaddons.labs.components 1.0 as KirigamiComponents
import org.kde.kitemmodels 1.0 import org.kde.kitemmodels 1.0
import org.kde.neochat 1.0 import org.kde.neochat 1.0
@@ -32,7 +33,7 @@ QQC2.ItemDelegate {
visible: root.categoryVisible || filterText.length > 0 || Config.mergeRoomList visible: root.categoryVisible || filterText.length > 0 || Config.mergeRoomList
contentItem: Kirigami.Avatar { contentItem: KirigamiComponents.Avatar {
source: root.avatar ? `image://mxc/${root.avatar}` : "" source: root.avatar ? `image://mxc/${root.avatar}` : ""
name: root.displayName name: root.displayName

View File

@@ -7,6 +7,7 @@ import QtQuick.Controls 2.15 as QQC2
import QtQuick.Layouts 1.15 import QtQuick.Layouts 1.15
import org.kde.kirigami 2.19 as Kirigami import org.kde.kirigami 2.19 as Kirigami
import org.kde.kirigamiaddons.labs.components 1.0 as KirigamiComponents
import org.kde.neochat 1.0 import org.kde.neochat 1.0
@@ -157,7 +158,7 @@ Loader {
Layout.fillWidth: true Layout.fillWidth: true
Layout.margins: Kirigami.Units.largeSpacing Layout.margins: Kirigami.Units.largeSpacing
spacing: Kirigami.Units.largeSpacing spacing: Kirigami.Units.largeSpacing
Kirigami.Avatar { KirigamiComponents.Avatar {
id: avatar id: avatar
source: room.avatarMediaId ? ("image://mxc/" + room.avatarMediaId) : "" source: room.avatarMediaId ? ("image://mxc/" + room.avatarMediaId) : ""
name: room.displayName name: room.displayName

View File

@@ -8,6 +8,7 @@ import QtQml.Models 2.15
import org.kde.kirigami 2.15 as Kirigami import org.kde.kirigami 2.15 as Kirigami
import org.kde.kirigamiaddons.delegates 1.0 as Delegates import org.kde.kirigamiaddons.delegates 1.0 as Delegates
import org.kde.kirigamiaddons.labs.components 1.0 as Components
import org.kde.kitemmodels 1.0 import org.kde.kitemmodels 1.0
import org.kde.neochat 1.0 import org.kde.neochat 1.0
@@ -39,7 +40,7 @@ Delegates.RoundedItemDelegate {
} }
contentItem: RowLayout { contentItem: RowLayout {
Kirigami.Avatar { Components.Avatar {
source: root.avatar ? "image://mxc/" + root.avatar : "" source: root.avatar ? "image://mxc/" + root.avatar : ""
name: root.displayName name: root.displayName
implicitWidth: visible ? height : 0 implicitWidth: visible ? height : 0

View File

@@ -7,6 +7,7 @@ import QtQuick.Controls 2.15 as QQC2
import QtQuick.Layouts 1.15 import QtQuick.Layouts 1.15
import org.kde.kirigami 2.19 as Kirigami import org.kde.kirigami 2.19 as Kirigami
import org.kde.kirigamiaddons.labs.components 1.0 as KirigamiComponents
import org.kde.neochat 1.0 import org.kde.neochat 1.0
@@ -78,7 +79,7 @@ Loader {
Layout.fillWidth: true Layout.fillWidth: true
Layout.margins: Kirigami.Units.largeSpacing Layout.margins: Kirigami.Units.largeSpacing
spacing: Kirigami.Units.largeSpacing spacing: Kirigami.Units.largeSpacing
Kirigami.Avatar { KirigamiComponents.Avatar {
id: avatar id: avatar
source: room.avatarMediaId ? ("image://mxc/" + room.avatarMediaId) : "" source: room.avatarMediaId ? ("image://mxc/" + room.avatarMediaId) : ""
Layout.preferredWidth: Kirigami.Units.gridUnit * 3 Layout.preferredWidth: Kirigami.Units.gridUnit * 3

View File

@@ -5,6 +5,8 @@ import QtQuick 2.15
import QtQuick.Controls 2.15 as QQC2 import QtQuick.Controls 2.15 as QQC2
import QtQuick.Layouts 1.15 import QtQuick.Layouts 1.15
import org.kde.kirigami 2.20 as Kirigami import org.kde.kirigami 2.20 as Kirigami
import org.kde.kirigamiaddons.labs.components 1.0 as KirigamiComponents
import org.kde.kirigamiaddons.delegates 1.0 as Delegates
import org.kde.neochat 1.0 import org.kde.neochat 1.0
@@ -27,34 +29,28 @@ QQC2.ToolBar {
header: Kirigami.Separator {} header: Kirigami.Separator {}
footer: Kirigami.BasicListItem { footer: Delegates.RoundedItemDelegate {
id: addButton
width: parent.width width: parent.width
highlighted: focus highlighted: focus || (addAccount.highlighted || addAccount.ListView.isCurrentItem) && !addAccount.pressed
background: Rectangle {
id: background
color: addAccount.backgroundColor
Rectangle {
anchors.fill: parent
visible: !Kirigami.Settings.tabletMode && addAccount.hoverEnabled
color: addAccount.activeBackgroundColor
opacity: {
if ((addAccount.highlighted || addAccount.ListView.isCurrentItem) && !addAccount.pressed) {
return .6
} else if (addAccount.hovered && !addAccount.pressed) {
return .3
} else {
return 0
}
}
}
}
Component.onCompleted: userInfo.addAccount = this Component.onCompleted: userInfo.addAccount = this
icon: "list-add" icon {
name: "list-add"
width: Kirigami.Units.iconSizes.smallMedium
height: Kirigami.Units.iconSizes.smallMedium
}
text: i18n("Add Account") text: i18n("Add Account")
contentItem: Delegates.SubtitleContentItem {
itemDelegate: parent
subtitle: i18n("Log in to an existing account") subtitle: i18n("Log in to an existing account")
labelItem.textFormat: Text.PlainText
subtitleItem.textFormat: Text.PlainText
}
onClicked: { onClicked: {
pageStack.pushDialogLayer("qrc:/WelcomePage.qml", {}, {title: i18nc("@title:window", "Login")}) pageStack.pushDialogLayer("qrc:/WelcomePage.qml", {}, {
title: i18nc("@title:window", "Login"),
});
if (switchUserButton.checked) { if (switchUserButton.checked) {
switchUserButton.checked = false switchUserButton.checked = false
} }
@@ -101,26 +97,36 @@ QQC2.ToolBar {
width: parent.width width: parent.width
Layout.preferredHeight: contentHeight Layout.preferredHeight: contentHeight
delegate: Kirigami.BasicListItem { delegate: Delegates.RoundedItemDelegate {
leftPadding: topPadding id: userDelegate
leading: Kirigami.Avatar {
required property var connection
width: parent.width
text: connection.localUser.displayName
contentItem: RowLayout {
KirigamiComponents.Avatar {
implicitWidth: Kirigami.Units.gridUnit + Kirigami.Units.largeSpacing implicitWidth: Kirigami.Units.gridUnit + Kirigami.Units.largeSpacing
implicitHeight: Kirigami.Units.gridUnit + Kirigami.Units.largeSpacing implicitHeight: Kirigami.Units.gridUnit + Kirigami.Units.largeSpacing
sourceSize { sourceSize {
width: Kirigami.Units.gridUnit + Kirigami.Units.largeSpacing width: Kirigami.Units.gridUnit + Kirigami.Units.largeSpacing
height: Kirigami.Units.gridUnit + Kirigami.Units.largeSpacing height: Kirigami.Units.gridUnit + Kirigami.Units.largeSpacing
} }
source: model.connection.localUser.avatarMediaId ? ("image://mxc/" + model.connection.localUser.avatarMediaId) : "" source: userDelegate.connection.localUser.avatarMediaId ? ("image://mxc/" + userDelegate.connection.localUser.avatarMediaId) : ""
name: model.connection.localUser.displayName ?? model.connection.localUser.id name: userDelegate.connection.localUser.displayName ?? userDelegate.connection.localUser.id
} }
width: parent.width
text: model.connection.localUser.displayName Delegates.SubtitleContentItem {
itemDelegate: userDelegate
subtitle: userDelegate.connection.localUser.id
labelItem.textFormat: Text.PlainText labelItem.textFormat: Text.PlainText
subtitleItem.textFormat: Text.PlainText subtitleItem.textFormat: Text.PlainText
subtitle: model.connection.localUser.id }
}
onClicked: { onClicked: {
Controller.activeConnection = model.connection Controller.activeConnection = userDelegate.connection
if (switchUserButton.checked) { if (switchUserButton.checked) {
switchUserButton.checked = false switchUserButton.checked = false
} }
@@ -139,29 +145,31 @@ QQC2.ToolBar {
Layout.bottomMargin: Kirigami.Units.smallSpacing Layout.bottomMargin: Kirigami.Units.smallSpacing
Layout.minimumHeight: Kirigami.Units.gridUnit * 2 - 2 // HACK: -2 here is to ensure the ChatBox and the UserInfo have the same height Layout.minimumHeight: Kirigami.Units.gridUnit * 2 - 2 // HACK: -2 here is to ensure the ChatBox and the UserInfo have the same height
Kirigami.Avatar { QQC2.AbstractButton {
readonly property string mediaId: Controller.activeConnection.localUser.avatarMediaId
Layout.preferredWidth: Kirigami.Units.gridUnit + Kirigami.Units.largeSpacing Layout.preferredWidth: Kirigami.Units.gridUnit + Kirigami.Units.largeSpacing
Layout.preferredHeight: Kirigami.Units.gridUnit + Kirigami.Units.largeSpacing Layout.preferredHeight: Kirigami.Units.gridUnit + Kirigami.Units.largeSpacing
Layout.leftMargin: Kirigami.Units.largeSpacing Layout.leftMargin: Kirigami.Units.largeSpacing
source: mediaId ? ("image://mxc/" + mediaId) : ""
name: Controller.activeConnection.localUser.displayName ?? Controller.activeConnection.localUser.id
actions.main: Kirigami.Action {
text: i18n("Edit this account")
icon.name: "document-edit"
onTriggered: pageStack.pushDialogLayer(Qt.resolvedUrl('qrc:/AccountEditorPage.qml'), {
connection: Controller.activeConnection
}, {
title: i18n("Account editor")
});
}
TapHandler { TapHandler {
acceptedButtons: Qt.RightButton acceptedButtons: Qt.RightButton
acceptedDevices: PointerDevice.Mouse acceptedDevices: PointerDevice.Mouse
onTapped: accountMenu.open() onTapped: accountMenu.open()
} }
text: i18n("Edit this account")
onClicked: pageStack.pushDialogLayer(Qt.resolvedUrl('qrc:/AccountEditorPage.qml'), {
connection: Controller.activeConnection
}, {
title: i18n("Account editor")
});
contentItem: KirigamiComponents.Avatar {
readonly property string mediaId: Controller.activeConnection.localUser.avatarMediaId
source: mediaId ? ("image://mxc/" + mediaId) : ""
name: Controller.activeConnection.localUser.displayName ?? Controller.activeConnection.localUser.id
}
} }
ColumnLayout { ColumnLayout {

View File

@@ -6,6 +6,7 @@ import QtQuick 2.15
import QtQuick.Controls 2.15 as QQC2 import QtQuick.Controls 2.15 as QQC2
import QtQuick.Layouts 1.15 import QtQuick.Layouts 1.15
import org.kde.kirigami 2.15 as Kirigami import org.kde.kirigami 2.15 as Kirigami
import org.kde.kirigamiaddons.labs.components 1.0 as KirigamiComponents
import org.kde.neochat 1.0 import org.kde.neochat 1.0
@@ -18,11 +19,27 @@ ColumnLayout {
Layout.fillWidth: true Layout.fillWidth: true
Layout.preferredHeight: Kirigami.Units.largeSpacing * 2 Layout.preferredHeight: Kirigami.Units.largeSpacing * 2
} }
Kirigami.Avatar {
QQC2.AbstractButton {
Layout.preferredWidth: Math.round(Kirigami.Units.gridUnit * 3.5) Layout.preferredWidth: Math.round(Kirigami.Units.gridUnit * 3.5)
Layout.preferredHeight: Math.round(Kirigami.Units.gridUnit * 3.5) Layout.preferredHeight: Math.round(Kirigami.Units.gridUnit * 3.5)
Layout.alignment: Qt.AlignHCenter Layout.alignment: Qt.AlignHCenter
onClicked: {
const popup = userDetailDialog.createObject(QQC2.ApplicationWindow.overlay, {
room: room,
user: room.getUser(room.directChatRemoteUser.id),
})
popup.closed.connect(() => {
userListItem.highlighted = false
})
if (roomDrawer.modal) {
roomDrawer.close()
}
popup.open()
}
contentItem: KirigamiComponents.Avatar {
name: room ? room.displayName : "" name: room ? room.displayName : ""
source: room ? ("image://mxc/" + room.avatarMediaId) : "" source: room ? ("image://mxc/" + room.avatarMediaId) : ""
@@ -42,20 +59,6 @@ ColumnLayout {
anchors.fill: parent anchors.fill: parent
} }
} }
actions.main: Kirigami.Action {
onTriggered: {
const popup = userDetailDialog.createObject(QQC2.ApplicationWindow.overlay, {
room: room,
user: room.getUser(room.directChatRemoteUser.id),
})
popup.closed.connect(() => {
userListItem.highlighted = false
})
if (roomDrawer.modal) {
roomDrawer.close()
}
popup.open()
}
} }
} }

View File

@@ -6,6 +6,7 @@ import QtQuick 2.15
import QtQuick.Controls 2.15 as QQC2 import QtQuick.Controls 2.15 as QQC2
import QtQuick.Layouts 1.15 import QtQuick.Layouts 1.15
import org.kde.kirigami 2.20 as Kirigami import org.kde.kirigami 2.20 as Kirigami
import org.kde.kirigamiaddons.labs.components 1.0 as KirigamiComponents
import org.kde.neochat 1.0 import org.kde.neochat 1.0
@@ -19,9 +20,9 @@ ColumnLayout {
Layout.leftMargin: Kirigami.Units.largeSpacing Layout.leftMargin: Kirigami.Units.largeSpacing
spacing: Kirigami.Units.largeSpacing spacing: Kirigami.Units.largeSpacing
Kirigami.Avatar { KirigamiComponents.Avatar {
Layout.preferredWidth: Kirigami.Units.gridUnit * 3.5 Layout.preferredWidth: Kirigami.Units.iconSizes.large
Layout.preferredHeight: Kirigami.Units.gridUnit * 3.5 Layout.preferredHeight: Kirigami.Units.iconSizes.large
name: room ? room.displayName : "" name: room ? room.displayName : ""
source: room && room.avatarMediaId ? ("image://mxc/" + room.avatarMediaId) : "" source: room && room.avatarMediaId ? ("image://mxc/" + room.avatarMediaId) : ""
@@ -47,6 +48,7 @@ ColumnLayout {
} }
} }
ColumnLayout { ColumnLayout {
Layout.fillWidth: true Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter Layout.alignment: Qt.AlignVCenter
@@ -54,14 +56,13 @@ ColumnLayout {
Kirigami.Heading { Kirigami.Heading {
Layout.fillWidth: true Layout.fillWidth: true
type: Kirigami.Heading.Type.Primary
wrapMode: QQC2.Label.Wrap
text: room ? room.displayName : i18n("No name") text: room ? room.displayName : i18n("No name")
textFormat: Text.PlainText textFormat: Text.PlainText
} }
Kirigami.SelectableLabel { Kirigami.SelectableLabel {
Layout.fillWidth: true Layout.fillWidth: true
font: Kirigami.Theme.smallFont
textFormat: TextEdit.PlainText textFormat: TextEdit.PlainText
text: room && room.canonicalAlias ? room.canonicalAlias : i18n("No Canonical Alias") text: room && room.canonicalAlias ? room.canonicalAlias : i18n("No Canonical Alias")
} }

View File

@@ -8,6 +8,7 @@ import QtQuick.Layouts 1.15
import org.kde.kirigami 2.20 as Kirigami import org.kde.kirigami 2.20 as Kirigami
import org.kde.kirigamiaddons.delegates 1.0 as Delegates import org.kde.kirigamiaddons.delegates 1.0 as Delegates
import org.kde.kirigamiaddons.labs.components 1.0 as KirigamiComponents
import org.kde.kitemmodels 1.0 import org.kde.kitemmodels 1.0
import org.kde.neochat 1.0 import org.kde.neochat 1.0
@@ -302,7 +303,7 @@ Kirigami.OverlayDrawer {
} }
contentItem: RowLayout { contentItem: RowLayout {
Kirigami.Avatar { KirigamiComponents.Avatar {
implicitWidth: height implicitWidth: height
sourceSize { sourceSize {
height: Kirigami.Units.gridUnit + Kirigami.Units.smallSpacing * 2.5 height: Kirigami.Units.gridUnit + Kirigami.Units.smallSpacing * 2.5