28 formatter( QChar thousands,
bool showThousands, QChar decimal )
48 return QStringLiteral(
"fraction" );
53 return QObject::tr(
"Fraction" );
63 std::basic_stringstream<wchar_t> os;
64 os.imbue( std::locale( os.getloc(),
new formatter( mThousandsSeparator.isNull() ? context.
thousandsSeparator() : mThousandsSeparator,
65 mShowThousandsSeparator,
68 unsigned long long num;
69 unsigned long long den;
74 const double fixed = std::floor( std::fabs( value ) );
78 if ( mUseDedicatedUnicode && num == 1 && den == 2 )
80 else if ( mUseDedicatedUnicode && num == 1 && den == 3 )
81 res = QChar( 0x2153 );
82 else if ( mUseDedicatedUnicode && num == 2 && den == 3 )
83 res = QChar( 0x2154 );
84 else if ( mUseDedicatedUnicode && num == 1 && den == 4 )
86 else if ( mUseDedicatedUnicode && num == 3 && den == 4 )
88 else if ( mUseDedicatedUnicode && num == 1 && den == 5 )
89 res = QChar( 0x2155 );
90 else if ( mUseDedicatedUnicode && num == 2 && den == 5 )
91 res = QChar( 0x2156 );
92 else if ( mUseDedicatedUnicode && num == 3 && den == 5 )
93 res = QChar( 0x2157 );
94 else if ( mUseDedicatedUnicode && num == 4 && den == 5 )
95 res = QChar( 0x2158 );
96 else if ( mUseDedicatedUnicode && num == 1 && den == 6 )
97 res = QChar( 0x2159 );
98 else if ( mUseDedicatedUnicode && num == 5 && den == 6 )
99 res = QChar( 0x215A );
100 else if ( mUseDedicatedUnicode && num == 1 && den == 7 )
101 res = QChar( 0x2150 );
102 else if ( mUseDedicatedUnicode && num == 1 && den == 8 )
103 res = QChar( 0x215B );
104 else if ( mUseDedicatedUnicode && num == 3 && den == 8 )
105 res = QChar( 0x215C );
106 else if ( mUseDedicatedUnicode && num == 5 && den == 8 )
107 res = QChar( 0x215D );
108 else if ( mUseDedicatedUnicode && num == 7 && den == 8 )
109 res = QChar( 0x215E );
110 else if ( mUseDedicatedUnicode && num == 1 && den == 9 )
111 res = QChar( 0x2151 );
112 else if ( mUseDedicatedUnicode && num == 1 && den == 10 )
113 res = QChar( 0x2152 );
114 else if ( mUseUnicodeSuperSubscript )
115 res = num == 0 ? QString() : QStringLiteral(
"%1%2%3" ).arg(
toUnicodeSuperscript( QString::number( num ) ),
119 res = num == 0 ? QString() : QStringLiteral(
"%2/%3" ).arg( num ).arg( den );
122 os << std::fixed << std::setprecision( 0 );
124 res.prepend( QString::fromStdWString( os.str() ) +
' ' );
128 res = QString::number( 0 );
135 os << std::fixed << std::setprecision( 10 );
137 res = QString::fromStdWString( os.str() );
140 if ( value > 0 && mShowPlusSign )
155 std::unique_ptr< QgsFractionNumericFormat > res = qgis::make_unique< QgsFractionNumericFormat >();
157 return res.release();
163 res.insert( QStringLiteral(
"show_thousand_separator" ), mShowThousandsSeparator );
164 res.insert( QStringLiteral(
"show_plus" ), mShowPlusSign );
165 res.insert( QStringLiteral(
"thousand_separator" ), mThousandsSeparator );
166 res.insert( QStringLiteral(
"use_dedicated_unicode" ), mUseDedicatedUnicode );
167 res.insert( QStringLiteral(
"use_unicode_supersubscript" ), mUseUnicodeSuperSubscript );
178 return mUseDedicatedUnicode;
183 mUseDedicatedUnicode = enabled;
188 return mUseUnicodeSuperSubscript;
193 mUseUnicodeSuperSubscript = enabled;
198 mShowThousandsSeparator =
configuration.value( QStringLiteral(
"show_thousand_separator" ),
true ).toBool();
199 mShowPlusSign =
configuration.value( QStringLiteral(
"show_plus" ),
false ).toBool();
200 mThousandsSeparator =
configuration.value( QStringLiteral(
"thousand_separator" ), QChar() ).toChar();
201 mUseDedicatedUnicode =
configuration.value( QStringLiteral(
"use_dedicated_unicode" ),
false ).toBool();
202 mUseUnicodeSuperSubscript =
configuration.value( QStringLiteral(
"use_unicode_supersubscript" ),
true ).toBool();
207 return mShowThousandsSeparator;
217 return mShowPlusSign;
227 return mThousandsSeparator;
232 mThousandsSeparator = character;
238 for (
int i = 0; i < input.size(); ++i )
240 QChar
c = input.at( i );
242 res[i] = QChar( 0x2070 );
244 res[i] = QChar( 0x00B9 );
246 res[i] = QChar( 0x00B2 );
248 res[i] = QChar( 0x00B3 );
250 res[i] = QChar( 0x2074 );
252 res[i] = QChar( 0x2075 );
254 res[i] = QChar( 0x2076 );
256 res[i] = QChar( 0x2077 );
258 res[i] = QChar( 0x2078 );
260 res[i] = QChar( 0x2079 );
268 for (
int i = 0; i < input.size(); ++i )
270 QChar
c = input.at( i );
272 res[i] = QChar( 0x2080 );
274 res[i] = QChar( 0x2081 );
276 res[i] = QChar( 0x2082 );
278 res[i] = QChar( 0x2083 );
280 res[i] = QChar( 0x2084 );
282 res[i] = QChar( 0x2085 );
284 res[i] = QChar( 0x2086 );
286 res[i] = QChar( 0x2087 );
288 res[i] = QChar( 0x2088 );
290 res[i] = QChar( 0x2089 );