From 7aea72517546461e9a3d00b80e1eb30958613f3d Mon Sep 17 00:00:00 2001 From: Bill Somerville Date: Thu, 28 May 2015 19:14:14 +0000 Subject: [PATCH] Merged free text UDP message changes from the wsjtx branch r5444 | bsomervi | 2015-05-28 16:44:03 +0100 (Thu, 28 May 2015) | 4 lines Respond to clicks on Gen/Free radio buttons even if checked The generated and free text radio buttons now refresh the sent message even if teh clicked radio button is already checked. ------------------------------------------------------------------------ r5445 | bsomervi | 2015-05-28 18:33:39 +0100 (Thu, 28 May 2015) | 9 lines Made the UDP message to change the free text message optionally send ASAP This message now has the ability to simply change the free text message or to change the message and send it ASAP. The message_aggregator reference UDP server application exercises this feature by sending a new free text message on any edit and requesting it be sent by WSJT-X when editing is finished i,e, RETURN pressed or focus moved away. ------------------------------------------------------------------------ r5446 | bsomervi | 2015-05-28 18:45:33 +0100 (Thu, 28 May 2015) | 1 line Don't send empty free text messages git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx-1.5@5447 ab8295b8-cf94-4d9e-aec4-7959e3be5d79 --- MessageAggregator.cpp | 7 +++++-- MessageClient.cpp | 15 +++++++++------ MessageClient.hpp | 2 +- MessageServer.cpp | 4 ++-- MessageServer.hpp | 5 +++-- NetworkMessage.hpp | 11 ++++++----- mainwindow.cpp | 16 ++++++++++------ mainwindow.h | 4 ++-- 8 files changed, 38 insertions(+), 26 deletions(-) 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();