22
22
#include " qgscolordialog.h"
23
23
#include " qgssettings.h"
24
24
#include " qgsproject.h"
25
- #include " qgscolorrampshaderwidget.h"
26
25
#include " qgscolorrampimpl.h"
27
26
#include " qgslocaleawarenumericlineeditdelegate.h"
28
27
@@ -840,7 +839,7 @@ void QgsPalettedRendererModel::deleteAll()
840
839
//
841
840
842
841
QgsPalettedRendererClassGatherer::QgsPalettedRendererClassGatherer ( QgsRasterLayer *layer, int bandNumber, const QgsPalettedRasterRenderer::ClassData &existingClasses, QgsColorRamp *ramp )
843
- : mLayer( layer )
842
+ : mProvider( ( layer && layer-> dataProvider () ) ? layer->dataProvider()->clone() : nullptr )
844
843
, mBandNumber( bandNumber )
845
844
, mRamp( ramp )
846
845
, mClasses( existingClasses )
@@ -855,28 +854,31 @@ void QgsPalettedRendererClassGatherer::run()
855
854
mFeedback = new QgsRasterBlockFeedback ();
856
855
connect ( mFeedback , &QgsRasterBlockFeedback::progressChanged, this , &QgsPalettedRendererClassGatherer::progressChanged );
857
856
858
- QgsPalettedRasterRenderer::ClassData newClasses = QgsPalettedRasterRenderer::classDataFromRaster ( mLayer ->dataProvider (), mBandNumber , mRamp .get (), mFeedback );
859
-
860
- // combine existing classes with new classes
861
- QgsPalettedRasterRenderer::ClassData::iterator classIt = newClasses.begin ();
862
- emit progressChanged ( 0 );
863
- qlonglong i = 0 ;
864
- for ( ; classIt != newClasses.end (); ++classIt )
857
+ if ( mProvider )
865
858
{
866
- // check if existing classes contains this same class
867
- for ( const QgsPalettedRasterRenderer::Class &existingClass : std::as_const ( mClasses ) )
859
+ QgsPalettedRasterRenderer::ClassData newClasses = QgsPalettedRasterRenderer::classDataFromRaster ( mProvider .get (), mBandNumber , mRamp .get (), mFeedback );
860
+
861
+ // combine existing classes with new classes
862
+ QgsPalettedRasterRenderer::ClassData::iterator classIt = newClasses.begin ();
863
+ emit progressChanged ( 0 );
864
+ qlonglong i = 0 ;
865
+ for ( ; classIt != newClasses.end (); ++classIt )
868
866
{
869
- if ( existingClass.value == classIt->value )
867
+ // check if existing classes contains this same class
868
+ for ( const QgsPalettedRasterRenderer::Class &existingClass : std::as_const ( mClasses ) )
870
869
{
871
- classIt->color = existingClass.color ;
872
- classIt->label = existingClass.label ;
873
- break ;
870
+ if ( existingClass.value == classIt->value )
871
+ {
872
+ classIt->color = existingClass.color ;
873
+ classIt->label = existingClass.label ;
874
+ break ;
875
+ }
874
876
}
877
+ i ++;
878
+ emit progressChanged ( 100 * ( i / static_cast <float >( newClasses.count () ) ) );
875
879
}
876
- i ++;
877
- emit progressChanged ( 100 * ( i / static_cast <float >( newClasses.count () ) ) );
880
+ mClasses = newClasses;
878
881
}
879
- mClasses = newClasses;
880
882
881
883
// be overly cautious - it's *possible* stop() might be called between deleting mFeedback and nulling it
882
884
mFeedbackMutex .lock ();
0 commit comments