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,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

View File

@ -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<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) {
QSO q;
foreach(q,qsos) {

View File

@ -12,6 +12,7 @@
#include <QList>
#include <QString>
#include <QMultiHash>
#include <QRegularExpression>
#else
#include <QtGui>
#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<QString> 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<QString, QSO> _data;
QString _filename;
QMultiHash<QString, QSO> _data;
QMultiHash<QString, QSO> _data2;
QString _filename;
QString extractField(QString const& line, QString const& fieldName) const;
};
#endif

View File

@ -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);

View File

@ -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;

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 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);