mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-05-05 01:20:42 +00:00
Use natural human sort for resources in resource inspector. Refs #1034
This commit is contained in:
@@ -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 =
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -85,5 +85,5 @@ private:
|
||||
ResourceId m_Resource;
|
||||
ResourceListItemModel *m_ResourceModel;
|
||||
int m_ResourceCacheID = -1;
|
||||
QSortFilterProxyModel *m_FilterModel;
|
||||
QCollatorSortFilterProxyModel *m_FilterModel;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user