manage hound queue; add ability to add hound to top with ALT-double-click; show/manipulate hound QSOs in progress

This commit is contained in:
Brian Moran 2022-11-12 17:23:21 -08:00
parent d789beaa82
commit 2b08cd9e4b
6 changed files with 4189 additions and 90 deletions

View File

@ -86,7 +86,7 @@ void DisplayText::mouseDoubleClickEvent(QMouseEvent *e)
void DisplayText::insertLineSpacer(QString const& line) void DisplayText::insertLineSpacer(QString const& line)
{ {
appendText (line, "#d3d3d3"); insertText (line, "#d3d3d3");
} }
namespace namespace
@ -123,11 +123,11 @@ namespace
} }
} }
void DisplayText::appendText(QString const& text, QColor bg, QColor fg void DisplayText::insertText(QString const& text, QColor bg, QColor fg
, QString const& call1, QString const& call2) , QString const& call1, QString const& call2, QTextCursor::MoveOperation location)
{ {
auto cursor = textCursor (); auto cursor = textCursor ();
cursor.movePosition (QTextCursor::End); cursor.movePosition (location);
auto block_format = cursor.blockFormat (); auto block_format = cursor.blockFormat ();
auto format = cursor.blockCharFormat (); auto format = cursor.blockCharFormat ();
format.setFont (char_font_); format.setFont (char_font_);
@ -484,7 +484,7 @@ void DisplayText::displayDecodedText(DecodedText const& decodedText, QString con
} }
} }
appendText (message.trimmed (), bg, fg, decodedText.call (), dxCall); insertText (message.trimmed (), bg, fg, decodedText.call (), dxCall);
} }
@ -516,18 +516,19 @@ void DisplayText::displayTransmittedText(QString text, QString modeTx, qint32 tx
QColor fg; QColor fg;
highlight_types types {Highlight::Tx}; highlight_types types {Highlight::Tx};
set_colours (m_config, &bg, &fg, types); set_colours (m_config, &bg, &fg, types);
appendText (t, bg, fg); insertText (t, bg, fg);
} }
void DisplayText::displayQSY(QString text) void DisplayText::displayQSY(QString text)
{ {
QString t = QDateTime::currentDateTimeUtc().toString("hhmmss") + " " + text; QString t = QDateTime::currentDateTimeUtc().toString("hhmmss") + " " + text;
appendText (t, "hotpink"); insertText (t, "hotpink");
} }
void DisplayText::displayFoxToBeCalled(QString t, QColor bg, QColor fg) void DisplayText::displayHoundToBeCalled(QString t, bool bAtTop, QColor bg, QColor fg)
{ {
appendText (t, bg, fg); if (bAtTop) t = t + "\n"; // need a newline when insertion at top
insertText(t, bg, fg, "", "", bAtTop ? QTextCursor::Start : QTextCursor::End);
} }
namespace namespace

View File

@ -33,7 +33,7 @@ public:
bool haveFSpread = false, float fSpread = 0.0, bool bDisplayPoints=false, int points=-99); bool haveFSpread = false, float fSpread = 0.0, bool bDisplayPoints=false, int points=-99);
void displayTransmittedText(QString text, QString modeTx, qint32 txFreq, bool bFastMode, double TRperiod); void displayTransmittedText(QString text, QString modeTx, qint32 txFreq, bool bFastMode, double TRperiod);
void displayQSY(QString text); void displayQSY(QString text);
void displayFoxToBeCalled(QString t, QColor bg = QColor {}, QColor fg = QColor {}); void displayHoundToBeCalled(QString t, bool bAtTop=false, QColor bg = QColor {}, QColor fg = QColor {});
void new_period (); void new_period ();
QString CQPriority(){return m_CQPriority;}; QString CQPriority(){return m_CQPriority;};
qint32 m_points; qint32 m_points;
@ -42,8 +42,8 @@ public:
Q_SIGNAL void selectCallsign (Qt::KeyboardModifiers); Q_SIGNAL void selectCallsign (Qt::KeyboardModifiers);
Q_SIGNAL void erased (); Q_SIGNAL void erased ();
Q_SLOT void appendText (QString const& text, QColor bg = QColor {}, QColor fg = QColor {} Q_SLOT void insertText (QString const& text, QColor bg = QColor {}, QColor fg = QColor {}
, QString const& call1 = QString {}, QString const& call2 = QString {}); , QString const& call1 = QString {}, QString const& call2 = QString {}, QTextCursor::MoveOperation location=QTextCursor::End);
Q_SLOT void erase (); Q_SLOT void erase ();
Q_SLOT void highlight_callsign (QString const& callsign, QColor const& bg, QColor const& fg, bool last_period_only); Q_SLOT void highlight_callsign (QString const& callsign, QColor const& bg, QColor const& fg, bool last_period_only);
@ -62,6 +62,7 @@ private:
, QString const& currentMode, QString extra); , QString const& currentMode, QString extra);
QFont char_font_; QFont char_font_;
QAction * erase_action_; QAction * erase_action_;
QHash<QString, QPair<QColor, QColor>> highlighted_calls_; QHash<QString, QPair<QColor, QColor>> highlighted_calls_;
bool high_volume_; bool high_volume_;
QMetaObject::Connection vertical_scroll_connection_; QMetaObject::Connection vertical_scroll_connection_;

