LCOV - code coverage report
Current view: top level - core/raster - qgsrasterrendererutils.cpp (source / functions) Hit Total Coverage
Test: coverage.info.cleaned Lines: 0 72 0.0 %
Date: 2021-04-10 08:29:14 Functions: 0 0 -
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /***************************************************************************
       2                 :            :                          qgsrasterrendererutils.cpp
       3                 :            :                          -------------------
       4                 :            :     begin                : September 2020
       5                 :            :     copyright            : (C) 2020 by Nyall Dawson
       6                 :            :     email                : nyall dawson dawson at gmail dot com
       7                 :            :  ***************************************************************************/
       8                 :            : 
       9                 :            : /***************************************************************************
      10                 :            :  *                                                                         *
      11                 :            :  *   This program is free software; you can redistribute it and/or modify  *
      12                 :            :  *   it under the terms of the GNU General Public License as published by  *
      13                 :            :  *   the Free Software Foundation; either version 2 of the License, or     *
      14                 :            :  *   (at your option) any later version.                                   *
      15                 :            :  *                                                                         *
      16                 :            :  ***************************************************************************/
      17                 :            : 
      18                 :            : #include "qgsrasterrendererutils.h"
      19                 :            : #include "qgis.h"
      20                 :            : #include <QFile>
      21                 :            : #include <QTextStream>
      22                 :            : #include <QRegularExpression>
      23                 :            : 
      24                 :          0 : bool QgsRasterRendererUtils::parseColorMapFile( const QString &path, QList<QgsColorRampShader::ColorRampItem> &items, QgsColorRampShader::Type &type, QStringList &errors )
      25                 :            : {
      26                 :          0 :   QFile inputFile( path );
      27                 :          0 :   if ( !inputFile.open( QFile::ReadOnly ) )
      28                 :            :   {
      29                 :          0 :     errors.append( QObject::tr( "Read access denied. Adjust the file permissions and try again.\n\n" ) );
      30                 :          0 :     return false;
      31                 :            :   }
      32                 :            : 
      33                 :          0 :   bool res = true;
      34                 :            : 
      35                 :          0 :   QTextStream inputStream( &inputFile );
      36                 :          0 :   int lineCounter = 0;
      37                 :          0 :   const QRegularExpression itemRegex( QStringLiteral( "^(.+?),(.+?),(.+?),(.+?),(.+?),(.+)$" ) );
      38                 :            : 
      39                 :            :   //read through the input looking for valid data
      40                 :          0 :   while ( !inputStream.atEnd() )
      41                 :            :   {
      42                 :          0 :     lineCounter++;
      43                 :          0 :     const QString inputLine = inputStream.readLine();
      44                 :          0 :     if ( !inputLine.isEmpty() )
      45                 :            :     {
      46                 :          0 :       if ( !inputLine.simplified().startsWith( '#' ) )
      47                 :            :       {
      48                 :          0 :         if ( inputLine.contains( QLatin1String( "INTERPOLATION" ), Qt::CaseInsensitive ) )
      49                 :            :         {
      50                 :          0 :           QStringList inputStringComponents = inputLine.split( ':' );
      51                 :          0 :           if ( inputStringComponents.size() == 2 )
      52                 :            :           {
      53                 :          0 :             if ( inputStringComponents[1].trimmed().toUpper().compare( QLatin1String( "INTERPOLATED" ), Qt::CaseInsensitive ) == 0 )
      54                 :            :             {
      55                 :          0 :               type = QgsColorRampShader::Interpolated;
      56                 :          0 :             }
      57                 :          0 :             else if ( inputStringComponents[1].trimmed().toUpper().compare( QLatin1String( "DISCRETE" ), Qt::CaseInsensitive ) == 0 )
      58                 :            :             {
      59                 :          0 :               type = QgsColorRampShader::Discrete;
      60                 :          0 :             }
      61                 :            :             else
      62                 :            :             {
      63                 :          0 :               type = QgsColorRampShader::Exact;
      64                 :            :             }
      65                 :          0 :           }
      66                 :            :           else
      67                 :            :           {
      68                 :          0 :             res = false;
      69                 :          0 :             errors << QObject::tr( "Unknown interpolation type at line %1: %2" ).arg( lineCounter ).arg( inputLine );
      70                 :            :           }
      71                 :          0 :         }
      72                 :            :         else
      73                 :            :         {
      74                 :          0 :           const QRegularExpressionMatch match = itemRegex.match( inputLine );
      75                 :          0 :           if ( match.hasMatch() )
      76                 :            :           {
      77                 :          0 :             QgsColorRampShader::ColorRampItem currentItem( match.captured( 1 ).toDouble(),
      78                 :          0 :                 QColor::fromRgb( match.captured( 2 ).toInt(), match.captured( 3 ).toInt(), match.captured( 4 ).toInt(), match.captured( 5 ).toInt() ),
      79                 :          0 :                 match.captured( 6 ) );
      80                 :          0 :             items.push_back( currentItem );
      81                 :          0 :           }
      82                 :            :           else
      83                 :            :           {
      84                 :          0 :             res = false;
      85                 :          0 :             errors << QObject::tr( "Invalid entry at line %1: %2" ).arg( lineCounter ).arg( inputLine );
      86                 :            :           }
      87                 :          0 :         }
      88                 :          0 :       }
      89                 :          0 :     }
      90                 :          0 :     lineCounter++;
      91                 :          0 :   }
      92                 :            : 
      93                 :          0 :   return res;
      94                 :          0 : }
      95                 :            : 
      96                 :          0 : bool QgsRasterRendererUtils::saveColorMapFile( const QString &path, const QList<QgsColorRampShader::ColorRampItem> &items, QgsColorRampShader::Type type )
      97                 :            : {
      98                 :          0 :   QFile outputFile( path );
      99                 :          0 :   if ( outputFile.open( QFile::WriteOnly | QIODevice::Truncate ) )
     100                 :            :   {
     101                 :          0 :     QTextStream outputStream( &outputFile );
     102                 :          0 :     outputStream << "# " << QObject::tr( "QGIS Generated Color Map Export File" ) << '\n';
     103                 :          0 :     outputStream << "INTERPOLATION:";
     104                 :          0 :     switch ( type )
     105                 :            :     {
     106                 :            :       case QgsColorRampShader::Interpolated:
     107                 :          0 :         outputStream << "INTERPOLATED\n";
     108                 :          0 :         break;
     109                 :            :       case QgsColorRampShader::Discrete:
     110                 :          0 :         outputStream << "DISCRETE\n";
     111                 :          0 :         break;
     112                 :            :       case QgsColorRampShader::Exact:
     113                 :          0 :         outputStream << "EXACT\n";
     114                 :          0 :         break;
     115                 :            :     }
     116                 :            : 
     117                 :          0 :     int i = 0;
     118                 :          0 :     for ( const QgsColorRampShader::ColorRampItem &item : items )
     119                 :            :     {
     120                 :          0 :       outputStream << qgsDoubleToString( item.value ) << ',';
     121                 :          0 :       outputStream << item.color.red() << ',' << item.color.green() << ',' << item.color.blue() << ',' << item.color.alpha() << ',';
     122                 :          0 :       if ( item.label.isEmpty() )
     123                 :            :       {
     124                 :          0 :         outputStream << "Color entry " << i + 1 << '\n';
     125                 :          0 :       }
     126                 :            :       else
     127                 :            :       {
     128                 :          0 :         outputStream << item.label << '\n';
     129                 :            :       }
     130                 :          0 :       i++;
     131                 :            :     }
     132                 :          0 :     outputStream.flush();
     133                 :          0 :     outputFile.close();
     134                 :          0 :     return true;
     135                 :          0 :   }
     136                 :            :   else
     137                 :            :   {
     138                 :          0 :     return false;
     139                 :            :   }
     140                 :          0 : }
     141                 :            : 

Generated by: LCOV version 1.14