Fix FunctionsWidget sorting (#91)

This commit is contained in:
Florian Märkl 2017-11-04 16:28:02 +01:00 committed by xarkes
parent 46bf0761bb
commit 54344fd259
2 changed files with 15 additions and 13 deletions

View File

@ -68,7 +68,7 @@ int FunctionModel::columnCount(const QModelIndex &/*parent*/) const
if (nested) if (nested)
return 1; return 1;
else else
return 4; return ColumnCount;
} }
@ -121,11 +121,11 @@ QVariant FunctionModel::data(const QModelIndex &index, int role) const
{ {
switch (index.column()) switch (index.column())
{ {
case 0: case NameColumn:
return function.name; return function.name;
case 1: case SizeColumn:
return RSizeString(function.size); return RSizeString(function.size);
case 3: case OffsetColumn:
return RAddressString(function.offset); return RAddressString(function.offset);
default: default:
return QVariant(); return QVariant();
@ -134,7 +134,7 @@ QVariant FunctionModel::data(const QModelIndex &index, int role) const
case Qt::DecorationRole: case Qt::DecorationRole:
if (import_addresses->contains(function.offset) && if (import_addresses->contains(function.offset) &&
(nested ? false : index.column() == 2)) (nested ? false : index.column() == ImportColumn))
return QIcon(":/img/icons/import_light.svg"); return QIcon(":/img/icons/import_light.svg");
return QVariant(); return QVariant();
@ -183,13 +183,13 @@ QVariant FunctionModel::headerData(int section, Qt::Orientation orientation, int
{ {
switch (section) switch (section)
{ {
case 0: case NameColumn:
return tr("Name"); return tr("Name");
case 1: case SizeColumn:
return tr("Size"); return tr("Size");
case 2: case ImportColumn:
return tr("Imp."); return tr("Imp.");
case 3: case OffsetColumn:
return tr("Offset"); return tr("Offset");
default: default:
return QVariant(); return QVariant();
@ -289,13 +289,13 @@ bool FunctionSortFilterProxyModel::lessThan(const QModelIndex &left, const QMode
{ {
switch (left.column()) switch (left.column())
{ {
case 0: case FunctionModel::OffsetColumn:
return left_function.offset < right_function.offset; return left_function.offset < right_function.offset;
case 1: case FunctionModel::SizeColumn:
if (left_function.size != right_function.size) if (left_function.size != right_function.size)
return left_function.size < right_function.size; return left_function.size < right_function.size;
break; break;
case 2: case FunctionModel::ImportColumn:
{ {
bool left_is_import = left.data(FunctionModel::IsImportRole).toBool(); bool left_is_import = left.data(FunctionModel::IsImportRole).toBool();
bool right_is_import = right.data(FunctionModel::IsImportRole).toBool(); bool right_is_import = right.data(FunctionModel::IsImportRole).toBool();
@ -303,7 +303,7 @@ bool FunctionSortFilterProxyModel::lessThan(const QModelIndex &left, const QMode
return true; return true;
break; break;
} }
case 3: case FunctionModel::NameColumn:
return left_function.name < right_function.name; return left_function.name < right_function.name;
default: default:
return false; return false;

View File

@ -37,6 +37,8 @@ public:
static const int FunctionDescriptionRole = Qt::UserRole; static const int FunctionDescriptionRole = Qt::UserRole;
static const int IsImportRole = Qt::UserRole + 1; static const int IsImportRole = Qt::UserRole + 1;
enum Column { NameColumn = 0, SizeColumn, ImportColumn, OffsetColumn, ColumnCount };
FunctionModel(QList<FunctionDescription> *functions, QSet<RVA> *import_addresses, bool nested, QFont default_font, QFont highlight_font, MainWindow *main, QObject *parent = 0); FunctionModel(QList<FunctionDescription> *functions, QSet<RVA> *import_addresses, bool nested, QFont default_font, QFont highlight_font, MainWindow *main, QObject *parent = 0);
QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;