diff options
| author | Peter Penz <[email protected]> | 2012-02-03 23:07:33 +0100 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2012-02-03 23:12:12 +0100 |
| commit | 1041f340a2ddb634476c5d84585a56c29e5a70fd (patch) | |
| tree | b627a3c118e059215802b2bc4356395aac77271b /src/kitemviews | |
| parent | 7bbdb66618625c2db58b0fce1999c433dc946dc5 (diff) | |
Show the value "Unknown" for the item-count only after it has been verified
During determining the item-count for directories just show an empty string
until either the item-count has been calculated or if the item-count is unknown.
Thanks to Nikita Skovoroda for the initial proof-of-concept patch.
BUG: 291823
FIXED-IN: 4.8.1
Diffstat (limited to 'src/kitemviews')
| -rw-r--r-- | src/kitemviews/kfileitemlistwidget.cpp | 12 | ||||
| -rw-r--r-- | src/kitemviews/kfileitemmodel.cpp | 23 | ||||
| -rw-r--r-- | src/kitemviews/kfileitemmodel.h | 6 | ||||
| -rw-r--r-- | src/kitemviews/kfileitemmodelrolesupdater.cpp | 12 |
4 files changed, 24 insertions, 29 deletions
diff --git a/src/kitemviews/kfileitemlistwidget.cpp b/src/kitemviews/kfileitemlistwidget.cpp index 7e28c5d37..d93e434da 100644 --- a/src/kitemviews/kfileitemlistwidget.cpp +++ b/src/kitemviews/kfileitemlistwidget.cpp @@ -231,11 +231,13 @@ QString KFileItemListWidget::roleText(const QByteArray& role, const QHash<QByteA if (values.value("isDir").toBool()) { // The item represents a directory. Show the number of sub directories // instead of the file size of the directory. - if (roleValue.isNull()) { - text = i18nc("@item:intable", "Unknown"); - } else { - const KIO::filesize_t size = roleValue.value<KIO::filesize_t>(); - text = i18ncp("@item:intable", "%1 item", "%1 items", size); + if (!roleValue.isNull()) { + const int count = roleValue.toInt(); + if (count < 0) { + text = i18nc("@item:intable", "Unknown"); + } else { + text = i18ncp("@item:intable", "%1 item", "%1 items", count); + } } } else { // Show the size in kilobytes (always round up) diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp index 95c960b3d..db9b71189 100644 --- a/src/kitemviews/kfileitemmodel.cpp +++ b/src/kitemviews/kfileitemmodel.cpp @@ -1313,12 +1313,20 @@ int KFileItemModel::sortRoleCompare(const ItemData* a, const ItemData* b) const } else if (valueB.isNull()) { result = +1; } else { - result = fileSizeCompare(valueA.value<KIO::filesize_t>(), valueB.value<KIO::filesize_t>()); + result = valueA.toInt() - valueB.toInt(); } } else { // See "if (m_sortFoldersFirst || m_sortRole == SizeRole)" in KFileItemModel::lessThan(): Q_ASSERT(!itemB.isDir()); - result = fileSizeCompare(itemA.size(), itemB.size()); + const KIO::filesize_t sizeA = itemA.size(); + const KIO::filesize_t sizeB = itemB.size(); + if (sizeA > sizeB) { + result = +1; + } else if (sizeA < sizeB) { + result = -1; + } else { + result = 0; + } } break; } @@ -1943,15 +1951,4 @@ KFileItemList KFileItemModel::childItems(const KFileItem& item) const return items; } -int KFileItemModel::fileSizeCompare(KIO::filesize_t a, KIO::filesize_t b) -{ - if (a > b) { - return +1; - } else if (a < b) { - return -1; - } else { - return 0; - } -} - #include "kfileitemmodel.moc" diff --git a/src/kitemviews/kfileitemmodel.h b/src/kitemviews/kfileitemmodel.h index d819c3734..ff816c85c 100644 --- a/src/kitemviews/kfileitemmodel.h +++ b/src/kitemviews/kfileitemmodel.h @@ -330,12 +330,6 @@ private: */ KFileItemList childItems(const KFileItem& item) const; - /** - * Helper method for sortRoleCompare(). - * @return 0 if both sizes are equal, +1 if a > b and -1 if a < b. - */ - static int fileSizeCompare(KIO::filesize_t a, KIO::filesize_t b); - private: QWeakPointer<KDirLister> m_dirLister; diff --git a/src/kitemviews/kfileitemmodelrolesupdater.cpp b/src/kitemviews/kfileitemmodelrolesupdater.cpp index 14e7f00ff..7050d21c9 100644 --- a/src/kitemviews/kfileitemmodelrolesupdater.cpp +++ b/src/kitemviews/kfileitemmodelrolesupdater.cpp @@ -743,16 +743,18 @@ QHash<QByteArray, QVariant> KFileItemModelRolesUpdater::rolesData(const KFileIte const bool getSizeRole = m_roles.contains("size"); const bool getIsExpandableRole = m_roles.contains("isExpandable"); - if ((getSizeRole || getIsExpandableRole) && item.isDir() && item.isLocalFile()) { - const QString path = item.localPath(); - const int count = subItemsCount(path); - if (count >= 0) { + if ((getSizeRole || getIsExpandableRole) && item.isDir()) { + if (item.isLocalFile()) { + const QString path = item.localPath(); + const int count = subItemsCount(path); if (getSizeRole) { - data.insert("size", KIO::filesize_t(count)); + data.insert("size", count); } if (getIsExpandableRole) { data.insert("isExpandable", count > 0); } + } else if (getSizeRole) { + data.insert("size", -1); // -1 indicates an unknown number of items } } |
