diff --git a/logbook/adif.cpp b/logbook/adif.cpp index ba46ef5..f780675 100644 --- a/logbook/adif.cpp +++ b/logbook/adif.cpp @@ -5,6 +5,164 @@ #include #include +const QStringList ADIF_FIELDS = { + // ADIF 3.1.0 - pulled from http://www.adif.org/310/adx310.xsd on 2019-06-04 + "USERDEF", + "APP", + "ADDRESS", + "ADDRESS_INTL", + "AGE", + "A_INDEX", + "ANT_AZ", + "ANT_EL", + "ANT_PATH", + "ARRL_SECT", + "AWARD_SUBMITTED", + "AWARD_GRANTED", + "BAND", + "BAND_RX", + "CALL", + "CHECK", + "CLASS", + "CLUBLOG_QSO_UPLOAD_DATE", + "CLUBLOG_QSO_UPLOAD_STATUS", + "CNTY", + "COMMENT", + "COMMENT_INTL", + "CONT", + "CONTACTED_OP", + "CONTEST_ID", + "COUNTRY", + "COUNTRY_INTL", + "CQZ", + "CREDIT_SUBMITTED", + "CREDIT_GRANTED", + "DARC_DOK", + "DISTANCE", + "DXCC", + "EMAIL", + "EQ_CALL", + "EQSL_QSLRDATE", + "EQSL_QSLSDATE", + "EQSL_QSL_RCVD", + "EQSL_QSL_SENT", + "FISTS", + "FISTS_CC", + "FORCE_INIT", + "FREQ", + "FREQ_RX", + "GRIDSQUARE", + "GUEST_OP", + "HRDLOG_QSO_UPLOAD_DATE", + "HRDLOG_QSO_UPLOAD_STATUS", + "IOTA", + "IOTA_ISLAND_ID", + "ITUZ", + "K_INDEX", + "LAT", + "LON", + "LOTW_QSLRDATE", + "LOTW_QSLSDATE", + "LOTW_QSL_RCVD", + "LOTW_QSL_SENT", + "MAX_BURSTS", + "MODE", + "MS_SHOWER", + "MY_ANTENNA", + "MY_ANTENNA_INTL", + "MY_CITY", + "MY_CITY_INTL", + "MY_CNTY", + "MY_COUNTRY", + "MY_COUNTRY_INTL", + "MY_CQ_ZONE", + "MY_DXCC", + "MY_FISTS", + "MY_GRIDSQUARE", + "MY_IOTA", + "MY_IOTA_ISLAND_ID", + "MY_ITU_ZONE", + "MY_LAT", + "MY_LON", + "MY_NAME", + "MY_NAME_INTL", + "MY_POSTAL_CODE", + "MY_POSTAL_CODE_INTL", + "MY_RIG", + "MY_RIG_INTL", + "MY_SIG", + "MY_SIG_INTL", + "MY_SIG_INFO", + "MY_SIG_INFO_INTL", + "MY_SOTA_REF", + "MY_STATE", + "MY_STREET", + "MY_STREET_INTL", + "MY_USACA_COUNTIES", + "MY_VUCC_GRIDS", + "NAME", + "NAME_INTL", + "NOTES", + "NOTES_INTL", + "NR_BURSTS", + "NR_PINGS", + "OPERATOR", + "OWNER_CALLSIGN", + "PFX", + "PRECEDENCE", + "PROP_MODE", + "PUBLIC_KEY", + "QRZCOM_QSO_UPLOAD_DATE", + "QRZCOM_QSO_UPLOAD_STATUS", + "QSLMSG", + "QSLMSG_INTL", + "QSLRDATE", + "QSLSDATE", + "QSL_RCVD", + "QSL_RCVD_VIA", + "QSL_SENT", + "QSL_SENT_VIA", + "QSL_VIA", + "QSO_COMPLETE", + "QSO_DATE", + "QSO_DATE_OFF", + "QSO_RANDOM", + "QTH", + "QTH_INTL", + "REGION", + "RIG", + "RIG_INTL", + "RST_RCVD", + "RST_SENT", + "RX_PWR", + "SAT_MODE", + "SAT_NAME", + "SFI", + "SIG", + "SIG_INTL", + "SIG_INFO", + "SIG_INFO_INTL", + "SILENT_KEY", + "SKCC", + "SOTA_REF", + "SRX", + "SRX_STRING", + "STATE", + "STATION_CALLSIGN", + "STX", + "STX_STRING", + "SUBMODE", + "SWL", + "TEN_TEN", + "TIME_OFF", + "TIME_ON", + "TX_PWR", + "UKSMG", + "USACA_COUNTIES", + "VUCC_GRIDS", + "WEB", +}; + /* W1XT20m14.076DM33JT65-21-142011042204171204243541st JT65A QSO. Him: mag loop 20WVK3ACFqf22lb IK1SOW20m14.076JN35JT65-19-11201104220525010533593VK3ACFqf22lb diff --git a/logbook/adif.h b/logbook/adif.h index 74539e1..18eafe4 100644 --- a/logbook/adif.h +++ b/logbook/adif.h @@ -11,6 +11,7 @@ #if defined (QT5) #include #include +#include #include #else #include @@ -18,6 +19,8 @@ class QDateTime; +extern const QStringList ADIF_FIELDS; + class ADIF { public: @@ -35,18 +38,17 @@ class ADIF // open ADIF file and append the QSO details. Return true on success bool addQSOToFile(QByteArray const& ADIF_record); - QByteArray QSOToADIF(QString const& hisCall, QString const& hisGrid, QString const& mode, QString const& submode, QString const& rptSent + QByteArray QSOToADIF(QString const& hisCall, QString const& hisGrid, QString const& mode, QString const& submode, QString const& rptSent , QString const& rptRcvd, QDateTime const& dateTimeOn, QDateTime const& dateTimeOff , QString const& band, QString const& comments, QString const& name , QString const& strDialFreq, QString const& m_myCall, QString const& m_myGrid , QString const& operator_call); - - struct QSO - { - QString call,band,mode,submode,date,name,comment; - }; + struct QSO + { + QString call,band,mode,submode,date,name,comment; + }; private: QMultiHash _data; diff --git a/logqso.cpp b/logqso.cpp index ae36879..9dd09ff 100644 --- a/logqso.cpp +++ b/logqso.cpp @@ -26,7 +26,6 @@ LogQSO::LogQSO(QString const& programTitle, QSettings * settings { ui->setupUi(this); setWindowTitle(programTitle + " - Log QSO"); - loadSettings (); ui->grid->setValidator (new MaidenheadLocatorValidator {this}); } @@ -65,12 +64,61 @@ void LogQSO::on_end_now_button_pressed(){ ui->end_date_time->setDateTime(DriftingDateTime::currentDateTimeUtc()); } +void LogQSO::on_add_new_field_button_pressed(){ + createAdditionalField(); +} + +void LogQSO::createAdditionalField(QString key, QString value){ + QLineEdit * l = new QLineEdit(this); + if(!value.isEmpty()){ + l->setText(value); + } + + QComboBox * c = new QComboBox(this); + c->insertItem(0, ""); + c->insertItems(0, ADIF_FIELDS); + c->setEditable(false); + connect(c, &QComboBox::currentTextChanged, this, [this, l](const QString &text){ + l->setProperty("fieldKey", QVariant(text)); + }); + if(!key.isEmpty()){ + c->setCurrentText(key); + } + + auto layout = static_cast(ui->additionalFields->layout()); + layout->removeItem(ui->field_button_layout); + layout->addRow(c, l); + layout->addItem(ui->field_button_layout); + m_additionalFieldsControls.append(l); +} + +void LogQSO::resetAdditionalFields(){ + if(m_additionalFieldsControls.isEmpty()){ + return; + } + + auto layout = static_cast(ui->additionalFields->layout()); + layout->removeItem(ui->field_button_layout); + for(int i = 0, count = layout->rowCount(); i < count; i++){ + layout->removeRow(0); + } + layout->addItem(ui->field_button_layout); + m_additionalFieldsControls.clear(); +} + void LogQSO::loadSettings () { m_settings->beginGroup ("LogQSO"); restoreGeometry (m_settings->value ("geometry", saveGeometry ()).toByteArray ()); ui->cbComments->setChecked (m_settings->value ("SaveComments", false).toBool ()); m_comments = m_settings->value ("LogComments", "").toString(); + + resetAdditionalFields(); + auto additionalFields = QSet::fromList(m_settings->value("AdditionalFields", {}).toStringList()); + foreach(auto key, additionalFields){ + createAdditionalField(key); + } + m_settings->endGroup (); } @@ -80,6 +128,13 @@ void LogQSO::storeSettings () const m_settings->setValue ("geometry", saveGeometry ()); m_settings->setValue ("SaveComments", ui->cbComments->isChecked ()); m_settings->setValue ("LogComments", m_comments); + + auto additionalFields = QStringList{}; + foreach(auto field, m_additionalFieldsControls){ + additionalFields.append(field->property("fieldKey").toString()); + } + m_settings->setValue ("AdditionalFields", additionalFields); + m_settings->endGroup (); } @@ -90,32 +145,43 @@ void LogQSO::initLogQSO(QString const& hisCall, QString const& hisGrid, QString bool toDATA, bool dBtoComments, bool bFox, QString const& opCall, QString const& comments) { if(!isHidden()) return; + + loadSettings(); + ui->call->setFocus(); ui->call->setText(hisCall); ui->grid->setText(hisGrid); ui->name->setText(""); ui->comments->setText(""); + if (ui->cbComments->isChecked ()) ui->comments->setText(m_comments); + if(dBtoComments) { QString t=mode; if(rptSent!="") t+=" Sent: " + rptSent; if(rptRcvd!="") t+=" Rcvd: " + rptRcvd; ui->comments->setText(t); } + if(!comments.isEmpty()){ ui->comments->setText(comments); } + if(toDATA) mode="DATA"; + ui->mode->setText(mode); ui->sent->setText(rptSent); ui->rcvd->setText(rptRcvd); ui->start_date_time->setDateTime (dateTimeOn); ui->end_date_time->setDateTime (dateTimeOff); + m_dialFreq=dialFreq; m_myCall=myCall; m_myGrid=myGrid; + ui->band->setText (m_config->bands ()->find (dialFreq)); ui->loggedOperator->setText(opCall); + if(bFox) { accept(); } else { diff --git a/logqso.h b/logqso.h index c3d0348..3b6e9bc 100644 --- a/logqso.h +++ b/logqso.h @@ -51,6 +51,9 @@ protected: void hideEvent (QHideEvent *); private slots: + void createAdditionalField(QString key={}, QString value={}); + void resetAdditionalFields(); + void on_add_new_field_button_pressed(); void on_start_now_button_pressed(); void on_end_now_button_pressed(); @@ -67,6 +70,7 @@ private: QString m_myGrid; QDateTime m_dateTimeOn; QDateTime m_dateTimeOff; + QList m_additionalFieldsControls; }; #endif // LogQSO_H diff --git a/logqso.ui b/logqso.ui index 4c4bc40..2b1f3f2 100644 --- a/logqso.ui +++ b/logqso.ui @@ -42,8 +42,8 @@ 0 0 - 582 - 401 + 568 + 442 @@ -54,7 +54,7 @@ 0 - 0 + 9 0 @@ -434,7 +434,7 @@ - + true @@ -452,7 +452,7 @@ - + true @@ -465,7 +465,7 @@ - + true @@ -480,14 +480,14 @@ - + true - + Retain Comments @@ -496,6 +496,55 @@ + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Additional Fields + + + + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Add New Field + + + + + + + +