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

0001 /*
0002  *   SPDX-FileCopyrightText: 2010 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 "angle_p.h"
0009 #include "unit_p.h"
0010 
0011 #include <KLocalizedString>
0012 
0013 #include <math.h>
0014 
0015 namespace KUnitConversion
0016 {
0017 class RadiansUnitPrivate : public UnitPrivate
0018 {
0019 public:
0020     RadiansUnitPrivate(CategoryId categoryId,
0021                        UnitId id,
0022                        qreal multiplier,
0023                        const QString &symbol,
0024                        const QString &description,
0025                        const QString &matchString,
0026                        const KLocalizedString &symbolString,
0027                        const KLocalizedString &realString,
0028                        const KLocalizedString &integerString)
0029         : UnitPrivate(categoryId, id, multiplier, symbol, description, matchString, symbolString, realString, integerString)
0030     {
0031     }
0032 
0033     qreal toDefault(qreal value) const override
0034     {
0035         return (value / (2 * M_PI)) * 360.0;
0036     }
0037     qreal fromDefault(qreal value) const override
0038     {
0039         return (value / 360.0) * (2 * M_PI);
0040     }
0041 };
0042 
0043 UnitCategory Angle::makeCategory()
0044 {
0045     auto c = UnitCategoryPrivate::makeCategory(AngleCategory, i18n("Angle"), i18n("Angle"));
0046     auto d = UnitCategoryPrivate::get(c);
0047     KLocalizedString symbolString = ki18nc("%1 value, %2 unit symbol (angle)", "%1 %2");
0048 
0049     d->addDefaultUnit(UnitPrivate::makeUnit(AngleCategory,
0050                               Degree,
0051                               1,
0052                               i18nc("angle unit symbol", "°"),
0053                               i18nc("unit description in lists", "degrees"),
0054                               i18nc("unit synonyms for matching user input", "deg;degree;degrees;°"),
0055                               symbolString,
0056                               ki18nc("amount in units (real)", "%1 degrees"),
0057                               ki18ncp("amount in units (integer)", "%1 degree", "%1 degrees")));
0058 
0059     d->addCommonUnit(UnitPrivate::makeUnit(new RadiansUnitPrivate(AngleCategory,
0060                                                     Radian,
0061                                                     1.0,
0062                                                     i18nc("angle unit symbol", "rad"),
0063                                                     i18nc("unit description in lists", "radians"),
0064                                                     i18nc("unit synonyms for matching user input", "rad;radian;radians"),
0065                                                     symbolString,
0066                                                     ki18nc("amount in units (real)", "%1 radians"),
0067                                                     ki18ncp("amount in units (integer)", "%1 radian", "%1 radians"))));
0068 
0069     d->addUnit(UnitPrivate::makeUnit(AngleCategory,
0070                        Gradian,
0071                        360.0 / 400.0,
0072                        i18nc("angle unit symbol", "grad"),
0073                        i18nc("unit description in lists", "gradians"),
0074                        i18nc("unit synonyms for matching user input", "grad;gradian;gradians;grade;gon"),
0075                        symbolString,
0076                        ki18nc("amount in units (real)", "%1 gradians"),
0077                        ki18ncp("amount in units (integer)", "%1 gradian", "%1 gradians")));
0078 
0079     d->addCommonUnit(UnitPrivate::makeUnit(AngleCategory,
0080                              ArcMinute,
0081                              1.0 / 60.0,
0082                              i18nc("angle unit symbol", "'"),
0083                              i18nc("unit description in lists", "arc minutes"),
0084                              i18nc("unit synonyms for matching user input", "minute of arc;MOA;arcminute;minute;'"),
0085                              symbolString,
0086                              ki18nc("amount in units (real)", "%1 arc minutes"),
0087                              ki18ncp("amount in units (integer)", "%1 arc minute", "%1 arc minutes")));
0088 
0089     d->addCommonUnit(UnitPrivate::makeUnit(AngleCategory,
0090                              ArcSecond,
0091                              1.0 / 3600.0,
0092                              i18nc("angle unit symbol", "\""),
0093                              i18nc("unit description in lists", "arc seconds"),
0094                              i18nc("unit synonyms for matching user input", "second of arc;arcsecond;second;\""),
0095                              symbolString,
0096                              ki18nc("amount in units (real)", "%1 arc seconds"),
0097                              ki18ncp("amount in units (integer)", "%1 arc second", "%1 arc seconds")));
0098 
0099     return c;
0100 }
0101 
0102 } // KUnitConversion namespace