diff --git a/src/blackmisc/aviomodulator.h b/src/blackmisc/aviomodulator.h index 86419639c..a720320e5 100644 --- a/src/blackmisc/aviomodulator.h +++ b/src/blackmisc/aviomodulator.h @@ -29,8 +29,8 @@ template class CModulator : public CAvionicsBase 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 + // Once someone solves this, this methods should go and the + // CBaseStreamStringifier signature should be used CBaseStreamStringifier &sf = uc; return argument >> sf; } diff --git a/src/blackmisc/avverticalpositions.h b/src/blackmisc/avverticalpositions.h index 167739a57..1d67e64ac 100644 --- a/src/blackmisc/avverticalpositions.h +++ b/src/blackmisc/avverticalpositions.h @@ -37,7 +37,7 @@ class CAviationVerticalPositions friend CLogMessage operator<<(CLogMessage log, const CAviationVerticalPositions &positions); private: - CAltitude m_altitude; //!< altitude + BlackMisc::Aviation::CAltitude m_altitude; //!< altitude BlackMisc::PhysicalQuantities::CLength m_elevation; //!< elevation BlackMisc::PhysicalQuantities::CLength m_height; //!< height diff --git a/src/blackmisc/blackmiscfreefunctions.cpp b/src/blackmisc/blackmiscfreefunctions.cpp index e15b7eb22..33649d118 100644 --- a/src/blackmisc/blackmiscfreefunctions.cpp +++ b/src/blackmisc/blackmiscfreefunctions.cpp @@ -36,16 +36,29 @@ void BlackMisc::Aviation::registerMetadata() /* - * Metadata for math + * Metadata for Math */ void BlackMisc::Math::registerMetadata() { CMatrix3x3::registerMetadata(); CMatrix3x1::registerMetadata(); CMatrix1x3::registerMetadata(); + CVector3D::registerMetadata(); } +/* + * Metadata for Geo + */ +void BlackMisc::Geo::registerMetadata() +{ + CCoordinateEcef::registerMetadata(); + CCoordinateNed::registerMetadata(); + CCoordinateGeodetic::registerMetadata(); + CLatitude::registerMetadata(); + CLongitude::registerMetadata(); +} + /* * Metadata for Blackmisc */ @@ -54,4 +67,5 @@ void BlackMisc::registerMetadata() PhysicalQuantities::registerMetadata(); Aviation::registerMetadata(); Math::registerMetadata(); + Geo::registerMetadata(); } diff --git a/src/blackmisc/blackmiscfreefunctions.h b/src/blackmisc/blackmiscfreefunctions.h index 8309a12a3..15097647f 100644 --- a/src/blackmisc/blackmiscfreefunctions.h +++ b/src/blackmisc/blackmiscfreefunctions.h @@ -8,6 +8,7 @@ #include "avallclasses.h" #include "pqallquantities.h" #include "mathallclasses.h" +#include "geoallclasses.h" namespace BlackMisc { @@ -42,7 +43,18 @@ namespace Math { */ void registerMetadata(); -} +} // Math + +namespace Geo { + +/*! + * \brief Register metadata for geo (coordinates) + */ +void registerMetadata(); + +} // Geo + + /*! * \brief Register all relevant metadata in BlackMisc diff --git a/src/blackmisc/coordinateecef.h b/src/blackmisc/coordinateecef.h index ac9d27a52..0e21b8e20 100644 --- a/src/blackmisc/coordinateecef.h +++ b/src/blackmisc/coordinateecef.h @@ -117,6 +117,6 @@ protected: } // namespace } // namespace - +Q_DECLARE_METATYPE(BlackMisc::Geo::CCoordinateEcef) #endif // guard diff --git a/src/blackmisc/coordinategeodetic.h b/src/blackmisc/coordinategeodetic.h index 0e68b021a..2ef42cfbc 100644 --- a/src/blackmisc/coordinategeodetic.h +++ b/src/blackmisc/coordinategeodetic.h @@ -37,14 +37,12 @@ class ICoordinateGeodetic /*! * \brief Geodetic coordinate */ -class CCoordinateGeodetic : - public CBaseStreamStringifier, - public ICoordinateGeodetic +class CCoordinateGeodetic : public CBaseStreamStringifier, public ICoordinateGeodetic { private: - CLatitude m_latitude; //!< Latitude - CLongitude m_longitude; //!< Longitude + BlackMisc::Geo::CLatitude m_latitude; //!< Latitude + BlackMisc::Geo::CLongitude m_longitude; //!< Longitude BlackMisc::PhysicalQuantities::CLength m_height; //!< height protected: @@ -58,6 +56,25 @@ protected: QString s = "Geodetic: {%1, %2, %3}"; return s.arg(this->m_latitude.unitValueRoundedWithUnit(6)).arg(this->m_longitude.unitValueRoundedWithUnit(6)).arg(this->m_height.unitValueRoundedWithUnit()); } + /*! + * \brief Stream to DBus + * \param argument + */ + virtual void marshallToDbus(QDBusArgument &argument) const { + argument << this->m_latitude; + argument << this->m_longitude; + argument << this->m_height; + } + + /*! + * \brief Stream from DBus + * \param argument + */ + virtual void unmarshallFromDbus(const QDBusArgument &argument) { + argument >> this->m_latitude; + argument >> this->m_longitude; + argument >> this->m_height; + } public: /*! @@ -203,10 +220,16 @@ public: this->m_longitude = otherGeodetic.m_longitude; return (*this); } + + /* + * Register metadata + */ + static void registerMetadata(); + }; } // namespace } // namespace - +Q_DECLARE_METATYPE(BlackMisc::Geo::CCoordinateGeodetic) #endif // guard diff --git a/src/blackmisc/coordinatened.h b/src/blackmisc/coordinatened.h index d1677c795..c620aa83c 100644 --- a/src/blackmisc/coordinatened.h +++ b/src/blackmisc/coordinatened.h @@ -218,6 +218,6 @@ public: } // namespace } // namespace - +Q_DECLARE_METATYPE(BlackMisc::Geo::CCoordinateNed) #endif // guard diff --git a/src/blackmisc/geoearthangle.h b/src/blackmisc/geoearthangle.h index 1c33b8c53..c211462d9 100644 --- a/src/blackmisc/geoearthangle.h +++ b/src/blackmisc/geoearthangle.h @@ -16,6 +16,33 @@ namespace Geo */ template class CEarthAngle : public BlackMisc::PhysicalQuantities::CAngle { + /*! + * \brief Unmarshalling operator >>, DBus to object + * \param argument + * \param uc + * \return + */ + friend const QDBusArgument &operator>>(const QDBusArgument &argument, LATorLON &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 LATorLON &uc) + { + const CBaseStreamStringifier &sf = uc; + return argument << sf; + } + protected: /*! * \brief Default constructor @@ -44,8 +71,23 @@ protected: return this->unitValueRoundedWithUnit(6); } -public: + /*! + * \brief Stream to DBus << + * \param argument + */ + virtual void marshallToDbus(QDBusArgument &argument) const { + CAngle::marshallToDbus(argument); + } + /*! + * \brief Stream from DBus >> + * \param argument + */ + virtual void unmarshallFromDbus(const QDBusArgument &argument) { + CAngle::unmarshallFromDbus(argument); + } + +public: /*! * \brief Virtual destructor */ @@ -169,6 +211,15 @@ public: l -= latOrLon; return l; } + + /* + * Register metadata + */ + static void registerMetadata() + { + qRegisterMetaType(typeid(LATorLON).name()); + qDBusRegisterMetaType(); + } }; } // namespace diff --git a/src/blackmisc/geolatitude.h b/src/blackmisc/geolatitude.h index 1f0d18d19..3ce1e9a4e 100644 --- a/src/blackmisc/geolatitude.h +++ b/src/blackmisc/geolatitude.h @@ -50,5 +50,6 @@ public: } // namespace } // namespace +Q_DECLARE_METATYPE(BlackMisc::Geo::CLatitude) #endif // guard diff --git a/src/blackmisc/geolongitude.h b/src/blackmisc/geolongitude.h index 1d47a9180..2bd89192a 100644 --- a/src/blackmisc/geolongitude.h +++ b/src/blackmisc/geolongitude.h @@ -50,4 +50,6 @@ public: } // namespace } // namespace +Q_DECLARE_METATYPE(BlackMisc::Geo::CLongitude) + #endif // guard diff --git a/src/blackmisc/mathvector3d.h b/src/blackmisc/mathvector3d.h index 116c7f806..26a03cd37 100644 --- a/src/blackmisc/mathvector3d.h +++ b/src/blackmisc/mathvector3d.h @@ -97,4 +97,6 @@ public: } // namespace } // namespace +Q_DECLARE_METATYPE(BlackMisc::Math::CVector3D) + #endif // guard diff --git a/src/blackmisc/mathvector3dbase.cpp b/src/blackmisc/mathvector3dbase.cpp index 7d8c83bc0..241e88fb6 100644 --- a/src/blackmisc/mathvector3dbase.cpp +++ b/src/blackmisc/mathvector3dbase.cpp @@ -20,8 +20,8 @@ template QString CVector3DBase::stringForConverte { QString s = ("{%1, %2, %3}"); s = s.arg(QString::number(this->m_i, 'f')). - arg(QString::number(this->m_j, 'f')). - arg(QString::number(this->m_k, 'f')); + arg(QString::number(this->m_j, 'f')). + arg(QString::number(this->m_k, 'f')); return s; } @@ -131,6 +131,36 @@ template CMatrix3x1 CVector3DBase::toMatrix3x1() return CMatrix3x1(this->m_i, this->m_j, this->m_k); } + +/*! + * \brief Stream to DBus + * \param argument + */ +template void CVector3DBase::marshallToDbus(QDBusArgument &argument) const { + argument << this->m_i; + argument << this->m_j; + argument << this->m_k; +} + +/*! + * \brief Stream from DBus + * \param argument + */ +template void CVector3DBase::unmarshallFromDbus(const QDBusArgument &argument) { + argument >> this->m_i; + argument >> this->m_j; + argument >> this->m_k; +} + +/* + * Register metadata + */ +template void CVector3DBase::registerMetadata() +{ + qRegisterMetaType(typeid(ImplVector).name()); + qDBusRegisterMetaType(); +} + // see here for the reason of thess forward instantiations // http://www.parashift.com/c++-faq/separate-template-class-defn-from-decl.html template class CVector3DBase; diff --git a/src/blackmisc/mathvector3dbase.h b/src/blackmisc/mathvector3dbase.h index 48ea18b38..b772bbdeb 100644 --- a/src/blackmisc/mathvector3dbase.h +++ b/src/blackmisc/mathvector3dbase.h @@ -24,6 +24,33 @@ class CMatrix3x1; // forward declaration template class CVector3DBase : public CBaseStreamStringifier { + /*! + * \brief Unmarshalling operator >>, DBus to object + * \param argument + * \param uc + * \return + */ + friend const QDBusArgument &operator>>(const QDBusArgument &argument, ImplVector &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 ImplVector &uc) + { + const CBaseStreamStringifier &sf = uc; + return argument << sf; + } + private: /*! * \brief Easy access to derived class (CRTP template parameter) @@ -81,6 +108,18 @@ protected: */ virtual QString stringForConverter() const; + /*! + * \brief Unmarshall from Dbus + * \param argument + */ + virtual void unmarshallFromDbus(const QDBusArgument &argument); + + /*! + * \brief Marshall to Dbus + * \param argument + */ + virtual void marshallToDbus(QDBusArgument &argument) const; + public: // getter and setters are implemented in the derived classes @@ -416,6 +455,11 @@ public: v.round(); return v; } + + /*! + * \brief Register metadata + */ + static void registerMetadata(); }; } // namespace diff --git a/src/blackmisc/pqphysicalquantity.h b/src/blackmisc/pqphysicalquantity.h index 97619de01..4fb3eb4bb 100644 --- a/src/blackmisc/pqphysicalquantity.h +++ b/src/blackmisc/pqphysicalquantity.h @@ -271,7 +271,7 @@ public: void addUnitValue(double value); /*! - * \brief Substratc to the unit value. + * \brief Substract to the unit value. * \remarks Since overloading the - operator with double did lead to unintended conversions, as explicit method * \param value */