DBus enabling of base classes plus sample for testing / show how to use them. Also qdbuscpp2xml plugin for blackmisc classes.

This commit is contained in:
Klaus Basan
2013-07-22 14:33:50 +02:00
parent 6736209945
commit 8b512ba818
48 changed files with 1264 additions and 52 deletions

View File

@@ -0,0 +1,18 @@
/* Copyright (C) 2013 VATSIM Community / contributors
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef BLACKMISC_AVALLCLASSES_H
#define BLACKMISC_AVALLCLASSES_H
#include "blackmisc/avaltitude.h"
#include "blackmisc/avheading.h"
#include "blackmisc/avioadfsystem.h"
#include "blackmisc/aviocomsystem.h"
#include "blackmisc/avionavsystem.h"
#include "blackmisc/aviotransponder.h"
#include "blackmisc/avtrack.h"
#include "blackmisc/avverticalpositions.h"
#endif // guard

View File

@@ -24,9 +24,9 @@ private:
* \param f
* \return
*/
bool isValidFrequency(CFrequency f) const
bool isValidFrequency(PhysicalQuantities::CFrequency f) const
{
double fr = f.valueRounded(CFrequencyUnit::kHz(), this->m_digits);
double fr = f.valueRounded(PhysicalQuantities::CFrequencyUnit::kHz(), this->m_digits);
return fr >= 190.0 && fr <= 1750.0;
}
/*!
@@ -38,7 +38,7 @@ private:
* \param digits
*
*/
CAdfSystem(bool validate, const QString &name, const CFrequency &activeFrequency, const CFrequency &standbyFrequency, int digits = 3):
CAdfSystem(bool validate, const QString &name, const PhysicalQuantities::CFrequency &activeFrequency, const PhysicalQuantities::CFrequency &standbyFrequency, int digits = 3):
CModulator(name, activeFrequency, standbyFrequency, digits)
{
this->validate(validate);
@@ -90,7 +90,7 @@ public:
* \param standbyFrequency
* \param digits
*/
CAdfSystem(const QString &name, const CFrequency &activeFrequency, const CFrequency &standbyFrequency = CModulator::FrequencyNotSet(), int digits = 3):
CAdfSystem(const QString &name, const PhysicalQuantities::CFrequency &activeFrequency, const PhysicalQuantities::CFrequency &standbyFrequency = CModulator::FrequencyNotSet(), int digits = 3):
CModulator(name, activeFrequency, standbyFrequency == CModulator::FrequencyNotSet() ? activeFrequency : standbyFrequency, digits)
{
this->validate(true);
@@ -108,7 +108,7 @@ public:
* \brief Set standby frequency
* \param frequencyKHz
*/
void setFrequencyActiveKHz(double frequencyKHz)
void setFrequencyStandbyKHz(double frequencyKHz)
{
CModulator::setFrequencyStandbyKHz(frequencyKHz);
this->validate(true);
@@ -144,7 +144,7 @@ public:
/*!
* Try to get a ADF unit with given name and frequency. Returns true in case an object
* has been sucessfully created, otherwise returns a default object.
* has been sucessfully created, otherwise returns a default object and false.
* \param adfSystem
* \param name
* \param activeFrequencyKHz
@@ -153,7 +153,7 @@ public:
*/
static bool tryGetAdfSystem(CAdfSystem &adfSystem, const QString &name, double activeFrequencyKHz, double standbyFrequencyKHz = -1)
{
adfSystem = CAdfSystem(false, name, CFrequency(activeFrequencyKHz, CFrequencyUnit::MHz()), CFrequency(standbyFrequencyKHz < 0 ? activeFrequencyKHz : standbyFrequencyKHz, CFrequencyUnit::MHz()));
adfSystem = CAdfSystem(false, name, PhysicalQuantities::CFrequency(activeFrequencyKHz, PhysicalQuantities::CFrequencyUnit::MHz()), PhysicalQuantities::CFrequency(standbyFrequencyKHz < 0 ? activeFrequencyKHz : standbyFrequencyKHz, PhysicalQuantities::CFrequencyUnit::MHz()));
bool s;
if (!(s = adfSystem.validate(false))) adfSystem = CAdfSystem(); // reset to default
return s;
@@ -168,7 +168,7 @@ public:
* \param standbyFrequency
* \return
*/
static bool tryGetAdfSystem(CAdfSystem &adfSystem, const QString &name, CFrequency activeFrequency, CFrequency standbyFrequency = CModulator::FrequencyNotSet())
static bool tryGetAdfSystem(CAdfSystem &adfSystem, const QString &name, PhysicalQuantities::CFrequency activeFrequency, PhysicalQuantities::CFrequency standbyFrequency = CModulator::FrequencyNotSet())
{
adfSystem = CAdfSystem(false, name, activeFrequency, standbyFrequency);
bool s;
@@ -183,7 +183,7 @@ public:
*/
static CAdfSystem GetAdf1System(double activeFrequencyKHz, double standbyFrequencyKHz = -1)
{
return CAdfSystem(CModulator::NameCom1(), CFrequency(activeFrequencyKHz, CFrequencyUnit::MHz()), CFrequency(standbyFrequencyKHz < 0 ? activeFrequencyKHz : standbyFrequencyKHz, CFrequencyUnit::MHz()));
return CAdfSystem(CModulator::NameCom1(), PhysicalQuantities::CFrequency(activeFrequencyKHz, PhysicalQuantities::CFrequencyUnit::MHz()), PhysicalQuantities::CFrequency(standbyFrequencyKHz < 0 ? activeFrequencyKHz : standbyFrequencyKHz, PhysicalQuantities::CFrequencyUnit::MHz()));
}
/*!
* \brief ADF1 unit
@@ -191,7 +191,7 @@ public:
* \param standbyFrequency
* \return
*/
static CAdfSystem GetAdf1System(CFrequency activeFrequency, CFrequency standbyFrequency = CModulator::FrequencyNotSet())
static CAdfSystem GetAdf1System(PhysicalQuantities::CFrequency activeFrequency, PhysicalQuantities::CFrequency standbyFrequency = CModulator::FrequencyNotSet())
{
return CAdfSystem(CModulator::NameCom1(), activeFrequency, standbyFrequency == CModulator::FrequencyNotSet() ? activeFrequency : standbyFrequency);
}
@@ -213,7 +213,7 @@ public:
* \param standbyFrequency
* \return
*/
static bool tryGetAdf1Unit(CAdfSystem &adfSystem, CFrequency activeFrequency, CFrequency standbyFrequency = CModulator::FrequencyNotSet())
static bool tryGetAdf1Unit(CAdfSystem &adfSystem, PhysicalQuantities::CFrequency activeFrequency, PhysicalQuantities::CFrequency standbyFrequency = CModulator::FrequencyNotSet())
{
return CAdfSystem::tryGetAdfSystem(adfSystem, CModulator::NameCom1(), activeFrequency, standbyFrequency);
}
@@ -225,7 +225,7 @@ public:
*/
static CAdfSystem GetAdf2System(double activeFrequencyKHz, double standbyFrequencyKHz = -1)
{
return CAdfSystem(CModulator::NameCom2(), CFrequency(activeFrequencyKHz, CFrequencyUnit::MHz()), CFrequency(standbyFrequencyKHz < 0 ? activeFrequencyKHz : standbyFrequencyKHz, CFrequencyUnit::MHz()));
return CAdfSystem(CModulator::NameCom2(), PhysicalQuantities::CFrequency(activeFrequencyKHz, PhysicalQuantities::CFrequencyUnit::MHz()), PhysicalQuantities::CFrequency(standbyFrequencyKHz < 0 ? activeFrequencyKHz : standbyFrequencyKHz, PhysicalQuantities::CFrequencyUnit::MHz()));
}
/*!
* \brief ADF2 unit
@@ -233,7 +233,7 @@ public:
* \param standbyFrequency
* \return
*/
static CAdfSystem GetAdf2System(CFrequency activeFrequency, CFrequency standbyFrequency = CModulator::FrequencyNotSet())
static CAdfSystem GetAdf2System(PhysicalQuantities::CFrequency activeFrequency, PhysicalQuantities::CFrequency standbyFrequency = CModulator::FrequencyNotSet())
{
return CAdfSystem(CModulator::NameCom2(), activeFrequency, standbyFrequency == CModulator::FrequencyNotSet() ? activeFrequency : standbyFrequency);
}
@@ -255,7 +255,7 @@ public:
* \param standbyFrequency
* \return
*/
static bool tryGetAdf2System(CAdfSystem &adfSystem, CFrequency activeFrequency, CFrequency standbyFrequency = CModulator::FrequencyNotSet())
static bool tryGetAdf2System(CAdfSystem &adfSystem, PhysicalQuantities::CFrequency activeFrequency, PhysicalQuantities::CFrequency standbyFrequency = CModulator::FrequencyNotSet())
{
return CAdfSystem::tryGetAdfSystem(adfSystem, CModulator::NameCom2(), activeFrequency, standbyFrequency);
}
@@ -263,6 +263,6 @@ public:
} // namespace
} // namespace
Q_DECLARE_METATYPE(BlackMisc::Aviation::CAdfSystem)
#endif // BLACKMISC_AVIOADFSYSTEM_H

View File

@@ -22,11 +22,10 @@ namespace Aviation
class CAvionicsBase : public CBaseStreamStringifier
{
private:
QString m_name; //!< name of the unit
protected:
QString m_name; //!< name of the unit
/*!
* \brief Default constructor
*/

View File

@@ -320,5 +320,6 @@ public:
} // namespace
} // namespace
Q_DECLARE_METATYPE(BlackMisc::Aviation::CComSystem)
#endif // include guard

View File

@@ -25,17 +25,6 @@ template <class AVIO> void CModulator<AVIO>::toggleActiveStandby()
this->m_frequencyStandby = a;
}
/*
* String representation
*/
template <class AVIO> QString CModulator<AVIO>::stringForConverter() const
{
QString s(this->getName());
s.append(" Active: ").append(this->m_frequencyActive.unitValueRoundedWithUnit(3));
s.append(" Standby: ").append(this->m_frequencyStandby.unitValueRoundedWithUnit(3));
return s;
}
/*
* Assigment operator =
*/

View File

@@ -5,6 +5,8 @@
#ifndef BLACKMISC_AVIOMODULATORUNIT_H
#define BLACKMISC_AVIOMODULATORUNIT_H
#include <QDBusArgument>
#include "blackmisc/aviobase.h"
namespace BlackMisc
@@ -52,7 +54,12 @@ protected:
* \brief String for converter
* \return
*/
virtual QString stringForConverter() const;
virtual QString stringForConverter() const {
QString s(this->getName());
s.append(" Active: ").append(this->m_frequencyActive.unitValueRoundedWithUnit(3));
s.append(" Standby: ").append(this->m_frequencyStandby.unitValueRoundedWithUnit(3));
return s;
}
/*!
* \brief Set active frequency
@@ -254,6 +261,48 @@ public:
{
this->m_frequencyStandby = frequency;
}
/*!
* \brief Unmarshalling operator >>, DBus to object
* \param argument
* \param aviationUnit
* \return
*/
friend const QDBusArgument &operator>>(const QDBusArgument &argument, AVIO &aviationUnit) {
argument.beginStructure();
argument >> aviationUnit.m_frequencyActive;
argument >> aviationUnit.m_frequencyStandby;
argument >> aviationUnit.m_digits;
argument >> aviationUnit.m_name;
argument.endStructure();
return argument;
}
/*!
* \brief Marshalling operator <<, object to DBus
* \param argument
* \param aviationUnit
* \return
*/
friend QDBusArgument &operator<<(QDBusArgument &argument, const AVIO& aviationUnit)
{
argument.beginStructure();
argument << aviationUnit.m_frequencyActive;
argument << aviationUnit.m_frequencyStandby;
argument << aviationUnit.m_digits;
argument << aviationUnit.m_name;
argument.endStructure();
return argument;
}
/*!
* \brief Register metadata
*/
static void registerMetadata()
{
qRegisterMetaType<AVIO>(typeid(AVIO).name());
qDBusRegisterMetaType<AVIO>();
}
};
} // namespace

