mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-11-03 13:30:52 -05:00 
			
		
		
		
	Merge branch 'release-2.4.0'
This commit is contained in:
		
						commit
						9bb987834e
					
				@ -3,8 +3,7 @@
 | 
			
		||||
#include <stdexcept>
 | 
			
		||||
#include <string>
 | 
			
		||||
#include <memory>
 | 
			
		||||
 | 
			
		||||
#include <locale.h>
 | 
			
		||||
#include <locale>
 | 
			
		||||
 | 
			
		||||
#include <QCoreApplication>
 | 
			
		||||
#include <QTextStream>
 | 
			
		||||
@ -239,11 +238,9 @@ int main(int argc, char *argv[])
 | 
			
		||||
  QCoreApplication app {argc, argv};
 | 
			
		||||
  try
 | 
			
		||||
    {
 | 
			
		||||
      ::setlocale (LC_NUMERIC, "C"); // ensure number forms are in
 | 
			
		||||
                                     // consistent format, do this
 | 
			
		||||
                                     // after instantiating
 | 
			
		||||
                                     // QApplication so that Qt has
 | 
			
		||||
                                     // correct l18n
 | 
			
		||||
      // ensure number forms are in consistent format, do this after
 | 
			
		||||
      // instantiating QApplication so that Qt has correct l18n
 | 
			
		||||
      std::locale::global (std::locale::classic ());
 | 
			
		||||
 | 
			
		||||
      // Override programs executable basename as application name.
 | 
			
		||||
      app.setApplicationName ("WSJT-X Record Time Signal");
 | 
			
		||||
 | 
			
		||||
@ -71,7 +71,7 @@ message (STATUS "******************************************************")
 | 
			
		||||
 | 
			
		||||
include (set_build_type)
 | 
			
		||||
# RC 0 or omitted is a development build, GA is a General Availability release build
 | 
			
		||||
set_build_type (RC 4)
 | 
			
		||||
set_build_type (GA)
 | 
			
		||||
set (wsjtx_VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}${BUILD_TYPE_REVISION}")
 | 
			
		||||
 | 
			
		||||
#
 | 
			
		||||
 | 
			
		||||
@ -66,7 +66,7 @@ private:
 | 
			
		||||
  double m_dphi;
 | 
			
		||||
  double m_amp;
 | 
			
		||||
  double m_nsps;
 | 
			
		||||
  double volatile m_frequency;
 | 
			
		||||
  double m_frequency;
 | 
			
		||||
  double m_frequency0;
 | 
			
		||||
  double m_snr;
 | 
			
		||||
  double m_fac;
 | 
			
		||||
@ -80,9 +80,9 @@ private:
 | 
			
		||||
  qint16 m_ramp;
 | 
			
		||||
 | 
			
		||||
  unsigned m_frameRate;
 | 
			
		||||
  ModulatorState volatile m_state;
 | 
			
		||||
  ModulatorState m_state;
 | 
			
		||||
 | 
			
		||||
  bool volatile m_tuning;
 | 
			
		||||
  bool m_tuning;
 | 
			
		||||
  bool m_addNoise;
 | 
			
		||||
  bool m_bFastMode;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										82
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										82
									
								
								NEWS
									
									
									
									
									
								
							@ -46,7 +46,7 @@ discovered in the RC3 and v2.3.0 GA releases.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	        Release: WSJT-X 2.4.0-rc3
 | 
			
		||||
	               Mar 16, 2021
 | 
			
		||||
	               Mar 15, 2021
 | 
			
		||||
	        -------------------------
 | 
			
		||||
 | 
			
		||||
WSJT-X 2.4.0 Release Candidate 3 adds new Q65 mode functionality and
 | 
			
		||||
@ -61,7 +61,7 @@ the RC2 and v2.3.0 GA releases.
 | 
			
		||||
 | 
			
		||||
 - Behavior of "Save decoded" has been corrected.
 | 
			
		||||
 | 
			
		||||
 - Repaied a defect that caused crash when displaying the Wide Graph
 | 
			
		||||
 - Repaired a defect that caused crash when displaying the Wide Graph
 | 
			
		||||
   with lower frequency limit set to 0.
 | 
			
		||||
 | 
			
		||||
 - Program no longer terminates a transmission when Settings is
 | 
			
		||||
@ -131,7 +131,7 @@ the RC1 release.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		   Release: WSJT-X 2.3.1
 | 
			
		||||
		        Mar 18, 2021
 | 
			
		||||
		        Mar 26, 2021
 | 
			
		||||
		   ---------------------
 | 
			
		||||
 | 
			
		||||
WSJT-X 2.3.1  General Availability release  updates the User  Guide to
 | 
			
		||||
@ -578,7 +578,7 @@ of course the updated WSJT-X 2.2 User Guide.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		   Release: WSJT-X 2.2.0-rc3
 | 
			
		||||
		          May 30, 2020
 | 
			
		||||
		          May 29, 2020
 | 
			
		||||
		   -------------------------
 | 
			
		||||
 | 
			
		||||
WSJT-X 2.2.0-rc3 is the third release candidate for WSJT-X 2.2.0.
 | 
			
		||||
@ -801,9 +801,77 @@ We now provide a separate installation package for 64-bit Windows 7
 | 
			
		||||
and later, with significant improvements in decoding speed.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                     Release: WSJT-X 2.0.1
 | 
			
		||||
                       February 25, 2019
 | 
			
		||||
                     ---------------------
 | 
			
		||||
 - New "Call Best" button for FT4 mode to select the best reply to a
 | 
			
		||||
   CQ call based on neediness.
 | 
			
		||||
 - Fixed UTC display on FT4 waterfall.
 | 
			
		||||
 | 
			
		||||
This release is made by invitation only to selected testers to trial
 | 
			
		||||
the FT4 mode in semi-realistic contest simulations and to elicit
 | 
			
		||||
feedback to guide future development.
 | 
			
		||||
 | 
			
		||||
*Note* this release is not for general public release and we request
 | 
			
		||||
       that it is not distributed.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		   Release: WSJT-X 2.1.0-rc3
 | 
			
		||||
		         April 5, 2019
 | 
			
		||||
		   -------------------------
 | 
			
		||||
 | 
			
		||||
WSJT-X 2.1.0 third release candidate is an enhancement release to
 | 
			
		||||
change the implementation of the new FT4 mode to a synchronous T/R
 | 
			
		||||
period of 6 seconds.
 | 
			
		||||
 | 
			
		||||
This release is made by invitation only to selected testers to trial
 | 
			
		||||
the FT4 mode in semi-realistic contest simulations and to elicit
 | 
			
		||||
feedback to guide future development.
 | 
			
		||||
 | 
			
		||||
*Note* this release is not for general public release and we request
 | 
			
		||||
       that it is not distributed.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		   Release: WSJT-X 2.1.0-rc2
 | 
			
		||||
		        March 29, 2019
 | 
			
		||||
		   -------------------------
 | 
			
		||||
 | 
			
		||||
WSJT-X 2.1.0 second release candidate is a bug fix release to repair
 | 
			
		||||
some usability issues with FT4 contest mode. The following new
 | 
			
		||||
features are also included.
 | 
			
		||||
 | 
			
		||||
 - Better options for QSO flow by clicking Tx# buttons to transmit
 | 
			
		||||
 - A 64-bit package for Windows 64-bit systems
 | 
			
		||||
 - Improved FT4 sync detection speed
 | 
			
		||||
 | 
			
		||||
This release is made by invitation only to selected testers to trial
 | 
			
		||||
the FT4 mode in semi-realistic contest simulations and to elicit
 | 
			
		||||
feedback to guide future development.
 | 
			
		||||
 | 
			
		||||
*Note* this release is not for general public release and we request
 | 
			
		||||
that it is not distributed.
 | 
			
		||||
 | 
			
		||||
		   Release: WSJT-X 2.1.0-rc1
 | 
			
		||||
		        March 25, 2019
 | 
			
		||||
		   -------------------------
 | 
			
		||||
 | 
			
		||||
WSJT-X 2.1.0 first release candidate is a preview alpha quality
 | 
			
		||||
release containing the following new features.
 | 
			
		||||
 | 
			
		||||
 - FT4 mode, a new mode targeted at HF digital contesting
 | 
			
		||||
 - GMSK modulation for FT4 and FT8
 | 
			
		||||
 - New waterfall option to select between raw sensitivity or a
 | 
			
		||||
   filtered signal representation for best visualization of signal
 | 
			
		||||
   quality
 | 
			
		||||
 | 
			
		||||
This release is made by invitation only to selected testers to trial
 | 
			
		||||
the FT4 mode in semi-realistic contest simulations and to elicit
 | 
			
		||||
feedback to guide future development.
 | 
			
		||||
 | 
			
		||||
*Note* this release is not for general public release and we request
 | 
			
		||||
that it is not distributed.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		     Release: WSJT-X 2.0.1
 | 
			
		||||
		       February 25, 2019
 | 
			
		||||
		     ---------------------
 | 
			
		||||
 | 
			
		||||
WSJT-X  2.0.1 is  a bug  fix  release including  the following  defect
 | 
			
		||||
repairs reported since the v2.0.0 GA release.
 | 
			
		||||
 | 
			
		||||
@ -11,6 +11,44 @@
 | 
			
		||||
                                                         
 | 
			
		||||
Copyright 2001 - 2021 by Joe Taylor, K1JT.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	          Release: WSJT-X 2.4.0
 | 
			
		||||
	                May 24, 2021
 | 
			
		||||
	          ---------------------
 | 
			
		||||
 | 
			
		||||
WSJT-X 2.4.0 General Availability Release adds new Q65 mode
 | 
			
		||||
functionality and decoder optimizations and repairs several defects
 | 
			
		||||
and regressions discovered in the RC4 and v2.3.1 GA releases. Since
 | 
			
		||||
the release candidates documented below this final release includes
 | 
			
		||||
the following enhancements and defect repairs.
 | 
			
		||||
 | 
			
		||||
 - On MS Windows WSJT-X now ships with a DLL version of the Hamlib
 | 
			
		||||
   library, specifically Hamlib version 4.2. This should allow Hamlib
 | 
			
		||||
   bug fixes to resolved by the user replacing the DLL with an updated
 | 
			
		||||
   version.
 | 
			
		||||
 | 
			
		||||
 - Repair a defect with own call decode highlighting when callsigns
 | 
			
		||||
   with a common root are decoded.
 | 
			
		||||
 | 
			
		||||
 - Q65 message averaging correctly disabled as be menu option.
 | 
			
		||||
 | 
			
		||||
 - Repair a regression with missing timestamps in AlL.TXT for the
 | 
			
		||||
   MSK144 mode.
 | 
			
		||||
 | 
			
		||||
 - Repair a defect in the selection of working frequencies matching
 | 
			
		||||
   the current band and mode combination.
 | 
			
		||||
 | 
			
		||||
 - WSPR band hopping mode now generates a tune up tone for bands where
 | 
			
		||||
   it is scheduled to transmit.
 | 
			
		||||
 | 
			
		||||
 - Repair a long standing defect per band tune and Tx power level
 | 
			
		||||
   memories.
 | 
			
		||||
 | 
			
		||||
 - More flexibility for inputting calls into the DX Call field,
 | 
			
		||||
   leading and trailing white space characters are allowed but
 | 
			
		||||
   ignored.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	        Release: WSJT-X 2.4.0-rc4
 | 
			
		||||
	               Mar 26, 2021
 | 
			
		||||
	        -------------------------
 | 
			
		||||
@ -130,7 +168,7 @@ the RC1 release.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		   Release: WSJT-X 2.3.1
 | 
			
		||||
		        Mar 18, 2021
 | 
			
		||||
		        Mar 26, 2021
 | 
			
		||||
		   ---------------------
 | 
			
		||||
 | 
			
		||||
WSJT-X 2.3.1  General Availability release  updates the User  Guide to
 | 
			
		||||
 | 
			
		||||
@ -31,7 +31,7 @@
 | 
			
		||||
// menu that allows each dock window to be hidden or revealed.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include <clocale>
 | 
			
		||||
#include <locale>
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <exception>
 | 
			
		||||
 | 
			
		||||
@ -52,10 +52,9 @@ int main (int argc, char * argv[])
 | 
			
		||||
  QApplication app {argc, argv};
 | 
			
		||||
  try
 | 
			
		||||
    {
 | 
			
		||||
      setlocale (LC_NUMERIC, "C"); // ensure number forms are in
 | 
			
		||||
                                   // consistent format, do this after
 | 
			
		||||
                                   // instantiating QApplication so
 | 
			
		||||
                                   // that GUI has correct l18n
 | 
			
		||||
      // ensure number forms are in consistent format, do this after
 | 
			
		||||
      // instantiating QApplication so that GUI has correct l18n
 | 
			
		||||
      std::locale::global (std::locale::classic ());
 | 
			
		||||
 | 
			
		||||
      app.setApplicationName ("WSJT-X Reference UDP Message Aggregator Server");
 | 
			
		||||
      app.setApplicationVersion ("1.0");
 | 
			
		||||
 | 
			
		||||
@ -17,6 +17,7 @@
 | 
			
		||||
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include <exception>
 | 
			
		||||
#include <locale>
 | 
			
		||||
#include <cstdlib>
 | 
			
		||||
 | 
			
		||||
#include <QCoreApplication>
 | 
			
		||||
@ -263,10 +264,9 @@ int main (int argc, char * argv[])
 | 
			
		||||
  QCoreApplication app {argc, argv};
 | 
			
		||||
  try
 | 
			
		||||
    {
 | 
			
		||||
      setlocale (LC_NUMERIC, "C"); // ensure number forms are in
 | 
			
		||||
                                   // consistent format, do this after
 | 
			
		||||
                                   // instantiating QApplication so
 | 
			
		||||
                                   // that GUI has correct l18n
 | 
			
		||||
      // ensure number forms are in consistent format, do this after
 | 
			
		||||
      // instantiating QApplication so that GUI has correct l18n
 | 
			
		||||
      std::locale::global (std::locale::classic ());
 | 
			
		||||
 | 
			
		||||
      app.setApplicationName ("WSJT-X UDP Message Server Daemon");
 | 
			
		||||
      app.setApplicationVersion ("1.0");
 | 
			
		||||
 | 
			
		||||
@ -473,7 +473,6 @@ auto WSPRBandHopping::next_hop (bool tx_enabled) -> Hop
 | 
			
		||||
 | 
			
		||||
      , frequencies_index >= 0               // new band
 | 
			
		||||
      && tx_enabled                          // transmit is allowed
 | 
			
		||||
      && !tx_next                            // not going to Tx anyway
 | 
			
		||||
      && m_->bands_[4].testBit (band_index)  // tune up required
 | 
			
		||||
      && !m_->bands_[5].testBit (band_index) // not an Rx only band
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -24,7 +24,8 @@ class QWidget;
 | 
			
		||||
//
 | 
			
		||||
//  Along with selecting bands a flag  indicating that a short tune up
 | 
			
		||||
//  signal is  required for specified  bands before they are  used for
 | 
			
		||||
//  receive.
 | 
			
		||||
//  transmit or receive, unless they  are flagged as Rx Only (intended
 | 
			
		||||
//  to protect Rx active aerials and non-licensed bands).
 | 
			
		||||
//
 | 
			
		||||
//  Provides a Qt property that holds  the Tx percentage which is used
 | 
			
		||||
//  to generate a semi-randomized schedule of period to transmit. This
 | 
			
		||||
 | 
			
		||||
@ -18,12 +18,12 @@ Here is an overview list, details are filled out below:
 | 
			
		||||
     * MSYS2 *nix like command line environment
 | 
			
		||||
     * Hamlib rig control library
 | 
			
		||||
     * Pkg Config Lite
 | 
			
		||||
     * Boost C++ libraries
 | 
			
		||||
     * Boost C++ libraries (see separate document)
 | 
			
		||||
 | 
			
		||||
Qt Framework
 | 
			
		||||
------------
 | 
			
		||||
 | 
			
		||||
At the  time of writing I  recommend using Qt v5.15.0  64-bit, v5.15.1
 | 
			
		||||
At the  time of writing I  recommend using Qt v5.15.2  64-bit, v5.15.1
 | 
			
		||||
has a defect  that affects us so  is best avoided. You  need the MinGW
 | 
			
		||||
version  as we  do not  support  the MSVC  version  due to  lack of  a
 | 
			
		||||
suitable FOSS  Fortran complier. To  install the Qt developer  SDK you
 | 
			
		||||
@ -31,7 +31,7 @@ should download the official Qt  on-line installer, this allows you to
 | 
			
		||||
install one or  more variants of the  Qt SDK and also  to maintain and
 | 
			
		||||
update the installation  at a later date. There are  many versions and
 | 
			
		||||
components within  versions available, you  only need the  base 64-bit
 | 
			
		||||
MinGW framework  for Qt  v5.15.0 and the  matching MinGW  8.1.0 64-bit
 | 
			
		||||
MinGW framework  for Qt  v5.15.2 and the  matching MinGW  8.1.0 64-bit
 | 
			
		||||
developer tools, other components can  be unchecked within the on-line
 | 
			
		||||
installer.  The  default install location  is C:\Qt which is  fine, do
 | 
			
		||||
not attempt  to move the  location of  the installed libraries  if you
 | 
			
		||||
@ -85,14 +85,10 @@ Hamlib from sources.
 | 
			
		||||
Hamlib
 | 
			
		||||
------
 | 
			
		||||
 | 
			
		||||
Currently   we  statically   link   Hamlib  to   avoid  clashes   with
 | 
			
		||||
pre-installed DLLs  that may be  older versions than we  support. Once
 | 
			
		||||
Hamlib v1.4 is officially released and commonly available we will move
 | 
			
		||||
to  dynamic   linking.   Until   then  Hamlib   must  be   built  from
 | 
			
		||||
sources. There is a fork of  the official Hamlib project which we keep
 | 
			
		||||
up  to date  with the  official  project master  branch, we  recommend
 | 
			
		||||
building from the 'integration' branch of that fork. The fork is a git
 | 
			
		||||
repository which can be cloned with this command:
 | 
			
		||||
There is  a fork of  the official Hamlib project  which we keep  up to
 | 
			
		||||
date with  the official project  master branch, we  recommend building
 | 
			
		||||
from the  'integration' branch, or  a suitable  tag on that  fork. The
 | 
			
		||||
fork is a git repository which can be cloned with this command:
 | 
			
		||||
 | 
			
		||||
    mkdir -p ~/src/sf/bsomervi
 | 
			
		||||
    cd !$
 | 
			
		||||
@ -105,7 +101,7 @@ Qt. As you  will build Hamlib again when there  are updates you should
 | 
			
		||||
set  up  you  Msys2  command  line  environment  for  this.  I  use  a
 | 
			
		||||
$HOME/.bash_profile file containing these lines:
 | 
			
		||||
 | 
			
		||||
    dll_paths_64bit=/c/Tools/libusb-1.0.23/MinGW64/dll
 | 
			
		||||
    dll_paths_64bit=/c/Tools/libusb-1.0.23/MinGW64/dll:$HOME/local/hamlib/mingw64/release/bin
 | 
			
		||||
    export PATH=/c/Qt/Tools/mingw810_64/bin:$dll_paths_64bit:$PATH
 | 
			
		||||
 | 
			
		||||
Test the amended ~/.bash_profile file by opening a new Msys2 shell and
 | 
			
		||||
@ -127,7 +123,7 @@ then change working directory to that build directory.
 | 
			
		||||
 | 
			
		||||
    mkdir -p ~/build/hamlib/release
 | 
			
		||||
    cd !$
 | 
			
		||||
    ~/src/sf/bsomervi/hamlib/configure --disable-shared \
 | 
			
		||||
    ~/src/sf/bsomervi/hamlib/configure --enable-shared --disable-static \
 | 
			
		||||
        --prefix=$HOME/local/hamlib/mingw64/release \
 | 
			
		||||
	CFLAGS="-DNDEBUG -g -O2 -fdata-sections -ffunction-sections -I/c/Tools/libusb-1.0.23/include" \
 | 
			
		||||
	CXXFLAGS="-DNDEBUG -g -O2 -fdata-sections -ffunction-sections" \
 | 
			
		||||
@ -144,7 +140,7 @@ for tracking down issues:
 | 
			
		||||
 | 
			
		||||
    mkdir -p ~/build/hamlib/debug
 | 
			
		||||
    cd !$
 | 
			
		||||
    ~/src/sf/bsomervi/hamlib/configure --disable-shared \
 | 
			
		||||
    ~/src/sf/bsomervi/hamlib/configure --enable-shared --disable-static \
 | 
			
		||||
        --prefix=$HOME/local/hamlib/mingw64/debug \
 | 
			
		||||
	CFLAGS="-g -O0 -I/c/Tools/libusb-1.0.23/include" \
 | 
			
		||||
	CXXFLAGS="-g -O0" \
 | 
			
		||||
@ -160,6 +156,12 @@ To update the Hamlib sources to the latest commit and rebuild:
 | 
			
		||||
    cd ~/build/hamlib/debug
 | 
			
		||||
    make && make install
 | 
			
		||||
 | 
			
		||||
Note that  the WSJT-X CMake  build script  will not detect  an updated
 | 
			
		||||
build of the  Hamlib DLL, so to avoid using  an out-of-date Hamlib DLL
 | 
			
		||||
you should  delete the Hamlib  DLL (libhamlib-4.dll) from  your WSJT-X
 | 
			
		||||
release configuration  install tree  before rebuilding  and installing
 | 
			
		||||
WSJT-X after a Hamlib update.
 | 
			
		||||
 | 
			
		||||
Pkg Config Lite
 | 
			
		||||
---------------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -112,7 +112,7 @@ summarized in the following Table:
 | 
			
		||||
|===========================================
 | 
			
		||||
|Mode    |Mode character|Sync character|End of line information
 | 
			
		||||
|FST4    | `            |      | ?   aP
 | 
			
		||||
|FT4     | ~            |      | ?   aP
 | 
			
		||||
|FT4     | +            |      | ?   aP
 | 
			
		||||
|FT8     | ~            |      | ?   aP
 | 
			
		||||
|JT4     | $            | *, # | f, fN, dCN
 | 
			
		||||
|JT9     | @            |      |
 | 
			
		||||
 | 
			
		||||
@ -341,8 +341,7 @@ contains
 | 
			
		||||
          endif
 | 
			
		||||
       endif
 | 
			
		||||
    enddo  ! icand
 | 
			
		||||
    if(iavg.eq.0 .and.navg(iseq).ge.2) go to 50
 | 
			
		||||
 | 
			
		||||
    if(iavg.eq.0 .and.navg(iseq).ge.2 .and. iand(ndepth,16).ne.0) go to 50
 | 
			
		||||
900 return
 | 
			
		||||
  end subroutine decode
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										8
									
								
								main.cpp
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								main.cpp
									
									
									
									
									
								
							@ -130,12 +130,8 @@ int main(int argc, char *argv[])
 | 
			
		||||
 | 
			
		||||
      QLocale locale;              // get the current system locale
 | 
			
		||||
 | 
			
		||||
      // Set C/C++ locale used for logging etc.
 | 
			
		||||
#if defined (Q_OS_WIN)
 | 
			
		||||
      std::locale::global (std::locale ("C"));
 | 
			
		||||
#else
 | 
			
		||||
      std::locale::global (std::locale ("en_US.UTF-8"));
 | 
			
		||||
#endif
 | 
			
		||||
      // reset the C+ & C global locales to the classic C locale
 | 
			
		||||
      std::locale::global (std::locale::classic ());
 | 
			
		||||
 | 
			
		||||
      // Override programs executable basename as application name.
 | 
			
		||||
      a.setApplicationName ("WSJT-X");
 | 
			
		||||
 | 
			
		||||
@ -965,8 +965,11 @@ auto FrequencyList_v2::all_bands (Region region, Mode mode) const -> BandSet
 | 
			
		||||
  BandSet result;
 | 
			
		||||
  for (auto const& item : m_->frequency_list_)
 | 
			
		||||
    {
 | 
			
		||||
      if (region == IARURegions::ALL || item.region_ == region
 | 
			
		||||
          || mode == Modes::ALL || item.mode_ == mode)
 | 
			
		||||
      // Match frequencies that are for all regions, for the specified
 | 
			
		||||
      // region (which can also be "all"), and where the mode matches
 | 
			
		||||
      // the specified mode (which can also be "all").
 | 
			
		||||
      if ((region == IARURegions::ALL || item.region_ == IARURegions::ALL || item.region_ == region)
 | 
			
		||||
          && (mode == Modes::ALL || item.mode_ == Modes::ALL || item.mode_ == mode))
 | 
			
		||||
        {
 | 
			
		||||
          result << m_->bands_->find (item.frequency_);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -2285,12 +2285,12 @@ Fejl(%2): %3</translation>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../widgets/mainwindow.ui" line="3399"/>
 | 
			
		||||
        <source>Quick-Start Guide to Q65</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
        <translation>Quick Start Guide for Q65</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../widgets/mainwindow.ui" line="3407"/>
 | 
			
		||||
        <source>Auto Clear Avg after decode</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
        <translation>Auto Slet Avg efter Dekodning</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../widgets/mainwindow.ui" line="573"/>
 | 
			
		||||
@ -2992,7 +2992,7 @@ listen. Makro listen kan også ændfres i Inderstillinger (F2).</translation>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../widgets/mainwindow.ui" line="3383"/>
 | 
			
		||||
        <source>Q65</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
        <translation>Q65</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../widgets/mainwindow.ui" line="3391"/>
 | 
			
		||||
@ -4107,7 +4107,9 @@ listen. Makro listen kan også ændfres i Inderstillinger (F2).</translation>
 | 
			
		||||
        <source>If you make fair use of any part of WSJT-X under terms of the GNU General Public License, you must display the following copyright notice prominently in your derivative work:
 | 
			
		||||
 | 
			
		||||
"The algorithms, source code, look-and-feel of WSJT-X and related programs, and protocol specifications for the modes FSK441, FST4, FT8, JT4, JT6M, JT9, JT65, JTMS, QRA64, Q65, MSK144 are Copyright (C) 2001-2021 by one or more of the following authors: Joseph Taylor, K1JT; Bill Somerville, G4WJS; Steven Franke, K9AN; Nico Palermo, IV3NWV; Greg Beam, KI7MT; Michael Black, W9MDB; Edson Pereira, PY2SDR; Philip Karn, KA9Q; and other members of the WSJT Development Group."</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
        <translation>If you make fair use of any part of WSJT-X under terms of the GNU General Public License, you must display the following copyright notice prominently in your derivative work:
 | 
			
		||||
 | 
			
		||||
"The algorithms, source code, look-and-feel of WSJT-X and related programs, and protocol specifications for the modes FSK441, FST4, FT8, JT4, JT6M, JT9, JT65, JTMS, QRA64, Q65, MSK144 are Copyright (C) 2001-2021 by one or more of the following authors: Joseph Taylor, K1JT; Bill Somerville, G4WJS; Steven Franke, K9AN; Nico Palermo, IV3NWV; Greg Beam, KI7MT; Michael Black, W9MDB; Edson Pereira, PY2SDR; Philip Karn, KA9Q; and other members of the WSJT Development Group."</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>If you make fair use of any part of WSJT-X under terms of the GNU General Public License, you must display the following copyright notice prominently in your derivative work:
 | 
			
		||||
@ -5290,7 +5292,7 @@ Fejl(%2): %3</translation>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../widgets/widegraph.ui" line="340"/>
 | 
			
		||||
        <source>Q65_Sync</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
        <translation>Q65_Sync</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../widgets/widegraph.ui" line="348"/>
 | 
			
		||||
 | 
			
		||||
@ -2480,12 +2480,12 @@ Error(%2): %3</translation>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../widgets/mainwindow.ui" line="3399"/>
 | 
			
		||||
        <source>Quick-Start Guide to Q65</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
        <translation>Guía de inicio rápido de Q65</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../widgets/mainwindow.ui" line="3407"/>
 | 
			
		||||
        <source>Auto Clear Avg after decode</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
        <translation>Auto Clear Avg después de decodificar</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../widgets/mainwindow.ui" line="1588"/>
 | 
			
		||||
@ -2610,7 +2610,7 @@ Error(%2): %3</translation>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../widgets/mainwindow.ui" line="3383"/>
 | 
			
		||||
        <source>Q65</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
        <translation>Q65</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../widgets/mainwindow.ui" line="3391"/>
 | 
			
		||||
@ -4442,7 +4442,9 @@ Error al cargar datos de usuarios de LotW</translatorcomment>
 | 
			
		||||
        <source>If you make fair use of any part of WSJT-X under terms of the GNU General Public License, you must display the following copyright notice prominently in your derivative work:
 | 
			
		||||
 | 
			
		||||
"The algorithms, source code, look-and-feel of WSJT-X and related programs, and protocol specifications for the modes FSK441, FST4, FT8, JT4, JT6M, JT9, JT65, JTMS, QRA64, Q65, MSK144 are Copyright (C) 2001-2021 by one or more of the following authors: Joseph Taylor, K1JT; Bill Somerville, G4WJS; Steven Franke, K9AN; Nico Palermo, IV3NWV; Greg Beam, KI7MT; Michael Black, W9MDB; Edson Pereira, PY2SDR; Philip Karn, KA9Q; and other members of the WSJT Development Group."</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
        <translation>Si hace un uso legítimo de cualquier parte del programa WSJT-X según los términos de la Licencia Pública General GNU, debe mostrar el siguiente aviso de derechos de autor en un lugar destacado en su trabajo derivado:
 | 
			
		||||
 | 
			
		||||
"Los algoritmos, código fuente, apariencia de WSJT-X y programas relacionados, y especificaciones de protocolo para los modos FSK441, FST4, FT8, JT4, JT6M, JT9, JT65, JTMS, QRA64, Q65, MSK144 son Copyright (C) 2001-2021 por uno o más de los siguientes autores: Joseph Taylor, K1JT; Bill Somerville, G4WJS; Steven Franke, K9AN; Nico Palermo, IV3NWV; Greg Beam, KI7MT; Michael Black, W9MDB; Edson Pereira, PY2SDR; Philip Karn, KA9Q; y otros miembros del Grupo de Desarrollo WSJT ".</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <source>If you make fair use of any part of WSJT-X under terms of the GNU General Public License, you must display the following copyright notice prominently in your derivative work:
 | 
			
		||||
@ -5698,7 +5700,7 @@ Error(%2): %3</translation>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../widgets/widegraph.ui" line="340"/>
 | 
			
		||||
        <source>Q65_Sync</source>
 | 
			
		||||
        <translation type="unfinished"></translation>
 | 
			
		||||
        <translation>Q65_Sync</translation>
 | 
			
		||||
    </message>
 | 
			
		||||
    <message>
 | 
			
		||||
        <location filename="../widgets/widegraph.ui" line="348"/>
 | 
			
		||||
 | 
			
		||||
@ -2,14 +2,24 @@
 | 
			
		||||
 | 
			
		||||
CallsignValidator::CallsignValidator (QObject * parent, bool allow_compound)
 | 
			
		||||
  : QValidator {parent}
 | 
			
		||||
  , re_ {allow_compound ? R"(^[A-Za-z0-9/]+$)" : R"(^[A-Za-z0-9]+$)"}
 | 
			
		||||
  , re_ {allow_compound ? R"(^[A-Z0-9/]+$)" : R"(^[A-Z0-9]+$)"}
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
auto CallsignValidator::validate (QString& input, int& pos) const -> State
 | 
			
		||||
{
 | 
			
		||||
  auto match = re_.match (input, 0, QRegularExpression::PartialPreferCompleteMatch);
 | 
			
		||||
  input = input.toUpper ();
 | 
			
		||||
  while (input.size () && input[0].isSpace ())
 | 
			
		||||
    {
 | 
			
		||||
      input.remove (0, 1);
 | 
			
		||||
      if (pos > 0) --pos;
 | 
			
		||||
    }
 | 
			
		||||
  while (input.size () && input[input.size ()].isSpace ())
 | 
			
		||||
    {
 | 
			
		||||
      if (pos > input.size ()) --pos;
 | 
			
		||||
      input.chop (1);
 | 
			
		||||
    }
 | 
			
		||||
  auto match = re_.match (input, 0, QRegularExpression::PartialPreferCompleteMatch);
 | 
			
		||||
  if (match.hasMatch ()) return Acceptable;
 | 
			
		||||
  if (!input.size () || match.hasPartialMatch ()) return Intermediate;
 | 
			
		||||
  pos = input.size ();
 | 
			
		||||
 | 
			
		||||
@ -413,17 +413,19 @@ void DisplayText::displayDecodedText(DecodedText const& decodedText, QString con
 | 
			
		||||
  else
 | 
			
		||||
    {
 | 
			
		||||
      if (bCQonly) return;
 | 
			
		||||
      if (myCall != "" && (decodedText.indexOf (" " + myCall + " ") >= 0
 | 
			
		||||
                           or decodedText.indexOf (" " + myCall + "/") >= 0
 | 
			
		||||
                           or decodedText.indexOf ("<" + myCall + "/") >= 0
 | 
			
		||||
                           or decodedText.indexOf ("/" + myCall + " ") >= 0
 | 
			
		||||
                           or decodedText.indexOf ("/" + myCall + ">") >= 0
 | 
			
		||||
                           or decodedText.indexOf ("<" + myCall + " ") >= 0
 | 
			
		||||
                           or decodedText.indexOf ("<" + myCall + ">") >= 0
 | 
			
		||||
                           or decodedText.indexOf (" " + myCall + ">") >= 0)) {
 | 
			
		||||
        highlight_types types {Highlight::MyCall};
 | 
			
		||||
        set_colours (m_config, &bg, &fg, types);
 | 
			
		||||
      }
 | 
			
		||||
      if (myCall.size ())
 | 
			
		||||
        {
 | 
			
		||||
          QString regexp {"[ <]" + myCall + "[ >]"};
 | 
			
		||||
          if (Radio::is_compound_callsign (myCall))
 | 
			
		||||
            {
 | 
			
		||||
              regexp = "(?:" + regexp + "|[ <]" + Radio::base_callsign (myCall) + "[ >])";
 | 
			
		||||
            }
 | 
			
		||||
          if ((decodedText.clean_string () + " ").contains (QRegularExpression {regexp}))
 | 
			
		||||
            {
 | 
			
		||||
              highlight_types types {Highlight::MyCall};
 | 
			
		||||
              set_colours (m_config, &bg, &fg, types);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
  auto message = decodedText.string();
 | 
			
		||||
  QString dxCall;
 | 
			
		||||
 | 
			
		||||
@ -825,7 +825,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
 | 
			
		||||
  connect(&logQSOTimer, &QTimer::timeout, this, &MainWindow::on_logQSOButton_clicked);
 | 
			
		||||
 | 
			
		||||
  tuneButtonTimer.setSingleShot(true);
 | 
			
		||||
  connect(&tuneButtonTimer, &QTimer::timeout, this, &MainWindow::on_stopTxButton_clicked);
 | 
			
		||||
  connect(&tuneButtonTimer, &QTimer::timeout, this, &MainWindow::end_tuning);
 | 
			
		||||
 | 
			
		||||
  tuneATU_Timer.setSingleShot(true);
 | 
			
		||||
  connect(&tuneATU_Timer, &QTimer::timeout, this, &MainWindow::stopTuneATU);
 | 
			
		||||
@ -1493,8 +1493,8 @@ void MainWindow::dataSink(qint64 frames)
 | 
			
		||||
    freqcal_(&dec_data.d2[0],&k,&nkhz,&RxFreq,&ftol,&line[0],80);
 | 
			
		||||
    QString t=QString::fromLatin1(line);
 | 
			
		||||
    DecodedText decodedtext {t};
 | 
			
		||||
    ui->decodedTextBrowser->displayDecodedText (decodedtext,m_baseCall,m_mode,m_config.DXCC(),
 | 
			
		||||
          m_logBook,m_currentBand, m_config.ppfx());
 | 
			
		||||
    ui->decodedTextBrowser->displayDecodedText (decodedtext, m_config.my_callsign (), m_mode, m_config.DXCC (),
 | 
			
		||||
          m_logBook, m_currentBand, m_config.ppfx ());
 | 
			
		||||
    if (ui->measure_check_box->isChecked ()) {
 | 
			
		||||
      // Append results text to file "fmt.all".
 | 
			
		||||
      QFile f {m_config.writeable_data_dir ().absoluteFilePath ("fmt.all")};
 | 
			
		||||
@ -1748,8 +1748,8 @@ void MainWindow::fastSink(qint64 frames)
 | 
			
		||||
  if(bmsk144 and (line[0]!=0)) {
 | 
			
		||||
    QString message {QString::fromLatin1 (line)};
 | 
			
		||||
    DecodedText decodedtext {message.replace (QChar::LineFeed, "")};
 | 
			
		||||
    ui->decodedTextBrowser->displayDecodedText (decodedtext,m_baseCall,m_mode,m_config.DXCC(),
 | 
			
		||||
         m_logBook,m_currentBand,m_config.ppfx());
 | 
			
		||||
    ui->decodedTextBrowser->displayDecodedText (decodedtext, m_config.my_callsign (), m_mode, m_config.DXCC(),
 | 
			
		||||
         m_logBook, m_currentBand, m_config.ppfx ());
 | 
			
		||||
    m_bDecoded=true;
 | 
			
		||||
    auto_sequence (decodedtext, ui->sbFtol->value (), std::numeric_limits<unsigned>::max ());
 | 
			
		||||
    postDecode (true, decodedtext.string ());
 | 
			
		||||
@ -3253,8 +3253,8 @@ void::MainWindow::fast_decode_done()
 | 
			
		||||
//Left (Band activity) window
 | 
			
		||||
    DecodedText decodedtext {message.replace (QChar::LineFeed, "")};
 | 
			
		||||
    if(!m_bFastDone) {
 | 
			
		||||
      ui->decodedTextBrowser->displayDecodedText (decodedtext,m_baseCall,m_mode,m_config.DXCC(),
 | 
			
		||||
         m_logBook,m_currentBand,m_config.ppfx());
 | 
			
		||||
      ui->decodedTextBrowser->displayDecodedText (decodedtext, m_config.my_callsign (), m_mode, m_config.DXCC (),
 | 
			
		||||
         m_logBook, m_currentBand, m_config.ppfx ());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    t=message.mid(10,5).toFloat();
 | 
			
		||||
@ -3460,16 +3460,16 @@ void MainWindow::readFromStdout()                             //readFromStdout
 | 
			
		||||
          if(!m_bDisplayedOnce) {
 | 
			
		||||
            // This hack sets the font.  Surely there's a better way!
 | 
			
		||||
            DecodedText dt{"."};
 | 
			
		||||
            ui->decodedTextBrowser->displayDecodedText(dt,m_baseCall,m_mode,m_config.DXCC(),
 | 
			
		||||
                m_logBook,m_currentBand,m_config.ppfx());
 | 
			
		||||
            ui->decodedTextBrowser->displayDecodedText (dt, m_config.my_callsign (), m_mode, m_config.DXCC (),
 | 
			
		||||
                m_logBook, m_currentBand, m_config.ppfx ());
 | 
			
		||||
            m_bDisplayedOnce=true;
 | 
			
		||||
          }
 | 
			
		||||
        } else {
 | 
			
		||||
          DecodedText decodedtext1=decodedtext0;
 | 
			
		||||
          ui->decodedTextBrowser->displayDecodedText(decodedtext1,m_baseCall,m_mode,m_config.DXCC(),
 | 
			
		||||
                                                     m_logBook,m_currentBand,m_config.ppfx(),
 | 
			
		||||
                                                     ui->cbCQonly->isVisible() && ui->cbCQonly->isChecked(),
 | 
			
		||||
                                                     haveFSpread, fSpread);
 | 
			
		||||
          ui->decodedTextBrowser->displayDecodedText (decodedtext1, m_config.my_callsign (), m_mode, m_config.DXCC (),
 | 
			
		||||
                                                      m_logBook, m_currentBand, m_config.ppfx (),
 | 
			
		||||
                                                      ui->cbCQonly->isVisible() && ui->cbCQonly->isChecked(),
 | 
			
		||||
                                                      haveFSpread, fSpread);
 | 
			
		||||
 | 
			
		||||
          if(m_bBestSPArmed && m_mode=="FT4" && CALLING == m_QSOProgress) {
 | 
			
		||||
            QString messagePriority=ui->decodedTextBrowser->CQPriority();
 | 
			
		||||
@ -3498,7 +3498,6 @@ void MainWindow::readFromStdout()                             //readFromStdout
 | 
			
		||||
      bool bDisplayRight=bAvgMsg;
 | 
			
		||||
      int audioFreq=decodedtext.frequencyOffset();
 | 
			
		||||
      if(m_mode=="FT8" or m_mode=="FT4" or m_mode=="FST4" or m_mode=="Q65") {
 | 
			
		||||
//      if(m_mode=="FT8" or m_mode=="FT4" or m_mode=="FST4") {
 | 
			
		||||
        int ftol=10;
 | 
			
		||||
        if(m_mode=="Q65") ftol=ui->sbFtol->value();
 | 
			
		||||
        auto const& parts = decodedtext.string().remove("<").remove(">")
 | 
			
		||||
@ -3506,7 +3505,23 @@ void MainWindow::readFromStdout()                             //readFromStdout
 | 
			
		||||
        if (parts.size() > 6) {
 | 
			
		||||
          auto for_us = parts[5].contains (m_baseCall)
 | 
			
		||||
            || ("DE" == parts[5] && qAbs (ui->RxFreqSpinBox->value () - audioFreq) <= ftol);
 | 
			
		||||
          if(m_baseCall==m_config.my_callsign() and m_baseCall!=parts[5]) for_us=false;
 | 
			
		||||
          if(m_baseCall == m_config.my_callsign())
 | 
			
		||||
            {
 | 
			
		||||
              if (m_baseCall != parts[5])
 | 
			
		||||
                {
 | 
			
		||||
                  for_us=false;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
          else
 | 
			
		||||
            {
 | 
			
		||||
              if (m_config.my_callsign () != parts[5])
 | 
			
		||||
                {
 | 
			
		||||
                  for_us = false; // same base call as ours but
 | 
			
		||||
                                  // different prefix or suffix, rare
 | 
			
		||||
                                  // but can happen with multi station
 | 
			
		||||
                                  // special events
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
          if(m_bCallingCQ && !m_bAutoReply && for_us && ui->cbFirst->isChecked() and
 | 
			
		||||
             SpecOp::FOX > m_config.special_op_id()) {
 | 
			
		||||
            m_bDoubleClicked=true;
 | 
			
		||||
@ -3527,8 +3542,8 @@ void MainWindow::readFromStdout()                             //readFromStdout
 | 
			
		||||
        // This msg is within 10 hertz of our tuned frequency, or a JT4 or JT65 avg,
 | 
			
		||||
        // or contains MyCall
 | 
			
		||||
        if(!m_bBestSPArmed or m_mode!="FT4") {
 | 
			
		||||
          ui->decodedTextBrowser2->displayDecodedText(decodedtext0,m_baseCall,m_mode,m_config.DXCC(),
 | 
			
		||||
                m_logBook,m_currentBand,m_config.ppfx());
 | 
			
		||||
          ui->decodedTextBrowser2->displayDecodedText (decodedtext0, m_config.my_callsign (), m_mode, m_config.DXCC (),
 | 
			
		||||
                m_logBook, m_currentBand, m_config.ppfx ());
 | 
			
		||||
        }
 | 
			
		||||
        m_QSOText = decodedtext.string ().trimmed ();
 | 
			
		||||
      }
 | 
			
		||||
@ -5194,8 +5209,8 @@ void MainWindow::processMessage (DecodedText const& message, Qt::KeyboardModifie
 | 
			
		||||
  QString s2 = message.clean_string ().trimmed();
 | 
			
		||||
  if (s1!=s2 and !message.isTX()) {
 | 
			
		||||
    if (!s2.contains(m_baseCall) or m_mode=="MSK144") {  // Taken care of elsewhere if for_us and slow mode
 | 
			
		||||
      ui->decodedTextBrowser2->displayDecodedText(message, m_baseCall,m_mode,m_config.DXCC(),
 | 
			
		||||
      m_logBook,m_currentBand,m_config.ppfx());
 | 
			
		||||
      ui->decodedTextBrowser2->displayDecodedText (message, m_config.my_callsign (), m_mode, m_config.DXCC (),
 | 
			
		||||
      m_logBook, m_currentBand, m_config.ppfx ());
 | 
			
		||||
    }
 | 
			
		||||
    m_QSOText = s2;
 | 
			
		||||
  }
 | 
			
		||||
@ -6920,14 +6935,14 @@ void MainWindow::on_bandComboBox_activated (int index)
 | 
			
		||||
void MainWindow::band_changed (Frequency f)
 | 
			
		||||
{
 | 
			
		||||
  // Set the attenuation value if options are checked
 | 
			
		||||
  QString curBand = ui->bandComboBox->currentText();
 | 
			
		||||
  if (m_config.pwrBandTxMemory() && !m_tune) {
 | 
			
		||||
      if (m_pwrBandTxMemory.contains(curBand)) {
 | 
			
		||||
        ui->outAttenuation->setValue(m_pwrBandTxMemory[curBand].toInt());
 | 
			
		||||
      }
 | 
			
		||||
      else {
 | 
			
		||||
        m_pwrBandTxMemory[curBand] = ui->outAttenuation->value();
 | 
			
		||||
      }
 | 
			
		||||
    auto const&curBand = ui->bandComboBox->currentText();
 | 
			
		||||
    if (m_pwrBandTxMemory.contains(curBand)) {
 | 
			
		||||
      ui->outAttenuation->setValue(m_pwrBandTxMemory[curBand].toInt());
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
      m_pwrBandTxMemory[curBand] = ui->outAttenuation->value();
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  if (m_bandEdited) {
 | 
			
		||||
@ -6997,9 +7012,9 @@ void MainWindow::on_tuneButton_clicked (bool checked)
 | 
			
		||||
  static bool lastChecked = false;
 | 
			
		||||
  if (lastChecked == checked) return;
 | 
			
		||||
  lastChecked = checked;
 | 
			
		||||
  QString curBand = ui->bandComboBox->currentText();
 | 
			
		||||
  if (checked && m_tune==false) { // we're starting tuning so remember Tx and change pwr to Tune value
 | 
			
		||||
    if (m_config.pwrBandTuneMemory ()) {
 | 
			
		||||
      auto const& curBand = ui->bandComboBox->currentText();
 | 
			
		||||
      m_pwrBandTxMemory[curBand] = ui->outAttenuation->value(); // remember our Tx pwr
 | 
			
		||||
      m_PwrBandSetOK = false;
 | 
			
		||||
      if (m_pwrBandTuneMemory.contains(curBand)) {
 | 
			
		||||
@ -7008,15 +7023,6 @@ void MainWindow::on_tuneButton_clicked (bool checked)
 | 
			
		||||
      m_PwrBandSetOK = true;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  else { // we're turning off so remember our Tune pwr setting and reset to Tx pwr
 | 
			
		||||
    if (m_config.pwrBandTuneMemory() || m_config.pwrBandTxMemory()) {
 | 
			
		||||
      stopTx();
 | 
			
		||||
      m_pwrBandTuneMemory[curBand] = ui->outAttenuation->value(); // remember our Tune pwr
 | 
			
		||||
      m_PwrBandSetOK = false;
 | 
			
		||||
      ui->outAttenuation->setValue(m_pwrBandTxMemory[curBand].toInt()); // set to Tx pwr
 | 
			
		||||
      m_PwrBandSetOK = true;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  if (m_tune) {
 | 
			
		||||
    tuneButtonTimer.start(250);
 | 
			
		||||
  } else {
 | 
			
		||||
@ -7028,6 +7034,19 @@ void MainWindow::on_tuneButton_clicked (bool checked)
 | 
			
		||||
  Q_EMIT tune (checked);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::end_tuning ()
 | 
			
		||||
{
 | 
			
		||||
  on_stopTxButton_clicked ();
 | 
			
		||||
  // we're turning off so remember our Tune pwr setting and reset to Tx pwr
 | 
			
		||||
  if (m_config.pwrBandTuneMemory() || m_config.pwrBandTxMemory()) {
 | 
			
		||||
    auto const& curBand = ui->bandComboBox->currentText();
 | 
			
		||||
    m_pwrBandTuneMemory[curBand] = ui->outAttenuation->value(); // remember our Tune pwr
 | 
			
		||||
    m_PwrBandSetOK = false;
 | 
			
		||||
    ui->outAttenuation->setValue(m_pwrBandTxMemory[curBand].toInt()); // set to Tx pwr
 | 
			
		||||
    m_PwrBandSetOK = true;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MainWindow::stop_tuning ()
 | 
			
		||||
{
 | 
			
		||||
  on_tuneButton_clicked(false);
 | 
			
		||||
@ -9199,7 +9218,7 @@ void MainWindow::write_all(QString txRx, QString message)
 | 
			
		||||
  t = t.asprintf("%5d",ui->TxFreqSpinBox->value());
 | 
			
		||||
  if (txRx=="Tx") msg="   0  0.0" + t + " " + message;
 | 
			
		||||
  auto time = QDateTime::currentDateTimeUtc ();
 | 
			
		||||
  if( txRx=="Rx" ) time=m_dateTimeSeqStart;
 | 
			
		||||
  if( txRx=="Rx" && !m_bFastMode ) time=m_dateTimeSeqStart;
 | 
			
		||||
 | 
			
		||||
  t = t.asprintf("%10.3f ",m_freqNominal/1.e6);
 | 
			
		||||
  if (m_diskData) {
 | 
			
		||||
 | 
			
		||||
@ -254,6 +254,7 @@ private slots:
 | 
			
		||||
  void on_actionShort_list_of_add_on_prefixes_and_suffixes_triggered();
 | 
			
		||||
  void band_changed (Frequency);
 | 
			
		||||
  void monitor (bool);
 | 
			
		||||
  void end_tuning ();
 | 
			
		||||
  void stop_tuning ();
 | 
			
		||||
  void stopTuneATU();
 | 
			
		||||
  void auto_tx_mode(bool);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user