33 class KDirSortFilterProxyModel::KDirSortFilterProxyModelPrivate
38 int compare(
const QString&,
const QString&, Qt::CaseSensitivity caseSensitivity = Qt::CaseSensitive)
const;
39 void slotNaturalSortingChanged();
41 bool m_sortFoldersFirst;
42 bool m_naturalSorting;
45 KDirSortFilterProxyModel::KDirSortFilterProxyModelPrivate::KDirSortFilterProxyModelPrivate(
KDirSortFilterProxyModel* q) :
46 m_sortFoldersFirst(true),
50 q, SLOT(slotNaturalSortingChanged()));
53 int KDirSortFilterProxyModel::KDirSortFilterProxyModelPrivate::compare(
const QString& a,
55 Qt::CaseSensitivity caseSensitivity)
const
57 if (caseSensitivity == Qt::CaseInsensitive) {
58 const int result = m_naturalSorting ? KStringHandler::naturalCompare(a, b, Qt::CaseInsensitive)
59 :
QString::compare(a, b, Qt::CaseInsensitive);
68 return m_naturalSorting ? KStringHandler::naturalCompare(a, b, Qt::CaseSensitive)
69 :
QString::compare(a, b, Qt::CaseSensitive);
73 void KDirSortFilterProxyModel::KDirSortFilterProxyModelPrivate::slotNaturalSortingChanged()
81 setDynamicSortFilter(
true);
84 setSortCaseSensitivity(Qt::CaseInsensitive);
87 setSupportedDragActions(Qt::CopyAction | Qt::MoveAction | Qt::LinkAction | Qt::IgnoreAction);
97 const QModelIndex sourceParent = mapToSource(parent);
98 return sourceModel()->hasChildren(sourceParent);
103 const QModelIndex sourceParent = mapToSource(parent);
104 return sourceModel()->canFetchMore(sourceParent);
111 QFile::Permission permissionsCheck[] = { QFile::ReadUser,
121 for (
int i = 0; i < 9; i++) {
122 points += info.permission(permissionsCheck[i]) ? 1 : 0;
130 d->m_sortFoldersFirst = foldersFirst;
135 return d->m_sortFoldersFirst;
139 const QModelIndex& right)
const
146 const bool isLessThan = (
sortOrder() == Qt::AscendingOrder);
149 if (d->m_sortFoldersFirst) {
150 const bool leftItemIsDir = leftFileItem.
isDir();
151 const bool rightItemIsDir = rightFileItem.
isDir();
152 if (leftItemIsDir && !rightItemIsDir) {
154 }
else if (!leftItemIsDir && rightItemIsDir) {
161 const bool leftItemIsHidden = leftFileItem.
isHidden();
162 const bool rightItemIsHidden = rightFileItem.
isHidden();
163 if (leftItemIsHidden && !rightItemIsHidden) {
165 }
else if (!leftItemIsHidden && rightItemIsHidden) {
169 switch (left.column()) {
171 int result = d->compare(leftFileItem.
text(), rightFileItem.
text(), sortCaseSensitivity());
174 result = d->compare(leftFileItem.
name(sortCaseSensitivity() == Qt::CaseInsensitive),
175 rightFileItem.
name(sortCaseSensitivity() == Qt::CaseInsensitive),
176 sortCaseSensitivity());
180 result = d->compare(leftFileItem.
url().
url(), rightFileItem.
url().
url(), sortCaseSensitivity());
190 if (leftFileItem.
isDir() && rightFileItem.
isDir()) {
200 if (leftCount == rightCount) {
201 return d->compare(leftFileItem.
text(), rightFileItem.
text(), sortCaseSensitivity()) < 0;
218 return leftCount < rightCount;
223 if (leftFileItem.
size() == rightFileItem.
size()) {
224 return d->compare(leftFileItem.
text(), rightFileItem.
text(), sortCaseSensitivity()) < 0;
228 return leftFileItem.
size() < rightFileItem.
size();
235 if (leftModifiedTime == rightModifiedTime) {
236 return d->compare(leftFileItem.
text(), rightFileItem.
text(), sortCaseSensitivity()) < 0;
239 return leftModifiedTime < rightModifiedTime;
245 QFileInfo rightFileInfo(rightFileItem.
url().
pathOrUrl());
250 if (leftPermissionsPoints == rightPermissionsPoints) {
251 return d->compare(leftFileItem.
text(), rightFileItem.
text(), sortCaseSensitivity()) < 0;
254 return leftPermissionsPoints > rightPermissionsPoints;
258 if (leftFileItem.
user() == rightFileItem.
user()) {
259 return d->compare(leftFileItem.
text(), rightFileItem.
text(), sortCaseSensitivity()) < 0;
262 return d->compare(leftFileItem.
user(), rightFileItem.
user()) < 0;
266 if (leftFileItem.
group() == rightFileItem.
group()) {
267 return d->compare(leftFileItem.
text(), rightFileItem.
text(), sortCaseSensitivity()) < 0;
270 return d->compare(leftFileItem.
group(), rightFileItem.
group()) < 0;
275 return d->compare(leftFileItem.
text(), rightFileItem.
text(), sortCaseSensitivity()) < 0;
288 #include "kdirsortfilterproxymodel.moc"