View File

@@ -273,5 +273,6 @@ public:
} // namespace
} // namespace
Q_DECLARE_METATYPE(BlackMisc::Aviation::CNavSystem)
#endif // BLACKMISC_AVIONAVSYSTEM_H

View File

@@ -315,5 +315,6 @@ public:
} // namespace
} // namespace
Q_DECLARE_METATYPE(BlackMisc::Aviation::CTransponder)
#endif // BLACKMISC_AVIOTRANSPONDER_H

View File

@@ -23,7 +23,7 @@ class CBaseStreamStringifier
*/
friend QDebug operator<<(QDebug debug, const CBaseStreamStringifier &uc)
{
const CBaseStreamStringifier &sf = uc; // allows to acces protected method
const CBaseStreamStringifier &sf = uc; // allows to access protected method
debug << sf.stringForStreaming();
return debug;
}

View File

@@ -1,4 +1,4 @@
QT += network
QT += network dbus
TARGET = blackmisc
TEMPLATE = lib
@@ -16,5 +16,4 @@ DEFINES += LOG_IN_FILE
HEADERS += *.h
SOURCES += *.cpp
DESTDIR = ../../lib

View File

@@ -0,0 +1,43 @@
/* Copyright (C) 2013 VATSIM Community / contributors
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "blackmiscfreefunctions.h"
/*
* Metadata for PQs
*/
void BlackMisc::PhysicalQuantities::registerMetadata()
{
{
CAcceleration::registerMetadata();
CAngle::registerMetadata();
CFrequency::registerMetadata();
CLength::registerMetadata();
CMass::registerMetadata();
CPressure::registerMetadata();
CSpeed::registerMetadata();
CTemperature::registerMetadata();
CTime::registerMetadata();
}
}
/*
* Metadata for aviation
*/
void BlackMisc::Aviation::registerMetadata()
{
CComSystem::registerMetadata();
CAdfSystem::registerMetadata();
CNavSystem::registerMetadata();
}
/*
* Metadata for Blackmisc
*/
void BlackMisc::registerMetadata()
{
PhysicalQuantities::registerMetadata();
Aviation::registerMetadata();
}

