File indexing completed on 2024-04-21 03:58:31

0001 /*
0002  *   SPDX-FileCopyrightText: 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 "fuel_efficiency_p.h"
0009 #include "unit_p.h"
0010 
0011 #include <KLocalizedString>
0012 
0013 namespace KUnitConversion
0014 {
0015 class FuelUnitPrivate : public UnitPrivate
0016 {
0017 public:
0018     FuelUnitPrivate(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                     const bool isReciprocalToDefaultUnit = false)
0028         : UnitPrivate(categoryId, id, multiplier, symbol, description, matchString, symbolString, realString, integerString)
0029         , m_isReciprocalToDefaultUnit(isReciprocalToDefaultUnit)
0030     {
0031     }
0032 
0033     qreal toDefault(qreal value) const override
0034     {
0035         if (m_isReciprocalToDefaultUnit) {
0036             return unitMultiplier() / value;
0037         }
0038         return UnitPrivate::toDefault(value);
0039     }
0040 
0041     qreal fromDefault(qreal value) const override
0042     {
0043         if (m_isReciprocalToDefaultUnit) {
0044             return unitMultiplier() / value;
0045         }
0046         return UnitPrivate::fromDefault(value);
0047     }
0048 
0049 private:
0050     bool m_isReciprocalToDefaultUnit; /* l/100 km (fuel per given distance) is inverse
0051                                          to MPG and kmpl (distance per given amount of fuel).
0052                                          Converter has to account for this. */
0053 };
0054 
0055 UnitCategory FuelEfficiency::makeCategory()
0056 {
0057     auto c = UnitCategoryPrivate::makeCategory(FuelEfficiencyCategory, i18n("Fuel Efficiency"), i18n("Fuel Efficiency"));
0058     auto d = UnitCategoryPrivate::get(c);
0059     KLocalizedString symbolString = ki18nc("%1 value, %2 unit symbol (fuel efficiency)", "%1 %2");
0060 
0061     d->addDefaultUnit(
0062         UnitPrivate::makeUnit(new FuelUnitPrivate(FuelEfficiencyCategory,
0063                                        LitersPer100Kilometers,
0064                                        1,
0065                                        i18nc("fuelefficiency unit symbol", "l/100 km"),
0066                                        i18nc("unit description in lists", "liters per 100 kilometers"),
0067                                        i18nc("unit synonyms for matching user input", "liters per 100 kilometers;liters per 100 kilometers;l/100 km;L/100 km"),
0068                                        symbolString,
0069                                        ki18nc("amount in units (real)", "%1 liters per 100 kilometers"),
0070                                        ki18ncp("amount in units (integer)", "%1 liters per 100 kilometers", "%1 liters per 100 kilometers"))));
0071 
0072     d->addCommonUnit(UnitPrivate::makeUnit(new FuelUnitPrivate(FuelEfficiencyCategory,
0073                                                  MilePerUsGallon,
0074                                                  235.215,
0075                                                  i18nc("fuelefficiency unit symbol", "mpg"),
0076                                                  i18nc("unit description in lists", "miles per US gallon"),
0077                                                  i18nc("unit synonyms for matching user input", "mile per US gallon;miles per US gallon;mpg"),
0078                                                  symbolString,
0079                                                  ki18nc("amount in units (real)", "%1 miles per US gallon"),
0080                                                  ki18ncp("amount in units (integer)", "%1 mile per US gallon", "%1 miles per US gallon"),
0081                                                  true)));
0082 
0083     d->addCommonUnit(UnitPrivate::makeUnit(new FuelUnitPrivate(
0084         FuelEfficiencyCategory,
0085         MilePerImperialGallon,
0086         282.481,
0087         i18nc("fuelefficiency unit symbol", "mpg (imperial)"),
0088         i18nc("unit description in lists", "miles per imperial gallon"),
0089         i18nc("unit synonyms for matching user input", "mile per imperial gallon;miles per imperial gallon;mpg (imperial);imp mpg;mpg (imp)"),
0090         symbolString,
0091         ki18nc("amount in units (real)", "%1 miles per imperial gallon"),
0092         ki18ncp("amount in units (integer)", "%1 mile per imperial gallon", "%1 miles per imperial gallon"),
0093         true)));
0094 
0095     d->addCommonUnit(UnitPrivate::makeUnit(new FuelUnitPrivate(FuelEfficiencyCategory,
0096                                                  KilometrePerLitre,
0097                                                  100.0,
0098                                                  i18nc("fuelefficiency unit symbol", "kmpl"),
0099                                                  i18nc("unit description in lists", "kilometers per liter"),
0100                                                  i18nc("unit synonyms for matching user input", "kilometer per liter;kilometers per liter;kmpl;km/l"),
0101                                                  symbolString,
0102                                                  ki18nc("amount in units (real)", "%1 kilometers per liter"),
0103                                                  ki18ncp("amount in units (integer)", "%1 kilometer per liter", "%1 kilometers per liter"),
0104                                                  true)));
0105 
0106     return c;
0107 }
0108 
0109 } // KUnitConversion namespace