diff options
author | J-P Nurmi <jpnurmi@gmail.com> | 2013-04-19 11:04:40 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-05-07 14:43:14 +0200 |
commit | 44c47af950c040603da7145e4f1437b5546915ba (patch) | |
tree | 6c04ed979bbed88ad855df541f73d6db38972d02 /src/widgets/itemviews | |
parent | db44b891fb8710121fec7dc4fa3bd91493dc2a1c (diff) |
Unify header-based scroll offsets in itemviews
This is a spin-off of 00b11cc.
Change-Id: I042f066bdb1d248a04473d4b0a31002330a73907
Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>
Reviewed-by: Thorbjørn Lund Martsum <tmartsum@gmail.com>
Diffstat (limited to 'src/widgets/itemviews')
-rw-r--r-- | src/widgets/itemviews/qheaderview.cpp | 13 | ||||
-rw-r--r-- | src/widgets/itemviews/qheaderview_p.h | 1 | ||||
-rw-r--r-- | src/widgets/itemviews/qtableview.cpp | 28 | ||||
-rw-r--r-- | src/widgets/itemviews/qtreeview.cpp | 9 |
4 files changed, 21 insertions, 30 deletions
diff --git a/src/widgets/itemviews/qheaderview.cpp b/src/widgets/itemviews/qheaderview.cpp index 0dbf0a6a76..d95e693126 100644 --- a/src/widgets/itemviews/qheaderview.cpp +++ b/src/widgets/itemviews/qheaderview.cpp @@ -3540,6 +3540,19 @@ int QHeaderViewPrivate::adjustedVisualIndex(int visualIndex) const return visualIndex; } +void QHeaderViewPrivate::setScrollOffset(const QScrollBar *scrollBar, QAbstractItemView::ScrollMode scrollMode) +{ + Q_Q(QHeaderView); + if (scrollMode == QAbstractItemView::ScrollPerItem) { + if (scrollBar->maximum() > 0 && scrollBar->value() == scrollBar->maximum()) + q->setOffsetToLastSection(); + else + q->setOffsetToSectionPosition(scrollBar->value()); + } else { + q->setOffset(scrollBar->value()); + } +} + #ifndef QT_NO_DATASTREAM void QHeaderViewPrivate::write(QDataStream &out) const { diff --git a/src/widgets/itemviews/qheaderview_p.h b/src/widgets/itemviews/qheaderview_p.h index 7fda0c8873..de9321530c 100644 --- a/src/widgets/itemviews/qheaderview_p.h +++ b/src/widgets/itemviews/qheaderview_p.h @@ -341,6 +341,7 @@ public: // other int viewSectionSizeHint(int logical) const; int adjustedVisualIndex(int visualIndex) const; + void setScrollOffset(const QScrollBar *scrollBar, QAbstractItemView::ScrollMode scrollMode); #ifndef QT_NO_DATASTREAM void write(QDataStream &out) const; diff --git a/src/widgets/itemviews/qtableview.cpp b/src/widgets/itemviews/qtableview.cpp index 471f8b149c..e581188f0a 100644 --- a/src/widgets/itemviews/qtableview.cpp +++ b/src/widgets/itemviews/qtableview.cpp @@ -1126,15 +1126,7 @@ void QTableView::doItemsLayout() { Q_D(QTableView); QAbstractItemView::doItemsLayout(); - if (verticalScrollMode() == QAbstractItemView::ScrollPerItem) { - const int max = verticalScrollBar()->maximum(); - if (max > 0 && verticalScrollBar()->value() == max) - d->verticalHeader->setOffsetToLastSection(); - else - d->verticalHeader->setOffsetToSectionPosition(verticalScrollBar()->value()); - } else { - d->verticalHeader->setOffset(verticalScrollBar()->value()); - } + d->verticalHeader->d_func()->setScrollOffset(verticalScrollBar(), verticalScrollMode()); if (!d->verticalHeader->updatesEnabled()) d->verticalHeader->setUpdatesEnabled(true); } @@ -1271,29 +1263,19 @@ void QTableView::scrollContentsBy(int dx, int dy) dx = isRightToLeft() ? -dx : dx; if (dx) { + int oldOffset = d->horizontalHeader->offset(); + d->horizontalHeader->d_func()->setScrollOffset(horizontalScrollBar(), horizontalScrollMode()); if (horizontalScrollMode() == QAbstractItemView::ScrollPerItem) { - int oldOffset = d->horizontalHeader->offset(); - if (horizontalScrollBar()->value() == horizontalScrollBar()->maximum()) - d->horizontalHeader->setOffsetToLastSection(); - else - d->horizontalHeader->setOffsetToSectionPosition(horizontalScrollBar()->value()); int newOffset = d->horizontalHeader->offset(); dx = isRightToLeft() ? newOffset - oldOffset : oldOffset - newOffset; - } else { - d->horizontalHeader->setOffset(horizontalScrollBar()->value()); } } if (dy) { + int oldOffset = d->verticalHeader->offset(); + d->verticalHeader->d_func()->setScrollOffset(verticalScrollBar(), verticalScrollMode()); if (verticalScrollMode() == QAbstractItemView::ScrollPerItem) { - int oldOffset = d->verticalHeader->offset(); - if (verticalScrollBar()->value() == verticalScrollBar()->maximum()) - d->verticalHeader->setOffsetToLastSection(); - else - d->verticalHeader->setOffsetToSectionPosition(verticalScrollBar()->value()); int newOffset = d->verticalHeader->offset(); dy = oldOffset - newOffset; - } else { - d->verticalHeader->setOffset(verticalScrollBar()->value()); } } d->scrollContentsBy(dx, dy); diff --git a/src/widgets/itemviews/qtreeview.cpp b/src/widgets/itemviews/qtreeview.cpp index dd450daaea..0977f7a2c1 100644 --- a/src/widgets/itemviews/qtreeview.cpp +++ b/src/widgets/itemviews/qtreeview.cpp @@ -2401,16 +2401,11 @@ void QTreeView::scrollContentsBy(int dx, int dy) dx = isRightToLeft() ? -dx : dx; if (dx) { + int oldOffset = d->header->offset(); + d->header->d_func()->setScrollOffset(horizontalScrollBar(), horizontalScrollMode()); if (horizontalScrollMode() == QAbstractItemView::ScrollPerItem) { - int oldOffset = d->header->offset(); - if (horizontalScrollBar()->value() == horizontalScrollBar()->maximum()) - d->header->setOffsetToLastSection(); - else - d->header->setOffsetToSectionPosition(horizontalScrollBar()->value()); int newOffset = d->header->offset(); dx = isRightToLeft() ? newOffset - oldOffset : oldOffset - newOffset; - } else { - d->header->setOffset(horizontalScrollBar()->value()); } } |