diff --git a/samples/blackmiscquantities_dbus/BlackMiscTest.Testservice.xml b/samples/blackmiscquantities_dbus/BlackMiscTest.Testservice.xml
index fec10b6e1..d8ba83ba6 100644
--- a/samples/blackmiscquantities_dbus/BlackMiscTest.Testservice.xml
+++ b/samples/blackmiscquantities_dbus/BlackMiscTest.Testservice.xml
@@ -15,8 +15,12 @@
-
+
+
+
+
+
diff --git a/samples/blackmiscquantities_dbus/main.cpp b/samples/blackmiscquantities_dbus/main.cpp
index 905f4ca78..785539601 100644
--- a/samples/blackmiscquantities_dbus/main.cpp
+++ b/samples/blackmiscquantities_dbus/main.cpp
@@ -60,8 +60,7 @@ int main(int argc, char *argv[])
QString service; // service not needed
if (QDBusConnection::sessionBus().connect(
service, Testservice::ServicePath, Testservice::ServiceName,
- "sendStringMessage", pTestservice,
- SLOT(receiveStringMessage(const QString &)))) {
+ "sendStringMessage", pTestservice, SLOT(receiveStringMessage(const QString &)))) {
qDebug() << "Connected object with bus sendStringMessage";
} else {
qFatal("Cannot connect service with DBus");
@@ -100,12 +99,23 @@ int main(int argc, char *argv[])
CSpeed speed(speedValue++, BlackMisc::PhysicalQuantities::CSpeedUnit::km_h());
testserviceInterface.receiveSpeed(speed);
qDebug() << "Send speed via interface" << speed;
+
+ speed.switchUnit(CSpeedUnit::kts());
+ testserviceInterface.receiveSpeed(speed);
+ qDebug() << "Send speed via interface" << speed;
TestserviceTool::sleep(2500);
// Aviation
CComSystem comSystem = CComSystem("DBUS COM1", CPhysicalQuantitiesConstants::FrequencyInternationalAirDistress(), CPhysicalQuantitiesConstants::FrequencyUnicom());
testserviceInterface.receiveComUnit(comSystem);
qDebug() << "Send COM via interface" << comSystem;
+
+ CAltitude al(1000, true, CLengthUnit::ft());
+ QDBusVariant qv(QVariant::fromValue(al));
+ testserviceInterface.receiveVariant(qv);
+ testserviceInterface.receiveAltitude(al);
+ qDebug() << "Send altitude via interface" << al;
+
TestserviceTool::sleep(2500);
}
}
diff --git a/samples/blackmiscquantities_dbus/readme.txt b/samples/blackmiscquantities_dbus/readme.txt
index 4481e7f8f..6c74d5ca4 100644
--- a/samples/blackmiscquantities_dbus/readme.txt
+++ b/samples/blackmiscquantities_dbus/readme.txt
@@ -2,7 +2,8 @@ Starting: dbus-daemon.exe --session
- blocks CMD (sometimes daemon continues to run when pressing CTRL/C)
- does not start without directory session.d, i.e. ..\Qt\Qt5.1.0DBus\qtbase\etc\dbus-1\session.d
-qdbuscpp2xml testservice.h -x H:\Projects\QtBuilds\build-client-Qt_5_1_0_VATSIM_qmake_Microsoft_Visual_C_Compiler_10_0_x86_2-Release\bin\blackmisc_cpp2xml.dll -o BlackMiscTest.Testservice.xml
+qdbuscpp2xml testservice.h -x blackmisc_cpp2xml.dll -o BlackMiscTest.Testservice.xml
+Set search path for plugins: env.var. QT_PLUGIN_PATH
Done automatically, but if required manually
Interface: qdbusxml2cpp blackbus.testservice.xml -p itestservice
diff --git a/samples/blackmiscquantities_dbus/testservice.cpp b/samples/blackmiscquantities_dbus/testservice.cpp
index bcfac37e3..bcca70f78 100644
--- a/samples/blackmiscquantities_dbus/testservice.cpp
+++ b/samples/blackmiscquantities_dbus/testservice.cpp
@@ -33,7 +33,8 @@ void Testservice::receiveStringMessage(const QString &message)
void Testservice::receiveVariant(const QDBusVariant &variant)
{
QVariant qv = variant.variant();
- qDebug() << "Pid:" << TestserviceTool::getPid() << "Received variant:" << qv;
+ BlackMisc::Aviation::CAltitude altitude = qv.value();
+ qDebug() << "Pid:" << TestserviceTool::getPid() << "Received variant:" << altitude;
}
/*
@@ -52,5 +53,13 @@ void Testservice::receiveComUnit(const BlackMisc::Aviation::CComSystem &comUnit)
qDebug() << "Pid:" << TestserviceTool::getPid() << "Received COM:" << comUnit;
}
+/*
+ * Receivealtitude
+ */
+void Testservice::receiveAltitude(const BlackMisc::Aviation::CAltitude &altitude)
+{
+ qDebug() << "Pid:" << TestserviceTool::getPid() << "Received altitude:" << altitude;
+
+}
} // namespace
diff --git a/samples/blackmiscquantities_dbus/testservice.h b/samples/blackmiscquantities_dbus/testservice.h
index 6ce955b27..81e10e7b5 100644
--- a/samples/blackmiscquantities_dbus/testservice.h
+++ b/samples/blackmiscquantities_dbus/testservice.h
@@ -65,11 +65,18 @@ public slots:
void receiveSpeed(const BlackMisc::PhysicalQuantities::CSpeed &speed);
/*!
- * \brief receiveComUnit
+ * \brief Receive com unit
* \param comUnit
*/
void receiveComUnit(const BlackMisc::Aviation::CComSystem &comUnit);
+ /*!
+ * \brief Receive altitude
+ * \param comUnit
+ */
+ void receiveAltitude(const BlackMisc::Aviation::CAltitude &altitude);
+
+
public:
static const QString ServiceName;
static const QString ServicePath;
diff --git a/samples/blackmiscquantities_dbus_xmlplugin/sample_quantities_avionics_xmlplugin.pro b/samples/blackmiscquantities_dbus_xmlplugin/sample_quantities_avionics_xmlplugin.pro
deleted file mode 100644
index 02804edab..000000000
--- a/samples/blackmiscquantities_dbus_xmlplugin/sample_quantities_avionics_xmlplugin.pro
+++ /dev/null
@@ -1,25 +0,0 @@
-QT += core dbus
-
-TARGET = sample_quantities_avionics_xmlplugin
-TEMPLATE = lib
-
-CONFIG += plugin
-
-DEPENDPATH += . ../../src/blackmisc
-INCLUDEPATH += . ../../src
-
-LIBS += -L../../lib -lblackmisc \
- ../blackmiscquantities_dbus/release/dummy.obj \
- ../blackmiscquantities_dbus/release/moc_dummy.obj \
- ../blackmiscquantities_dbus/release/dummynoq.obj
-
-win32:!win32-g++*: PRE_TARGETDEPS += ../../lib/blackmisc.lib \
- ../../samples/blackmiscquantities_dbus/release/dummy.obj
-else: PRE_TARGETDEPS += ../../lib/libblackmisc.a \
- ../../samples/blackmiscquantities_dbus/release/dummy.obj
-
-DESTDIR = ../../bin
-
-HEADERS += *.h
-SOURCES += *.cpp
-
diff --git a/samples/blackmiscquantities_dbus_xmlplugin/sampleplugin.cpp b/samples/blackmiscquantities_dbus_xmlplugin/sampleplugin.cpp
deleted file mode 100644
index edf3829ba..000000000
--- a/samples/blackmiscquantities_dbus_xmlplugin/sampleplugin.cpp
+++ /dev/null
@@ -1,12 +0,0 @@
-#include "sampleplugin.h"
-
-
-void CXmlSamplePlugin::registerMetaTypes()
-{
- qRegisterMetaType("BlackMiscTest::Dummy");
- qDBusRegisterMetaType();
-
- qRegisterMetaType("BlackMiscTest::DummyNoQ");
- qDBusRegisterMetaType();
-
-}
diff --git a/samples/blackmiscquantities_dbus_xmlplugin/sampleplugin.h b/samples/blackmiscquantities_dbus_xmlplugin/sampleplugin.h
deleted file mode 100644
index 921247b2b..000000000
--- a/samples/blackmiscquantities_dbus_xmlplugin/sampleplugin.h
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef SAMPLEPLUGIN_H
-#define SAMPLEPLUGIN_H
-
-#include
-#include
-#include
-#include
-#include "../blackmiscquantities_dbus/dummy.h"
-#include "../blackmiscquantities_dbus/dummynoq.h"
-
-class CXmlSamplePlugin : public QObject, public QDBusCpp2XmlPlugin
-{
- Q_OBJECT
- Q_INTERFACES(QDBusCpp2XmlPlugin)
- Q_PLUGIN_METADATA(IID "org.qt-project.Qt.DBus.Cpp2XmlPlugin")
-
-public:
- virtual void registerMetaTypes();
-};
-
-#endif // SAMPLEPLUGIN_H
diff --git a/src/blackmisc/avaltitude.cpp b/src/blackmisc/avaltitude.cpp
index c2965d61f..eef440e57 100644
--- a/src/blackmisc/avaltitude.cpp
+++ b/src/blackmisc/avaltitude.cpp
@@ -50,5 +50,14 @@ bool CAltitude::operator !=(const CAltitude &otherAltitude)
return !((*this) == otherAltitude);
}
+/*
+ * Register metadata
+ */
+void CAltitude::registerMetadata()
+{
+ qRegisterMetaType(typeid(CAltitude).name());
+ qDBusRegisterMetaType();
+}
+
} // namespace
} // namespace
diff --git a/src/blackmisc/avaltitude.h b/src/blackmisc/avaltitude.h
index 7bc24ee39..96316e3d5 100644
--- a/src/blackmisc/avaltitude.h
+++ b/src/blackmisc/avaltitude.h
@@ -28,6 +28,24 @@ protected:
*/
virtual QString stringForConverter() const;
+ /*!
+ * \brief Stream to DBus <<
+ * \param argument
+ */
+ virtual void marshallToDbus(QDBusArgument &argument) const {
+ CLength::marshallToDbus(argument);
+ argument << this->m_msl;
+ }
+
+ /*!
+ * \brief Stream from DBus >>
+ * \param argument
+ */
+ virtual void unmarshallFromDbus(const QDBusArgument &argument) {
+ CLength::unmarshallFromDbus(argument);
+ argument >> this->m_msl;
+ }
+
public:
/*!
@@ -105,9 +123,16 @@ public:
{
return this->m_msl;
}
+
+ /*!
+ * \brief Register metadata
+ */
+ static void registerMetadata();
+
};
} // namespace
} // namespace
+Q_DECLARE_METATYPE(BlackMisc::Aviation::CAltitude)
#endif // guard
diff --git a/src/blackmisc/aviobase.h b/src/blackmisc/aviobase.h
index cd739cc35..e9b152acb 100644
--- a/src/blackmisc/aviobase.h
+++ b/src/blackmisc/aviobase.h
@@ -19,17 +19,16 @@ namespace Aviation
/*!
* \brief Base class for avionics
*/
-class CAvionicsBase : public CBaseStreamStringifier
+class CAvionicsBase : public BlackMisc::CBaseStreamStringifier
{
-
protected:
QString m_name; //!< name of the unit
/*!
- * \brief Default constructor
+ * \brief Constructor
*/
- CAvionicsBase(const QString &name) : m_name(name) {}
+ CAvionicsBase(const QString &name) : CBaseStreamStringifier(), m_name(name) {}
/*!
* \brief Are the set values valid / in range
@@ -60,6 +59,22 @@ protected:
return this->m_name == otherSystem.m_name;
}
+ /*!
+ * \brief Stream to DBus <<
+ * \param argument
+ */
+ virtual void marshallToDbus(QDBusArgument &argument) const {
+ argument << this->m_name;
+ }
+
+ /*!
+ * \brief Stream from DBus >>
+ * \param argument
+ */
+ virtual void unmarshallFromDbus(const QDBusArgument &argument) {
+ argument >> this->m_name;
+ }
+
public:
/*!
* \brief Virtual destructor
diff --git a/src/blackmisc/aviocomsystem.h b/src/blackmisc/aviocomsystem.h
index 57857b572..923746f13 100644
--- a/src/blackmisc/aviocomsystem.h
+++ b/src/blackmisc/aviocomsystem.h
@@ -3,8 +3,8 @@
* 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_AVIOCOMUNIT_H
-#define BLACKMISC_AVIOCOMUNIT_H
+#ifndef BLACKMISC_AVIOCOMSYSTEM_H
+#define BLACKMISC_AVIOCOMSYSTEM_H
#include "blackmisc/aviomodulator.h"
#include
@@ -315,8 +315,10 @@ public:
static bool tryGetCom3System(CComSystem &comSystem, BlackMisc::PhysicalQuantities::CFrequency activeFrequency, BlackMisc::PhysicalQuantities::CFrequency standbyFrequency = CModulator::FrequencyNotSet()) {
return CComSystem::tryGetComSystem(comSystem, CModulator::NameCom3(), activeFrequency, standbyFrequency);
}
+
};
+
} // namespace
} // namespace
diff --git a/src/blackmisc/aviomodulator.cpp b/src/blackmisc/aviomodulator.cpp
index d13c083c3..49e23a232 100644
--- a/src/blackmisc/aviomodulator.cpp
+++ b/src/blackmisc/aviomodulator.cpp
@@ -6,6 +6,7 @@
#include "blackmisc/aviomodulator.h"
#include "blackmisc/aviocomsystem.h"
#include "blackmisc/avionavsystem.h"
+#include "blackmisc/avioadfsystem.h"
using BlackMisc::PhysicalQuantities::CFrequency;
using BlackMisc::PhysicalQuantities::CFrequencyUnit;
@@ -25,12 +26,20 @@ template void CModulator::toggleActiveStandby()
this->m_frequencyStandby = a;
}
+/*
+ * Register metadata
+ */
+template void CModulator::registerMetadata()
+{
+ qRegisterMetaType(typeid(AVIO).name());
+ qDBusRegisterMetaType();
+}
+
/*
* Assigment operator =
*/
template CModulator& CModulator::operator=(const CModulator &otherModulator)
{
-
if (this == &otherModulator) return *this; // Same object?
this->m_frequencyActive = otherModulator.m_frequencyActive;
this->m_frequencyStandby = otherModulator.m_frequencyStandby;
@@ -63,6 +72,8 @@ template bool CModulator::operator !=(const CModulator
// http://www.parashift.com/c++-faq/separate-template-class-defn-from-decl.html
template class CModulator;
template class CModulator;
+template class CModulator;
+
} // namespace
} // namespace
diff --git a/src/blackmisc/aviomodulator.h b/src/blackmisc/aviomodulator.h
index dcb9e0cf3..e82270b0d 100644
--- a/src/blackmisc/aviomodulator.h
+++ b/src/blackmisc/aviomodulator.h
@@ -6,7 +6,7 @@
#ifndef BLACKMISC_AVIOMODULATORUNIT_H
#define BLACKMISC_AVIOMODULATORUNIT_H
-#include
+#include
#include "blackmisc/aviobase.h"
namespace BlackMisc
@@ -19,6 +19,33 @@ namespace Aviation
*/
template class CModulator : public CAvionicsBase
{
+ /*!
+ * \brief Unmarshalling operator >>, DBus to object
+ * \param argument
+ * \param uc
+ * \return
+ */
+ friend const QDBusArgument &operator>>(const QDBusArgument &argument, AVIO &uc) {
+ // If I do not have the method here, DBus metasystem tries to stream against
+ // a container: inline const QDBusArgument &operator>>(const QDBusArgument &arg, Container &list)
+ // Once someone solves this, this methods should go and the CBaseStreamStringifier signature
+ // should be used
+ CBaseStreamStringifier &sf = uc;
+ return argument >> sf;
+ }
+
+ /*!
+ * \brief Marshalling operator <<, object to DBus
+ * \param argument
+ * \param pq
+ * \return
+ */
+ friend QDBusArgument &operator<<(QDBusArgument &argument, const AVIO &uc)
+ {
+ const CBaseStreamStringifier &sf = uc;
+ return argument << sf;
+ }
+
private:
BlackMisc::PhysicalQuantities::CFrequency m_frequencyActive; //!< active frequency
BlackMisc::PhysicalQuantities::CFrequency m_frequencyStandby; //!< standby frequency
@@ -207,6 +234,28 @@ protected:
return f;
}
+ /*!
+ * \brief Stream to DBus <<
+ * \param argument
+ */
+ virtual void marshallToDbus(QDBusArgument &argument) const {
+ CAvionicsBase::marshallToDbus(argument);
+ argument << this->m_frequencyActive;
+ argument << this->m_frequencyStandby;
+ argument << this->m_digits;
+ }
+
+ /*!
+ * \brief Stream from DBus >>
+ * \param argument
+ */
+ virtual void unmarshallFromDbus(const QDBusArgument &argument) {
+ CAvionicsBase::unmarshallFromDbus(argument);
+ argument >> this->m_frequencyActive;
+ argument >> this->m_frequencyStandby;
+ argument >> this->m_digits;
+ }
+
public:
/*!
* \brief Virtual destructor
@@ -262,47 +311,10 @@ 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(typeid(AVIO).name());
- qDBusRegisterMetaType();
- }
+ static void registerMetadata();
};
} // namespace
diff --git a/src/blackmisc/basestreamstringifier.h b/src/blackmisc/basestreamstringifier.h
index 7557f236f..393cf4565 100644
--- a/src/blackmisc/basestreamstringifier.h
+++ b/src/blackmisc/basestreamstringifier.h
@@ -2,6 +2,7 @@
#define BLACKMISC_BASESTREAMSTRINGIFIER_H
#include "blackmisc/debug.h"
+#include
#include
#include
#include
@@ -23,10 +24,10 @@ class CBaseStreamStringifier
*/
friend QDebug operator<<(QDebug debug, const CBaseStreamStringifier &uc)
{
- const CBaseStreamStringifier &sf = uc; // allows to access protected method
- debug << sf.stringForStreaming();
+ debug << uc.stringForStreaming();
return debug;
}
+
// msvc2010: friend QDebug &operator<<(QDebug &debug, const CBaseStreamStringifier &uc)
// MinGW: No reference
@@ -38,8 +39,7 @@ class CBaseStreamStringifier
*/
friend QTextStream &operator<<(QTextStream &textStream, const CBaseStreamStringifier &uc)
{
- const CBaseStreamStringifier &sf = uc; // allows to acces protected method
- textStream << sf.stringForStreaming();
+ textStream << uc.stringForStreaming();
return textStream;
}
@@ -62,8 +62,7 @@ class CBaseStreamStringifier
*/
friend QDataStream &operator<<(QDataStream &stream, const CBaseStreamStringifier &uc)
{
- const CBaseStreamStringifier &sf = uc; // allows to acces protected method
- stream << sf.stringForStreaming();
+ stream << uc.stringForStreaming();
return stream;
}
@@ -75,8 +74,7 @@ class CBaseStreamStringifier
*/
friend CLogMessage operator<<(CLogMessage log, const CBaseStreamStringifier &uc)
{
- const CBaseStreamStringifier &sf = uc; // allows to acces protected method
- log << sf.stringForStreaming();
+ log << uc.stringForStreaming();
return log;
}
@@ -88,12 +86,39 @@ class CBaseStreamStringifier
*/
friend std::ostream &operator<<(std::ostream &ostr, const CBaseStreamStringifier &uc)
{
- const CBaseStreamStringifier &sf = uc; // allows to acces protected method
- ostr << sf.stringForStreaming().toStdString();
+ ostr << uc.stringForStreaming().toStdString();
return ostr;
}
+ /*!
+ * \brief Unmarshalling operator >>, DBus to object
+ * \param argument
+ * \param uc
+ * \return
+ */
+ friend const QDBusArgument &operator>>(const QDBusArgument &argument, CBaseStreamStringifier &uc) {
+ argument.beginStructure();
+ uc.unmarshallFromDbus(argument);
+ argument.endStructure();
+ return argument;
+ }
+
+ /*!
+ * \brief Marshalling operator <<, object to DBus
+ * \param argument
+ * \param pq
+ * \return
+ */
+ friend QDBusArgument &operator<<(QDBusArgument &argument, const CBaseStreamStringifier &uc)
+ {
+ argument.beginStructure();
+ uc.marshallToDbus(argument);
+ argument.endStructure();
+ return argument;
+ }
+
public:
+
/*!
* \brief Virtual destructor
*/
@@ -109,6 +134,10 @@ public:
}
protected:
+ /*!
+ * \brief Default constructor
+ */
+ CBaseStreamStringifier() {}
/*!
* \brief String for streaming operators
@@ -126,6 +155,18 @@ protected:
*/
virtual QString stringForConverter() const = 0;
+ /*!
+ * \brief Stream to DBus
+ * \param argument
+ */
+ virtual void marshallToDbus(QDBusArgument &) const { }
+
+ /*!
+ * \brief Stream from DBus
+ * \param argument
+ */
+ virtual void unmarshallFromDbus(const QDBusArgument &) {}
+
/*!
* \brief Copy assignment operator.
* This is protected in order to forbid slicing an instance of one derived
diff --git a/src/blackmisc/blackmiscfreefunctions.cpp b/src/blackmisc/blackmiscfreefunctions.cpp
index 7634b2843..51316b601 100644
--- a/src/blackmisc/blackmiscfreefunctions.cpp
+++ b/src/blackmisc/blackmiscfreefunctions.cpp
@@ -29,8 +29,9 @@ void BlackMisc::PhysicalQuantities::registerMetadata()
void BlackMisc::Aviation::registerMetadata()
{
CComSystem::registerMetadata();
- CAdfSystem::registerMetadata();
CNavSystem::registerMetadata();
+ CAdfSystem::registerMetadata();
+ CAltitude::registerMetadata();
}
/*
diff --git a/src/blackmisc/pqbase.h b/src/blackmisc/pqbase.h
index 3c0dc5451..b0d37129b 100644
--- a/src/blackmisc/pqbase.h
+++ b/src/blackmisc/pqbase.h
@@ -50,6 +50,24 @@ protected:
return this->m_name;
}
+ /*!
+ * \brief Stream to DBus
+ * \param argument
+ */
+ virtual void marshallToDbus(QDBusArgument &argument) const {
+ argument << this->m_name;
+ }
+
+ /*!
+ * \brief Stream from DBus
+ * \param argument
+ */
+ virtual void unmarshallFromDbus(const QDBusArgument &argument) {
+ QString name;
+ argument >> name;
+ (*this) = CMeasurementPrefix::fromPrefixName(name);
+ }
+
public:
/*!
* \brief Copy constructor
@@ -224,6 +242,40 @@ public:
return milli;
}
+
+ /*!
+ * \brief All prefixes
+ * \return
+ */
+ static const QList &prefixes()
+ {
+ static QList prefixes;
+ prefixes.append(CMeasurementPrefix::c());
+ prefixes.append(CMeasurementPrefix::G());
+ prefixes.append(CMeasurementPrefix::h());
+ prefixes.append(CMeasurementPrefix::k());
+ prefixes.append(CMeasurementPrefix::M());
+ prefixes.append(CMeasurementPrefix::m());
+ prefixes.append(CMeasurementPrefix::None());
+ prefixes.append(CMeasurementPrefix::One());
+ return prefixes;
+ }
+
+ /*!
+ * \brief Prefix from name
+ * \param prefixName must be valid!
+ * \return
+ */
+ static const CMeasurementPrefix &fromPrefixName(const QString &prefixName) {
+ QList prefixes = CMeasurementPrefix::prefixes();
+ // read only, avoid deep copy
+ for (int i = 0; i < prefixes.size(); ++i) {
+ if (prefixes.at(i).getName() == prefixName) return (prefixes.at(i));
+ }
+ qFatal("Illegal unit name");
+ return CMeasurementPrefix::None(); // just suppress "not all control paths return a value"
+ }
+
};
// ---------------------------------------------------------------------------------
@@ -243,16 +295,11 @@ protected:
typedef double(*UnitConverter)(const CMeasurementUnit &, double);
/*!
- * \brief Get unit from DBus argument
+ * \brief Stream to DBus
* \param argument
- * \return
*/
- static QString unitNameUnmarshalling(const QDBusArgument &argument) {
- QString type;
- argument.beginStructure();
- argument >> type;
- argument.endStructure();
- return type;
+ virtual void marshallToDbus(QDBusArgument &argument) const {
+ argument << this->m_unitName;
}
private:
@@ -520,21 +567,6 @@ 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
// --------------------------------------------------------------------
diff --git a/src/blackmisc/pqphysicalquantity.h b/src/blackmisc/pqphysicalquantity.h
index 9d9701a86..97619de01 100644
--- a/src/blackmisc/pqphysicalquantity.h
+++ b/src/blackmisc/pqphysicalquantity.h
@@ -422,40 +422,29 @@ public:
}
/*!
- * \brief Unmarshalling operator >>, DBus to object
+ * \brief Stream to DBus <<
* \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;
+ virtual void marshallToDbus(QDBusArgument &argument) const {
+ argument << this->m_unitValueD;
+ argument << this->m_unitValueI;
+ argument << this->m_convertedSiUnitValueD;
+ argument << this->m_isIntegerBaseValue;
+ argument << this->m_unit;
+ argument << this->m_conversionSiUnit;
}
/*!
- * \brief Marshalling operator <<, object to DBus
+ * \brief Stream from 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;
+ virtual void unmarshallFromDbus(const QDBusArgument &argument) {
+ argument >> this->m_unitValueD;
+ argument >> this->m_unitValueI;
+ argument >> this->m_convertedSiUnitValueD;
+ argument >> this->m_isIntegerBaseValue;
+ argument >> this->m_unit;
+ argument >> this->m_conversionSiUnit;
}
/*!
diff --git a/src/blackmisc/pqunits.h b/src/blackmisc/pqunits.h
index 774bf5ebb..285d02042 100644
--- a/src/blackmisc/pqunits.h
+++ b/src/blackmisc/pqunits.h
@@ -160,16 +160,15 @@ public:
return CLengthUnit::m(); // just suppress "not all control paths return a value"
}
+protected:
/*!
- * \brief Unmarshalling operator >>, map back to concrete static object
+ * \brief Stream from DBus
* \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;
+ virtual void unmarshallFromDbus(const QDBusArgument &argument) {
+ QString unitName;
+ argument >> unitName;
+ (*this) = CLengthUnit::fromUnitName(unitName);
}
};
Q_DECLARE_METATYPE(BlackMisc::PhysicalQuantities::CLengthUnit)
@@ -289,16 +288,15 @@ public:
return CAngleUnit::rad(); // just suppress "not all control paths return a value"
}
+protected:
/*!
- * \brief Unmarshalling operator >>, map back to concrete static object
+ * \brief Stream from DBus
* \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;
+ virtual void unmarshallFromDbus(const QDBusArgument &argument) {
+ QString unitName;
+ argument >> unitName;
+ (*this) = CAngleUnit::fromUnitName(unitName);
}
};
Q_DECLARE_METATYPE(BlackMisc::PhysicalQuantities::CAngleUnit)
@@ -406,16 +404,15 @@ public:
return CFrequencyUnit::Hz(); // just suppress "not all control paths return a value"
}
+protected:
/*!
- * \brief Unmarshalling operator >>, map back to concrete static object
+ * \brief Stream from DBus
* \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;
+ virtual void unmarshallFromDbus(const QDBusArgument &argument) {
+ QString unitName;
+ argument >> unitName;
+ (*this) = CFrequencyUnit::fromUnitName(unitName);
}
};
Q_DECLARE_METATYPE(BlackMisc::PhysicalQuantities::CFrequencyUnit)
@@ -523,16 +520,15 @@ public:
return CMassUnit::kg(); // just suppress "not all control paths return a value"
}
+protected:
/*!
- * \brief Unmarshalling operator >>, map back to concrete static object
+ * \brief Stream from DBus
* \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;
+ virtual void unmarshallFromDbus(const QDBusArgument &argument) {
+ QString unitName;
+ argument >> unitName;
+ (*this) = CMassUnit::fromUnitName(unitName);
}
};
@@ -673,16 +669,15 @@ public:
return CPressureUnit::Pa(); // just suppress "not all control paths return a value"
}
+protected:
/*!
- * \brief Unmarshalling operator >>, map back to concrete static object
+ * \brief Stream from DBus
* \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;
+ virtual void unmarshallFromDbus(const QDBusArgument &argument) {
+ QString unitName;
+ argument >> unitName;
+ (*this) = CPressureUnit::fromUnitName(unitName);
}
};
Q_DECLARE_METATYPE(BlackMisc::PhysicalQuantities::CPressureUnit)
@@ -805,16 +800,15 @@ public:
return CTemperatureUnit::K(); // just suppress "not all control paths return a value"
}
+protected:
/*!
- * \brief Unmarshalling operator >>, map back to concrete static object
+ * \brief Stream from DBus
* \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;
+ virtual void unmarshallFromDbus(const QDBusArgument &argument) {
+ QString unitName;
+ argument >> unitName;
+ (*this) = CTemperatureUnit::fromUnitName(unitName);
}
};
Q_DECLARE_METATYPE(BlackMisc::PhysicalQuantities::CTemperatureUnit)
@@ -942,16 +936,15 @@ public:
return CSpeedUnit::m_s(); // just suppress "not all control paths return a value"
}
+protected:
/*!
- * \brief Unmarshalling operator >>, map back to concrete static object
+ * \brief Stream from DBus
* \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;
+ virtual void unmarshallFromDbus(const QDBusArgument &argument) {
+ QString unitName;
+ argument >> unitName;
+ (*this) = CSpeedUnit::fromUnitName(unitName);
}
};
Q_DECLARE_METATYPE(BlackMisc::PhysicalQuantities::CSpeedUnit)
@@ -1068,16 +1061,15 @@ public:
return CTimeUnit::s(); // just suppress "not all control paths return a value"
}
+protected:
/*!
- * \brief Unmarshalling operator >>, map back to concrete static object
+ * \brief Stream from DBus
* \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;
+ virtual void unmarshallFromDbus(const QDBusArgument &argument) {
+ QString unitName;
+ argument >> unitName;
+ (*this) = CTimeUnit::fromUnitName(unitName);
}
};
Q_DECLARE_METATYPE(BlackMisc::PhysicalQuantities::CTimeUnit)
@@ -1161,16 +1153,15 @@ public:
return CAccelerationUnit::m_s2(); // just suppress "not all control paths return a value"
}
+protected:
/*!
- * \brief Unmarshalling operator >>, map back to concrete static object
+ * \brief Stream from DBus
* \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;
+ virtual void unmarshallFromDbus(const QDBusArgument &argument) {
+ QString unitName;
+ argument >> unitName;
+ (*this) = CAccelerationUnit::fromUnitName(unitName);
}
};
Q_DECLARE_METATYPE(BlackMisc::PhysicalQuantities::CAccelerationUnit)