Compare commits
59 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 495c16892f | |||
| c596f23a05 | |||
| b69e042f21 | |||
| ec568966c8 | |||
| eb062fb0b8 | |||
| 9907a80136 | |||
| cd9079e7ff | |||
| 42a8338d1c | |||
| f44b1154b7 | |||
| 722f2f10ae | |||
| 2a7f38b187 | |||
| f9ab37530c | |||
| 442ff4b21d | |||
| ecacddb165 | |||
| 6aab2276ed | |||
| 5c9f9e8141 | |||
| 60563a7dc3 | |||
| 7255728049 | |||
| 50094fd8a9 | |||
| c45f4c137a | |||
| 16b46176a6 | |||
| 0df4bbcd29 | |||
| 3bbea95955 | |||
| fa0baad9a0 | |||
| 7b7493d560 | |||
| dc6de6d819 | |||
| b7a51a5764 | |||
| 145bc8d292 | |||
| f58ce3aec0 | |||
| 27b45a26d9 | |||
| 0653f81a0d | |||
| 1134cd5782 | |||
| aa1871dc66 | |||
| 56869d16a9 | |||
| ccf00dc460 | |||
| 57ad5fd0bc | |||
| 7d9553dd7c | |||
| cad3f43752 | |||
| 2605fb1a8f | |||
| 130b749dfe | |||
| 04bdf8574a | |||
| 0dfc805a49 | |||
| 022866b52b | |||
| 9ed0fe80d2 | |||
| 7837ff5d74 | |||
| bee42d1762 | |||
| 26c76662ac | |||
| e3a9762179 | |||
| d048f5a2ab | |||
| 0a95c79f3a | |||
| 762f0fb3e1 | |||
| 812b11a53d | |||
| c517b555d8 | |||
| f610e946fc | |||
| cb71c3dcf4 | |||
| 5c8ff568c3 | |||
| 87cdc7f7e7 | |||
| e694d862aa | |||
| 4df7aae11a |
BIN
Binary file not shown.
@@ -2,13 +2,15 @@
|
||||
# To pass variables to cpack from cmake, they must be configured
|
||||
# in this file.
|
||||
|
||||
set (CPACK_SET_DESTDIR true)
|
||||
|
||||
set (CPACK_PACKAGE_VENDOR "@PROJECT_VENDOR@")
|
||||
set (CPACK_PACKAGE_CONTACT "@PROJECT_CONTACT@")
|
||||
set (CPACK_PACKAGE_DESCRIPTION_SUMMARY "@PROJECT_SUMMARY_DESCRIPTION@")
|
||||
set (CPACK_RESOURCE_FILE_LICENSE "@PROJECT_SOURCE_DIR@/COPYING")
|
||||
set (CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME})
|
||||
set (CPACK_PACKAGE_EXECUTABLES wsjtx "@PROJECT_NAME@")
|
||||
set (CPACK_CREATE_DESKTOP_LINKS wsjtx)
|
||||
set (CPACK_PACKAGE_EXECUTABLES wsjtx-ft8call "@PROJECT_NAME@")
|
||||
set (CPACK_CREATE_DESKTOP_LINKS wsjtx-ft8call)
|
||||
set (CPACK_STRIP_FILES TRUE)
|
||||
|
||||
#
|
||||
@@ -21,7 +23,7 @@ set (CPACK_STRIP_FILES TRUE)
|
||||
if (CPACK_GENERATOR MATCHES "NSIS")
|
||||
set (CPACK_STRIP_FILES FALSE) # breaks Qt packaging on Windows
|
||||
|
||||
set (CPACK_NSIS_INSTALL_ROOT "C:\\WSJT")
|
||||
set (CPACK_NSIS_INSTALL_ROOT "C:\\FT8Call")
|
||||
|
||||
# set the install/unistall icon used for the installer itself
|
||||
# There is a bug in NSI that does not handle full unix paths properly.
|
||||
@@ -35,13 +37,13 @@ if (CPACK_GENERATOR MATCHES "NSIS")
|
||||
"@PROJECT_HOMEPAGE@" "@PROJECT_NAME@ Web Site"
|
||||
)
|
||||
# Use the icon from wsjtx for add-remove programs
|
||||
set (CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\wsjtx.exe")
|
||||
set (CPACK_NSIS_INSTALLED_ICON_NAME "bin\\\\wsjtx-ft8call.exe")
|
||||
|
||||
set (CPACK_NSIS_DISPLAY_NAME "${CPACK_PACKAGE_DESCRIPTION_SUMMARY}")
|
||||
set (CPACK_NSIS_HELP_LINK "@PROJECT_MANUAL_DIRECTORY_URL@/@PROJECT_MANUAL@")
|
||||
set (CPACK_NSIS_URL_INFO_ABOUT "@PROJECT_HOMEPAGE@")
|
||||
set (CPACK_NSIS_CONTACT "${CPACK_PACKAGE_CONTACT}")
|
||||
set (CPACK_NSIS_MUI_FINISHPAGE_RUN "wsjtx.exe")
|
||||
set (CPACK_NSIS_MUI_FINISHPAGE_RUN "wsjtx-ft8call.exe")
|
||||
set (CPACK_NSIS_MODIFY_PATH ON)
|
||||
endif ()
|
||||
|
||||
@@ -65,9 +67,9 @@ if ("${CPACK_GENERATOR}" STREQUAL "WIX")
|
||||
# Reset CPACK_PACKAGE_VERSION to deal with WiX restriction.
|
||||
# But the file names still use the full CMake_VERSION value:
|
||||
set (CPACK_PACKAGE_FILE_NAME
|
||||
"${CPACK_PACKAGE_NAME}-@wsjtx_VERSION@-${CPACK_SYSTEM_NAME}")
|
||||
"${CPACK_PACKAGE_NAME}-@wsjtx-ft8call_VERSION@-${CPACK_SYSTEM_NAME}")
|
||||
set (CPACK_SOURCE_PACKAGE_FILE_NAME
|
||||
"${CPACK_PACKAGE_NAME}-@wsjtx_VERSION@-Source")
|
||||
"${CPACK_PACKAGE_NAME}-@wsjtx-ft8call_VERSION@-Source")
|
||||
|
||||
if (NOT CPACK_WIX_SIZEOF_VOID_P)
|
||||
set (CPACK_WIX_SIZEOF_VOID_P "@CMAKE_SIZEOF_VOID_P@")
|
||||
|
||||
+19
-19
@@ -22,7 +22,7 @@ Change this to the newest SDK available that you can install on your system (10.
|
||||
Do not override this if you intend to build an official deployable installer.")
|
||||
endif (APPLE)
|
||||
|
||||
project (wsjtx C CXX Fortran)
|
||||
project (wsjtx-ft8call C CXX Fortran)
|
||||
|
||||
#
|
||||
# CMake policies
|
||||
@@ -45,10 +45,10 @@ message (STATUS "Building ${CMAKE_PROJECT_NAME}-${wsjtx_VERSION}")
|
||||
#
|
||||
# project information
|
||||
#
|
||||
set (PROJECT_NAME "WSJT-X")
|
||||
set (PROJECT_VENDOR "Joe Taylor, K1JT")
|
||||
set (PROJECT_CONTACT "Joe Taylor <k1jt@arrl.net>")
|
||||
set (PROJECT_COPYRIGHT "Copyright (C) 2001-2018 by Joe Taylor, K1JT")
|
||||
set (PROJECT_NAME "FT8Call")
|
||||
set (PROJECT_VENDOR "Jordan Sherer, KN4CRD")
|
||||
set (PROJECT_CONTACT "Jordan Sherer <kn4crd@gmail.com>")
|
||||
set (PROJECT_COPYRIGHT "Copyright (C) 2001-2018 by Joe Taylor, K1JT, (C) 2018 by Jordan Sherer, KN4CRD")
|
||||
set (PROJECT_HOMEPAGE http://www.physics.princeton.edu/pulsar/K1JT/wsjtx.html)
|
||||
set (PROJECT_MANUAL wsjtx-main)
|
||||
set (PROJECT_MANUAL_DIRECTORY_URL http://www.physics.princeton.edu/pulsar/K1JT/wsjtx-doc/)
|
||||
@@ -1298,7 +1298,7 @@ else (${OPENMP_FOUND} OR APPLE)
|
||||
endif (${OPENMP_FOUND} OR APPLE)
|
||||
|
||||
# build the main application
|
||||
add_executable (wsjtx MACOSX_BUNDLE
|
||||
add_executable (wsjtx-ft8call MACOSX_BUNDLE
|
||||
${wsjtx_CXXSRCS}
|
||||
${wsjtx_GENUISRCS}
|
||||
wsjtx.rc
|
||||
@@ -1307,10 +1307,10 @@ add_executable (wsjtx MACOSX_BUNDLE
|
||||
)
|
||||
|
||||
if (WSJT_CREATE_WINMAIN)
|
||||
set_target_properties (wsjtx PROPERTIES WIN32_EXECUTABLE ON)
|
||||
set_target_properties (wsjtx-ft8call PROPERTIES WIN32_EXECUTABLE ON)
|
||||
endif (WSJT_CREATE_WINMAIN)
|
||||
|
||||
set_target_properties (wsjtx PROPERTIES
|
||||
set_target_properties (wsjtx-ft8call PROPERTIES
|
||||
MACOSX_BUNDLE_INFO_STRING "${WSJTX_DESCRIPTION_SUMMARY}"
|
||||
MACOSX_BUNDLE_ICON_FILE "${WSJTX_ICON_FILE}"
|
||||
MACOSX_BUNDLE_BUNDLE_VERSION ${wsjtx_VERSION}
|
||||
@@ -1321,27 +1321,27 @@ set_target_properties (wsjtx PROPERTIES
|
||||
MACOSX_BUNDLE_GUI_IDENTIFIER "org.k1jt.wsjtx"
|
||||
)
|
||||
|
||||
target_include_directories (wsjtx PRIVATE ${FFTW3_INCLUDE_DIRS})
|
||||
target_include_directories (wsjtx-ft8call PRIVATE ${FFTW3_INCLUDE_DIRS})
|
||||
if (APPLE)
|
||||
target_link_libraries (wsjtx wsjt_fort wsjt_cxx wsjt_qt wsjt_qtmm ${hamlib_LIBRARIES} ${FFTW3_LIBRARIES})
|
||||
target_link_libraries (wsjtx-ft8call wsjt_fort wsjt_cxx wsjt_qt wsjt_qtmm ${hamlib_LIBRARIES} ${FFTW3_LIBRARIES})
|
||||
else ()
|
||||
target_link_libraries (wsjtx wsjt_fort_omp wsjt_cxx wsjt_qt wsjt_qtmm ${hamlib_LIBRARIES} ${FFTW3_LIBRARIES})
|
||||
target_link_libraries (wsjtx-ft8call wsjt_fort_omp wsjt_cxx wsjt_qt wsjt_qtmm ${hamlib_LIBRARIES} ${FFTW3_LIBRARIES})
|
||||
if (OpenMP_C_FLAGS)
|
||||
set_target_properties (wsjtx PROPERTIES
|
||||
set_target_properties (wsjtx-ft8call PROPERTIES
|
||||
COMPILE_FLAGS "${OpenMP_C_FLAGS}"
|
||||
LINK_FLAGS "${OpenMP_C_FLAGS}"
|
||||
)
|
||||
endif ()
|
||||
set_target_properties (wsjtx PROPERTIES
|
||||
set_target_properties (wsjtx-ft8call PROPERTIES
|
||||
Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/fortran_modules_omp
|
||||
)
|
||||
if (WIN32)
|
||||
set_target_properties (wsjtx PROPERTIES
|
||||
set_target_properties (wsjtx-ft8call PROPERTIES
|
||||
LINK_FLAGS -Wl,--stack,16777216
|
||||
)
|
||||
endif ()
|
||||
endif ()
|
||||
qt5_use_modules (wsjtx SerialPort) # not sure why the interface link library syntax above doesn't work
|
||||
qt5_use_modules (wsjtx-ft8call SerialPort) # not sure why the interface link library syntax above doesn't work
|
||||
|
||||
# make a library for WSJT-X UDP servers
|
||||
# add_library (wsjtx_udp SHARED ${UDP_library_CXXSRCS})
|
||||
@@ -1386,18 +1386,18 @@ endif (WSJT_CREATE_WINMAIN)
|
||||
if (UNIX)
|
||||
if (NOT WSJT_SKIP_MANPAGES)
|
||||
add_subdirectory (manpages)
|
||||
add_dependencies (wsjtx manpages)
|
||||
add_dependencies (wsjtx-ft8call manpages)
|
||||
endif (NOT WSJT_SKIP_MANPAGES)
|
||||
if (NOT APPLE)
|
||||
add_subdirectory (debian)
|
||||
add_dependencies (wsjtx debian)
|
||||
add_dependencies (wsjtx-ft8call debian)
|
||||
endif (NOT APPLE)
|
||||
endif (UNIX)
|
||||
|
||||
#
|
||||
# installation
|
||||
#
|
||||
install (TARGETS wsjtx
|
||||
install (TARGETS wsjtx-ft8call
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime
|
||||
BUNDLE DESTINATION . COMPONENT runtime
|
||||
)
|
||||
@@ -1511,7 +1511,7 @@ if (NOT WIN32 AND NOT APPLE)
|
||||
# install a desktop file so wsjtx appears in the application start
|
||||
# menu with an icon
|
||||
install (
|
||||
FILES wsjtx.desktop message_aggregator.desktop
|
||||
FILES wsjtx-ft8call.desktop message_aggregator.desktop
|
||||
DESTINATION share/applications
|
||||
#COMPONENT runtime
|
||||
)
|
||||
|
||||
+18
-2
@@ -560,6 +560,7 @@ private:
|
||||
bool miles_;
|
||||
bool quick_call_;
|
||||
bool disable_TX_on_73_;
|
||||
int beacon_;
|
||||
int watchdog_;
|
||||
bool TX_messages_;
|
||||
bool enable_VHF_features_;
|
||||
@@ -649,6 +650,14 @@ bool Configuration::spot_to_psk_reporter () const
|
||||
// rig must be open and working to spot externally
|
||||
return is_transceiver_online () && m_->spot_to_psk_reporter_;
|
||||
}
|
||||
void Configuration::set_spot_to_psk_reporter (bool spot)
|
||||
{
|
||||
if(m_->spot_to_psk_reporter_ != spot){
|
||||
m_->spot_to_psk_reporter_ = spot;
|
||||
m_->write_settings();
|
||||
}
|
||||
}
|
||||
|
||||
bool Configuration::monitor_off_at_startup () const {return m_->monitor_off_at_startup_;}
|
||||
bool Configuration::monitor_last_used () const {return m_->rig_is_dummy_ || m_->monitor_last_used_;}
|
||||
bool Configuration::log_as_RTTY () const {return m_->log_as_RTTY_;}
|
||||
@@ -661,6 +670,7 @@ bool Configuration::clear_DX () const {return m_->clear_DX_;}
|
||||
bool Configuration::miles () const {return m_->miles_;}
|
||||
bool Configuration::quick_call () const {return m_->quick_call_;}
|
||||
bool Configuration::disable_TX_on_73 () const {return m_->disable_TX_on_73_;}
|
||||
int Configuration::beacon () const {return m_->beacon_;}
|
||||
int Configuration::watchdog () const {return m_->watchdog_;}
|
||||
bool Configuration::TX_messages () const {return m_->TX_messages_;}
|
||||
bool Configuration::enable_VHF_features () const {return m_->enable_VHF_features_;}
|
||||
@@ -1149,6 +1159,7 @@ void Configuration::impl::initialize_models ()
|
||||
ui_->miles_check_box->setChecked (miles_);
|
||||
ui_->quick_call_check_box->setChecked (quick_call_);
|
||||
ui_->disable_TX_on_73_check_box->setChecked (disable_TX_on_73_);
|
||||
ui_->beacon_spin_box->setValue (beacon_);
|
||||
ui_->tx_watchdog_spin_box->setValue (watchdog_);
|
||||
ui_->TX_messages_check_box->setChecked (TX_messages_);
|
||||
ui_->enable_VHF_features_check_box->setChecked(enable_VHF_features_);
|
||||
@@ -1336,7 +1347,9 @@ void Configuration::impl::read_settings ()
|
||||
tx_QSY_allowed_ = settings_->value ("TxQSYAllowed", false).toBool ();
|
||||
use_dynamic_grid_ = settings_->value ("AutoGrid", false).toBool ();
|
||||
|
||||
macros_.setStringList (settings_->value ("Macros", QStringList {"TNX 73 GL"}).toStringList ());
|
||||
auto loadedMacros = settings_->value ("Macros", QStringList {"TNX 73 GL"}).toStringList();
|
||||
|
||||
macros_.setStringList (loadedMacros);
|
||||
|
||||
region_ = settings_->value ("Region", QVariant::fromValue (IARURegions::ALL)).value<IARURegions::Region> ();
|
||||
|
||||
@@ -1386,7 +1399,8 @@ void Configuration::impl::read_settings ()
|
||||
miles_ = settings_->value ("Miles", false).toBool ();
|
||||
quick_call_ = settings_->value ("QuickCall", false).toBool ();
|
||||
disable_TX_on_73_ = settings_->value ("73TxDisable", false).toBool ();
|
||||
watchdog_ = settings_->value ("TxWatchdog", 6).toInt ();
|
||||
beacon_ = settings_->value ("TxBeacon", 5).toInt ();
|
||||
watchdog_ = settings_->value ("TxWatchdog", 0).toInt ();
|
||||
TX_messages_ = settings_->value ("Tx2QSO", true).toBool ();
|
||||
enable_VHF_features_ = settings_->value("VHFUHF",false).toBool ();
|
||||
decode_at_52s_ = settings_->value("Decode52",false).toBool ();
|
||||
@@ -1484,6 +1498,7 @@ void Configuration::impl::write_settings ()
|
||||
settings_->setValue ("Miles", miles_);
|
||||
settings_->setValue ("QuickCall", quick_call_);
|
||||
settings_->setValue ("73TxDisable", disable_TX_on_73_);
|
||||
settings_->setValue ("TxBeacon", beacon_);
|
||||
settings_->setValue ("TxWatchdog", watchdog_);
|
||||
settings_->setValue ("Tx2QSO", TX_messages_);
|
||||
settings_->setValue ("CATForceDTR", rig_params_.force_dtr);
|
||||
@@ -1891,6 +1906,7 @@ void Configuration::impl::accept ()
|
||||
miles_ = ui_->miles_check_box->isChecked ();
|
||||
quick_call_ = ui_->quick_call_check_box->isChecked ();
|
||||
disable_TX_on_73_ = ui_->disable_TX_on_73_check_box->isChecked ();
|
||||
beacon_ = ui_->beacon_spin_box->value ();
|
||||
watchdog_ = ui_->tx_watchdog_spin_box->value ();
|
||||
TX_messages_ = ui_->TX_messages_check_box->isChecked ();
|
||||
data_mode_ = static_cast<DataMode> (ui_->TX_mode_button_group->checkedId ());
|
||||
|
||||
@@ -107,6 +107,7 @@ public:
|
||||
bool id_after_73 () const;
|
||||
bool tx_QSY_allowed () const;
|
||||
bool spot_to_psk_reporter () const;
|
||||
void set_spot_to_psk_reporter (bool);
|
||||
bool monitor_off_at_startup () const;
|
||||
bool monitor_last_used () const;
|
||||
bool log_as_RTTY () const;
|
||||
@@ -119,6 +120,7 @@ public:
|
||||
bool miles () const;
|
||||
bool quick_call () const;
|
||||
bool disable_TX_on_73 () const;
|
||||
int beacon () const;
|
||||
int watchdog () const;
|
||||
bool TX_messages () const;
|
||||
bool split_mode () const;
|
||||
|
||||
+123
-22
@@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>534</width>
|
||||
<height>530</height>
|
||||
<width>825</width>
|
||||
<height>647</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@@ -16,6 +16,9 @@
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QTabWidget" name="configuration_tabs">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Select tab to change configuration parameters.</string>
|
||||
</property>
|
||||
@@ -81,18 +84,18 @@
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QFormLayout" name="formLayout_21">
|
||||
<item row="0" column="0">
|
||||
<widget class="QCheckBox" name="use_dynamic_grid">
|
||||
<property name="toolTip">
|
||||
<string>Check to allow grid changes from external programs</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>AutoGrid</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
<layout class="QFormLayout" name="formLayout_21">
|
||||
<item row="0" column="0">
|
||||
<widget class="QCheckBox" name="use_dynamic_grid">
|
||||
<property name="toolTip">
|
||||
<string>Check to allow grid changes from external programs</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>AutoGrid</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QFormLayout" name="formLayout_2">
|
||||
@@ -117,6 +120,9 @@
|
||||
<layout class="QFormLayout" name="formLayout_13">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Message generation for type 2 compound callsign holders:</string>
|
||||
</property>
|
||||
@@ -131,7 +137,7 @@
|
||||
<item row="0" column="1">
|
||||
<widget class="QComboBox" name="type_2_msg_gen_combo_box">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Type 2 compound callsigns are those with prefixes or suffixes not included in the allowed shortlist (See Help-&gt;Add-on prefixes and suffixes).</p><p>This option determines which generated messages should contain your full type 2 compound call sign rather than your base callsign. It only applies if you have a type 2 compound callsign.</p><p>This option controls the way the messages that are used to answer CQ calls are generated. Generated messages 6 (CQ) and 5 (73) will always contain your full callsign. The JT65 and JT9 protocols allow for some standard messages with your full call at the expense of another piece of information such as the DX call or your locator.</p><p>Choosing message 1 omits the DX callsign which may be an issue when replying to CQ calls. Choosing message 3 also omits the DX callsign and many versions of this and other software will not extract the report. Choosing neither means that your full callsign only goes in your message 5 (73) so your QSO partner may log the wrong callsign.</p><p>None of these options are perfect, message 3 is usually best but be aware your QSO partner may not log the report you send them.</p></body></html></string>
|
||||
@@ -176,6 +182,9 @@
|
||||
<layout class="QGridLayout" name="gridLayout_4">
|
||||
<item row="0" column="0">
|
||||
<widget class="QCheckBox" name="insert_blank_check_box">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Include a separator line between periods in the band activity window.</string>
|
||||
</property>
|
||||
@@ -186,6 +195,9 @@
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QCheckBox" name="DXCC_check_box">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Show if decoded stations are new DXCC entities or worked before.</string>
|
||||
</property>
|
||||
@@ -212,6 +224,9 @@
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QCheckBox" name="miles_check_box">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Show distance to DX station in miles rather than kilometers.</string>
|
||||
</property>
|
||||
@@ -222,6 +237,9 @@
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QCheckBox" name="TX_messages_check_box">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Show outgoing transmitted messages in the Rx frequency window.</string>
|
||||
</property>
|
||||
@@ -234,6 +252,9 @@
|
||||
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||
<item>
|
||||
<widget class="QPushButton" name="font_push_button">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Set the font characteristics for the application.</string>
|
||||
</property>
|
||||
@@ -244,6 +265,9 @@
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="decoded_text_font_push_button">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Set the font characteristics for the Band Activity and Rx Frequency areas.</string>
|
||||
</property>
|
||||
@@ -269,6 +293,9 @@
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QCheckBox" name="ppfx_check_box">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Show principal prefix instead of country name</string>
|
||||
</property>
|
||||
@@ -292,14 +319,46 @@
|
||||
<layout class="QGridLayout" name="gridLayout_8">
|
||||
<item row="4" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_12">
|
||||
<item>
|
||||
<widget class="QLabel" name="beacon_label_10">
|
||||
<property name="text">
|
||||
<string>Beacon every:</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>beacon_spin_box</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSpinBox" name="beacon_spin_box">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Number of minutes between unattended beacons</p></body></html></string>
|
||||
</property>
|
||||
<property name="suffix">
|
||||
<string> minutes</string>
|
||||
</property>
|
||||
<property name="prefix">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>5</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_7">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Fixed</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<width>40</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
@@ -330,7 +389,7 @@
|
||||
<string/>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>6</number>
|
||||
<number>0</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -351,6 +410,9 @@
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QCheckBox" name="enable_VHF_features_check_box">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Enable VHF/UHF/Microwave features</string>
|
||||
</property>
|
||||
@@ -358,6 +420,9 @@
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QCheckBox" name="decode_at_52s_check_box">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Decode after EME delay</string>
|
||||
</property>
|
||||
@@ -372,6 +437,9 @@
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QCheckBox" name="tx_QSY_check_box">
|
||||
<property name="enabled">
|
||||
<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>
|
||||
@@ -384,6 +452,9 @@
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_9">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="CW_id_after_73_check_box">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Send a CW ID after every 73 or free text message.</string>
|
||||
</property>
|
||||
@@ -407,6 +478,9 @@
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
@@ -423,6 +497,9 @@
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSpinBox" name="CW_id_interval_spin_box">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
@@ -451,6 +528,9 @@ quiet period when decoding is done.</string>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QCheckBox" name="quick_call_check_box">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Automatic transmission mode.</string>
|
||||
</property>
|
||||
@@ -461,6 +541,9 @@ quiet period when decoding is done.</string>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QCheckBox" name="disable_TX_on_73_check_box">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Turns off automatic transmissions after sending a 73 or any other free
|
||||
text message.</string>
|
||||
@@ -1644,6 +1727,9 @@ QListView::item:hover {
|
||||
<layout class="QGridLayout" name="gridLayout_14">
|
||||
<item row="0" column="0">
|
||||
<widget class="QCheckBox" name="prompt_to_log_check_box">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>The program will pop up a partially completed Log QSO dialog when you send a 73 or free text message.</string>
|
||||
</property>
|
||||
@@ -1691,6 +1777,9 @@ QListView::item:hover {
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QCheckBox" name="report_in_comments_check_box">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Some logging programs will not accept the type of reports
|
||||
saved by this program.
|
||||
@@ -1704,6 +1793,9 @@ comments field.</string>
|
||||
</item>
|
||||
<item row="3" column="0" colspan="2">
|
||||
<widget class="QCheckBox" name="clear_DX_check_box">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Check this option to force the clearing of the DX Call
|
||||
and DX Grid fields when a 73 or free text message is sent.</string>
|
||||
@@ -2357,6 +2449,9 @@ Right click for insert and delete options.</string>
|
||||
<layout class="QGridLayout" name="gridLayout_9">
|
||||
<item row="0" column="1">
|
||||
<widget class="QGroupBox" name="groupBox_5">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="title">
|
||||
<string>Miscellaneous</string>
|
||||
</property>
|
||||
@@ -2455,7 +2550,7 @@ Right click for insert and delete options.</string>
|
||||
<item row="8" column="0">
|
||||
<widget class="QCheckBox" name="cbx4ToneSpacing">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Generate Tx audio with four times the normal tone spacing. Intended for special LF/MF transmitters that use a divide-by-4 before generating RF.</p></body></html></string>
|
||||
@@ -2470,6 +2565,9 @@ Right click for insert and delete options.</string>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QGroupBox" name="groupBox_6">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>User-selectable parameters for JT65 VHF/UHF/Microwave decoding.</p></body></html></string>
|
||||
</property>
|
||||
@@ -2551,6 +2649,9 @@ Right click for insert and delete options.</string>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QGroupBox" name="groupBox_7">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
@@ -2768,12 +2869,12 @@ soundcard changes</string>
|
||||
</connection>
|
||||
</connections>
|
||||
<buttongroups>
|
||||
<buttongroup name="CAT_data_bits_button_group"/>
|
||||
<buttongroup name="PTT_method_button_group"/>
|
||||
<buttongroup name="TX_audio_source_button_group"/>
|
||||
<buttongroup name="split_mode_button_group"/>
|
||||
<buttongroup name="CAT_stop_bits_button_group"/>
|
||||
<buttongroup name="CAT_handshake_button_group"/>
|
||||
<buttongroup name="PTT_method_button_group"/>
|
||||
<buttongroup name="TX_mode_button_group"/>
|
||||
<buttongroup name="CAT_data_bits_button_group"/>
|
||||
<buttongroup name="split_mode_button_group"/>
|
||||
<buttongroup name="CAT_handshake_button_group"/>
|
||||
</buttongroups>
|
||||
</ui>
|
||||
|
||||
@@ -23,7 +23,8 @@ namespace
|
||||
"MSK144",
|
||||
"QRA64",
|
||||
"FreqCal",
|
||||
"FT8"
|
||||
"FT8",
|
||||
"FT8Free"
|
||||
};
|
||||
std::size_t constexpr mode_names_size = sizeof (mode_names) / sizeof (mode_names[0]);
|
||||
}
|
||||
|
||||
@@ -50,6 +50,7 @@ public:
|
||||
QRA64,
|
||||
FreqCal,
|
||||
FT8,
|
||||
FT8Free,
|
||||
MODES_END_SENTINAL_AND_COUNT // this must be last
|
||||
};
|
||||
Q_ENUM (Mode)
|
||||
|
||||
+4
-4
@@ -1,6 +1,6 @@
|
||||
# Version number components
|
||||
set (WSJTX_VERSION_MAJOR 1)
|
||||
set (WSJTX_VERSION_MINOR 9)
|
||||
set (WSJTX_VERSION_PATCH 0)
|
||||
set (WSJTX_RC 2) # release candidate number, comment out or zero for development versions
|
||||
set (WSJTX_VERSION_MAJOR 0)
|
||||
set (WSJTX_VERSION_MINOR 0)
|
||||
set (WSJTX_VERSION_PATCH 4)
|
||||
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
|
||||
|
||||
@@ -105,7 +105,8 @@ int main(int argc, char *argv[])
|
||||
// that GUI has correct l18n
|
||||
|
||||
// Override programs executable basename as application name.
|
||||
a.setApplicationName ("WSJT-X");
|
||||
//a.setApplicationName ("WSJT-X");
|
||||
a.setApplicationName("FT8Call");
|
||||
a.setApplicationVersion (version ());
|
||||
|
||||
#if QT_VERSION >= 0x050200
|
||||
@@ -259,7 +260,7 @@ int main(int argc, char *argv[])
|
||||
multi_settings.set_common_value (splash_flag_name, false);
|
||||
splash.close ();
|
||||
});
|
||||
splash.show ();
|
||||
//splash.show ();
|
||||
a.processEvents ();
|
||||
}
|
||||
}
|
||||
@@ -295,8 +296,12 @@ int main(int argc, char *argv[])
|
||||
mem_jt9.setKey(a.applicationName ());
|
||||
|
||||
if(!mem_jt9.attach()) {
|
||||
std::cerr << QString("memory attach error: %1").arg(mem_jt9.error()).toLocal8Bit ().data () << std::endl;
|
||||
|
||||
if (!mem_jt9.create(sizeof(struct dec_data))) {
|
||||
splash.hide ();
|
||||
std::cerr << QString("memory create error: %1").arg(mem_jt9.error()).toLocal8Bit ().data () << std::endl;
|
||||
|
||||
MessageBox::critical_message (nullptr, a.translate ("main", "Shared memory error"),
|
||||
a.translate ("main", "Unable to create shared memory segment"));
|
||||
throw std::runtime_error {"Shared memory error"};
|
||||
@@ -324,7 +329,7 @@ int main(int argc, char *argv[])
|
||||
// run the application UI
|
||||
MainWindow w(temp_dir, multiple, &multi_settings, &mem_jt9, downSampleFactor, &splash);
|
||||
w.show();
|
||||
splash.raise ();
|
||||
//splash.raise ();
|
||||
QObject::connect (&a, SIGNAL (lastWindowClosed()), &a, SLOT (quit()));
|
||||
result = a.exec();
|
||||
}
|
||||
|
||||
+1143
-32
File diff suppressed because it is too large
Load Diff
+106
-1
@@ -16,6 +16,7 @@
|
||||
#include <QProgressDialog>
|
||||
#include <QAbstractSocket>
|
||||
#include <QHostAddress>
|
||||
#include <QPair>
|
||||
#include <QPointer>
|
||||
#include <QSet>
|
||||
#include <QVector>
|
||||
@@ -37,6 +38,7 @@
|
||||
#include "astro.h"
|
||||
#include "MessageBox.hpp"
|
||||
#include "NetworkAccessManager.hpp"
|
||||
#include "qorderedmap.h"
|
||||
|
||||
#define NUM_JT4_SYMBOLS 206 //(72+31)*2, embedded sync
|
||||
#define NUM_JT65_SYMBOLS 126 //63 data + 63 sync
|
||||
@@ -117,6 +119,15 @@ public slots:
|
||||
void msgAvgDecode2();
|
||||
void fastPick(int x0, int x1, int y);
|
||||
|
||||
void clearActivity();
|
||||
int logRxTxMessageText(QDateTime date, bool isFree, QString text, int freq, bool tx, int block=-1);
|
||||
void addMessageText(QString text);
|
||||
void resetMessage();
|
||||
void resetMessageUI();
|
||||
void createMessage(QString const& text);
|
||||
void createMessageTransmitQueue(QString const& text);
|
||||
void resetMessageTransmitQueue();
|
||||
QString popMessageFrame();
|
||||
protected:
|
||||
void keyPressEvent (QKeyEvent *) override;
|
||||
void closeEvent(QCloseEvent *) override;
|
||||
@@ -132,9 +143,13 @@ private slots:
|
||||
void on_tx5_currentTextChanged (QString const&);
|
||||
void on_tx6_editingFinished();
|
||||
void on_actionSettings_triggered();
|
||||
void preparePSKReporter();
|
||||
void on_spotButton_clicked(bool checked);
|
||||
void on_monitorButton_clicked (bool);
|
||||
void on_actionAbout_triggered();
|
||||
void on_autoButton_clicked (bool);
|
||||
void on_labDialFreq_clicked();
|
||||
void on_monitorTxButton_clicked();
|
||||
void on_stopTxButton_clicked();
|
||||
void on_stopButton_clicked();
|
||||
void on_actionRelease_Notes_triggered ();
|
||||
@@ -180,6 +195,9 @@ private slots:
|
||||
void on_txb5_clicked();
|
||||
void on_txb5_doubleClicked ();
|
||||
void on_txb6_clicked();
|
||||
void on_startTxButton_toggled(bool checked);
|
||||
void splitAndSendNextMessage();
|
||||
void on_rbNextFreeTextMsg_toggled (bool status);
|
||||
void on_lookupButton_clicked();
|
||||
void on_addButton_clicked();
|
||||
void on_dxCallEntry_textChanged (QString const&);
|
||||
@@ -201,8 +219,10 @@ private slots:
|
||||
void on_actionErase_ALL_TXT_triggered();
|
||||
void on_actionErase_FoxQSO_txt_triggered();
|
||||
void on_actionErase_wsjtx_log_adi_triggered();
|
||||
void startTx();
|
||||
void startTx2();
|
||||
void startP1();
|
||||
void continueTx();
|
||||
void stopTx();
|
||||
void stopTx2();
|
||||
void on_pbCallCQ_clicked();
|
||||
@@ -213,12 +233,38 @@ private slots:
|
||||
void on_pbSend73_clicked();
|
||||
void on_rbGenMsg_clicked(bool checked);
|
||||
void on_rbFreeText_clicked(bool checked);
|
||||
void on_clearAction_triggered(QObject * sender);
|
||||
void on_cqMacroButton_clicked();
|
||||
void on_deMacroButton_clicked();
|
||||
void on_replyMacroButton_clicked();
|
||||
void on_qthMacroButton_clicked();
|
||||
void on_snrMacroButton_clicked();
|
||||
void on_macrosMacroButton_pressed();
|
||||
void on_tableWidgetRXAll_cellClicked(int row, int col);
|
||||
void on_tableWidgetRXAll_cellDoubleClicked(int row, int col);
|
||||
void on_tableWidgetRXAll_selectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
|
||||
void on_tableWidgetCalls_cellClicked(int row, int col);
|
||||
void on_tableWidgetCalls_cellDoubleClicked(int row, int col);
|
||||
void on_tableWidgetCalls_selectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
|
||||
void on_freeTextMsg_currentTextChanged (QString const&);
|
||||
void on_nextFreeTextMsg_currentTextChanged (QString const&);
|
||||
void on_extFreeTextMsg_currentTextChanged (QString const&);
|
||||
void on_extFreeTextMsgEdit_currentTextChanged (QString const&);
|
||||
QStringList buildFT8MessageFrames(QString const& text);
|
||||
QString parseFT8Message(QString input);
|
||||
int countFreeTextMsgs(QString input);
|
||||
bool prepareNextMessageFrame();
|
||||
bool isFreqOffsetFree(int f, int bw);
|
||||
int findFreeFreqOffset(int fmin, int fmax, int bw);
|
||||
void scheduleBeacon(bool first=false);
|
||||
void prepareBeacon();
|
||||
QString calculateDistance(QString const& grid);
|
||||
void on_rptSpinBox_valueChanged(int n);
|
||||
void killFile();
|
||||
void on_tuneButton_clicked (bool);
|
||||
void on_pbR2T_clicked();
|
||||
void on_pbT2R_clicked();
|
||||
void on_beaconButton_clicked();
|
||||
void acceptQSO (QDateTime const&, QString const& call, QString const& grid
|
||||
, Frequency dial_freq, QString const& mode
|
||||
, QString const& rpt_sent, QString const& rpt_received
|
||||
@@ -285,7 +331,7 @@ private slots:
|
||||
void on_actionMSK144_triggered();
|
||||
void on_actionQRA64_triggered();
|
||||
void on_actionFreqCal_triggered();
|
||||
void splash_done ();
|
||||
void splash_done ();
|
||||
void on_measure_check_box_stateChanged (int);
|
||||
void on_sbNlist_valueChanged(int n);
|
||||
void on_sbNslots_valueChanged(int n);
|
||||
@@ -498,6 +544,7 @@ private:
|
||||
}
|
||||
m_QSOProgress;
|
||||
|
||||
int m_extFreeTxtPos;
|
||||
int m_ihsym;
|
||||
int m_nzap;
|
||||
int m_npts8;
|
||||
@@ -545,6 +592,7 @@ private:
|
||||
QTimer minuteTimer;
|
||||
QTimer splashTimer;
|
||||
QTimer p1Timer;
|
||||
QTimer beaconTimer;
|
||||
|
||||
QString m_path;
|
||||
QString m_baseCall;
|
||||
@@ -583,6 +631,43 @@ private:
|
||||
qint32 ncall;
|
||||
};
|
||||
|
||||
struct CallDetail
|
||||
{
|
||||
QString call;
|
||||
QString grid;
|
||||
int freq;
|
||||
QDateTime utcTimestamp;
|
||||
int snr;
|
||||
};
|
||||
|
||||
struct ActivityDetail
|
||||
{
|
||||
bool isFree;
|
||||
bool isLowConfidence;
|
||||
QString firstCall;
|
||||
QString secondCall;
|
||||
int freq;
|
||||
QString text;
|
||||
QDateTime utcTimestamp;
|
||||
int snr;
|
||||
};
|
||||
|
||||
struct RXDetail
|
||||
{
|
||||
bool isFree;
|
||||
int freq;
|
||||
QString text;
|
||||
QDateTime utcTimestamp;
|
||||
};
|
||||
|
||||
int m_txFrameCount;
|
||||
QQueue<QString> m_txFrameQueue;
|
||||
QQueue<RXDetail> m_rxFrameQueue;
|
||||
QCache<int, QDateTime> m_rxDirectedCache; // freq -> last directed rx
|
||||
QCache<QString, int> m_rxCallCache; // call -> last freq seen
|
||||
QMap<int, int> m_rxFrameBlockNumbers; // freq -> block
|
||||
QMap<int, QList<ActivityDetail>> m_bandActivity; // freq -> [(text, last timestamp), ...]
|
||||
QMap<QString, CallDetail> m_callActivity; // call -> (last freq, last timestamp)
|
||||
QMap<QString,FoxQSO> m_foxQSO;
|
||||
QMap<QString,QString> m_loggedByFox;
|
||||
|
||||
@@ -591,6 +676,7 @@ private:
|
||||
QQueue<QString> m_foxRR73Queue;
|
||||
QQueue<qint64> m_foxRateQueue;
|
||||
|
||||
QDateTime m_nextBeacon;
|
||||
QDateTime m_dateTimeQSOOn;
|
||||
QDateTime m_dateTimeLastTX;
|
||||
|
||||
@@ -653,6 +739,8 @@ private:
|
||||
void locationChange(QString const& location);
|
||||
void replayDecodes ();
|
||||
void postDecode (bool is_new, QString const& message);
|
||||
void displayTransmit();
|
||||
void displayActivity();
|
||||
void postWSPRDecode (bool is_new, QStringList message_parts);
|
||||
void enable_DXCC_entity (bool on);
|
||||
void switch_mode (Mode);
|
||||
@@ -700,6 +788,23 @@ 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);
|
||||
}
|
||||
};
|
||||
|
||||
extern int killbyname(const char* progName);
|
||||
extern void getDev(int* numDevices,char hostAPI_DeviceName[][50],
|
||||
int minChan[], int maxChan[],
|
||||
|
||||
+3522
-2165
File diff suppressed because it is too large
Load Diff
Executable
+3
@@ -0,0 +1,3 @@
|
||||
echo make
|
||||
echo cp wsjtx ft8call
|
||||
echo linuxdeployqt ./ft8call -appimage -bundle-non-qt-libs -no-strip -no-translations
|
||||
+8
-4
@@ -57,12 +57,14 @@ void MeterWidget::paintEvent (QPaintEvent * event)
|
||||
auto const& target = contentsRect ();
|
||||
QRect r {QPoint {target.left (), static_cast<int> (target.top () + target.height () - m_signal / (double)MAXDB * target.height ())}
|
||||
, QPoint {target.right (), target.bottom ()}};
|
||||
p.setBrush (QColor(85,170,85));
|
||||
//p.setBrush (QColor(85,170,85));
|
||||
p.setBrush (Qt::green);
|
||||
if (m_sigPeak > 85) {
|
||||
p.setBrush(Qt::red);
|
||||
}
|
||||
else if (m_noisePeak < 15) {
|
||||
p.setBrush(QColor(232,81,0));
|
||||
//p.setBrush(QColor(232,81,0));
|
||||
p.setBrush(Qt::yellow);
|
||||
}
|
||||
p.drawRect (r);
|
||||
|
||||
@@ -70,9 +72,11 @@ void MeterWidget::paintEvent (QPaintEvent * event)
|
||||
{
|
||||
// Draw peak hold indicator
|
||||
auto peak = static_cast<int> (target.top () + target.height () - m_noisePeak / (double)MAXDB * target.height ());
|
||||
p.setBrush (Qt::black);
|
||||
//p.setBrush (Qt::black);
|
||||
p.setBrush (Qt::white);
|
||||
p.translate (target.left (), peak);
|
||||
p.drawPolygon (QPolygon {{{0, -4}, {0, 4}, {target.width (), 0}}});
|
||||
//p.drawPolygon (QPolygon {{{0, -4}, {0, 4}, {target.width (), 0}}});
|
||||
p.drawPolygon (QPolygon { { {target.width (), -4}, {target.width (), 4}, {0, 0} } });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -36,7 +36,7 @@ CPlotter::CPlotter(QWidget *parent) : //CPlotter Constructor
|
||||
m_line {0},
|
||||
m_fSample {12000},
|
||||
m_nsps {6912},
|
||||
m_Percent2DScreen {30}, //percent of screen used for 2D display
|
||||
m_Percent2DScreen {0}, //percent of screen used for 2D display
|
||||
m_Percent2DScreen0 {0},
|
||||
m_rxFreq {1020},
|
||||
m_txFreq {0},
|
||||
|
||||
+611
@@ -0,0 +1,611 @@
|
||||
#ifndef ORDEREDMAP_H
|
||||
#define ORDEREDMAP_H
|
||||
|
||||
#include <QtGlobal>
|
||||
#include <QHash>
|
||||
#include <QLinkedList>
|
||||
#include <QList>
|
||||
#include <QPair>
|
||||
|
||||
template <typename Key> inline bool oMHashEqualToKey(const Key &key1, const Key &key2)
|
||||
{
|
||||
// Key type must provide '==' operator
|
||||
return key1 == key2;
|
||||
}
|
||||
|
||||
template <typename Ptr> inline bool oMHashEqualToKey(Ptr *key1, Ptr *key2)
|
||||
{
|
||||
Q_ASSERT(sizeof(quintptr) == sizeof(Ptr *));
|
||||
return quintptr(key1) == quintptr(key2);
|
||||
}
|
||||
|
||||
template <typename Ptr> inline bool oMHashEqualToKey(const Ptr *key1, const Ptr *key2)
|
||||
{
|
||||
Q_ASSERT(sizeof(quintptr) == sizeof(const Ptr *));
|
||||
return quintptr(key1) == quintptr(key2);
|
||||
}
|
||||
|
||||
template <typename Key, typename Value>
|
||||
class OrderedMap
|
||||
{
|
||||
class OMHash;
|
||||
|
||||
typedef typename QLinkedList<Key>::iterator QllIterator;
|
||||
typedef typename QLinkedList<Key>::const_iterator QllConstIterator;
|
||||
typedef QPair<Value, QllIterator> OMHashValue;
|
||||
|
||||
typedef typename OMHash::iterator OMHashIterator;
|
||||
typedef typename OMHash::const_iterator OMHashConstIterator;
|
||||
|
||||
public:
|
||||
|
||||
class iterator;
|
||||
class const_iterator;
|
||||
|
||||
typedef typename OrderedMap<Key, Value>::iterator Iterator;
|
||||
typedef typename OrderedMap<Key, Value>::const_iterator ConstIterator;
|
||||
|
||||
explicit OrderedMap();
|
||||
|
||||
OrderedMap(const OrderedMap<Key, Value>& other);
|
||||
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(5, 2, 0))
|
||||
OrderedMap(OrderedMap<Key, Value>&& other);
|
||||
#endif
|
||||
|
||||
void clear();
|
||||
|
||||
bool contains(const Key &key) const;
|
||||
|
||||
int count() const;
|
||||
|
||||
bool empty() const;
|
||||
|
||||
iterator insert(const Key &key, const Value &value);
|
||||
|
||||
bool isEmpty() const;
|
||||
|
||||
QList<Key> keys() const;
|
||||
|
||||
int remove(const Key &key);
|
||||
|
||||
int size() const;
|
||||
|
||||
Value take(const Key &key);
|
||||
|
||||
Value value(const Key &key) const;
|
||||
|
||||
Value value(const Key &key, const Value &defaultValue) const;
|
||||
|
||||
QList<Value> values() const;
|
||||
|
||||
OrderedMap<Key, Value> & operator=(const OrderedMap<Key, Value>& other);
|
||||
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(5, 2, 0))
|
||||
OrderedMap<Key, Value> & operator=(OrderedMap<Key, Value>&& other);
|
||||
#endif
|
||||
|
||||
bool operator==(const OrderedMap<Key, Value> &other) const;
|
||||
|
||||
bool operator!=(const OrderedMap<Key, Value> &other) const;
|
||||
|
||||
Value& operator[](const Key &key);
|
||||
|
||||
const Value operator[](const Key &key) const;
|
||||
|
||||
iterator begin();
|
||||
|
||||
const_iterator begin() const;
|
||||
|
||||
iterator end();
|
||||
|
||||
const_iterator end() const;
|
||||
|
||||
iterator erase(iterator pos);
|
||||
|
||||
iterator find(const Key& key);
|
||||
|
||||
const_iterator find(const Key& key) const;
|
||||
|
||||
class const_iterator;
|
||||
|
||||
class iterator
|
||||
{
|
||||
QllIterator qllIter;
|
||||
OMHash *data;
|
||||
friend class const_iterator;
|
||||
friend class OrderedMap;
|
||||
|
||||
public:
|
||||
iterator() : data(NULL) {}
|
||||
|
||||
iterator(const QllIterator &qllIter, OMHash *data) :
|
||||
qllIter(qllIter), data(data) {}
|
||||
|
||||
const Key & key() const
|
||||
{
|
||||
return *qllIter;
|
||||
}
|
||||
|
||||
Value & value() const
|
||||
{
|
||||
OMHashIterator hit = data->find(*qllIter);
|
||||
OMHashValue &pair = hit.value();
|
||||
return pair.first;
|
||||
}
|
||||
|
||||
Value & operator*() const
|
||||
{
|
||||
return value();
|
||||
}
|
||||
|
||||
iterator operator+(int i) const
|
||||
{
|
||||
QllIterator q = qllIter;
|
||||
q += i;
|
||||
|
||||
return iterator(q, data);
|
||||
}
|
||||
|
||||
iterator operator-(int i) const
|
||||
{
|
||||
return operator +(- i);
|
||||
}
|
||||
|
||||
iterator& operator+=(int i)
|
||||
{
|
||||
qllIter += i;
|
||||
return *this;
|
||||
}
|
||||
|
||||
iterator& operator-=(int i)
|
||||
{
|
||||
qllIter -= i;
|
||||
return *this;
|
||||
}
|
||||
|
||||
iterator& operator++()
|
||||
{
|
||||
++qllIter;
|
||||
return *this;
|
||||
}
|
||||
|
||||
iterator operator++(int)
|
||||
{
|
||||
iterator it = *this;
|
||||
qllIter++;
|
||||
return it;
|
||||
}
|
||||
|
||||
iterator operator--()
|
||||
{
|
||||
--qllIter;
|
||||
return *this;
|
||||
}
|
||||
|
||||
iterator operator--(int)
|
||||
{
|
||||
iterator it = *this;
|
||||
qllIter--;
|
||||
return it;
|
||||
}
|
||||
|
||||
bool operator ==(const iterator &other) const
|
||||
{
|
||||
return (qllIter == other.qllIter);
|
||||
}
|
||||
|
||||
bool operator !=(const iterator &other) const
|
||||
{
|
||||
return (qllIter != other.qllIter);
|
||||
}
|
||||
};
|
||||
|
||||
class const_iterator
|
||||
{
|
||||
|
||||
QllConstIterator qllConstIter;
|
||||
const OMHash *data;
|
||||
|
||||
public:
|
||||
const_iterator() : data(NULL) {}
|
||||
|
||||
const_iterator(const iterator &i) :
|
||||
qllConstIter(i.qllIter), data(i.data) {}
|
||||
|
||||
const_iterator(const QllConstIterator &qllConstIter, const OMHash* data) :
|
||||
qllConstIter(qllConstIter), data(data) {}
|
||||
|
||||
const Key & key() const
|
||||
{
|
||||
return *qllConstIter;
|
||||
}
|
||||
|
||||
const Value & value() const
|
||||
{
|
||||
OMHashConstIterator hit = data->find(*qllConstIter);
|
||||
const OMHashValue &pair = hit.value();
|
||||
return pair.first;
|
||||
}
|
||||
|
||||
const Value & operator*() const
|
||||
{
|
||||
return value();
|
||||
}
|
||||
|
||||
const_iterator operator+(int i) const
|
||||
{
|
||||
QllConstIterator q = qllConstIter;
|
||||
q += i;
|
||||
|
||||
return const_iterator(q, data);
|
||||
}
|
||||
|
||||
const_iterator operator-(int i) const
|
||||
{
|
||||
return operator +(- i);
|
||||
}
|
||||
|
||||
const_iterator& operator+=(int i)
|
||||
{
|
||||
qllConstIter += i;
|
||||
return *this;
|
||||
}
|
||||
|
||||
const_iterator& operator-=(int i)
|
||||
{
|
||||
qllConstIter -= i;
|
||||
return *this;
|
||||
}
|
||||
|
||||
const_iterator& operator++()
|
||||
{
|
||||
++qllConstIter;
|
||||
return *this;
|
||||
}
|
||||
|
||||
const_iterator operator++(int)
|
||||
{
|
||||
const_iterator it = *this;
|
||||
qllConstIter++;
|
||||
return it;
|
||||
}
|
||||
|
||||
const_iterator operator--()
|
||||
{
|
||||
--qllConstIter;
|
||||
return *this;
|
||||
}
|
||||
|
||||
const_iterator operator--(int)
|
||||
{
|
||||
const_iterator it = *this;
|
||||
qllConstIter--;
|
||||
return it;
|
||||
}
|
||||
|
||||
bool operator ==(const const_iterator &other) const
|
||||
{
|
||||
return (qllConstIter == other.qllConstIter);
|
||||
}
|
||||
|
||||
bool operator !=(const const_iterator &other) const
|
||||
{
|
||||
return (qllConstIter != other.qllConstIter);
|
||||
}
|
||||
};
|
||||
|
||||
private:
|
||||
|
||||
class OMHash : public QHash<Key, OMHashValue >
|
||||
{
|
||||
public:
|
||||
bool operator == (const OMHash &other) const
|
||||
{
|
||||
if (size() != other.size()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (QHash<Key, OMHashValue >::operator ==(other)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
typename QHash<Key, OMHashValue >::const_iterator it1 = this->constBegin();
|
||||
typename QHash<Key, OMHashValue >::const_iterator it2 = other.constBegin();
|
||||
|
||||
while(it1 != this->end()) {
|
||||
OMHashValue v1 = it1.value();
|
||||
OMHashValue v2 = it2.value();
|
||||
|
||||
if ((v1.first != v2.first) || !oMHashEqualToKey<Key>(it1.key(), it2.key())) {
|
||||
return false;
|
||||
}
|
||||
++it1;
|
||||
++it2;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
private:
|
||||
void copy(const OrderedMap<Key, Value> &other);
|
||||
|
||||
OMHash data;
|
||||
QLinkedList<Key> insertOrder;
|
||||
};
|
||||
|
||||
template <typename Key, typename Value>
|
||||
OrderedMap<Key, Value>::OrderedMap() {}
|
||||
|
||||
template <typename Key, typename Value>
|
||||
OrderedMap<Key, Value>::OrderedMap(const OrderedMap<Key, Value>& other)
|
||||
{
|
||||
copy(other);
|
||||
}
|
||||
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(5, 2, 0))
|
||||
template <typename Key, typename Value>
|
||||
OrderedMap<Key, Value>::OrderedMap(OrderedMap<Key, Value>&& other)
|
||||
{
|
||||
data = std::move(other.data);
|
||||
insertOrder = std::move(other.insertOrder);
|
||||
}
|
||||
#endif
|
||||
|
||||
template <typename Key, typename Value>
|
||||
void OrderedMap<Key, Value>::clear()
|
||||
{
|
||||
data.clear();
|
||||
insertOrder.clear();
|
||||
}
|
||||
|
||||
template <typename Key, typename Value>
|
||||
bool OrderedMap<Key, Value>::contains(const Key &key) const
|
||||
{
|
||||
return data.contains(key);
|
||||
}
|
||||
|
||||
template <typename Key, typename Value>
|
||||
int OrderedMap<Key, Value>::count() const
|
||||
{
|
||||
return data.count();
|
||||
}
|
||||
|
||||
template <typename Key, typename Value>
|
||||
bool OrderedMap<Key, Value>::empty() const
|
||||
{
|
||||
return data.empty();
|
||||
}
|
||||
|
||||
template <typename Key, typename Value>
|
||||
typename OrderedMap<Key, Value>::iterator OrderedMap<Key, Value>::insert(const Key &key, const Value &value)
|
||||
{
|
||||
OMHashIterator it = data.find(key);
|
||||
|
||||
if (it == data.end()) {
|
||||
// New key
|
||||
QllIterator ioIter = insertOrder.insert(insertOrder.end(), key);
|
||||
OMHashValue pair(value, ioIter);
|
||||
data.insert(key, pair);
|
||||
return iterator(ioIter, &data);
|
||||
}
|
||||
|
||||
OMHashValue pair = it.value();
|
||||
// remove old reference
|
||||
insertOrder.erase(pair.second);
|
||||
// Add new reference
|
||||
QllIterator ioIter = insertOrder.insert(insertOrder.end(), key);
|
||||
pair.first = value;
|
||||
pair.second = ioIter;
|
||||
return iterator(ioIter, &data);
|
||||
}
|
||||
|
||||
template <typename Key, typename Value>
|
||||
bool OrderedMap<Key, Value>::isEmpty() const
|
||||
{
|
||||
return data.isEmpty();
|
||||
}
|
||||
|
||||
template<typename Key, typename Value>
|
||||
QList<Key> OrderedMap<Key, Value>::keys() const
|
||||
{
|
||||
return QList<Key>::fromStdList(insertOrder.toStdList());
|
||||
}
|
||||
|
||||
template<typename Key, typename Value>
|
||||
int OrderedMap<Key, Value>::remove(const Key &key)
|
||||
{
|
||||
OMHashIterator it = data.find(key);
|
||||
if (it == data.end()) {
|
||||
return 0;
|
||||
}
|
||||
OMHashValue pair = it.value();
|
||||
insertOrder.erase(pair.second);
|
||||
data.erase(it);
|
||||
return 1;
|
||||
}
|
||||
|
||||
template<typename Key, typename Value>
|
||||
int OrderedMap<Key, Value>::size() const
|
||||
{
|
||||
return data.size();
|
||||
}
|
||||
|
||||
template<typename Key, typename Value>
|
||||
void OrderedMap<Key, Value>::copy(const OrderedMap<Key, Value> &other)
|
||||
{
|
||||
/* Since I'm storing iterators of QLinkedList, I simply cannot make
|
||||
* a trivial copy of the linked list. This is a limitation due to implicit
|
||||
* sharing used in Qt containers, due to which iterator active on one
|
||||
* QLL can change the data of another QLL even after creating a copy.
|
||||
*
|
||||
* Because of this, the old iterators have to be invalidated and new ones
|
||||
* have to be generated.
|
||||
*/
|
||||
insertOrder.clear();
|
||||
// Copy hash
|
||||
data = other.data;
|
||||
|
||||
QllConstIterator cit = other.insertOrder.begin();
|
||||
for (; cit != other.insertOrder.end(); ++cit) {
|
||||
Key key = *cit;
|
||||
QllIterator ioIter = insertOrder.insert(insertOrder.end(), key);
|
||||
OMHashIterator it = data.find(key);
|
||||
(*it).second = ioIter;
|
||||
}
|
||||
}
|
||||
|
||||
template<typename Key, typename Value>
|
||||
Value OrderedMap<Key, Value>::take(const Key &key)
|
||||
{
|
||||
OMHashIterator it = data.find(key);
|
||||
if (it == data.end()) {
|
||||
return Value();
|
||||
}
|
||||
OMHashValue pair = it.value();
|
||||
insertOrder.erase(pair.second);
|
||||
data.erase(it);
|
||||
return pair.first;
|
||||
}
|
||||
|
||||
template <typename Key, typename Value>
|
||||
Value OrderedMap<Key, Value>::value(const Key &key) const
|
||||
{
|
||||
return data.value(key).first;
|
||||
}
|
||||
|
||||
template <typename Key, typename Value>
|
||||
Value OrderedMap<Key, Value>::value(const Key &key, const Value &defaultValue) const
|
||||
{
|
||||
OMHashConstIterator it = data.constFind(key);
|
||||
if (it == data.end()) {
|
||||
return defaultValue;
|
||||
}
|
||||
OMHashValue pair = it.value();
|
||||
return pair.first;
|
||||
}
|
||||
|
||||
template <typename Key, typename Value>
|
||||
QList<Value> OrderedMap<Key, Value>::values() const
|
||||
{
|
||||
QList<Value> values;
|
||||
foreach (const Key &key, insertOrder.toStdList()) {
|
||||
OMHashValue v = data.value(key);
|
||||
values.append(v.first);
|
||||
}
|
||||
return values;
|
||||
}
|
||||
|
||||
template <typename Key, typename Value>
|
||||
OrderedMap<Key, Value> & OrderedMap<Key, Value>::operator=(const OrderedMap<Key, Value>& other)
|
||||
{
|
||||
if (this != &other) {
|
||||
copy(other);
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
|
||||
#if (QT_VERSION >= QT_VERSION_CHECK(5, 2, 0))
|
||||
template <typename Key, typename Value>
|
||||
OrderedMap<Key, Value> & OrderedMap<Key, Value>::operator=(OrderedMap<Key, Value>&& other)
|
||||
{
|
||||
if (this != &other) {
|
||||
data = other.data;
|
||||
insertOrder = other.insertOrder;
|
||||
}
|
||||
return *this;
|
||||
}
|
||||
#endif
|
||||
|
||||
template <typename Key, typename Value>
|
||||
bool OrderedMap<Key, Value>::operator==(const OrderedMap<Key, Value> &other) const
|
||||
{
|
||||
// 2 Ordered maps are equal if they have the same contents in the same order
|
||||
return ((data == other.data) && (insertOrder == other.insertOrder));
|
||||
}
|
||||
|
||||
template <typename Key, typename Value>
|
||||
bool OrderedMap<Key, Value>::operator!=(const OrderedMap<Key, Value> &other) const
|
||||
{
|
||||
return ((data != other.data) || (insertOrder != other.insertOrder));
|
||||
}
|
||||
|
||||
template <typename Key, typename Value>
|
||||
Value& OrderedMap<Key, Value>::operator[](const Key &key)
|
||||
{
|
||||
OMHashIterator it = data.find(key);
|
||||
if (it == data.end()) {
|
||||
insert(key, Value());
|
||||
it = data.find(key);
|
||||
}
|
||||
OMHashValue &pair = it.value();
|
||||
return pair.first;
|
||||
}
|
||||
|
||||
template <typename Key, typename Value>
|
||||
const Value OrderedMap<Key, Value>::operator[](const Key &key) const
|
||||
{
|
||||
return value(key);
|
||||
}
|
||||
|
||||
template <typename Key, typename Value>
|
||||
typename OrderedMap<Key, Value>::iterator OrderedMap<Key, Value>::begin()
|
||||
{
|
||||
return iterator(insertOrder.begin(), &data);
|
||||
}
|
||||
|
||||
template <typename Key, typename Value>
|
||||
typename OrderedMap<Key, Value>::const_iterator OrderedMap<Key, Value>::begin() const
|
||||
{
|
||||
return const_iterator(insertOrder.begin(), &data);
|
||||
}
|
||||
|
||||
|
||||
template <typename Key, typename Value>
|
||||
typename OrderedMap<Key, Value>::iterator OrderedMap<Key, Value>::end()
|
||||
{
|
||||
return iterator(insertOrder.end(), &data);
|
||||
}
|
||||
|
||||
template <typename Key, typename Value>
|
||||
typename OrderedMap<Key, Value>::const_iterator OrderedMap<Key, Value>::end() const
|
||||
{
|
||||
return const_iterator(insertOrder.end(), &data);
|
||||
}
|
||||
|
||||
template <typename Key, typename Value>
|
||||
typename OrderedMap<Key, Value>::iterator OrderedMap<Key, Value>::erase(iterator pos)
|
||||
{
|
||||
OMHashIterator hit = data.find(*(pos.qllIter));
|
||||
if (hit == data.end()) {
|
||||
return pos;
|
||||
}
|
||||
data.erase(hit);
|
||||
QllIterator ioIter = insertOrder.erase(pos.qllIter);
|
||||
|
||||
return iterator(ioIter, &data);
|
||||
}
|
||||
|
||||
template <typename Key, typename Value>
|
||||
typename OrderedMap<Key, Value>::iterator OrderedMap<Key, Value>::find(const Key& key)
|
||||
{
|
||||
OMHashIterator hit = data.find(key);
|
||||
if (hit == data.end()) {
|
||||
return end();
|
||||
}
|
||||
|
||||
return iterator(hit.value().second, &data);
|
||||
}
|
||||
|
||||
template <typename Key, typename Value>
|
||||
typename OrderedMap<Key, Value>::const_iterator OrderedMap<Key, Value>::find(const Key& key) const
|
||||
{
|
||||
OMHashConstIterator hit = data.find(key);
|
||||
if (hit == data.end()) {
|
||||
return end();
|
||||
}
|
||||
|
||||
return const_iterator(hit.value().second, &data);
|
||||
}
|
||||
|
||||
#endif // ORDEREDMAP_H
|
||||
+7
-2
@@ -27,6 +27,7 @@ namespace
|
||||
QString revision (QString const& svn_rev_string)
|
||||
{
|
||||
QString result;
|
||||
#if 0
|
||||
auto revision_from_svn = revision_extract_number (svn_rev_string);
|
||||
|
||||
#if defined (CMAKE_BUILD)
|
||||
@@ -59,6 +60,7 @@ QString revision (QString const& svn_rev_string)
|
||||
// not CMake build so all we have is revision passed
|
||||
result = revision_from_svn;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
return result.trimmed ();
|
||||
}
|
||||
@@ -70,19 +72,22 @@ QString version (bool include_patch)
|
||||
if (include_patch)
|
||||
{
|
||||
v += "." WSJTX_STRINGIZE (WSJTX_VERSION_PATCH)
|
||||
#if 0
|
||||
# if defined (WSJTX_RC)
|
||||
+ "-rc" WSJTX_STRINGIZE (WSJTX_RC)
|
||||
# endif
|
||||
#endif
|
||||
;
|
||||
}
|
||||
#else
|
||||
QString v {"Not for Release"};
|
||||
#endif
|
||||
|
||||
return v;
|
||||
}
|
||||
|
||||
QString program_title (QString const& revision)
|
||||
{
|
||||
QString id {QCoreApplication::applicationName () + " v" + QCoreApplication::applicationVersion ()};
|
||||
return id + " " + revision + " by K1JT";
|
||||
QString id {"FT8Call de KN4CRD (v%1) a derivative of WSJT-X by K1JT"};
|
||||
return id.arg(QCoreApplication::applicationVersion ());
|
||||
}
|
||||
|
||||
+8
-1
@@ -44,6 +44,7 @@ protected:
|
||||
QWidget::paintEvent (event);
|
||||
|
||||
QPainter p {this};
|
||||
p.setPen(Qt::white);
|
||||
auto const& target = contentsRect ();
|
||||
QFontMetrics font_metrics {p.font (), this};
|
||||
auto font_offset = font_metrics.ascent () / 2;
|
||||
@@ -82,12 +83,18 @@ SignalMeter::SignalMeter (QWidget * parent)
|
||||
|
||||
m_meter = new MeterWidget;
|
||||
m_meter->setSizePolicy (QSizePolicy::Minimum, QSizePolicy::Minimum);
|
||||
inner_layout->addWidget (m_meter);
|
||||
//inner_layout->addWidget (m_meter);
|
||||
|
||||
m_scale = new Scale;
|
||||
inner_layout->addWidget (m_scale);
|
||||
|
||||
// add this second...
|
||||
inner_layout->addWidget (m_meter);
|
||||
|
||||
m_reading = new QLabel(this);
|
||||
auto p = m_reading->palette();
|
||||
p.setColor(m_reading->foregroundRole(), Qt::white);
|
||||
m_reading->setPalette(p);
|
||||
|
||||
outer_layout->addLayout (inner_layout);
|
||||
outer_layout->addWidget (m_reading);
|
||||
|
||||
+6
-5
@@ -64,8 +64,8 @@ WideGraph::WideGraph(QSettings * settings, QWidget *parent) :
|
||||
ui->bppSpinBox->setValue(n);
|
||||
m_nsmo=m_settings->value("SmoothYellow",1).toInt();
|
||||
ui->smoSpinBox->setValue(m_nsmo);
|
||||
m_Percent2DScreen=m_settings->value("Percent2D",30).toInt();
|
||||
m_waterfallAvg = m_settings->value("WaterfallAvg",5).toInt();
|
||||
m_Percent2DScreen=m_settings->value("Percent2D", 0).toInt();
|
||||
m_waterfallAvg = m_settings->value("WaterfallAvg", 1).toInt();
|
||||
ui->waterfallAvgSpinBox->setValue(m_waterfallAvg);
|
||||
ui->widePlot->setWaterfallAvg(m_waterfallAvg);
|
||||
ui->widePlot->setCurrent(m_settings->value("Current",false).toBool());
|
||||
@@ -76,17 +76,18 @@ WideGraph::WideGraph(QSettings * settings, QWidget *parent) :
|
||||
if(ui->widePlot->cumulative()) ui->spec2dComboBox->setCurrentIndex(1);
|
||||
if(ui->widePlot->linearAvg()) ui->spec2dComboBox->setCurrentIndex(2);
|
||||
if(ui->widePlot->Reference()) ui->spec2dComboBox->setCurrentIndex(3);
|
||||
int nbpp=m_settings->value("BinsPerPixel",2).toInt();
|
||||
int nbpp=m_settings->value("BinsPerPixel", 4).toInt();
|
||||
ui->widePlot->setBinsPerPixel(nbpp);
|
||||
ui->sbPercent2dPlot->setValue(m_Percent2DScreen);
|
||||
ui->widePlot->SetPercent2DScreen(m_Percent2DScreen);
|
||||
ui->widePlot->setStartFreq(m_settings->value("StartFreq",0).toInt());
|
||||
ui->fStartSpinBox->setValue(ui->widePlot->startFreq());
|
||||
m_waterfallPalette=m_settings->value("WaterfallPalette","Default").toString();
|
||||
m_userPalette = WFPalette {m_settings->value("UserPalette").value<WFPalette::Colours> ()};
|
||||
m_fMinPerBand = m_settings->value ("FminPerBand").toHash ();
|
||||
setRxRange ();
|
||||
ui->controls_widget->setVisible(!m_settings->value("HideControls",false).toBool());
|
||||
ui->cbControls->setChecked(!m_settings->value("HideControls",false).toBool());
|
||||
ui->controls_widget->setVisible(!m_settings->value("HideControls", true).toBool());
|
||||
ui->cbControls->setChecked(!m_settings->value("HideControls", true).toBool());
|
||||
}
|
||||
|
||||
int index=0;
|
||||
|
||||
+4
-4
@@ -6,7 +6,7 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>799</width>
|
||||
<width>942</width>
|
||||
<height>337</height>
|
||||
</rect>
|
||||
</property>
|
||||
@@ -68,7 +68,7 @@
|
||||
<string>Controls</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>true</bool>
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
@@ -219,7 +219,7 @@
|
||||
<number>5</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>30</number>
|
||||
<number>0</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -293,7 +293,7 @@
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>2</number>
|
||||
<number>5</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Name=wsjtx-ft8call
|
||||
Comment=Amateur Radio Weak Signal Operating
|
||||
Exec=wsjtx-ft8call
|
||||
Icon=wsjtx_icon
|
||||
Terminal=false
|
||||
X-MultipleArgs=false
|
||||
Type=Application
|
||||
Categories=AudioVideo;Audio;HamRadio;
|
||||
StartupNotify=true
|
||||
@@ -83,7 +83,8 @@ HEADERS += qt_helpers.hpp \
|
||||
logbook/logbook.h logbook/countrydat.h logbook/countriesworked.h logbook/adif.h \
|
||||
messageaveraging.h echoplot.h echograph.h fastgraph.h fastplot.h Modes.hpp WSPRBandHopping.hpp \
|
||||
WsprTxScheduler.h SampleDownloader.hpp MultiSettings.hpp PhaseEqualizationDialog.hpp \
|
||||
IARURegions.hpp MessageBox.hpp EqualizationToolsDialog.hpp
|
||||
IARURegions.hpp MessageBox.hpp EqualizationToolsDialog.hpp \
|
||||
qorderedmap.h
|
||||
|
||||
|
||||
INCLUDEPATH += qmake_only
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE QtCreatorProject>
|
||||
<!-- Written by QtCreator 3.5.1, 2018-02-02T18:34:55. -->
|
||||
<!-- Written by QtCreator 3.5.1, 2018-03-10T16:32:07. -->
|
||||
<qtcreator>
|
||||
<data>
|
||||
<variable>EnvironmentId</variable>
|
||||
|
||||
Reference in New Issue
Block a user