View File

@@ -0,0 +1,44 @@
/* Copyright (C) 2013 VATSIM Community / contributors
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef BLACKMISC_FREEFUNCTIONS_H
#define BLACKMISC_FREEFUNCTIONS_H
#include "avallclasses.h"
#include "pqallquantities.h"
namespace BlackMisc {
/*!
* Free functions in PQ
*/
namespace PhysicalQuantities {
/*!
* \brief Register all metadata for PQs
*/
void registerMetadata();
} // PQ
/*!
* Free functions in aviation
*/
namespace Aviation {
/*!
* \brief Register metadata for aviation
*/
void registerMetadata();
} // Aviation
/*!
* \brief Register all relevant metadata in BlackMisc
*/
void registerMetadata();
} // BlackMisc
#endif // BLACKMISC_FREEFUNCTIONS_H

View File

@@ -16,6 +16,7 @@ namespace Geo
{
/*!
* Latitude and longitude interface
* \brief Interface for geodetic ccordinates
*/
class ICoordinateGeodetic

View File

@@ -51,4 +51,6 @@ public:
} // namespace
} // namespace
Q_DECLARE_METATYPE(BlackMisc::PhysicalQuantities::CAcceleration)
#endif // guard

View File

@@ -7,7 +7,7 @@
#define BLACKMISC_PQUNITSALL_H
// All units / quantities, required for the instantiations of the template
// especially as CRTP is used.
// especially as CRTP (Curiously recurring template pattern) is used.
// http://www.parashift.com/c++-faq-lite/separate-template-fn-defn-from-decl.html
// http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern
@@ -20,5 +20,6 @@
#include "blackmisc/pqangle.h"
#include "blackmisc/pqtime.h"
#include "blackmisc/pqacceleration.h"
#include "blackmisc/pqunits.h"
#endif // guard

View File

@@ -69,4 +69,6 @@ public:
} // namespace
} // namespace
Q_DECLARE_METATYPE(BlackMisc::PhysicalQuantities::CAngle)
#endif // BLACKMISC_PQANGLE_H

View File

