diff --git a/modules/gui/qt/medialibrary/mlbasemodel.cpp b/modules/gui/qt/medialibrary/mlbasemodel.cpp index af30a63cff275b7e715756083734ba5f45d6711b..d3f4a680f93c2ad64859b1c7e4eb988897e35c64 100644 --- a/modules/gui/qt/medialibrary/mlbasemodel.cpp +++ b/modules/gui/qt/medialibrary/mlbasemodel.cpp @@ -114,7 +114,7 @@ public: int count = q->getCount(); int limit = q->getLimit(); //item doesn't exists - if ((limit != 0 && count >= limit) || loaded == getMaximumCount()) { + if ((limit >= 0 && count >= limit) || loaded == getMaximumCount()) { cb(std::nullopt); } else diff --git a/modules/gui/qt/util/base_model.cpp b/modules/gui/qt/util/base_model.cpp index dc3e9a60a1a1be7352aed90ce7b14150dc5901e2..5c7b88b0e18a26f30db3ca6e451e306abbbae9c2 100644 --- a/modules/gui/qt/util/base_model.cpp +++ b/modules/gui/qt/util/base_model.cpp @@ -76,13 +76,13 @@ void BaseModel::onCacheBeginMoveRows(int first, int last, int destination) emit beginMoveRows({}, first, last, {}, destination); } -unsigned int BaseModel::getLimit() const +int BaseModel::getLimit() const { Q_D(const BaseModel); return d->m_limit; } -void BaseModel::setLimit(unsigned int limit) +void BaseModel::setLimit(int limit) { Q_D(BaseModel); if (d->m_limit == limit) diff --git a/modules/gui/qt/util/base_model.hpp b/modules/gui/qt/util/base_model.hpp index 19299a2a878631284b77b848e519c48db59cf682..f671fe36df7d2ea834b36232e8cdbfd7167c845b 100644 --- a/modules/gui/qt/util/base_model.hpp +++ b/modules/gui/qt/util/base_model.hpp @@ -39,8 +39,9 @@ class BaseModel : public QAbstractListModel, public QQmlParserStatus NOTIFY sortCriteriaChanged RESET unsetSortCriteria FINAL) //maximum number of element to load - //limit = 0 means all elements are loaded - Q_PROPERTY(unsigned int limit READ getLimit WRITE setLimit NOTIFY limitChanged FINAL) + //limit < 0 means all elements are loaded + // QML does not have type ssize_t + Q_PROPERTY(int limit READ getLimit WRITE setLimit NOTIFY limitChanged FINAL) //skip in N first elements Q_PROPERTY(unsigned int offset READ getOffset WRITE setOffset NOTIFY offsetChanged FINAL) @@ -70,8 +71,8 @@ public: virtual void setSortCriteria(const QString& criteria); virtual void unsetSortCriteria(); - unsigned int getLimit() const; - void setLimit(unsigned int limit); + int getLimit() const; + void setLimit(int limit); unsigned int getOffset() const; void setOffset(unsigned int offset); diff --git a/modules/gui/qt/util/base_model_p.hpp b/modules/gui/qt/util/base_model_p.hpp index ebe8e38a5a1a156aad13933b364aa343939b3d84..7a6a6aac1b6e7a60064ca633688e5a3ee3c78852 100644 --- a/modules/gui/qt/util/base_model_p.hpp +++ b/modules/gui/qt/util/base_model_p.hpp @@ -114,7 +114,7 @@ protected: QString m_searchPattern = {}; Qt::SortOrder m_sortOrder = Qt::SortOrder::AscendingOrder; QString m_sortCriteria = {}; - unsigned int m_limit = 0; + ssize_t m_limit = -1; unsigned int m_offset = 0; bool m_qmlInitializing = false; }; diff --git a/modules/gui/qt/util/listcache.hpp b/modules/gui/qt/util/listcache.hpp index 3dd1f41bc7730f493bb8ab90b7f1551f63a97316..58ccaf2e7c54155c82272040e71d3b457105af9f 100644 --- a/modules/gui/qt/util/listcache.hpp +++ b/modules/gui/qt/util/listcache.hpp @@ -145,7 +145,7 @@ public: static constexpr ssize_t COUNT_UNINITIALIZED = -1; ListCache(std::unique_ptr<ListCacheLoader<ItemType>>&& loader, - bool useMove, size_t limit, size_t offset, size_t chunkSize = 100); + bool useMove, ssize_t limit, size_t offset, size_t chunkSize = 100); /** * Return the item at specified index @@ -273,8 +273,8 @@ private: QSharedPointer<ListCacheLoader<ItemType>> m_loader; size_t m_chunkSize; - //0 limit means no limit - size_t m_limit = 0; + //negative limit means no limit + ssize_t m_limit = -1; size_t m_offset = 0; //highest index requested by the view (1 based, 0 is nothing referenced) diff --git a/modules/gui/qt/util/listcache.hxx b/modules/gui/qt/util/listcache.hxx index 68c069591b81ee10a3b4b606076bf71cd617f536..70ecaf8a981ea318910cf13a89614acc9369c463 100644 --- a/modules/gui/qt/util/listcache.hxx +++ b/modules/gui/qt/util/listcache.hxx @@ -45,7 +45,7 @@ bool ListCache<T>::cacheDataCompare(const void* dataOld, uint32_t oldIndex, cons } template<typename T> -ListCache<T>::ListCache(std::unique_ptr<ListCacheLoader<ListCache<T>::ItemType>>&& loader, bool useMove, size_t limit, size_t offset, size_t chunkSize) +ListCache<T>::ListCache(std::unique_ptr<ListCacheLoader<ListCache<T>::ItemType>>&& loader, bool useMove, ssize_t limit, size_t offset, size_t chunkSize) : m_useMove(useMove) , m_loader(loader.release()) , m_chunkSize(chunkSize) @@ -549,8 +549,8 @@ void ListCache<T>::asyncCountAndLoad() m_needReload = true; } - size_t queryCount = (m_limit > 0) - ? std::min(m_limit, maximumCount) + size_t queryCount = (m_limit >= 0) + ? std::min(static_cast<size_t>(m_limit), maximumCount) : maximumCount; //note: should we drop items past queryCount?