diff --git a/.gitignore b/.gitignore index cf085569..1a6f5d34 100644 --- a/.gitignore +++ b/.gitignore @@ -211,3 +211,4 @@ tests/tst_callsign/moc_callsign.cpp tests/tst_callsign/moc_predefs.h tests/tst_callsign/target_wrapper.sh tests/tst_callsign/tst_callsign +tests/tst_adif/moc_predefs.h diff --git a/src/callsign.cpp b/src/callsign.cpp index 33c6397f..4351e647 100644 --- a/src/callsign.cpp +++ b/src/callsign.cpp @@ -71,7 +71,9 @@ Callsign::Callsign(const QString &callsign, QObject *parent) : QObject{parent}, } } -;QRegularExpression Callsign::callsignRegEx() +Callsign::~Callsign(){} + +QRegularExpression Callsign::callsignRegEx() { return QRegularExpression(callsignRegExString(), QRegularExpression::CaseInsensitiveOption); } @@ -89,6 +91,7 @@ Callsign::Callsign(const QString &callsign, QObject *parent) : QObject{parent}, ;QString Callsign::prefixRegExString() { qDebug() << Q_FUNC_INFO; + // Matches prefix: "^([A-Z0-9]+[\/])?([A-Z][0-9]|[A-Z]{1,2}|[0-9][A-Z])([0-9]|[0-9]+)([A-Z]+)([\/][A-Z0-9]+)?" // E73 prefix is not correctly matched, it is matched as EA400 so simple prefix is not OK return QString("^((([A-Z])|([A-Z]{1,2})|([0-9][A-Z])|([A-Z][0-9]))([0-9]*))$"); @@ -112,7 +115,7 @@ int Callsign::getAreaNumber() return -1; } -QString Callsign::getSimplePrefix() +QString Callsign::getHostPrefixWithoutNumber() { if (prefValid) return hostPrefixWithoutAreaNumber; diff --git a/src/callsign.h b/src/callsign.h index dd7e25fb..0b1821ba 100644 --- a/src/callsign.h +++ b/src/callsign.h @@ -43,7 +43,7 @@ class Callsign : public QObject public: Callsign(const QString &callsign, QObject *parent = nullptr); - + ~Callsign(); static QStringList secondarySpecialSuffixes; QString getCallsign(); @@ -55,7 +55,7 @@ public: QString getSuffix(); QString getSuffixWithDelimiter(); QString getWPXPrefix(); - QString getSimplePrefix(); // The prefix without the area number + QString getHostPrefixWithoutNumber(); // The prefix without the area number int getAreaNumber(); // Just the prefix area number bool isValid(); // True if it is a full callsign diff --git a/src/dataproxy_sqlite.cpp b/src/dataproxy_sqlite.cpp index 856208c6..b011de29 100644 --- a/src/dataproxy_sqlite.cpp +++ b/src/dataproxy_sqlite.cpp @@ -5620,7 +5620,7 @@ QList DataProxy_SQLite::getPrimarySubDivisions(const int _en if ((_pref.length()>0)) { //qDebug() << Q_FUNC_INFO << " - Running for no pref, delivering ALL for the entity"; - queryString = QString("SELECT name, shortname, cqz, ituz FROM primary_subdivisions WHERE prefix = :prefix ORDER BY shortname"); + queryString = QString("SELECT dxcc, prefix, name, shortname, cqz, ituz FROM primary_subdivisions WHERE prefix = :prefix ORDER BY shortname"); query.prepare(queryString); query.bindValue(":prefix", _pref); } @@ -5633,7 +5633,7 @@ QList DataProxy_SQLite::getPrimarySubDivisions(const int _en //qDebug() << Q_FUNC_INFO << " - END: entity <= 0"; return list; } - queryString = QString("SELECT name, shortname, cqz, ituz FROM primary_subdivisions WHERE dxcc = :dxcc ORDER BY shortname"); + queryString = QString("SELECT dxcc, prefix, name, shortname, cqz, ituz FROM primary_subdivisions WHERE dxcc = :dxcc ORDER BY shortname"); query.prepare(queryString); query.bindValue(":dxcc", _entity); } @@ -5649,10 +5649,13 @@ QList DataProxy_SQLite::getPrimarySubDivisions(const int _en if (query.isValid()) { PrimarySubdivision ps; - ps.name = (query.value(0)).toString(); - ps.shortName = (query.value(1)).toString(); - ps.cqz = (query.value(2)).toInt(); - ps.ituz = (query.value(3)).toInt(); + ps.dxcc = (query.value(0)).toInt(); + ps.prefix = (query.value(1)).toString(); + ps.name = (query.value(2)).toString(); + ps.shortName = (query.value(3)).toString(); + ps.cqz = (query.value(4)).toInt(); + ps.ituz = (query.value(5)).toInt(); + list.append(ps); //qDebug() << Q_FUNC_INFO << " : " << ps.name ; } diff --git a/src/inputwidgets/mainwindowinputothers.cpp b/src/inputwidgets/mainwindowinputothers.cpp index 1c7e1c1d..b5cd597f 100644 --- a/src/inputwidgets/mainwindowinputothers.cpp +++ b/src/inputwidgets/mainwindowinputothers.cpp @@ -26,6 +26,8 @@ #include "mainwindowinputothers.h" +#include "../adif.h" +#include "../callsign.h" MainWindowInputOthers::MainWindowInputOthers(DataProxy_SQLite *dp, QWidget *parent) : QWidget(parent) @@ -774,41 +776,21 @@ void MainWindowInputOthers::updatePrimarySubDivisions(const int _n, const QStrin //qDebug() << Q_FUNC_INFO << " - Start: " << QString::number(_n) << "/" << _qrz; if (_n<1) return; + Callsign callsign(_qrz); currentInt = _n; - currentPref = _qrz; QString mainPref = dataProxy->getEntityMainPrefix(_n); - QString mainPrefWithArea = mainPref; - int areaNumber = util->getAreaNumberFromCall(_qrz); - //qDebug() << Q_FUNC_INFO << " - AreaNumber: " << QString::number(areaNumber); - if (areaNumber>=0) - { - mainPrefWithArea.append(QString::number(areaNumber)); - // mainPref = mainPref + QString::number(areaNumber); - //qDebug() << Q_FUNC_INFO << " - NEW mainPref: " << mainPrefWithArea; - } + QString mainToUse = mainPref + QString::number(callsign.getAreaNumber()); // The default is that showAll is not checked + QString prefUsed = callsign.getHostPrefix(); // The default is that showAll is not checked - QString currentPrefTMP = util->getPrefixFromCall(_qrz, !showAllCheckBox->isChecked()); - - //qDebug() << Q_FUNC_INFO << " - currentPref: " << QString::number(_n) << "/" << currentPrefTMP; - //qDebug() << Q_FUNC_INFO << " - mainPref: " << QString::number(_n) << "/" << mainPref; - - - setEntity(currentInt); - QString mainToUse, prefUsed; if (showAllCheckBox->isChecked()) { mainToUse = mainPref; - prefUsed = currentPrefTMP; - } - else - { - mainToUse = mainPrefWithArea; - prefUsed = currentPrefTMP; + prefUsed = callsign.getHostPrefixWithoutNumber(); } - if ((currentPrefTMP.isEmpty()) && (mainToUse.isEmpty())) + if ((mainToUse.isEmpty()) && (prefUsed.isEmpty())) return; QList subdivisions; diff --git a/src/inputwidgets/mainwindowinputothers.h b/src/inputwidgets/mainwindowinputothers.h index 4e567dd0..a2bf855a 100644 --- a/src/inputwidgets/mainwindowinputothers.h +++ b/src/inputwidgets/mainwindowinputothers.h @@ -32,9 +32,7 @@ #include #include "../dataproxy_sqlite.h" #include "../utilities.h" -#include "../callsign.h" #include "../klogdefinitions.h" -#include "../adif.h" class MainWindowInputOthers : public QWidget { diff --git a/src/klogdefinitions.h b/src/klogdefinitions.h index 9eeab70a..4986365a 100644 --- a/src/klogdefinitions.h +++ b/src/klogdefinitions.h @@ -62,8 +62,10 @@ struct Coordinate { struct PrimarySubdivision { // Used to return data to MainWindow for each prefix QString name; QString shortName; + QString prefix; int cqz; int ituz; + int dxcc; }; #if (QT_VERSION >= QT_VERSION_CHECK(5, 15, 2)) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index c6a15405..c6f669c7 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -30,8 +30,10 @@ #include #include #include +#include "updatesettings.h" //#include "database.h" #include "mainwindow.h" +#include "callsign.h" void MainWindow::showNotWar() { @@ -2033,7 +2035,6 @@ void MainWindow::slotQRZTextChanged(QString _qrz) logEvent(Q_FUNC_INFO, QString("Start: %1").arg(_qrz), Debug); //qDebug()<< Q_FUNC_INFO << " - 10" ; - Callsign callsign("EA4K"); if (_qrz.length()<1) { //qDebug()<< Q_FUNC_INFO << " - 11" ; diff --git a/src/mainwindow.h b/src/mainwindow.h index 1d101cae..3b1d5be8 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -78,9 +78,7 @@ #include "widgets/map/mapwindowwidget.h" #include "widgets/showkloglogwidget.h" #include "qso.h" -#include "updatesettings.h" #include "klogdefinitions.h" -#include "callsign.h" #include #include diff --git a/tests/tst_callsign/tst_callsign.cpp b/tests/tst_callsign/tst_callsign.cpp index ca3559c3..383e5045 100644 --- a/tests/tst_callsign/tst_callsign.cpp +++ b/tests/tst_callsign/tst_callsign.cpp @@ -102,7 +102,7 @@ void tst_Callsign::test_prefixes() QCOMPARE(pref.isValidPrefix(), true); QCOMPARE(pref.getHostPrefix(), fullprefix); - QCOMPARE(pref.getSimplePrefix(), prefix); + QCOMPARE(pref.getHostPrefixWithoutNumber(), prefix); QCOMPARE(pref.getAreaNumber(), areanumber); } diff --git a/tests/tst_dataproxy/tst_dataproxy.cpp b/tests/tst_dataproxy/tst_dataproxy.cpp index 9162a98d..9a980776 100644 --- a/tests/tst_dataproxy/tst_dataproxy.cpp +++ b/tests/tst_dataproxy/tst_dataproxy.cpp @@ -55,8 +55,11 @@ private slots: void test_bands(); void test_EntityAndPrefixes(); // getEntityMainPrefix void test_continents(); + + void test_subdivisions_data(); void test_primarySubdivisions(); + //void test_getProgresStepForDialog(); private: @@ -120,6 +123,27 @@ void tst_DataProxy::test_modes() } */ +void tst_DataProxy::test_subdivisions_data() +{ + //struct PrimarySubdivision is defined in klogdefinitions.h + // Data is in database/db_adif_primary_subdvisions_data.cpp + + /* + QTest::addColumn("string"); + QTest::addColumn("dxcc"); + QTest::addColumn("prefix"); + QTest::addColumn("name"); + QTest::addColumn("shortname"); + QTest::addColumn("cqz"); + QTest::addColumn("ituz"); + + + QTest::newRow("EA8-GC") << 29 << "EA8" << "Las Palmas" << "GC" << "33" << "36"; + QTest::newRow("EA8-TF") << 29 << "EA8" << "Tenerife" << "TF" << "33" << "36"; + QTest::newRow("EA6-IB") << 21 << "EA6" << "Baleares" << "IB" << "14" << "37"; + */ +} + void tst_DataProxy::test_modes_data() { QTest::addColumn("string"); @@ -216,11 +240,6 @@ void tst_DataProxy::test_continents() void tst_DataProxy::test_primarySubdivisions() { - //ps.name = (query.value(0)).toString(); - //ps.shortName = (query.value(1)).toString(); - //ps.cqz = (query.value(2)).toInt(); - //ps.ituz = (query.value(3)).toInt(); - QList subdivisions; subdivisions.clear(); // Testing that the functions are working diff --git a/tests/tst_main/tst_main.pro b/tests/tst_main/tst_main.pro index a6541fb7..129632a2 100644 --- a/tests/tst_main/tst_main.pro +++ b/tests/tst_main/tst_main.pro @@ -24,6 +24,7 @@ HEADERS += ../../src/setupdialog.h \ ../../src/awarddxmarathon.h \ ../../src/awards.h \ ../../src/awardswidget.h \ + ../../src/callsign.h \ ../../src/charts/statsfieldperbandwidget.h \ ../../src/charts/statsgeneralchartwidget.h \ ../../src/charts/statsdxccsonsatswidget.h \ @@ -123,6 +124,7 @@ SOURCES += tst_main.cpp \ ../../src/awarddxmarathon.cpp \ ../../src/awards.cpp \ ../../src/awardswidget.cpp \ + ../../src/callsign.cpp \ ../../src/charts/statsfieldperbandwidget.cpp \ ../../src/charts/statsgeneralchartwidget.cpp \ ../../src/charts/statsdxccsonsatswidget.cpp \ diff --git a/tests/tst_mainwindow/tst_mainwindow.pro b/tests/tst_mainwindow/tst_mainwindow.pro index e0ebae48..f64e3011 100644 --- a/tests/tst_mainwindow/tst_mainwindow.pro +++ b/tests/tst_mainwindow/tst_mainwindow.pro @@ -38,6 +38,7 @@ HEADERS += \ ../../src/setuppages/setuppageuserdata.h \ ../../src/setuppages/setuppageworldeditor.h \ ../../src/aboutdialog.h \ + ../../src/callsign.h \ ../../src/tipsdialog.h \ ../../src/filemanager.h \ ../../src/fileawardmanager.h \ @@ -114,6 +115,7 @@ HEADERS += \ SOURCES += tst_mainwindow.cpp \ ../../src/setupdialog.cpp \ ../../src/aboutdialog.cpp \ + ../../src/callsign.cpp \ ../../src/tipsdialog.cpp \ ../../src/filemanager.cpp \ ../../src/fileawardmanager.cpp \