Use natural human sort for resources in resource inspector. Refs #1034

This commit is contained in:
baldurk
2018-08-03 16:10:19 +01:00
parent f36701779c
commit cbcfe85d97
4 changed files with 44 additions and 2 deletions
+19
View File
@@ -25,6 +25,7 @@
#include "QRDUtils.h"
#include <QAbstractTextDocumentLayout>
#include <QApplication>
#include <QCollator>
#include <QDesktopServices>
#include <QElapsedTimer>
#include <QFileSystemModel>
@@ -1128,6 +1129,24 @@ bool QFileFilterModel::filterAcceptsRow(int source_row, const QModelIndex &sourc
return true;
}
QCollatorSortFilterProxyModel::QCollatorSortFilterProxyModel(QObject *parent)
: QSortFilterProxyModel(parent)
{
m_collator = new QCollator();
}
QCollatorSortFilterProxyModel::~QCollatorSortFilterProxyModel()
{
delete m_collator;
}
bool QCollatorSortFilterProxyModel::lessThan(const QModelIndex &source_left,
const QModelIndex &source_right) const
{
return m_collator->compare(sourceModel()->data(source_left, sortRole()).toString(),
sourceModel()->data(source_right, sortRole()).toString()) < 0;
}
void addGridLines(QGridLayout *grid, QColor gridColor)
{
QString style =
+19
View File
@@ -328,6 +328,25 @@ private:
QDir::Filters m_requireMask, m_excludeMask;
};
class QCollator;
class QCollatorSortFilterProxyModel : public QSortFilterProxyModel
{
Q_OBJECT
public:
explicit QCollatorSortFilterProxyModel(QObject *parent = Q_NULLPTR);
~QCollatorSortFilterProxyModel();
QCollator *collator() { return m_collator; }
protected:
virtual bool lessThan(const QModelIndex &source_left,
const QModelIndex &source_right) const override;
private:
QCollator *m_collator;
};
// Simple QStyledItemDelegate child that will either forward to an external delegate (allowing
// chaining) or to the base implementation. Delegates can derive from this and specialise a couple
// of functions to still be able to chain
+5 -1
View File
@@ -23,6 +23,7 @@
******************************************************************************/
#include "ResourceInspector.h"
#include <QCollator>
#include <QKeyEvent>
#include "3rdparty/toolwindowmanager/ToolWindowManagerArea.h"
#include "Widgets/Extended/RDHeaderView.h"
@@ -110,10 +111,13 @@ ResourceInspector::ResourceInspector(ICaptureContext &ctx, QWidget *parent)
m_ResourceModel = new ResourceListItemModel(this, m_Ctx);
m_FilterModel = new QSortFilterProxyModel(this);
m_FilterModel = new QCollatorSortFilterProxyModel(this);
m_FilterModel->setSourceModel(m_ResourceModel);
m_FilterModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
m_FilterModel->setFilterRole(FilterRole);
m_FilterModel->sort(0);
m_FilterModel->collator()->setNumericMode(true);
m_FilterModel->collator()->setCaseSensitivity(Qt::CaseInsensitive);
ui->resourceList->setModel(m_FilterModel);
+1 -1
View File
@@ -85,5 +85,5 @@ private:
ResourceId m_Resource;
ResourceListItemModel *m_ResourceModel;
int m_ResourceCacheID = -1;
QSortFilterProxyModel *m_FilterModel;
QCollatorSortFilterProxyModel *m_FilterModel;
};