Warning, file /frameworks/kunitconversion/src/temperature.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002  *   SPDX-FileCopyrightText: 2007-2009 Petri Damstén <damu@iki.fi>
0003  *   SPDX-FileCopyrightText: 2014 John Layt <jlayt@kde.org>
0004  *
0005  *   SPDX-License-Identifier: LGPL-2.0-or-later
0006  */
0007 
0008 #include "temperature_p.h"
0009 #include "unit_p.h"
0010 
0011 #include <KLocalizedString>
0012 
0013 namespace KUnitConversion
0014 {
0015 class CelsiusUnitPrivate : public UnitPrivate
0016 {
0017 public:
0018     CelsiusUnitPrivate(CategoryId categoryId,
0019                        UnitId id,
0020                        qreal multiplier,
0021                        const QString &symbol,
0022                        const QString &description,
0023                        const QString &matchString,
0024                        const KLocalizedString &symbolString,
0025                        const KLocalizedString &realString,
0026                        const KLocalizedString &integerString)
0027         : UnitPrivate(categoryId, id, multiplier, symbol, description, matchString, symbolString, realString, integerString)
0028     {
0029     }
0030 
0031     qreal toDefault(qreal value) const override
0032     {
0033         return value + 273.15;
0034     }
0035 
0036     qreal fromDefault(qreal value) const override
0037     {
0038         return value - 273.15;
0039     }
0040 };
0041 
0042 class FahrenheitUnitPrivate : public UnitPrivate
0043 {
0044 public:
0045     FahrenheitUnitPrivate(CategoryId categoryId,
0046                           UnitId id,
0047                           qreal multiplier,
0048                           const QString &symbol,
0049                           const QString &description,
0050                           const QString &matchString,
0051                           const KLocalizedString &symbolString,
0052                           const KLocalizedString &realString,
0053                           const KLocalizedString &integerString)
0054         : UnitPrivate(categoryId, id, multiplier, symbol, description, matchString, symbolString, realString, integerString)
0055     {
0056     }
0057 
0058     qreal toDefault(qreal value) const override
0059     {
0060         return (value + 459.67) * 5.0 / 9.0;
0061     }
0062 
0063     qreal fromDefault(qreal value) const override
0064     {
0065         return (value * 9.0 / 5.0) - 459.67;
0066     }
0067 };
0068 
0069 class DelisleUnitPrivate : public UnitPrivate
0070 {
0071 public:
0072     DelisleUnitPrivate(CategoryId categoryId,
0073                        UnitId id,
0074                        qreal multiplier,
0075                        const QString &symbol,
0076                        const QString &description,
0077                        const QString &matchString,
0078                        const KLocalizedString &symbolString,
0079                        const KLocalizedString &realString,
0080                        const KLocalizedString &integerString)
0081         : UnitPrivate(categoryId, id, multiplier, symbol, description, matchString, symbolString, realString, integerString)
0082     {
0083     }
0084 
0085     qreal toDefault(qreal value) const override
0086     {
0087         return 373.15 - (value * 2.0 / 3.0);
0088     }
0089 
0090     qreal fromDefault(qreal value) const override
0091     {
0092         return (373.15 - value) * 3.0 / 2.0;
0093     }
0094 };
0095 
0096 class NewtonUnitPrivate : public UnitPrivate
0097 {
0098 public:
0099     NewtonUnitPrivate(CategoryId categoryId,
0100                       UnitId id,
0101                       qreal multiplier,
0102                       const QString &symbol,
0103                       const QString &description,
0104                       const QString &matchString,
0105                       const KLocalizedString &symbolString,
0106                       const KLocalizedString &realString,
0107                       const KLocalizedString &integerString)
0108         : UnitPrivate(categoryId, id, multiplier, symbol, description, matchString, symbolString, realString, integerString)
0109     {
0110     }
0111 
0112     qreal toDefault(qreal value) const override
0113     {
0114         return (value * 100.0 / 33.0) + 273.15;
0115     }
0116 
0117     qreal fromDefault(qreal value) const override
0118     {
0119         return (value - 273.15) * 33.0 / 100.0;
0120     }
0121 };
0122 
0123 class ReaumurUnitPrivate : public UnitPrivate
0124 {
0125 public:
0126     ReaumurUnitPrivate(CategoryId categoryId,
0127                        UnitId id,
0128                        qreal multiplier,
0129                        const QString &symbol,
0130                        const QString &description,
0131                        const QString &matchString,
0132                        const KLocalizedString &symbolString,
0133                        const KLocalizedString &realString,
0134                        const KLocalizedString &integerString)
0135         : UnitPrivate(categoryId, id, multiplier, symbol, description, matchString, symbolString, realString, integerString)
0136     {
0137     }
0138 
0139     qreal toDefault(qreal value) const override
0140     {
0141         return (value * 5.0 / 4.0) + 273.15;
0142     }
0143 
0144     qreal fromDefault(qreal value) const override
0145     {
0146         return (value - 273.15) * 4.0 / 5.0;
0147     }
0148 };
0149 
0150 class RomerUnitPrivate : public UnitPrivate
0151 {
0152 public:
0153     RomerUnitPrivate(CategoryId categoryId,
0154                      UnitId id,
0155                      qreal multiplier,
0156                      const QString &symbol,
0157                      const QString &description,
0158                      const QString &matchString,
0159                      const KLocalizedString &symbolString,
0160                      const KLocalizedString &realString,
0161                      const KLocalizedString &integerString)
0162         : UnitPrivate(categoryId, id, multiplier, symbol, description, matchString, symbolString, realString, integerString)
0163     {
0164     }
0165 
0166     qreal toDefault(qreal value) const override
0167     {
0168         return (value - 7.5) * 40.0 / 21.0 + 273.15;
0169     }
0170 
0171     qreal fromDefault(qreal value) const override
0172     {
0173         return (value - 273.15) * 21.0 / 40.0 + 7.5;
0174     }
0175 };
0176 
0177 UnitCategory Temperature::makeCategory()
0178 {
0179     auto c = UnitCategoryPrivate::makeCategory(TemperatureCategory, i18n("Temperature"), i18n("Temperature"));
0180     auto d = UnitCategoryPrivate::get(c);
0181     KLocalizedString symbolString = ki18nc("%1 value, %2 unit symbol (temperature)", "%1 %2");
0182 
0183     d->addDefaultUnit(UnitPrivate::makeUnit(TemperatureCategory,
0184                               Kelvin,
0185                               1,
0186                               i18nc("temperature unit symbol", "K"),
0187                               i18nc("unit description in lists", "kelvins"),
0188                               i18nc("unit synonyms for matching user input", "kelvin;kelvins;K"),
0189                               symbolString,
0190                               ki18nc("amount in units (real)", "%1 kelvins"),
0191                               ki18ncp("amount in units (integer)", "%1 kelvin", "%1 kelvins")));
0192 
0193     d->addCommonUnit(UnitPrivate::makeUnit(new CelsiusUnitPrivate(TemperatureCategory,
0194                                                     Celsius,
0195                                                     1,
0196                                                     i18nc("temperature unit symbol", "°C"),
0197                                                     i18nc("unit description in lists", "Celsius"),
0198                                                     i18nc("unit synonyms for matching user input", "Celsius;°C;C"),
0199                                                     symbolString,
0200                                                     ki18nc("amount in units (real)", "%1 degrees Celsius"),
0201                                                     ki18ncp("amount in units (integer)", "%1 degree Celsius", "%1 degrees Celsius"))));
0202 
0203     d->addCommonUnit(UnitPrivate::makeUnit(new FahrenheitUnitPrivate(TemperatureCategory,
0204                                                        Fahrenheit,
0205                                                        1,
0206                                                        i18nc("temperature unit symbol", "°F"),
0207                                                        i18nc("unit description in lists", "Fahrenheit"),
0208                                                        i18nc("unit synonyms for matching user input", "Fahrenheit;°F;F"),
0209                                                        symbolString,
0210                                                        ki18nc("amount in units (real)", "%1 degrees Fahrenheit"),
0211                                                        ki18ncp("amount in units (integer)", "%1 degree Fahrenheit", "%1 degrees Fahrenheit"))));
0212 
0213     d->addUnit(UnitPrivate::makeUnit(TemperatureCategory,
0214                        Rankine,
0215                        0.555556,
0216                        i18nc("temperature unit symbol", "R"),
0217                        i18nc("unit description in lists", "Rankine"),
0218                        i18nc("unit synonyms for matching user input", "Rankine;°R;R;Ra"),
0219                        symbolString,
0220                        ki18nc("amount in units (real)", "%1 Rankine"),
0221                        ki18ncp("amount in units (integer)", "%1 Rankine", "%1 Rankine")));
0222 
0223     d->addUnit(UnitPrivate::makeUnit(new DelisleUnitPrivate(TemperatureCategory,
0224                                               Delisle,
0225                                               1,
0226                                               i18nc("temperature unit symbol", "°De"),
0227                                               i18nc("unit description in lists", "Delisle"),
0228                                               i18nc("unit synonyms for matching user input", "Delisle;°De;De"),
0229                                               symbolString,
0230                                               ki18nc("amount in units (real)", "%1 degrees Delisle"),
0231                                               ki18ncp("amount in units (integer)", "%1 degree Delisle", "%1 degrees Delisle"))));
0232 
0233     d->addUnit(UnitPrivate::makeUnit(new NewtonUnitPrivate(TemperatureCategory,
0234                                              TemperatureNewton,
0235                                              1,
0236                                              i18nc("temperature unit symbol", "°N"),
0237                                              i18nc("unit description in lists", "Newton"),
0238                                              i18nc("unit synonyms for matching user input", "Newton;°N;N"),
0239                                              symbolString,
0240                                              ki18nc("amount in units (real)", "%1 degrees Newton"),
0241                                              ki18ncp("amount in units (integer)", "%1 degree Newton", "%1 degrees Newton"))));
0242 
0243     d->addUnit(UnitPrivate::makeUnit(new ReaumurUnitPrivate(TemperatureCategory,
0244                                               Reaumur,
0245                                               1,
0246                                               i18nc("temperature unit symbol", "°Ré"),
0247                                               i18nc("unit description in lists", "Réaumur"),
0248                                               i18nc("unit synonyms for matching user input", "Réaumur;°Ré;Ré;Reaumur;°Re;Re"),
0249                                               symbolString,
0250                                               ki18nc("amount in units (real)", "%1 degrees Réaumur"),
0251                                               ki18ncp("amount in units (integer)", "%1 degree Réaumur", "%1 degrees Réaumur"))));
0252 
0253     d->addUnit(UnitPrivate::makeUnit(new RomerUnitPrivate(TemperatureCategory,
0254                                             Romer,
0255                                             1,
0256                                             i18nc("temperature unit symbol", "°Rø"),
0257                                             i18nc("unit description in lists", "Rømer"),
0258                                             i18nc("unit synonyms for matching user input", "Rømer;°Rø;Rø;Romer;°Ro;Ro"),
0259                                             symbolString,
0260                                             ki18nc("amount in units (real)", "%1 degrees Rømer"),
0261                                             ki18ncp("amount in units (integer)", "%1 degree Rømer", "%1 degrees Rømer"))));
0262 
0263     return c;
0264 }
0265 
0266 } // KUnitConversion namespace