From bf0a849a7c9bf7c7cf7d6617de183b12cdaff38f Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Fri, 20 Dec 2013 22:49:23 +0000 Subject: [PATCH] CTransponder: setting code as string and refactored validation refs #81 --- src/blackmisc/aviotransponder.cpp | 54 +++++++++++++++++++++++-------- src/blackmisc/aviotransponder.h | 23 ++++++++++++- 2 files changed, 63 insertions(+), 14 deletions(-) diff --git a/src/blackmisc/aviotransponder.cpp b/src/blackmisc/aviotransponder.cpp index 9bdffde55..fd9e263f1 100644 --- a/src/blackmisc/aviotransponder.cpp +++ b/src/blackmisc/aviotransponder.cpp @@ -17,18 +17,7 @@ namespace BlackMisc bool CTransponder::validValues() const { if (this->isDefaultValue()) return true; // special case - if (this->m_transponderCode < 0 || this->m_transponderCode > 7777) return false; - - // check each digit - qint32 tc = this->m_transponderCode; - qint32 d; - while (tc > 7) - { - d = (tc % 10); - if (d > 7) return false; - tc /= 10; - } - return true; + return CTransponder::isValidTransponderCode(this->m_transponderCode); } /* @@ -60,7 +49,7 @@ namespace BlackMisc QString CTransponder::getModeAsString() const { QString m; - switch (this->m_transponderMode) + switch (this->getTransponderMode()) { case StateIdent: m = "Ident"; @@ -115,6 +104,45 @@ namespace BlackMisc return s; } + /* + * Transponder by string + */ + void CTransponder::setTransponderCode(const QString &transponderCode) + { + if (CTransponder::isValidTransponderCode(transponderCode)) + { + bool ok; + this->setTransponderCode(transponderCode.toInt(&ok)); + } + else + { + Q_ASSERT_X(false, "CTransponder::setTransponderCode", "illegal transponder value"); + } + } + + /* + * Valid code? + */ + bool CTransponder::isValidTransponderCode(const QString &transponderCode) + { + if (transponderCode.isEmpty() || transponderCode.length() > 4) return false; + bool number; + qint32 tc = transponderCode.toInt(&number); + if (!number) return false; + if (tc < 0 || tc > 7777) return false; + QRegExp rx("[0-7]{1,4}"); + return rx.exactMatch(transponderCode); + } + + /* + * Valid code? + */ + bool CTransponder::isValidTransponderCode(qint32 transponderCode) + { + if (transponderCode < 0 || transponderCode > 7777) return false; + return CTransponder::isValidTransponderCode(QString::number(transponderCode)); + } + /* * Stream to DBus << */ diff --git a/src/blackmisc/aviotransponder.h b/src/blackmisc/aviotransponder.h index 1500562ae..ef66f4a02 100644 --- a/src/blackmisc/aviotransponder.h +++ b/src/blackmisc/aviotransponder.h @@ -205,6 +205,13 @@ namespace BlackMisc this->validate(true); } + /*! + * \brief Set transponder code + * \param transponderCode + */ + void setTransponderCode(const QString &transponderCode); + + /*! * \brief Set transponder mode * \param mode @@ -248,7 +255,7 @@ namespace BlackMisc { return this->m_transponderCode == other.m_transponderCode && - this->m_transponderMode == other.m_transponderMode && + this->getTransponderMode() == other.getTransponderMode() && this->CAvionicsBase::operator ==(other); } @@ -337,6 +344,20 @@ namespace BlackMisc */ virtual uint getValueHash() const; + /*! + * \brief Is valid transponder code? + * \param transponderCode + * \return + */ + static bool isValidTransponderCode(const QString &transponderCode); + + /*! + * \brief Is valid transponder code? + * \param transponderCode + * \return + */ + static bool isValidTransponderCode(qint32 transponderMode); + /*! * \brief Register metadata of unit and quantity */