From 05aa8c6c12509cce87d1a3811c5ea1dd83fa0898 Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Wed, 19 Sep 2012 14:59:25 +0200 Subject: [PATCH] Implement viewOptions() logic in QListViewPrivate. The private method is called in several places in QListViewPrivate, but before this patch, the implementation in QAbstractItemView was called. This meant that the options were not set properly, resulting, for example, in icons in icon mode being laid out in list mode (on the left and small). This is a regression resulting from 8eab9cbce2014ffc6186dd6b6fb73da85956ee86 and 3578e05b293c1cc53582109001b20f02c7a1eeb7. Other views are not affected in a similar way. Change-Id: I753cb99410e367266753eaf2fa43361b9212ab96 Reviewed-by: Pier Luigi Fiorini Reviewed-by: Giuseppe D'Angelo Reviewed-by: Stephen Kelly --- src/widgets/itemviews/qlistview.cpp | 18 ++++++++++++------ src/widgets/itemviews/qlistview_p.h | 2 ++ .../itemviews/qlistview/tst_qlistview.cpp | 17 +++++++++++++++++ 3 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/widgets/itemviews/qlistview.cpp b/src/widgets/itemviews/qlistview.cpp index 5be0bebe54..097802c909 100644 --- a/src/widgets/itemviews/qlistview.cpp +++ b/src/widgets/itemviews/qlistview.cpp @@ -900,14 +900,20 @@ void QListView::startDrag(Qt::DropActions supportedActions) QStyleOptionViewItem QListView::viewOptions() const { Q_D(const QListView); - QStyleOptionViewItem option = QAbstractItemView::viewOptions(); - if (!d->iconSize.isValid()) { // otherwise it was already set in abstractitemview - int pm = (d->viewMode == ListMode - ? style()->pixelMetric(QStyle::PM_ListViewIconSize, 0, this) - : style()->pixelMetric(QStyle::PM_IconViewIconSize, 0, this)); + return d->viewOptions(); +} + +QStyleOptionViewItem QListViewPrivate::viewOptions() const +{ + Q_Q(const QListView); + QStyleOptionViewItem option = QAbstractItemViewPrivate::viewOptions(); + if (!iconSize.isValid()) { // otherwise it was already set in abstractitemview + int pm = (viewMode == QListView::ListMode + ? q->style()->pixelMetric(QStyle::PM_ListViewIconSize, 0, q) + : q->style()->pixelMetric(QStyle::PM_IconViewIconSize, 0, q)); option.decorationSize = QSize(pm, pm); } - if (d->viewMode == IconMode) { + if (viewMode == QListView::IconMode) { option.showDecorationSelected = false; option.decorationPosition = QStyleOptionViewItem::Top; option.displayAlignment = Qt::AlignCenter; diff --git a/src/widgets/itemviews/qlistview_p.h b/src/widgets/itemviews/qlistview_p.h index ea9f31a62a..6084479e6a 100644 --- a/src/widgets/itemviews/qlistview_p.h +++ b/src/widgets/itemviews/qlistview_p.h @@ -394,6 +394,8 @@ public: } } + QStyleOptionViewItem viewOptions() const; + void scrollElasticBandBy(int dx, int dy); QItemViewPaintPairs draggablePaintPairs(const QModelIndexList &indexes, QRect *r) const; diff --git a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp index 22f1e2fe4e..d252d78624 100644 --- a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp +++ b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp @@ -141,6 +141,7 @@ private slots: void spacing_data(); void spacing(); void testScrollToWithHidden(); + void testViewOptions(); }; // Testing get/set functions @@ -910,6 +911,10 @@ class PublicListView : public QListView void setPositionForIndex(const QPoint &pos, const QModelIndex &index) { QListView::setPositionForIndex(pos, index); } + + QStyleOptionViewItem viewOptions() const { + return QListView::viewOptions(); + } }; class TestDelegate : public QItemDelegate @@ -2308,5 +2313,17 @@ void tst_QListView::testScrollToWithHidden() QCOMPARE(expectedScrollBarValue, lv.verticalScrollBar()->value()); } + + +void tst_QListView::testViewOptions() +{ + PublicListView view; + QStyleOptionViewItem options = view.viewOptions(); + QCOMPARE(options.decorationPosition, QStyleOptionViewItem::Left); + view.setViewMode(QListView::IconMode); + options = view.viewOptions(); + QCOMPARE(options.decorationPosition, QStyleOptionViewItem::Top); +} + QTEST_MAIN(tst_QListView) #include "tst_qlistview.moc"