From 58ce77f19aea54d98cb526453af69facf49a50de Mon Sep 17 00:00:00 2001 From: Alessandro Pasotti Date: Mon, 9 Nov 2020 12:03:03 +0100 Subject: [PATCH] Paletted: fix ordering from proxy model --- src/gui/raster/qgspalettedrendererwidget.cpp | 18 +++++++++++++++--- src/gui/raster/qgspalettedrendererwidget.h | 4 ++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/gui/raster/qgspalettedrendererwidget.cpp b/src/gui/raster/qgspalettedrendererwidget.cpp index d995f64a864a..112c054f3645 100644 --- a/src/gui/raster/qgspalettedrendererwidget.cpp +++ b/src/gui/raster/qgspalettedrendererwidget.cpp @@ -141,7 +141,7 @@ QgsPalettedRendererWidget::~QgsPalettedRendererWidget() QgsRasterRenderer *QgsPalettedRendererWidget::renderer() { - QgsPalettedRasterRenderer::ClassData classes = mModel->classData(); + QgsPalettedRasterRenderer::ClassData classes = mProxyModel->classData(); int bandNumber = mBandComboBox->currentBand(); QgsPalettedRasterRenderer *r = new QgsPalettedRasterRenderer( mRasterLayer->dataProvider(), bandNumber, classes ); @@ -342,7 +342,7 @@ void QgsPalettedRendererWidget::applyColorRamp() disconnect( mModel, &QgsPalettedRendererModel::classesChanged, this, &QgsPalettedRendererWidget::widgetChanged ); - QgsPalettedRasterRenderer::ClassData data = mModel->classData(); + QgsPalettedRasterRenderer::ClassData data = mProxyModel->classData(); QgsPalettedRasterRenderer::ClassData::iterator cIt = data.begin(); double numberOfEntries = data.count(); @@ -407,7 +407,7 @@ void QgsPalettedRendererWidget::saveColorTable() if ( outputFile.open( QFile::WriteOnly | QIODevice::Truncate ) ) { QTextStream outputStream( &outputFile ); - outputStream << QgsPalettedRasterRenderer::classDataToString( mModel->classData() ); + outputStream << QgsPalettedRasterRenderer::classDataToString( mProxyModel->classData() ); outputStream.flush(); outputFile.close(); @@ -876,4 +876,16 @@ void QgsPalettedRendererClassGatherer::run() emit collectedClasses(); } + +QgsPalettedRasterRenderer::ClassData QgsPalettedRendererProxyModel::classData() const +{ + QgsPalettedRasterRenderer::ClassData data; + for ( int i = 0; i < rowCount( ); ++i ) + { + data.push_back( qobject_cast( sourceModel() )->classAtIndex( mapToSource( index( i, 0 ) ) ) ); + } + return data; +} + + ///@endcond PRIVATE diff --git a/src/gui/raster/qgspalettedrendererwidget.h b/src/gui/raster/qgspalettedrendererwidget.h index 04e6b35aafff..4a5ad852fd6a 100644 --- a/src/gui/raster/qgspalettedrendererwidget.h +++ b/src/gui/raster/qgspalettedrendererwidget.h @@ -112,6 +112,7 @@ class QgsPalettedRendererModel : public QAbstractItemModel void setClassData( const QgsPalettedRasterRenderer::ClassData &data ); QgsPalettedRasterRenderer::ClassData classData() const { return mData; } + QgsPalettedRasterRenderer::Class classAtIndex( const QModelIndex &index ) const { return mData.at( index.row() ); } QModelIndex index( int row, int column, const QModelIndex &parent = QModelIndex() ) const override; QModelIndex parent( const QModelIndex &index ) const override; @@ -156,6 +157,9 @@ class QgsPalettedRendererProxyModel: public QSortFilterProxyModel { } + //! Return sorted class data + QgsPalettedRasterRenderer::ClassData classData() const; + protected: bool lessThan( const QModelIndex &left, const QModelIndex &right ) const override