@@ -8,10 +8,12 @@
#include "blackmisc/basestreamstringifier.h"
#include "blackmisc/debug.h"
#include <QDBusArgument>
#include <QString>
#include <QtGlobal>
#include <QDebug>
namespace BlackMisc
{
namespace PhysicalQuantities
@@ -240,6 +242,19 @@ protected:
*/
typedef double(*UnitConverter)(const CMeasurementUnit &, double);
/*!
* \brief Get unit from DBus argument
* \param argument
* \return
*/
static QString unitNameUnmarshalling(const QDBusArgument &argument) {
QString type;
argument.beginStructure();
argument >> type;
argument.endStructure();
return type;
}
private:
QString m_name; //!< name, e.g. "meter"
QString m_unitName; //!< unit name, e.g. "m"
@@ -250,8 +265,8 @@ private:
double m_epsilon; //!< values with differences below epsilon are the equal
int m_displayDigits; //!< standard rounding for string conversions
CMeasurementPrefix m_multiplier; //!< multiplier (kilo, Mega)
UnitConverter m_fromSiConverter; //! allows an arbitrary conversion method as per object
UnitConverter m_toSiConverter; //! allows an arbitrary conversion method as per object
UnitConverter m_fromSiConverter; //! allows an arbitrary conversion method as per object (e.g. angle, sexagesimal)
UnitConverter m_toSiConverter; //! allows an arbitrary conversion method as per object (e.g. angle, sexagesimal)
protected:
/*!
@@ -505,6 +520,21 @@ public:
return abs(checkValue) <= this->m_epsilon;
}
/*!
* Marshalling (to DBus) operator, unmarshalling to be found in specialized classes and
* mapping back to static object
* \brief Marshalling (to DBus) operator <<
* \param argument
* \param unit
* \return
*/
friend QDBusArgument &operator<<(QDBusArgument &argument, const CMeasurementUnit& unit) {
argument.beginStructure();
argument << unit.m_unitName;
argument.endStructure();
return argument;
}
// --------------------------------------------------------------------
// -- static
// --------------------------------------------------------------------
@@ -518,6 +548,7 @@ public:
static CMeasurementUnit none("none", "", "", false, false, 0.0, CMeasurementPrefix::None(), 0, 0);
return none;
}
};
} // namespace

View File

@@ -46,4 +46,7 @@ public:
};
} // namespace
} // namespace
Q_DECLARE_METATYPE(BlackMisc::PhysicalQuantities::CFrequency)
#endif // BLACKMISC_PQFREQUENCY_H

View File

@@ -46,4 +46,7 @@ public:
};
} // namespace
} // namespace
Q_DECLARE_METATYPE(BlackMisc::PhysicalQuantities::CLength)
#endif // BLACKMISC_PQLENGTH_H

View File

@@ -51,4 +51,6 @@ public:
} // namespace
} // namespace
Q_DECLARE_METATYPE(BlackMisc::PhysicalQuantities::CMass)
#endif // guard

View File

@@ -10,6 +10,7 @@
#include "blackmisc/pqbase.h"
#include "blackmisc/pqunits.h"
#include "blackmisc/debug.h"
#include <QDBusMetaType>
#include <QtGlobal>
#include <QString>
#include <QLocale>
@@ -21,8 +22,10 @@ namespace PhysicalQuantities
/*!
* \brief A physical quantity such as "5m", "20s", "1500ft/s"
*/
template <class MU, class PQ> class CPhysicalQuantity : public BlackMisc::CBaseStreamStringifier
{
private:
double m_unitValueD; //!< value backed by double
qint32 m_unitValueI; //!< value backed by integer, allows sole integer arithmetic
@@ -236,7 +239,7 @@ public:
qint32 convertedSiValueToInteger() const
{
return static_cast<qint32>(
BlackMisc::Math::CMath::round(this->m_convertedSiUnitValueD, 0));
BlackMisc::Math::CMath::round(this->m_convertedSiUnitValueD, 0));
}
/*!
@@ -417,6 +420,55 @@ public:
{
return this->isZeroEpsilon() || this->m_unitValueD < 0;
}
/*!
* \brief Unmarshalling operator >>, DBus to object
* \param argument
* \param pq
* \return
*/
friend const QDBusArgument &operator>>(const QDBusArgument &argument, PQ &pq) {
argument.beginStructure();
argument >> pq.m_unitValueD;
argument >> pq.m_unitValueI;
argument >> pq.m_convertedSiUnitValueD;
argument >> pq.m_isIntegerBaseValue;
argument >> pq.m_unit;
argument >> pq.m_conversionSiUnit;
argument.endStructure();
return argument;
}
/*!
* \brief Marshalling operator <<, object to DBus
* \param argument
* \param pq
* \return
*/
friend QDBusArgument &operator<<(QDBusArgument &argument, const PQ& pq)
{
argument.beginStructure();
argument << pq.m_unitValueD;
argument << pq.m_unitValueI;
argument << pq.m_convertedSiUnitValueD;
argument << pq.m_isIntegerBaseValue;
argument << pq.m_unit;
argument << pq.m_conversionSiUnit;
argument.endStructure();
return argument;
}
/*!
* \brief Register metadata of unit and quantity
*/
static void registerMetadata()
{
qRegisterMetaType<MU>(typeid(MU).name());
qDBusRegisterMetaType<MU>();
qRegisterMetaType<PQ>(typeid(PQ).name());
qDBusRegisterMetaType<PQ>();
}
};
} // namespace

View File

@@ -47,4 +47,7 @@ public:
};
} // namespace
} // namespace
Q_DECLARE_METATYPE(BlackMisc::PhysicalQuantities::CPressure)
#endif // BLACKMISC_PQPRESSURE_H