View File

@ -655,7 +655,8 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
connect(txMsgButtonGroup,SIGNAL(buttonClicked(int)),SLOT(set_ntx(int))); connect(txMsgButtonGroup,SIGNAL(buttonClicked(int)),SLOT(set_ntx(int)));
connect (ui->decodedTextBrowser, &DisplayText::selectCallsign, this, &MainWindow::doubleClickOnCall2); connect (ui->decodedTextBrowser, &DisplayText::selectCallsign, this, &MainWindow::doubleClickOnCall2);
connect (ui->decodedTextBrowser2, &DisplayText::selectCallsign, this, &MainWindow::doubleClickOnCall); connect (ui->decodedTextBrowser2, &DisplayText::selectCallsign, this, &MainWindow::doubleClickOnCall);
connect (ui->textBrowser4, &DisplayText::selectCallsign, this, &MainWindow::doubleClickOnFoxQueue); connect (ui->houndQueueTextBrowser, &DisplayText::selectCallsign, this, &MainWindow::doubleClickOnFoxQueue);
connect (ui->foxTxListTextBrowser, &DisplayText::selectCallsign, this, &MainWindow::doubleClickOnFoxInProgress);
connect (ui->decodedTextBrowser, &DisplayText::erased, this, &MainWindow::band_activity_cleared); connect (ui->decodedTextBrowser, &DisplayText::erased, this, &MainWindow::band_activity_cleared);
connect (ui->decodedTextBrowser2, &DisplayText::erased, this, &MainWindow::rx_frequency_activity_cleared); connect (ui->decodedTextBrowser2, &DisplayText::erased, this, &MainWindow::rx_frequency_activity_cleared);
@ -1425,9 +1426,14 @@ void MainWindow::setDecodedTextFont (QFont const& font)
{ {
ui->decodedTextBrowser->setContentFont (font); ui->decodedTextBrowser->setContentFont (font);
ui->decodedTextBrowser2->setContentFont (font); ui->decodedTextBrowser2->setContentFont (font);
ui->textBrowser4->setContentFont(font); ui->houndQueueTextBrowser->setContentFont(font);
ui->textBrowser4->displayFoxToBeCalled(" "); ui->houndQueueTextBrowser->displayHoundToBeCalled(" ");
ui->textBrowser4->setText(""); ui->houndQueueTextBrowser->setText("");
ui->foxTxListTextBrowser->setContentFont(font);
ui->foxTxListTextBrowser->displayHoundToBeCalled(" ");
ui->foxTxListTextBrowser->setText("");
auto style_sheet = "QLabel {" + font_as_stylesheet (font) + '}'; auto style_sheet = "QLabel {" + font_as_stylesheet (font) + '}';
ui->lh_decodes_headings_label->setStyleSheet (ui->lh_decodes_headings_label->styleSheet () + style_sheet); ui->lh_decodes_headings_label->setStyleSheet (ui->lh_decodes_headings_label->styleSheet () + style_sheet);
ui->rh_decodes_headings_label->setStyleSheet (ui->rh_decodes_headings_label->styleSheet () + style_sheet); ui->rh_decodes_headings_label->setStyleSheet (ui->rh_decodes_headings_label->styleSheet () + style_sheet);
@ -1653,7 +1659,7 @@ void MainWindow::dataSink(qint64 frames)
t = t.asprintf("%9.6f %5.2f %7d %7.1f %7d %7d %7d %7.1f %7.1f",hour,xlevel, t = t.asprintf("%9.6f %5.2f %7d %7.1f %7d %7d %7d %7.1f %7.1f",hour,xlevel,
nDopTotal,width,echocom_.nsum,nqual,qRound(dfreq),sigdb,dBerr); nDopTotal,width,echocom_.nsum,nqual,qRound(dfreq),sigdb,dBerr);
t = t0 + t; t = t0 + t;
if (ui) ui->decodedTextBrowser->appendText(t); if (ui) ui->decodedTextBrowser->insertText(t);
t=t1+t; t=t1+t;
write_all("Rx",t); write_all("Rx",t);
} }
@ -2093,7 +2099,6 @@ void MainWindow::auto_tx_mode (bool state)
void MainWindow::keyPressEvent (QKeyEvent * e) void MainWindow::keyPressEvent (QKeyEvent * e)
{ {
if(SpecOp::FOX == m_specOp) { if(SpecOp::FOX == m_specOp) {
switch (e->key()) { switch (e->key()) {
case Qt::Key_Return: case Qt::Key_Return:
@ -2105,6 +2110,13 @@ void MainWindow::keyPressEvent (QKeyEvent * e)
case Qt::Key_Backspace: case Qt::Key_Backspace:
qDebug() << "Key Backspace"; qDebug() << "Key Backspace";
return; return;
#ifdef DEBUG_FOX
case Qt::Key_X:
if(e->modifiers() & Qt::AltModifier) {
foxTest();
return;
}
#endif
} }
QMainWindow::keyPressEvent (e); QMainWindow::keyPressEvent (e);
} }
@ -4878,7 +4890,7 @@ void MainWindow::startTx2()
t = " Transmitting " + m_mode + " ----------------------- " + t = " Transmitting " + m_mode + " ----------------------- " +
m_config.bands ()->find (m_freqNominal); m_config.bands ()->find (m_freqNominal);
t=beacon_start_time (m_TRperiod / 2) + ' ' + t.rightJustified (66, '-'); t=beacon_start_time (m_TRperiod / 2) + ' ' + t.rightJustified (66, '-');
ui->decodedTextBrowser->appendText(t); ui->decodedTextBrowser->insertText(t);
} }
write_all("Tx",m_currentMessage); write_all("Tx",m_currentMessage);
} }
@ -5157,7 +5169,7 @@ void MainWindow::doubleClickOnCall(Qt::KeyboardModifiers modifiers)
if(SpecOp::FOX==m_specOp and m_decodedText2) { if(SpecOp::FOX==m_specOp and m_decodedText2) {
if(m_houndQueue.count()<10 and m_nSortedHounds>0) { if(m_houndQueue.count()<10 and m_nSortedHounds>0) {
QString t=cursor.block().text(); QString t=cursor.block().text();
selectHound(t); selectHound(t, modifiers==(Qt::AltModifier)); // alt double-click gets put at top of queue
} }
return; return;
} }
@ -8495,7 +8507,7 @@ void MainWindow::p1ReadFromStdout() //p1readFromStdout
t = " " + tr ("Receiving") + " " + m_mode + " ----------------------- " + t = " " + tr ("Receiving") + " " + m_mode + " ----------------------- " +
m_config.bands ()->find (m_dialFreqRxWSPR); m_config.bands ()->find (m_dialFreqRxWSPR);
t=beacon_start_time (-m_TRperiod / 2) + ' ' + t.rightJustified (66, '-'); t=beacon_start_time (-m_TRperiod / 2) + ' ' + t.rightJustified (66, '-');
ui->decodedTextBrowser->appendText(t); ui->decodedTextBrowser->insertText(t);
} }
killFileTimer.start (45*1000); //Kill in 45s (for slow modes) killFileTimer.start (45*1000); //Kill in 45s (for slow modes)
} }
@ -8569,12 +8581,12 @@ void MainWindow::p1ReadFromStdout() //p1readFromStdout
QString band; QString band;
Frequency f=1000000.0*rxFields.at(3).toDouble()+0.5; Frequency f=1000000.0*rxFields.at(3).toDouble()+0.5;
band = ' ' + m_config.bands ()->find (f); band = ' ' + m_config.bands ()->find (f);
ui->decodedTextBrowser->appendText(band.rightJustified (71, '-')); ui->decodedTextBrowser->insertText(band.rightJustified (71, '-'));
} }
m_tBlankLine = rxLine.left(4); m_tBlankLine = rxLine.left(4);
} }
m_nWSPRdecodes += 1; m_nWSPRdecodes += 1;
ui->decodedTextBrowser->appendText(rxLine); ui->decodedTextBrowser->insertText(rxLine);
} }
} }
} }
@ -9157,7 +9169,9 @@ void MainWindow::on_pbFoxReset_clicked()
QFile f(m_config.temp_dir().absoluteFilePath("houndcallers.txt")); QFile f(m_config.temp_dir().absoluteFilePath("houndcallers.txt"));
f.remove(); f.remove();
ui->decodedTextBrowser->setText(""); ui->decodedTextBrowser->setText("");
ui->textBrowser4->setText(""); ui->houndQueueTextBrowser->setText("");
ui->foxTxListTextBrowser->setText("");
m_houndQueue.clear(); m_houndQueue.clear();
m_foxQSO.clear(); m_foxQSO.clear();
m_foxQSOinProgress.clear(); m_foxQSOinProgress.clear();
@ -9277,19 +9291,18 @@ QString MainWindow::sortHoundCalls(QString t, int isort, int max_dB)
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
void MainWindow::selectHound(QString line) void MainWindow::selectHound(QString line, bool bTopQueue)
{ {
/* Called from doubleClickOnCall() in DXpedition Fox mode. /* Called from doubleClickOnCall() in DXpedition Fox mode.
* QString "line" is a user-selected line from left text window. * QString "line" is a user-selected line from left text window.
* The line may be selected by double-clicking; alternatively, hitting * The line may be selected by double-clicking; alternatively, hitting
* <Enter> is equivalent to double-clicking on the top-most line. * <Enter> is equivalent to double-clicking on the top-most line.
*/ */
if(line.length()==0) return; if(line.length()==0) return;
QString houndCall=line.split(" ",SkipEmptyParts).at(0); QString houndCall=line.split(" ",SkipEmptyParts).at(0);
// Don't add a call already enqueued or in QSO // Don't add a call already enqueued or in QSO
if(ui->textBrowser4->toPlainText().indexOf(houndCall) >= 0) return; if(ui->houndQueueTextBrowser->toPlainText().indexOf(houndCall) >= 0) return;
QString houndGrid=line.split(" ",SkipEmptyParts).at(1); // Hound caller's grid QString houndGrid=line.split(" ",SkipEmptyParts).at(1); // Hound caller's grid
QString rpt=line.split(" ",SkipEmptyParts).at(2); // Hound SNR QString rpt=line.split(" ",SkipEmptyParts).at(2); // Hound SNR
@ -9299,16 +9312,25 @@ void MainWindow::selectHound(QString line)
ui->decodedTextBrowser->setText(m_houndCallers); // Populate left window with Hound callers ui->decodedTextBrowser->setText(m_houndCallers); // Populate left window with Hound callers
QString t1=houndCall + " "; QString t1=houndCall + " ";
QString t2=rpt; QString t2=rpt;
QString t1_with_grid;
if(rpt.mid(0,1) != "-" and rpt.mid(0,1) != "+") t2="+" + rpt; if(rpt.mid(0,1) != "-" and rpt.mid(0,1) != "+") t2="+" + rpt;
if(t2.length()==2) t2=t2.mid(0,1) + "0" + t2.mid(1,1); if(t2.length()==2) t2=t2.mid(0,1) + "0" + t2.mid(1,1);
t1=t1.mid(0,12) + t2; t1=t1.mid(0,12) + t2;
ui->textBrowser4->displayFoxToBeCalled(t1); // Add hound call and rpt to tb4 ui->houndQueueTextBrowser->displayHoundToBeCalled(t1, bTopQueue); // Add hound call and rpt to tb4
t1=t1 + " " + houndGrid; // Append the grid t1_with_grid=t1 + " " + houndGrid; // Append the grid
m_houndQueue.enqueue(t1); // Put this hound into the queue
writeFoxQSO(" Sel: " + t1); if (bTopQueue)
QTextCursor cursor = ui->textBrowser4->textCursor(); {
m_houndQueue.prepend(t1_with_grid); // Put this hound into the queue at the top
}
else
{
m_houndQueue.enqueue(t1_with_grid); // Put this hound into the queue
}
writeFoxQSO(" Sel: " + t1_with_grid);
QTextCursor cursor = ui->houndQueueTextBrowser->textCursor();
cursor.setPosition(0); // Scroll to top of list cursor.setPosition(0); // Scroll to top of list
ui->textBrowser4->setTextCursor(cursor); ui->houndQueueTextBrowser->setTextCursor(cursor);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
@ -9337,7 +9359,7 @@ void MainWindow::houndCallers()
houndCall=line.mid(0,i0); houndCall=line.mid(0,i0);
paddedHoundCall=houndCall + " "; paddedHoundCall=houndCall + " ";
//Don't list a hound already in the queue //Don't list a hound already in the queue
if(!ui->textBrowser4->toPlainText().contains(paddedHoundCall)) { if(!ui->houndQueueTextBrowser->toPlainText().contains(paddedHoundCall)) {
if(m_loggedByFox[houndCall].contains(m_lastBand)) continue; //already logged on this band if(m_loggedByFox[houndCall].contains(m_lastBand)) continue; //already logged on this band
if(m_foxQSO.contains(houndCall)) continue; //still in the QSO map if(m_foxQSO.contains(houndCall)) continue; //still in the QSO map
auto const& entity = m_logBook.countries ()->lookup (houndCall); auto const& entity = m_logBook.countries ()->lookup (houndCall);
@ -9394,6 +9416,19 @@ void MainWindow::foxRxSequencer(QString msg, QString houndCall, QString rptRcvd)
} }
} }
} }
void MainWindow::updateFoxQSOsInProgressDisplay()
{
ui->foxTxListTextBrowser->clear();
for (int i = 0; i < m_foxQSOinProgress.count(); i++)
{
//First do those for QSOs in progress
QString hc = m_foxQSOinProgress.at(i);
QString status = m_foxQSO[hc].ncall > m_maxStrikes ? QString(" (rx) ") : QString(" ");
QString str = (hc + " ").left(13) + QString::number(m_foxQSO[hc].ncall) + status;
ui->foxTxListTextBrowser->displayHoundToBeCalled(str);
}
}
void MainWindow::foxTxSequencer() void MainWindow::foxTxSequencer()
{ {
@ -9590,13 +9625,14 @@ Transmit:
m_foxLogWindow->rate (m_foxRateQueue.size ()); m_foxLogWindow->rate (m_foxRateQueue.size ());
m_foxLogWindow->queued (m_foxQSOinProgress.count ()); m_foxLogWindow->queued (m_foxQSOinProgress.count ());
} }
updateFoxQSOsInProgressDisplay();
} }
void MainWindow::rm_tb4(QString houndCall) void MainWindow::rm_tb4(QString houndCall)
{ {
if(houndCall=="") return; if(houndCall=="") return;
QString t=""; QString t="";
QString tb4=ui->textBrowser4->toPlainText(); QString tb4=ui->houndQueueTextBrowser->toPlainText();
QStringList list=tb4.split("\n"); QStringList list=tb4.split("\n");
int n=list.size(); int n=list.size();
int j=0; int j=0;
@ -9609,24 +9645,78 @@ void MainWindow::rm_tb4(QString houndCall)
} }
} }
t.replace("\n\n","\n"); t.replace("\n\n","\n");
ui->textBrowser4->setText(t); ui->houndQueueTextBrowser->setText(t);
} }
void MainWindow::doubleClickOnFoxQueue(Qt::KeyboardModifiers modifiers) void MainWindow::doubleClickOnFoxQueue(Qt::KeyboardModifiers modifiers)
{ {
if(modifiers==9999) return; //Silence compiler warning if(modifiers==9999) return; //Silence compiler warning
QTextCursor cursor=ui->textBrowser4->textCursor(); QTextCursor cursor=ui->houndQueueTextBrowser->textCursor();
cursor.setPosition(cursor.selectionStart()); cursor.setPosition(cursor.selectionStart());
QString houndCall=cursor.block().text().mid(0,12).trimmed(); QString houndLine=cursor.block().text();
rm_tb4(houndCall); QString houndCall=houndLine.mid(0,12).trimmed();
writeFoxQSO(" Del: " + houndCall);
QQueue<QString> tmpQueue; if (modifiers == (Qt::AltModifier))
while(!m_houndQueue.isEmpty()) { {
QString t=m_houndQueue.dequeue(); //Alt-click on a Fox queue entry - put on top of queue
QString hc=t.mid(0,12).trimmed(); // remove
if(hc != houndCall) tmpQueue.enqueue(t); for(auto i=0; i<m_houndQueue.size(); i++) {
} QString t = m_houndQueue[i];
m_houndQueue.swap(tmpQueue); QString hc = t.mid(0, 12).trimmed();
if (hc == houndCall) {
m_houndQueue.removeAt(i);
break;
}
}
m_houndQueue.prepend(houndLine);
ui->houndQueueTextBrowser->clear();
for (QString line: m_houndQueue)
{
ui->houndQueueTextBrowser->displayHoundToBeCalled(line.mid(0,16), false);
}
} else
{
rm_tb4(houndCall);
writeFoxQSO(" Del: " + houndCall);
QQueue <QString> tmpQueue;
while (!m_houndQueue.isEmpty())
{
QString t = m_houndQueue.dequeue();
QString hc = t.mid(0, 12).trimmed();
if (hc != houndCall) tmpQueue.enqueue(t);
}
m_houndQueue.swap(tmpQueue);
}
}
void MainWindow::doubleClickOnFoxInProgress(Qt::KeyboardModifiers modifiers)
{
if (modifiers == 9999) return; //Silence compiler warning
QTextCursor cursor = ui->foxTxListTextBrowser->textCursor();
cursor.setPosition(cursor.selectionStart());
QString houndLine = cursor.block().text();
QString houndCall = houndLine.mid(0, 12).trimmed();
if (modifiers == 0)
{
m_foxQSO[houndCall].ncall = m_maxStrikes + 1; // time them out
updateFoxQSOsInProgressDisplay();
}
}
void MainWindow::foxQueueTopCallCommand()
{
m_decodedText2 = true;
if(SpecOp::FOX==m_specOp && m_decodedText2 && m_houndQueue.count() < 10)
{
QTextCursor cursor = ui->decodedTextBrowser->textCursor();
cursor.setPosition(cursor.selectionStart());
QString houndCallLine = cursor.block().text();
writeFoxQSO(" QTop: " + houndCallLine);
selectHound(houndCallLine, true); // alt double-click gets put at top of queue
}
} }
void MainWindow::foxGenWaveform(int i,QString fm) void MainWindow::foxGenWaveform(int i,QString fm)
@ -9680,14 +9770,29 @@ void MainWindow::writeFoxQSO(QString const& msg)
/*################################################################################### */ /*################################################################################### */
void MainWindow::foxTest() void MainWindow::foxTest()
{ {
QFile f("steps.txt"); QString curdir = QDir::currentPath();
if(!f.open(QIODevice::ReadOnly | QIODevice::Text)) return; bool b_hounds_written = false;
QFile fdiag("diag.txt"); QFile fdiag(m_config.writeable_data_dir ().absoluteFilePath("diag.txt"));
if(!fdiag.open(QIODevice::WriteOnly | QIODevice::Text)) return; if(!fdiag.open(QIODevice::WriteOnly | QIODevice::Text)) return;
QFile f(m_config.writeable_data_dir ().absoluteFilePath("steps.txt"));
if(!f.open(QIODevice::ReadOnly | QIODevice::Text)) {
fdiag.write("Cannot open steps.txt");
return;
}
QTextStream s(&f); QTextStream s(&f);
QTextStream sdiag(&fdiag); QTextStream sdiag(&fdiag);
QFile fhounds(m_config.temp_dir().absoluteFilePath("houndcallers.txt"));
if(!fhounds.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text))
{
sdiag << "can't write to houndcallers.txt";
return;
}
QTextStream houndstream(&fhounds);
QString line; QString line;
QString t; QString t;
QString msg; QString msg;
@ -9705,7 +9810,14 @@ void MainWindow::foxTest()
} }
if(line.contains("Sel:")) { if(line.contains("Sel:")) {
t=line.mid(43,6) + " " + line.mid(54,4) + " " + line.mid(50,3); t=line.mid(43,6) + " " + line.mid(54,4) + " " + line.mid(50,3);
selectHound(t); selectHound(t, false);
}
auto line_trimmed = line.trimmed();
if(line_trimmed.startsWith("Hound:")) {
t=line_trimmed.mid(6,-1).trimmed();
b_hounds_written = true;
//sdiag << t << Qt::endl;
houndstream << t << Qt::endl;
} }
if(line.contains("Del:")) { if(line.contains("Del:")) {
@ -9745,6 +9857,11 @@ void MainWindow::foxTest()
sdiag << t << line.mid(37).trimmed() << "\n"; sdiag << t << line.mid(37).trimmed() << "\n";
} }
} }
if (b_hounds_written)
{
fhounds.close();
houndCallers();
}
} }
void MainWindow::write_all(QString txRx, QString message) void MainWindow::write_all(QString txRx, QString message)

View File

@ -127,6 +127,7 @@ public slots:
void doubleClickOnCall (Qt::KeyboardModifiers); void doubleClickOnCall (Qt::KeyboardModifiers);
void doubleClickOnCall2(Qt::KeyboardModifiers); void doubleClickOnCall2(Qt::KeyboardModifiers);
void doubleClickOnFoxQueue(Qt::KeyboardModifiers); void doubleClickOnFoxQueue(Qt::KeyboardModifiers);
void doubleClickOnFoxInProgress(Qt::KeyboardModifiers modifiers);
void readFromStdout(); void readFromStdout();
void p1ReadFromStdout(); void p1ReadFromStdout();
void setXIT(int n, Frequency base = 0u); void setXIT(int n, Frequency base = 0u);
@ -832,8 +833,10 @@ private:
void displayWidgets(qint64 n); void displayWidgets(qint64 n);
QChar current_submode () const; // returns QChar {0} if submode is not appropriate QChar current_submode () const; // returns QChar {0} if submode is not appropriate
void write_transmit_entry (QString const& file_name); void write_transmit_entry (QString const& file_name);
void selectHound(QString t); void selectHound(QString t, bool bTopQueue);
void houndCallers(); void houndCallers();
void updateFoxQSOsInProgressDisplay();
void foxQueueTopCallCommand();
void foxRxSequencer(QString msg, QString houndCall, QString rptRcvd); void foxRxSequencer(QString msg, QString houndCall, QString rptRcvd);
void foxTxSequencer(); void foxTxSequencer();
void foxGenWaveform(int i,QString fm); void foxGenWaveform(int i,QString fm);

