diff options
Diffstat (limited to 'src/widgets/itemviews')
-rw-r--r-- | src/widgets/itemviews/qabstractitemview.h | 2 | ||||
-rw-r--r-- | src/widgets/itemviews/qabstractitemview_p.h | 12 | ||||
-rw-r--r-- | src/widgets/itemviews/qlistview.cpp | 56 | ||||
-rw-r--r-- | src/widgets/itemviews/qlistview.h | 4 | ||||
-rw-r--r-- | src/widgets/itemviews/qlistview_p.h | 2 |
5 files changed, 49 insertions, 27 deletions
diff --git a/src/widgets/itemviews/qabstractitemview.h b/src/widgets/itemviews/qabstractitemview.h index d6c5d58934..309b8c4d59 100644 --- a/src/widgets/itemviews/qabstractitemview.h +++ b/src/widgets/itemviews/qabstractitemview.h @@ -62,7 +62,6 @@ class QAbstractItemViewPrivate; class Q_WIDGETS_EXPORT QAbstractItemView : public QAbstractScrollArea { Q_OBJECT - Q_FLAGS(EditTriggers) Q_PROPERTY(bool autoScroll READ hasAutoScroll WRITE setAutoScroll) Q_PROPERTY(int autoScrollMargin READ autoScrollMargin WRITE setAutoScrollMargin) Q_PROPERTY(EditTriggers editTriggers READ editTriggers WRITE setEditTriggers) @@ -118,6 +117,7 @@ public: }; Q_DECLARE_FLAGS(EditTriggers, EditTrigger) + Q_FLAG(EditTriggers) enum ScrollMode { ScrollPerItem, diff --git a/src/widgets/itemviews/qabstractitemview_p.h b/src/widgets/itemviews/qabstractitemview_p.h index d21ae573cd..5e3858f491 100644 --- a/src/widgets/itemviews/qabstractitemview_p.h +++ b/src/widgets/itemviews/qabstractitemview_p.h @@ -89,18 +89,6 @@ class QTypeInfo<QItemViewPaintPair> : public QTypeInfoMerger<QItemViewPaintPair, typedef QVector<QItemViewPaintPair> QItemViewPaintPairs; -class QEmptyModel : public QAbstractItemModel -{ -public: - explicit QEmptyModel(QObject *parent = 0) : QAbstractItemModel(parent) {} - QModelIndex index(int, int, const QModelIndex &) const override { return QModelIndex(); } - QModelIndex parent(const QModelIndex &) const override { return QModelIndex(); } - int rowCount(const QModelIndex &) const override { return 0; } - int columnCount(const QModelIndex &) const override { return 0; } - bool hasChildren(const QModelIndex &) const override { return false; } - QVariant data(const QModelIndex &, int) const override { return QVariant(); } -}; - class Q_AUTOTEST_EXPORT QAbstractItemViewPrivate : public QAbstractScrollAreaPrivate { Q_DECLARE_PUBLIC(QAbstractItemView) diff --git a/src/widgets/itemviews/qlistview.cpp b/src/widgets/itemviews/qlistview.cpp index 65421bfb67..45c547d313 100644 --- a/src/widgets/itemviews/qlistview.cpp +++ b/src/widgets/itemviews/qlistview.cpp @@ -1625,6 +1625,33 @@ bool QListView::isSelectionRectVisible() const } /*! + \property QListView::expandingListItems + \brief if items occupy the entire width of the column + \since 5.9 + + If this property is \c true then all items in the column + will have the width of the column; otherwise the width of + each item will be determined by it's size hint. + + By default, this property is \c true. +*/ +void QListView::setExpandingListItems(bool enable) +{ + Q_D(QListView); + if (d->expandingListItems == enable) + return; + d->expandingListItems = enable; + if (viewMode() == ListMode && flow() == QListView::TopToBottom && isWrapping()) + d->doDelayedItemsLayout(); +} + +bool QListView::isExpandingListItems() const +{ + Q_D(const QListView); + return d->expandingListItems; +} + +/*! \reimp */ bool QListView::event(QEvent *e) @@ -1650,7 +1677,8 @@ QListViewPrivate::QListViewPrivate() column(0), uniformItemSizes(false), batchSize(100), - showElasticBand(false) + showElasticBand(false), + expandingListItems(true) { } @@ -2335,13 +2363,7 @@ void QListModeViewBase::scrollContentsBy(int dx, int dy, bool scrollElasticBand) bool QListModeViewBase::doBatchedItemLayout(const QListViewLayoutInfo &info, int max) { doStaticLayout(info); - if (batchStartRow > max) { // stop items layout - flowPositions.resize(flowPositions.count()); - segmentPositions.resize(segmentPositions.count()); - segmentStartRows.resize(segmentStartRows.count()); - return true; // done - } - return false; // not done + return batchStartRow > max; // returning true stops items layout } QListViewItem QListModeViewBase::indexToListViewItem(const QModelIndex &index) const @@ -2371,7 +2393,8 @@ QListViewItem QListModeViewBase::indexToListViewItem(const QModelIndex &index) c int right = (segment + 1 >= segmentPositions.count() ? contentsSize.width() : segmentPositions.at(segment + 1)); - size.setWidth(right - pos.x()); + size.setWidth(dd->expandingListItems ? right - pos.x() + : qMin(size.width(), right - pos.x())); } else { // make the items as wide as the viewport size.setWidth(qMax(size.width(), viewport()->width() - 2 * spacing())); } @@ -2475,9 +2498,7 @@ void QListModeViewBase::doStaticLayout(const QListViewLayoutInfo &info) if (info.wrap && (flowPosition + deltaFlowPosition >= segEndPosition)) { segmentExtents.append(flowPosition); flowPosition = info.spacing + segStartPosition; - segPosition += deltaSegPosition; - if (info.wrap) - segPosition += info.spacing; + segPosition += info.spacing + deltaSegPosition; segmentPositions.append(segPosition); segmentStartRows.append(row); deltaSegPosition = 0; @@ -2557,8 +2578,15 @@ QVector<QModelIndex> QListModeViewBase::intersectingSet(const QRect &area) const if (isHidden(row)) continue; QModelIndex index = modelIndex(row); - if (index.isValid()) - ret += index; + if (index.isValid()) { + if (flow() == QListView::LeftToRight || dd->expandingListItems) { + ret += index; + } else { + const int iw = indexToListViewItem(index).width(); // item width + if (iw > 0 && segStartPosition - segmentPositions.at(seg) < iw) + ret += index; + } + } #if 0 // for debugging else qWarning("intersectingSet: row %d was invalid", row); diff --git a/src/widgets/itemviews/qlistview.h b/src/widgets/itemviews/qlistview.h index e918e66d38..4cf53f9bab 100644 --- a/src/widgets/itemviews/qlistview.h +++ b/src/widgets/itemviews/qlistview.h @@ -66,6 +66,7 @@ class Q_WIDGETS_EXPORT QListView : public QAbstractItemView Q_PROPERTY(int batchSize READ batchSize WRITE setBatchSize) Q_PROPERTY(bool wordWrap READ wordWrap WRITE setWordWrap) Q_PROPERTY(bool selectionRectVisible READ isSelectionRectVisible WRITE setSelectionRectVisible) + Q_PROPERTY(bool expandingListItems READ isExpandingListItems WRITE setExpandingListItems) public: enum Movement { Static, Free, Snap }; @@ -126,6 +127,9 @@ public: void setSelectionRectVisible(bool show); bool isSelectionRectVisible() const; + void setExpandingListItems(bool enable); + bool isExpandingListItems() const; + QRect visualRect(const QModelIndex &index) const Q_DECL_OVERRIDE; void scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible) Q_DECL_OVERRIDE; QModelIndex indexAt(const QPoint &p) const Q_DECL_OVERRIDE; diff --git a/src/widgets/itemviews/qlistview_p.h b/src/widgets/itemviews/qlistview_p.h index 47effcdfd9..a66e007195 100644 --- a/src/widgets/itemviews/qlistview_p.h +++ b/src/widgets/itemviews/qlistview_p.h @@ -431,6 +431,8 @@ public: QRect elasticBand; bool showElasticBand; + + bool expandingListItems; }; // inline implementations |