mirror of
https://github.com/YACReader/yacreader
synced 2025-11-19 17:12:49 -05:00
45 lines
1.2 KiB
C++
45 lines
1.2 KiB
C++
#include "qnaturalsorting.h"
|
|
|
|
#include <QCollator>
|
|
|
|
static QCollator collatorCI = [] {
|
|
QCollator c;
|
|
c.setNumericMode(true);
|
|
c.setIgnorePunctuation(false);
|
|
c.setCaseSensitivity(Qt::CaseInsensitive);
|
|
return c;
|
|
}();
|
|
|
|
static QCollator collatorCS = [] {
|
|
QCollator c;
|
|
c.setNumericMode(true);
|
|
c.setIgnorePunctuation(false);
|
|
c.setCaseSensitivity(Qt::CaseSensitive);
|
|
return c;
|
|
}();
|
|
|
|
int naturalCompare(const QString &s1, const QString &s2, Qt::CaseSensitivity caseSensitivity)
|
|
{
|
|
QCollator &c = (caseSensitivity == Qt::CaseSensitive) ? collatorCS : collatorCI;
|
|
return c.compare(s1, s2);
|
|
}
|
|
bool naturalSortLessThanCS(const QString &left, const QString &right)
|
|
{
|
|
return (naturalCompare(left, right, Qt::CaseSensitive) < 0);
|
|
}
|
|
|
|
bool naturalSortLessThanCI(const QString &left, const QString &right)
|
|
{
|
|
return (naturalCompare(left, right, Qt::CaseInsensitive) < 0);
|
|
}
|
|
|
|
bool naturalSortLessThanCIFileInfo(const QFileInfo &left, const QFileInfo &right)
|
|
{
|
|
return naturalSortLessThanCI(left.fileName(), right.fileName());
|
|
}
|
|
|
|
bool naturalSortLessThanCILibraryItem(LibraryItem *left, LibraryItem *right)
|
|
{
|
|
return naturalSortLessThanCI(left->name, right->name);
|
|
}
|