• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdelibs API Reference
  • KDE Home
  • Contact Us
 

KDECore

  • sources
  • kde-4.14
  • kdelibs
  • kdecore
  • localization
kcurrencycode.cpp
Go to the documentation of this file.
1 /*
2  Copyright (c) 2009 John Layt <john@layt.net>
3 
4  This library is free software; you can redistribute it and/or
5  modify it under the terms of the GNU Library General Public
6  License as published by the Free Software Foundation; either
7  version 2 of the License, or (at your option) any later version.
8 
9  This library is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12  Library General Public License for more details.
13 
14  You should have received a copy of the GNU Library General Public License
15  along with this library; see the file COPYING.LIB. If not, write to
16  the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17  Boston, MA 02110-1301, USA.
18 */
19 
20 #include "kcurrencycode.h"
21 
22 #include <QtCore/QSharedData>
23 #include <QtCore/QDate>
24 #include <QtCore/QString>
25 #include <QtCore/QStringList>
26 #include <QtCore/QFileInfo>
27 
28 #include "kconfig.h"
29 #include "kconfiggroup.h"
30 #include "kglobal.h"
31 #include "klocale.h"
32 #include "kstandarddirs.h"
33 #include "kdebug.h"
34 
35 class KCurrencyCodePrivate : public QSharedData
36 {
37 public:
38  KCurrencyCodePrivate( const QString &isoCurrencyCode, const QString &language = QString() );
39  KCurrencyCodePrivate( const QFileInfo &currencyCodeFile, const QString &language = QString() );
40  KCurrencyCodePrivate( const KCurrencyCodePrivate& other );
41  virtual ~KCurrencyCodePrivate();
42 
43  void loadCurrency( const QFileInfo &currencyCodeFile, const QString &language );
44 
45  QString m_currencyCodeIsoAlpha3;
46  QString m_currencyCodeIsoNumeric3;
47  QString m_currencyNameIso;
48  QString m_currencyNameDisplay;
49  QStringList m_currencyUnitSymbols;
50  QString m_currencyUnitSymbolDefault;
51  QString m_currencyUnitSymbolUnambiguous;
52  QString m_currencyUnitSingular;
53  QString m_currencyUnitPlural;
54  QString m_currencySubunitSymbol;
55  QString m_currencySubunitSingular;
56  QString m_currencySubunitPlural;
57  QDate m_currencyIntroducedDate;
58  QDate m_currencySuspendedDate;
59  QDate m_currencyWithdrawnDate;
60  int m_currencySubunits;
61  int m_currencySubunitsPerUnit;
62  bool m_currencySubunitsInCirculation;
63  int m_currencyDecimalPlacesDisplay;
64  QStringList m_currencyCountriesInUse;
65 };
66 
67 KCurrencyCodePrivate::KCurrencyCodePrivate( const QString &isoCurrencyCode, const QString &language )
68 {
69  QFileInfo file( KStandardDirs::locate( "locale", QString::fromLatin1( "currency/%1.desktop" ).arg( isoCurrencyCode.toLower() ) ) );
70 
71  loadCurrency( file, language );
72 }
73 
74 KCurrencyCodePrivate::KCurrencyCodePrivate( const QFileInfo &currencyCodeFile, const QString &language )
75 {
76  loadCurrency( currencyCodeFile, language );
77 }
78 
79 KCurrencyCodePrivate::KCurrencyCodePrivate( const KCurrencyCodePrivate& other )
80  : QSharedData( other ),
81  m_currencyCodeIsoAlpha3( other.m_currencyCodeIsoAlpha3 ),
82  m_currencyCodeIsoNumeric3( other.m_currencyCodeIsoNumeric3 ),
83  m_currencyNameIso( other.m_currencyNameIso ),
84  m_currencyNameDisplay( other.m_currencyNameDisplay ),
85  m_currencyUnitSymbols( other.m_currencyUnitSymbols ),
86  m_currencyUnitSymbolDefault( other.m_currencyUnitSymbolDefault ),
87  m_currencyUnitSymbolUnambiguous( other.m_currencyUnitSymbolUnambiguous ),
88  m_currencyUnitSingular( other.m_currencyUnitSingular ),
89  m_currencyUnitPlural( other.m_currencyUnitPlural ),
90  m_currencySubunitSymbol( other.m_currencySubunitSymbol ),
91  m_currencySubunitSingular( other.m_currencySubunitSingular ),
92  m_currencySubunitPlural( other.m_currencySubunitPlural ),
93  m_currencyIntroducedDate( other.m_currencyIntroducedDate ),
94  m_currencySuspendedDate( other.m_currencySuspendedDate ),
95  m_currencyWithdrawnDate( other.m_currencyWithdrawnDate ),
96  m_currencySubunits( other.m_currencySubunits ),
97  m_currencySubunitsPerUnit( other.m_currencySubunitsPerUnit ),
98  m_currencySubunitsInCirculation( other.m_currencySubunitsInCirculation ),
99  m_currencyDecimalPlacesDisplay( other.m_currencyDecimalPlacesDisplay ),
100  m_currencyCountriesInUse( other.m_currencyCountriesInUse )
101 {
102 }
103 
104 KCurrencyCodePrivate::~KCurrencyCodePrivate()
105 {
106 }
107 
108 void KCurrencyCodePrivate::loadCurrency( const QFileInfo &currencyCodeFile, const QString &language )
109 {
110  KConfig cgFile( currencyCodeFile.absoluteFilePath() );
111 
112  // If language is empty, means to stick with the global default, which is the default for any new KConfig
113  if ( !language.isEmpty() ) {
114  cgFile.setLocale( language );
115  }
116 
117  KConfigGroup cg( &cgFile, "Currency Code" );
118 
119  m_currencyCodeIsoAlpha3 = cg.readEntry( "CurrencyCodeIsoAlpha3", QString() );
120  m_currencyCodeIsoNumeric3 = cg.readEntry( "CurrencyCodeIsoNumeric3", QString() );
121  m_currencyNameIso = cg.readEntry( "CurrencyNameIso", QString() );
122  m_currencyNameDisplay = cg.readEntry( "Name", QString() );
123  m_currencyUnitSymbols = cg.readEntry( "CurrencyUnitSymbols", QStringList() );
124  m_currencyUnitSymbolDefault = cg.readEntry( "CurrencyUnitSymbolDefault", QString() );
125  m_currencyUnitSymbolUnambiguous = cg.readEntry( "CurrencyUnitSymbolUnambiguous", QString() );
126  m_currencyUnitSingular = cg.readEntry( "CurrencyUnitSingular", QString() );
127  m_currencyUnitPlural = cg.readEntry( "CurrencyUnitPlural", QString() );
128  m_currencySubunitSymbol = cg.readEntry( "CurrencySubunitSymbol", QString() );
129  m_currencySubunitSingular = cg.readEntry( "CurrencySubunitSingular", QString() );
130  m_currencySubunitPlural = cg.readEntry( "CurrencySubunitPlural", QString() );
131  m_currencyIntroducedDate = cg.readEntry( "CurrencyIntroducedDate", QDate() );
132  m_currencySuspendedDate = cg.readEntry( "CurrencySuspendedDate", QDate() );
133  m_currencyWithdrawnDate = cg.readEntry( "CurrencyWithdrawnDate", QDate() );
134  m_currencySubunits = cg.readEntry( "CurrencySubunits", 1 );
135  m_currencySubunitsInCirculation = cg.readEntry( "CurrencySubunitsInCirculation", true );
136  m_currencySubunitsPerUnit = cg.readEntry( "CurrencySubunitsPerUnit", 100 );
137  m_currencyDecimalPlacesDisplay = cg.readEntry( "CurrencyDecimalPlacesDisplay", 2 );
138  m_currencyCountriesInUse = cg.readEntry( "CurrencyCountriesInUse", QStringList() );
139 }
140 
141 KCurrencyCode::KCurrencyCode( const QString &isoCurrencyCode, const QString &language )
142  :d( new KCurrencyCodePrivate( isoCurrencyCode, language ) )
143 {
144 }
145 
146 KCurrencyCode::KCurrencyCode( const QFileInfo &currencyCodeFile, const QString &language )
147  :d( new KCurrencyCodePrivate( currencyCodeFile, language ) )
148 {
149 }
150 
151 KCurrencyCode::KCurrencyCode( const KCurrencyCode &rhs )
152  :d( rhs.d )
153 {
154 }
155 
156 KCurrencyCode& KCurrencyCode::operator=( const KCurrencyCode &rhs )
157 {
158  if (&rhs != this)
159  d = rhs.d;
160  return *this;
161 }
162 
163 KCurrencyCode::~KCurrencyCode()
164 {
165 }
166 
167 QString KCurrencyCode::isoCurrencyCode() const
168 {
169  return d->m_currencyCodeIsoAlpha3;
170 }
171 
172 QString KCurrencyCode::isoCurrencyCodeNumeric() const
173 {
174  return d->m_currencyCodeIsoNumeric3;
175 }
176 
177 QString KCurrencyCode::name() const
178 {
179  return d->m_currencyNameDisplay;
180 }
181 
182 QString KCurrencyCode::isoName() const
183 {
184  return d->m_currencyNameIso;
185 }
186 
187 KCurrencyCode::CurrencyStatus KCurrencyCode::status() const
188 {
189  if ( dateWithdrawn() != QDate() ) {
190  return ObsoleteCurrency;
191  } else if ( dateSuspended() != QDate() ) {
192  return SuspendedCurrency;
193  } else {
194  return ActiveCurrency;
195  }
196 }
197 
198 QDate KCurrencyCode::dateIntroduced() const
199 {
200  return d->m_currencyIntroducedDate;
201 }
202 
203 QDate KCurrencyCode::dateSuspended() const
204 {
205  return d->m_currencySuspendedDate;
206 }
207 
208 QDate KCurrencyCode::dateWithdrawn() const
209 {
210  return d->m_currencyWithdrawnDate;
211 }
212 
213 QStringList KCurrencyCode::symbolList() const
214 {
215  return d->m_currencyUnitSymbols;
216 }
217 
218 QString KCurrencyCode::defaultSymbol() const
219 {
220  return d->m_currencyUnitSymbolDefault;
221 }
222 
223 QString KCurrencyCode::unambiguousSymbol() const
224 {
225  if ( d->m_currencyUnitSymbolUnambiguous.isEmpty() ) {
226  return d->m_currencyUnitSymbolDefault;
227  } else {
228  return d->m_currencyUnitSymbolUnambiguous;
229  }
230 }
231 
232 bool KCurrencyCode::hasSubunits() const
233 {
234  if ( d->m_currencySubunits > 0 ) {
235  return true;
236  } else {
237  return false;
238  }
239 }
240 
241 bool KCurrencyCode::hasSubunitsInCirculation() const
242 {
243  return ( hasSubunits() && d->m_currencySubunitsInCirculation );
244 }
245 
246 QString KCurrencyCode::subunitSymbol() const
247 {
248  return d->m_currencySubunitSymbol;
249 }
250 
251 int KCurrencyCode::subunitsPerUnit() const
252 {
253  return d->m_currencySubunitsPerUnit;
254 }
255 
256 int KCurrencyCode::decimalPlaces() const
257 {
258  return d->m_currencyDecimalPlacesDisplay;
259 }
260 
261 QStringList KCurrencyCode::countriesUsingCurrency() const
262 {
263  return d->m_currencyCountriesInUse;
264 }
265 
266 bool KCurrencyCode::isValid() const
267 {
268  return !d->m_currencyCodeIsoAlpha3.isEmpty();
269 }
270 
271 bool KCurrencyCode::isValid( const QString &isoCurrencyCode, CurrencyStatusFlags currencyStatusFlags )
272 {
273  KCurrencyCode test = KCurrencyCode( isoCurrencyCode );
274  return test.isValid() && ( currencyStatusFlags & test.status() );
275 }
276 
277 QStringList KCurrencyCode::allCurrencyCodesList( CurrencyStatusFlags currencyStatus )
278 {
279  QStringList currencyCodes;
280 
281  const QStringList paths = KGlobal::dirs()->findAllResources( "locale", QLatin1String("currency/*.desktop") );
282 
283  foreach( const QString &path, paths )
284  {
285  QString code = path.mid( path.length()-11, 3 ).toUpper();
286 
287  if ( KCurrencyCode::isValid( code, currencyStatus ) ) {
288  currencyCodes.append( code );
289  }
290  }
291 
292  return currencyCodes;
293 }
294 
295 QString KCurrencyCode::currencyCodeToName( const QString &isoCurrencyCode, const QString &language )
296 {
297  KCurrencyCode temp = KCurrencyCode( isoCurrencyCode, language );
298  if ( temp.isValid() ) {
299  return temp.name();
300  } else {
301  return QString();
302  }
303 }
KCurrencyCode::~KCurrencyCode
virtual ~KCurrencyCode()
Destructor.
Definition: kcurrencycode.cpp:163
KCurrencyCode::subunitSymbol
QString subunitSymbol() const
Return the Currency subunit symbol if it has one e.g.
Definition: kcurrencycode.cpp:246
KCurrencyCode::status
CurrencyStatus status() const
Return Currency Status for the currency, if Active, Suspended or Obsolete.
Definition: kcurrencycode.cpp:187
kdebug.h
KCurrencyCode::dateIntroduced
QDate dateIntroduced() const
Return the date the currency was introduced.
Definition: kcurrencycode.cpp:198
KCurrencyCode::subunitsPerUnit
int subunitsPerUnit() const
Return the number of subunits in every unit, e.g.
Definition: kcurrencycode.cpp:251
KCurrencyCode::currencyCodeToName
static QString currencyCodeToName(const QString &currencyCode, const QString &language=QString())
Convert a known ISO Currency Code to a human readable, localized form.
Definition: kcurrencycode.cpp:295
KCurrencyCode::hasSubunits
bool hasSubunits() const
Return if the Currency has subunits or not, e.g.
Definition: kcurrencycode.cpp:232
KStandardDirs::locate
static QString locate(const char *type, const QString &filename, const KComponentData &cData=KGlobal::mainComponent())
This function is just for convenience.
Definition: kstandarddirs.cpp:2085
kconfig.h
KGlobal::dirs
KStandardDirs * dirs()
Returns the application standard dirs object.
KCurrencyCode::unambiguousSymbol
QString unambiguousSymbol() const
Return the unambiguous Symbol for the Currency, e.g.
Definition: kcurrencycode.cpp:223
KCurrencyCode::ActiveCurrency
Currency is currently in use.
Definition: kcurrencycode.h:55
KCurrencyCode::dateWithdrawn
QDate dateWithdrawn() const
Return the date the currency was withdrawn from circulation.
Definition: kcurrencycode.cpp:208
klocale.h
KCurrencyCode::isoName
QString isoName() const
Return untranslated official ISO Currency Code Name.
Definition: kcurrencycode.cpp:182
KCurrencyCode::SuspendedCurrency
Currency is not currently in use but has not been replaced.
Definition: kcurrencycode.h:56
KCurrencyCode::ObsoleteCurrency
Currency is no longer in use and has been replaced.
Definition: kcurrencycode.h:57
KCurrencyCode
Definition: kcurrencycode.h:45
kglobal.h
QSharedData
QList::append
void append(const T &value)
KCurrencyCode::dateSuspended
QDate dateSuspended() const
Return the date the currency was suspended.
Definition: kcurrencycode.cpp:203
KConfig::setLocale
bool setLocale(const QString &aLocale)
Sets the locale to aLocale.
Definition: kconfig.cpp:705
QFileInfo::absoluteFilePath
QString absoluteFilePath() const
QString::isEmpty
bool isEmpty() const
QDate
QString
KCurrencyCode::hasSubunitsInCirculation
bool hasSubunitsInCirculation() const
Return if the Currency has subunits in circulation, e.g.
Definition: kcurrencycode.cpp:241
KCurrencyCode::operator=
KCurrencyCode & operator=(const KCurrencyCode &rhs)
Assignment operator.
Definition: kcurrencycode.cpp:156
QStringList
QFileInfo
QString::toLower
QString toLower() const
KCurrencyCode::decimalPlaces
int decimalPlaces() const
Return the number of decimal places required to display the currency subunits.
Definition: kcurrencycode.cpp:256
KCurrencyCode::isoCurrencyCodeNumeric
QString isoCurrencyCodeNumeric() const
Return the ISO 4217 Currency Code in Numeric 3 format, e.g.
Definition: kcurrencycode.cpp:172
KConfigGroup
A class for one specific group in a KConfig object.
Definition: kconfiggroup.h:53
KCurrencyCode::isoCurrencyCode
QString isoCurrencyCode() const
Return the ISO 4217 Currency Code in Alpha 3 format, e.g.
Definition: kcurrencycode.cpp:167
KConfig
The central class of the KDE configuration data system.
Definition: kconfig.h:70
QString::mid
QString mid(int position, int n) const
KCurrencyCode::allCurrencyCodesList
static QStringList allCurrencyCodesList(CurrencyStatusFlags currencyStatus=CurrencyStatusFlags(ActiveCurrency|SuspendedCurrency|ObsoleteCurrency))
Provides list of all known ISO Currency Codes.
Definition: kcurrencycode.cpp:277
KCurrencyCode::isValid
bool isValid() const
Return if the currency object loaded/initialised correctly.
Definition: kcurrencycode.cpp:266
QLatin1String
kstandarddirs.h
KCurrencyCode::CurrencyStatus
CurrencyStatus
The Status of the Currency.
Definition: kcurrencycode.h:54
QString::length
int length() const
KCurrencyCode::symbolList
QStringList symbolList() const
Return a list of valid Symbols for the Currency in order of preference.
Definition: kcurrencycode.cpp:213
QString::fromLatin1
QString fromLatin1(const char *str, int size)
KCurrencyCode::name
QString name() const
Return translated Currency Code Name in a standard display format e.g.
Definition: kcurrencycode.cpp:177
kcurrencycode.h
KStandardDirs::findAllResources
QStringList findAllResources(const char *type, const QString &filter=QString(), SearchOptions options=NoSearchOptions) const
Tries to find all resources with the specified type.
Definition: kstandarddirs.cpp:900
KCurrencyCode::countriesUsingCurrency
QStringList countriesUsingCurrency() const
Return a list of countries known to be using the currency.
Definition: kcurrencycode.cpp:261
KCurrencyCode::defaultSymbol
QString defaultSymbol() const
Return the default Symbol for the Currency, e.g.
Definition: kcurrencycode.cpp:218
kconfiggroup.h
KCurrencyCode::KCurrencyCode
KCurrencyCode(const QString &isoCurrencyCode, const QString &language=QString())
Constructs a KCurrencyCode for a given ISO Currency Code.
Definition: kcurrencycode.cpp:141
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:22:11 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

KDECore

Skip menu "KDECore"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Modules
  • Related Pages

kdelibs API Reference

Skip menu "kdelibs API Reference"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDEWebKit
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  •   WTF
  • kjsembed
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUnitConversion
  • KUtils
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal