Finish connecting "New DXCC on Band", "New Grid", "New Grid on Band". Needs more testing!

This commit is contained in:
Joe Taylor 2018-08-24 15:51:29 -04:00
parent 68ec268fef
commit ef3f084c5c
6 changed files with 65 additions and 37 deletions

View File

@ -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,callWorkedBefore,countryWorkedBefore,gridB4);
logBook.match(/*in*/call,grid,/*out*/countryName,callB4onBand,countryB4onBand,gridB4onBand, logBook.match(/*in*/call,grid,/*out*/countryName,callB4onBand,countryB4onBand,gridB4onBand,
/*in*/ currentBand); /*in*/ currentBand);
// if(gridB4) qDebug() << "aa" << grid << gridB4 << gridB4onBand;
message = message.trimmed (); message = message.trimmed ();
QString appendage{""}; QString appendage{""};
@ -187,17 +188,29 @@ QString DisplayText::appendWorkedB4(QString message, QString const& callsign, QS
appendage += "!"; appendage += "!";
*bg = m_color_DXCC; *bg = m_color_DXCC;
} else { } else {
if (!callWorkedBefore) { if(!countryB4onBand) {
// but have worked the country *bg = m_color_DXCCband;
appendage += "~";
*bg = m_color_NewCall;
} else { } else {
if(!callB4onBand) { if(!gridB4) {
appendage += "~"; *bg = m_color_NewGrid;
*bg = m_color_NewCallBand;
} else { } else {
appendage += " "; // have worked this call before if(!gridB4onBand) {
*bg = m_color_CQ; *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 dxCall;
QString dxGrid; QString dxGrid;
decodedText.deCallAndGrid (/*out*/ dxCall, 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"}; QRegularExpression 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=""; if(!dxGrid.contains(grid_regexp)) dxGrid="";
message = message.left (message.indexOf (QChar::Nbsp)); // strip appended info message = message.left (message.indexOf (QChar::Nbsp)); // strip appended info
if (displayDXCCEntity && CQcall) if (displayDXCCEntity && CQcall)
// if enabled add the DXCC entity and B4 status to the end of the // if enabled add the DXCC entity and B4 status to the end of the

View File

@ -15,6 +15,7 @@ void ADIF::init(QString const& filename)
{ {
_filename = filename; _filename = filename;
_data.clear(); _data.clear();
_data2.clear();
} }
@ -54,7 +55,8 @@ QString ADIF::extractField(QString const& record, QString const& fieldName) cons
void ADIF::load() void ADIF::load()
{ {
_data.clear(); _data.clear();
_data2.clear();
QFile inputFile(_filename); QFile inputFile(_filename);
if (inputFile.open(QIODevice::ReadOnly)) if (inputFile.open(QIODevice::ReadOnly))
{ {
@ -98,6 +100,7 @@ void ADIF::load()
buffer.remove (0, next_record >=0 ? next_record : buffer.size ()); buffer.remove (0, next_record >=0 ? next_record : buffer.size ());
record = record.mid (record.indexOf (QChar {'<'})); record = record.mid (record.indexOf (QChar {'<'}));
add (extractField (record, "CALL") add (extractField (record, "CALL")
, extractField (record, "GRIDSQUARE")
, extractField (record, "BAND") , extractField (record, "BAND")
, extractField (record, "MODE") , extractField (record, "MODE")
, extractField (record, "QSO_DATE")); , 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; QSO q;
q.call = call; q.call = call;
q.band = band; q.grid = grid;
q.mode = mode; q.band = band;
q.date = date; q.mode = mode;
if (q.call.size ()) q.date = date;
{ if(q.call.size ()) {
_data.insert(q.call,q); _data.insert(q.call,q);
// qDebug() << "Added as worked:" << call << band << mode << date; _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) // 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 bool ADIF::match(QString const& call, QString const& band, QString const& mode) const
{ {
QList<QSO> qsos = _data.values(call); QList<QSO> 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) { if (qsos.size()>0) {
QSO q; QSO q;
foreach(q,qsos) { foreach(q,qsos) {

View File

@ -12,6 +12,7 @@
#include <QList> #include <QList>
#include <QString> #include <QString>
#include <QMultiHash> #include <QMultiHash>
#include <QRegularExpression>
#else #else
#include <QtGui> #include <QtGui>
#endif #endif
@ -23,7 +24,8 @@ class ADIF
public: public:
void init(QString const& filename); void init(QString const& filename);
void load(); 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; bool match(QString const& call, QString const& band, QString const& mode) const;
QList<QString> getCallList() const; QList<QString> getCallList() const;
int getCount() const; int getCount() const;
@ -37,19 +39,17 @@ class ADIF
, QString const& strDialFreq, QString const& m_myCall, QString const& m_myGrid , QString const& strDialFreq, QString const& m_myCall, QString const& m_myGrid
, QString const& m_txPower, QString const& operator_call); , QString const& m_txPower, QString const& operator_call);
private: private:
struct QSO struct QSO
{ {
QString call,band,mode,date; QString call,grid,band,mode,date;
}; };
QMultiHash<QString, QSO> _data; QMultiHash<QString, QSO> _data;
QString _filename; QMultiHash<QString, QSO> _data2;
QString _filename;
QString extractField(QString const& line, QString const& fieldName) const; QString extractField(QString const& line, QString const& fieldName) const;
}; };
#endif #endif

View File

@ -71,13 +71,14 @@ void LogBook::match(/*in*/const QString call,QString grid,
bool &gridWorkedBefore, bool &gridWorkedBefore,
QString currentBand) const QString currentBand) const
{ {
if(currentBand=="") qDebug() << "aa" << grid; // if(currentBand=="") qDebug() << "aa" << grid;
if(currentBand!="") qDebug() << "bb" << grid << currentBand; // if(currentBand!="") qDebug() << "bb" << grid << currentBand;
if (call.length() > 0) { if (call.length() > 0) {
QString currentMode = "JT9"; // JT65 == JT9 == FT8 in ADIF::match() QString currentMode = "JT9"; // JT65 == JT9 == FT8 in ADIF::match()
// QString currentBand = ""; // match any band // QString currentBand = ""; // match any band
callWorkedBefore = _log.match(call,currentBand,currentMode); callWorkedBefore = _log.match(call,currentBand,currentMode);
gridWorkedBefore = _log.match(grid,currentBand,currentMode);
countryName = _countries.find(call); countryName = _countries.find(call);
if (countryName.length() > 0) { // country was found 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"; //qDebug() << "adding " << call << " as worked";
_log.add(call,band,mode,date); _log.add(call,grid,band,mode,date);
QString countryName = _countries.find(call); QString countryName = _countries.find(call);
if (countryName.length() > 0) if (countryName.length() > 0)
_worked.setAsWorked(countryName); _worked.setAsWorked(countryName);

View File

@ -23,7 +23,8 @@ public:
void match(/*in*/ const QString call, QString grid, void match(/*in*/ const QString call, QString grid,
/*out*/ QString &countryName, bool &callWorkedBefore, bool &countryWorkedBefore, /*out*/ QString &countryName, bool &callWorkedBefore, bool &countryWorkedBefore,
bool &gridWorkedBefore, QString currentBand="") const; 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: private:
CountryDat _countries; CountryDat _countries;

View File

@ -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 const& my_call, QString const& my_grid, QByteArray const& ADIF)
{ {
QString date = QSO_date_on.toString("yyyyMMdd"); 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->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); m_messageClient->logged_ADIF (ADIF);