View File

@ -6,7 +6,7 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>901</width> <width>1015</width>
<height>665</height> <height>665</height>
</rect> </rect>
</property> </property>
@ -1018,7 +1018,7 @@ Yellow when too low</string>
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<layout class="QHBoxLayout" name="horizontalLayout_6" stretch="0,1"> <layout class="QHBoxLayout" name="horizontalLayout_6" stretch="0,0">
<property name="leftMargin"> <property name="leftMargin">
<number>0</number> <number>0</number>
</property> </property>
@ -1661,7 +1661,7 @@ When not checked you can view the calibration results.</string>
<enum>QTabWidget::Triangular</enum> <enum>QTabWidget::Triangular</enum>
</property> </property>
<property name="currentIndex"> <property name="currentIndex">
<number>0</number> <number>1</number>
</property> </property>
<widget class="QWidget" name="tab"> <widget class="QWidget" name="tab">
<attribute name="title"> <attribute name="title">
@ -2004,8 +2004,8 @@ Double-click to reset to the standard 73 message</string>
<attribute name="title"> <attribute name="title">
<string>2</string> <string>2</string>
</attribute> </attribute>
<layout class="QGridLayout" name="gridLayout_11" columnstretch="1,0"> <layout class="QGridLayout" name="gridLayout_11" columnstretch="1,0,0">
<item row="0" column="1" rowspan="2"> <item row="0" column="2" rowspan="2">
<layout class="QGridLayout" name="gridLayout_10"> <layout class="QGridLayout" name="gridLayout_10">
<item row="2" column="0"> <item row="2" column="0">
<widget class="QSpinBox" name="sbMax_dB"> <widget class="QSpinBox" name="sbMax_dB">
@ -2201,6 +2201,26 @@ Double-click to reset to the standard 73 message</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="7" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="5" column="0">
<widget class="QCheckBox" name="cbMoreCQs">
<property name="text">
<string>More CQs</string>
</property>
</widget>
</item>
<item row="0" column="0"> <item row="0" column="0">
<widget class="QComboBox" name="comboBoxHoundSort"> <widget class="QComboBox" name="comboBoxHoundSort">
<property name="sizePolicy"> <property name="sizePolicy">
@ -2248,47 +2268,84 @@ Double-click to reset to the standard 73 message</string>
</item> </item>
</widget> </widget>
</item> </item>
<item row="7" column="0"> </layout>
<spacer name="verticalSpacer"> </item>
<property name="orientation"> <item row="0" column="0" rowspan="2">
<enum>Qt::Vertical</enum> <layout class="QGridLayout" name="gridLayout">
<property name="topMargin">
<number>0</number>
</property>
<property name="horizontalSpacing">
<number>-1</number>
</property>
<item row="1" column="1">
<widget class="DisplayText" name="foxTxListTextBrowser">
<property name="enabled">
<bool>true</bool>
</property> </property>
<property name="sizeHint" stdset="0"> <property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size> <size>
<width>20</width> <width>16777215</width>
<height>40</height> <height>16777215</height>
</size> </size>
</property> </property>
</spacer> <property name="sizeAdjustPolicy">
<enum>QAbstractScrollArea::AdjustToContentsOnFirstShow</enum>
</property>
</widget>
</item> </item>
<item row="5" column="0"> <item row="1" column="0">
<widget class="QCheckBox" name="cbMoreCQs"> <widget class="DisplayText" name="houndQueueTextBrowser">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="sizeAdjustPolicy">
<enum>QAbstractScrollArea::AdjustToContentsOnFirstShow</enum>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label_queue">
<property name="font">
<font>
<pointsize>13</pointsize>
</font>
</property>
<property name="text"> <property name="text">
<string>More CQs</string> <string>Queue</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="label_inProcess">
<property name="text">
<string>In-QSO</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property> </property>
</widget> </widget>
</item> </item>
</layout> </layout>
</item> </item>
<item row="0" column="0">
<widget class="DisplayText" name="textBrowser4">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>16777215</height>
</size>
</property>
<property name="sizeAdjustPolicy">
<enum>QAbstractScrollArea::AdjustToContentsOnFirstShow</enum>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
</widget> </widget>
@ -3076,8 +3133,8 @@ QPushButton[state=&quot;ok&quot;] {
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>901</width> <width>1015</width>
<height>22</height> <height>37</height>
</rect> </rect>
</property> </property>
<widget class="QMenu" name="menuFile"> <widget class="QMenu" name="menuFile">
@ -3836,7 +3893,6 @@ QPushButton[state=&quot;ok&quot;] {
<tabstop>tx6</tabstop> <tabstop>tx6</tabstop>
<tabstop>txrb6</tabstop> <tabstop>txrb6</tabstop>
<tabstop>txb6</tabstop> <tabstop>txb6</tabstop>
<tabstop>textBrowser4</tabstop>
<tabstop>comboBoxHoundSort</tabstop> <tabstop>comboBoxHoundSort</tabstop>
<tabstop>sbNlist</tabstop> <tabstop>sbNlist</tabstop>
<tabstop>sbMax_dB</tabstop> <tabstop>sbMax_dB</tabstop>

File diff suppressed because it is too large Load Diff