diff --git a/displaytext.cpp b/displaytext.cpp index ba53eca14..1e661a92f 100644 --- a/displaytext.cpp +++ b/displaytext.cpp @@ -178,6 +178,7 @@ QString DisplayText::appendWorkedB4(QString message, QString const& callsign, QS logBook.match(/*in*/call,grid,/*out*/countryName,callWorkedBefore,countryWorkedBefore,gridB4); logBook.match(/*in*/call,grid,/*out*/countryName,callB4onBand,countryB4onBand,gridB4onBand, /*in*/ currentBand); +// if(gridB4) qDebug() << "aa" << grid << gridB4 << gridB4onBand; message = message.trimmed (); QString appendage{""}; @@ -187,17 +188,29 @@ QString DisplayText::appendWorkedB4(QString message, QString const& callsign, QS appendage += "!"; *bg = m_color_DXCC; } else { - if (!callWorkedBefore) { - // but have worked the country - appendage += "~"; - *bg = m_color_NewCall; + if(!countryB4onBand) { + *bg = m_color_DXCCband; } else { - if(!callB4onBand) { - appendage += "~"; - *bg = m_color_NewCallBand; + if(!gridB4) { + *bg = m_color_NewGrid; } else { - appendage += " "; // have worked this call before - *bg = m_color_CQ; + if(!gridB4onBand) { + *bg = m_color_NewGridBand; + } else { + if (!callWorkedBefore) { + // but have worked the country + appendage += "~"; + *bg = m_color_NewCall; + } else { + if(!callB4onBand) { + appendage += "~"; + *bg = m_color_NewCallBand; + } else { + appendage += " "; // have worked this call before + *bg = m_color_CQ; + } + } + } } } } @@ -269,8 +282,8 @@ void DisplayText::displayDecodedText(DecodedText const& decodedText, QString con QString dxCall; QString dxGrid; decodedText.deCallAndGrid (/*out*/ dxCall, dxGrid); - QRegularExpression m_grid_regexp {"\\A(?![Rr]{2}73)[A-Ra-r]{2}[0-9]{2}([A-Xa-x]{2}){0,1}\\z"}; - if(!dxGrid.contains(m_grid_regexp)) dxGrid=""; + QRegularExpression grid_regexp {"\\A(?![Rr]{2}73)[A-Ra-r]{2}[0-9]{2}([A-Xa-x]{2}){0,1}\\z"}; + if(!dxGrid.contains(grid_regexp)) dxGrid=""; message = message.left (message.indexOf (QChar::Nbsp)); // strip appended info if (displayDXCCEntity && CQcall) // if enabled add the DXCC entity and B4 status to the end of the diff --git a/logbook/adif.cpp b/logbook/adif.cpp index e512c2868..395421931 100644 --- a/logbook/adif.cpp +++ b/logbook/adif.cpp @@ -15,6 +15,7 @@ void ADIF::init(QString const& filename) { _filename = filename; _data.clear(); + _data2.clear(); } @@ -54,7 +55,8 @@ QString ADIF::extractField(QString const& record, QString const& fieldName) cons void ADIF::load() { - _data.clear(); + _data.clear(); + _data2.clear(); QFile inputFile(_filename); if (inputFile.open(QIODevice::ReadOnly)) { @@ -98,6 +100,7 @@ void ADIF::load() buffer.remove (0, next_record >=0 ? next_record : buffer.size ()); record = record.mid (record.indexOf (QChar {'<'})); add (extractField (record, "CALL") + , extractField (record, "GRIDSQUARE") , extractField (record, "BAND") , extractField (record, "MODE") , extractField (record, "QSO_DATE")); @@ -107,24 +110,33 @@ void ADIF::load() } -void ADIF::add(QString const& call, QString const& band, QString const& mode, QString const& date) +void ADIF::add(QString const& call, QString const& grid, QString const& band, + QString const& mode, QString const& date) { - QSO q; - q.call = call; - q.band = band; - q.mode = mode; - q.date = date; - if (q.call.size ()) - { - _data.insert(q.call,q); - // qDebug() << "Added as worked:" << call << band << mode << date; - } + QSO q; + q.call = call; + q.grid = grid; + q.band = band; + q.mode = mode; + q.date = date; + if(q.call.size ()) { + _data.insert(q.call,q); + _data2.insert(q.grid,q); +// qDebug() << "In the log:" << call << grid << band << mode << date; + } } // return true if in the log same band and mode (where JT65 == JT9 == FT8) bool ADIF::match(QString const& call, QString const& band, QString const& mode) const { - QList qsos = _data.values(call); + QList qsos; + QRegularExpression grid_regexp {"\\A(?![Rr]{2}73)[A-Ra-r]{2}[0-9]{2}([A-Xa-x]{2}){0,1}\\z"}; + if(!call.contains(grid_regexp)) { + qsos = _data.values(call); + } else { + qsos = _data2.values(call); + } +// qDebug() << "AA" << call << qsos.size(); if (qsos.size()>0) { QSO q; foreach(q,qsos) { diff --git a/logbook/adif.h b/logbook/adif.h index 727ca9952..384ba4924 100644 --- a/logbook/adif.h +++ b/logbook/adif.h @@ -12,6 +12,7 @@ #include #include #include +#include #else #include #endif @@ -23,7 +24,8 @@ class ADIF public: void init(QString const& filename); void load(); - void add(QString const& call, QString const& band, QString const& mode, QString const& date); + void add(QString const& call, const QString &grid, QString const& band, QString const& mode, + QString const& date); bool match(QString const& call, QString const& band, QString const& mode) const; QList getCallList() const; int getCount() const; @@ -37,19 +39,17 @@ class ADIF , QString const& strDialFreq, QString const& m_myCall, QString const& m_myGrid , QString const& m_txPower, QString const& operator_call); - private: struct QSO { - QString call,band,mode,date; + QString call,grid,band,mode,date; }; - QMultiHash _data; - QString _filename; - + QMultiHash _data; + QMultiHash _data2; + QString _filename; QString extractField(QString const& line, QString const& fieldName) const; }; - #endif diff --git a/logbook/logbook.cpp b/logbook/logbook.cpp index 68b6663fd..7ddc867fb 100644 --- a/logbook/logbook.cpp +++ b/logbook/logbook.cpp @@ -71,13 +71,14 @@ void LogBook::match(/*in*/const QString call,QString grid, bool &gridWorkedBefore, QString currentBand) const { - if(currentBand=="") qDebug() << "aa" << grid; - if(currentBand!="") qDebug() << "bb" << grid << currentBand; +// if(currentBand=="") qDebug() << "aa" << grid; +// if(currentBand!="") qDebug() << "bb" << grid << currentBand; if (call.length() > 0) { QString currentMode = "JT9"; // JT65 == JT9 == FT8 in ADIF::match() // QString currentBand = ""; // match any band callWorkedBefore = _log.match(call,currentBand,currentMode); + gridWorkedBefore = _log.match(grid,currentBand,currentMode); countryName = _countries.find(call); if (countryName.length() > 0) { // country was found @@ -90,10 +91,11 @@ void LogBook::match(/*in*/const QString call,QString grid, } } -void LogBook::addAsWorked(const QString call, const QString band, const QString mode, const QString date) +void LogBook::addAsWorked(const QString call, const QString grid, const QString band, + const QString mode, const QString date) { //qDebug() << "adding " << call << " as worked"; - _log.add(call,band,mode,date); + _log.add(call,grid,band,mode,date); QString countryName = _countries.find(call); if (countryName.length() > 0) _worked.setAsWorked(countryName); diff --git a/logbook/logbook.h b/logbook/logbook.h index c99b0a80e..95af047aa 100644 --- a/logbook/logbook.h +++ b/logbook/logbook.h @@ -23,7 +23,8 @@ public: void match(/*in*/ const QString call, QString grid, /*out*/ QString &countryName, bool &callWorkedBefore, bool &countryWorkedBefore, bool &gridWorkedBefore, QString currentBand="") const; - void addAsWorked(const QString call, const QString band, const QString mode, const QString date); + void addAsWorked(const QString call, const QString grid, const QString band, + const QString mode, const QString date); private: CountryDat _countries; diff --git a/mainwindow.cpp b/mainwindow.cpp index 3d6b14978..496c31b76 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -5184,7 +5184,7 @@ void MainWindow::acceptQSO (QDateTime const& QSO_date_off, QString const& call, , QString const& my_call, QString const& my_grid, QByteArray const& ADIF) { QString date = QSO_date_on.toString("yyyyMMdd"); - m_logBook.addAsWorked (m_hisCall, m_config.bands ()->find (m_freqNominal), m_modeTx, date); + m_logBook.addAsWorked (m_hisCall,grid,m_config.bands()->find(m_freqNominal),m_modeTx,date); m_messageClient->qso_logged (QSO_date_off, call, grid, dial_freq, mode, rpt_sent, rpt_received, tx_power, comments, name, QSO_date_on, operator_call, my_call, my_grid); m_messageClient->logged_ADIF (ADIF);