Add scrollbar to chat messages
This commit is contained in:
parent
8d2b955bcd
commit
f67fb34e69
|
@ -1,39 +1,50 @@
|
|||
import QtQuick 2.3
|
||||
import QtQuick 2.14
|
||||
import QtQuick.Controls 2.3
|
||||
import QtQuick.Controls 2.12 as QQC2
|
||||
import QtQuick.Controls 2.14 as QQC2
|
||||
import QtQuick.Layouts 1.3
|
||||
import Qt.labs.platform 1.1
|
||||
import "../../../../shared"
|
||||
import "../../../../imports"
|
||||
import "./samples/"
|
||||
|
||||
ListView {
|
||||
ScrollView {
|
||||
property var messageList: MessagesData {}
|
||||
spacing: 4
|
||||
id: chatLogView
|
||||
model: messageList
|
||||
|
||||
anchors.fill: parent
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
delegate: Message {
|
||||
userName: model.userName
|
||||
message: model.message
|
||||
identicon: model.identicon
|
||||
isCurrentUser: model.isCurrentUser
|
||||
repeatMessageInfo: model.repeatMessageInfo
|
||||
timestamp: model.timestamp
|
||||
}
|
||||
highlightFollowsCurrentItem: true
|
||||
|
||||
onCountChanged: {
|
||||
if (!this.atYEnd) {
|
||||
// User has scrolled up, we don't want to scroll back
|
||||
return
|
||||
ScrollBar.vertical.policy: chatLogView.contentHeight > chatLogView.height ? ScrollBar.AlwaysOn : ScrollBar.AlwaysOff
|
||||
ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
|
||||
|
||||
ListView {
|
||||
anchors.fill: parent
|
||||
spacing: 4
|
||||
id: chatLogView
|
||||
model: messageList
|
||||
Layout.fillWidth: true
|
||||
Layout.fillHeight: true
|
||||
delegate: Message {
|
||||
userName: model.userName
|
||||
message: model.message
|
||||
identicon: model.identicon
|
||||
isCurrentUser: model.isCurrentUser
|
||||
repeatMessageInfo: model.repeatMessageInfo
|
||||
timestamp: model.timestamp
|
||||
}
|
||||
highlightFollowsCurrentItem: true
|
||||
|
||||
// positionViewAtEnd doesn't work well. Instead, we use highlightFollowsCurrentItem
|
||||
// and set the current Item/Index to the latest item
|
||||
while (this.currentIndex < this.count - 1) {
|
||||
this.incrementCurrentIndex()
|
||||
onCountChanged: {
|
||||
if (!this.atYEnd) {
|
||||
// User has scrolled up, we don't want to scroll back
|
||||
return
|
||||
}
|
||||
|
||||
// positionViewAtEnd doesn't work well. Instead, we use highlightFollowsCurrentItem
|
||||
// and set the current Item/Index to the latest item
|
||||
while (this.currentIndex < this.count - 1) {
|
||||
this.incrementCurrentIndex()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue