mirror of
https://github.com/saitohirga/WSJT-X.git
synced 2026-06-05 15:34:39 -04:00
Better handling of compound callsigns
Option to control standard message generation for type 2 compound callsign holders. Process decoded messages based on either base or full callsign for both DE and DX callsigns. Change CW id when callsign changed in settings. Merged from wsjtx-1.4 branch. git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@5000 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
+82
-28
@@ -658,8 +658,18 @@ void MainWindow::on_actionSettings_triggered() //Setup Dialog
|
||||
ui->readFreq->setStyleSheet("");
|
||||
ui->readFreq->setEnabled(false);
|
||||
|
||||
auto callsign = m_config.my_callsign ();
|
||||
|
||||
if (QDialog::Accepted == m_config.exec ())
|
||||
{
|
||||
if (m_config.my_callsign () != callsign)
|
||||
{
|
||||
morse_(const_cast<char *> (m_config.my_callsign ().toLatin1().constData())
|
||||
, const_cast<int *> (icw)
|
||||
, &m_ncw
|
||||
, m_config.my_callsign ().length());
|
||||
}
|
||||
|
||||
on_dxGridEntry_textChanged (m_hisGrid); // recalculate distances in case of units change
|
||||
enable_DXCC_entity (m_config.DXCC ()); // sets text window proportions and (re)inits the logbook
|
||||
|
||||
@@ -786,6 +796,12 @@ void MainWindow::keyPressEvent( QKeyEvent *e ) //keyPressEvent
|
||||
case Qt::Key_F4:
|
||||
ui->dxCallEntry->setText("");
|
||||
ui->dxGridEntry->setText("");
|
||||
m_hisCall="";
|
||||
m_hisGrid="";
|
||||
m_rptSent="";
|
||||
m_rptRcvd="";
|
||||
m_qsoStart="";
|
||||
m_qsoStop="";
|
||||
genStdMsgs("");
|
||||
if (1 == ui->tabWidget->currentIndex())
|
||||
{
|
||||
@@ -1366,9 +1382,11 @@ void MainWindow::readFromStdout() //readFromStdout
|
||||
DecodedText decodedtext;
|
||||
decodedtext = t.replace("\n",""); //t.replace("\n","").mid(0,t.length()-4);
|
||||
|
||||
auto my_base_call = baseCall (m_config.my_callsign ());
|
||||
|
||||
// the left band display
|
||||
ui->decodedTextBrowser->displayDecodedText (decodedtext
|
||||
, m_config.my_callsign ()
|
||||
, my_base_call
|
||||
, m_config.DXCC ()
|
||||
, m_logBook
|
||||
, m_config.color_CQ()
|
||||
@@ -1380,7 +1398,7 @@ void MainWindow::readFromStdout() //readFromStdout
|
||||
{
|
||||
// the right QSO window
|
||||
ui->decodedTextBrowser2->displayDecodedText(decodedtext
|
||||
, m_config.my_callsign ()
|
||||
, my_base_call
|
||||
, false
|
||||
, m_logBook
|
||||
, m_config.color_CQ()
|
||||
@@ -1395,7 +1413,9 @@ void MainWindow::readFromStdout() //readFromStdout
|
||||
}
|
||||
|
||||
// find and extract any report for myCall
|
||||
bool stdMsg = decodedtext.report(m_config.my_callsign (),/*mod*/m_rptRcvd);
|
||||
bool stdMsg = decodedtext.report(my_base_call
|
||||
, baseCall (ui->dxCallEntry-> text ().toUpper ().trimmed ())
|
||||
, /*mod*/m_rptRcvd);
|
||||
|
||||
// extract details and send to PSKreporter
|
||||
int nsec=QDateTime::currentMSecsSinceEpoch()/1000-m_secBandChanged;
|
||||
@@ -1900,6 +1920,16 @@ void MainWindow::doubleClickOnCall(bool shift, bool ctrl)
|
||||
QStringList t4=t3.split(" ",QString::SkipEmptyParts);
|
||||
if(t4.length() <5) return; //Skip the rest if no decoded text
|
||||
|
||||
QString hiscall;
|
||||
QString hisgrid;
|
||||
decodedtext.deCallAndGrid(/*out*/hiscall,hisgrid);
|
||||
// basic valid call sign check i.e. contains at least one digit and
|
||||
// one letter next to each other
|
||||
if (!hiscall.contains (QRegularExpression {R"(\d[[:upper:]]|[[:upper:]]\d)"}))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// only allow automatic mode changes when not transmitting
|
||||
if (!m_transmitting)
|
||||
{
|
||||
@@ -1938,11 +1968,13 @@ void MainWindow::doubleClickOnCall(bool shift, bool ctrl)
|
||||
}
|
||||
}
|
||||
|
||||
auto my_base_call = baseCall (m_config.my_callsign ());
|
||||
|
||||
int i9=m_QSOText.indexOf(decodedtext.string());
|
||||
if (i9<0 and !decodedtext.isTX())
|
||||
{
|
||||
ui->decodedTextBrowser2->displayDecodedText(decodedtext
|
||||
, m_config.my_callsign ()
|
||||
, my_base_call
|
||||
, false
|
||||
, m_logBook
|
||||
, m_config.color_CQ()
|
||||
@@ -1965,12 +1997,13 @@ void MainWindow::doubleClickOnCall(bool shift, bool ctrl)
|
||||
return;
|
||||
}
|
||||
|
||||
QString hiscall;
|
||||
QString hisgrid;
|
||||
decodedtext.deCallAndGrid(/*out*/hiscall,hisgrid);
|
||||
if (hiscall != ui->dxCallEntry->text())
|
||||
ui->dxGridEntry->setText("");
|
||||
ui->dxCallEntry->setText(hiscall);
|
||||
auto base_call = baseCall (hiscall);
|
||||
if (base_call != baseCall (ui->dxCallEntry-> text ().toUpper ().trimmed ()) || base_call != hiscall)
|
||||
{
|
||||
// his base call different or his call more qualified
|
||||
// i.e. compound version of same base call
|
||||
ui->dxCallEntry->setText(hiscall);
|
||||
}
|
||||
if (gridOK(hisgrid))
|
||||
ui->dxGridEntry->setText(hisgrid);
|
||||
if (ui->dxGridEntry->text()=="")
|
||||
@@ -1987,7 +2020,10 @@ void MainWindow::doubleClickOnCall(bool shift, bool ctrl)
|
||||
genStdMsgs(rpt);
|
||||
|
||||
// determine the appropriate response to the received msg
|
||||
if(decodedtext.indexOf(m_config.my_callsign ())>=0)
|
||||
auto dtext = " " + decodedtext.string () + " ";
|
||||
if(dtext.contains (" " + my_base_call + " ")
|
||||
|| dtext.contains ("/" + my_base_call + " ")
|
||||
|| dtext.contains (" " + my_base_call + "/"))
|
||||
{
|
||||
if (t4.length()>=7 // enough fields for a normal msg
|
||||
and !gridOK(t4.at(7))) // but no grid on end of msg
|
||||
@@ -2057,6 +2093,15 @@ void MainWindow::doubleClickOnCall(bool shift, bool ctrl)
|
||||
void MainWindow::genStdMsgs(QString rpt) //genStdMsgs()
|
||||
{
|
||||
QString t;
|
||||
if(m_config.my_callsign () !="" and m_config.my_grid () !="")
|
||||
{
|
||||
t="CQ " + m_config.my_callsign () + " " + m_config.my_grid ().mid(0,4);
|
||||
msgtype(t, ui->tx6);
|
||||
}
|
||||
else
|
||||
{
|
||||
ui->tx6->setText("");
|
||||
}
|
||||
QString hisCall=ui->dxCallEntry->text().toUpper().trimmed();
|
||||
ui->dxCallEntry->setText(hisCall);
|
||||
if(hisCall=="") {
|
||||
@@ -2067,11 +2112,6 @@ void MainWindow::genStdMsgs(QString rpt) //genStdMsgs()
|
||||
ui->tx3->setText("");
|
||||
ui->tx4->setText("");
|
||||
ui->tx5->setCurrentText("");
|
||||
ui->tx6->setText("");
|
||||
if(m_config.my_callsign () !="" and m_config.my_grid () !="") {
|
||||
t="CQ " + m_config.my_callsign () + " " + m_config.my_grid ().mid(0,4);
|
||||
msgtype(t, ui->tx6);
|
||||
}
|
||||
ui->genMsg->setText("");
|
||||
return;
|
||||
}
|
||||
@@ -2080,7 +2120,6 @@ void MainWindow::genStdMsgs(QString rpt) //genStdMsgs()
|
||||
|
||||
QString t0=hisBase + " " + myBase + " ";
|
||||
t=t0 + m_config.my_grid ().mid(0,4);
|
||||
// if(myBase!=m_config.my_callsign ()) t="DE " + m_config.my_callsign () + " " + m_config.my_grid ().mid(0,4); //###
|
||||
msgtype(t, ui->tx1);
|
||||
if(rpt == "") {
|
||||
t=t+" OOO";
|
||||
@@ -2096,12 +2135,9 @@ void MainWindow::genStdMsgs(QString rpt) //genStdMsgs()
|
||||
t=t0 + "RRR";
|
||||
msgtype(t, ui->tx4);
|
||||
t=t0 + "73";
|
||||
// if(myBase!=m_config.my_callsign ()) t="DE " + m_config.my_callsign () + " 73"; //###
|
||||
msgtype(t, ui->tx5->lineEdit ());
|
||||
}
|
||||
|
||||
t="CQ " + m_config.my_callsign () + " " + m_config.my_grid ().mid(0,4);
|
||||
msgtype(t, ui->tx6);
|
||||
if(m_config.my_callsign ()!=myBase) {
|
||||
if(shortList(m_config.my_callsign ())) {
|
||||
t=hisCall + " " + m_config.my_callsign ();
|
||||
@@ -2109,22 +2145,40 @@ void MainWindow::genStdMsgs(QString rpt) //genStdMsgs()
|
||||
t="CQ " + m_config.my_callsign ();
|
||||
msgtype(t, ui->tx6);
|
||||
} else {
|
||||
t="DE " + m_config.my_callsign () + " " + m_config.my_grid ().mid(0,4);
|
||||
msgtype(t, ui->tx2);
|
||||
switch (m_config.type_2_msg_gen ())
|
||||
{
|
||||
case Configuration::type_2_msg_1_full:
|
||||
t="DE " + m_config.my_callsign () + " " + m_config.my_grid ().mid(0,4);
|
||||
msgtype(t, ui->tx1);
|
||||
t=t0 + "R" + rpt;
|
||||
msgtype(t, ui->tx3);
|
||||
break;
|
||||
|
||||
case Configuration::type_2_msg_3_full:
|
||||
t = t0 + m_config.my_grid ().mid(0,4);
|
||||
msgtype(t, ui->tx1);
|
||||
t="DE " + m_config.my_callsign () + " R" + rpt;
|
||||
msgtype(t, ui->tx3);
|
||||
break;
|
||||
|
||||
case Configuration::type_2_msg_5_only:
|
||||
t = t0 + m_config.my_grid ().mid(0,4);
|
||||
msgtype(t, ui->tx1);
|
||||
t=t0 + "R" + rpt;
|
||||
msgtype(t, ui->tx3);
|
||||
break;
|
||||
}
|
||||
t="DE " + m_config.my_callsign () + " 73";
|
||||
msgtype(t, ui->tx5->lineEdit ());
|
||||
t="CQ " + m_config.my_callsign () + " " + m_config.my_grid ().mid(0,4);
|
||||
msgtype(t, ui->tx6);
|
||||
}
|
||||
} else {
|
||||
if(hisCall!=hisBase) {
|
||||
if(shortList(hisCall)) {
|
||||
t=hisCall + " " + m_config.my_callsign ();
|
||||
t=hisBase + " " + m_config.my_callsign () + " " + m_config.my_grid ().mid (0,4);
|
||||
msgtype(t, ui->tx1);
|
||||
} else {
|
||||
t=hisCall + " 73";
|
||||
msgtype(t, ui->tx5->lineEdit());
|
||||
}
|
||||
t=hisCall + " 73";
|
||||
msgtype(t, ui->tx5->lineEdit());
|
||||
}
|
||||
}
|
||||
m_ntx=1;
|
||||
|
||||
Reference in New Issue
Block a user