diff --git a/MessageAggregator.cpp b/MessageAggregator.cpp index a74016060..2471ec2a5 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 (), true); }); 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 ce9b955d2..03dd310f3 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -203,14 +203,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 (); + } } } });