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

KUnitConversion

  • sources
  • kde-4.14
  • kdelibs
  • kunitconversion
converter.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2008-2009 Petri Damstén <damu@iki.fi>
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU Library General Public License as
6  * published by the Free Software Foundation; either version 2, or
7  * (at your option) any later version.
8  *
9  * This program 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
12  * GNU General Public License for more details
13  *
14  * You should have received a copy of the GNU Library General Public
15  * License along with this program; if not, write to the
16  * Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18  */
19 
20 #include "converter.h"
21 
22 #include <kglobal.h>
23 #include <klocale.h>
24 
25 #include "unitcategory.h"
26 #include "area.h"
27 #include "length.h"
28 #include "currency.h"
29 #include "density.h"
30 #include "energy.h"
31 #include "fuel_efficiency.h"
32 #include "mass.h"
33 #include "power.h"
34 #include "pressure.h"
35 #include "temperature.h"
36 #include "timeunit.h"
37 #include "unit.h"
38 #include "velocity.h"
39 #include "volume.h"
40 #include "acceleration.h"
41 #include "force.h"
42 #include "angle.h"
43 #include "frequency.h"
44 
45 namespace KUnitConversion
46 {
47 
48 class Invalid : public UnitCategory
49 {
50 public:
51  Invalid() : UnitCategory(InvalidCategory)
52  {
53  const QString s;
54  const KLocalizedString ls;
55  setName(i18n("Invalid"));
56  setDefaultUnit(UP(InvalidUnit, 1.0, s, s, s, ls, ls));
57  setSymbolStringFormat(ki18nc("%1 value, %2 unit symbol (default)", "%1 %2"));
58  };
59 };
60 
61 class ConverterPrivate
62 {
63 public:
64  QMap<int, UnitCategory *> categories;
65  ConverterPrivate()
66  {
67  KGlobal::locale()->insertCatalog("libkunitconversion");
68 
69  categories[InvalidCategory] = new Invalid;
70  categories[LengthCategory] = new Length;
71  categories[AreaCategory] = new Area();
72  categories[VolumeCategory] = new Volume;
73  categories[TemperatureCategory] = new Temperature;
74  categories[VelocityCategory] = new Velocity;
75  categories[MassCategory] = new Mass;
76  categories[PressureCategory] = new Pressure;
77  categories[EnergyCategory] = new Energy;
78  categories[CurrencyCategory] = new Currency;
79  categories[PowerCategory] = new Power;
80  categories[TimeCategory] = new Time;
81  categories[FuelEfficiencyCategory] = new FuelEfficiency;
82  categories[DensityCategory] = new Density;
83  categories[AccelerationCategory] = new Acceleration;
84  categories[ForceCategory] = new Force;
85  categories[AngleCategory] = new Angle;
86  categories[FrequencyCategory] = new Frequency;
87  };
88 
89  ~ConverterPrivate()
90  {
91  qDeleteAll(categories);
92  };
93 };
94 
95 K_GLOBAL_STATIC(ConverterPrivate, static_d)
96 
97 Converter::Converter(QObject* parent)
98 : QObject(parent), d(static_cast<ConverterPrivate *>(static_d))
99 {
100 }
101 
102 Converter::~Converter()
103 {
104 }
105 
106 Value Converter::convert(const Value& value, const QString& toUnit) const
107 {
108  if (!value.unit().isNull()) {
109  UnitCategory* category = value.unit()->category();
110  if (category) {
111  return category->convert(value, toUnit);
112  }
113  }
114  return Value();
115 }
116 
117 Value Converter::convert(const Value& value, int toUnit) const
118 {
119  if (!value.unit().isNull()) {
120  UnitCategory* category = value.unit()->category();
121  if (category) {
122  return category->convert(value, toUnit);
123  }
124  }
125  return Value();
126 }
127 
128 Value Converter::convert(const Value& value, UnitPtr toUnit) const
129 {
130  if (!toUnit.isNull() && !value.unit().isNull() && value.unit()->isValid()) {
131  UnitCategory* category = value.unit()->category();
132  if (category) {
133  return category->convert(value, toUnit);
134  }
135  }
136  return Value();
137 }
138 
139 UnitCategory* Converter::categoryForUnit(const QString& unit) const
140 {
141  foreach (UnitCategory* u, categories()) {
142  if (u->hasUnit(unit)) {
143  return u;
144  }
145  }
146  return d->categories[InvalidCategory];
147 }
148 
149 UnitPtr Converter::unit(const QString& unitString) const
150 {
151  foreach (UnitCategory* u, d->categories) {
152  UnitPtr unitClass = u->unit(unitString);
153  if (unitClass) {
154  return unitClass;
155  }
156  }
157  return unit(InvalidUnit);
158 }
159 
160 UnitPtr Converter::unit(int unitId) const
161 {
162  foreach (UnitCategory* u, d->categories) {
163  UnitPtr unitClass = u->unit(unitId);
164  if (unitClass) {
165  return unitClass;
166  }
167  }
168  return d->categories[InvalidCategory]->defaultUnit();
169 }
170 
171 UnitCategory* Converter::category(const QString& category) const
172 {
173  foreach (UnitCategory *u, d->categories) {
174  if (u->name() == category)
175  return u;
176  }
177  // not found
178  return d->categories[InvalidCategory];
179 }
180 
181 UnitCategory* Converter::category(int categoryId) const
182 {
183  if (d->categories.contains(categoryId)) {
184  return d->categories[categoryId];
185  }
186  // not found
187  return d->categories[InvalidCategory];
188 }
189 
190 QList<UnitCategory*> Converter::categories() const
191 {
192  QList<UnitCategory*> categories = d->categories.values();
193  categories.removeAt(0);
194  return categories;
195 }
196 
197 }
198 
199 #include "converter.moc"
power.h
frequency.h
KUnitConversion::InvalidCategory
Definition: converter.h:30
length.h
KUnitConversion::InvalidUnit
Definition: converter.h:36
KUnitConversion::MassCategory
Definition: converter.h:31
currency.h
temperature.h
volume.h
Velocity
Definition: velocity.h:25
KUnitConversion::Converter::category
UnitCategory * category(const QString &category) const
Find unit category.
Definition: converter.cpp:171
QMap
Time
Definition: timeunit.h:25
KUnitConversion::DensityCategory
Definition: converter.h:32
QList::removeAt
void removeAt(int i)
area.h
Power
Definition: power.h:25
KUnitConversion::PressureCategory
Definition: converter.h:31
KUnitConversion::TemperatureCategory
Definition: converter.h:30
Force
Definition: force.h:25
KUnitConversion::UnitCategory::convert
Value convert(const Value &value, const QString &toUnit=QString())
Convert value to another unit.
Definition: unitcategory.cpp:98
KUnitConversion::Value
Definition: value.h:32
Acceleration
Definition: acceleration.h:25
Density
Definition: density.h:26
density.h
KUnitConversion::AreaCategory
Definition: converter.h:30
KUnitConversion::TimeCategory
Definition: converter.h:32
Area
Definition: area.h:25
KUnitConversion::FuelEfficiencyCategory
Definition: converter.h:32
KUnitConversion::VolumeCategory
Definition: converter.h:30
UP
#define UP(id, m, s, d, sy, r, i)
Definition: unit.h:127
Currency
Definition: currency.h:25
pressure.h
KUnitConversion::UnitCategory::name
QString name() const
Returns name for the unit category.
Definition: unitcategory.cpp:151
QObject
acceleration.h
KUnitConversion::PowerCategory
Definition: converter.h:32
KUnitConversion::CurrencyCategory
Definition: converter.h:31
unitcategory.h
converter.h
QString
QList
FuelEfficiency
Definition: fuel_efficiency.h:25
angle.h
Energy
Definition: energy.h:25
Pressure
Definition: pressure.h:25
KUnitConversion::AngleCategory
Definition: converter.h:33
unit.h
KUnitConversion::Converter::convert
Value convert(const Value &value, const QString &toUnit=QString()) const
Convert value to another unit.
Definition: converter.cpp:106
Mass
Definition: mass.h:26
Volume
Definition: volume.h:25
KUnitConversion::Converter
Definition: converter.h:138
KUnitConversion::UnitCategory
Definition: unitcategory.h:33
force.h
energy.h
KUnitConversion::UnitCategory::hasUnit
bool hasUnit(const QString &unit) const
Check if unit category has a unit.
Definition: unitcategory.cpp:93
KUnitConversion::Converter::categoryForUnit
UnitCategory * categoryForUnit(const QString &unit) const
Find unit category for unit.
Definition: converter.cpp:139
KUnitConversion::UnitPtr
KSharedPtr< Unit > UnitPtr
Definition: unit.h:125
KUnitConversion::UnitCategory::unit
UnitPtr unit(const QString &s) const
Return unit for string.
Definition: unitcategory.cpp:138
KUnitConversion::Converter::categories
QList< UnitCategory * > categories() const
Returns a list of all unit categories.
Definition: converter.cpp:190
KUnitConversion::Value::unit
UnitPtr unit() const
Unit part of the value.
Definition: value.cpp:123
Angle
Definition: angle.h:25
Temperature
Definition: temperature.h:25
KUnitConversion::EnergyCategory
Definition: converter.h:31
Frequency
Definition: frequency.h:25
timeunit.h
KUnitConversion::FrequencyCategory
Definition: converter.h:33
KUnitConversion::Converter::unit
UnitPtr unit(const QString &unitString) const
Find unit for string unit.
Definition: converter.cpp:149
KUnitConversion::Converter::~Converter
~Converter()
Definition: converter.cpp:102
KUnitConversion::ForceCategory
Definition: converter.h:33
Length
Definition: length.h:25
velocity.h
KUnitConversion::LengthCategory
Definition: converter.h:30
KUnitConversion::VelocityCategory
Definition: converter.h:31
fuel_efficiency.h
mass.h
KUnitConversion::AccelerationCategory
Definition: converter.h:32
This file is part of the KDE documentation.
Documentation copyright © 1996-2020 The KDE developers.
Generated on Mon Jun 22 2020 13:23:00 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

KUnitConversion

Skip menu "KUnitConversion"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • 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