Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsbearingnumericformat.cpp 3 : : ---------------------------- 4 : : begin : January 2020 5 : : copyright : (C) 2020 by Nyall Dawson 6 : : email : nyall dot dawson at gmail dot com 7 : : 8 : : *************************************************************************** 9 : : * * 10 : : * This program is free software; you can redistribute it and/or modify * 11 : : * it under the terms of the GNU General Public License as published by * 12 : : * the Free Software Foundation; either version 2 of the License, or * 13 : : * (at your option) any later version. * 14 : : * * 15 : : ***************************************************************************/ 16 : : 17 : : #include "qgsbearingnumericformat.h" 18 : : #include "qgis.h" 19 : : 20 : : 21 : 18 : QgsBearingNumericFormat::QgsBearingNumericFormat() 22 : 36 : { 23 : 18 : } 24 : : 25 : 5 : QString QgsBearingNumericFormat::id() const 26 : : { 27 : 10 : return QStringLiteral( "bearing" ); 28 : : } 29 : : 30 : 0 : QString QgsBearingNumericFormat::visibleName() const 31 : : { 32 : 0 : return QObject::tr( "Bearing" ); 33 : : } 34 : : 35 : 0 : int QgsBearingNumericFormat::sortKey() 36 : : { 37 : 0 : return QgsNumericFormat::sortKey(); 38 : : } 39 : : 40 : 0 : double QgsBearingNumericFormat::suggestSampleValue() const 41 : : { 42 : 0 : return 270.123; 43 : : } 44 : : 45 : 0 : QString QgsBearingNumericFormat::formatDouble( double value, const QgsNumericFormatContext &context ) const 46 : : { 47 : 0 : switch ( mDirectionFormat ) 48 : : { 49 : : case UseRange0To180WithEWDirectionalSuffix: 50 : : { 51 : 0 : value = fmod( value, 360.0 ); 52 : 0 : if ( value > 180 ) 53 : 0 : value -= 360; 54 : : 55 : 0 : QString res = QgsBasicNumericFormat::formatDouble( std::fabs( value ), context ); 56 : : 57 : 0 : if ( res != QLatin1String( "0" ) && res != QLatin1String( "180" ) ) 58 : : // TODO also test for 0.000, 180.000, etc 59 : 0 : res += QChar( 176 ) + ( value < 0 ? QObject::tr( "W" ) : QObject::tr( "E" ) ); 60 : : else 61 : 0 : res += QChar( 176 ); 62 : : 63 : 0 : return res; 64 : 0 : } 65 : : 66 : : case UseRangeNegative180ToPositive180: 67 : : { 68 : 0 : value = fmod( value, 360.0 ); 69 : 0 : if ( value > 180 ) 70 : 0 : value -= 360; 71 : 0 : if ( value < -180 ) 72 : 0 : value += 360; 73 : : 74 : 0 : return QgsBasicNumericFormat::formatDouble( value, context ) + QChar( 176 ); 75 : : } 76 : : 77 : 18 : case UseRange0To360: 78 : 0 : value = fmod( value, 360.0 ); 79 : 0 : if ( value < 0 ) 80 : 0 : value += 360; 81 : 0 : return QgsBasicNumericFormat::formatDouble( value, context ) + QChar( 176 ); 82 : : } 83 : : 84 : 0 : return QgsBasicNumericFormat::formatDouble( value, context ); 85 : 0 : } 86 : : 87 : 0 : QgsBearingNumericFormat *QgsBearingNumericFormat::clone() const 88 : : { 89 : 0 : return new QgsBearingNumericFormat( *this ); 90 : : } 91 : : 92 : 0 : QgsNumericFormat *QgsBearingNumericFormat::create( const QVariantMap &configuration, const QgsReadWriteContext &context ) const 93 : : { 94 : 0 : std::unique_ptr< QgsBearingNumericFormat > res = std::make_unique< QgsBearingNumericFormat >(); 95 : 0 : res->setConfiguration( configuration, context ); 96 : 0 : res->mDirectionFormat = static_cast< FormatDirectionOption >( configuration.value( QStringLiteral( "direction_format" ), 0 ).toInt() ); 97 : 0 : return res.release(); 98 : 0 : } 99 : : 100 : 0 : QVariantMap QgsBearingNumericFormat::configuration( const QgsReadWriteContext &context ) const 101 : : { 102 : 0 : QVariantMap res = QgsBasicNumericFormat::configuration( context ); 103 : 0 : res.insert( QStringLiteral( "direction_format" ), static_cast< int >( mDirectionFormat ) ); 104 : 0 : return res; 105 : 0 : } 106 : : 107 : 0 : QgsBearingNumericFormat::FormatDirectionOption QgsBearingNumericFormat::directionFormat() const 108 : : { 109 : 0 : return mDirectionFormat; 110 : : } 111 : : 112 : 0 : void QgsBearingNumericFormat::setDirectionFormat( FormatDirectionOption directionFormat ) 113 : : { 114 : 0 : mDirectionFormat = directionFormat; 115 : 0 : } 116 : : 117 : 8 : void QgsBearingNumericFormat::setConfiguration( const QVariantMap &configuration, const QgsReadWriteContext &context ) 118 : : { 119 : 8 : QgsBasicNumericFormat::setConfiguration( configuration, context ); 120 : 16 : mDirectionFormat = static_cast< FormatDirectionOption >( configuration.value( QStringLiteral( "direction_format" ), 0 ).toInt() ); 121 : 8 : }