Compare commits
18 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 873929b3f6 | |||
| e52a62e689 | |||
| bafaf8a5ae | |||
| f4ed9a9eac | |||
| 71bf19b21c | |||
| 1181e68f27 | |||
| 0722bdad52 | |||
| 92c88f6c0a | |||
| 67a5f49ba2 | |||
| d715b1d534 | |||
| 23e378f977 | |||
| f27d664f61 | |||
| 16c665d199 | |||
| 0b11b1b1d3 | |||
| e699d2e081 | |||
| 9f25842c79 | |||
| fddca6522e | |||
| df0b06ccb7 |
@@ -306,6 +306,7 @@ set (wsjtx_CXXSRCS
|
||||
varicode.cpp
|
||||
SelfDestructMessageBox.cpp
|
||||
messagereplydialog.cpp
|
||||
keyeater.cpp
|
||||
APRSISClient.cpp
|
||||
mainwindow.cpp
|
||||
Configuration.cpp
|
||||
|
||||
@@ -473,7 +473,9 @@ private:
|
||||
Q_SLOT void on_rxBackgroundButton_clicked();
|
||||
Q_SLOT void on_rxForegroundButton_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_txFontButton_clicked();
|
||||
|
||||
@@ -519,6 +521,9 @@ private:
|
||||
QFont 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_output_device_;
|
||||
|
||||
@@ -582,8 +587,10 @@ private:
|
||||
QColor next_color_rx_background_;
|
||||
QColor color_rx_foreground_;
|
||||
QColor next_color_rx_foreground_;
|
||||
QColor color_tx_background_;
|
||||
QColor next_color_tx_background_;
|
||||
QColor color_compose_background_;
|
||||
QColor next_color_compose_background_;
|
||||
QColor color_compose_foreground_;
|
||||
QColor next_color_compose_foreground_;
|
||||
QColor color_tx_foreground_;
|
||||
QColor next_color_tx_foreground_;
|
||||
QColor color_DXCC_;
|
||||
@@ -597,7 +604,7 @@ private:
|
||||
double degrade_;
|
||||
double txDelay_;
|
||||
bool id_after_73_;
|
||||
bool tx_QSY_allowed_;
|
||||
bool tx_qsy_allowed_;
|
||||
bool spot_to_reporting_networks_;
|
||||
bool transmit_directed_;
|
||||
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_rx_background () const {return m_->color_rx_background_;}
|
||||
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_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_NewCall () const {return m_->color_NewCall_;}
|
||||
QFont Configuration::text_font () const {return m_->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::compose_text_font () const {return m_->compose_text_font_;}
|
||||
qint32 Configuration::id_interval () const {return m_->id_interval_;}
|
||||
qint32 Configuration::ntrials() const {return m_->ntrials_;}
|
||||
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_;}
|
||||
qint32 Configuration::RxBandwidth() const {return m_->RxBandwidth_;}
|
||||
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
|
||||
{
|
||||
// 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_->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_->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_->sbNtrials->setValue (ntrials_);
|
||||
@@ -1291,7 +1300,7 @@ void Configuration::impl::initialize_models ()
|
||||
ui_->sound_dm_path_display_label->setText(sound_dm_path_);
|
||||
ui_->sound_am_path_display_label->setText(sound_am_path_);
|
||||
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_->transmit_directed_check_box->setChecked(transmit_directed_);
|
||||
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_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_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_DXCC_ = color_DXCC_ = settings_->value("colorDXCC","#ff00ff").toString();
|
||||
next_color_NewCall_ = color_NewCall_ = settings_->value("colorNewCall","#ffaaff").toString();
|
||||
@@ -1428,6 +1438,7 @@ void Configuration::impl::read_settings ()
|
||||
{
|
||||
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 ())
|
||||
&& 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()));
|
||||
|
||||
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 ();
|
||||
ntrials_ = settings_->value ("nTrials", 6).toInt ();
|
||||
txDelay_ = settings_->value ("TxDelay",0.2).toDouble();
|
||||
@@ -1530,7 +1554,7 @@ void Configuration::impl::read_settings ()
|
||||
monitor_last_used_ = settings_->value ("MonitorLastUsed", false).toBool ();
|
||||
spot_to_reporting_networks_ = settings_->value ("PSKReporter", true).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 ();
|
||||
|
||||
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 ();
|
||||
beacon_ = settings_->value ("TxBeacon", 30).toInt ();
|
||||
watchdog_ = settings_->value ("TxWatchdog", 0).toInt ();
|
||||
if(watchdog_){
|
||||
watchdog_ = qMax(5, watchdog_);
|
||||
}
|
||||
TX_messages_ = settings_->value ("Tx2QSO", true).toBool ();
|
||||
enable_VHF_features_ = settings_->value("VHFUHF",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("color_rx_background",color_rx_background_);
|
||||
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("colorDXCC",color_DXCC_);
|
||||
settings_->setValue("colorNewCall",color_NewCall_);
|
||||
@@ -1681,7 +1709,7 @@ void Configuration::impl::write_settings ()
|
||||
settings_->setValue ("MonitorLastUsed", monitor_last_used_);
|
||||
settings_->setValue ("PSKReporter", spot_to_reporting_networks_);
|
||||
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 (versionedFrequenciesSettingsKey, QVariant::fromValue (frequencies_.frequency_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_);
|
||||
}
|
||||
|
||||
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_mycall_ = next_color_mycall_;
|
||||
color_rx_background_ = next_color_rx_background_;
|
||||
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_DXCC_ = next_color_DXCC_;
|
||||
color_NewCall_ = next_color_NewCall_;
|
||||
@@ -2120,7 +2155,7 @@ void Configuration::impl::accept ()
|
||||
degrade_ = ui_->sbDegrade->value ();
|
||||
RxBandwidth_ = ui_->sbBandwidth->value ();
|
||||
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();
|
||||
autoreply_off_at_startup_ = ui_->autoreply_off_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 ()
|
||||
{
|
||||
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){
|
||||
@@ -2316,7 +2353,7 @@ void Configuration::impl::on_rxForegroundButton_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")
|
||||
#if QT_VERSION >= 0x050201
|
||||
, 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()));
|
||||
}
|
||||
|
||||
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 ())
|
||||
{
|
||||
next_color_tx_background_ = 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_->txForegroundLabel->setStyleSheet(QString("background: %1; color: %2").arg(next_color_rx_background_.name()).arg(next_color_tx_foreground_.name()));
|
||||
next_color_compose_background_ = new_color;
|
||||
ui_->composeLabel->setStyleSheet(QString("background: %1; color: %2").arg(next_color_compose_background_.name()).arg(next_color_compose_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 ())
|
||||
{
|
||||
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_->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 ()
|
||||
{
|
||||
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")
|
||||
#if QT_VERSION >= 0x050201
|
||||
, 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()));
|
||||
}
|
||||
|
||||
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 */)
|
||||
{
|
||||
set_rig_invariants ();
|
||||
|
||||
@@ -106,6 +106,7 @@ public:
|
||||
QFont text_font () const;
|
||||
QFont rx_text_font () const;
|
||||
QFont tx_text_font () const;
|
||||
QFont compose_text_font () const;
|
||||
qint32 id_interval () const;
|
||||
qint32 ntrials() const;
|
||||
qint32 aggressive() const;
|
||||
@@ -113,7 +114,7 @@ public:
|
||||
double degrade() const;
|
||||
double txDelay() const;
|
||||
bool id_after_73 () const;
|
||||
bool tx_QSY_allowed () const;
|
||||
bool tx_qsy_allowed () const;
|
||||
bool spot_to_reporting_networks () const;
|
||||
void set_spot_to_reporting_networks (bool);
|
||||
bool transmit_directed() const;
|
||||
@@ -184,8 +185,9 @@ public:
|
||||
QColor color_MyCall () const;
|
||||
QColor color_rx_background () const;
|
||||
QColor color_rx_foreground () const;
|
||||
QColor color_tx_background () const;
|
||||
QColor color_tx_foreground () const;
|
||||
QColor color_compose_background () const;
|
||||
QColor color_compose_foreground () const;
|
||||
QColor color_DXCC () const;
|
||||
QColor color_NewCall () const;
|
||||
bool pwrBandTxMemory () const;
|
||||
@@ -281,6 +283,7 @@ public:
|
||||
Q_SIGNAL void gui_text_font_changed (QFont);
|
||||
Q_SIGNAL void tx_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 ();
|
||||
|
||||
//
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>692</width>
|
||||
<height>706</height>
|
||||
<height>735</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@@ -359,7 +359,7 @@
|
||||
<item>
|
||||
<widget class="QCheckBox" name="relay_disabled_check_box">
|
||||
<property name="text">
|
||||
<string>Disable message passing (>) when AUTO is enabled</string>
|
||||
<string>Disable message relay (>) when AUTO is enabled</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -390,13 +390,17 @@
|
||||
</widget>
|
||||
</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">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="visible">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>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.</p></body></html></string>
|
||||
</property>
|
||||
@@ -405,13 +409,6 @@
|
||||
</property>
|
||||
</widget>
|
||||
</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>
|
||||
<widget class="QCheckBox" name="single_decode_check_box">
|
||||
<property name="enabled">
|
||||
@@ -574,6 +571,9 @@
|
||||
<property name="prefix">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>5</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>0</number>
|
||||
</property>
|
||||
@@ -1797,95 +1797,6 @@ both here.</string>
|
||||
</layout>
|
||||
</widget>
|
||||
</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>
|
||||
<widget class="QGroupBox" name="split_operation_group_box_2">
|
||||
<property name="toolTip">
|
||||
@@ -2661,6 +2572,142 @@ Right click for insert and delete options.</string>
|
||||
</item>
|
||||
</layout>
|
||||
</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">
|
||||
<attribute name="title">
|
||||
<string>UI</string>
|
||||
@@ -2700,7 +2747,7 @@ Right click for insert and delete options.</string>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_9">
|
||||
<property name="title">
|
||||
<string>Band Activity Background</string>
|
||||
<string>Band Activity Background:</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_15">
|
||||
<item row="0" column="0">
|
||||
@@ -2771,12 +2818,55 @@ Right click for insert and delete options.</string>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox_12">
|
||||
<widget class="QGroupBox" name="groupBox_8">
|
||||
<property name="title">
|
||||
<string>Message Background</string>
|
||||
<string>Messages:</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_13">
|
||||
<item row="0" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout_8">
|
||||
<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">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
@@ -2798,24 +2888,98 @@ Right click for insert and delete options.</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" 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>
|
||||
<item row="9" column="0">
|
||||
<widget class="QLabel" name="txForegroundLabel">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">QLabel{background-color: #ffeaa7}</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Receive Background Color</string>
|
||||
<string>K1ABC</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="txLabel">
|
||||
<item row="8" column="0">
|
||||
<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">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
@@ -2836,84 +3000,25 @@ Right click for insert and delete options.</string>
|
||||
</property>
|
||||
</widget>
|
||||
</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">
|
||||
<widget class="QPushButton" name="rxForegroundButton">
|
||||
<widget class="QPushButton" name="composeForegroundButton">
|
||||
<property name="text">
|
||||
<string>Foreground Color</string>
|
||||
</property>
|
||||
</widget>
|
||||
</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">
|
||||
<widget class="QPushButton" name="txForegroundButton">
|
||||
<property name="text">
|
||||
<string>Foreground Color</string>
|
||||
<spacer name="verticalSpacer_12">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QPushButton" name="txFontButton">
|
||||
<property name="text">
|
||||
<string>Font</string>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</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>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
@@ -3241,7 +3346,6 @@ soundcard changes</string>
|
||||
<tabstop>tx_watchdog_spin_box</tabstop>
|
||||
<tabstop>CW_id_after_73_check_box</tabstop>
|
||||
<tabstop>enable_VHF_features_check_box</tabstop>
|
||||
<tabstop>tx_QSY_check_box</tabstop>
|
||||
<tabstop>single_decode_check_box</tabstop>
|
||||
<tabstop>decode_at_52s_check_box</tabstop>
|
||||
<tabstop>CW_id_interval_spin_box</tabstop>
|
||||
@@ -3372,11 +3476,11 @@ soundcard changes</string>
|
||||
</connection>
|
||||
</connections>
|
||||
<buttongroups>
|
||||
<buttongroup name="TX_audio_source_button_group"/>
|
||||
<buttongroup name="PTT_method_button_group"/>
|
||||
<buttongroup name="split_mode_button_group"/>
|
||||
<buttongroup name="CAT_data_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="CAT_handshake_button_group"/>
|
||||
</buttongroups>
|
||||
|
||||
@@ -1 +1 @@
|
||||
IDI_ICON1 ICON DISCARDABLE "../icons/windows-icons/wsjtx.ico"
|
||||
IDI_ICON1 ICON DISCARDABLE "../icons/windows-icons/ft8call.ico"
|
||||
|
||||
@@ -1 +1 @@
|
||||
IDI_ICON1 ICON DISCARDABLE "../icons/windows-icons/wsjtx.ico"
|
||||
IDI_ICON1 ICON DISCARDABLE "../icons/windows-icons/ft8call.ico"
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Version number components
|
||||
set (WSJTX_VERSION_MAJOR 0)
|
||||
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_VERSION_IS_RELEASE 0) # set to 1 for final release build
|
||||
|
||||
@@ -15,9 +15,6 @@
|
||||
viewBox="0 0 714.37498 270.93334"
|
||||
version="1.1"
|
||||
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)"
|
||||
sodipodi:docname="icon_1024.svg">
|
||||
<defs
|
||||
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 49 KiB |
@@ -29,8 +29,9 @@ convert '/tmp/image-%d.png[0-1]' -background transparent \
|
||||
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
|
||||
#
|
||||
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
|
||||
#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: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
|
||||
|
||||
#
|
||||
|
||||
|
Before Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 571 B |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 282 KiB |
@@ -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);
|
||||
}
|
||||
@@ -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
|
||||
@@ -170,7 +170,7 @@ QVector<QColor> g_ColorTbl;
|
||||
|
||||
namespace
|
||||
{
|
||||
Radio::Frequency constexpr default_frequency {14078500};
|
||||
Radio::Frequency constexpr default_frequency {14078000};
|
||||
|
||||
QRegExp message_alphabet {"[^\\x00-\\x1F]*"}; // base alphabet supported by FT8CALL
|
||||
|
||||
@@ -304,10 +304,46 @@ namespace
|
||||
edit->updateGeometry();
|
||||
}
|
||||
|
||||
void setTextEditBackground(QTextEdit *edit, QColor color){
|
||||
edit->setStyleSheet(QString("QTextEdit{ background: %1 }").arg(color.name()));
|
||||
void setTextEditColors(QTextEdit *edit, QColor fg, QColor bg){
|
||||
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){
|
||||
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&) {
|
||||
setTextEditFont(ui->textEditRX, m_config.rx_text_font());
|
||||
});
|
||||
connect (&m_config, &Configuration::tx_text_font_changed, [this] (QFont const&) {
|
||||
setTextEditFont(ui->extFreeTextMsgEdit, m_config.tx_text_font());
|
||||
connect (&m_config, &Configuration::compose_text_font_changed, [this] (QFont const&) {
|
||||
setTextEditFont(ui->extFreeTextMsgEdit, m_config.compose_text_font());
|
||||
});
|
||||
connect (&m_config, &Configuration::colors_changed, [this](){
|
||||
setTextEditBackground(ui->textEditRX, m_config.color_rx_background());
|
||||
setTextEditBackground(ui->extFreeTextMsgEdit, m_config.color_tx_background());
|
||||
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());
|
||||
|
||||
// rehighlight
|
||||
auto d = ui->textEditRX->document();
|
||||
@@ -1219,6 +1255,14 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
|
||||
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);
|
||||
logAction->setDisabled(missingCallsign);
|
||||
|
||||
@@ -1231,9 +1275,9 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
|
||||
relayAction->setDisabled(missingCallsign);
|
||||
menu->addActions({ relayAction });
|
||||
|
||||
auto deselect = menu->addAction("Deselect");
|
||||
deselect->setDisabled(missingCallsign);
|
||||
connect(deselect, &QAction::triggered, this, [this](){
|
||||
auto deselectAction = menu->addAction(QString("Deselect %1").arg(selectedCall));
|
||||
deselectAction->setDisabled(missingCallsign);
|
||||
connect(deselectAction, &QAction::triggered, this, [this](){
|
||||
ui->tableWidgetRXAll->clearSelection();
|
||||
ui->tableWidgetCalls->clearSelection();
|
||||
});
|
||||
@@ -1281,8 +1325,16 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
|
||||
QString selectedCall = callsignSelected();
|
||||
bool isAllCall = isAllCallIncluded(selectedCall);
|
||||
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);
|
||||
@@ -1297,7 +1349,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
|
||||
relayAction->setDisabled(missingCallsign || isAllCall);
|
||||
menu->addActions({ relayAction });
|
||||
|
||||
auto deselect = menu->addAction("Deselect");
|
||||
auto deselect = menu->addAction(QString("Deselect %1").arg(selectedCall));
|
||||
deselect->setDisabled(missingCallsign);
|
||||
connect(deselect, &QAction::triggered, this, [this](){
|
||||
ui->tableWidgetRXAll->clearSelection();
|
||||
@@ -1343,6 +1395,17 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
|
||||
|
||||
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);
|
||||
|
||||
// this must be the last statement of constructor
|
||||
@@ -1400,12 +1463,29 @@ void MainWindow::initializeDummyData(){
|
||||
foreach(auto call, calls){
|
||||
CallDetail cd = {};
|
||||
cd.call = call;
|
||||
cd.snr = i++;
|
||||
cd.freq = 500 + 100*i;
|
||||
cd.snr = i == 3 ? -100 : i;
|
||||
cd.utcTimestamp = dt;
|
||||
cd.grid = i == 5 ? "J042" : i == 6 ? "FN42" : "";
|
||||
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);
|
||||
|
||||
QTimer::singleShot(10000, this, [this](){
|
||||
tx_watchdog(true);
|
||||
});
|
||||
}
|
||||
|
||||
void MainWindow::initialize_fonts ()
|
||||
@@ -1697,9 +1777,12 @@ void MainWindow::readSettings()
|
||||
m_modeTx=m_settings->value("ModeTx","JT9").toString();
|
||||
if(m_modeTx.mid(0,3)=="JT9") ui->pbTxMode->setText("Tx JT9 @");
|
||||
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());
|
||||
ui->actionSave_all->setChecked(m_settings->value("SaveAll",false).toBool());
|
||||
|
||||
// these save settings should never be enabled unless specifically called out by the user for every session.
|
||||
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(m_settings->value("RxFreq",1500).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());
|
||||
//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"
|
||||
@@ -1968,11 +2054,15 @@ void MainWindow::dataSink(qint64 frames)
|
||||
}
|
||||
m_fileToSave.clear ();
|
||||
|
||||
// the following is potential a threading hazard - not a good
|
||||
// idea to pass pointer to be processed in another thread
|
||||
m_saveWAVWatcher.setFuture (QtConcurrent::run (std::bind (&MainWindow::save_wave_file,
|
||||
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)));
|
||||
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
|
||||
// idea to pass pointer to be processed in another thread
|
||||
m_saveWAVWatcher.setFuture (QtConcurrent::run (std::bind (&MainWindow::save_wave_file,
|
||||
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)));
|
||||
}
|
||||
|
||||
if (m_mode=="WSPR") {
|
||||
QString c2name_string {m_fnameWE + ".c2"};
|
||||
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 ()},
|
||||
};
|
||||
auto file_name = name + ".wav";
|
||||
qDebug() << "saving" << file_name;
|
||||
BWFFile wav {format, file_name, list_info};
|
||||
if (!wav.open (BWFFile::WriteOnly)
|
||||
|| 0 > wav.write (reinterpret_cast<char const *> (data)
|
||||
@@ -2175,7 +2266,7 @@ void MainWindow::fastSink(qint64 frames)
|
||||
auto const& period_start = now.addSecs (-n);
|
||||
m_fnameWE = m_config.save_directory ().absoluteFilePath (period_start.toString ("yyMMdd_hhmmss"));
|
||||
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;
|
||||
// the following is potential a threading hazard - not a good
|
||||
// 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()
|
||||
{
|
||||
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 ())));
|
||||
if (MessageBox::Yes == button) {
|
||||
Q_FOREACH (auto const& file
|
||||
@@ -4682,6 +4773,10 @@ void MainWindow::guiUpdate()
|
||||
|
||||
void MainWindow::startTx()
|
||||
{
|
||||
if(m_tx_watchdog){
|
||||
return;
|
||||
}
|
||||
|
||||
if(!prepareNextMessageFrame()){
|
||||
return;
|
||||
}
|
||||
@@ -4755,7 +4850,7 @@ void MainWindow::stopTx()
|
||||
tx_status_label.setText("");
|
||||
}
|
||||
|
||||
if(prepareNextMessageFrame()){
|
||||
if(!m_tx_watchdog && prepareNextMessageFrame()){
|
||||
continueTx();
|
||||
} else {
|
||||
// TODO: jsherer - split this up...
|
||||
@@ -5914,7 +6009,7 @@ void MainWindow::displayTextForFreq(QString text, int freq, QDateTime date, bool
|
||||
}
|
||||
|
||||
if(isNewLine){
|
||||
//m_rxFrameBlockNumbers.remove(freq);
|
||||
m_rxFrameBlockNumbers.remove(freq);
|
||||
m_rxFrameBlockNumbers.remove(lowFreq);
|
||||
m_rxFrameBlockNumbers.remove(highFreq);
|
||||
block = -1;
|
||||
@@ -6171,7 +6266,7 @@ void MainWindow::on_extFreeTextMsgEdit_currentTextChanged (QString const& text)
|
||||
QTextCursor c = ui->extFreeTextMsgEdit->textCursor();
|
||||
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);
|
||||
}
|
||||
@@ -7908,12 +8003,7 @@ void MainWindow::on_deselectButton_pressed(){
|
||||
clearCallsignSelected();
|
||||
}
|
||||
|
||||
void MainWindow::on_tableWidgetRXAll_cellClicked(int row, int /*col*/){
|
||||
auto item = ui->tableWidgetRXAll->item(row, 0);
|
||||
int offset = item->text().toInt();
|
||||
|
||||
setFreqOffsetForRestore(offset, false);
|
||||
|
||||
void MainWindow::on_tableWidgetRXAll_cellClicked(int /*row*/, int /*col*/){
|
||||
ui->tableWidgetCalls->selectionModel()->select(
|
||||
ui->tableWidgetCalls->selectionModel()->selection(),
|
||||
QItemSelectionModel::Deselect);
|
||||
@@ -7966,15 +8056,6 @@ void MainWindow::on_tableWidgetRXAll_selectionChanged(const QItemSelection &/*se
|
||||
}
|
||||
|
||||
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()->selection(),
|
||||
QItemSelectionModel::Deselect);
|
||||
@@ -7984,6 +8065,7 @@ void MainWindow::on_tableWidgetCalls_cellDoubleClicked(int row, int col){
|
||||
on_tableWidgetCalls_cellClicked(row, col);
|
||||
|
||||
auto call = callsignSelected();
|
||||
|
||||
addMessageText(call);
|
||||
}
|
||||
|
||||
@@ -8137,7 +8219,7 @@ void MainWindow::on_pbTxMode_clicked()
|
||||
|
||||
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(m_config.split_mode () && ui->cbCQTx->isEnabled () && ui->cbCQTx->isVisible () &&
|
||||
ui->cbCQTx->isChecked())
|
||||
@@ -8174,7 +8256,26 @@ void MainWindow::setXIT(int n, Frequency base)
|
||||
|
||||
void MainWindow::qsy(int 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){
|
||||
@@ -8199,8 +8300,8 @@ bool MainWindow::tryRestoreFreqOffset(){
|
||||
|
||||
void MainWindow::setFreq4(int rxFreq, int txFreq)
|
||||
{
|
||||
// don't allow QSY if we've already queued a transmission
|
||||
if(isMessageQueuedForTransmit()){
|
||||
// don't allow QSY if we've already queued a transmission, unless we have that functionality enabled.
|
||||
if(isMessageQueuedForTransmit() && !m_config.tx_qsy_allowed()){
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -8600,7 +8701,7 @@ void MainWindow::transmitDisplay (bool transmitting)
|
||||
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 ();
|
||||
if (ui->cbHoldTxFreq->isChecked ()) {
|
||||
ui->RxFreqSpinBox->setEnabled (QSY_allowed);
|
||||
@@ -9243,6 +9344,23 @@ void MainWindow::processBufferedActivity() {
|
||||
foreach(auto freq, m_messageBuffer.keys()) {
|
||||
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()) {
|
||||
continue;
|
||||
}
|
||||
@@ -9432,6 +9550,13 @@ void MainWindow::processCommandActivity() {
|
||||
|
||||
// QUERIED SNR
|
||||
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));
|
||||
}
|
||||
|
||||
@@ -9506,7 +9631,7 @@ void MainWindow::processCommandActivity() {
|
||||
#endif
|
||||
|
||||
// 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
|
||||
// 2. if so, forward
|
||||
@@ -9517,8 +9642,8 @@ void MainWindow::processCommandActivity() {
|
||||
auto text = d.text;
|
||||
auto match = re.match(text);
|
||||
|
||||
// if the text starts with a callsign, relay.
|
||||
if(match.hasMatch()){
|
||||
// if the text starts with a callsign, and relay is not disabled, then relay.
|
||||
if(match.hasMatch() && !m_config.relay_off()){
|
||||
// replace freetext with relayed free text
|
||||
if(match.captured("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
|
||||
// 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.
|
||||
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){
|
||||
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){
|
||||
@@ -9709,7 +9834,7 @@ void MainWindow::processAlertReplyForCommand(CommandDetail d, QString from, QStr
|
||||
diag->setLabel(QString("Message to send to %1:").arg(fromLabel));
|
||||
|
||||
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();
|
||||
@@ -9721,6 +9846,7 @@ void MainWindow::processAlertReplyForCommand(CommandDetail d, QString from, QStr
|
||||
QSound::play(wav);
|
||||
}
|
||||
|
||||
msgBox->setModal(false);
|
||||
msgBox->show();
|
||||
}
|
||||
|
||||
@@ -9770,12 +9896,8 @@ void MainWindow::processTxQueue(){
|
||||
f = currentFreqOffset();
|
||||
}
|
||||
|
||||
if(!isFreqOffsetFree(f, 60)){
|
||||
f = findFreeFreqOffset(500, 2000, 60);
|
||||
}
|
||||
|
||||
// we need a valid frequency...
|
||||
if(f == 0){
|
||||
if(f <= 0){
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -9800,7 +9922,7 @@ void MainWindow::processTxQueue(){
|
||||
// add the message to the outgoing message text box
|
||||
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 ||
|
||||
(ui->autoReplyButton->isChecked()) ||
|
||||
(ui->beaconButton->isChecked() && message.message.contains("BEACON"))
|
||||
@@ -9852,6 +9974,13 @@ void MainWindow::displayBandActivity() {
|
||||
// Sort!
|
||||
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 leftItems = m_bandActivity[left];
|
||||
auto rightItems = m_bandActivity[right];
|
||||
@@ -9870,7 +9999,7 @@ void MainWindow::displayBandActivity() {
|
||||
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 rightItems = m_bandActivity[right];
|
||||
|
||||
@@ -9882,19 +10011,19 @@ void MainWindow::displayBandActivity() {
|
||||
return true;
|
||||
}
|
||||
|
||||
auto leftLast = leftItems.last();
|
||||
auto rightLast = rightItems.last();
|
||||
auto leftActivity = leftItems.last();
|
||||
auto rightActivity = rightItems.last();
|
||||
|
||||
return leftLast.snr < rightLast.snr;
|
||||
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;
|
||||
};
|
||||
|
||||
auto sortBy = getSortBy("bandActivity", "offset");
|
||||
bool reverse = false;
|
||||
if(sortBy.startsWith("-")){
|
||||
sortBy = sortBy.mid(1);
|
||||
reverse = true;
|
||||
}
|
||||
|
||||
// compare offset
|
||||
qStableSort(keys.begin(), keys.end());
|
||||
|
||||
@@ -9983,7 +10112,11 @@ void MainWindow::displayBandActivity() {
|
||||
}
|
||||
|
||||
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()));
|
||||
ageItem->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);
|
||||
}
|
||||
|
||||
|
||||
// Build the table
|
||||
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 leftActivity = m_callActivity[left];
|
||||
auto rightActivity = m_callActivity[right];
|
||||
@@ -10044,23 +10185,19 @@ void MainWindow::displayCallActivity() {
|
||||
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 rightActivity = m_callActivity[right];
|
||||
|
||||
if(leftActivity.grid.isEmpty()){
|
||||
return false;
|
||||
int leftDistance = reverse ? -100000 : 100000;
|
||||
int rightDistance = reverse ? -100000 : 100000;
|
||||
if(!leftActivity.grid.isEmpty()){
|
||||
calculateDistance(leftActivity.grid, &leftDistance);
|
||||
}
|
||||
|
||||
if(rightActivity.grid.isEmpty()){
|
||||
return true;
|
||||
if(!rightActivity.grid.isEmpty()){
|
||||
calculateDistance(rightActivity.grid, &rightDistance);
|
||||
}
|
||||
|
||||
int leftDistance = 0;
|
||||
int rightDistance = 0;
|
||||
calculateDistance(leftActivity.grid, &leftDistance);
|
||||
calculateDistance(rightActivity.grid, &rightDistance);
|
||||
|
||||
return leftDistance < rightDistance;
|
||||
};
|
||||
|
||||
@@ -10071,19 +10208,20 @@ void MainWindow::displayCallActivity() {
|
||||
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 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;
|
||||
};
|
||||
|
||||
auto sortBy = getSortBy("callActivity", "callsign");
|
||||
bool reverse = false;
|
||||
if(sortBy.startsWith("-")){
|
||||
sortBy = sortBy.mid(1);
|
||||
reverse = true;
|
||||
}
|
||||
|
||||
// compare callsign
|
||||
qStableSort(keys.begin(), keys.end());
|
||||
@@ -10616,9 +10754,9 @@ void MainWindow::astroUpdate ()
|
||||
m_config.my_grid(), m_hisGrid,
|
||||
m_freqNominal,
|
||||
"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
|
||||
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_monitoring || m_transmitting)
|
||||
// no Doppler correction below 6m
|
||||
@@ -10680,7 +10818,7 @@ void MainWindow::setRig (Frequency f)
|
||||
&& m_frequency_list_fcal_iter != m_config.frequencies ()->end ()) {
|
||||
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_transmitting && m_config.split_mode ())
|
||||
@@ -10834,6 +10972,7 @@ void MainWindow::tx_watchdog (bool triggered)
|
||||
m_bTxTime=false;
|
||||
if (m_tune) stop_tuning ();
|
||||
if (m_auto) auto_tx_mode (false);
|
||||
stopTx();
|
||||
tx_status_label.setStyleSheet ("QLabel{background-color: #ff0000}");
|
||||
tx_status_label.setText ("Runaway Tx watchdog");
|
||||
QApplication::alert (this);
|
||||
|
||||
@@ -45,6 +45,7 @@
|
||||
#include "varicode.h"
|
||||
#include "MessageClient.hpp"
|
||||
#include "APRSISClient.h"
|
||||
#include "keyeater.h"
|
||||
|
||||
#define NUM_JT4_SYMBOLS 206 //(72+31)*2, embedded sync
|
||||
#define NUM_JT65_SYMBOLS 126 //63 data + 63 sync
|
||||
@@ -710,8 +711,8 @@ private:
|
||||
};
|
||||
|
||||
struct MessageBuffer {
|
||||
QQueue<CallDetail> compound;
|
||||
CommandDetail cmd;
|
||||
QQueue<CallDetail> compound;
|
||||
QList<ActivityDetail> msgs;
|
||||
};
|
||||
|
||||
@@ -932,47 +933,6 @@ private:
|
||||
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 void getDev(int* numDevices,char hostAPI_DeviceName[][50],
|
||||
int minChan[], int maxChan[],
|
||||
|
||||
@@ -4470,10 +4470,10 @@ list. The list can be maintained in Settings (F2).</string>
|
||||
</action>
|
||||
<action name="actionDelete_all_wav_files_in_SaveDir">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Delete all *.wav && *.c2 files in SaveDir</string>
|
||||
<string>Delete all *.wav files in SaveDir</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionQuickDecode">
|
||||
@@ -4500,9 +4500,6 @@ list. The list can be maintained in Settings (F2).</string>
|
||||
<property name="text">
|
||||
<string>None</string>
|
||||
</property>
|
||||
<property name="visible">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionSave_all">
|
||||
<property name="checkable">
|
||||
|
||||
@@ -10,6 +10,18 @@ MessageReplyDialog::MessageReplyDialog(QWidget *parent) :
|
||||
ui(new Ui::MessageReplyDialog)
|
||||
{
|
||||
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()
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
#define MESSAGEREPLYDIALOG_H
|
||||
|
||||
#include <QDialog>
|
||||
#include "keyeater.h"
|
||||
|
||||
namespace Ui {
|
||||
class MessageReplyDialog;
|
||||
|
||||
@@ -215,7 +215,7 @@ void WideGraph::on_bppSpinBox_valueChanged(int n) //b
|
||||
}
|
||||
|
||||
void WideGraph::on_qsyPushButton_clicked(){
|
||||
int hzDelta = rxFreq() - ui->centerSpinBox->value();
|
||||
int hzDelta = rxFreq() - centerFreq();
|
||||
emit qsy(hzDelta);
|
||||
}
|
||||
|
||||
@@ -269,6 +269,11 @@ int WideGraph::rxFreq() //rxFr
|
||||
return ui->widePlot->rxFreq();
|
||||
}
|
||||
|
||||
int WideGraph::centerFreq()
|
||||
{
|
||||
return ui->centerSpinBox->value();
|
||||
}
|
||||
|
||||
int WideGraph::nStartFreq() //nStartFreq
|
||||
{
|
||||
return ui->widePlot->startFreq();
|
||||
|
||||
@@ -29,6 +29,7 @@ public:
|
||||
void dataSink2(float s[], float df3, int ihsym, int ndiskdata);
|
||||
void setRxFreq(int n);
|
||||
int rxFreq();
|
||||
int centerFreq();
|
||||
int nStartFreq();
|
||||
int Fmin();
|
||||
int Fmax();
|
||||
|
||||
@@ -73,7 +73,8 @@ SOURCES += \
|
||||
MessageClient.cpp \
|
||||
SelfDestructMessageBox.cpp \
|
||||
APRSISClient.cpp \
|
||||
messagereplydialog.cpp
|
||||
messagereplydialog.cpp \
|
||||
keyeater.cpp
|
||||
|
||||
HEADERS += qt_helpers.hpp \
|
||||
pimpl_h.hpp pimpl_impl.hpp \
|
||||
@@ -98,7 +99,8 @@ HEADERS += qt_helpers.hpp \
|
||||
MessageClient.hpp \
|
||||
SelfDestructMessageBox.h \
|
||||
APRSISClient.h \
|
||||
messagereplydialog.h
|
||||
messagereplydialog.h \
|
||||
keyeater.h
|
||||
|
||||
|
||||
INCLUDEPATH += qmake_only
|
||||
|
||||