File indexing completed on 2024-04-14 03:56:12

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 class QNetworkAccessManager;
0018 
0019 namespace KUnitConversion
0020 {
0021 class UnitCategoryPrivate : public QSharedData
0022 {
0023 public:
0024     UnitCategoryPrivate();
0025     UnitCategoryPrivate(CategoryId id, const QString &name, const QString &description);
0026     virtual ~UnitCategoryPrivate();
0027 
0028     UnitCategoryPrivate *clone();
0029     bool operator==(const UnitCategoryPrivate &other) const;
0030     bool operator!=(const UnitCategoryPrivate &other) const;
0031 
0032     virtual Value convert(const Value &value, const Unit &toUnit);
0033 
0034     virtual bool hasOnlineConversionTable() const
0035     {
0036         return false;
0037     }
0038 
0039     virtual UpdateJob* syncConversionTable(std::chrono::seconds updateSkipPeriod)
0040     {
0041         Q_UNUSED(updateSkipPeriod)
0042         return nullptr;
0043     }
0044 
0045     void addDefaultUnit(const Unit &unit);
0046     void addCommonUnit(const Unit &unit);
0047     void addUnit(const Unit &unit);
0048 
0049     static inline UnitCategoryPrivate* get(const UnitCategory &category)
0050     {
0051         return category.d.data();
0052     }
0053 
0054     static inline UnitCategory makeCategory(CategoryId id, const QString &name, const QString &description)
0055     {
0056         return UnitCategory(new UnitCategoryPrivate(id, name, description));
0057     }
0058     static inline UnitCategory makeCategory(UnitCategoryPrivate *dd)
0059     {
0060         return UnitCategory(dd);
0061     }
0062 
0063     static inline UpdateJob* makeUpdateJob(QNetworkReply *reply)
0064     {
0065         return new UpdateJob(reply);
0066     }
0067 
0068     /** Network access manager to use for online updates.
0069      *  @see syncConversionTable
0070      */
0071     static QNetworkAccessManager* nam();
0072 
0073     CategoryId m_id;
0074     QString m_name;
0075     QString m_description;
0076     KLocalizedString m_symbolStringFormat;
0077     Unit m_defaultUnit;
0078     QMap<QString, Unit> m_unitMap;
0079     QMap<UnitId, Unit> m_idMap;
0080     QList<Unit> m_units;
0081     QList<Unit> m_mostCommonUnits;
0082 };
0083 
0084 } // KUnitConversion namespace
0085 
0086 #endif // KUNITCONVERSION_UNITCATEGORY_P_H