Use controls.
This commit is contained in:
@@ -8,73 +8,47 @@ import Spectral.Dialog 2.0
|
|||||||
import Spectral.Effect 2.0
|
import Spectral.Effect 2.0
|
||||||
import Spectral.Setting 0.1
|
import Spectral.Setting 0.1
|
||||||
|
|
||||||
Control {
|
RowLayout {
|
||||||
id: root
|
id: row
|
||||||
|
|
||||||
padding: 8
|
Avatar {
|
||||||
|
Layout.preferredWidth: 24
|
||||||
|
Layout.preferredHeight: 24
|
||||||
|
|
||||||
contentItem: RowLayout {
|
hint: author.displayName
|
||||||
id: row
|
source: author.avatarMediaId
|
||||||
|
color: author.color
|
||||||
|
|
||||||
Control {
|
Component {
|
||||||
Layout.alignment: Qt.AlignTop
|
id: userDetailDialog
|
||||||
|
|
||||||
id: authorControl
|
UserDetailDialog {}
|
||||||
|
|
||||||
padding: 4
|
|
||||||
|
|
||||||
background: Rectangle {
|
|
||||||
radius: height / 2
|
|
||||||
color: author.color
|
|
||||||
}
|
|
||||||
|
|
||||||
contentItem: RowLayout {
|
|
||||||
Avatar {
|
|
||||||
Layout.preferredWidth: 24
|
|
||||||
Layout.preferredHeight: 24
|
|
||||||
|
|
||||||
hint: author.displayName
|
|
||||||
source: author.avatarMediaId
|
|
||||||
color: Qt.darker(author.color, 1.1)
|
|
||||||
|
|
||||||
Component {
|
|
||||||
id: userDetailDialog
|
|
||||||
|
|
||||||
UserDetailDialog {}
|
|
||||||
}
|
|
||||||
|
|
||||||
RippleEffect {
|
|
||||||
anchors.fill: parent
|
|
||||||
|
|
||||||
circular: true
|
|
||||||
|
|
||||||
onClicked: userDetailDialog.createObject(ApplicationWindow.overlay, {"room": currentRoom, "user": author.object, "displayName": author.displayName, "avatarMediaId": author.avatarMediaId, "avatarUrl": author.avatarUrl}).open()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Label {
|
|
||||||
Layout.alignment: Qt.AlignVCenter
|
|
||||||
|
|
||||||
text: author.displayName
|
|
||||||
font.pixelSize: 13
|
|
||||||
font.weight: Font.Medium
|
|
||||||
color: "white"
|
|
||||||
rightPadding: 8
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Label {
|
RippleEffect {
|
||||||
Layout.fillWidth: true
|
anchors.fill: parent
|
||||||
Layout.maximumWidth: messageListView.width - authorControl.width - row.spacing - (root.padding * 2)
|
|
||||||
|
|
||||||
text: display + " • " + Qt.formatTime(time)
|
circular: true
|
||||||
color: MPalette.foreground
|
|
||||||
font.pixelSize: 13
|
|
||||||
font.weight: Font.Medium
|
|
||||||
|
|
||||||
wrapMode: Label.Wrap
|
onClicked: userDetailDialog.createObject(ApplicationWindow.overlay, {"room": currentRoom, "user": author.object, "displayName": author.displayName, "avatarMediaId": author.avatarMediaId, "avatarUrl": author.avatarUrl}).open()
|
||||||
onLinkActivated: Qt.openUrlExternally(link)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Label {
|
||||||
|
Layout.alignment: Qt.AlignVCenter
|
||||||
|
|
||||||
|
text: author.displayName
|
||||||
|
font.pixelSize: 13
|
||||||
|
font.bold: true
|
||||||
|
}
|
||||||
|
|
||||||
|
Label {
|
||||||
|
text: model.display
|
||||||
|
color: MPalette.foreground
|
||||||
|
font.pixelSize: 13
|
||||||
|
font.weight: Font.Medium
|
||||||
|
|
||||||
|
wrapMode: Label.Wrap
|
||||||
|
onLinkActivated: Qt.openUrlExternally(link)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ import QtQuick 2.12
|
|||||||
|
|
||||||
import org.kde.kirigami 2.4 as Kirigami
|
import org.kde.kirigami 2.4 as Kirigami
|
||||||
|
|
||||||
|
|
||||||
TextEdit {
|
TextEdit {
|
||||||
text: "<style>pre {white-space: pre-wrap} a{color: " + Kirigami.Theme.linkColor + ";} .user-pill{}</style>" + model.display
|
text: "<style>pre {white-space: pre-wrap} a{color: " + Kirigami.Theme.linkColor + ";} .user-pill{}</style>" + model.display
|
||||||
|
|
||||||
|
|||||||
@@ -10,12 +10,14 @@ Controls.ItemDelegate {
|
|||||||
horizontalPadding: Kirigami.Units.largeSpacing
|
horizontalPadding: Kirigami.Units.largeSpacing
|
||||||
verticalPadding: Kirigami.Units.smallSpacing
|
verticalPadding: Kirigami.Units.smallSpacing
|
||||||
|
|
||||||
contentItem: Column {
|
contentItem: ColumnLayout {
|
||||||
id: column
|
id: column
|
||||||
|
|
||||||
SectionDelegate {
|
SectionDelegate {
|
||||||
anchors.horizontalCenter: parent.horizontalCenter
|
// anchors.horizontalCenter: parent.horizontalCenter
|
||||||
width: Math.min(implicitWidth, parent.width)
|
// width: Math.min(implicitWidth, parent.width)
|
||||||
|
Layout.maximumWidth: parent.width
|
||||||
|
Layout.alignment: Qt.AlignHCenter
|
||||||
|
|
||||||
visible: showSection
|
visible: showSection
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,38 +65,38 @@ Kirigami.ScrollablePage {
|
|||||||
currentRoom.getPreviousContent(20);
|
currentRoom.getPreviousContent(20);
|
||||||
}
|
}
|
||||||
|
|
||||||
// populate: Transition {
|
// populate: Transition {
|
||||||
// NumberAnimation {
|
// NumberAnimation {
|
||||||
// property: "opacity"; from: 0; to: 1
|
// property: "opacity"; from: 0; to: 1
|
||||||
// duration: 200
|
// duration: 200
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// add: Transition {
|
// add: Transition {
|
||||||
// NumberAnimation {
|
// NumberAnimation {
|
||||||
// property: "opacity"; from: 0; to: 1
|
// property: "opacity"; from: 0; to: 1
|
||||||
// duration: 200
|
// duration: 200
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// move: Transition {
|
// move: Transition {
|
||||||
// NumberAnimation {
|
// NumberAnimation {
|
||||||
// property: "y"; duration: 200
|
// property: "y"; duration: 200
|
||||||
// }
|
// }
|
||||||
// NumberAnimation {
|
// NumberAnimation {
|
||||||
// property: "opacity"; to: 1
|
// property: "opacity"; to: 1
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// displaced: Transition {
|
// displaced: Transition {
|
||||||
// NumberAnimation {
|
// NumberAnimation {
|
||||||
// property: "y"; duration: 200
|
// property: "y"; duration: 200
|
||||||
// easing.type: Easing.OutQuad
|
// easing.type: Easing.OutQuad
|
||||||
// }
|
// }
|
||||||
// NumberAnimation {
|
// NumberAnimation {
|
||||||
// property: "opacity"; to: 1
|
// property: "opacity"; to: 1
|
||||||
// }
|
// }
|
||||||
// }
|
// }
|
||||||
|
|
||||||
delegate: DelegateChooser {
|
delegate: DelegateChooser {
|
||||||
role: "eventType"
|
role: "eventType"
|
||||||
@@ -104,28 +104,34 @@ Kirigami.ScrollablePage {
|
|||||||
DelegateChoice {
|
DelegateChoice {
|
||||||
roleValue: "state"
|
roleValue: "state"
|
||||||
delegate: TimelineContainer {
|
delegate: TimelineContainer {
|
||||||
width: page.width
|
width: messageListView.width
|
||||||
|
|
||||||
StateDelegate {}
|
innerObject: StateDelegate {
|
||||||
|
Layout.maximumWidth: parent.width
|
||||||
|
Layout.alignment: Qt.AlignHCenter
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DelegateChoice {
|
DelegateChoice {
|
||||||
roleValue: "emote"
|
roleValue: "emote"
|
||||||
delegate: TimelineContainer {
|
delegate: TimelineContainer {
|
||||||
width: page.width
|
width: messageListView.width
|
||||||
|
|
||||||
innerObject: StateDelegate {}
|
innerObject: StateDelegate {
|
||||||
|
Layout.maximumWidth: parent.width
|
||||||
|
Layout.alignment: Qt.AlignHCenter
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DelegateChoice {
|
DelegateChoice {
|
||||||
roleValue: "message"
|
roleValue: "message"
|
||||||
delegate: TimelineContainer {
|
delegate: TimelineContainer {
|
||||||
width: page.width
|
width: messageListView.width
|
||||||
|
|
||||||
innerObject: MessageDelegate {
|
innerObject: MessageDelegate {
|
||||||
width: parent.width
|
Layout.fillWidth: true
|
||||||
|
|
||||||
innerObject: TextDelegate {
|
innerObject: TextDelegate {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
@@ -137,10 +143,10 @@ Kirigami.ScrollablePage {
|
|||||||
DelegateChoice {
|
DelegateChoice {
|
||||||
roleValue: "notice"
|
roleValue: "notice"
|
||||||
delegate: TimelineContainer {
|
delegate: TimelineContainer {
|
||||||
width: page.width
|
width: messageListView.width
|
||||||
|
|
||||||
innerObject: MessageDelegate {
|
innerObject: MessageDelegate {
|
||||||
width: parent.width
|
Layout.fillWidth: true
|
||||||
|
|
||||||
innerObject: TextDelegate {
|
innerObject: TextDelegate {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
@@ -152,10 +158,10 @@ Kirigami.ScrollablePage {
|
|||||||
DelegateChoice {
|
DelegateChoice {
|
||||||
roleValue: "image"
|
roleValue: "image"
|
||||||
delegate: TimelineContainer {
|
delegate: TimelineContainer {
|
||||||
width: page.width
|
width: messageListView.width
|
||||||
|
|
||||||
innerObject: MessageDelegate {
|
innerObject: MessageDelegate {
|
||||||
width: parent.width
|
Layout.fillWidth: true
|
||||||
|
|
||||||
innerObject: ImageDelegate {
|
innerObject: ImageDelegate {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
@@ -168,10 +174,10 @@ Kirigami.ScrollablePage {
|
|||||||
DelegateChoice {
|
DelegateChoice {
|
||||||
roleValue: "audio"
|
roleValue: "audio"
|
||||||
delegate: TimelineContainer {
|
delegate: TimelineContainer {
|
||||||
width: page.width
|
width: messageListView.width
|
||||||
|
|
||||||
innerObject: MessageDelegate {
|
innerObject: MessageDelegate {
|
||||||
width: parent.width
|
Layout.fillWidth: true
|
||||||
|
|
||||||
innerObject: AudioDelegate {
|
innerObject: AudioDelegate {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
@@ -183,10 +189,10 @@ Kirigami.ScrollablePage {
|
|||||||
DelegateChoice {
|
DelegateChoice {
|
||||||
roleValue: "video"
|
roleValue: "video"
|
||||||
delegate: TimelineContainer {
|
delegate: TimelineContainer {
|
||||||
width: page.width
|
width: messageListView.width
|
||||||
|
|
||||||
innerObject: MessageDelegate {
|
innerObject: MessageDelegate {
|
||||||
width: parent.width
|
Layout.fillWidth: true
|
||||||
|
|
||||||
innerObject: AudioDelegate {
|
innerObject: AudioDelegate {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
@@ -198,10 +204,10 @@ Kirigami.ScrollablePage {
|
|||||||
DelegateChoice {
|
DelegateChoice {
|
||||||
roleValue: "file"
|
roleValue: "file"
|
||||||
delegate: TimelineContainer {
|
delegate: TimelineContainer {
|
||||||
width: page.width
|
width: messageListView.width
|
||||||
|
|
||||||
innerObject: MessageDelegate {
|
innerObject: MessageDelegate {
|
||||||
width: parent.width
|
Layout.fillWidth: true
|
||||||
|
|
||||||
innerObject: FileDelegate {
|
innerObject: FileDelegate {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
|||||||
@@ -459,7 +459,7 @@ QVariant MessageEventModel::data(const QModelIndex& idx, int role) const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (role == ShowAuthorRole) {
|
if (role == ShowAuthorRole) {
|
||||||
for (auto r = row + 1; r < 0; ++r) {
|
for (auto r = row + 1; r < rowCount(); ++r) {
|
||||||
auto i = index(r);
|
auto i = index(r);
|
||||||
if (data(i, SpecialMarksRole) != EventStatus::Hidden) {
|
if (data(i, SpecialMarksRole) != EventStatus::Hidden) {
|
||||||
return data(i, AuthorRole) != data(idx, AuthorRole) ||
|
return data(i, AuthorRole) != data(idx, AuthorRole) ||
|
||||||
|
|||||||
Reference in New Issue
Block a user