summary refs log tree commit diff
path: root/resources
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2019-09-18 20:34:30 +0200
committerNicolas Werner <nicolas.werner@hotmail.de>2019-11-23 20:06:14 +0100
commitd1fffd66170d7548926b205dda7d8de81bef3384 (patch)
tree0a1f5f76d14f95c1174af6dd3a8964dd5f3d6dd8 /resources
parentTry to fix CI, no match for QString::arg(QStringRef) (diff)
downloadnheko-d1fffd66170d7548926b205dda7d8de81bef3384.tar.xz
Implement simple scroll state handling
Diffstat (limited to 'resources')
-rw-r--r--resources/qml/TimelineView.qml47
1 files changed, 46 insertions, 1 deletions
diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml

index 4f10f352..e1aa2738 100644 --- a/resources/qml/TimelineView.qml +++ b/resources/qml/TimelineView.qml
@@ -2,6 +2,7 @@ import QtQuick 2.6 import QtQuick.Controls 2.5 import QtQuick.Layouts 1.5 import QtGraphicalEffects 1.0 +import QtQuick.Window 2.2 import com.github.nheko 1.0 @@ -28,14 +29,51 @@ Rectangle { visible: timelineManager.timeline != null anchors.fill: parent + model: timelineManager.timeline + + onModelChanged: { + if (model) { + currentIndex = model.currentIndex + if (model.currentIndex == count - 1) { + positionViewAtEnd() + } else { + positionViewAtIndex(model.currentIndex, ListView.End) + } + } + } + ScrollBar.vertical: ScrollBar { id: scrollbar anchors.top: parent.top anchors.right: parent.right anchors.bottom: parent.bottom + onPressedChanged: if (!pressed) chat.updatePosition() } - model: timelineManager.timeline + property bool atBottom: false + onCountChanged: { + if (atBottom && Window.active) { + var newIndex = count - 1 // last index + positionViewAtEnd() + currentIndex = newIndex + model.currentIndex = newIndex + } + } + + function updatePosition() { + for (var y = chat.contentY + chat.height; y > chat.height; y -= 5) { + var i = chat.itemAt(100, y); + if (!i) continue; + if (!i.isFullyVisible()) continue; + chat.model.currentIndex = i.getIndex(); + chat.currentIndex = i.getIndex() + atBottom = i.getIndex() == count - 1; + console.log("bottom:" + atBottom) + break; + } + } + onMovementEnded: updatePosition() + spacing: 4 delegate: RowLayout { anchors.leftMargin: 52 @@ -43,6 +81,13 @@ Rectangle { anchors.right: parent.right anchors.rightMargin: scrollbar.width + function isFullyVisible() { + return (y - chat.contentY - 1) + height < chat.height + } + function getIndex() { + return index; + } + Loader { id: loader Layout.fillWidth: true