View File

@@ -18,15 +18,16 @@ namespace PhysicalQuantities
*/
class CSpeed : public CPhysicalQuantity<CSpeedUnit, CSpeed>
{
public:
/*!
* \brief Default constructor
*/
CSpeed() : CPhysicalQuantity(0, CSpeedUnit::m_s(), CSpeedUnit::m_s()) {}
/**
/*!
*\brief Copy constructor
*/
CSpeed(const CPhysicalQuantity &speed): CPhysicalQuantity(speed) {}
CSpeed(const CSpeed &speed): CPhysicalQuantity(speed) {}
/*!
* \brief Init by int value
* \param value
@@ -44,7 +45,10 @@ public:
*/
virtual ~CSpeed() {}
};
} // namespace
} // namespace
Q_DECLARE_METATYPE(BlackMisc::PhysicalQuantities::CSpeed)
#endif // BLACKMISC_CSPEED_H

View File

@@ -46,4 +46,7 @@ public:
};
} // namespace
} // namespace
Q_DECLARE_METATYPE(BlackMisc::PhysicalQuantities::CTemperature)
#endif // BLACKMISC_CTEMPERATURE_H

View File

@@ -48,4 +48,6 @@ public:
} // namespace
} // namespace
Q_DECLARE_METATYPE(BlackMisc::PhysicalQuantities::CTime)
#endif // BLACKMISC_PQTIME_H

View File

