Skip to content

Commit

Permalink
Add method to load paletted renderer classes from file
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed Apr 3, 2017
1 parent a6d3af7 commit d542a1a
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 0 deletions.
1 change: 1 addition & 0 deletions python/core/raster/qgspalettedrasterrenderer.sip
Expand Up @@ -38,6 +38,7 @@ class QgsPalettedRasterRenderer : QgsRasterRenderer
QgsColorRamp *sourceColorRamp() const;
static QgsPalettedRasterRenderer::ClassData colorTableToClassData( const QList<QgsColorRampShader::ColorRampItem> &table );
static QgsPalettedRasterRenderer::ClassData classDataFromString( const QString &string );
static QgsPalettedRasterRenderer::ClassData classDataFromFile( const QString &path );

private:

Expand Down
13 changes: 13 additions & 0 deletions src/core/raster/qgspalettedrasterrenderer.cpp
Expand Up @@ -362,6 +362,19 @@ QgsPalettedRasterRenderer::ClassData QgsPalettedRasterRenderer::classDataFromStr
return classes;
}

QgsPalettedRasterRenderer::ClassData QgsPalettedRasterRenderer::classDataFromFile( const QString &path )
{
QFile inputFile( path );
QString input;
if ( inputFile.open( QIODevice::ReadOnly ) )
{
QTextStream in( &inputFile );
input = in.readAll();
inputFile.close();
}
return classDataFromString( input );
}

void QgsPalettedRasterRenderer::updateArrays()
{
// find maximum color index
Expand Down
8 changes: 8 additions & 0 deletions src/core/raster/qgspalettedrasterrenderer.h
Expand Up @@ -116,9 +116,17 @@ class CORE_EXPORT QgsPalettedRasterRenderer: public QgsRasterRenderer
/**
* Converts a \a string containing a color table or class data to to paletted renderer class data.
* @note added in QGIS 3.0
* @see classDataFromFile()
*/
static QgsPalettedRasterRenderer::ClassData classDataFromString( const QString &string );

/**
* Opens a color table file and returns corresponding paletted renderer class data.
* @note added in QGIS 3.0
* @see classDataFromString()
*/
static QgsPalettedRasterRenderer::ClassData classDataFromFile( const QString &path );

private:

int mBand;
Expand Down
32 changes: 32 additions & 0 deletions tests/src/python/test_qgsrasterlayer.py
Expand Up @@ -500,6 +500,38 @@ def testLoadPalettedColorDataFromString(self):
classes = QgsPalettedRasterRenderer.classDataFromString(bad)
self.assertEqual(len(classes), 0)

def testLoadPalettedClassDataFromFile(self):
# bad file
classes = QgsPalettedRasterRenderer.classDataFromFile('ajdhjashjkdh kjahjkdhk')
self.assertEqual(len(classes), 0)

# good file!
path = os.path.join(unitTestDataPath('raster'),
'test.clr')
classes = QgsPalettedRasterRenderer.classDataFromFile(path)
self.assertEqual(len(classes), 10)
self.assertEqual(classes[0].value, 1)
self.assertEqual(classes[0].color.name(), '#000000')
self.assertEqual(classes[0].color.alpha(), 255)
self.assertEqual(classes[1].value, 2)
self.assertEqual(classes[1].color.name(), '#c8c8c8')
self.assertEqual(classes[2].value, 3)
self.assertEqual(classes[2].color.name(), '#006e00')
self.assertEqual(classes[3].value, 4)
self.assertEqual(classes[3].color.name(), '#6e4100')
self.assertEqual(classes[4].value, 5)
self.assertEqual(classes[4].color.name(), '#0000ff')
self.assertEqual(classes[4].color.alpha(), 255)
self.assertEqual(classes[5].value, 6)
self.assertEqual(classes[5].color.name(), '#0059ff')
self.assertEqual(classes[6].value, 7)
self.assertEqual(classes[6].color.name(), '#00aeff')
self.assertEqual(classes[7].value, 8)
self.assertEqual(classes[7].color.name(), '#00fff6')
self.assertEqual(classes[8].value, 9)
self.assertEqual(classes[8].color.name(), '#eeff00')
self.assertEqual(classes[9].value, 10)
self.assertEqual(classes[9].color.name(), '#ffb600')

if __name__ == '__main__':
unittest.main()

0 comments on commit d542a1a

Please sign in to comment.