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

KUnitConversion

  • 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
45namespace KUnitConversion
46{
47
48class Invalid : public UnitCategory
49{
50public:
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
61class ConverterPrivate
62{
63public:
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
95K_GLOBAL_STATIC(ConverterPrivate, static_d)
96
97Converter::Converter(QObject* parent)
98: QObject(parent), d(static_cast<ConverterPrivate *>(static_d))
99{
100}
101
102Converter::~Converter()
103{
104}
105
106Value 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
117Value 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
128Value 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
139UnitCategory* 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
149UnitPtr 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
160UnitPtr 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
171UnitCategory* 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
181UnitCategory* 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
190QList<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"
acceleration.h
angle.h
area.h
Acceleration
Definition: acceleration.h:26
Angle
Definition: angle.h:26
Area
Definition: area.h:26
Currency
Definition: currency.h:26
Density
Definition: density.h:27
Energy
Definition: energy.h:26
Force
Definition: force.h:26
Frequency
Definition: frequency.h:26
FuelEfficiency
Definition: fuel_efficiency.h:26
KUnitConversion::Converter
Definition: converter.h:139
KUnitConversion::Converter::category
UnitCategory * category(const QString &category) const
Find unit category.
Definition: converter.cpp:171
KUnitConversion::Converter::convert
Value convert(const Value &value, const QString &toUnit=QString()) const
Convert value to another unit.
Definition: converter.cpp:106
KUnitConversion::Converter::categoryForUnit
UnitCategory * categoryForUnit(const QString &unit) const
Find unit category for unit.
Definition: converter.cpp:139
KUnitConversion::Converter::~Converter
~Converter()
Definition: converter.cpp:102
KUnitConversion::Converter::unit
UnitPtr unit(const QString &unitString) const
Find unit for string unit.
Definition: converter.cpp:149
KUnitConversion::Converter::categories
QList< UnitCategory * > categories() const
Returns a list of all unit categories.
Definition: converter.cpp:190
KUnitConversion::UnitCategory
Definition: unitcategory.h:34
KUnitConversion::UnitCategory::setSymbolStringFormat
void setSymbolStringFormat(const KLocalizedString &symbolStringFormat)
Definition: unitcategory.cpp:60
KUnitConversion::UnitCategory::setName
void setName(const QString &name)
Definition: unitcategory.cpp:156
KUnitConversion::UnitCategory::name
QString name() const
Returns name for the unit category.
Definition: unitcategory.cpp:151
KUnitConversion::UnitCategory::convert
Value convert(const Value &value, const QString &toUnit=QString())
Convert value to another unit.
Definition: unitcategory.cpp:98
KUnitConversion::UnitCategory::setDefaultUnit
void setDefaultUnit(UnitPtr defaultUnit)
Definition: unitcategory.cpp:161
KUnitConversion::UnitCategory::hasUnit
bool hasUnit(const QString &unit) const
Check if unit category has a unit.
Definition: unitcategory.cpp:93
KUnitConversion::UnitCategory::unit
UnitPtr unit(const QString &s) const
Return unit for string.
Definition: unitcategory.cpp:138
KUnitConversion::Value
Definition: value.h:33
KUnitConversion::Value::unit
UnitPtr unit() const
Unit part of the value.
Definition: value.cpp:123
Length
Definition: length.h:26
Mass
Definition: mass.h:27
Power
Definition: power.h:26
Pressure
Definition: pressure.h:26
QObject
Temperature
Definition: temperature.h:26
Time
Definition: timeunit.h:26
Velocity
Definition: velocity.h:26
Volume
Definition: volume.h:26
converter.h
currency.h
density.h
energy.h
force.h
frequency.h
fuel_efficiency.h
length.h
mass.h
KUnitConversion
Definition: converter.cpp:46
KUnitConversion::CurrencyCategory
@ CurrencyCategory
Definition: converter.h:31
KUnitConversion::MassCategory
@ MassCategory
Definition: converter.h:31
KUnitConversion::ForceCategory
@ ForceCategory
Definition: converter.h:33
KUnitConversion::EnergyCategory
@ EnergyCategory
Definition: converter.h:31
KUnitConversion::FuelEfficiencyCategory
@ FuelEfficiencyCategory
Definition: converter.h:32
KUnitConversion::VelocityCategory
@ VelocityCategory
Definition: converter.h:31
KUnitConversion::TemperatureCategory
@ TemperatureCategory
Definition: converter.h:30
KUnitConversion::FrequencyCategory
@ FrequencyCategory
Definition: converter.h:33
KUnitConversion::PowerCategory
@ PowerCategory
Definition: converter.h:32
KUnitConversion::AreaCategory
@ AreaCategory
Definition: converter.h:30
KUnitConversion::VolumeCategory
@ VolumeCategory
Definition: converter.h:30
KUnitConversion::LengthCategory
@ LengthCategory
Definition: converter.h:30
KUnitConversion::TimeCategory
@ TimeCategory
Definition: converter.h:32
KUnitConversion::AccelerationCategory
@ AccelerationCategory
Definition: converter.h:32
KUnitConversion::InvalidCategory
@ InvalidCategory
Definition: converter.h:30
KUnitConversion::DensityCategory
@ DensityCategory
Definition: converter.h:32
KUnitConversion::PressureCategory
@ PressureCategory
Definition: converter.h:31
KUnitConversion::AngleCategory
@ AngleCategory
Definition: converter.h:33
KUnitConversion::UnitPtr
KSharedPtr< Unit > UnitPtr
Definition: unit.h:125
KUnitConversion::InvalidUnit
@ InvalidUnit
Definition: converter.h:36
power.h
pressure.h
temperature.h
timeunit.h
unit.h
UP
#define UP(id, m, s, d, sy, r, i)
Definition: unit.h:127
unitcategory.h
velocity.h
volume.h
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Mon Feb 20 2023 00:00:00 by doxygen 1.9.6 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-4.14.38 API Reference

Skip menu "kdelibs-4.14.38 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
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