┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews/kfileitemmodelrolesupdater.h
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2012-04-10 16:30:50 +0200
committerPeter Penz <[email protected]>2012-04-10 16:36:26 +0200
commitd9dbd3398a258d04ec4517fd13e795b437c869d6 (patch)
tree6f608d12001818cd416271ac7c4f462e9ddefc7a /src/kitemviews/kfileitemmodelrolesupdater.h
parentb8c3d933e66598c78180a73cb394b211ca6b52d0 (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.h21
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;