diff options
| author | Peter Penz <[email protected]> | 2012-04-10 16:30:50 +0200 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2012-04-10 16:36:26 +0200 |
| commit | d9dbd3398a258d04ec4517fd13e795b437c869d6 (patch) | |
| tree | 6f608d12001818cd416271ac7c4f462e9ddefc7a /src/kitemviews/kfileitemmodelrolesupdater.h | |
| parent | b8c3d933e66598c78180a73cb394b211ca6b52d0 (diff) | |
Improvements for slow sorting roles
If the sorting is done for data which is resolved asynchronously
(e.g. rating), it is important to give a visual feedback about
the state of the sorting. This is done now by a progress
indication in the statusbar.
Also optimizations for "Sort by type" have been done: Although
resolving a type can be expensive in the most often case it is a
very cheap operation. So it the sorting is done by type, try
to resolve the type synchronously for at least 200 ms to prevent
a asynchronous resorting. This is usually sufficient to have
resolved types even for directories with several thousands of
items.
BUG: 292733
FIXED-IN: 4.9.0
Diffstat (limited to 'src/kitemviews/kfileitemmodelrolesupdater.h')
| -rw-r--r-- | src/kitemviews/kfileitemmodelrolesupdater.h | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/kitemviews/kfileitemmodelrolesupdater.h b/src/kitemviews/kfileitemmodelrolesupdater.h index e5e105e04..ce8cf1c73 100644 --- a/src/kitemviews/kfileitemmodelrolesupdater.h +++ b/src/kitemviews/kfileitemmodelrolesupdater.h @@ -128,6 +128,8 @@ private slots: void slotItemsRemoved(const KItemRangeList& itemRanges); void slotItemsChanged(const KItemRangeList& itemRanges, const QSet<QByteArray>& roles); + void slotSortRoleChanged(const QByteArray& current, + const QByteArray& previous); /** * Is invoked after a preview has been received successfully. @@ -180,6 +182,22 @@ private: void resetPendingRoles(); void sortAndResolveAllRoles(); void sortAndResolvePendingRoles(); + void applySortProgressToModel(); + + /** + * Updates m_sortProgress to be 0 if the sort-role + * needs to get resolved asynchronously and hence a + * progress is required. Otherwise m_sortProgress + * will be set to -1 which means that no progress + * will be provided. + */ + void updateSortProgress(); + + /** + * @return True, if at least one item from the model + * has an unknown MIME-type. + */ + bool hasUnknownMimeTypes() const; enum ResolveHint { ResolveFast, @@ -222,11 +240,14 @@ private: // during the roles-updater has been paused by setPaused(). bool m_clearPreviews; + int m_sortProgress; + KFileItemModel* m_model; QSize m_iconSize; int m_firstVisibleIndex; int m_lastVisibleIndex; QSet<QByteArray> m_roles; + QSet<QByteArray> m_resolvableRoles; QStringList m_enabledPlugins; QSet<KFileItem> m_pendingVisibleItems; |
