Compare commits
212 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8f8772f1bd | |||
| f09132f6b4 | |||
| bf57a67c43 | |||
| 091b3b3ee8 | |||
| 17033f1044 | |||
| 7c656fac71 | |||
| a6771b81c3 | |||
| eca184bac6 | |||
| 6ad2417804 | |||
| 21e87d8b6f | |||
| 52a5650a74 | |||
| 2158722ebc | |||
| bf11d66f60 | |||
| 371aa1e20c | |||
| 8348f61a94 | |||
| bf28918096 | |||
| 571aa6446d | |||
| 4290dd6e2f | |||
| de66664635 | |||
| 9e9c996813 | |||
| f67ea3803d | |||
| fa00e0dfd6 | |||
| ceaa76c497 | |||
| 9c9a5c2d8b | |||
| d611d83bb9 | |||
| 253b60217f | |||
| 39a536bb91 | |||
| 115a9d65f7 | |||
| 796920cb6b | |||
| c1c7d85195 | |||
| c5a6f76b1e | |||
| 5b198351be | |||
| 246d53201c | |||
| 999a239e67 | |||
| f091cb28ef | |||
| f415b0c94f | |||
| 0bf2afa5f8 | |||
| 706a9b1ebd | |||
| 4cec8b80a3 | |||
| 9e68b8c402 | |||
| 478ba82df7 | |||
| 7aef92dd68 | |||
| 01249bd115 | |||
| 9bee00c5dd | |||
| b9b274f2d6 | |||
| 4a17062487 | |||
| 1c73ce2c90 | |||
| 07a29c7f1d | |||
| f7a941406c | |||
| adecb88c29 | |||
| 857e19ed94 | |||
| f47224979e | |||
| c0833aa753 | |||
| 20d931a9ca | |||
| 1b2f8a1c6c | |||
| 95e75741ed | |||
| dc75c08081 | |||
| 8c204e317b | |||
| a672668c3a | |||
| 8638b53e45 | |||
| 394a6d045f | |||
| 29bbedcc8f | |||
| d66b4ffb37 | |||
| c0c4693782 | |||
| 9223d3da40 | |||
| 83e3f5ddbc | |||
| 0f4057aa97 | |||
| 591629e369 | |||
| 4a96ab3b13 | |||
| e955cff24f | |||
| fe405cfba8 | |||
| 92117aa791 | |||
| d4c2d9a871 | |||
| b2e2b91d31 | |||
| fa864c50cd | |||
| 1c6d1babe6 | |||
| ac27d1a9b6 | |||
| 28eb082655 | |||
| 9a945c156d | |||
| 83c742f7ec | |||
| 7a788c05c8 | |||
| 7b409a6ff4 | |||
| 87a631f5f0 | |||
| efd6b54ba7 | |||
| 553f2400e5 | |||
| 5c84e79e5b | |||
| 052b81ec8f | |||
| 7ecc550bc2 | |||
| b8267372e4 | |||
| 512dffabf4 | |||
| 50a3a56d2d | |||
| deb228948d | |||
| 58032b6ae4 | |||
| 7845736c05 | |||
| 77eb65d6b3 | |||
| 252c21b818 | |||
| 82c3b23e44 | |||
| 5764170975 | |||
| a2c85256e8 | |||
| 9419383ab0 | |||
| 4c63129876 | |||
| f2b876df49 | |||
| f229019ef5 | |||
| 3260bb7b89 | |||
| 2832572741 | |||
| 28df33b218 | |||
| 6ee0820659 | |||
| 2c73ccde9b | |||
| 90ce372081 | |||
| 15d75f7397 | |||
| f47c1a5024 | |||
| c74ed5135b | |||
| b08ecd21e6 | |||
| 1c98d47718 | |||
| 46e11f8d00 | |||
| 1e0a93e076 | |||
| f77f139abb | |||
| 2ae74d8cde | |||
| 369b5fd73a | |||
| 4de968d2f0 | |||
| 09b12701b5 | |||
| d00eee440c | |||
| c1df21f940 | |||
| 9117ad5381 | |||
| a96216e2f8 | |||
| 4140114d8d | |||
| bd34bf104f | |||
| 6a265efe48 | |||
| 983790a3ff | |||
| 43b65d5ca9 | |||
| 8bc61902ac | |||
| 4e0326ad6d | |||
| 808782b965 | |||
| 707f577f31 | |||
| 705244786e | |||
| 4e66e92671 | |||
| 283e7fae77 | |||
| 441936111a | |||
| f81a954d1d | |||
| 23c1730148 | |||
| 05257d287f | |||
| 64b5ebbdd2 | |||
| 91d6836fa5 | |||
| dd3613b214 | |||
| c96522c11b | |||
| 564b93f307 | |||
| 04eaf61c13 | |||
| b800dac9ce | |||
| 2cb78f5414 | |||
| 494459ee11 | |||
| 1cddbdf91e | |||
| 74ea603801 | |||
| 16854627d9 | |||
| 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 ft8call "@PROJECT_NAME@")
|
||||
set (CPACK_CREATE_DESKTOP_LINKS ft8call)
|
||||
set (CPACK_STRIP_FILES TRUE)
|
||||
|
||||
#
|
||||
@@ -19,9 +21,10 @@ set (CPACK_STRIP_FILES TRUE)
|
||||
#set (CPACK_COMPONENT_RUNTIME_DESCRIPTION "@WSJTX_DESCRIPTION_SUMMARY@")
|
||||
|
||||
if (CPACK_GENERATOR MATCHES "NSIS")
|
||||
set (CPACK_SET_DESTDIR FALSE)
|
||||
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 +38,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\\\\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 "ft8call.exe")
|
||||
set (CPACK_NSIS_MODIFY_PATH ON)
|
||||
endif ()
|
||||
|
||||
@@ -65,9 +68,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}-@ft8call_VERSION@-${CPACK_SYSTEM_NAME}")
|
||||
set (CPACK_SOURCE_PACKAGE_FILE_NAME
|
||||
"${CPACK_PACKAGE_NAME}-@wsjtx_VERSION@-Source")
|
||||
"${CPACK_PACKAGE_NAME}-@ft8call_VERSION@-Source")
|
||||
|
||||
if (NOT CPACK_WIX_SIZEOF_VOID_P)
|
||||
set (CPACK_WIX_SIZEOF_VOID_P "@CMAKE_SIZEOF_VOID_P@")
|
||||
|
||||
+25
-24
@@ -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 (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/)
|
||||
@@ -303,6 +303,7 @@ set (wsjtx_CXXSRCS
|
||||
astro.cpp
|
||||
messageaveraging.cpp
|
||||
WsprTxScheduler.cpp
|
||||
varicode.cpp
|
||||
mainwindow.cpp
|
||||
Configuration.cpp
|
||||
main.cpp
|
||||
@@ -1298,7 +1299,7 @@ else (${OPENMP_FOUND} OR APPLE)
|
||||
endif (${OPENMP_FOUND} OR APPLE)
|
||||
|
||||
# build the main application
|
||||
add_executable (wsjtx MACOSX_BUNDLE
|
||||
add_executable (ft8call MACOSX_BUNDLE
|
||||
${wsjtx_CXXSRCS}
|
||||
${wsjtx_GENUISRCS}
|
||||
wsjtx.rc
|
||||
@@ -1307,10 +1308,10 @@ add_executable (wsjtx MACOSX_BUNDLE
|
||||
)
|
||||
|
||||
if (WSJT_CREATE_WINMAIN)
|
||||
set_target_properties (wsjtx PROPERTIES WIN32_EXECUTABLE ON)
|
||||
set_target_properties (ft8call PROPERTIES WIN32_EXECUTABLE ON)
|
||||
endif (WSJT_CREATE_WINMAIN)
|
||||
|
||||
set_target_properties (wsjtx PROPERTIES
|
||||
set_target_properties (ft8call PROPERTIES
|
||||
MACOSX_BUNDLE_INFO_STRING "${WSJTX_DESCRIPTION_SUMMARY}"
|
||||
MACOSX_BUNDLE_ICON_FILE "${WSJTX_ICON_FILE}"
|
||||
MACOSX_BUNDLE_BUNDLE_VERSION ${wsjtx_VERSION}
|
||||
@@ -1321,27 +1322,27 @@ set_target_properties (wsjtx PROPERTIES
|
||||
MACOSX_BUNDLE_GUI_IDENTIFIER "org.k1jt.wsjtx"
|
||||
)
|
||||
|
||||
target_include_directories (wsjtx PRIVATE ${FFTW3_INCLUDE_DIRS})
|
||||
target_include_directories (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 (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 (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 (ft8call PROPERTIES
|
||||
COMPILE_FLAGS "${OpenMP_C_FLAGS}"
|
||||
LINK_FLAGS "${OpenMP_C_FLAGS}"
|
||||
)
|
||||
endif ()
|
||||
set_target_properties (wsjtx PROPERTIES
|
||||
set_target_properties (ft8call PROPERTIES
|
||||
Fortran_MODULE_DIRECTORY ${CMAKE_BINARY_DIR}/fortran_modules_omp
|
||||
)
|
||||
if (WIN32)
|
||||
set_target_properties (wsjtx PROPERTIES
|
||||
set_target_properties (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 (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 +1387,18 @@ endif (WSJT_CREATE_WINMAIN)
|
||||
if (UNIX)
|
||||
if (NOT WSJT_SKIP_MANPAGES)
|
||||
add_subdirectory (manpages)
|
||||
add_dependencies (wsjtx manpages)
|
||||
add_dependencies (ft8call manpages)
|
||||
endif (NOT WSJT_SKIP_MANPAGES)
|
||||
if (NOT APPLE)
|
||||
add_subdirectory (debian)
|
||||
add_dependencies (wsjtx debian)
|
||||
add_dependencies (ft8call debian)
|
||||
endif (NOT APPLE)
|
||||
endif (UNIX)
|
||||
|
||||
#
|
||||
# installation
|
||||
#
|
||||
install (TARGETS wsjtx
|
||||
install (TARGETS ft8call
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT runtime
|
||||
BUNDLE DESTINATION . COMPONENT runtime
|
||||
)
|
||||
@@ -1487,11 +1488,11 @@ add_custom_target (uninstall
|
||||
|
||||
|
||||
# creates svnversion.h using cmake script
|
||||
add_custom_target (revisiontag
|
||||
COMMAND ${CMAKE_COMMAND} -D SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} -D OUTPUT_DIR=${PROJECT_BINARY_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/CMake/getsvn.cmake
|
||||
COMMENT "Generating Subversion revision information"
|
||||
VERBATIM
|
||||
)
|
||||
# add_custom_target (revisiontag
|
||||
# COMMAND ${CMAKE_COMMAND} -D SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} -D OUTPUT_DIR=${PROJECT_BINARY_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/CMake/getsvn.cmake
|
||||
# COMMENT "Generating Subversion revision information"
|
||||
# VERBATIM
|
||||
# )
|
||||
# explicitly say that the wsjt_qt depends on custom target, this is
|
||||
# done indirectly so that the revisiontag target gets built exactly
|
||||
# once per build
|
||||
@@ -1511,7 +1512,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 ft8call.desktop message_aggregator.desktop
|
||||
DESTINATION share/applications
|
||||
#COMPONENT runtime
|
||||
)
|
||||
|
||||
@@ -10,6 +10,7 @@ auto CallsignValidator::validate (QString& input, int& pos) const -> State
|
||||
{
|
||||
auto match = re_.match (input, 0, QRegularExpression::PartialPreferCompleteMatch);
|
||||
input = input.toUpper ();
|
||||
if (input.count(QLatin1Char('/')) > 1) return Invalid;
|
||||
if (match.hasMatch ()) return Acceptable;
|
||||
if (!input.size () || match.hasPartialMatch ()) return Intermediate;
|
||||
pos = input.size ();
|
||||
|
||||
+130
-3
@@ -140,6 +140,7 @@
|
||||
#include <QSettings>
|
||||
#include <QAudioDeviceInfo>
|
||||
#include <QAudioInput>
|
||||
#include <QDebug>
|
||||
#include <QDialog>
|
||||
#include <QAction>
|
||||
#include <QFileDialog>
|
||||
@@ -160,7 +161,6 @@
|
||||
#include <QColorDialog>
|
||||
#include <QSerialPortInfo>
|
||||
#include <QScopedPointer>
|
||||
#include <QDebug>
|
||||
|
||||
#include "pimpl_impl.hpp"
|
||||
#include "qt_helpers.hpp"
|
||||
@@ -181,6 +181,8 @@
|
||||
#include "MaidenheadLocatorValidator.hpp"
|
||||
#include "CallsignValidator.hpp"
|
||||
|
||||
#include "varicode.h"
|
||||
|
||||
#include "ui_Configuration.h"
|
||||
#include "moc_Configuration.cpp"
|
||||
|
||||
@@ -430,6 +432,8 @@ private:
|
||||
Q_SLOT void on_add_macro_push_button_clicked (bool = false);
|
||||
Q_SLOT void on_delete_macro_push_button_clicked (bool = false);
|
||||
Q_SLOT void on_PTT_method_button_group_buttonClicked (int);
|
||||
Q_SLOT void on_station_message_line_edit_textChanged(QString const&);
|
||||
Q_SLOT void on_qth_message_line_edit_textChanged(QString const&);
|
||||
Q_SLOT void on_add_macro_line_edit_editingFinished ();
|
||||
Q_SLOT void delete_macro ();
|
||||
void delete_selected_macros (QModelIndexList);
|
||||
@@ -529,6 +533,11 @@ private:
|
||||
// configuration fields that we publish
|
||||
QString my_callsign_;
|
||||
QString my_grid_;
|
||||
QString my_station_;
|
||||
int my_dBm_;
|
||||
QString my_qth_;
|
||||
int callsign_aging_;
|
||||
int activity_aging_;
|
||||
QColor color_CQ_;
|
||||
QColor next_color_CQ_;
|
||||
QColor color_MyCall_;
|
||||
@@ -548,6 +557,7 @@ private:
|
||||
bool id_after_73_;
|
||||
bool tx_QSY_allowed_;
|
||||
bool spot_to_psk_reporter_;
|
||||
bool autoreply_off_at_startup_;
|
||||
bool monitor_off_at_startup_;
|
||||
bool monitor_last_used_;
|
||||
bool log_as_RTTY_;
|
||||
@@ -560,6 +570,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 +660,15 @@ 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::autoreply_off_at_startup () const {return m_->autoreply_off_at_startup_;}
|
||||
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 +681,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_;}
|
||||
@@ -807,6 +828,30 @@ QString Configuration::my_grid() const
|
||||
return the_grid;
|
||||
}
|
||||
|
||||
QString Configuration::my_station() const
|
||||
{
|
||||
return m_->my_station_;
|
||||
}
|
||||
|
||||
int Configuration::my_dBm() const {
|
||||
return m_->my_dBm_;
|
||||
}
|
||||
|
||||
QString Configuration::my_qth() const
|
||||
{
|
||||
return m_->my_qth_;
|
||||
}
|
||||
|
||||
int Configuration::callsign_aging() const
|
||||
{
|
||||
return m_->callsign_aging_;
|
||||
}
|
||||
|
||||
int Configuration::activity_aging() const
|
||||
{
|
||||
return m_->activity_aging_;
|
||||
}
|
||||
|
||||
void Configuration::set_location (QString const& grid_descriptor)
|
||||
{
|
||||
// change the dynamic grid
|
||||
@@ -945,6 +990,8 @@ Configuration::impl::impl (Configuration * self, QDir const& temp_directory,
|
||||
ui_->callsign_line_edit->setValidator (new CallsignValidator {this});
|
||||
ui_->grid_line_edit->setValidator (new MaidenheadLocatorValidator {this});
|
||||
ui_->add_macro_line_edit->setValidator (new QRegExpValidator {message_alphabet, this});
|
||||
ui_->station_message_line_edit->setValidator (new QRegExpValidator {message_alphabet, this});
|
||||
ui_->qth_message_line_edit->setValidator (new QRegExpValidator {message_alphabet, this});
|
||||
|
||||
ui_->udp_server_port_spin_box->setMinimum (1);
|
||||
ui_->udp_server_port_spin_box->setMaximum (std::numeric_limits<port_type>::max ());
|
||||
@@ -1115,10 +1162,49 @@ void Configuration::impl::initialize_models ()
|
||||
{
|
||||
pal.setColor (QPalette::Base, Qt::white);
|
||||
}
|
||||
|
||||
QMap<int, int> dbm2mw = {
|
||||
{0 , 1},
|
||||
{3 , 2},
|
||||
{7 , 5},
|
||||
{10 , 10},
|
||||
{13 , 20},
|
||||
{17 , 50},
|
||||
{20 , 100},
|
||||
{23 , 200},
|
||||
{27 , 500},
|
||||
{30 , 1000}, // 1W
|
||||
{33 , 2000}, // 2W
|
||||
{37 , 5000}, // 5W
|
||||
{40 , 10000}, // 10W
|
||||
{43 , 20000}, // 20W
|
||||
{47 , 50000}, // 50W
|
||||
{50 , 100000}, // 100W
|
||||
{53 , 200000}, // 200W
|
||||
{57 , 500000}, // 500W
|
||||
{60 , 1000000}, // 1000W
|
||||
};
|
||||
|
||||
ui_->station_power_combo_box->clear();
|
||||
ui_->station_power_combo_box->addItem(QString(""), -1);
|
||||
|
||||
foreach(auto dbm, dbm2mw.keys()){
|
||||
ui_->station_power_combo_box->addItem(QString("%1 (%2 dBm)").arg(Varicode::formatPWR(dbm)).arg(dbm), dbm);
|
||||
|
||||
if(dbm == my_dBm_){
|
||||
ui_->station_power_combo_box->setCurrentIndex(ui_->station_power_combo_box->count()-1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ui_->callsign_line_edit->setPalette (pal);
|
||||
ui_->grid_line_edit->setPalette (pal);
|
||||
ui_->callsign_line_edit->setText (my_callsign_);
|
||||
ui_->grid_line_edit->setText (my_grid_);
|
||||
ui_->callsign_aging_spin_box->setValue(callsign_aging_);
|
||||
ui_->activity_aging_spin_box->setValue(activity_aging_);
|
||||
ui_->station_message_line_edit->setText (my_station_.toUpper());
|
||||
ui_->qth_message_line_edit->setText (my_qth_.toUpper());
|
||||
ui_->use_dynamic_grid->setChecked(use_dynamic_grid_);
|
||||
ui_->labCQ->setStyleSheet(QString("background: %1").arg(color_CQ_.name()));
|
||||
ui_->labMyCall->setStyleSheet(QString("background: %1").arg(color_MyCall_.name()));
|
||||
@@ -1137,6 +1223,7 @@ void Configuration::impl::initialize_models ()
|
||||
ui_->CW_id_after_73_check_box->setChecked (id_after_73_);
|
||||
ui_->tx_QSY_check_box->setChecked (tx_QSY_allowed_);
|
||||
ui_->psk_reporter_check_box->setChecked (spot_to_psk_reporter_);
|
||||
ui_->autoreply_off_check_box->setChecked (autoreply_off_at_startup_);
|
||||
ui_->monitor_off_check_box->setChecked (monitor_off_at_startup_);
|
||||
ui_->monitor_last_used_check_box->setChecked (monitor_last_used_);
|
||||
ui_->log_as_RTTY_check_box->setChecked (log_as_RTTY_);
|
||||
@@ -1149,6 +1236,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_);
|
||||
@@ -1236,6 +1324,11 @@ void Configuration::impl::read_settings ()
|
||||
|
||||
my_callsign_ = settings_->value ("MyCall", QString {}).toString ();
|
||||
my_grid_ = settings_->value ("MyGrid", QString {}).toString ();
|
||||
my_station_ = settings_->value("MyStation", QString {}).toString();
|
||||
my_dBm_ = settings_->value("MyPower", -1).toInt();
|
||||
callsign_aging_ = settings_->value ("CallsignAging", 0).toInt ();
|
||||
activity_aging_ = settings_->value ("ActivityAging", 2).toInt ();
|
||||
my_qth_ = settings_->value("MyQTH", QString {}).toString();
|
||||
next_color_CQ_ = color_CQ_ = settings_->value("colorCQ","#66ff66").toString();
|
||||
next_color_MyCall_ = color_MyCall_ = settings_->value("colorMyCall","#ff6666").toString();
|
||||
next_color_TxMsg_ = color_TxMsg_ = settings_->value("colorTxMsg","#ffff00").toString();
|
||||
@@ -1329,6 +1422,7 @@ void Configuration::impl::read_settings ()
|
||||
|
||||
type_2_msg_gen_ = settings_->value ("Type2MsgGen", QVariant::fromValue (Configuration::type_2_msg_3_full)).value<Configuration::Type2MsgGen> ();
|
||||
|
||||
autoreply_off_at_startup_ = settings_->value ("AutoreplyOFF", false).toBool ();
|
||||
monitor_off_at_startup_ = settings_->value ("MonitorOFF", false).toBool ();
|
||||
monitor_last_used_ = settings_->value ("MonitorLastUsed", false).toBool ();
|
||||
spot_to_psk_reporter_ = settings_->value ("PSKReporter", false).toBool ();
|
||||
@@ -1336,7 +1430,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 +1482,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", 15).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 ();
|
||||
@@ -1419,6 +1516,11 @@ void Configuration::impl::write_settings ()
|
||||
|
||||
settings_->setValue ("MyCall", my_callsign_);
|
||||
settings_->setValue ("MyGrid", my_grid_);
|
||||
settings_->setValue ("MyStation", my_station_);
|
||||
settings_->setValue ("MyPower", my_dBm_);
|
||||
settings_->setValue ("MyQTH", my_qth_);
|
||||
settings_->setValue ("CallsignAging", callsign_aging_);
|
||||
settings_->setValue ("ActivityAging", activity_aging_);
|
||||
settings_->setValue("colorCQ",color_CQ_);
|
||||
settings_->setValue("colorMyCall",color_MyCall_);
|
||||
settings_->setValue("colorTxMsg",color_TxMsg_);
|
||||
@@ -1457,6 +1559,7 @@ void Configuration::impl::write_settings ()
|
||||
settings_->setValue ("AudioInputChannel", AudioDevice::toString (audio_input_channel_));
|
||||
settings_->setValue ("AudioOutputChannel", AudioDevice::toString (audio_output_channel_));
|
||||
settings_->setValue ("Type2MsgGen", QVariant::fromValue (type_2_msg_gen_));
|
||||
settings_->setValue ("AutoreplyOFF", autoreply_off_at_startup_);
|
||||
settings_->setValue ("MonitorOFF", monitor_off_at_startup_);
|
||||
settings_->setValue ("MonitorLastUsed", monitor_last_used_);
|
||||
settings_->setValue ("PSKReporter", spot_to_psk_reporter_);
|
||||
@@ -1484,6 +1587,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);
|
||||
@@ -1869,6 +1973,11 @@ void Configuration::impl::accept ()
|
||||
|
||||
my_callsign_ = ui_->callsign_line_edit->text ();
|
||||
my_grid_ = ui_->grid_line_edit->text ();
|
||||
my_station_ = ui_->station_message_line_edit->text().toUpper();
|
||||
my_dBm_ = ui_->station_power_combo_box->currentData().toInt();
|
||||
my_qth_ = ui_->qth_message_line_edit->text().toUpper();
|
||||
callsign_aging_ = ui_->callsign_aging_spin_box->value();
|
||||
activity_aging_ = ui_->activity_aging_spin_box->value();
|
||||
spot_to_psk_reporter_ = ui_->psk_reporter_check_box->isChecked ();
|
||||
id_interval_ = ui_->CW_id_interval_spin_box->value ();
|
||||
ntrials_ = ui_->sbNtrials->value ();
|
||||
@@ -1878,6 +1987,7 @@ void Configuration::impl::accept ()
|
||||
RxBandwidth_ = ui_->sbBandwidth->value ();
|
||||
id_after_73_ = ui_->CW_id_after_73_check_box->isChecked ();
|
||||
tx_QSY_allowed_ = ui_->tx_QSY_check_box->isChecked ();
|
||||
autoreply_off_at_startup_ = ui_->autoreply_off_check_box->isChecked ();
|
||||
monitor_off_at_startup_ = ui_->monitor_off_check_box->isChecked ();
|
||||
monitor_last_used_ = ui_->monitor_last_used_check_box->isChecked ();
|
||||
type_2_msg_gen_ = static_cast<Type2MsgGen> (ui_->type_2_msg_gen_combo_box->currentIndex ());
|
||||
@@ -1891,6 +2001,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 ());
|
||||
@@ -2151,6 +2262,22 @@ void Configuration::impl::on_sound_output_combo_box_currentTextChanged (QString
|
||||
default_audio_output_device_selected_ = QAudioDeviceInfo::defaultOutputDevice ().deviceName () == text;
|
||||
}
|
||||
|
||||
void Configuration::impl::on_station_message_line_edit_textChanged(QString const &text)
|
||||
{
|
||||
QString upper = text.toUpper();
|
||||
if(text != upper){
|
||||
ui_->station_message_line_edit->setText (upper);
|
||||
}
|
||||
}
|
||||
|
||||
void Configuration::impl::on_qth_message_line_edit_textChanged(QString const &text)
|
||||
{
|
||||
QString upper = text.toUpper();
|
||||
if(text != upper){
|
||||
ui_->qth_message_line_edit->setText (upper);
|
||||
}
|
||||
}
|
||||
|
||||
void Configuration::impl::on_add_macro_line_edit_editingFinished ()
|
||||
{
|
||||
ui_->add_macro_line_edit->setText (ui_->add_macro_line_edit->text ().toUpper ());
|
||||
|
||||
@@ -96,6 +96,11 @@ public:
|
||||
|
||||
QString my_callsign () const;
|
||||
QString my_grid () const;
|
||||
QString my_station () const;
|
||||
int my_dBm() const;
|
||||
int activity_aging() const;
|
||||
int callsign_aging() const;
|
||||
QString my_qth () const;
|
||||
QFont text_font () const;
|
||||
QFont decoded_text_font () const;
|
||||
qint32 id_interval () const;
|
||||
@@ -107,6 +112,8 @@ 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 autoreply_off_at_startup () const;
|
||||
bool monitor_off_at_startup () const;
|
||||
bool monitor_last_used () const;
|
||||
bool log_as_RTTY () const;
|
||||
@@ -119,6 +126,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;
|
||||
|
||||
+455
-158
@@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>534</width>
|
||||
<height>530</height>
|
||||
<width>825</width>
|
||||
<height>688</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>
|
||||
@@ -117,6 +120,12 @@
|
||||
<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="visible">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Message generation for type 2 compound callsign holders:</string>
|
||||
</property>
|
||||
@@ -131,7 +140,10 @@
|
||||
<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="visible">
|
||||
<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>
|
||||
@@ -158,6 +170,51 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QWidget" name="widget" native="true">
|
||||
<layout class="QFormLayout" name="formLayout_16">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_14">
|
||||
<property name="text">
|
||||
<string>QTH Message:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QLineEdit" name="qth_message_line_edit"/>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_15">
|
||||
<property name="text">
|
||||
<string>Station Message:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QLineEdit" name="station_message_line_edit"/>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLabel" name="label_16">
|
||||
<property name="text">
|
||||
<string>Station Power:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QComboBox" name="station_power_combo_box"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -174,18 +231,14 @@
|
||||
<string>Display</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_4">
|
||||
<item row="0" column="0">
|
||||
<widget class="QCheckBox" name="insert_blank_check_box">
|
||||
<property name="toolTip">
|
||||
<string>Include a separator line between periods in the band activity window.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>&Blank line between decoding periods</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<item row="4" column="0">
|
||||
<widget class="QCheckBox" name="DXCC_check_box">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="visible">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Show if decoded stations are new DXCC entities or worked before.</string>
|
||||
</property>
|
||||
@@ -197,21 +250,11 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</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>
|
||||
@@ -220,8 +263,14 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<item row="3" column="0">
|
||||
<widget class="QCheckBox" name="TX_messages_check_box">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="visible">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Show outgoing transmitted messages in the Rx frequency window.</string>
|
||||
</property>
|
||||
@@ -230,50 +279,35 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2" rowspan="4">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||
<item>
|
||||
<widget class="QPushButton" name="font_push_button">
|
||||
<property name="toolTip">
|
||||
<string>Set the font characteristics for the application.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Font...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="decoded_text_font_push_button">
|
||||
<property name="toolTip">
|
||||
<string>Set the font characteristics for the Band Activity and Rx Frequency areas.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Decoded Text Font...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<item row="5" column="0">
|
||||
<widget class="QCheckBox" name="ppfx_check_box">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="visible">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Show principal prefix instead of country name</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QCheckBox" name="insert_blank_check_box">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="visible">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Include a separator line between periods in the band activity window.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>&Blank line between decoding periods</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
@@ -289,22 +323,185 @@
|
||||
<property name="title">
|
||||
<string>Behavior</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_8">
|
||||
<item row="4" column="1">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_12">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_8">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_7">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<widget class="QCheckBox" name="autoreply_off_check_box">
|
||||
<property name="text">
|
||||
<string>Autoreply off at startup</string>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="monitor_off_check_box">
|
||||
<property name="toolTip">
|
||||
<string>Don't start decoding until the monitor button is clicked.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Mon&itor off at startup</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="monitor_last_used_check_box">
|
||||
<property name="visible">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Check this if you wish to automatically return to the last monitored frequency when monitor is enabled, leave it unchecked if you wish to have the current rig frequency maintained.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Monitor returns to last used frequency</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="tx_QSY_check_box">
|
||||
<property name="enabled">
|
||||
<bool>true</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>
|
||||
<property name="text">
|
||||
<string>Allow Tx frequency changes while transmitting</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="single_decode_check_box">
|
||||
<property name="text">
|
||||
<string>Single decode</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_155">
|
||||
<item>
|
||||
<widget class="QLabel" name="beacon_label_10">
|
||||
<property name="text">
|
||||
<string>Remove callsigns from heard list after:</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>callsign_aging_spin_box</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSpinBox" name="callsign_aging_spin_box">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Number of minutes between unattended beacons</p></body></html></string>
|
||||
</property>
|
||||
<property name="specialValueText">
|
||||
<string>Disabled</string>
|
||||
</property>
|
||||
<property name="suffix">
|
||||
<string> minutes</string>
|
||||
</property>
|
||||
<property name="prefix">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>60</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>0</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_156">
|
||||
<item>
|
||||
<widget class="QLabel" name="beacon_label_10">
|
||||
<property name="text">
|
||||
<string>Remove messages from band activity after:</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>callsign_aging_spin_box</cstring>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSpinBox" name="activity_aging_spin_box">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Number of minutes between unattended beacons</p></body></html></string>
|
||||
</property>
|
||||
<property name="specialValueText">
|
||||
<string>Disabled</string>
|
||||
</property>
|
||||
<property name="suffix">
|
||||
<string> minutes</string>
|
||||
</property>
|
||||
<property name="prefix">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="minimum">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>60</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>2</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_15">
|
||||
<item>
|
||||
<widget class="QLabel" name="beacon_label_10">
|
||||
<property name="text">
|
||||
<string>Beacon interval:</string>
|
||||
</property>
|
||||
<property name="buddy">
|
||||
<cstring>callsign_aging_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>5</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>60</number>
|
||||
</property>
|
||||
<property name="singleStep">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>15</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_12">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_10">
|
||||
<property name="text">
|
||||
@@ -330,60 +527,22 @@
|
||||
<string/>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>6</number>
|
||||
<number>0</number>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QCheckBox" name="monitor_off_check_box">
|
||||
<property name="toolTip">
|
||||
<string>Don't start decoding until the monitor button is clicked.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Mon&itor off at startup</string>
|
||||
</property>
|
||||
<property name="checked">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<widget class="QCheckBox" name="enable_VHF_features_check_box">
|
||||
<property name="text">
|
||||
<string>Enable VHF/UHF/Microwave features</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QCheckBox" name="decode_at_52s_check_box">
|
||||
<property name="text">
|
||||
<string>Decode after EME delay</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QCheckBox" name="single_decode_check_box">
|
||||
<property name="text">
|
||||
<string>Single decode</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1">
|
||||
<widget class="QCheckBox" name="tx_QSY_check_box">
|
||||
<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>
|
||||
<property name="text">
|
||||
<string>Allow Tx frequency changes while transmitting</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0" colspan="2">
|
||||
<item>
|
||||
<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="visible">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Send a CW ID after every 73 or free text message.</string>
|
||||
</property>
|
||||
@@ -392,21 +551,11 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
@@ -423,6 +572,9 @@
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QSpinBox" name="CW_id_interval_spin_box">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
@@ -439,18 +591,60 @@ quiet period when decoding is done.</string>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QCheckBox" name="monitor_last_used_check_box">
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Check this if you wish to automatically return to the last monitored frequency when monitor is enabled, leave it unchecked if you wish to have the current rig frequency maintained.</p></body></html></string>
|
||||
</layout>
|
||||
<widget class="QCheckBox" name="enable_VHF_features_check_box">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="visible">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Monitor returns to last used frequency</string>
|
||||
<string>Enable VHF/UHF/Microwave features</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="decode_at_52s_check_box">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="visible">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Decode after EME delay</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QCheckBox" name="quick_call_check_box">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="visible">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Automatic transmission mode.</string>
|
||||
</property>
|
||||
@@ -458,9 +652,21 @@ quiet period when decoding is done.</string>
|
||||
<string>Doubl&e-click on call sets Tx enable</string>
|
||||
</property>
|
||||
</widget>
|
||||
</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="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>100</width>
|
||||
<height>30</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="visible">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Turns off automatic transmissions after sending a 73 or any other free
|
||||
text message.</string>
|
||||
@@ -469,8 +675,6 @@ text message.</string>
|
||||
<string>Di&sable Tx after sending 73</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
@@ -1644,6 +1848,12 @@ 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="visible">
|
||||
<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 +1901,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 +1917,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>
|
||||
@@ -2129,8 +2345,19 @@ Right click for insert and delete options.</string>
|
||||
</widget>
|
||||
<widget class="QWidget" name="colors_tab">
|
||||
<attribute name="title">
|
||||
<string>Colors</string>
|
||||
<string>UI</string>
|
||||
</attribute>
|
||||
<widget class="QWidget" name="xQ" native="true">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>430</width>
|
||||
<height>183</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<layout class="QGridLayout" name="gridLayout_5" rowstretch="1,1,2" columnstretch="1,1,2">
|
||||
<item row="1" column="1">
|
||||
<layout class="QGridLayout" name="gridLayout_13">
|
||||
@@ -2200,6 +2427,9 @@ Right click for insert and delete options.</string>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QPushButton" name="pbTxMsg">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>140</width>
|
||||
@@ -2213,6 +2443,9 @@ Right click for insert and delete options.</string>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<widget class="QLabel" name="labTx">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>80</width>
|
||||
@@ -2232,6 +2465,9 @@ Right click for insert and delete options.</string>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<widget class="QLabel" name="labDXCC">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>80</width>
|
||||
@@ -2251,6 +2487,9 @@ Right click for insert and delete options.</string>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QPushButton" name="pbNewCall">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>140</width>
|
||||
@@ -2264,6 +2503,9 @@ Right click for insert and delete options.</string>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QPushButton" name="pbNewDXCC">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>140</width>
|
||||
@@ -2277,6 +2519,9 @@ Right click for insert and delete options.</string>
|
||||
</item>
|
||||
<item row="4" column="1">
|
||||
<widget class="QLabel" name="labNewCall">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>80</width>
|
||||
@@ -2349,6 +2594,52 @@ Right click for insert and delete options.</string>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||
<item>
|
||||
<widget class="QPushButton" name="font_push_button">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>Set the font characteristics for the application.</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>UI Font...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</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>
|
||||
<property name="text">
|
||||
<string>Message Text Font...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
<widget class="QWidget" name="advanced_tab">
|
||||
<attribute name="title">
|
||||
@@ -2357,6 +2648,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 +2749,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 +2764,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 +2848,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>
|
||||
@@ -2616,7 +2916,6 @@ soundcard changes</string>
|
||||
<tabstop>use_dynamic_grid</tabstop>
|
||||
<tabstop>region_combo_box</tabstop>
|
||||
<tabstop>type_2_msg_gen_combo_box</tabstop>
|
||||
<tabstop>insert_blank_check_box</tabstop>
|
||||
<tabstop>miles_check_box</tabstop>
|
||||
<tabstop>TX_messages_check_box</tabstop>
|
||||
<tabstop>DXCC_check_box</tabstop>
|
||||
@@ -2628,8 +2927,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>
|
||||
<tabstop>rig_combo_box</tabstop>
|
||||
@@ -2768,12 +3065,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_data_bits_button_group"/>
|
||||
<buttongroup name="CAT_handshake_button_group"/>
|
||||
<buttongroup name="TX_mode_button_group"/>
|
||||
<buttongroup name="CAT_stop_bits_button_group"/>
|
||||
<buttongroup name="PTT_method_button_group"/>
|
||||
<buttongroup name="TX_audio_source_button_group"/>
|
||||
</buttongroups>
|
||||
</ui>
|
||||
|
||||
@@ -804,9 +804,9 @@ void HamlibTransceiver::do_tx_frequency (Frequency tx, MODE mode, bool no_ignore
|
||||
if (UNK != mode)
|
||||
{
|
||||
auto new_mode = map_mode (mode);
|
||||
// TRACE_CAT ("HamlibTransceiver", "rig_set_split_freq_mode freq = " << tx
|
||||
// << " mode = " << rig_strrmode (new_mode));
|
||||
// error_check (rig_set_split_freq_mode (rig_.data (), RIG_VFO_CURR, tx, new_mode, RIG_PASSBAND_NOCHANGE), tr ("setting split TX frequency and mode"));
|
||||
TRACE_CAT ("HamlibTransceiver", "rig_set_split_freq_mode freq = " << tx
|
||||
<< " mode = " << rig_strrmode (new_mode));
|
||||
error_check (rig_set_split_freq_mode (rig_.data (), RIG_VFO_CURR, tx, new_mode, RIG_PASSBAND_NOCHANGE), tr ("setting split TX frequency and mode"));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -23,7 +23,7 @@ namespace
|
||||
"MSK144",
|
||||
"QRA64",
|
||||
"FreqCal",
|
||||
"FT8"
|
||||
"FT8",
|
||||
};
|
||||
std::size_t constexpr mode_names_size = sizeof (mode_names) / sizeof (mode_names[0]);
|
||||
}
|
||||
|
||||
+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 3)
|
||||
set (WSJTX_VERSION_PATCH 2)
|
||||
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
|
||||
|
||||
+104
-1
@@ -4,6 +4,8 @@
|
||||
#include <QRegularExpression>
|
||||
#include <QDebug>
|
||||
|
||||
#include <varicode.h>
|
||||
|
||||
extern "C" {
|
||||
bool stdmsg_(char const * msg, bool contest_mode, char const * mygrid, fortran_charlen_t, fortran_charlen_t);
|
||||
}
|
||||
@@ -50,8 +52,109 @@ DecodedText::DecodedText (QString const& the_string, bool contest_mode, QString
|
||||
, contest_mode_
|
||||
, grid_c_string.constData ()
|
||||
, 22, 6);
|
||||
|
||||
// We're only going to unpack standard messages for CQs && beacons...
|
||||
// TODO: jsherer - this is a hack for now...
|
||||
if(is_standard_){
|
||||
is_standard_ = QRegularExpression("^(CQ|DE|QRZ)\\s").match(message_).hasMatch();
|
||||
}
|
||||
}
|
||||
|
||||
tryUnpack();
|
||||
}
|
||||
|
||||
DecodedText::DecodedText (QString const& ft8callmessage){
|
||||
message_ = ft8callmessage;
|
||||
is_standard_ = false;
|
||||
tryUnpack();
|
||||
}
|
||||
|
||||
bool DecodedText::tryUnpack(){
|
||||
if(is_standard_){
|
||||
return false;
|
||||
}
|
||||
|
||||
bool unpacked = false;
|
||||
if(!unpacked){
|
||||
unpacked = tryUnpackCompound();
|
||||
}
|
||||
|
||||
if(!unpacked){
|
||||
unpacked = tryUnpackDirected();
|
||||
}
|
||||
|
||||
if(!unpacked){
|
||||
unpacked = tryUnpackData();
|
||||
}
|
||||
|
||||
return unpacked;
|
||||
}
|
||||
|
||||
bool DecodedText::tryUnpackCompound(){
|
||||
QString m = message().trimmed();
|
||||
|
||||
// directed calls will always be 12+ chars and contain no spaces.
|
||||
if(m.length() < 12 || m.contains(' ')){
|
||||
return false;
|
||||
}
|
||||
|
||||
QStringList parts = Varicode::unpackCompoundMessage(m, nullptr);
|
||||
|
||||
if(parts.isEmpty() || parts.length() < 2){
|
||||
return false;
|
||||
}
|
||||
|
||||
compound_ = QString("%1/%2").arg(parts.at(0), parts.at(1));
|
||||
message_ = QString("%1: ").arg(compound_);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DecodedText::tryUnpackDirected(){
|
||||
QString m = message().trimmed();
|
||||
|
||||
// directed calls will always be 12+ chars and contain no spaces.
|
||||
if(m.length() < 12 || m.contains(' ')){
|
||||
return false;
|
||||
}
|
||||
|
||||
QStringList parts = Varicode::unpackDirectedMessage(m);
|
||||
|
||||
if(parts.isEmpty()){
|
||||
return false;
|
||||
}
|
||||
|
||||
if(parts.length() == 3){
|
||||
// replace it with the correct unpacked (directed)
|
||||
message_ = QString("%1: %2%3 ").arg(parts.at(0), parts.at(1), parts.at(2));
|
||||
} else if(parts.length() == 4){
|
||||
// replace it with the correct unpacked (directed numeric)
|
||||
message_ = QString("%1: %2%3 %4 ").arg(parts.at(0), parts.at(1), parts.at(2), parts.at(3));
|
||||
} else {
|
||||
// replace it with the correct unpacked (freetext)
|
||||
message_ = QString(parts.join(""));
|
||||
}
|
||||
|
||||
directed_ = parts;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool DecodedText::tryUnpackData(){
|
||||
QString m = message().trimmed();
|
||||
|
||||
// data frames calls will always be 12+ chars and contain no spaces.
|
||||
if(m.length() < 12 || m.contains(' ')){
|
||||
return false;
|
||||
}
|
||||
|
||||
QString data = Varicode::unpackDataMessage(m);
|
||||
|
||||
if(data.isEmpty()){
|
||||
return false;
|
||||
}
|
||||
|
||||
message_ = data;
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
QStringList DecodedText::messageWords () const
|
||||
{
|
||||
|
||||
+24
-6
@@ -10,6 +10,7 @@
|
||||
#define DECODEDTEXT_H
|
||||
|
||||
#include <QString>
|
||||
#include <QStringList>
|
||||
|
||||
|
||||
|
||||
@@ -30,15 +31,28 @@ class DecodedText
|
||||
{
|
||||
public:
|
||||
explicit DecodedText (QString const& message, bool, QString const& my_grid);
|
||||
explicit DecodedText (QString const& ft8callmessage);
|
||||
|
||||
QString string() const { return string_; };
|
||||
bool tryUnpack();
|
||||
bool tryUnpackCompound();
|
||||
bool tryUnpackDirected();
|
||||
bool tryUnpackData();
|
||||
|
||||
QString compoundCall() const { return compound_; }
|
||||
bool isCompoundMessage() const { return !compound_.isEmpty(); }
|
||||
|
||||
QStringList directedMessage() const { return directed_; }
|
||||
bool isDirectedMessage() const { return !directed_.isEmpty() && directed_.length() > 2; }
|
||||
|
||||
QString string() const { return string_; }
|
||||
QString message() const { return message_; }
|
||||
QStringList messageWords () const;
|
||||
int indexOf(QString s) const { return string_.indexOf(s); };
|
||||
int indexOf(QString s, int i) const { return string_.indexOf(s,i); };
|
||||
QString mid(int f, int t) const { return string_.mid(f,t); };
|
||||
QString left(int i) const { return string_.left(i); };
|
||||
int indexOf(QString s) const { return string_.indexOf(s); }
|
||||
int indexOf(QString s, int i) const { return string_.indexOf(s,i); }
|
||||
QString mid(int f, int t) const { return string_.mid(f,t); }
|
||||
QString left(int i) const { return string_.left(i); }
|
||||
|
||||
void clear() { string_.clear(); };
|
||||
void clear() { string_.clear(); }
|
||||
|
||||
QString CQersCall() const;
|
||||
|
||||
@@ -49,6 +63,8 @@ public:
|
||||
bool isLowConfidence () const;
|
||||
int frequencyOffset() const; // hertz offset from the tuned dial or rx frequency, aka audio frequency
|
||||
int snr() const;
|
||||
bool hasBits() const { return !string_.right(5).trimmed().isEmpty(); }
|
||||
int bits() const { return string_.right(5).trimmed().toShort(); }
|
||||
float dt() const;
|
||||
|
||||
// find and extract any report. Returns true if this is a standard message
|
||||
@@ -75,6 +91,8 @@ private:
|
||||
column_mode = 19,
|
||||
column_qsoText = 22 };
|
||||
|
||||
QString compound_;
|
||||
QStringList directed_;
|
||||
QString string_;
|
||||
int padding_;
|
||||
bool contest_mode_;
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Name=ft8call
|
||||
Comment=Amateur Radio Weak Signal Operating
|
||||
Exec=ft8call
|
||||
Icon=wsjtx_icon
|
||||
Terminal=false
|
||||
X-MultipleArgs=false
|
||||
Type=Application
|
||||
Categories=AudioVideo;Audio;HamRadio;
|
||||
StartupNotify=true
|
||||
@@ -380,6 +380,7 @@ subroutine ft8b(dd0,newdat,nQSOProgress,nfqso,nftx,ndepth,lapon,lapcqonly, &
|
||||
if(i3bit.eq.1) decoded(57:)=0
|
||||
call extractmessage174(decoded,message,ncrcflag)
|
||||
decoded=decoded0
|
||||
|
||||
! This needs fixing for messages with i3bit=1:
|
||||
call genft8(message,mygrid6,bcontest,i3bit,msgsent,msgbits,itone)
|
||||
if(lsubtract) call subtractft8(dd0,itone,f1,xdt2)
|
||||
@@ -397,6 +398,7 @@ subroutine ft8b(dd0,newdat,nQSOProgress,nfqso,nftx,ndepth,lapon,lapcqonly, &
|
||||
if(.not.nagain) xsnr=xsnr2
|
||||
if(xsnr .lt. -24.0) xsnr=-24.0
|
||||
|
||||
|
||||
if(i3bit.eq.1) then
|
||||
do i=1,12
|
||||
i1hiscall(i)=ichar(hiscall12(i:i))
|
||||
@@ -432,6 +434,10 @@ subroutine ft8b(dd0,newdat,nQSOProgress,nfqso,nftx,ndepth,lapon,lapcqonly, &
|
||||
msg37=message//' '
|
||||
endif
|
||||
|
||||
if(i3bit.gt.1) then
|
||||
msg37(22:22) = char(48 + i3bit)
|
||||
endif
|
||||
|
||||
return
|
||||
endif
|
||||
enddo
|
||||
|
||||
+3
-1
@@ -423,7 +423,9 @@ subroutine packbits(dbits,nsymd,m0,sym)
|
||||
|
||||
itype=1
|
||||
if(bcontest) then
|
||||
call to_contest_msg(msg0,msg)
|
||||
!call to_contest_msg(msg0,msg)
|
||||
! this causes problems with freetext ala, KN4CRD DE KN4CRD -13 R
|
||||
msg=msg0
|
||||
else
|
||||
msg=msg0
|
||||
end if
|
||||
|
||||
@@ -6,8 +6,8 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>377</width>
|
||||
<height>257</height>
|
||||
<width>600</width>
|
||||
<height>285</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="sizePolicy">
|
||||
@@ -16,6 +16,12 @@
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>600</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_11">
|
||||
<item>
|
||||
<widget class="QLabel" name="label">
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
+2310
-49
File diff suppressed because it is too large
Load Diff
+164
@@ -16,6 +16,7 @@
|
||||
#include <QProgressDialog>
|
||||
#include <QAbstractSocket>
|
||||
#include <QHostAddress>
|
||||
#include <QPair>
|
||||
#include <QPointer>
|
||||
#include <QSet>
|
||||
#include <QVector>
|
||||
@@ -37,6 +38,8 @@
|
||||
#include "astro.h"
|
||||
#include "MessageBox.hpp"
|
||||
#include "NetworkAccessManager.hpp"
|
||||
#include "qorderedmap.h"
|
||||
#include "varicode.h"
|
||||
|
||||
#define NUM_JT4_SYMBOLS 206 //(72+31)*2, embedded sync
|
||||
#define NUM_JT65_SYMBOLS 126 //63 data + 63 sync
|
||||
@@ -113,10 +116,22 @@ public slots:
|
||||
void readFromStdout();
|
||||
void p1ReadFromStdout();
|
||||
void setXIT(int n, Frequency base = 0u);
|
||||
void setFreqForRestore(int freq, bool shouldRestore);
|
||||
void setFreq4(int rxFreq, int txFreq);
|
||||
void msgAvgDecode2();
|
||||
void fastPick(int x0, int x1, int y);
|
||||
|
||||
QString lookupCallInCompoundCache(QString const &call);
|
||||
void clearActivity();
|
||||
int logRxTxMessageText(QDateTime date, QString text, int freq, bool tx, int block=-1);
|
||||
void addMessageText(QString text, bool clear=false);
|
||||
void resetMessage();
|
||||
void resetMessageUI();
|
||||
void restoreMessage();
|
||||
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 +147,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 +199,10 @@ private slots:
|
||||
void on_txb5_clicked();
|
||||
void on_txb5_doubleClicked ();
|
||||
void on_txb6_clicked();
|
||||
void on_startTxButton_toggled(bool checked);
|
||||
void toggleTx(bool start);
|
||||
void splitAndSendNextMessage();
|
||||
void on_rbNextFreeTextMsg_toggled (bool status);
|
||||
void on_lookupButton_clicked();
|
||||
void on_addButton_clicked();
|
||||
void on_dxCallEntry_textChanged (QString const&);
|
||||
@@ -201,8 +224,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 +238,41 @@ 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_qtcMacroButton_clicked();
|
||||
void on_qthMacroButton_clicked();
|
||||
void buildQueryMenu(QMenu *);
|
||||
void on_queryButton_pressed();
|
||||
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&);
|
||||
int currentFreq();
|
||||
int countFT8MessageFrames(QString const& text);
|
||||
QPair<QStringList, QStringList> buildFT8MessageFrames(QString const& text);
|
||||
QString parseFT8Message(QString input, bool *isFree);
|
||||
bool prepareNextMessageFrame();
|
||||
bool isFreqOffsetFree(int f, int bw);
|
||||
int findFreeFreqOffset(int fmin, int fmax, int bw);
|
||||
void scheduleBacon(bool first=false);
|
||||
void setBaconTimer(QDateTime timestamp);
|
||||
void pauseBacon();
|
||||
void prepareBacon();
|
||||
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
|
||||
@@ -498,6 +552,7 @@ private:
|
||||
}
|
||||
m_QSOProgress;
|
||||
|
||||
int m_extFreeTxtPos;
|
||||
int m_ihsym;
|
||||
int m_nzap;
|
||||
int m_npts8;
|
||||
@@ -545,6 +600,7 @@ private:
|
||||
QTimer minuteTimer;
|
||||
QTimer splashTimer;
|
||||
QTimer p1Timer;
|
||||
QTimer beaconTimer;
|
||||
|
||||
QString m_path;
|
||||
QString m_baseCall;
|
||||
@@ -583,6 +639,65 @@ private:
|
||||
qint32 ncall;
|
||||
};
|
||||
|
||||
struct CallDetail
|
||||
{
|
||||
QString call;
|
||||
QString through;
|
||||
QString grid;
|
||||
int freq;
|
||||
QDateTime utcTimestamp;
|
||||
int snr;
|
||||
};
|
||||
|
||||
struct CommandDetail
|
||||
{
|
||||
QString from;
|
||||
QString to;
|
||||
QString cmd;
|
||||
int freq;
|
||||
QDateTime utcTimestamp;
|
||||
int snr;
|
||||
QString text;
|
||||
};
|
||||
|
||||
struct ActivityDetail
|
||||
{
|
||||
bool isFree;
|
||||
bool isLowConfidence;
|
||||
bool isCompound;
|
||||
int bits;
|
||||
int freq;
|
||||
QString text;
|
||||
QDateTime utcTimestamp;
|
||||
int snr;
|
||||
};
|
||||
|
||||
struct MessageBuffer {
|
||||
CommandDetail cmd;
|
||||
QList<ActivityDetail> msgs;
|
||||
};
|
||||
|
||||
bool m_rxDirty;
|
||||
int m_txFrameCount;
|
||||
QString m_lastTxMessage;
|
||||
QDateTime m_lastTxTime;
|
||||
|
||||
|
||||
QQueue<QString> m_txFrameQueue;
|
||||
QQueue<ActivityDetail> m_rxFrameQueue;
|
||||
QQueue<CommandDetail> m_rxCommandQueue;
|
||||
QMap<QString, QString> m_compoundCallCache; // base callsign -> compound callsign
|
||||
QCache<QString, QDateTime> m_txAllcallCommandCache; // callsign -> last tx
|
||||
QCache<int, QDateTime> m_rxRecentCache; // freq -> last rx
|
||||
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<int, MessageBuffer> m_messageBuffer; // freq -> (cmd, [frames, ...])
|
||||
QMap<QString, CallDetail> m_callActivity; // call -> (last freq, last timestamp)
|
||||
QSet<QString> m_callSeenBeacon; // call
|
||||
int m_previousFreq;
|
||||
bool m_shouldRestoreFreq;
|
||||
QMap<QString,FoxQSO> m_foxQSO;
|
||||
QMap<QString,QString> m_loggedByFox;
|
||||
|
||||
@@ -591,6 +706,8 @@ private:
|
||||
QQueue<QString> m_foxRR73Queue;
|
||||
QQueue<qint64> m_foxRateQueue;
|
||||
|
||||
bool m_nextBeaconPaused = false;
|
||||
QDateTime m_nextBeacon;
|
||||
QDateTime m_dateTimeQSOOn;
|
||||
QDateTime m_dateTimeLastTX;
|
||||
|
||||
@@ -646,6 +763,7 @@ private:
|
||||
void rigFailure (QString const& reason);
|
||||
void pskSetLocal ();
|
||||
void pskPost(DecodedText const& decodedtext);
|
||||
void pskLogReport(QString mode, int offset, int snr, QString callsign, QString grid);
|
||||
void displayDialFrequency ();
|
||||
void transmitDisplay (bool);
|
||||
void processMessage(DecodedText const&, Qt::KeyboardModifiers = 0);
|
||||
@@ -653,6 +771,14 @@ private:
|
||||
void locationChange(QString const& location);
|
||||
void replayDecodes ();
|
||||
void postDecode (bool is_new, QString const& message);
|
||||
void displayTransmit();
|
||||
void updateButtonDisplay();
|
||||
bool isMyCallIncluded(QString const &text);
|
||||
bool isAllCallIncluded(QString const &text);
|
||||
QString callsignSelected();
|
||||
bool isRecentOffset(int offset);
|
||||
bool isDirectedOffset(int offset);
|
||||
void displayActivity(bool force=false);
|
||||
void postWSPRDecode (bool is_new, QStringList message_parts);
|
||||
void enable_DXCC_entity (bool on);
|
||||
void switch_mode (Mode);
|
||||
@@ -700,6 +826,44 @@ 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){
|
||||
emit this->enterKeyPressed(keyEvent, obj);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// standard event processing
|
||||
return QObject::eventFilter(obj, event);
|
||||
}
|
||||
|
||||
public:
|
||||
Q_SIGNAL void enterKeyPressed(QKeyEvent *evt, QObject *obj);
|
||||
};
|
||||
|
||||
extern int killbyname(const char* progName);
|
||||
extern void getDev(int* numDevices,char hostAPI_DeviceName[][50],
|
||||
int minChan[], int maxChan[],
|
||||
|
||||
+2027
-375
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
|
||||
@@ -0,0 +1,253 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2015 Corentin Chary <corentin.chary@gmail.cm>
|
||||
**
|
||||
** This file could be part of the QtCore module of the Qt Toolkit.
|
||||
**
|
||||
** $QT_BEGIN_LICENSE:LGPL$
|
||||
** No Commercial Usage
|
||||
** This file contains pre-release code and may not be distributed.
|
||||
** You may use this file in accordance with the terms and conditions
|
||||
** contained in the Technology Preview License Agreement accompanying
|
||||
** this package.
|
||||
**
|
||||
** GNU Lesser General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||
** General Public License version 2.1 as published by the Free Software
|
||||
** Foundation and appearing in the file LICENSE.LGPL included in the
|
||||
** packaging of this file. Please review the following information to
|
||||
** ensure the GNU Lesser General Public License version 2.1 requirements
|
||||
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
|
||||
**
|
||||
** In addition, as a special exception, Nokia gives you certain additional
|
||||
** rights. These rights are described in the Nokia Qt LGPL Exception
|
||||
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
|
||||
**
|
||||
** If you have questions regarding the use of this file, please contact
|
||||
** Nokia at qt-info@nokia.com.
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
**
|
||||
** $QT_END_LICENSE$
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#ifndef QPRIORITY_QUEUE_H
|
||||
#define QPRIORITY_QUEUE_H
|
||||
|
||||
#include <QtCore/qalgorithms.h>
|
||||
|
||||
QT_BEGIN_HEADER
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
QT_MODULE(Core)
|
||||
|
||||
template <class T> class QList;
|
||||
|
||||
#ifndef QT_NO_STL
|
||||
#include <queue>
|
||||
#include <vector>
|
||||
#else
|
||||
/* Fallback class used when stl is not available */
|
||||
template <class T, typename LessThan = qLess < T > >
|
||||
class QPriorityQueuePrivate {
|
||||
public:
|
||||
inline QPriorityQueuePrivate(LessThan l) : lessThan(l), d() {}
|
||||
inline ~QPriorityQueuePrivate() {}
|
||||
|
||||
inline void clear() { return d.clear(); }
|
||||
inline int size() const { return d.size(); }
|
||||
inline bool empty() const { return d.empty(); }
|
||||
|
||||
inline T &top() { return d.front(); }
|
||||
|
||||
void pop();
|
||||
void push(const T &value);
|
||||
private:
|
||||
inline int parent(int i) {
|
||||
return (i - 1) / 2;
|
||||
}
|
||||
inline int leftChild(int i) {
|
||||
return 2 * i + 1;
|
||||
}
|
||||
inline int rightChild(int i) {
|
||||
return 2 * i + 2;
|
||||
}
|
||||
|
||||
LessThan lessThan;
|
||||
QList < T > d;
|
||||
};
|
||||
#endif
|
||||
|
||||
template <class T, typename LessThan = qLess < T > >
|
||||
class Q_CORE_EXPORT QPriorityQueue
|
||||
{
|
||||
public:
|
||||
inline QPriorityQueue(LessThan l = qLess < T >())
|
||||
: lessThan(l), d(lessThan) { }
|
||||
inline QPriorityQueue(const QPriorityQueue<T> &q)
|
||||
: lessThan(q.lessThan), d(q.d) { }
|
||||
inline ~QPriorityQueue() { }
|
||||
|
||||
QPriorityQueue<T> &operator=(const QPriorityQueue<T> &q) {
|
||||
d = q.d; return *this;
|
||||
}
|
||||
|
||||
inline int size() const { return d.size(); }
|
||||
inline bool isEmpty() const { return empty(); }
|
||||
|
||||
// like qlist
|
||||
void clear();
|
||||
void append(const T &t) { return enqueue(t); }
|
||||
void append(const QList<T> &t);
|
||||
T takeFirst() { return dequeue(); }
|
||||
inline int length() const { return size(); } // Same as count()
|
||||
inline T& first() { return head(); }
|
||||
inline const T& first() const { return head(); }
|
||||
inline void removeFirst() { pop(); }
|
||||
inline bool startsWith(const T &t) const
|
||||
{ return !isEmpty() && first() == t; }
|
||||
|
||||
// like qqueue
|
||||
inline void enqueue(const T &t) { push(t); }
|
||||
inline T dequeue() { T t = d.top(); d.pop(); return t; }
|
||||
inline T &head() { top(); }
|
||||
inline const T &head() const { top(); }
|
||||
|
||||
// stl compatibility
|
||||
typedef int size_type;
|
||||
typedef T value_type;
|
||||
|
||||
inline bool empty() const { return d.empty(); }
|
||||
inline const value_type& top() { Q_ASSERT(!isEmpty()); return d.top(); }
|
||||
inline void push(const value_type& x) { return d.push(x); }
|
||||
inline void pop() { Q_ASSERT(!isEmpty()); d.pop(); }
|
||||
|
||||
// comfort
|
||||
inline QPriorityQueue<T> &operator+=(const T &t) {
|
||||
enqueue(t); return *this;
|
||||
}
|
||||
inline QPriorityQueue<T> &operator<< (const T &t) {
|
||||
enqueue(t); return *this;
|
||||
}
|
||||
inline QPriorityQueue<T> &operator>> (T &t) {
|
||||
t = d.top(); d.pop(); return *this;
|
||||
}
|
||||
|
||||
#ifndef QT_NO_STL
|
||||
static inline QPriorityQueue<T>fromStdPriorityQueue(
|
||||
const std::priority_queue<T> &q) {
|
||||
QPriorityQueue<T> tmp; tmp.d = q; return tmp;
|
||||
}
|
||||
inline std::priority_queue<T> toStdPriorityQueue() const {
|
||||
return d;
|
||||
}
|
||||
#endif
|
||||
|
||||
private:
|
||||
LessThan lessThan;
|
||||
#ifndef QT_NO_STL
|
||||
std::priority_queue <T, std::vector < T >, LessThan> d;
|
||||
#else
|
||||
QPriorityQueuePrivate <T> d;
|
||||
#endif
|
||||
};
|
||||
|
||||
#ifndef QT_NO_STL
|
||||
|
||||
template <typename T, typename LessThan>
|
||||
Q_INLINE_TEMPLATE void QPriorityQueue<T, LessThan>::clear()
|
||||
{
|
||||
d = std::priority_queue<T>(lessThan);
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
template <typename T, typename LessThan>
|
||||
Q_INLINE_TEMPLATE void QPriorityQueue<T, LessThan>::clear()
|
||||
{
|
||||
d.clear();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
template <typename T, typename LessThan>
|
||||
Q_OUTOFLINE_TEMPLATE void QPriorityQueue<T, LessThan>::append(const QList<T> &t)
|
||||
{
|
||||
foreach (T & e, t)
|
||||
push(e);
|
||||
}
|
||||
|
||||
// Re-implement std::priority_queue if STL not available, probably
|
||||
// less efficient.
|
||||
#ifdef QT_NO_STL
|
||||
/*!
|
||||
* Pop an element from the queue and reorder it using an
|
||||
* inlined binary heap.
|
||||
*
|
||||
* \internal
|
||||
*/
|
||||
template <typename T, typename LessThan>
|
||||
Q_OUTOFLINE_TEMPLATE void QPriorityQueuePrivate<T, LessThan>::pop()
|
||||
{
|
||||
int i = 0;
|
||||
ssize_t size = d.size();;
|
||||
|
||||
if(!size)
|
||||
return;
|
||||
if(size == 1)
|
||||
return d.clear();
|
||||
|
||||
d[0] = d.takeLast();
|
||||
|
||||
while(i < size - 1) {
|
||||
int left = leftChild(i);
|
||||
int right = rightChild(i);
|
||||
bool validLeft = left < size;
|
||||
bool validRight = right < size;
|
||||
|
||||
if(validLeft && lessThan(d.at(i), d.at(left)))
|
||||
if(validRight && !lessThan(d.at(right), d.at(left))) {
|
||||
d.swap(i, right);
|
||||
i = right;
|
||||
} else {
|
||||
d.swap(i, left);
|
||||
i = left;
|
||||
}
|
||||
else if(validRight && lessThan(d.at(i), d.at(right))) {
|
||||
d.swap(i, right);
|
||||
i = right;
|
||||
}
|
||||
else
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/*!
|
||||
* Push an element with a given priority to the right place.
|
||||
*
|
||||
* \internal
|
||||
*/
|
||||
template <typename T, typename LessThan>
|
||||
Q_OUTOFLINE_TEMPLATE void QPriorityQueuePrivate<T, LessThan>::push(const T &value)
|
||||
{
|
||||
int i = d.size();
|
||||
d.append(value);
|
||||
while(i != 0 && !lessThan(d.at(i), d.at(parent(i)))) {
|
||||
d.swap(i, parent(i));
|
||||
i = parent(i);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
||||
QT_END_HEADER
|
||||
|
||||
#endif // QPRIORITY_QUEUE_H
|
||||
+6
-56
@@ -5,62 +5,9 @@
|
||||
#include <QCoreApplication>
|
||||
#include <QRegularExpression>
|
||||
|
||||
#include "svnversion.h"
|
||||
|
||||
namespace
|
||||
{
|
||||
QString revision_extract_number (QString const& s)
|
||||
{
|
||||
QString revision;
|
||||
|
||||
// try and match a number
|
||||
QRegularExpression re {R"(^[$:]\w+: (\d+[^$]*)\$$)"};
|
||||
auto match = re.match (s);
|
||||
if (match.hasMatch ())
|
||||
{
|
||||
revision = 'r' + match.captured (1);
|
||||
}
|
||||
return revision;
|
||||
}
|
||||
}
|
||||
|
||||
QString revision (QString const& svn_rev_string)
|
||||
{
|
||||
QString result;
|
||||
auto revision_from_svn = revision_extract_number (svn_rev_string);
|
||||
|
||||
#if defined (CMAKE_BUILD)
|
||||
QString svn_info {":Rev: " WSJTX_STRINGIZE (SVNVERSION) " $"};
|
||||
|
||||
auto revision_from_svn_info = revision_extract_number (svn_info);
|
||||
if (!revision_from_svn_info.isEmpty ())
|
||||
{
|
||||
// we managed to get the revision number from svn info etc.
|
||||
result = revision_from_svn_info;
|
||||
}
|
||||
else if (!revision_from_svn.isEmpty ())
|
||||
{
|
||||
// fall back to revision passed in if any
|
||||
result = revision_from_svn;
|
||||
}
|
||||
else
|
||||
{
|
||||
// match anything
|
||||
QRegularExpression re {R"(^[$:]\w+: ([^$]*)\$$)"};
|
||||
auto match = re.match (svn_info);
|
||||
if (match.hasMatch ())
|
||||
{
|
||||
result = match.captured (1);
|
||||
}
|
||||
}
|
||||
#else
|
||||
if (!revision_from_svn.isEmpty ())
|
||||
{
|
||||
// not CMake build so all we have is revision passed
|
||||
result = revision_from_svn;
|
||||
}
|
||||
#endif
|
||||
return result.trimmed ();
|
||||
return "";
|
||||
}
|
||||
|
||||
QString version (bool include_patch)
|
||||
@@ -70,19 +17,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);
|
||||
|
||||
+1117
File diff suppressed because it is too large
Load Diff
+99
@@ -0,0 +1,99 @@
|
||||
#ifndef VARICODE_H
|
||||
#define VARICODE_H
|
||||
|
||||
/**
|
||||
* (C) 2018 Jordan Sherer <kn4crd@gmail.com> - All Rights Reserved
|
||||
**/
|
||||
|
||||
#include <QBitArray>
|
||||
#include <QRegularExpression>
|
||||
#include <QRegExp>
|
||||
#include <QString>
|
||||
#include <QVector>
|
||||
|
||||
class Varicode
|
||||
{
|
||||
public:
|
||||
enum FrameType{
|
||||
FT8 = 0, // [000]
|
||||
FT8Fox = 1, // [001]
|
||||
FT8Call = 2, // [010]
|
||||
FT8CallLast = 3, // [011] <- used to indicate last frame in transmission
|
||||
FT8CallReservedA = 4, // [100]
|
||||
FT8CallReservedB = 5, // [101]
|
||||
FT8CallReservedC = 6, // [110]
|
||||
FT8CallReservedD = 7, // [111]
|
||||
};
|
||||
|
||||
//Varicode();
|
||||
|
||||
static QString formatSNR(int snr);
|
||||
static QString formatPWR(int dbm);
|
||||
|
||||
static QString checksum16(QString const &input);
|
||||
static bool checksum16Valid(QString const &checksum, QString const &input);
|
||||
|
||||
static QString checksum32(QString const &input);
|
||||
static bool checksum32Valid(QString const &checksum, QString const &input);
|
||||
|
||||
static QStringList parseCallsigns(QString const &input);
|
||||
static QStringList parseGrids(QString const &input);
|
||||
|
||||
static QList<QVector<bool>> huffEncode(const QMap<QChar, QString> &huff, QString const& text);
|
||||
static QString huffDecode(const QMap<QChar, QString> &huff, QVector<bool> const& bitvec, int pad=0);
|
||||
|
||||
static QString huffUnescape(QString const &input);
|
||||
static QString huffEscape(QString const &input);
|
||||
static QSet<QChar> huffValidChars();
|
||||
static bool huffShouldEscape(QString const &input);
|
||||
|
||||
static QVector<bool> bytesToBits(char * bitvec, int n);
|
||||
static QVector<bool> strToBits(QString const& bitvec);
|
||||
static QString bitsToStr(QVector<bool> const& bitvec);
|
||||
|
||||
static QVector<bool> intToBits(quint64 value, int expected=0);
|
||||
static quint64 bitsToInt(QVector<bool> const value);
|
||||
static quint64 bitsToInt(QVector<bool>::ConstIterator start, int n);
|
||||
static QVector<bool> bitsListToBits(QList<QVector<bool>> &list);
|
||||
|
||||
static quint8 unpack5bits(QString const& value);
|
||||
static QString pack5bits(quint8 packed);
|
||||
|
||||
static quint8 unpack6bits(QString const& value);
|
||||
static QString pack6bits(quint8 packed);
|
||||
|
||||
static quint16 unpack16bits(QString const& value);
|
||||
static QString pack16bits(quint16 packed);
|
||||
|
||||
static quint32 unpack32bits(QString const& value);
|
||||
static QString pack32bits(quint32 packed);
|
||||
|
||||
static quint64 unpack64bits(QString const& value);
|
||||
static QString pack64bits(quint64 packed);
|
||||
|
||||
static quint32 packCallsignPrefixSuffix(QString const& value);
|
||||
static QString unpackCallsignPrefixSuffix(quint32 packed);
|
||||
|
||||
static quint32 packCallsign(QString const& value);
|
||||
static QString unpackCallsign(quint32 value);
|
||||
|
||||
static quint16 packGrid(QString const& value);
|
||||
static QString unpackGrid(quint16 value);
|
||||
|
||||
static bool isCommandAllowed(const QString &cmd);
|
||||
static bool isCommandBuffered(const QString &cmd);
|
||||
|
||||
static QString packBeaconMessage(QString const &callsign, QString const &extra, bool isCQ);
|
||||
static QStringList unpackBeaconMessage(const QString &text, bool *isCQ);
|
||||
|
||||
static QString packCompoundMessage(const QString &baseCallsign, const QString &fix, bool isPrefix, quint16 num);
|
||||
static QStringList unpackCompoundMessage(const QString &text, quint16 *pNum);
|
||||
|
||||
static QString packDirectedMessage(QString const& text, QString const& callsign, QString * pCmd, int *n);
|
||||
static QStringList unpackDirectedMessage(QString const& text);
|
||||
|
||||
static QString packDataMessage(QString const& text, QString *out, int *n);
|
||||
static QString unpackDataMessage(QString const& text);
|
||||
};
|
||||
|
||||
#endif // VARICODE_H
|
||||
+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>
|
||||
|
||||
@@ -67,7 +67,8 @@ SOURCES += \
|
||||
echoplot.cpp echograph.cpp fastgraph.cpp fastplot.cpp Modes.cpp \
|
||||
WSPRBandHopping.cpp MessageAggregator.cpp SampleDownloader.cpp qt_helpers.cpp\
|
||||
MultiSettings.cpp PhaseEqualizationDialog.cpp IARURegions.cpp MessageBox.cpp \
|
||||
EqualizationToolsDialog.cpp
|
||||
EqualizationToolsDialog.cpp \
|
||||
varicode.cpp
|
||||
|
||||
HEADERS += qt_helpers.hpp \
|
||||
pimpl_h.hpp pimpl_impl.hpp \
|
||||
@@ -83,7 +84,11 @@ 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 \
|
||||
varicode.h \
|
||||
qpriorityqueue.h \
|
||||
crc.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