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