Fix sorting for texture viewer texture list

This commit is contained in:
baldurk
2021-04-20 13:51:41 +01:00
parent 6f25063eb2
commit e3eb2ee754
3 changed files with 40 additions and 6 deletions
+1 -1
View File
@@ -2113,7 +2113,7 @@ void RDStyle::drawControl(ControlElement control, const QStyleOption *opt, QPain
arrowRect.setLeft(arrowRect.right() - Constants::SpinButtonDim);
qreal yoffset = 2.5f;
if(header->sortIndicator == QStyleOptionHeader::SortDown)
if(header->sortIndicator == QStyleOptionHeader::SortUp)
yoffset = -yoffset;
qreal ycentre = arrowRect.center().y();
+35 -3
View File
@@ -310,14 +310,46 @@ void RDTreeWidgetItem::checkForResourceId(int col)
void RDTreeWidgetItem::sort(int column, Qt::SortOrder order)
{
ICaptureContext *ctx = getCaptureContext(m_widget);
std::sort(m_children.begin(), m_children.end(),
[column, order](const RDTreeWidgetItem *a, const RDTreeWidgetItem *b) {
[ctx, column, order](const RDTreeWidgetItem *a, const RDTreeWidgetItem *b) {
QVariant va = a->data(column, Qt::DisplayRole);
QVariant vb = b->data(column, Qt::DisplayRole);
QString sa, sb;
if(ctx)
{
sa = RichResourceTextFormat(*ctx, va);
sb = RichResourceTextFormat(*ctx, vb);
}
else
{
sa = va.toString();
sb = vb.toString();
}
bool da_ok = false, db_ok = false;
double da = sa.toDouble(&da_ok);
double db = sb.toDouble(&db_ok);
int comp;
if(da_ok && db_ok)
{
if(order == Qt::AscendingOrder)
return da < db;
return da > db;
}
else
{
comp = QString::compare(sa, sb, Qt::CaseInsensitive);
}
if(order == Qt::AscendingOrder)
return va < vb;
return va > vb;
return comp < 0;
return comp > 0;
});
for(RDTreeWidgetItem *child : m_children)
+4 -2
View File
@@ -647,8 +647,7 @@ TextureViewer::TextureViewer(ICaptureContext &ctx, QWidget *parent)
header->setColumnStretchHints({1, -1, -1, -1, -1, -1, -1});
}
ui->textureList->header()->sortIndicatorChanged(TextureListFilter::Column_TexName,
Qt::SortOrder::DescendingOrder);
ui->textureList->sortByColumn(TextureListFilter::Column_TexName, Qt::SortOrder::AscendingOrder);
ui->zoomOption->setCurrentText(QString());
ui->fitToWindow->toggle();
@@ -3068,6 +3067,9 @@ void TextureViewer::refreshTextureList(FilterType filterType, const QString &fil
ui->textureList->setSelectedItem(root);
ui->textureList->sortByColumn(ui->textureList->header()->sortIndicatorSection(),
ui->textureList->header()->sortIndicatorOrder());
ui->textureList->setUpdatesEnabled(true);
ui->textureList->endUpdate();