Compare commits

...

18 Commits

Author SHA1 Message Date
Jordan Sherer 873929b3f6 Fixed configuration ui for compose textbox 2018-09-12 20:51:46 -04:00
Jordan Sherer e52a62e689 Fixed font picker remember choice 2018-09-12 16:37:58 -04:00
Jordan Sherer bafaf8a5ae Fixed saving of .wav files when it was disabled 2018-09-12 16:08:25 -04:00
Jordan Sherer f4ed9a9eac Fixed windows build 2018-09-12 11:56:38 -04:00
Jordan Sherer 71bf19b21c Bump to 0.6.1 2018-09-12 10:12:54 -04:00
Jordan Sherer 1181e68f27 Fixed highlighting when my call apprears in the band activity 2018-09-12 10:05:35 -04:00
Jordan Sherer 0722bdad52 Added application font name to button 2018-09-12 09:59:13 -04:00
Jordan Sherer 92c88f6c0a Moved notifications to a new configuration tab 2018-09-12 09:55:31 -04:00
Jordan Sherer 67a5f49ba2 Fixed installer icons 2018-09-12 09:29:24 -04:00
Jordan Sherer d715b1d534 Fixed band and call activity sorting when empty values are present 2018-09-12 09:04:22 -04:00
Jordan Sherer 23e378f977 Fixed QSY frequency offset of band and call activity 2018-09-11 23:03:44 -04:00
Jordan Sherer f27d664f61 Updated behavior of allcall to not respond automatically if we have a callsign selected 2018-09-11 19:04:54 -04:00
Jordan Sherer 16c665d199 Newline should remove block from cache 2018-09-11 18:58:33 -04:00
Jordan Sherer 0b11b1b1d3 Changed offset qsy to be a specific action. Clicking the tables no longer change your offset 2018-09-11 18:54:32 -04:00
Jordan Sherer e699d2e081 Fixed buffered messages from ages ago getting sent 2018-09-11 17:41:21 -04:00
Jordan Sherer 9f25842c79 Fixed message reply dialog to be non-modal 2018-09-11 13:35:29 -04:00
Jordan Sherer fddca6522e Added more sane defaults to tx watchdog. Fixed bug in relay disabled when no relay required 2018-09-11 11:20:17 -04:00
Jordan Sherer df0b06ccb7 Allow configuration for rig frequency changes during transmit 2018-09-11 10:52:07 -04:00
34 changed files with 709 additions and 369 deletions
+1
View File
@@ -306,6 +306,7 @@ set (wsjtx_CXXSRCS
varicode.cpp varicode.cpp
SelfDestructMessageBox.cpp SelfDestructMessageBox.cpp
messagereplydialog.cpp messagereplydialog.cpp
keyeater.cpp
APRSISClient.cpp APRSISClient.cpp
mainwindow.cpp mainwindow.cpp
Configuration.cpp Configuration.cpp
+78 -23
View File
@@ -473,7 +473,9 @@ private:
Q_SLOT void on_rxBackgroundButton_clicked(); Q_SLOT void on_rxBackgroundButton_clicked();
Q_SLOT void on_rxForegroundButton_clicked(); Q_SLOT void on_rxForegroundButton_clicked();
Q_SLOT void on_rxFontButton_clicked(); Q_SLOT void on_rxFontButton_clicked();
Q_SLOT void on_txBackgroundButton_clicked(); Q_SLOT void on_composeBackgroundButton_clicked();
Q_SLOT void on_composeForegroundButton_clicked();
Q_SLOT void on_composeFontButton_clicked();
Q_SLOT void on_txForegroundButton_clicked(); Q_SLOT void on_txForegroundButton_clicked();
Q_SLOT void on_txFontButton_clicked(); Q_SLOT void on_txFontButton_clicked();
@@ -519,6 +521,9 @@ private:
QFont tx_text_font_; QFont tx_text_font_;
QFont next_tx_text_font_; QFont next_tx_text_font_;
QFont compose_text_font_;
QFont next_compose_text_font_;
bool restart_sound_input_device_; bool restart_sound_input_device_;
bool restart_sound_output_device_; bool restart_sound_output_device_;
@@ -582,8 +587,10 @@ private:
QColor next_color_rx_background_; QColor next_color_rx_background_;
QColor color_rx_foreground_; QColor color_rx_foreground_;
QColor next_color_rx_foreground_; QColor next_color_rx_foreground_;
QColor color_tx_background_; QColor color_compose_background_;
QColor next_color_tx_background_; QColor next_color_compose_background_;
QColor color_compose_foreground_;
QColor next_color_compose_foreground_;
QColor color_tx_foreground_; QColor color_tx_foreground_;
QColor next_color_tx_foreground_; QColor next_color_tx_foreground_;
QColor color_DXCC_; QColor color_DXCC_;
@@ -597,7 +604,7 @@ private:
double degrade_; double degrade_;
double txDelay_; double txDelay_;
bool id_after_73_; bool id_after_73_;
bool tx_QSY_allowed_; bool tx_qsy_allowed_;
bool spot_to_reporting_networks_; bool spot_to_reporting_networks_;
bool transmit_directed_; bool transmit_directed_;
bool autoreply_off_at_startup_; bool autoreply_off_at_startup_;
@@ -695,13 +702,15 @@ QColor Configuration::color_CQ () const {return m_->color_cq_;}
QColor Configuration::color_MyCall () const {return m_->color_mycall_;} QColor Configuration::color_MyCall () const {return m_->color_mycall_;}
QColor Configuration::color_rx_background () const {return m_->color_rx_background_;} QColor Configuration::color_rx_background () const {return m_->color_rx_background_;}
QColor Configuration::color_rx_foreground () const {return m_->color_rx_foreground_;} QColor Configuration::color_rx_foreground () const {return m_->color_rx_foreground_;}
QColor Configuration::color_tx_background () const {return m_->color_tx_background_;}
QColor Configuration::color_tx_foreground () const {return m_->color_tx_foreground_;} QColor Configuration::color_tx_foreground () const {return m_->color_tx_foreground_;}
QColor Configuration::color_compose_background () const {return m_->color_compose_background_;}
QColor Configuration::color_compose_foreground () const {return m_->color_compose_foreground_;}
QColor Configuration::color_DXCC () const {return m_->color_DXCC_;} QColor Configuration::color_DXCC () const {return m_->color_DXCC_;}
QColor Configuration::color_NewCall () const {return m_->color_NewCall_;} QColor Configuration::color_NewCall () const {return m_->color_NewCall_;}
QFont Configuration::text_font () const {return m_->font_;} QFont Configuration::text_font () const {return m_->font_;}
QFont Configuration::rx_text_font () const {return m_->rx_text_font_;} QFont Configuration::rx_text_font () const {return m_->rx_text_font_;}
QFont Configuration::tx_text_font () const {return m_->tx_text_font_;} QFont Configuration::tx_text_font () const {return m_->tx_text_font_;}
QFont Configuration::compose_text_font () const {return m_->compose_text_font_;}
qint32 Configuration::id_interval () const {return m_->id_interval_;} qint32 Configuration::id_interval () const {return m_->id_interval_;}
qint32 Configuration::ntrials() const {return m_->ntrials_;} qint32 Configuration::ntrials() const {return m_->ntrials_;}
qint32 Configuration::aggressive() const {return m_->aggressive_;} qint32 Configuration::aggressive() const {return m_->aggressive_;}
@@ -709,7 +718,7 @@ double Configuration::degrade() const {return m_->degrade_;}
double Configuration::txDelay() const {return m_->txDelay_;} double Configuration::txDelay() const {return m_->txDelay_;}
qint32 Configuration::RxBandwidth() const {return m_->RxBandwidth_;} qint32 Configuration::RxBandwidth() const {return m_->RxBandwidth_;}
bool Configuration::id_after_73 () const {return m_->id_after_73_;} bool Configuration::id_after_73 () const {return m_->id_after_73_;}
bool Configuration::tx_QSY_allowed () const {return m_->tx_QSY_allowed_;} bool Configuration::tx_qsy_allowed () const {return m_->tx_qsy_allowed_;}
bool Configuration::spot_to_reporting_networks () const bool Configuration::spot_to_reporting_networks () const
{ {
// rig must be open and working to spot externally // rig must be open and working to spot externally
@@ -1275,9 +1284,9 @@ void Configuration::impl::initialize_models ()
ui_->labMyCall->setStyleSheet(QString("background: %1").arg(color_mycall_.name())); ui_->labMyCall->setStyleSheet(QString("background: %1").arg(color_mycall_.name()));
ui_->rxLabel->setStyleSheet(QString("background: %1").arg(color_rx_background_.name())); ui_->rxLabel->setStyleSheet(QString("background: %1").arg(color_rx_background_.name()));
ui_->txLabel->setStyleSheet(QString("background: %1").arg(color_tx_background_.name()));
ui_->rxForegroundLabel->setStyleSheet(QString("background: %1; color: %2").arg(color_rx_background_.name()).arg(color_rx_foreground_.name())); ui_->rxForegroundLabel->setStyleSheet(QString("background: %1; color: %2").arg(color_rx_background_.name()).arg(color_rx_foreground_.name()));
ui_->txForegroundLabel->setStyleSheet(QString("background: %1; color: %2").arg(color_rx_background_.name()).arg(color_tx_foreground_.name())); ui_->txForegroundLabel->setStyleSheet(QString("background: %1; color: %2").arg(color_rx_background_.name()).arg(color_tx_foreground_.name()));
ui_->composeLabel->setStyleSheet(QString("background: %1; color: %2").arg(color_compose_background_.name()).arg(color_compose_foreground_.name()));
ui_->CW_id_interval_spin_box->setValue (id_interval_); ui_->CW_id_interval_spin_box->setValue (id_interval_);
ui_->sbNtrials->setValue (ntrials_); ui_->sbNtrials->setValue (ntrials_);
@@ -1291,7 +1300,7 @@ void Configuration::impl::initialize_models ()
ui_->sound_dm_path_display_label->setText(sound_dm_path_); ui_->sound_dm_path_display_label->setText(sound_dm_path_);
ui_->sound_am_path_display_label->setText(sound_am_path_); ui_->sound_am_path_display_label->setText(sound_am_path_);
ui_->CW_id_after_73_check_box->setChecked (id_after_73_); ui_->CW_id_after_73_check_box->setChecked (id_after_73_);
ui_->tx_QSY_check_box->setChecked (tx_QSY_allowed_); ui_->tx_qsy_check_box->setChecked (tx_qsy_allowed_);
ui_->psk_reporter_check_box->setChecked (spot_to_reporting_networks_); ui_->psk_reporter_check_box->setChecked (spot_to_reporting_networks_);
ui_->transmit_directed_check_box->setChecked(transmit_directed_); ui_->transmit_directed_check_box->setChecked(transmit_directed_);
ui_->autoreply_off_check_box->setChecked (autoreply_off_at_startup_); ui_->autoreply_off_check_box->setChecked (autoreply_off_at_startup_);
@@ -1413,7 +1422,8 @@ void Configuration::impl::read_settings ()
next_color_mycall_ = color_mycall_ = settings_->value("colorMyCall","#ff6666").toString(); next_color_mycall_ = color_mycall_ = settings_->value("colorMyCall","#ff6666").toString();
next_color_rx_background_ = color_rx_background_ = settings_->value("color_rx_background","#ffeaa7").toString(); next_color_rx_background_ = color_rx_background_ = settings_->value("color_rx_background","#ffeaa7").toString();
next_color_rx_foreground_ = color_rx_foreground_ = settings_->value("color_rx_foreground","#000000").toString(); next_color_rx_foreground_ = color_rx_foreground_ = settings_->value("color_rx_foreground","#000000").toString();
next_color_tx_background_ = color_tx_background_ = settings_->value("color_tx_background","#ffffff").toString(); next_color_compose_background_ = color_compose_background_ = settings_->value("color_compose_background","#ffffff").toString();
next_color_compose_foreground_ = color_compose_foreground_ = settings_->value("color_compose_foreground","#000000").toString();
next_color_tx_foreground_ = color_tx_foreground_ = settings_->value("color_tx_foreground","#ff0000").toString(); next_color_tx_foreground_ = color_tx_foreground_ = settings_->value("color_tx_foreground","#ff0000").toString();
next_color_DXCC_ = color_DXCC_ = settings_->value("colorDXCC","#ff00ff").toString(); next_color_DXCC_ = color_DXCC_ = settings_->value("colorDXCC","#ff00ff").toString();
next_color_NewCall_ = color_NewCall_ = settings_->value("colorNewCall","#ffaaff").toString(); next_color_NewCall_ = color_NewCall_ = settings_->value("colorNewCall","#ffaaff").toString();
@@ -1428,6 +1438,7 @@ void Configuration::impl::read_settings ()
{ {
next_font_ = font_; next_font_ = font_;
} }
ui_->font_push_button->setText(QString("Application Font (%1 %2)").arg(next_font_.family()).arg(next_font_.pointSize()));
if (next_tx_text_font_.fromString (settings_->value ("TXTextFont", QGuiApplication::font ().toString ()).toString ()) if (next_tx_text_font_.fromString (settings_->value ("TXTextFont", QGuiApplication::font ().toString ()).toString ())
&& next_tx_text_font_ != tx_text_font_) && next_tx_text_font_ != tx_text_font_)
@@ -1455,6 +1466,19 @@ void Configuration::impl::read_settings ()
ui_->rxFontButton->setText(QString("Font (%1 %2)").arg(next_rx_text_font_.family()).arg(next_rx_text_font_.pointSize())); ui_->rxFontButton->setText(QString("Font (%1 %2)").arg(next_rx_text_font_.family()).arg(next_rx_text_font_.pointSize()));
if (next_compose_text_font_.fromString (settings_->value ("composeTextFont", QGuiApplication::font ().toString ()).toString ())
&& next_compose_text_font_ != compose_text_font_)
{
compose_text_font_ = next_compose_text_font_;
Q_EMIT self_->compose_text_font_changed (compose_text_font_);
}
else
{
next_compose_text_font_ = compose_text_font_;
}
ui_->composeFontButton->setText(QString("Font (%1 %2)").arg(next_compose_text_font_.family()).arg(next_compose_text_font_.pointSize()));
id_interval_ = settings_->value ("IDint", 0).toInt (); id_interval_ = settings_->value ("IDint", 0).toInt ();
ntrials_ = settings_->value ("nTrials", 6).toInt (); ntrials_ = settings_->value ("nTrials", 6).toInt ();
txDelay_ = settings_->value ("TxDelay",0.2).toDouble(); txDelay_ = settings_->value ("TxDelay",0.2).toDouble();
@@ -1530,7 +1554,7 @@ void Configuration::impl::read_settings ()
monitor_last_used_ = settings_->value ("MonitorLastUsed", false).toBool (); monitor_last_used_ = settings_->value ("MonitorLastUsed", false).toBool ();
spot_to_reporting_networks_ = settings_->value ("PSKReporter", true).toBool (); spot_to_reporting_networks_ = settings_->value ("PSKReporter", true).toBool ();
id_after_73_ = settings_->value ("After73", false).toBool (); id_after_73_ = settings_->value ("After73", false).toBool ();
tx_QSY_allowed_ = settings_->value ("TxQSYAllowed", false).toBool (); tx_qsy_allowed_ = settings_->value ("TxQSYAllowed", false).toBool ();
use_dynamic_info_ = settings_->value ("AutoGrid", false).toBool (); use_dynamic_info_ = settings_->value ("AutoGrid", false).toBool ();
auto loadedMacros = settings_->value ("Macros", QStringList {"TNX 73 GL"}).toStringList(); auto loadedMacros = settings_->value ("Macros", QStringList {"TNX 73 GL"}).toStringList();
@@ -1587,6 +1611,9 @@ void Configuration::impl::read_settings ()
disable_TX_on_73_ = settings_->value ("73TxDisable", false).toBool (); disable_TX_on_73_ = settings_->value ("73TxDisable", false).toBool ();
beacon_ = settings_->value ("TxBeacon", 30).toInt (); beacon_ = settings_->value ("TxBeacon", 30).toInt ();
watchdog_ = settings_->value ("TxWatchdog", 0).toInt (); watchdog_ = settings_->value ("TxWatchdog", 0).toInt ();
if(watchdog_){
watchdog_ = qMax(5, watchdog_);
}
TX_messages_ = settings_->value ("Tx2QSO", true).toBool (); TX_messages_ = settings_->value ("Tx2QSO", true).toBool ();
enable_VHF_features_ = settings_->value("VHFUHF",false).toBool (); enable_VHF_features_ = settings_->value("VHFUHF",false).toBool ();
decode_at_52s_ = settings_->value("Decode52",false).toBool (); decode_at_52s_ = settings_->value("Decode52",false).toBool ();
@@ -1634,7 +1661,8 @@ void Configuration::impl::write_settings ()
settings_->setValue("colorMyCall",color_mycall_); settings_->setValue("colorMyCall",color_mycall_);
settings_->setValue("color_rx_background",color_rx_background_); settings_->setValue("color_rx_background",color_rx_background_);
settings_->setValue("color_rx_foreground",color_rx_foreground_); settings_->setValue("color_rx_foreground",color_rx_foreground_);
settings_->setValue("color_tx_background",color_tx_background_); settings_->setValue("color_compose_background",color_compose_background_);
settings_->setValue("color_compose_foreground",color_compose_foreground_);
settings_->setValue("color_tx_foreground",color_tx_foreground_); settings_->setValue("color_tx_foreground",color_tx_foreground_);
settings_->setValue("colorDXCC",color_DXCC_); settings_->setValue("colorDXCC",color_DXCC_);
settings_->setValue("colorNewCall",color_NewCall_); settings_->setValue("colorNewCall",color_NewCall_);
@@ -1681,7 +1709,7 @@ void Configuration::impl::write_settings ()
settings_->setValue ("MonitorLastUsed", monitor_last_used_); settings_->setValue ("MonitorLastUsed", monitor_last_used_);
settings_->setValue ("PSKReporter", spot_to_reporting_networks_); settings_->setValue ("PSKReporter", spot_to_reporting_networks_);
settings_->setValue ("After73", id_after_73_); settings_->setValue ("After73", id_after_73_);
settings_->setValue ("TxQSYAllowed", tx_QSY_allowed_); settings_->setValue ("TxQSYAllowed", tx_qsy_allowed_);
settings_->setValue ("Macros", macros_.stringList ()); settings_->setValue ("Macros", macros_.stringList ());
settings_->setValue (versionedFrequenciesSettingsKey, QVariant::fromValue (frequencies_.frequency_list ())); settings_->setValue (versionedFrequenciesSettingsKey, QVariant::fromValue (frequencies_.frequency_list ()));
settings_->setValue ("stations", QVariant::fromValue (stations_.station_list ())); settings_->setValue ("stations", QVariant::fromValue (stations_.station_list ()));
@@ -2014,11 +2042,18 @@ void Configuration::impl::accept ()
Q_EMIT self_->rx_text_font_changed (rx_text_font_); Q_EMIT self_->rx_text_font_changed (rx_text_font_);
} }
if (next_compose_text_font_ != compose_text_font_)
{
compose_text_font_ = next_compose_text_font_;
Q_EMIT self_->compose_text_font_changed (compose_text_font_);
}
color_cq_ = next_color_cq_; color_cq_ = next_color_cq_;
color_mycall_ = next_color_mycall_; color_mycall_ = next_color_mycall_;
color_rx_background_ = next_color_rx_background_; color_rx_background_ = next_color_rx_background_;
color_rx_foreground_ = next_color_rx_foreground_; color_rx_foreground_ = next_color_rx_foreground_;
color_tx_background_ = next_color_tx_background_; color_compose_background_ = next_color_compose_background_;
color_compose_foreground_ = next_color_compose_foreground_;
color_tx_foreground_ = next_color_tx_foreground_; color_tx_foreground_ = next_color_tx_foreground_;
color_DXCC_ = next_color_DXCC_; color_DXCC_ = next_color_DXCC_;
color_NewCall_ = next_color_NewCall_; color_NewCall_ = next_color_NewCall_;
@@ -2120,7 +2155,7 @@ void Configuration::impl::accept ()
degrade_ = ui_->sbDegrade->value (); degrade_ = ui_->sbDegrade->value ();
RxBandwidth_ = ui_->sbBandwidth->value (); RxBandwidth_ = ui_->sbBandwidth->value ();
id_after_73_ = ui_->CW_id_after_73_check_box->isChecked (); id_after_73_ = ui_->CW_id_after_73_check_box->isChecked ();
tx_QSY_allowed_ = ui_->tx_QSY_check_box->isChecked (); tx_qsy_allowed_ = ui_->tx_qsy_check_box->isChecked ();
transmit_directed_ = ui_->transmit_directed_check_box->isChecked(); transmit_directed_ = ui_->transmit_directed_check_box->isChecked();
autoreply_off_at_startup_ = ui_->autoreply_off_check_box->isChecked (); autoreply_off_at_startup_ = ui_->autoreply_off_check_box->isChecked ();
relay_disabled_ = ui_->relay_disabled_check_box->isChecked(); relay_disabled_ = ui_->relay_disabled_check_box->isChecked();
@@ -2248,6 +2283,8 @@ void Configuration::impl::reject ()
void Configuration::impl::on_font_push_button_clicked () void Configuration::impl::on_font_push_button_clicked ()
{ {
next_font_ = QFontDialog::getFont (0, next_font_, this); next_font_ = QFontDialog::getFont (0, next_font_, this);
ui_->font_push_button->setText(QString("Application Font (%1 %2)").arg(next_font_.family()).arg(next_font_.pointSize()));
} }
QColor getColor(QColor initial, QWidget *parent, QString title){ QColor getColor(QColor initial, QWidget *parent, QString title){
@@ -2316,7 +2353,7 @@ void Configuration::impl::on_rxForegroundButton_clicked()
void Configuration::impl::on_rxFontButton_clicked () void Configuration::impl::on_rxFontButton_clicked ()
{ {
next_rx_text_font_ = QFontDialog::getFont (0, rx_text_font_ , this next_rx_text_font_ = QFontDialog::getFont (0, next_rx_text_font_ , this
, tr ("Font Chooser") , tr ("Font Chooser")
#if QT_VERSION >= 0x050201 #if QT_VERSION >= 0x050201
, 0 , 0
@@ -2325,15 +2362,23 @@ void Configuration::impl::on_rxFontButton_clicked ()
ui_->rxFontButton->setText(QString("Font (%1 %2)").arg(next_rx_text_font_.family()).arg(next_rx_text_font_.pointSize())); ui_->rxFontButton->setText(QString("Font (%1 %2)").arg(next_rx_text_font_.family()).arg(next_rx_text_font_.pointSize()));
} }
void Configuration::impl::on_txBackgroundButton_clicked() void Configuration::impl::on_composeBackgroundButton_clicked()
{ {
auto new_color = getColor(next_color_tx_background_, this, "Transmitted Messages Background Color"); auto new_color = getColor(next_color_compose_background_, this, "Compose Messages Background Color");
if (new_color.isValid ()) if (new_color.isValid ())
{ {
next_color_tx_background_ = new_color; next_color_compose_background_ = new_color;
ui_->txLabel->setStyleSheet(QString("background: %1").arg(next_color_tx_background_.name())); ui_->composeLabel->setStyleSheet(QString("background: %1; color: %2").arg(next_color_compose_background_.name()).arg(next_color_compose_foreground_.name()));
ui_->rxForegroundLabel->setStyleSheet(QString("background: %1; color: %2").arg(next_color_rx_background_.name()).arg(next_color_rx_foreground_.name())); }
ui_->txForegroundLabel->setStyleSheet(QString("background: %1; color: %2").arg(next_color_rx_background_.name()).arg(next_color_tx_foreground_.name())); }
void Configuration::impl::on_composeForegroundButton_clicked()
{
auto new_color = getColor(next_color_compose_foreground_, this, "Compose Messages Foreground Color");
if (new_color.isValid ())
{
next_color_compose_foreground_ = new_color;
ui_->composeLabel->setStyleSheet(QString("background: %1; color: %2").arg(next_color_compose_background_.name()).arg(next_color_compose_foreground_.name()));
} }
} }
@@ -2343,7 +2388,6 @@ void Configuration::impl::on_txForegroundButton_clicked()
if (new_color.isValid ()) if (new_color.isValid ())
{ {
next_color_tx_foreground_ = new_color; next_color_tx_foreground_ = new_color;
ui_->txLabel->setStyleSheet(QString("background: %1").arg(next_color_tx_background_.name()));
ui_->rxForegroundLabel->setStyleSheet(QString("background: %1; color: %2").arg(next_color_rx_background_.name()).arg(next_color_rx_foreground_.name())); ui_->rxForegroundLabel->setStyleSheet(QString("background: %1; color: %2").arg(next_color_rx_background_.name()).arg(next_color_rx_foreground_.name()));
ui_->txForegroundLabel->setStyleSheet(QString("background: %1; color: %2").arg(next_color_rx_background_.name()).arg(next_color_tx_foreground_.name())); ui_->txForegroundLabel->setStyleSheet(QString("background: %1; color: %2").arg(next_color_rx_background_.name()).arg(next_color_tx_foreground_.name()));
} }
@@ -2351,7 +2395,7 @@ void Configuration::impl::on_txForegroundButton_clicked()
void Configuration::impl::on_txFontButton_clicked () void Configuration::impl::on_txFontButton_clicked ()
{ {
next_tx_text_font_ = QFontDialog::getFont (0, tx_text_font_ , this next_tx_text_font_ = QFontDialog::getFont (0, next_tx_text_font_ , this
, tr ("Font Chooser") , tr ("Font Chooser")
#if QT_VERSION >= 0x050201 #if QT_VERSION >= 0x050201
, 0 , 0
@@ -2361,6 +2405,17 @@ void Configuration::impl::on_txFontButton_clicked ()
ui_->txFontButton->setText(QString("Font (%1 %2)").arg(next_tx_text_font_.family()).arg(next_tx_text_font_.pointSize())); ui_->txFontButton->setText(QString("Font (%1 %2)").arg(next_tx_text_font_.family()).arg(next_tx_text_font_.pointSize()));
} }
void Configuration::impl::on_composeFontButton_clicked ()
{
next_compose_text_font_ = QFontDialog::getFont (0, next_compose_text_font_ , this
, tr ("Font Chooser")
#if QT_VERSION >= 0x050201
, 0
#endif
);
ui_->composeFontButton->setText(QString("Font (%1 %2)").arg(next_compose_text_font_.family()).arg(next_compose_text_font_.pointSize()));
}
void Configuration::impl::on_PTT_port_combo_box_activated (int /* index */) void Configuration::impl::on_PTT_port_combo_box_activated (int /* index */)
{ {
set_rig_invariants (); set_rig_invariants ();
+5 -2
View File
@@ -106,6 +106,7 @@ public:
QFont text_font () const; QFont text_font () const;
QFont rx_text_font () const; QFont rx_text_font () const;
QFont tx_text_font () const; QFont tx_text_font () const;
QFont compose_text_font () const;
qint32 id_interval () const; qint32 id_interval () const;
qint32 ntrials() const; qint32 ntrials() const;
qint32 aggressive() const; qint32 aggressive() const;
@@ -113,7 +114,7 @@ public:
double degrade() const; double degrade() const;
double txDelay() const; double txDelay() const;
bool id_after_73 () const; bool id_after_73 () const;
bool tx_QSY_allowed () const; bool tx_qsy_allowed () const;
bool spot_to_reporting_networks () const; bool spot_to_reporting_networks () const;
void set_spot_to_reporting_networks (bool); void set_spot_to_reporting_networks (bool);
bool transmit_directed() const; bool transmit_directed() const;
@@ -184,8 +185,9 @@ public:
QColor color_MyCall () const; QColor color_MyCall () const;
QColor color_rx_background () const; QColor color_rx_background () const;
QColor color_rx_foreground () const; QColor color_rx_foreground () const;
QColor color_tx_background () const;
QColor color_tx_foreground () const; QColor color_tx_foreground () const;
QColor color_compose_background () const;
QColor color_compose_foreground () const;
QColor color_DXCC () const; QColor color_DXCC () const;
QColor color_NewCall () const; QColor color_NewCall () const;
bool pwrBandTxMemory () const; bool pwrBandTxMemory () const;
@@ -281,6 +283,7 @@ public:
Q_SIGNAL void gui_text_font_changed (QFont); Q_SIGNAL void gui_text_font_changed (QFont);
Q_SIGNAL void tx_text_font_changed (QFont); Q_SIGNAL void tx_text_font_changed (QFont);
Q_SIGNAL void rx_text_font_changed (QFont); Q_SIGNAL void rx_text_font_changed (QFont);
Q_SIGNAL void compose_text_font_changed (QFont);
Q_SIGNAL void colors_changed (); Q_SIGNAL void colors_changed ();
// //
+296 -192
View File
@@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>692</width> <width>692</width>
<height>706</height> <height>735</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@@ -359,7 +359,7 @@
<item> <item>
<widget class="QCheckBox" name="relay_disabled_check_box"> <widget class="QCheckBox" name="relay_disabled_check_box">
<property name="text"> <property name="text">
<string>Disable message passing (&gt;) when AUTO is enabled</string> <string>Disable message relay (&gt;) when AUTO is enabled</string>
</property> </property>
</widget> </widget>
</item> </item>
@@ -390,13 +390,17 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QCheckBox" name="tx_QSY_check_box"> <widget class="QCheckBox" name="transmit_directed_check_box">
<property name="text">
<string>Immediately transmit directed responses from the menu</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="tx_qsy_check_box">
<property name="enabled"> <property name="enabled">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="visible">
<bool>false</bool>
</property>
<property name="toolTip"> <property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Some rigs are not able to process CAT commands while transmitting. This means that if you are operating in split mode you may have to uncheck this option.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string> <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Some rigs are not able to process CAT commands while transmitting. This means that if you are operating in split mode you may have to uncheck this option.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property> </property>
@@ -405,13 +409,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QCheckBox" name="transmit_directed_check_box">
<property name="text">
<string>Immediately transmit directed responses from the menu</string>
</property>
</widget>
</item>
<item> <item>
<widget class="QCheckBox" name="single_decode_check_box"> <widget class="QCheckBox" name="single_decode_check_box">
<property name="enabled"> <property name="enabled">
@@ -574,6 +571,9 @@
<property name="prefix"> <property name="prefix">
<string/> <string/>
</property> </property>
<property name="singleStep">
<number>5</number>
</property>
<property name="value"> <property name="value">
<number>0</number> <number>0</number>
</property> </property>
@@ -1797,95 +1797,6 @@ both here.</string>
</layout> </layout>
</widget> </widget>
</item> </item>
<item>
<widget class="QGroupBox" name="groupBox_13">
<property name="title">
<string>Notification Sounds</string>
</property>
<layout class="QGridLayout" name="gridLayout_18">
<item row="1" column="0">
<widget class="QLabel" name="sound_dm_path_label">
<property name="text">
<string>Directed Message Received:</string>
</property>
<property name="buddy">
<cstring>azel_path_select_push_button</cstring>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="sound_dm_path_display_label">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(255, 255, 255);</string>
</property>
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QPushButton" name="sound_dm_path_select_push_button">
<property name="text">
<string>Select</string>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QPushButton" name="sound_dm_path_reset_push_button">
<property name="text">
<string>Clear</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="sound_am_path_label">
<property name="text">
<string>Alert Message Received:</string>
</property>
<property name="buddy">
<cstring>azel_path_select_push_button</cstring>
</property>
</widget>
</item>
<item row="2" column="2">
<widget class="QPushButton" name="sound_am_path_select_push_button">
<property name="text">
<string>Select</string>
</property>
</widget>
</item>
<item row="2" column="3">
<widget class="QPushButton" name="sound_am_path_reset_push_button">
<property name="text">
<string>Clear</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QLabel" name="sound_am_path_display_label">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(255, 255, 255);</string>
</property>
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item> <item>
<widget class="QGroupBox" name="split_operation_group_box_2"> <widget class="QGroupBox" name="split_operation_group_box_2">
<property name="toolTip"> <property name="toolTip">
@@ -2661,6 +2572,142 @@ Right click for insert and delete options.</string>
</item> </item>
</layout> </layout>
</widget> </widget>
<widget class="QWidget" name="tab">
<attribute name="title">
<string>Notifications</string>
</attribute>
<layout class="QVBoxLayout" name="verticalLayout_16">
<item>
<widget class="QGroupBox" name="groupBox_13">
<property name="title">
<string>Notification Sounds</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_17">
<item>
<widget class="QWidget" name="widget_2" native="true">
<layout class="QGridLayout" name="gridLayout_19">
<property name="leftMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<item row="0" column="0">
<widget class="QLabel" name="sound_dm_path_label">
<property name="text">
<string>Directed Message Received:</string>
</property>
<property name="buddy">
<cstring>azel_path_select_push_button</cstring>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="sound_dm_path_display_label">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(255, 255, 255);</string>
</property>
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QPushButton" name="sound_dm_path_select_push_button">
<property name="text">
<string>Select</string>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QPushButton" name="sound_dm_path_reset_push_button">
<property name="text">
<string>Clear</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="sound_am_path_label">
<property name="text">
<string>Reply Message Received:</string>
</property>
<property name="buddy">
<cstring>azel_path_select_push_button</cstring>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="sound_am_path_display_label">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="styleSheet">
<string notr="true">background-color: rgb(255, 255, 255);</string>
</property>
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QPushButton" name="sound_am_path_select_push_button">
<property name="text">
<string>Select</string>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QPushButton" name="sound_am_path_reset_push_button">
<property name="text">
<string>Clear</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QLabel" name="label_20">
<property name="font">
<font>
<italic>true</italic>
</font>
</property>
<property name="text">
<string>Notification sounds are played over the default system soundcard. Special care must be taken while using VOX to ensure notification sounds are not transmitted.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<spacer name="verticalSpacer_6">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
<widget class="QWidget" name="colors_tab"> <widget class="QWidget" name="colors_tab">
<attribute name="title"> <attribute name="title">
<string>UI</string> <string>UI</string>
@@ -2700,7 +2747,7 @@ Right click for insert and delete options.</string>
<item> <item>
<widget class="QGroupBox" name="groupBox_9"> <widget class="QGroupBox" name="groupBox_9">
<property name="title"> <property name="title">
<string>Band Activity Background</string> <string>Band Activity Background:</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_15"> <layout class="QGridLayout" name="gridLayout_15">
<item row="0" column="0"> <item row="0" column="0">
@@ -2771,12 +2818,55 @@ Right click for insert and delete options.</string>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QGroupBox" name="groupBox_12"> <widget class="QGroupBox" name="groupBox_8">
<property name="title"> <property name="title">
<string>Message Background</string> <string>Messages:</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_13"> <layout class="QGridLayout" name="gridLayout_8">
<item row="0" column="0"> <item row="6" column="1">
<widget class="QPushButton" name="rxFontButton">
<property name="text">
<string>Font</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QPushButton" name="rxBackgroundButton">
<property name="enabled">
<bool>true</bool>
</property>
<property name="minimumSize">
<size>
<width>140</width>
<height>0</height>
</size>
</property>
<property name="text">
<string>Textbox Color</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QPushButton" name="rxForegroundButton">
<property name="text">
<string>Foreground Color</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="rxForegroundLabel">
<property name="styleSheet">
<string notr="true">QLabel{background-color: #ffeaa7}</string>
</property>
<property name="text">
<string>K1ABC</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="rxLabel"> <widget class="QLabel" name="rxLabel">
<property name="enabled"> <property name="enabled">
<bool>true</bool> <bool>true</bool>
@@ -2798,24 +2888,98 @@ Right click for insert and delete options.</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="1"> <item row="9" column="0">
<widget class="QPushButton" name="rxBackgroundButton"> <widget class="QLabel" name="txForegroundLabel">
<property name="enabled"> <property name="styleSheet">
<bool>true</bool> <string notr="true">QLabel{background-color: #ffeaa7}</string>
</property>
<property name="minimumSize">
<size>
<width>140</width>
<height>0</height>
</size>
</property> </property>
<property name="text"> <property name="text">
<string>Receive Background Color</string> <string>K1ABC</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="0"> <item row="8" column="0">
<widget class="QLabel" name="txLabel"> <widget class="QLabel" name="label_22">
<property name="text">
<string>Transmitted:</string>
</property>
</widget>
</item>
<item row="10" column="1">
<widget class="QPushButton" name="txFontButton">
<property name="text">
<string>Font</string>
</property>
</widget>
</item>
<item row="9" column="1">
<widget class="QPushButton" name="txForegroundButton">
<property name="text">
<string>Foreground Color</string>
</property>
</widget>
</item>
<item row="7" column="1">
<spacer name="verticalSpacer_10">
<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="4" column="0">
<widget class="QLabel" name="label_21">
<property name="text">
<string>Received:</string>
</property>
</widget>
</item>
<item row="2" column="1">
<spacer name="verticalSpacer_9">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_14">
<property name="title">
<string>Message Composition:</string>
</property>
<layout class="QGridLayout" name="gridLayout_18">
<item row="0" column="1">
<widget class="QPushButton" name="composeBackgroundButton">
<property name="text">
<string> Textbox Color</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QPushButton" name="composeFontButton">
<property name="text">
<string>Font</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="composeLabel">
<property name="enabled"> <property name="enabled">
<bool>true</bool> <bool>true</bool>
</property> </property>
@@ -2836,84 +3000,25 @@ Right click for insert and delete options.</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="1">
<widget class="QPushButton" name="txBackgroundButton">
<property name="text">
<string>Transmit Background Color</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_8">
<property name="title">
<string>Messages Received</string>
</property>
<layout class="QGridLayout" name="gridLayout_8">
<item row="3" column="1">
<widget class="QPushButton" name="rxFontButton">
<property name="text">
<string>Font</string>
</property>
</widget>
</item>
<item row="2" column="1"> <item row="2" column="1">
<widget class="QPushButton" name="rxForegroundButton"> <widget class="QPushButton" name="composeForegroundButton">
<property name="text"> <property name="text">
<string>Foreground Color</string> <string>Foreground Color</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="0">
<widget class="QLabel" name="rxForegroundLabel">
<property name="styleSheet">
<string notr="true">QLabel{background-color: #ffeaa7}</string>
</property>
<property name="text">
<string>K1ABC</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_11">
<property name="title">
<string>Messages Transmitted</string>
</property>
<layout class="QGridLayout" name="gridLayout_5">
<item row="1" column="1"> <item row="1" column="1">
<widget class="QPushButton" name="txForegroundButton"> <spacer name="verticalSpacer_12">
<property name="text"> <property name="orientation">
<string>Foreground Color</string> <enum>Qt::Vertical</enum>
</property> </property>
</widget> <property name="sizeHint" stdset="0">
</item> <size>
<item row="3" column="1"> <width>20</width>
<widget class="QPushButton" name="txFontButton"> <height>40</height>
<property name="text"> </size>
<string>Font</string>
</property> </property>
</widget> </spacer>
</item>
<item row="1" column="0">
<widget class="QLabel" name="txForegroundLabel">
<property name="styleSheet">
<string notr="true">QLabel{background-color: #ffeaa7}</string>
</property>
<property name="text">
<string>K1ABC</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
</widget>
</item> </item>
</layout> </layout>
</widget> </widget>
@@ -3241,7 +3346,6 @@ soundcard changes</string>
<tabstop>tx_watchdog_spin_box</tabstop> <tabstop>tx_watchdog_spin_box</tabstop>
<tabstop>CW_id_after_73_check_box</tabstop> <tabstop>CW_id_after_73_check_box</tabstop>
<tabstop>enable_VHF_features_check_box</tabstop> <tabstop>enable_VHF_features_check_box</tabstop>
<tabstop>tx_QSY_check_box</tabstop>
<tabstop>single_decode_check_box</tabstop> <tabstop>single_decode_check_box</tabstop>
<tabstop>decode_at_52s_check_box</tabstop> <tabstop>decode_at_52s_check_box</tabstop>
<tabstop>CW_id_interval_spin_box</tabstop> <tabstop>CW_id_interval_spin_box</tabstop>
@@ -3372,11 +3476,11 @@ soundcard changes</string>
</connection> </connection>
</connections> </connections>
<buttongroups> <buttongroups>
<buttongroup name="TX_audio_source_button_group"/>
<buttongroup name="PTT_method_button_group"/> <buttongroup name="PTT_method_button_group"/>
<buttongroup name="split_mode_button_group"/>
<buttongroup name="CAT_data_bits_button_group"/> <buttongroup name="CAT_data_bits_button_group"/>
<buttongroup name="CAT_stop_bits_button_group"/> <buttongroup name="CAT_stop_bits_button_group"/>
<buttongroup name="TX_audio_source_button_group"/>
<buttongroup name="split_mode_button_group"/>
<buttongroup name="TX_mode_button_group"/> <buttongroup name="TX_mode_button_group"/>
<buttongroup name="CAT_handshake_button_group"/> <buttongroup name="CAT_handshake_button_group"/>
</buttongroups> </buttongroups>
+1 -1
View File
@@ -1 +1 @@
IDI_ICON1 ICON DISCARDABLE "../icons/windows-icons/wsjtx.ico" IDI_ICON1 ICON DISCARDABLE "../icons/windows-icons/ft8call.ico"
+1 -1
View File
@@ -1 +1 @@
IDI_ICON1 ICON DISCARDABLE "../icons/windows-icons/wsjtx.ico" IDI_ICON1 ICON DISCARDABLE "../icons/windows-icons/ft8call.ico"
+1 -1
View File
@@ -1,6 +1,6 @@
# Version number components # Version number components
set (WSJTX_VERSION_MAJOR 0) set (WSJTX_VERSION_MAJOR 0)
set (WSJTX_VERSION_MINOR 6) set (WSJTX_VERSION_MINOR 6)
set (WSJTX_VERSION_PATCH 0) set (WSJTX_VERSION_PATCH 1)
set (WSJTX_RC 0) # release candidate number, comment out or zero for development versions set (WSJTX_RC 0) # release candidate number, comment out or zero for development versions
set (WSJTX_VERSION_IS_RELEASE 0) # set to 1 for final release build set (WSJTX_VERSION_IS_RELEASE 0) # set to 1 for final release build
@@ -15,9 +15,6 @@
viewBox="0 0 714.37498 270.93334" viewBox="0 0 714.37498 270.93334"
version="1.1" version="1.1"
id="svg16" id="svg16"
inkscape:export-filename="/home/jordan/bitmap.png"
inkscape:export-xdpi="300.06662"
inkscape:export-ydpi="300.06662"
inkscape:version="0.92.3 (2405546, 2018-03-11)" inkscape:version="0.92.3 (2405546, 2018-03-11)"
sodipodi:docname="icon_1024.svg"> sodipodi:docname="icon_1024.svg">
<defs <defs

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

+3 -2
View File
@@ -29,8 +29,9 @@ convert '/tmp/image-%d.png[0-1]' -background transparent \
rm /tmp/image-0.png /tmp/image-1.png rm /tmp/image-0.png /tmp/image-1.png
identify -format '%f %p/%n %m %C/%Q %r %G %A %z\n' ../icons/windows-icons/ft8call.ico identify -format '%f %p/%n %m %C/%Q %r %G %A %z\n' ../icons/windows-icons/ft8call.ico
# #
inkscape -z -e /dev/stdout -w 150 -h 57 -b white installer_logo.svg | tail -n +4 | \ #inkscape -z -e /dev/stdout -w 150 -h 57 -b white installer_logo.svg | tail -n +4 | \
convert png:- -resize 150x57 +matte BMP3:../icons/windows-icons/installer_logo.bmp # convert png:- -resize 150x57 +matte BMP3:../icons/windows-icons/installer_logo.bmp
convert png:installer_logo.svg.png -resize 150x57 +matte BMP3:../icons/windows-icons/installer_logo.bmp
identify -format '%f %p/%n %m %C/%Q %r %G %A %z\n' ../icons/windows-icons/installer_logo.bmp identify -format '%f %p/%n %m %C/%Q %r %G %A %z\n' ../icons/windows-icons/installer_logo.bmp
# #
Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 571 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 282 KiB

+29
View File
@@ -0,0 +1,29 @@
#include "keyeater.h"
bool EscapeKeyPressEater::eventFilter(QObject *obj, QEvent *event){
if (event->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
if(keyEvent->key() == Qt::Key_Escape){
return true;
}
}
// standard event processing
return QObject::eventFilter(obj, event);
}
bool EnterKeyPressEater::eventFilter(QObject *obj, QEvent *event){
if (event->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
if(keyEvent->key() == Qt::Key_Enter || keyEvent->key() == Qt::Key_Return){
bool processed = false;
emit this->enterKeyPressed(obj, keyEvent, &processed);
if(processed){
return true;
}
}
}
// standard event processing
return QObject::eventFilter(obj, event);
}
+33
View File
@@ -0,0 +1,33 @@
#ifndef KEYEATER_H
#define KEYEATER_H
#include <QObject>
#include <QKeyEvent>
class EscapeKeyPressEater : public QObject
{
Q_OBJECT
public:
EscapeKeyPressEater(){}
virtual ~EscapeKeyPressEater(){}
protected:
bool eventFilter(QObject *obj, QEvent *event);
};
class EnterKeyPressEater : public QObject
{
Q_OBJECT
public:
EnterKeyPressEater(){}
virtual ~EnterKeyPressEater(){}
protected:
bool eventFilter(QObject *obj, QEvent *event);
public:
Q_SIGNAL void enterKeyPressed(QObject *obj, QKeyEvent *evt, bool *pProcessed);
};
#endif // KEYEATER_H
+227 -88
View File
@@ -170,7 +170,7 @@ QVector<QColor> g_ColorTbl;
namespace namespace
{ {
Radio::Frequency constexpr default_frequency {14078500}; Radio::Frequency constexpr default_frequency {14078000};
QRegExp message_alphabet {"[^\\x00-\\x1F]*"}; // base alphabet supported by FT8CALL QRegExp message_alphabet {"[^\\x00-\\x1F]*"}; // base alphabet supported by FT8CALL
@@ -304,10 +304,46 @@ namespace
edit->updateGeometry(); edit->updateGeometry();
} }
void setTextEditBackground(QTextEdit *edit, QColor color){ void setTextEditColors(QTextEdit *edit, QColor fg, QColor bg){
edit->setStyleSheet(QString("QTextEdit{ background: %1 }").arg(color.name())); edit->setStyleSheet(QString("QTextEdit { color:%1; background: %2 }").arg(fg.name()).arg(bg.name()));
QTimer::singleShot(10, nullptr, [edit, fg, bg](){
QPalette p = edit->palette();
p.setColor(QPalette::Base, bg);
p.setColor(QPalette::Active, QPalette::Base, bg);
p.setColor(QPalette::Disabled, QPalette::Base, bg);
p.setColor(QPalette::Inactive, QPalette::Base, bg);
p.setColor(QPalette::Text, fg);
p.setColor(QPalette::Active, QPalette::Text, fg);
p.setColor(QPalette::Disabled, QPalette::Text, fg);
p.setColor(QPalette::Inactive, QPalette::Text, fg);
edit->setBackgroundRole(QPalette::Base);
edit->setForegroundRole(QPalette::Text);
edit->setPalette(p);
edit->updateGeometry();
edit->update();
});
} }
/*
void setTextEditForeground(QTextEdit *edit, QColor color){
QTimer::singleShot(20, nullptr, [edit, color](){
QPalette p = edit->palette();
p.setColor(QPalette::Text, color);
p.setColor(QPalette::Active, QPalette::Text, color);
p.setColor(QPalette::Disabled, QPalette::Text, color);
p.setColor(QPalette::Inactive, QPalette::Text, color);
edit->setPalette(p);
edit->updateGeometry();
edit->update();
});
}
*/
void highlightBlock(QTextBlock block, QFont font, QColor foreground, QColor background){ void highlightBlock(QTextBlock block, QFont font, QColor foreground, QColor background){
QTextCursor cursor(block); QTextCursor cursor(block);
@@ -695,12 +731,12 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
connect (&m_config, &Configuration::rx_text_font_changed, [this] (QFont const&) { connect (&m_config, &Configuration::rx_text_font_changed, [this] (QFont const&) {
setTextEditFont(ui->textEditRX, m_config.rx_text_font()); setTextEditFont(ui->textEditRX, m_config.rx_text_font());
}); });
connect (&m_config, &Configuration::tx_text_font_changed, [this] (QFont const&) { connect (&m_config, &Configuration::compose_text_font_changed, [this] (QFont const&) {
setTextEditFont(ui->extFreeTextMsgEdit, m_config.tx_text_font()); setTextEditFont(ui->extFreeTextMsgEdit, m_config.compose_text_font());
}); });
connect (&m_config, &Configuration::colors_changed, [this](){ connect (&m_config, &Configuration::colors_changed, [this](){
setTextEditBackground(ui->textEditRX, m_config.color_rx_background()); setTextEditColors(ui->textEditRX, m_config.color_rx_foreground(), m_config.color_rx_background());
setTextEditBackground(ui->extFreeTextMsgEdit, m_config.color_tx_background()); setTextEditColors(ui->extFreeTextMsgEdit, m_config.color_compose_foreground(), m_config.color_compose_background());
// rehighlight // rehighlight
auto d = ui->textEditRX->document(); auto d = ui->textEditRX->document();
@@ -1219,6 +1255,14 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
selectedOffset = selectedItems.first()->text().toInt(); selectedOffset = selectedItems.first()->text().toInt();
} }
if(selectedOffset != -1){
auto qsyAction = menu->addAction(QString("Jump to %1Hz").arg(selectedOffset));
connect(qsyAction, &QAction::triggered, this, [this, selectedOffset](){
setFreqOffsetForRestore(selectedOffset, true);
});
menu->addSeparator();
}
menu->addAction(logAction); menu->addAction(logAction);
logAction->setDisabled(missingCallsign); logAction->setDisabled(missingCallsign);
@@ -1231,9 +1275,9 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
relayAction->setDisabled(missingCallsign); relayAction->setDisabled(missingCallsign);
menu->addActions({ relayAction }); menu->addActions({ relayAction });
auto deselect = menu->addAction("Deselect"); auto deselectAction = menu->addAction(QString("Deselect %1").arg(selectedCall));
deselect->setDisabled(missingCallsign); deselectAction->setDisabled(missingCallsign);
connect(deselect, &QAction::triggered, this, [this](){ connect(deselectAction, &QAction::triggered, this, [this](){
ui->tableWidgetRXAll->clearSelection(); ui->tableWidgetRXAll->clearSelection();
ui->tableWidgetCalls->clearSelection(); ui->tableWidgetCalls->clearSelection();
}); });
@@ -1281,8 +1325,16 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
QString selectedCall = callsignSelected(); QString selectedCall = callsignSelected();
bool isAllCall = isAllCallIncluded(selectedCall); bool isAllCall = isAllCallIncluded(selectedCall);
bool missingCallsign = selectedCall.isEmpty(); bool missingCallsign = selectedCall.isEmpty();
if(!missingCallsign && m_callActivity.contains(selectedCall)){
setFreqOffsetForRestore(m_callActivity[selectedCall].freq, true); if(!missingCallsign && !isAllCall){
int selectedOffset = m_callActivity[selectedCall].freq;
if(selectedOffset != -1){
auto qsyAction = menu->addAction(QString("Jump to %1Hz...").arg(selectedOffset));
connect(qsyAction, &QAction::triggered, this, [this, selectedOffset](){
setFreqOffsetForRestore(selectedOffset, true);
});
menu->addSeparator();
}
} }
menu->addAction(logAction); menu->addAction(logAction);
@@ -1297,7 +1349,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
relayAction->setDisabled(missingCallsign || isAllCall); relayAction->setDisabled(missingCallsign || isAllCall);
menu->addActions({ relayAction }); menu->addActions({ relayAction });
auto deselect = menu->addAction("Deselect"); auto deselect = menu->addAction(QString("Deselect %1").arg(selectedCall));
deselect->setDisabled(missingCallsign); deselect->setDisabled(missingCallsign);
connect(deselect, &QAction::triggered, this, [this](){ connect(deselect, &QAction::triggered, this, [this](){
ui->tableWidgetRXAll->clearSelection(); ui->tableWidgetRXAll->clearSelection();
@@ -1343,6 +1395,17 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
displayActivity(true); displayActivity(true);
/*
QTimer::singleShot(1000, this, [this](){
QPalette p;
p.setBrush(QPalette::Text, QColor(Qt::red));
p.setColor(QPalette::Text, QColor(Qt::red));
ui->extFreeTextMsgEdit->setPalette(p);
ui->extFreeTextMsgEdit->updateGeometry();
ui->extFreeTextMsgEdit->update();
});
*/
QTimer::singleShot(0, this, &MainWindow::initializeDummyData); QTimer::singleShot(0, this, &MainWindow::initializeDummyData);
// this must be the last statement of constructor // this must be the last statement of constructor
@@ -1400,12 +1463,29 @@ void MainWindow::initializeDummyData(){
foreach(auto call, calls){ foreach(auto call, calls){
CallDetail cd = {}; CallDetail cd = {};
cd.call = call; cd.call = call;
cd.snr = i++; cd.freq = 500 + 100*i;
cd.snr = i == 3 ? -100 : i;
cd.utcTimestamp = dt; cd.utcTimestamp = dt;
cd.grid = i == 5 ? "J042" : i == 6 ? "FN42" : "";
logCallActivity(cd, false); logCallActivity(cd, false);
ActivityDetail ad = {};
ad.snr = i == 3 ? -100 : i;
ad.freq = 500 + 100*i;
ad.text = QString("%1: %2 TEST").arg(call).arg(m_config.my_callsign());
ad.utcTimestamp = dt;
m_bandActivity[500+100*i] = { ad };
i++;
} }
displayActivity(true); displayActivity(true);
QTimer::singleShot(10000, this, [this](){
tx_watchdog(true);
});
} }
void MainWindow::initialize_fonts () void MainWindow::initialize_fonts ()
@@ -1697,9 +1777,12 @@ void MainWindow::readSettings()
m_modeTx=m_settings->value("ModeTx","JT9").toString(); m_modeTx=m_settings->value("ModeTx","JT9").toString();
if(m_modeTx.mid(0,3)=="JT9") ui->pbTxMode->setText("Tx JT9 @"); if(m_modeTx.mid(0,3)=="JT9") ui->pbTxMode->setText("Tx JT9 @");
if(m_modeTx=="JT65") ui->pbTxMode->setText("Tx JT65 #"); if(m_modeTx=="JT65") ui->pbTxMode->setText("Tx JT65 #");
ui->actionNone->setChecked(m_settings->value("SaveNone",true).toBool());
ui->actionSave_decoded->setChecked(m_settings->value("SaveDecoded",false).toBool()); // these save settings should never be enabled unless specifically called out by the user for every session.
ui->actionSave_all->setChecked(m_settings->value("SaveAll",false).toBool()); ui->actionNone->setChecked(true);
ui->actionSave_decoded->setChecked(false);
ui->actionSave_all->setChecked(false);
ui->RxFreqSpinBox->setValue(0); // ensure a change is signaled ui->RxFreqSpinBox->setValue(0); // ensure a change is signaled
ui->RxFreqSpinBox->setValue(m_settings->value("RxFreq",1500).toInt()); ui->RxFreqSpinBox->setValue(m_settings->value("RxFreq",1500).toInt());
m_nSubMode=m_settings->value("SubMode",0).toInt(); m_nSubMode=m_settings->value("SubMode",0).toInt();
@@ -1753,7 +1836,10 @@ void MainWindow::readSettings()
//ui->bandHorizontalWidget->setGeometry( m_settings->value("PanelWaterfallGeometry", ui->bandHorizontalWidget->geometry()).toRect()); //ui->bandHorizontalWidget->setGeometry( m_settings->value("PanelWaterfallGeometry", ui->bandHorizontalWidget->geometry()).toRect());
//qDebug() << m_settings->value("PanelTopGeometry") << ui->extFreeTextMsg; //qDebug() << m_settings->value("PanelTopGeometry") << ui->extFreeTextMsg;
ui->textEditRX->setStyleSheet(QString("QTextEdit { background: %1 }").arg(m_config.color_rx_background().name())); setTextEditColors(ui->textEditRX, m_config.color_rx_foreground(), m_config.color_rx_background());
setTextEditColors(ui->extFreeTextMsgEdit, m_config.color_compose_foreground(), m_config.color_compose_background());
{ {
auto const& coeffs = m_settings->value ("PhaseEqualizationCoefficients" auto const& coeffs = m_settings->value ("PhaseEqualizationCoefficients"
@@ -1968,11 +2054,15 @@ void MainWindow::dataSink(qint64 frames)
} }
m_fileToSave.clear (); m_fileToSave.clear ();
if(m_saveAll or m_bAltV or (m_bDecoded and m_saveDecoded) or (m_mode!="MSK144" and m_mode!="FT8")) {
m_bAltV=false;
// the following is potential a threading hazard - not a good // the following is potential a threading hazard - not a good
// idea to pass pointer to be processed in another thread // idea to pass pointer to be processed in another thread
m_saveWAVWatcher.setFuture (QtConcurrent::run (std::bind (&MainWindow::save_wave_file, m_saveWAVWatcher.setFuture (QtConcurrent::run (std::bind (&MainWindow::save_wave_file,
this, m_fnameWE, &dec_data.d2[0], m_TRperiod, m_config.my_callsign(), this, m_fnameWE, &dec_data.d2[0], m_TRperiod, m_config.my_callsign(),
m_config.my_grid(), m_mode, m_nSubMode, m_freqNominal, m_hisCall, m_hisGrid))); m_config.my_grid(), m_mode, m_nSubMode, m_freqNominal, m_hisCall, m_hisGrid)));
}
if (m_mode=="WSPR") { if (m_mode=="WSPR") {
QString c2name_string {m_fnameWE + ".c2"}; QString c2name_string {m_fnameWE + ".c2"};
int len1=c2name_string.length(); int len1=c2name_string.length();
@@ -2063,6 +2153,7 @@ QString MainWindow::save_wave_file (QString const& name, short const * data, int
{{{'I','C','M','T'}}, comment.toLocal8Bit ()}, {{{'I','C','M','T'}}, comment.toLocal8Bit ()},
}; };
auto file_name = name + ".wav"; auto file_name = name + ".wav";
qDebug() << "saving" << file_name;
BWFFile wav {format, file_name, list_info}; BWFFile wav {format, file_name, list_info};
if (!wav.open (BWFFile::WriteOnly) if (!wav.open (BWFFile::WriteOnly)
|| 0 > wav.write (reinterpret_cast<char const *> (data) || 0 > wav.write (reinterpret_cast<char const *> (data)
@@ -2175,7 +2266,7 @@ void MainWindow::fastSink(qint64 frames)
auto const& period_start = now.addSecs (-n); auto const& period_start = now.addSecs (-n);
m_fnameWE = m_config.save_directory ().absoluteFilePath (period_start.toString ("yyMMdd_hhmmss")); m_fnameWE = m_config.save_directory ().absoluteFilePath (period_start.toString ("yyMMdd_hhmmss"));
m_fileToSave.clear (); m_fileToSave.clear ();
if(m_saveAll or m_bAltV or (m_bDecoded and m_saveDecoded) or (m_mode!="MSK144")) { if(m_saveAll or m_bAltV or (m_bDecoded and m_saveDecoded) or (m_mode!="MSK144" and m_mode!="FT8")) {
m_bAltV=false; m_bAltV=false;
// the following is potential a threading hazard - not a good // the following is potential a threading hazard - not a good
// idea to pass pointer to be processed in another thread // idea to pass pointer to be processed in another thread
@@ -3086,7 +3177,7 @@ void MainWindow::diskDat() //diskDat()
void MainWindow::on_actionDelete_all_wav_files_in_SaveDir_triggered() void MainWindow::on_actionDelete_all_wav_files_in_SaveDir_triggered()
{ {
auto button = MessageBox::query_message (this, tr ("Confirm Delete"), auto button = MessageBox::query_message (this, tr ("Confirm Delete"),
tr ("Are you sure you want to delete all *.wav and *.c2 files in \"%1\"?") tr ("Are you sure you want to delete all *.wav files in \"%1\"?")
.arg (QDir::toNativeSeparators (m_config.save_directory ().absolutePath ()))); .arg (QDir::toNativeSeparators (m_config.save_directory ().absolutePath ())));
if (MessageBox::Yes == button) { if (MessageBox::Yes == button) {
Q_FOREACH (auto const& file Q_FOREACH (auto const& file
@@ -4682,6 +4773,10 @@ void MainWindow::guiUpdate()
void MainWindow::startTx() void MainWindow::startTx()
{ {
if(m_tx_watchdog){
return;
}
if(!prepareNextMessageFrame()){ if(!prepareNextMessageFrame()){
return; return;
} }
@@ -4755,7 +4850,7 @@ void MainWindow::stopTx()
tx_status_label.setText(""); tx_status_label.setText("");
} }
if(prepareNextMessageFrame()){ if(!m_tx_watchdog && prepareNextMessageFrame()){
continueTx(); continueTx();
} else { } else {
// TODO: jsherer - split this up... // TODO: jsherer - split this up...
@@ -5914,7 +6009,7 @@ void MainWindow::displayTextForFreq(QString text, int freq, QDateTime date, bool
} }
if(isNewLine){ if(isNewLine){
//m_rxFrameBlockNumbers.remove(freq); m_rxFrameBlockNumbers.remove(freq);
m_rxFrameBlockNumbers.remove(lowFreq); m_rxFrameBlockNumbers.remove(lowFreq);
m_rxFrameBlockNumbers.remove(highFreq); m_rxFrameBlockNumbers.remove(highFreq);
block = -1; block = -1;
@@ -6171,7 +6266,7 @@ void MainWindow::on_extFreeTextMsgEdit_currentTextChanged (QString const& text)
QTextCursor c = ui->extFreeTextMsgEdit->textCursor(); QTextCursor c = ui->extFreeTextMsgEdit->textCursor();
c.setPosition(pos < maxpos ? pos : maxpos, QTextCursor::MoveAnchor); c.setPosition(pos < maxpos ? pos : maxpos, QTextCursor::MoveAnchor);
highlightBlock(c.block(), m_config.tx_text_font(), QColor(Qt::black), QColor(Qt::transparent)); highlightBlock(c.block(), m_config.compose_text_font(), m_config.color_compose_foreground(), QColor(Qt::transparent));
ui->extFreeTextMsgEdit->setTextCursor(c); ui->extFreeTextMsgEdit->setTextCursor(c);
} }
@@ -7908,12 +8003,7 @@ void MainWindow::on_deselectButton_pressed(){
clearCallsignSelected(); clearCallsignSelected();
} }
void MainWindow::on_tableWidgetRXAll_cellClicked(int row, int /*col*/){ void MainWindow::on_tableWidgetRXAll_cellClicked(int /*row*/, int /*col*/){
auto item = ui->tableWidgetRXAll->item(row, 0);
int offset = item->text().toInt();
setFreqOffsetForRestore(offset, false);
ui->tableWidgetCalls->selectionModel()->select( ui->tableWidgetCalls->selectionModel()->select(
ui->tableWidgetCalls->selectionModel()->selection(), ui->tableWidgetCalls->selectionModel()->selection(),
QItemSelectionModel::Deselect); QItemSelectionModel::Deselect);
@@ -7966,15 +8056,6 @@ void MainWindow::on_tableWidgetRXAll_selectionChanged(const QItemSelection &/*se
} }
void MainWindow::on_tableWidgetCalls_cellClicked(int /*row*/, int /*col*/){ void MainWindow::on_tableWidgetCalls_cellClicked(int /*row*/, int /*col*/){
auto call = callsignSelected();
if(!m_callActivity.contains(call)){
return;
}
auto d = m_callActivity[call];
setFreqOffsetForRestore(d.freq, false);
ui->tableWidgetRXAll->selectionModel()->select( ui->tableWidgetRXAll->selectionModel()->select(
ui->tableWidgetRXAll->selectionModel()->selection(), ui->tableWidgetRXAll->selectionModel()->selection(),
QItemSelectionModel::Deselect); QItemSelectionModel::Deselect);
@@ -7984,6 +8065,7 @@ void MainWindow::on_tableWidgetCalls_cellDoubleClicked(int row, int col){
on_tableWidgetCalls_cellClicked(row, col); on_tableWidgetCalls_cellClicked(row, col);
auto call = callsignSelected(); auto call = callsignSelected();
addMessageText(call); addMessageText(call);
} }
@@ -8137,7 +8219,7 @@ void MainWindow::on_pbTxMode_clicked()
void MainWindow::setXIT(int n, Frequency base) void MainWindow::setXIT(int n, Frequency base)
{ {
if (m_transmitting && !m_config.tx_QSY_allowed ()) return; if (m_transmitting && !m_config.tx_qsy_allowed ()) return;
// If "CQ nnn ..." feature is active, set the proper Tx frequency // If "CQ nnn ..." feature is active, set the proper Tx frequency
if(m_config.split_mode () && ui->cbCQTx->isEnabled () && ui->cbCQTx->isVisible () && if(m_config.split_mode () && ui->cbCQTx->isEnabled () && ui->cbCQTx->isVisible () &&
ui->cbCQTx->isChecked()) ui->cbCQTx->isChecked())
@@ -8174,7 +8256,26 @@ void MainWindow::setXIT(int n, Frequency base)
void MainWindow::qsy(int hzDelta){ void MainWindow::qsy(int hzDelta){
setRig(m_freqNominal + hzDelta); setRig(m_freqNominal + hzDelta);
setFreqOffsetForRestore(1500, false); setFreqOffsetForRestore(m_wideGraph->centerFreq(), false);
// adjust band activity frequencies
QMap<int, QList<ActivityDetail>> newActivity;
foreach(auto offset, m_bandActivity.keys()){
if(m_bandActivity[offset].isEmpty()){
continue;
}
newActivity[offset - hzDelta] = m_bandActivity[offset];
newActivity[offset - hzDelta].last().freq -= hzDelta;
}
m_bandActivity.clear();
m_bandActivity.unite(newActivity);
// adjust call activity frequencies
foreach(auto call, m_callActivity.keys()){
m_callActivity[call].freq -= hzDelta;
}
displayActivity(true);
} }
void MainWindow::setFreqOffsetForRestore(int freq, bool shouldRestore){ void MainWindow::setFreqOffsetForRestore(int freq, bool shouldRestore){
@@ -8199,8 +8300,8 @@ bool MainWindow::tryRestoreFreqOffset(){
void MainWindow::setFreq4(int rxFreq, int txFreq) void MainWindow::setFreq4(int rxFreq, int txFreq)
{ {
// don't allow QSY if we've already queued a transmission // don't allow QSY if we've already queued a transmission, unless we have that functionality enabled.
if(isMessageQueuedForTransmit()){ if(isMessageQueuedForTransmit() && !m_config.tx_qsy_allowed()){
return; return;
} }
@@ -8600,7 +8701,7 @@ void MainWindow::transmitDisplay (bool transmitting)
m_btxok=true; m_btxok=true;
} }
auto QSY_allowed = !transmitting or m_config.tx_QSY_allowed () or auto QSY_allowed = !transmitting or m_config.tx_qsy_allowed () or
!m_config.split_mode (); !m_config.split_mode ();
if (ui->cbHoldTxFreq->isChecked ()) { if (ui->cbHoldTxFreq->isChecked ()) {
ui->RxFreqSpinBox->setEnabled (QSY_allowed); ui->RxFreqSpinBox->setEnabled (QSY_allowed);
@@ -9243,6 +9344,23 @@ void MainWindow::processBufferedActivity() {
foreach(auto freq, m_messageBuffer.keys()) { foreach(auto freq, m_messageBuffer.keys()) {
auto buffer = m_messageBuffer[freq]; auto buffer = m_messageBuffer[freq];
// check to make sure we empty old buffers by getting the latest timestamp
// and checking to see if it's older than one minute.
auto dt = QDateTime::currentDateTimeUtc().addDays(-1);
if(buffer.cmd.utcTimestamp.isValid()){
dt = qMax(dt, buffer.cmd.utcTimestamp);
}
if(!buffer.compound.isEmpty()){
dt = qMax(dt, buffer.compound.last().utcTimestamp);
}
if(!buffer.msgs.isEmpty()){
dt = qMax(dt, buffer.msgs.last().utcTimestamp);
}
if(dt.secsTo(QDateTime::currentDateTimeUtc()) > 60){
m_messageBuffer.remove(freq);
continue;
}
if (buffer.msgs.isEmpty()) { if (buffer.msgs.isEmpty()) {
continue; continue;
} }
@@ -9432,6 +9550,13 @@ void MainWindow::processCommandActivity() {
// QUERIED SNR // QUERIED SNR
if (d.cmd == "?") { if (d.cmd == "?") {
// do not respond to allcall ? if:
// 1. we recently responded to one
// 2. or, we are in a directed qso...(i.e., we have a callsign selected)
if(!callsignSelected().isEmpty()){
continue;
}
reply = QString("%1 SNR %2").arg(d.from).arg(Varicode::formatSNR(d.snr)); reply = QString("%1 SNR %2").arg(d.from).arg(Varicode::formatSNR(d.snr));
} }
@@ -9506,7 +9631,7 @@ void MainWindow::processCommandActivity() {
#endif #endif
// PROCESS RELAY // PROCESS RELAY
else if (d.cmd == ">" && !isAllCall && !m_config.relay_off()) { else if (d.cmd == ">" && !isAllCall) {
// 1. see if there are any more hops to process // 1. see if there are any more hops to process
// 2. if so, forward // 2. if so, forward
@@ -9517,8 +9642,8 @@ void MainWindow::processCommandActivity() {
auto text = d.text; auto text = d.text;
auto match = re.match(text); auto match = re.match(text);
// if the text starts with a callsign, relay. // if the text starts with a callsign, and relay is not disabled, then relay.
if(match.hasMatch()){ if(match.hasMatch() && !m_config.relay_off()){
// replace freetext with relayed free text // replace freetext with relayed free text
if(match.captured("type") != ">"){ if(match.captured("type") != ">"){
text = text.replace(match.capturedStart("type"), match.capturedLength("type"), ">"); text = text.replace(match.capturedStart("type"), match.capturedLength("type"), ">");
@@ -9659,7 +9784,7 @@ void MainWindow::processCommandActivity() {
// unless, this is an allcall, to which we should be responding on a clear frequency offset // unless, this is an allcall, to which we should be responding on a clear frequency offset
// we always want to make sure that the directed cache has been updated at this point so we have the // we always want to make sure that the directed cache has been updated at this point so we have the
// most information available to make a frequency selection. // most information available to make a frequency selection.
enqueueMessage(PriorityNormal, reply, isAllCall ? -1 : d.freq, nullptr); enqueueMessage(PriorityNormal, reply, -1, nullptr);
} }
} }
@@ -9700,7 +9825,7 @@ void MainWindow::processAlertReplyForCommand(CommandDetail d, QString from, QStr
} }
if (btn == ab){ if (btn == ab){
enqueueMessage(PriorityHigh, QString("%1%2ACK").arg(from).arg(cmd), d.freq, nullptr); enqueueMessage(PriorityHigh, QString("%1%2ACK").arg(from).arg(cmd), -1, nullptr);
} }
if(btn == rb){ if(btn == rb){
@@ -9709,7 +9834,7 @@ void MainWindow::processAlertReplyForCommand(CommandDetail d, QString from, QStr
diag->setLabel(QString("Message to send to %1:").arg(fromLabel)); diag->setLabel(QString("Message to send to %1:").arg(fromLabel));
connect(diag, &MessageReplyDialog::accepted, this, [this, diag, from, cmd, d](){ connect(diag, &MessageReplyDialog::accepted, this, [this, diag, from, cmd, d](){
enqueueMessage(PriorityHigh, QString("%1%2%3").arg(from).arg(cmd).arg(diag->textValue()), d.freq, nullptr); enqueueMessage(PriorityHigh, QString("%1%2%3").arg(from).arg(cmd).arg(diag->textValue()), -1, nullptr);
}); });
diag->show(); diag->show();
@@ -9721,6 +9846,7 @@ void MainWindow::processAlertReplyForCommand(CommandDetail d, QString from, QStr
QSound::play(wav); QSound::play(wav);
} }
msgBox->setModal(false);
msgBox->show(); msgBox->show();
} }
@@ -9770,12 +9896,8 @@ void MainWindow::processTxQueue(){
f = currentFreqOffset(); f = currentFreqOffset();
} }
if(!isFreqOffsetFree(f, 60)){
f = findFreeFreqOffset(500, 2000, 60);
}
// we need a valid frequency... // we need a valid frequency...
if(f == 0){ if(f <= 0){
return; return;
} }
@@ -9800,7 +9922,7 @@ void MainWindow::processTxQueue(){
// add the message to the outgoing message text box // add the message to the outgoing message text box
addMessageText(message.message, true); addMessageText(message.message, true);
// check to see if we have autoreply enabled...(or if this is a beacon and the beacon button is enabled) // check to see if this is a high priority message, or if we have autoreply enabled, or if this is a beacon and the beacon button is enabled
if(message.priority >= PriorityHigh || if(message.priority >= PriorityHigh ||
(ui->autoReplyButton->isChecked()) || (ui->autoReplyButton->isChecked()) ||
(ui->beaconButton->isChecked() && message.message.contains("BEACON")) (ui->beaconButton->isChecked() && message.message.contains("BEACON"))
@@ -9852,6 +9974,13 @@ void MainWindow::displayBandActivity() {
// Sort! // Sort!
QList < int > keys = m_bandActivity.keys(); QList < int > keys = m_bandActivity.keys();
auto sortBy = getSortBy("bandActivity", "offset");
bool reverse = false;
if(sortBy.startsWith("-")){
sortBy = sortBy.mid(1);
reverse = true;
}
auto compareTimestamp = [this](const int left, int right) { auto compareTimestamp = [this](const int left, int right) {
auto leftItems = m_bandActivity[left]; auto leftItems = m_bandActivity[left];
auto rightItems = m_bandActivity[right]; auto rightItems = m_bandActivity[right];
@@ -9870,7 +9999,7 @@ void MainWindow::displayBandActivity() {
return leftLast.utcTimestamp < rightLast.utcTimestamp; return leftLast.utcTimestamp < rightLast.utcTimestamp;
}; };
auto compareSNR = [this](const int left, int right) { auto compareSNR = [this, reverse](const int left, int right) {
auto leftItems = m_bandActivity[left]; auto leftItems = m_bandActivity[left];
auto rightItems = m_bandActivity[right]; auto rightItems = m_bandActivity[right];
@@ -9882,18 +10011,18 @@ void MainWindow::displayBandActivity() {
return true; return true;
} }
auto leftLast = leftItems.last(); auto leftActivity = leftItems.last();
auto rightLast = rightItems.last(); auto rightActivity = rightItems.last();
return leftLast.snr < rightLast.snr; if(leftActivity.snr < -60 || leftActivity.snr > 60) {
}; leftActivity.snr *= reverse ? 1 : -1;
auto sortBy = getSortBy("bandActivity", "offset");
bool reverse = false;
if(sortBy.startsWith("-")){
sortBy = sortBy.mid(1);
reverse = true;
} }
if(rightActivity.snr < -60 || rightActivity.snr > 60) {
rightActivity.snr *= reverse ? 1 : -1;
}
return leftActivity.snr < rightActivity.snr;
};
// compare offset // compare offset
qStableSort(keys.begin(), keys.end()); qStableSort(keys.begin(), keys.end());
@@ -9983,7 +10112,11 @@ void MainWindow::displayBandActivity() {
} }
bool isDirectedAllCall = false; bool isDirectedAllCall = false;
if (isDirectedOffset(offset, &isDirectedAllCall) && !isDirectedAllCall) { // TODO: jsherer - there's a potential here for a previous allcall o poison the highlight.
if (
(isDirectedOffset(offset, &isDirectedAllCall) && !isDirectedAllCall) ||
(text.last().contains(Radio::base_callsign(m_config.my_callsign())))
) {
offsetItem->setBackground(QBrush(m_config.color_MyCall())); offsetItem->setBackground(QBrush(m_config.color_MyCall()));
ageItem->setBackground(QBrush(m_config.color_MyCall())); ageItem->setBackground(QBrush(m_config.color_MyCall()));
snrItem->setBackground(QBrush(m_config.color_MyCall())); snrItem->setBackground(QBrush(m_config.color_MyCall()));
@@ -10034,9 +10167,17 @@ void MainWindow::displayCallActivity() {
ui->tableWidgetCalls->item(0, 0)->setSelected(true); ui->tableWidgetCalls->item(0, 0)->setSelected(true);
} }
// Build the table // Build the table
QList < QString > keys = m_callActivity.keys(); QList < QString > keys = m_callActivity.keys();
auto sortBy = getSortBy("callActivity", "callsign");
bool reverse = false;
if(sortBy.startsWith("-")){
sortBy = sortBy.mid(1);
reverse = true;
}
auto compareOffset = [this](const QString left, QString right) { auto compareOffset = [this](const QString left, QString right) {
auto leftActivity = m_callActivity[left]; auto leftActivity = m_callActivity[left];
auto rightActivity = m_callActivity[right]; auto rightActivity = m_callActivity[right];
@@ -10044,22 +10185,18 @@ void MainWindow::displayCallActivity() {
return leftActivity.freq < rightActivity.freq; return leftActivity.freq < rightActivity.freq;
}; };
auto compareDistance = [this](const QString left, QString right) { auto compareDistance = [this, reverse](const QString left, QString right) {
auto leftActivity = m_callActivity[left]; auto leftActivity = m_callActivity[left];
auto rightActivity = m_callActivity[right]; auto rightActivity = m_callActivity[right];
if(leftActivity.grid.isEmpty()){ int leftDistance = reverse ? -100000 : 100000;
return false; int rightDistance = reverse ? -100000 : 100000;
} if(!leftActivity.grid.isEmpty()){
if(rightActivity.grid.isEmpty()){
return true;
}
int leftDistance = 0;
int rightDistance = 0;
calculateDistance(leftActivity.grid, &leftDistance); calculateDistance(leftActivity.grid, &leftDistance);
}
if(!rightActivity.grid.isEmpty()){
calculateDistance(rightActivity.grid, &rightDistance); calculateDistance(rightActivity.grid, &rightDistance);
}
return leftDistance < rightDistance; return leftDistance < rightDistance;
}; };
@@ -10071,19 +10208,20 @@ void MainWindow::displayCallActivity() {
return leftActivity.utcTimestamp < rightActivity.utcTimestamp; return leftActivity.utcTimestamp < rightActivity.utcTimestamp;
}; };
auto compareSNR = [this](const QString left, QString right) { auto compareSNR = [this, reverse](const QString left, QString right) {
auto leftActivity = m_callActivity[left]; auto leftActivity = m_callActivity[left];
auto rightActivity = m_callActivity[right]; auto rightActivity = m_callActivity[right];
if(leftActivity.snr < -60 || leftActivity.snr > 60) {
leftActivity.snr *= reverse ? 1 : -1;
}
if(rightActivity.snr < -60 || rightActivity.snr > 60) {
rightActivity.snr *= reverse ? 1 : -1;
}
return leftActivity.snr < rightActivity.snr; return leftActivity.snr < rightActivity.snr;
}; };
auto sortBy = getSortBy("callActivity", "callsign");
bool reverse = false;
if(sortBy.startsWith("-")){
sortBy = sortBy.mid(1);
reverse = true;
}
// compare callsign // compare callsign
qStableSort(keys.begin(), keys.end()); qStableSort(keys.begin(), keys.end());
@@ -10616,9 +10754,9 @@ void MainWindow::astroUpdate ()
m_config.my_grid(), m_hisGrid, m_config.my_grid(), m_hisGrid,
m_freqNominal, m_freqNominal,
"Echo" == m_mode, m_transmitting, "Echo" == m_mode, m_transmitting,
!m_config.tx_QSY_allowed (), m_TRperiod); !m_config.tx_qsy_allowed (), m_TRperiod);
// no Doppler correction in Tx if rig can't do it // no Doppler correction in Tx if rig can't do it
if (m_transmitting && !m_config.tx_QSY_allowed ()) return; if (m_transmitting && !m_config.tx_qsy_allowed ()) return;
if (!m_astroWidget->doppler_tracking ()) return; if (!m_astroWidget->doppler_tracking ()) return;
if ((m_monitoring || m_transmitting) if ((m_monitoring || m_transmitting)
// no Doppler correction below 6m // no Doppler correction below 6m
@@ -10680,7 +10818,7 @@ void MainWindow::setRig (Frequency f)
&& m_frequency_list_fcal_iter != m_config.frequencies ()->end ()) { && m_frequency_list_fcal_iter != m_config.frequencies ()->end ()) {
m_freqNominal = m_frequency_list_fcal_iter->frequency_ - ui->RxFreqSpinBox->value (); m_freqNominal = m_frequency_list_fcal_iter->frequency_ - ui->RxFreqSpinBox->value ();
} }
if(m_transmitting && !m_config.tx_QSY_allowed ()) return; if(m_transmitting && !m_config.tx_qsy_allowed ()) return;
if ((m_monitoring || m_transmitting) && m_config.transceiver_online ()) if ((m_monitoring || m_transmitting) && m_config.transceiver_online ())
{ {
if (m_transmitting && m_config.split_mode ()) if (m_transmitting && m_config.split_mode ())
@@ -10834,6 +10972,7 @@ void MainWindow::tx_watchdog (bool triggered)
m_bTxTime=false; m_bTxTime=false;
if (m_tune) stop_tuning (); if (m_tune) stop_tuning ();
if (m_auto) auto_tx_mode (false); if (m_auto) auto_tx_mode (false);
stopTx();
tx_status_label.setStyleSheet ("QLabel{background-color: #ff0000}"); tx_status_label.setStyleSheet ("QLabel{background-color: #ff0000}");
tx_status_label.setText ("Runaway Tx watchdog"); tx_status_label.setText ("Runaway Tx watchdog");
QApplication::alert (this); QApplication::alert (this);
+2 -42
View File
@@ -45,6 +45,7 @@
#include "varicode.h" #include "varicode.h"
#include "MessageClient.hpp" #include "MessageClient.hpp"
#include "APRSISClient.h" #include "APRSISClient.h"
#include "keyeater.h"
#define NUM_JT4_SYMBOLS 206 //(72+31)*2, embedded sync #define NUM_JT4_SYMBOLS 206 //(72+31)*2, embedded sync
#define NUM_JT65_SYMBOLS 126 //63 data + 63 sync #define NUM_JT65_SYMBOLS 126 //63 data + 63 sync
@@ -710,8 +711,8 @@ private:
}; };
struct MessageBuffer { struct MessageBuffer {
QQueue<CallDetail> compound;
CommandDetail cmd; CommandDetail cmd;
QQueue<CallDetail> compound;
QList<ActivityDetail> msgs; QList<ActivityDetail> msgs;
}; };
@@ -932,47 +933,6 @@ private:
void writeFoxQSO(QString msg); void writeFoxQSO(QString msg);
}; };
class EscapeKeyPressEater : public QObject
{
Q_OBJECT
protected:
bool eventFilter(QObject *obj, QEvent *event){
if (event->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
if(keyEvent->key() == Qt::Key_Escape){
return true;
}
}
// standard event processing
return QObject::eventFilter(obj, event);
}
};
class EnterKeyPressEater : public QObject
{
Q_OBJECT
protected:
bool eventFilter(QObject *obj, QEvent *event){
if (event->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
if(keyEvent->key() == Qt::Key_Enter || keyEvent->key() == Qt::Key_Return){
bool processed = false;
emit this->enterKeyPressed(obj, keyEvent, &processed);
if(processed){
return true;
}
}
}
// standard event processing
return QObject::eventFilter(obj, event);
}
public:
Q_SIGNAL void enterKeyPressed(QObject *obj, QKeyEvent *evt, bool *pProcessed);
};
extern int killbyname(const char* progName); extern int killbyname(const char* progName);
extern void getDev(int* numDevices,char hostAPI_DeviceName[][50], extern void getDev(int* numDevices,char hostAPI_DeviceName[][50],
int minChan[], int maxChan[], int minChan[], int maxChan[],
+2 -5
View File
@@ -4470,10 +4470,10 @@ list. The list can be maintained in Settings (F2).</string>
</action> </action>
<action name="actionDelete_all_wav_files_in_SaveDir"> <action name="actionDelete_all_wav_files_in_SaveDir">
<property name="enabled"> <property name="enabled">
<bool>false</bool> <bool>true</bool>
</property> </property>
<property name="text"> <property name="text">
<string>Delete all *.wav &amp;&amp; *.c2 files in SaveDir</string> <string>Delete all *.wav files in SaveDir</string>
</property> </property>
</action> </action>
<action name="actionQuickDecode"> <action name="actionQuickDecode">
@@ -4500,9 +4500,6 @@ list. The list can be maintained in Settings (F2).</string>
<property name="text"> <property name="text">
<string>None</string> <string>None</string>
</property> </property>
<property name="visible">
<bool>false</bool>
</property>
</action> </action>
<action name="actionSave_all"> <action name="actionSave_all">
<property name="checkable"> <property name="checkable">
+12
View File
@@ -10,6 +10,18 @@ MessageReplyDialog::MessageReplyDialog(QWidget *parent) :
ui(new Ui::MessageReplyDialog) ui(new Ui::MessageReplyDialog)
{ {
ui->setupUi(this); ui->setupUi(this);
auto enterFilter = new EnterKeyPressEater();
connect(enterFilter, &EnterKeyPressEater::enterKeyPressed, this, [this](QObject *, QKeyEvent *, bool *pProcessed){
if(QApplication::keyboardModifiers() & Qt::ShiftModifier){
if(pProcessed) *pProcessed = false;
return;
}
if(pProcessed) *pProcessed = true;
this->accept();
});
ui->textEdit->installEventFilter(enterFilter);
} }
MessageReplyDialog::~MessageReplyDialog() MessageReplyDialog::~MessageReplyDialog()
+1
View File
@@ -2,6 +2,7 @@
#define MESSAGEREPLYDIALOG_H #define MESSAGEREPLYDIALOG_H
#include <QDialog> #include <QDialog>
#include "keyeater.h"
namespace Ui { namespace Ui {
class MessageReplyDialog; class MessageReplyDialog;
+6 -1
View File
@@ -215,7 +215,7 @@ void WideGraph::on_bppSpinBox_valueChanged(int n) //b
} }
void WideGraph::on_qsyPushButton_clicked(){ void WideGraph::on_qsyPushButton_clicked(){
int hzDelta = rxFreq() - ui->centerSpinBox->value(); int hzDelta = rxFreq() - centerFreq();
emit qsy(hzDelta); emit qsy(hzDelta);
} }
@@ -269,6 +269,11 @@ int WideGraph::rxFreq() //rxFr
return ui->widePlot->rxFreq(); return ui->widePlot->rxFreq();
} }
int WideGraph::centerFreq()
{
return ui->centerSpinBox->value();
}
int WideGraph::nStartFreq() //nStartFreq int WideGraph::nStartFreq() //nStartFreq
{ {
return ui->widePlot->startFreq(); return ui->widePlot->startFreq();
+1
View File
@@ -29,6 +29,7 @@ public:
void dataSink2(float s[], float df3, int ihsym, int ndiskdata); void dataSink2(float s[], float df3, int ihsym, int ndiskdata);
void setRxFreq(int n); void setRxFreq(int n);
int rxFreq(); int rxFreq();
int centerFreq();
int nStartFreq(); int nStartFreq();
int Fmin(); int Fmin();
int Fmax(); int Fmax();
+4 -2
View File
@@ -73,7 +73,8 @@ SOURCES += \
MessageClient.cpp \ MessageClient.cpp \
SelfDestructMessageBox.cpp \ SelfDestructMessageBox.cpp \
APRSISClient.cpp \ APRSISClient.cpp \
messagereplydialog.cpp messagereplydialog.cpp \
keyeater.cpp
HEADERS += qt_helpers.hpp \ HEADERS += qt_helpers.hpp \
pimpl_h.hpp pimpl_impl.hpp \ pimpl_h.hpp pimpl_impl.hpp \
@@ -98,7 +99,8 @@ HEADERS += qt_helpers.hpp \
MessageClient.hpp \ MessageClient.hpp \
SelfDestructMessageBox.h \ SelfDestructMessageBox.h \
APRSISClient.h \ APRSISClient.h \
messagereplydialog.h messagereplydialog.h \
keyeater.h
INCLUDEPATH += qmake_only INCLUDEPATH += qmake_only
+1 -1
View File
@@ -1 +1 @@
IDI_ICON1 ICON DISCARDABLE "icons/windows-icons/wsjtx.ico" IDI_ICON1 ICON DISCARDABLE "icons/windows-icons/ft8call.ico"