diff --git a/MessageAggregator.cpp b/MessageAggregator.cpp index f560460c8..9f4d139b9 100644 --- a/MessageAggregator.cpp +++ b/MessageAggregator.cpp @@ -218,8 +218,11 @@ public: auto form_layout = new QFormLayout; form_layout->addRow (tr ("Free text:"), message_line_edit_); message_line_edit_->setValidator (new QRegExpValidator {message_alphabet, this}); + connect (message_line_edit_, &QLineEdit::textEdited, [this] (QString const& text) { + Q_EMIT do_free_text (id_, text, false); + }); connect (message_line_edit_, &QLineEdit::editingFinished, [this] () { - Q_EMIT do_free_text (id_, message_line_edit_->text ()); + Q_EMIT do_free_text (id_, message_line_edit_->text (), !message_line_edit_->text ().isEmpty ()); }); control_layout->addLayout (form_layout); control_layout->addWidget (auto_off_button_); @@ -285,7 +288,7 @@ public: Q_SIGNAL void do_reply (QModelIndex const&); Q_SIGNAL void do_halt_tx (QString const& id, bool auto_only); - Q_SIGNAL void do_free_text (QString const& id, QString const& text); + Q_SIGNAL void do_free_text (QString const& id, QString const& text, bool); private: class DecodesFilterModel final diff --git a/MessageClient.cpp b/MessageClient.cpp index 10e4aa001..17475a747 100644 --- a/MessageClient.cpp +++ b/MessageClient.cpp @@ -137,12 +137,15 @@ void MessageClient::impl::parse_message (QByteArray const& msg) break; case NetworkMessage::FreeText: - if (check_status (in) != Fail) - { - QByteArray message; - in >> message; - Q_EMIT self_->free_text (QString::fromUtf8 (message)); - } + { + QByteArray message; + bool send {true}; + in >> message >> send; + if (check_status (in) != Fail) + { + Q_EMIT self_->free_text (QString::fromUtf8 (message), send); + } + } break; default: diff --git a/MessageClient.hpp b/MessageClient.hpp index 35d305b50..89bca3e20 100644 --- a/MessageClient.hpp +++ b/MessageClient.hpp @@ -75,7 +75,7 @@ public: // this signal is emitted if the server has requested a new free // message text - Q_SIGNAL void free_text (QString const&); + Q_SIGNAL void free_text (QString const&, bool send); // this signal is emitted when network errors occur or if a host // lookup fails diff --git a/MessageServer.cpp b/MessageServer.cpp index 194f80c9a..777081676 100644 --- a/MessageServer.cpp +++ b/MessageServer.cpp @@ -356,14 +356,14 @@ void MessageServer::halt_tx (QString const& id, bool auto_only) } } -void MessageServer::free_text (QString const& id, QString const& text) +void MessageServer::free_text (QString const& id, QString const& text, bool send) { auto iter = m_->clients_.find (id); if (iter != std::end (m_->clients_)) { QByteArray message; NetworkMessage::Builder out {&message, NetworkMessage::FreeText, id}; - out << text.toUtf8 (); + out << text.toUtf8 () << send; if (impl::OK == m_->check_status (out)) { m_->writeDatagram (message, iter.value ().sender_address_, (*iter).sender_port_); diff --git a/MessageServer.hpp b/MessageServer.hpp index b080a843d..45b9aa1fd 100644 --- a/MessageServer.hpp +++ b/MessageServer.hpp @@ -52,8 +52,9 @@ public: // auto_only just disables auto Tx, otherwise halt is immediate Q_SLOT void halt_tx (QString const& id, bool auto_only); - // ask the client with identification 'id' to set the free text message - Q_SLOT void free_text (QString const& id, QString const& text); + // ask the client with identification 'id' to set the free text + // message and optionally send it ASAP + Q_SLOT void free_text (QString const& id, QString const& text, bool send); // the following signals are emitted when a client broadcasts the // matching message diff --git a/NetworkMessage.hpp b/NetworkMessage.hpp index 329d0c4f7..cce1380b5 100644 --- a/NetworkMessage.hpp +++ b/NetworkMessage.hpp @@ -196,16 +196,17 @@ * Free Text In 9 * Id (unique key) utf8 * Text utf8 + * Send bool * * This message allows the server to set the current free text * message content. Sending this message is equivalent to typing * a new message (old contents are discarded) in to the WSJT-X * free text message field or "Tx5" field (both are updated) and - * then clicking the "Next" radio button for the "Tx5" field if - * tab one is current or clicking the "Free msg" radio button if - * tab two is current. It is the responsibility of the sender to - * limit the length of the message text and to legal message - * characters. + * if the Send flag is set then clicking the "Now" radio button + * for the "Tx5" field if tab one is current or clicking the + * "Free msg" radio button if tab two is current. It is the + * responsibility of the sender to limit the length of the + * message text and to limit it to legal message characters. */ #include diff --git a/mainwindow.cpp b/mainwindow.cpp index 1df16b248..9e204f2c1 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -205,14 +205,18 @@ MainWindow::MainWindow(bool multiple, QSettings * settings, QSharedMemory *shdme } }); connect (m_messageClient, &MessageClient::error, this, &MainWindow::networkError); - connect (m_messageClient, &MessageClient::free_text, [this] (QString const& text) { + connect (m_messageClient, &MessageClient::free_text, [this] (QString const& text, bool send) { if (m_config.accept_udp_requests ()) { if (0 == ui->tabWidget->currentIndex ()) { ui->tx5->setCurrentText (text); - ui->txrb5->click (); - } else { + if (send) { + ui->txb5->click (); + } + } else if (1 == ui->tabWidget->currentIndex ()) { ui->freeTextMsg->setCurrentText (text); - ui->rbFreeText->click (); + if (send) { + ui->rbFreeText->click (); + } } } }); @@ -2911,7 +2915,7 @@ void MainWindow::on_pbSend73_clicked() if(m_transmitting) m_restart=true; } -void MainWindow::on_rbGenMsg_toggled(bool checked) +void MainWindow::on_rbGenMsg_clicked(bool checked) { m_freeText=!checked; if(!m_freeText) { @@ -2920,7 +2924,7 @@ void MainWindow::on_rbGenMsg_toggled(bool checked) } } -void MainWindow::on_rbFreeText_toggled(bool checked) +void MainWindow::on_rbFreeText_clicked(bool checked) { m_freeText=checked; if(m_freeText) { diff --git a/mainwindow.h b/mainwindow.h index 5e7cf8a06..0cfcbc514 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -155,8 +155,8 @@ private slots: void on_pbAnswerCQ_clicked(); void on_pbSendReport_clicked(); void on_pbSend73_clicked(); - void on_rbGenMsg_toggled(bool checked); - void on_rbFreeText_toggled(bool checked); + void on_rbGenMsg_clicked(bool checked); + void on_rbFreeText_clicked(bool checked); void on_freeTextMsg_currentTextChanged (QString const&); void on_rptSpinBox_valueChanged(int n); void killFile();