Sort cell id column by numerical order.

This commit is contained in:
cc9cii 2014-10-07 20:11:44 +11:00
parent 0cccdfd114
commit a161ad3cd5
2 changed files with 27 additions and 2 deletions

View file

@ -48,3 +48,24 @@ void CSMWorld::IdTableProxyModel::setFilter (const boost::shared_ptr<CSMFilter::
updateColumnMap();
invalidateFilter();
}
bool CSMWorld::IdTableProxyModel::lessThan(const QModelIndex &left, const QModelIndex &right) const
{
if(headerData(left.column(), Qt::Horizontal).toString() != "ID")
return QSortFilterProxyModel::lessThan(left, right);
QRegExp cellPattern = QRegExp("^#(\\D?\\d+) +(\\D?\\d+)");
int leftResult = cellPattern.indexIn(sourceModel()->data(left).toString());
int leftX = cellPattern.cap(1).toInt();
int leftY = cellPattern.cap(2).toInt();
int rightResult = cellPattern.indexIn(sourceModel()->data(right).toString());
int rightX = cellPattern.cap(1).toInt();
int rightY = cellPattern.cap(2).toInt();
if(leftResult != -1 && rightResult != -1)
return(leftX < rightX) || (leftX == rightX && leftY <= rightY);
else
return QSortFilterProxyModel::lessThan(left, right);
}

View file

@ -33,6 +33,10 @@ namespace CSMWorld
virtual QModelIndex getModelIndex (const std::string& id, int column) const;
void setFilter (const boost::shared_ptr<CSMFilter::Node>& filter);
protected:
bool lessThan(const QModelIndex &left, const QModelIndex &right) const;
};
}