diff --git a/src/blackgui/selcalcodeselector.cpp b/src/blackgui/selcalcodeselector.cpp new file mode 100644 index 000000000..7f88c4d27 --- /dev/null +++ b/src/blackgui/selcalcodeselector.cpp @@ -0,0 +1,61 @@ +#include "selcalcodeselector.h" +#include "ui_selcalcodeselector.h" +#include "blackmisc/avselcal.h" + +namespace BlackGui +{ + CSelcalCodeSelector::CSelcalCodeSelector(QWidget *parent) : + QFrame(parent), ui(new Ui::CSelcalCodeSelector) + { + this->ui->setupUi(this); + this->resetSelcalCodes(false); + + bool c; + c = connect(this->ui->cb_SelcalPairs1, SIGNAL(currentIndexChanged(int)), this, SIGNAL(valueChanged())); + Q_ASSERT(c); + c = connect(this->ui->cb_SelcalPairs2, SIGNAL(currentIndexChanged(int)), this, SIGNAL(valueChanged())); + Q_ASSERT(c); + } + + CSelcalCodeSelector::~CSelcalCodeSelector() + { + delete ui; + } + + QString CSelcalCodeSelector::getSelcalCode() const + { + QString selcal = this->ui->cb_SelcalPairs1->currentText(); + selcal.append(this->ui->cb_SelcalPairs2->currentText()); + return selcal; + } + + void CSelcalCodeSelector::resetSelcalCodes(bool allowEmptyValue) + { + this->ui->cb_SelcalPairs1->clear(); + if (allowEmptyValue) this->ui->cb_SelcalPairs1->addItem(" "); + this->ui->cb_SelcalPairs1->addItems(BlackMisc::Aviation::CSelcal::codePairs()); + this->ui->cb_SelcalPairs2->clear(); + if (allowEmptyValue) this->ui->cb_SelcalPairs2->addItem(" "); + this->ui->cb_SelcalPairs2->addItems(BlackMisc::Aviation::CSelcal::codePairs()); + } + + void CSelcalCodeSelector::setSelcalCode(const QString &selcal) + { + QString s = selcal.isEmpty() ? " " : selcal.toUpper().trimmed(); + Q_ASSERT(s.length() == 4); + if (s.length() != 4) return; + QString s1 = s.left(2); + QString s2 = s.right(2); + if (BlackMisc::Aviation::CSelcal::codePairs().contains(s1)) + this->ui->cb_SelcalPairs1->setCurrentText(s1); + if (BlackMisc::Aviation::CSelcal::codePairs().contains(s2)) + this->ui->cb_SelcalPairs1->setCurrentText(s2); + } + + bool CSelcalCodeSelector::hasValidCode() const + { + QString s = this->getSelcalCode(); + if (s.length() != 4) return false; + return BlackMisc::Aviation::CSelcal::isValidCode(s); + } +} diff --git a/src/blackgui/selcalcodeselector.h b/src/blackgui/selcalcodeselector.h new file mode 100644 index 000000000..ee8fd9237 --- /dev/null +++ b/src/blackgui/selcalcodeselector.h @@ -0,0 +1,45 @@ +#ifndef BLACKGUI_SELCALCODESELECTOR_H +#define BLACKGUI_SELCALCODESELECTOR_H + +#include + +namespace Ui { class CSelcalCodeSelector; } +namespace BlackGui +{ + + /*! + * \brief SELCAL mode selector + */ + class CSelcalCodeSelector : public QFrame + { + Q_OBJECT + + public: + //! Constructor + explicit CSelcalCodeSelector(QWidget *parent = nullptr); + + //! Destructor + ~CSelcalCodeSelector(); + + //! SELCAL code + QString getSelcalCode() const; + + //! Reset the SELCAL code + void resetSelcalCodes(bool allowEmptyValue = false); + + //! Set the SELCAL code + void setSelcalCode(const QString &selcal); + + //! Valid code? + bool hasValidCode() const; + + signals: + //! Value has been changed + void valueChanged(); + + private: + Ui::CSelcalCodeSelector *ui; + }; +} + +#endif // guard diff --git a/src/blackgui/selcalcodeselector.ui b/src/blackgui/selcalcodeselector.ui new file mode 100644 index 000000000..281a5afc5 --- /dev/null +++ b/src/blackgui/selcalcodeselector.ui @@ -0,0 +1,48 @@ + + + CSelcalCodeSelector + + + + 0 + 0 + 143 + 22 + + + + Frame + + + QFrame::StyledPanel + + + QFrame::Raised + + + + 3 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + + + + + + +