forked from kutegram/client
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathhistoryview.cpp
39 lines (31 loc) · 1.27 KB
/
historyview.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include "historyview.h"
#include "historyitemmodel.h"
#include <QScrollBar>
//TODO: canFetchUpwards on resize
//TODO: begin from first unread
HistoryView::HistoryView(QWidget *parent) :
QListView(parent), lastMin(), lastMax()
{
connect(verticalScrollBar(), SIGNAL(rangeChanged(int,int)), this, SLOT(verticalScrollbarRangeChanged(int,int)));
setVerticalScrollMode(QListView::ScrollPerPixel);
setHorizontalScrollMode(QListView::ScrollPerPixel);
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
setWordWrap(true);
verticalScrollBar()->setValue(verticalScrollBar()->maximum());
}
void HistoryView::verticalScrollbarValueChanged(int value)
{
QListView::verticalScrollbarValueChanged(value);
HistoryItemModel* _model = dynamic_cast<HistoryItemModel*>(model());
if (!_model) return;
if (verticalScrollBar()->minimum() == value && _model->canFetchMoreUpwards(rootIndex()))
_model->fetchMoreUpwards(rootIndex());
}
void HistoryView::verticalScrollbarRangeChanged(int min, int max)
{
qint32 val = verticalScrollBar()->value() + max - min - lastMax + lastMin;
if (!lastMin && !lastMax) verticalScrollBar()->setSliderPosition(max);
else if (val < max) verticalScrollBar()->setSliderPosition(val);
lastMin = min;
lastMax = max;
}