File indexing completed on 2024-04-21 15:04:39

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 #ifndef KUNITCONVERSION_UNITCATEGORY_P_H
0009 #define KUNITCONVERSION_UNITCATEGORY_P_H
0010 
0011 #include "unitcategory.h"
0012 
0013 #include <KLocalizedString>
0014 
0015 #include <QMap>
0016 
0017 namespace KUnitConversion
0018 {
0019 class UnitCategoryPrivate : public QSharedData
0020 {
0021 public:
0022     UnitCategoryPrivate();
0023     UnitCategoryPrivate(CategoryId id, const QString &name, const QString &description);
0024     virtual ~UnitCategoryPrivate();
0025 
0026     UnitCategoryPrivate *clone();
0027     bool operator==(const UnitCategoryPrivate &other) const;
0028     bool operator!=(const UnitCategoryPrivate &other) const;
0029 
0030     virtual Value convert(const Value &value, const Unit &toUnit);
0031 
0032     virtual bool hasOnlineConversionTable() const
0033     {
0034         return false;
0035     }
0036 
0037     virtual void syncConversionTable(std::chrono::seconds updateSkipPeriod)
0038     {
0039         Q_UNUSED(updateSkipPeriod)
0040         return;
0041     }
0042 
0043     void addDefaultUnit(const Unit &unit);
0044     void addCommonUnit(const Unit &unit);
0045     void addUnit(const Unit &unit);
0046 
0047     static inline UnitCategoryPrivate* get(const UnitCategory &category)
0048     {
0049         return category.d.data();
0050     }
0051 
0052     static inline UnitCategory makeCategory(CategoryId id, const QString &name, const QString &description)
0053     {
0054         return UnitCategory(new UnitCategoryPrivate(id, name, description));
0055     }
0056     static inline UnitCategory makeCategory(UnitCategoryPrivate *dd)
0057     {
0058         return UnitCategory(dd);
0059     }
0060 
0061     CategoryId m_id;
0062     QString m_name;
0063     QString m_description;
0064     KLocalizedString m_symbolStringFormat;
0065     Unit m_defaultUnit;
0066     QMap<QString, Unit> m_unitMap;
0067     QMap<UnitId, Unit> m_idMap;
0068     QList<Unit> m_units;
0069     QList<Unit> m_mostCommonUnits;
0070 };
0071 
0072 } // KUnitConversion namespace
0073 
0074 #endif // KUNITCONVERSION_UNITCATEGORY_P_H