00001 00027 #ifndef COMPASS_H 00028 #define COMPASS_H 00029 00030 #include <QDBusArgument> 00031 00032 #include <datatypes/orientationdata.h> 00033 00037 class Compass : public QObject 00038 { 00039 public: 00040 Q_OBJECT 00041 00042 Q_PROPERTY(int degrees READ degrees) 00043 Q_PROPERTY(int level READ level) 00044 00045 public: 00046 00050 Compass() {} 00051 00058 Compass(const CompassData& data, bool declinationCorrection = true); 00059 00065 Compass(const Compass& data); 00066 00073 Compass(const Compass& data, bool declinationCorrection); 00074 00079 const CompassData& data() const { return data_; } 00080 00085 int degrees() const { return data_.degrees_; } 00086 00091 int level() const { return data_.level_; } 00092 00098 Compass& operator=(const Compass& origin) 00099 { 00100 data_ = origin.data(); 00101 return *this; 00102 } 00103 00110 bool operator==(const Compass& right) const 00111 { 00112 CompassData rdata = right.data(); 00113 return (data_.degrees_ == rdata.degrees_ && 00114 data_.level_ == rdata.level_ && 00115 data_.timestamp_ == rdata.timestamp_); 00116 } 00117 00118 private: 00119 CompassData data_; 00120 00121 friend const QDBusArgument &operator>>(const QDBusArgument &argument, Compass& data); 00122 }; 00123 00124 Q_DECLARE_METATYPE( Compass ) 00125 00126 00133 inline QDBusArgument &operator<<(QDBusArgument &argument, const Compass &data) 00134 { 00135 argument.beginStructure(); 00136 argument << data.data().timestamp_ << data.data().degrees_ << data.data().rawDegrees_ << data.data().correctedDegrees_ << data.data().level_; 00137 argument.endStructure(); 00138 return argument; 00139 } 00140 00148 inline const QDBusArgument &operator>>(const QDBusArgument &argument, Compass &data) 00149 { 00150 argument.beginStructure(); 00151 argument >> data.data_.timestamp_ >> data.data_.degrees_ >> data.data_.rawDegrees_ >> data.data_.correctedDegrees_ >> data.data_.level_; 00152 argument.endStructure(); 00153 return argument; 00154 } 00155 00156 #endif // COMPASS_H