@@ -7,8 +7,11 @@
#define BLACKMISC_PQUNITS_H
#include "blackmisc/pqbase.h"
#include <QDBusArgument>
#include <QList>
#include <QtCore/qmath.h>
//
// Used with the template for quantities. This is the reason for
// having all units in one file, since template requires concrete instantiations
@@ -25,7 +28,7 @@ class CLengthUnit : public CMeasurementUnit
{
private:
/*!
* \brief Constructor Distance unit
* \brief Constructor length unit
* \param name
* \param unitName
* \param isSiUnit
@@ -41,6 +44,11 @@ private:
// void
}
public:
/*!
* Default constructor, we do not want this, but required for Qt Metasystem
*/
CLengthUnit() : CMeasurementUnit("meter", "m", "distance", true, true) {}
/*!
* \brief Copy constructor
* \param otherUnit
@@ -120,7 +128,51 @@ public:
return mi;
}
/*!
* \brief All units
* \return
*/
static const QList<CLengthUnit> &units()
{
static QList<CLengthUnit> u;
u.append(CLengthUnit::cm());
u.append(CLengthUnit::ft());
u.append(CLengthUnit::km());
u.append(CLengthUnit::m());
u.append(CLengthUnit::mi());
u.append(CLengthUnit::miStatute());
u.append(CLengthUnit::NM());
return u;
}
/*!
* \brief Unit from name
* \param unitName must be valid!
* \return
*/
static const CLengthUnit &fromUnitName(const QString &unitName) {
QList<CLengthUnit> units = CLengthUnit::units();
// read only, avoid deep copy
for (int i = 0; i < units.size(); ++i) {
if (units.at(i).getUnitName() == unitName) return (units.at(i));
}
qFatal("Illegal unit name");
return CLengthUnit::m(); // just suppress "not all control paths return a value"
}
/*!
* \brief Unmarshalling operator >>, map back to concrete static object
* \param argument
* \param dummy
* \return
*/
friend const QDBusArgument &operator>>(const QDBusArgument &argument, CLengthUnit &unit) {
QString unitName = CMeasurementUnit::unitNameUnmarshalling(argument);
unit = CLengthUnit::fromUnitName(unitName);
return argument;
}
};
Q_DECLARE_METATYPE(BlackMisc::PhysicalQuantities::CLengthUnit)
/*!
* \brief Specialized class for angles (degrees, radian).
@@ -160,6 +212,11 @@ private:
static double conversionSexagesimalFromSi(const CMeasurementUnit &angleUnit, double value);
public:
/*!
* Default constructor, we do not want this, but required for Qt Metasystem
*/
CAngleUnit() : CMeasurementUnit("radian", "rad", "angle", true, false) {}
/*!
* \brief Copy constructor
* \param otherUnit
@@ -203,7 +260,48 @@ public:
static CAngleUnit deg("segadecimal degree", "°", false, M_PI / 180,
CMeasurementPrefix::One(), 0, 1E-9, CAngleUnit::conversionSexagesimalToSi, CAngleUnit::conversionSexagesimalFromSi); return deg;
}
/*!
* \brief All units
* \return
*/
static const QList<CAngleUnit> &units()
{
static QList<CAngleUnit> u;
u.append(CAngleUnit::deg());
u.append(CAngleUnit::rad());
u.append(CAngleUnit::sexagesimalDeg());
return u;
}
/*!
* \brief Unit from name
* \param unitName must be valid!
* \return
*/
static const CAngleUnit &fromUnitName(const QString &unitName) {
QList<CAngleUnit> units = CAngleUnit::units();
// read only, avoid deep copy
for (int i = 0; i < units.size(); ++i) {
if (units.at(i).getUnitName() == unitName) return (units.at(i));
}
qFatal("Illegal unit name");
return CAngleUnit::rad(); // just suppress "not all control paths return a value"
}
/*!
* \brief Unmarshalling operator >>, map back to concrete static object
* \param argument
* \param dummy
* \return
*/
friend const QDBusArgument &operator>>(const QDBusArgument &argument, CAngleUnit &unit) {
QString unitName = CMeasurementUnit::unitNameUnmarshalling(argument);
unit = CAngleUnit::fromUnitName(unitName);
return argument;
}
};
Q_DECLARE_METATYPE(BlackMisc::PhysicalQuantities::CAngleUnit)
/*!
* \brief Specialized class for frequency (hertz, mega hertz, kilo hertz).
@@ -225,6 +323,11 @@ private:
CFrequencyUnit(const QString &name, const QString &unitName, bool isSiUnit, double conversionFactorToSI = 1.0, const CMeasurementPrefix &mulitplier = CMeasurementPrefix::One(), qint32 displayDigits = 2, double epsilon = 1E-9) :
CMeasurementUnit(name, unitName, "frequency", isSiUnit, false, conversionFactorToSI, mulitplier, displayDigits, epsilon) {}
public:
/*!
* Default constructor, we do not want this, but required for Qt Metasystem
*/
CFrequencyUnit() : CMeasurementUnit("hertz", "Hz", "frequency", true, false) {}
/*!
* \brief Copy constructor
* \param otherUnit
@@ -273,7 +376,49 @@ public:
static CFrequencyUnit GHz("gigahertz", "GHz", true, CMeasurementPrefix::G().getFactor(), CMeasurementPrefix::G(), 2);
return GHz;
}
/*!
* \brief All units
* \return
*/
static const QList<CFrequencyUnit> &units()
{
static QList<CFrequencyUnit> u;
u.append(CFrequencyUnit::GHz());
u.append(CFrequencyUnit::Hz());
u.append(CFrequencyUnit::kHz());
u.append(CFrequencyUnit::MHz());
return u;
}
/*!
* \brief Unit from name
* \param unitName must be valid!
* \return
*/
static const CFrequencyUnit &fromUnitName(const QString &unitName) {
QList<CFrequencyUnit> units = CFrequencyUnit::units();
// read only, avoid deep copy
for (int i = 0; i < units.size(); ++i) {
if (units.at(i).getUnitName() == unitName) return (units.at(i));
}
qFatal("Illegal unit name");
return CFrequencyUnit::Hz(); // just suppress "not all control paths return a value"
}
/*!
* \brief Unmarshalling operator >>, map back to concrete static object
* \param argument
* \param dummy
* \return
*/
friend const QDBusArgument &operator>>(const QDBusArgument &argument, CFrequencyUnit &unit) {
QString unitName = CMeasurementUnit::unitNameUnmarshalling(argument);
unit = CFrequencyUnit::fromUnitName(unitName);
return argument;
}
};
Q_DECLARE_METATYPE(BlackMisc::PhysicalQuantities::CFrequencyUnit)
/*!
* \brief Specialized class for mass units (kg, lbs).
@@ -295,6 +440,11 @@ private:
CMassUnit(const QString &name, const QString &unitName, bool isSiUnit, bool isSIBaseUnit, double conversionFactorToSI = 1.0, const CMeasurementPrefix &mulitplier = CMeasurementPrefix::One(), qint32 displayDigits = 2, double epsilon = 1E-9) :
CMeasurementUnit(name, unitName, "mass", isSiUnit, isSIBaseUnit, conversionFactorToSI, mulitplier, displayDigits, epsilon) {}
public:
/*!
* Default constructor, we do not want this, but required for Qt Metasystem
*/
CMassUnit() : CMeasurementUnit("kilogram", "kg", "mass", true, true, 1.0, CMeasurementPrefix::k(), 1) {}
/*!
* \brief Copy constructor
* \param otherUnit
@@ -343,7 +493,50 @@ public:
static CMassUnit lbs("pound", "lb", false, false, 0.45359237, CMeasurementPrefix::One(), 1);
return lbs;
}
/*!
* \brief All units
* \return
*/
static const QList<CMassUnit> &units()
{
static QList<CMassUnit> u;
u.append(CMassUnit::g());
u.append(CMassUnit::kg());
u.append(CMassUnit::lb());
u.append(CMassUnit::t());
return u;
}
/*!
* \brief Unit from name
* \param unitName must be valid!
* \return
*/
static const CMassUnit &fromUnitName(const QString &unitName) {
QList<CMassUnit> units = CMassUnit::units();
// read only, avoid deep copy
for (int i = 0; i < units.size(); ++i) {
if (units.at(i).getUnitName() == unitName) return (units.at(i));
}
qFatal("Illegal unit name");
return CMassUnit::kg(); // just suppress "not all control paths return a value"
}
/*!
* \brief Unmarshalling operator >>, map back to concrete static object
* \param argument
* \param dummy
* \return
*/
friend const QDBusArgument &operator>>(const QDBusArgument &argument, CMassUnit &unit) {
QString unitName = CMeasurementUnit::unitNameUnmarshalling(argument);
unit = CMassUnit::fromUnitName(unitName);
return argument;
}
};
Q_DECLARE_METATYPE(BlackMisc::PhysicalQuantities::CMassUnit)
/*!
* \brief Specialized class for pressure (psi, hPa, bar).
@@ -363,8 +556,13 @@ private:
* \param epsilon
*/
CPressureUnit(const QString &name, const QString &unitName, bool isSiUnit, double conversionFactorToSI = 1.0, const CMeasurementPrefix &mulitplier = CMeasurementPrefix::One(), qint32 displayDigits = 2, double epsilon = 1E-9) :
CMeasurementUnit(name, unitName, "frequency", isSiUnit, false, conversionFactorToSI, mulitplier, displayDigits, epsilon) {}
CMeasurementUnit(name, unitName, "pressure", isSiUnit, false, conversionFactorToSI, mulitplier, displayDigits, epsilon) {}
public:
/*!
* Default constructor, we do not want this, but required for Qt Metasystem
*/
CPressureUnit() : CMeasurementUnit("pascal", "Pa", "pressure", true, false) {}
/*!
* \brief Copy constructor
* \param otherUnit
@@ -443,7 +641,51 @@ public:
static CPressureUnit inhg("Inch of mercury ", "inHg", false, 3386.5307486631);
return inhg;
}
/*!
* \brief All units
* \return
*/
static const QList<CPressureUnit> &units()
{
static QList<CPressureUnit> u;
u.append(CPressureUnit::bar());
u.append(CPressureUnit::hPa());
u.append(CPressureUnit::inHg());
u.append(CPressureUnit::inHgFL());
u.append(CPressureUnit::mbar());
u.append(CPressureUnit::psi());
return u;
}
/*!
* \brief Unit from name
* \param unitName must be valid!
* \return
*/
static const CPressureUnit &fromUnitName(const QString &unitName) {
QList<CPressureUnit> units = CPressureUnit::units();
// read only, avoid deep copy
for (int i = 0; i < units.size(); ++i) {
if (units.at(i).getUnitName() == unitName) return (units.at(i));
}
qFatal("Illegal unit name");
return CPressureUnit::Pa(); // just suppress "not all control paths return a value"
}
/*!
* \brief Unmarshalling operator >>, map back to concrete static object
* \param argument
* \param dummy
* \return
*/
friend const QDBusArgument &operator>>(const QDBusArgument &argument, CPressureUnit &unit) {
QString unitName = CMeasurementUnit::unitNameUnmarshalling(argument);
unit = CPressureUnit::fromUnitName(unitName);
return argument;
}
};
Q_DECLARE_METATYPE(BlackMisc::PhysicalQuantities::CPressureUnit)
/*!
* \brief Specialized class for temperatur units (kelvin, centidegree).
@@ -483,6 +725,11 @@ protected:
virtual double conversionFromSiConversionUnit(double value) const;
public:
/*!
* Default constructor, we do not want this, but required for Qt Metasystem
*/
CTemperatureUnit() : CMeasurementUnit("Kelvin", "K", "temperature", true, true) {}
/*!
* \brief Copy constructor
* \param otherUnit
@@ -529,7 +776,48 @@ public:
static CTemperatureUnit F("Fahrenheit", "°F", false, false, 5.0 / 9.0, 459.67);
return F;
}
/*!
* \brief All units
* \return
*/
static const QList<CTemperatureUnit> &units()
{
static QList<CTemperatureUnit> u;
u.append(CTemperatureUnit::C());
u.append(CTemperatureUnit::F());
u.append(CTemperatureUnit::K());
return u;
}
/*!
* \brief Unit from name
* \param unitName must be valid!
* \return
*/
static const CTemperatureUnit &fromUnitName(const QString &unitName) {
QList<CTemperatureUnit> units = CTemperatureUnit::units();
// read only, avoid deep copy
for (int i = 0; i < units.size(); ++i) {
if (units.at(i).getUnitName() == unitName) return (units.at(i));
}
qFatal("Illegal unit name");
return CTemperatureUnit::K(); // just suppress "not all control paths return a value"
}
/*!
* \brief Unmarshalling operator >>, map back to concrete static object
* \param argument
* \param dummy
* \return
*/
friend const QDBusArgument &operator>>(const QDBusArgument &argument, CTemperatureUnit &unit) {
QString unitName = CMeasurementUnit::unitNameUnmarshalling(argument);
unit = CTemperatureUnit::fromUnitName(unitName);
return argument;
}
};
Q_DECLARE_METATYPE(BlackMisc::PhysicalQuantities::CTemperatureUnit)
/*!
* \brief Specialized class for speed units (m/s, ft/s, NM/h).
@@ -552,6 +840,11 @@ private:
CSpeedUnit(const QString &name, const QString &unitName, bool isSiUnit, bool isSIBaseUnit, double conversionFactorToSI = 1.0, const CMeasurementPrefix &mulitplier = CMeasurementPrefix::One(), qint32 displayDigits = 2, double epsilon = 1E-9) :
CMeasurementUnit(name, unitName, "speed", isSiUnit, isSIBaseUnit, conversionFactorToSI, mulitplier, displayDigits, epsilon) {}
public:
/*!
* Default constructor, we do not want this, but required for Qt Metasystem
*/
CSpeedUnit() : CMeasurementUnit("meters/second", "m/s", "speed", true, false) {}
/*!
* Constructor, allows to implement methods in base class
* \param otherUnit
@@ -617,7 +910,51 @@ public:
static CSpeedUnit kmh("kilometers/hour", "km/h", false, false, 1.0 / 3.6, CMeasurementPrefix::One(), 1);
return kmh;
}
/*!
* \brief All units
* \return
*/
static const QList<CSpeedUnit> &units()
{
static QList<CSpeedUnit> u;
u.append(CSpeedUnit::ft_min());
u.append(CSpeedUnit::ft_s());
u.append(CSpeedUnit::km_h());
u.append(CSpeedUnit::kts());
u.append(CSpeedUnit::m_s());
u.append(CSpeedUnit::NM_h());
return u;
}
/*!
* \brief Unit from name
* \param unitName must be valid!
* \return
*/
static const CSpeedUnit &fromUnitName(const QString &unitName) {
QList<CSpeedUnit> units = CSpeedUnit::units();
// read only, avoid deep copy
for (int i = 0; i < units.size(); ++i) {
if (units.at(i).getUnitName() == unitName) return (units.at(i));
}
qFatal("Illegal unit name");
return CSpeedUnit::m_s(); // just suppress "not all control paths return a value"
}
/*!
* \brief Unmarshalling operator >>, map back to concrete static object
* \param argument
* \param dummy
* \return
*/
friend const QDBusArgument &operator>>(const QDBusArgument &argument, CSpeedUnit &unit) {
QString unitName = CMeasurementUnit::unitNameUnmarshalling(argument);
unit = CSpeedUnit::fromUnitName(unitName);
return argument;
}
};
Q_DECLARE_METATYPE(BlackMisc::PhysicalQuantities::CSpeedUnit)
/*!
* \brief Specialized class for time units (ms, hour, min).
@@ -640,6 +977,10 @@ private:
CTimeUnit(const QString &name, const QString &unitName, bool isSiUnit, bool isSIBaseUnit, double conversionFactorToSI = 1.0, const CMeasurementPrefix &mulitplier = CMeasurementPrefix::One(), qint32 displayDigits = 2, double epsilon = 1E-9) :
CMeasurementUnit(name, unitName, "time", isSiUnit, isSIBaseUnit, conversionFactorToSI, mulitplier, displayDigits, epsilon) {}
public:
/*!
* Default constructor, we do not want this, but required for Qt Metasystem
*/
CTimeUnit() : CMeasurementUnit("second", "s", "time", true, true, 1, CMeasurementPrefix::None()) {}
/*!
* Constructor, allows to implement methods in base class
@@ -697,7 +1038,49 @@ public:
return day;
}
/*!
* \brief All units
* \return
*/
static const QList<CTimeUnit> &units()
{
static QList<CTimeUnit> u;
u.append(CTimeUnit::d());
u.append(CTimeUnit::h());
u.append(CTimeUnit::min());
u.append(CTimeUnit::ms());
u.append(CTimeUnit::s());
return u;
}
/*!
* \brief Unit from name
* \param unitName must be valid!
* \return
*/
static const CTimeUnit &fromUnitName(const QString &unitName) {
QList<CTimeUnit> units = CTimeUnit::units();
// read only, avoid deep copy
for (int i = 0; i < units.size(); ++i) {
if (units.at(i).getUnitName() == unitName) return (units.at(i));
}
qFatal("Illegal unit name");
return CTimeUnit::s(); // just suppress "not all control paths return a value"
}
/*!
* \brief Unmarshalling operator >>, map back to concrete static object
* \param argument
* \param dummy
* \return
*/
friend const QDBusArgument &operator>>(const QDBusArgument &argument, CTimeUnit &unit) {
QString unitName = CMeasurementUnit::unitNameUnmarshalling(argument);
unit = CTimeUnit::fromUnitName(unitName);
return argument;
}
};
Q_DECLARE_METATYPE(BlackMisc::PhysicalQuantities::CTimeUnit)
/*!
* \brief Specialized class for acceleration units (m/s2, ft/s2).
@@ -718,8 +1101,13 @@ private:
* \param epsilon
*/
CAccelerationUnit(const QString &name, const QString &unitName, bool isSiUnit, bool isSIBaseUnit, double conversionFactorToSI = 1.0, const CMeasurementPrefix &mulitplier = CMeasurementPrefix::One(), qint32 displayDigits = 2, double epsilon = 1E-9) :
CMeasurementUnit(name, unitName, "time", isSiUnit, isSIBaseUnit, conversionFactorToSI, mulitplier, displayDigits, epsilon) {}
CMeasurementUnit(name, unitName, "acceleration", isSiUnit, isSIBaseUnit, conversionFactorToSI, mulitplier, displayDigits, epsilon) {}
public:
/*!
* Default constructor, we do not want this, but required for Qt Metasystem
*/
CAccelerationUnit() : CMeasurementUnit("meter/second²", "m/s²", "acceleration", true, false, 1, CMeasurementPrefix::None(), 1) {}
/*!
* Constructor, allows to implement methods in base class
* \param otherUnit
@@ -745,7 +1133,47 @@ public:
static CAccelerationUnit fts2("feet/seconds²", "ft/s²", true, false, 3.28084, CMeasurementPrefix::m(), 0);
return fts2;
}
/*!
* \brief All units
* \return
*/
static const QList<CAccelerationUnit> &units()
{
static QList<CAccelerationUnit> u;
u.append(CAccelerationUnit::ft_s2());
u.append(CAccelerationUnit::m_s2());
return u;
}
/*!
* \brief Unit from name
* \param unitName must be valid!
* \return
*/
static const CAccelerationUnit &fromUnitName(const QString &unitName) {
QList<CAccelerationUnit> units = CAccelerationUnit::units();
// read only, avoid deep copy
for (int i = 0; i < units.size(); ++i) {
if (units.at(i).getUnitName() == unitName) return (units.at(i));
}
qFatal("Illegal unit name");
return CAccelerationUnit::m_s2(); // just suppress "not all control paths return a value"
}
/*!
* \brief Unmarshalling operator >>, map back to concrete static object
* \param argument
* \param dummy
* \return
*/
friend const QDBusArgument &operator>>(const QDBusArgument &argument, CAccelerationUnit &unit) {
QString unitName = CMeasurementUnit::unitNameUnmarshalling(argument);
unit = CAccelerationUnit::fromUnitName(unitName);
return argument;
}
};
Q_DECLARE_METATYPE(BlackMisc::PhysicalQuantities::CAccelerationUnit)
} // namespace
} // namespace