Merge branch 'release-2.2.0'

This commit is contained in:
Bill Somerville 2020-05-24 16:52:52 +01:00
commit d89b02fa3f
No known key found for this signature in database
GPG Key ID: D864B06D1E81618F
69 changed files with 13752 additions and 498 deletions

View File

@ -58,7 +58,7 @@ set (PROJECT_MANUAL wsjtx-main)
set (PROJECT_MANUAL_DIRECTORY_URL http://www.physics.princeton.edu/pulsar/K1JT/wsjtx-doc/) set (PROJECT_MANUAL_DIRECTORY_URL http://www.physics.princeton.edu/pulsar/K1JT/wsjtx-doc/)
set (PROJECT_SAMPLES_URL http://downloads.sourceforge.net/project/wsjt/) set (PROJECT_SAMPLES_URL http://downloads.sourceforge.net/project/wsjt/)
set (PROJECT_SAMPLES_UPLOAD_DEST frs.sourceforge.net:/home/frs/project/wsjt/) set (PROJECT_SAMPLES_UPLOAD_DEST frs.sourceforge.net:/home/frs/project/wsjt/)
set (PROJECT_SUMMARY_DESCRIPTION "${PROJECT_NAME} - Digital Modes for Weak Signal Communicaitons in Amateur Radio.") set (PROJECT_SUMMARY_DESCRIPTION "${PROJECT_NAME} - Digital Modes for Weak Signal Communications in Amateur Radio.")
set (PROJECT_DESCRIPTION "${PROJECT_SUMMARY_DESCRIPTION} set (PROJECT_DESCRIPTION "${PROJECT_SUMMARY_DESCRIPTION}
${PROJECT_NAME} is a computer program designed to facilitate basic amateur ${PROJECT_NAME} is a computer program designed to facilitate basic amateur
radio communication using very weak signals. The first four letters in radio communication using very weak signals. The first four letters in
@ -1094,8 +1094,10 @@ add_custom_target (etags COMMAND ${ETAGS} -o ${CMAKE_SOURCE_DIR}/TAGS -R ${sourc
# Qt i18n # Qt i18n
set (LANGUAGES set (LANGUAGES
en_GB en_GB # English UK
pt_PT pt_PT # Poutuguese
es_ES # Spanish
ca # Catalan
) )
foreach (lang_ ${LANGUAGES}) foreach (lang_ ${LANGUAGES})
file (TO_NATIVE_PATH translations/wsjtx_${lang_}.ts ts_) file (TO_NATIVE_PATH translations/wsjtx_${lang_}.ts ts_)
@ -1304,9 +1306,6 @@ target_link_libraries (jt4code wsjt_fort wsjt_cxx)
add_executable (msk144code lib/msk144code.f90 wsjtx.rc) add_executable (msk144code lib/msk144code.f90 wsjtx.rc)
target_link_libraries (msk144code wsjt_fort wsjt_cxx) target_link_libraries (msk144code wsjt_fort wsjt_cxx)
add_executable (jt65 lib/jt65.f90 lib/jt65_test.f90 wsjtx.rc)
target_link_libraries (jt65 wsjt_fort wsjt_cxx)
add_executable (ft8code lib/ft8/ft8code.f90 wsjtx.rc) add_executable (ft8code lib/ft8/ft8code.f90 wsjtx.rc)
target_link_libraries (ft8code wsjt_fort wsjt_cxx) target_link_libraries (ft8code wsjt_fort wsjt_cxx)
@ -1625,6 +1624,7 @@ if (NOT is_debug_build)
${QT_PLUGINS_DIR}/audio ${QT_PLUGINS_DIR}/audio
${QT_PLUGINS_DIR}/accessible ${QT_PLUGINS_DIR}/accessible
${QT_PLUGINS_DIR}/imageformats ${QT_PLUGINS_DIR}/imageformats
${QT_PLUGINS_DIR}/styles
DESTINATION ${WSJT_PLUGIN_DESTINATION} DESTINATION ${WSJT_PLUGIN_DESTINATION}
CONFIGURATIONS Release MinSizeRel CONFIGURATIONS Release MinSizeRel
#COMPONENT runtime #COMPONENT runtime

View File

@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>670</width> <width>557</width>
<height>617</height> <height>561</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -559,7 +559,7 @@ quiet period when decoding is done.</string>
<property name="editable"> <property name="editable">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="currentText" stdset="0"> <property name="currentText">
<string/> <string/>
</property> </property>
<property name="insertPolicy"> <property name="insertPolicy">
@ -929,7 +929,7 @@ a few, particularly some Kenwood rigs, require it).</string>
</sizepolicy> </sizepolicy>
</property> </property>
<property name="toolTip"> <property name="toolTip">
<string>How this program activates the PTT on your radio</string> <string>How this program activates the PTT on your radio?</string>
</property> </property>
<property name="title"> <property name="title">
<string>PTT Method</string> <string>PTT Method</string>
@ -1021,7 +1021,7 @@ other hardware interface for PTT.</string>
<property name="editable"> <property name="editable">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="currentText" stdset="0"> <property name="currentText">
<string/> <string/>
</property> </property>
<property name="currentIndex"> <property name="currentIndex">
@ -3108,13 +3108,13 @@ Right click for insert and delete options.</string>
</connection> </connection>
</connections> </connections>
<buttongroups> <buttongroups>
<buttongroup name="split_mode_button_group"/>
<buttongroup name="TX_audio_source_button_group"/>
<buttongroup name="TX_mode_button_group"/>
<buttongroup name="PTT_method_button_group"/>
<buttongroup name="special_op_activity_button_group"/>
<buttongroup name="CAT_handshake_button_group"/> <buttongroup name="CAT_handshake_button_group"/>
<buttongroup name="TX_audio_source_button_group"/>
<buttongroup name="special_op_activity_button_group"/>
<buttongroup name="TX_mode_button_group"/>
<buttongroup name="CAT_data_bits_button_group"/> <buttongroup name="CAT_data_bits_button_group"/>
<buttongroup name="PTT_method_button_group"/>
<buttongroup name="CAT_stop_bits_button_group"/> <buttongroup name="CAT_stop_bits_button_group"/>
<buttongroup name="split_mode_button_group"/>
</buttongroups> </buttongroups>
</ui> </ui>

60
NEWS
View File

@ -13,6 +13,66 @@
Copyright 2001 - 2019 by Joe Taylor, K1JT. Copyright 2001 - 2019 by Joe Taylor, K1JT.
Release: WSJT-X 2.2.0-rc2
May 25, 2020
-------------------------
WSJT-X 2.2.0-rc2 is a release candidate for WSJT-X 2.2.0. The
following bugs present in the -rc1 version have been fixed:
- Missing blank line between some decode sequences.
- Improper functioning of "Start new period decodes at top".
- Font selection caused crash on some macOS systems.
- Mouse action in band selector box not right in some macOS systems.
- Incorrect recall of Tx power setting in WSPR mode.
- Many fixes to hamlib library and executables (rigctld, etc.).
- Some regional settings did not allow WSJT-X to start.
- Main window "looked like old Windows" in macOS.
- Crash when "Ref Spec" is selected and no refspec.dat available.
- Improper decoding of some FT4 messages with hashed "MyCall".
- Crash after warning message about double-clicking in ISCAT mode.
In addition, we have made the following improvements:
- Updated some figures and text in User Guide.
- Corrected some formatting issues in the pdf version of User Guide.
- Added some new sample files.
- Improved shape and position of "green goal post" in Wide Graph.
- Significantly reduced the rate of false decodes in FT4 and FT8.
- Allow FT4 to use NA VHF Contest message formats.
- Hold Tx frequency no longer cleared when switching between modes.
- Added capability for translations of the user interface into
languages other than English. First working example (special
thanks to Xavi Perez, EA3W!), is Catalan. Spanish will be next.
- Performance improvements to decode highlighting via UDP messages.
And finally:
Increasing FT8 usage on the popular bands 40, 30, and 20m means that
the default 3 kHz sub-bands are often wall-to-wall with signals.
Overcrowding encourages some to turn on their amplifiers, which only
makes things worse. We are trying to coordinate the suggested
frequencies in WSJT-X with updated band plans being considered by
IARU, ARRL, and other amateur radio societies.
On a trial basis, and in response to numerous suggestions from around
the world, we have added a second set of suggested dial frequencies
for FT8 on three HF bands and also on 6 meters. The new suggested dial
frequencies are 7.071, 10.133, 14.071, and 50.310 MHz. These
frequencies will appear in your drop-down band-selector list after you
go to the "Settings | Frequencies" tab, right-click on the frequency
table, and select "Reset". Alternatively, you can add the new FT8
frequencies manually.
When the conventional FT8 sub-band on 6, 20, 30, or 40 m seems too
full, please try moving your dial frequency down 3 kHz! Be aware that
as currently implemented, WSJT-X will set your dial to the lowest
frequency for the selected mode and band, when you switch bands.
See the next section for a list of other program improvements since
WSJT-X 2.1.2.
Release: WSJT-X 2.2.0-rc1 Release: WSJT-X 2.2.0-rc1
May 10, 2020 May 10, 2020
------------------------- -------------------------

View File

@ -450,13 +450,17 @@
* messages printed in the Band Activity panel. The WSJT-X * messages printed in the Band Activity panel. The WSJT-X
* clients maintain a list of such instructions and apply them to * clients maintain a list of such instructions and apply them to
* all decoded messages in the band activity window. To clear * all decoded messages in the band activity window. To clear
* highlighting send an invalid QColor value for either or both * and cancel highlighting send an invalid QColor value for
* of the background and foreground fields. * either or both of the background and foreground fields. When
* using this mode the total number of callsign highlighting
* requests should be limited otherwise the performance of WSJT-X
* decoding may be impacted. A rough rule of thumb might be too
* limit the number of active highlighting requests to no more
* than 100.
* *
* The "Highlight last" field allows the sender to request that * The "Highlight last" field allows the sender to request that
* the last instance only instead of all instances of the * all instances of "Callsign" in the last period only, instead
* specified call be highlighted or have it's highlighting * of all instances in all periods, be highlighted.
* cleared.
* *
* *
* SwitchConfiguration In 14 quint32 * SwitchConfiguration In 14 quint32

View File

@ -12,6 +12,65 @@
Copyright 2001 - 2020 by Joe Taylor, K1JT. Copyright 2001 - 2020 by Joe Taylor, K1JT.
Release: WSJT-X 2.2.0-rc2
May 25, 2020
-------------------------
WSJT-X 2.2.0-rc2 is a release candidate for WSJT-X 2.2.0. The
following bugs present in the -rc1 version have been fixed:
- Missing blank line between some decode sequences.
- Improper functioning of "Start new period decodes at top".
- Font selection caused crash on some macOS systems.
- Mouse action in band selector box not right in some macOS systems.
- Incorrect recall of Tx power setting in WSPR mode.
- Many fixes to hamlib library and executables (rigctld, etc.).
- Some regional settings did not allow WSJT-X to start.
- Main window "looked like old Windows" in macOS.
- Crash when "Ref Spec" is selected and no refspec.dat available.
- Improper decoding of some FT4 messages with hashed "MyCall".
- Crash after warning message about double-clicking in ISCAT mode.
In addition, we have made the following improvements:
- Updated some figures and text in User Guide.
- Corrected some formatting issues in the pdf version of User Guide.
- Added some new sample files.
- Improved shape and position of "green goal post" in Wide Graph.
- Significantly reduced the rate of false decodes in FT4 and FT8.
- Allow FT4 to use NA VHF Contest message formats.
- Hold Tx frequency no longer cleared when switching between modes.
- Added capability for translations of the user interface into
languages other than English. First working example (special
thanks to Xavi Perez, EA3W!), is Catalan. Spanish will be next.
- Performance improvements to decode highlighting via UDP messages.
And finally:
Increasing FT8 usage on the popular bands 40, 30, and 20m means that
the default 3 kHz sub-bands are often wall-to-wall with signals.
Overcrowding encourages some to turn on their amplifiers, which only
makes things worse. We are trying to coordinate the suggested
frequencies in WSJT-X with updated band plans being considered by
IARU, ARRL, and other amateur radio societies.
On a trial basis, and in response to numerous suggestions from around
the world, we have added a second set of suggested dial frequencies
for FT8 on three HF bands and also on 6 meters. The new suggested dial
frequencies are 7.071, 10.133, 14.071, and 50.310 MHz. These
frequencies will appear in your drop-down band-selector list after you
go to the "Settings | Frequencies" tab, right-click on the frequency
table, and select "Reset". Alternatively, you can add the new FT8
frequencies manually.
When the conventional FT8 sub-band on 6, 20, 30, or 40 m seems too
full, please try moving your dial frequency down 3 kHz! Be aware that
as currently implemented, WSJT-X will set your dial to the lowest
frequency for the selected mode and band, when you switch bands.
See the next section for a list of other program improvements since
WSJT-X 2.1.2.
Release: WSJT-X 2.2.0-rc1 Release: WSJT-X 2.2.0-rc1
May 10, 2020 May 10, 2020

View File

@ -2,5 +2,5 @@
set (WSJTX_VERSION_MAJOR 2) set (WSJTX_VERSION_MAJOR 2)
set (WSJTX_VERSION_MINOR 2) set (WSJTX_VERSION_MINOR 2)
set (WSJTX_VERSION_PATCH 0) set (WSJTX_VERSION_PATCH 0)
set (WSJTX_RC 1) # release candidate number, comment out or zero for development versions set (WSJTX_RC 2) # release candidate number, comment out or zero for development versions
set (WSJTX_VERSION_IS_RELEASE 0) # set to 1 for final release build set (WSJTX_VERSION_IS_RELEASE 0) # set to 1 for final release build

View File

@ -125,7 +125,7 @@ set (UG_IMGS
images/VHF_controls.png images/VHF_controls.png
images/view-menu.png images/view-menu.png
images/wide-graph-controls.png images/wide-graph-controls.png
images/Windows_Dark.png
) )
find_program (ASCIIDOCTOR_EXECUTABLE NAMES asciidoctor) find_program (ASCIIDOCTOR_EXECUTABLE NAMES asciidoctor)

View File

@ -29,7 +29,7 @@ the following copyright notice prominently:
*The algorithms, source code, look-and-feel of _{prog}_ and related *The algorithms, source code, look-and-feel of _{prog}_ and related
programs, and protocol specifications for the modes FSK441, FT4, FT8, programs, and protocol specifications for the modes FSK441, FT4, FT8,
JT4, JT6M, JT9, JT65, JTMS, QRA64, ISCAT, and MSK144 are Copyright (C) JT4, JT6M, JT9, JT65, JTMS, QRA64, ISCAT, and MSK144 are Copyright (C)
2001-2019 by one or more of the following authors: Joseph Taylor, 2001-2020 by one or more of the following authors: Joseph Taylor,
K1JT; Bill Somerville, G4WJS; Steven Franke, K9AN; Nico Palermo, K1JT; Bill Somerville, G4WJS; Steven Franke, K9AN; Nico Palermo,
IV3NWV; Greg Beam, KI7MT; Michael Black, W9MDB; Edson Pereira, PY2SDR; IV3NWV; Greg Beam, KI7MT; Michael Black, W9MDB; Edson Pereira, PY2SDR;
Philip Karn, KA9Q; and other members of the WSJT Development Group.* Philip Karn, KA9Q; and other members of the WSJT Development Group.*

View File

@ -68,6 +68,7 @@ d). Edit lines as needed. Keeping them in alphabetic order help see dupes.
:fmt_k5cm: http://www.k5cm.com/[FMT Event Info] :fmt_k5cm: http://www.k5cm.com/[FMT Event Info]
:fmt_wspr: http://www.physics.princeton.edu/pulsar/K1JT/FMT_User.pdf[Accurate Frequency Measurements with your WSPR Setup] :fmt_wspr: http://www.physics.princeton.edu/pulsar/K1JT/FMT_User.pdf[Accurate Frequency Measurements with your WSPR Setup]
:ft4_protocol: http://physics.princeton.edu/pulsar/k1jt/FT4_Protocol.pdf[The FT4 Protocol for Digital Contesting] :ft4_protocol: http://physics.princeton.edu/pulsar/k1jt/FT4_Protocol.pdf[The FT4 Protocol for Digital Contesting]
:ft4_ft8_protocols: http://physics.princeton.edu/pulsar/k1jt/FT4_FT8_QEX.pdf[The FT4 and FT8 Communication Protocols]
:ft8_tips: http://www.g4ifb.com/FT8_Hinson_tips_for_HF_DXers.pdf[FT8 Operating Guide] :ft8_tips: http://www.g4ifb.com/FT8_Hinson_tips_for_HF_DXers.pdf[FT8 Operating Guide]
:ft8_DXped: http://physics.princeton.edu/pulsar/k1jt/FT8_DXpedition_Mode.pdf[FT8 DXpedition Mode] :ft8_DXped: http://physics.princeton.edu/pulsar/k1jt/FT8_DXpedition_Mode.pdf[FT8 DXpedition Mode]
:gnu_gpl: http://www.gnu.org/licenses/gpl-3.0.txt[GNU General Public License] :gnu_gpl: http://www.gnu.org/licenses/gpl-3.0.txt[GNU General Public License]
@ -75,7 +76,7 @@ d). Edit lines as needed. Keeping them in alphabetic order help see dupes.
:hrd: http://www.hrdsoftwarellc.com/[Ham Radio Deluxe] :hrd: http://www.hrdsoftwarellc.com/[Ham Radio Deluxe]
:jt4eme: http://physics.princeton.edu/pulsar/K1JT/WSJT-X_1.6.0_for_JT4_v7.pdf[Using WSJT-X for JT4 EME Operation] :jt4eme: http://physics.princeton.edu/pulsar/K1JT/WSJT-X_1.6.0_for_JT4_v7.pdf[Using WSJT-X for JT4 EME Operation]
:jt65protocol: http://physics.princeton.edu/pulsar/K1JT/JT65.pdf[QEX] :jt65protocol: http://physics.princeton.edu/pulsar/K1JT/JT65.pdf[QEX]
:jtalert: http://hamapps.com/[JT-Alert] :jtalert: http://hamapps.com/[JTAlert]
:launchpadki7mt: https://launchpad.net/~ki7mt[KI7MT PPA's] :launchpadki7mt: https://launchpad.net/~ki7mt[KI7MT PPA's]
:log4om: http://www.log4om.com[Log4OM] :log4om: http://www.log4om.com[Log4OM]
:lunarEchoes: http://physics.princeton.edu/pulsar/K1JT/LunarEchoes_QEX.pdf[QEX] :lunarEchoes: http://physics.princeton.edu/pulsar/K1JT/LunarEchoes_QEX.pdf[QEX]

View File

@ -1,19 +1,21 @@
// Status=review // Status=review
The _WSJT_ project was started in 2001. Since 2005 it has been an The _WSJT_ project was started by *K1JT* in 2001. Since 2005 it has
Open Source project, and it now includes programs _WSJT_, _MAP65_, been an Open Source project, which now includes the programs _WSJT_,
_WSPR_, _WSJT-X_, and _WSPR-X_. All code is licensed under the _MAP65_, _WSPR_, _WSJT-X_, and _WSPR-X_. *G4WJS* (since 2013) and
GNU Public License (GPL). Many users of these programs, too numerous *K9AN* (since 2015) have made major contributions to _WSJT-X_.
to mention here individually, have contributed suggestions and advice Together with K1JT they now form the core development team.
that have greatly aided the development of _WSJT_ and its sister
programs.
For _WSJT-X_ in particular, we acknowledge contributions from *AC6SL, All code in the _WSJT_ project is licensed under the GNU Public
AE4JY, DJ0OT, G3WDG, G4KLA, G4WJS, IV3NWV, IW3RAB, K3WYC, K9AN, License (GPL). Many users of these programs, too numerous to mention
KA6MAL, KA9Q, KB1ZMX, KD6EKQ, KI7MT, KK1D, ND0B, PY2SDR, VE1SKY, VK3ACF, here individually, have contributed suggestions and advice that have
VK4BDJ, VK7MO, W4TI, W4TV, and W9MDB*. Each of these amateurs has helped to greatly aided the development of _WSJT_ and its sister programs. For
bring the programs design, code, testing, and/or documentation to _WSJT-X_ in particular, we acknowledge contributions from *AC6SL,
its present state. AE4JY, DJ0OT, G3WDG, G4KLA, IV3NWV, IW3RAB, K3WYC, KA6MAL, KA9Q,
KB1ZMX, KD6EKQ, KI7MT, KK1D, ND0B, PY2SDR, VE1SKY, VK3ACF, VK4BDJ,
VK7MO, W4TI, W4TV, and W9MDB*. Each of these amateurs has helped to
bring the programs design, code, testing, and/or documentation to its
present state.
Most of the color palettes for the _WSJT-X_ waterfall were copied from Most of the color palettes for the _WSJT-X_ waterfall were copied from
the excellent, well documented, open-source program _fldigi_, by *W1HKJ* the excellent, well documented, open-source program _fldigi_, by *W1HKJ*

View File

@ -1,4 +1,4 @@
// Status=review The following controls appear just under the decoded The following controls appear just under the decoded
text windows on the main screen. Some controls appear only in certain text windows on the main screen. Some controls appear only in certain
operating modes. operating modes.

View File

@ -20,11 +20,18 @@ image::file-menu.png[align="left",alt="File Menu"]
==== Configuration Menu ==== Configuration Menu
image::config-menu.png[align="left",alt="File Menu"] image::config-menu.png[align="left",alt="File Menu"]
Many users prefer to create and use entries on the *Configurations* Most users of more than one mode prefer to create and use entries on
menu for switching between modes. Simply *Clone* the *Default* entry, the *Configurations* menu for switching between modes. You can
*Rename* it as desired, and then make all desired settings for that *Clone* the configuration currently in use, *Rename* the clone as
configuration. These settings will be restored whenever you select desired, and then make all desired settings for the new configuration.
that configuration. The easiest way is to start with a working setup for some mode, say
*FT8*. *Clone* it, then select *Configurations | FT8 - Copy | Rename
...*, enter a new name, say *FT4*, and click *OK*. Then select the
new name from the *Configurations* menu and choose *Switch To*. When
the new configuration comes up you can change any desired settings:
for example, select *FT4* from the *Mode* menu. Configurations save
all settings that are normally restored after a program restart,
including which of the defined configurations is currently active.
As well as switching between configurations while running _WSJT-X_ you As well as switching between configurations while running _WSJT-X_ you
can also start the application from the command line in any desired can also start the application from the command line in any desired

View File

@ -98,5 +98,5 @@ color and line width for the plots.
Most windows can be resized as desired. If you are short of screen Most windows can be resized as desired. If you are short of screen
space you can make the Main Window and Wide Graph smaller by hiding space you can make the Main Window and Wide Graph smaller by hiding
some controls and labels. To enable this feature uncheck the box some controls and labels. To enable this feature uncheck the box
labales *Controls* at top left of the *Wide Graph* window, or the box labeled *Controls* at top left of the *Wide Graph* window, or the box
*Menus* to the right of the *Tune* button on the Main Window. *Menus* to the right of the *Tune* button on the Main Window.

View File

@ -26,7 +26,7 @@ hypothetically known information.
[[FT8_AP_INFO_TABLE]] [[FT8_AP_INFO_TABLE]]
.FT4 and FT8 AP information types .FT4 and FT8 AP information types
[width="35%",cols="h10,<m20",frame=topbot,options="header"] [width="50%",cols="h10,<m20",frame=topbot,options="header"]
|=============================================== |===============================================
|aP | Message components |aP | Message components
|a1 | CQ &#160; &#160; ? &#160; &#160; ? |a1 | CQ &#160; &#160; ? &#160; &#160; ?
@ -49,7 +49,7 @@ be attempted in each state.
[[FT8_AP_DECODING_TYPES_TABLE]] [[FT8_AP_DECODING_TYPES_TABLE]]
.FT4 and FT8 AP decoding types for each QSO state .FT4 and FT8 AP decoding types for each QSO state
[width="35%",cols="h10,<m20",frame=topbot,options="header"] [width="50%",cols="h10,<m20",frame=topbot,options="header"]
|=========================================== |===========================================
|State |AP type |State |AP type
|CALLING STN | 2, 3 |CALLING STN | 2, 3
@ -67,7 +67,7 @@ averaged to obtain the decode.
[[JT65_AP_INFO_TABLE]] [[JT65_AP_INFO_TABLE]]
.JT65 AP information types .JT65 AP information types
[width="35%",cols="h10,<m20",frame=topbot,options="header"] [width="50%",cols="h10,<m20",frame=topbot,options="header"]
|=============================================== |===============================================
|aP | Message components |aP | Message components
|a1 | CQ &#160; &#160; ? &#160; &#160; ? |a1 | CQ &#160; &#160; ? &#160; &#160; ?
@ -81,7 +81,7 @@ averaged to obtain the decode.
[[JT65_AP_DECODING_TYPES_TABLE]] [[JT65_AP_DECODING_TYPES_TABLE]]
.JT65 AP decoding types for each QSO state .JT65 AP decoding types for each QSO state
[width="35%",cols="h10,<m20",frame=topbot,options="header"] [width="50%",cols="h10,<m20",frame=topbot,options="header"]
|=========================================== |===========================================
|State |AP type |State |AP type
|CALLING STN | 2, 3, 6, 7 |CALLING STN | 2, 3, 6, 7
@ -140,7 +140,7 @@ Table 6 below shows the meaning of the return codes R in QRA64 mode.
[[QRA64_AP_INFO_TABLE]] [[QRA64_AP_INFO_TABLE]]
.QRA64 AP return codes .QRA64 AP return codes
[width="35%",cols="h10,<m20",frame=topbot,options="header"] [width="50%",cols="h10,<m20",frame=topbot,options="header"]
|=============================================== |===============================================
|rc | Message components |rc | Message components
|0 | ? &#160; &#160; ? &#160; &#160; ? |0 | ? &#160; &#160; ? &#160; &#160; ?

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View File

@ -3,7 +3,7 @@
Debian, Ubuntu, and other Debian-based systems including Raspbian: Debian, Ubuntu, and other Debian-based systems including Raspbian:
NOTE: The project team release binary installer packages for Linux NOTE: The project team release binary installer packages for Linux
when a new _WSJT-X_ release is announced, note that these are built to when a new _WSJT-X_ release is announced. These are built to
target one contemporary version of a Linux distribution. Although target one contemporary version of a Linux distribution. Although
these may work on newer Linux versions or even different these may work on newer Linux versions or even different
distributions, it is unlikely that they will work on older distributions, it is unlikely that they will work on older

View File

@ -1,6 +1,6 @@
// These instructions are up-to-date for WSJT-X v1.9 // These instructions are up-to-date for WSJT-X v2.2
*OS X 10.10* and later: Download the file {osx} to your desktop, *OS X 10.13* and later: Download the file {osx} to your desktop,
double-click on it and consult its `ReadMe` file for important double-click on it and consult its `ReadMe` file for important
installation notes. installation notes.

View File

@ -30,20 +30,22 @@ TIP: Your computer may be configured so that this directory is
[[OPENSSL]] [[OPENSSL]]
* image:LoTW_TLS_error.png[_WSJT-X_ LoTW download TLS error, * _WSJT-X_ requires the _OpenSSL_ libraries to be installed, and
role="right"] _WSJT-X_ requires the _OpenSSL_ libraries to be suitable libraries may already be installed on your system. If they
installed. Suitable libraries may already be installed on your are not you will see this error shortly after requesting a fetch of
system, if they are not you will see this error shortly after the latest LoTW users database. To fix this you need to install the
requesting a fetch of the latest LoTW users database. To fix this _OpenSSL_ libraries.
you need to install the _OpenSSL_ libraries.
** You can download a suitable _OpenSSL_ package for from image::LoTW_TLS_error.png[align="center"]
{win_openssl_packages}, you need the latest *Windows Light*
* You can download a suitable _OpenSSL_ package from
{win_openssl_packages}. You need the latest *Windows Light*
version. For the 32-bit _WSJT-X_ build use the latest Win32 v1.1.x version. For the 32-bit _WSJT-X_ build use the latest Win32 v1.1.x
version of the _OpenSSL_ libraries, for the 64-bit _WSJT-X_ use the version of the _OpenSSL_ libraries, for the 64-bit _WSJT-X_ use the
latest Win64 v1.1.x version of the _OpenSSL_ libraries (Note it is latest Win64 v1.1.x version of the _OpenSSL_ libraries which at the
OK to install both versions on a 64-bit system) which at the time time of writing were {win32_openssl} and {win64_openssl}. It is OK
of writing were {win32_openssl} and {win64_openssl} respectively. to install both versions on a 64-bit system.
** Install the package and accept the default options, including the ** Install the package and accept the default options, including the
option to copy the _OpenSSL_ DLLs to the Windows system option to copy the _OpenSSL_ DLLs to the Windows system

View File

@ -6,7 +6,7 @@ the program name stand for "`**W**eak **S**ignal communication by
K1**JT**,`" while the suffix "`-X`" indicates that _WSJT-X_ started as K1**JT**,`" while the suffix "`-X`" indicates that _WSJT-X_ started as
an e**Xt**ended and e**X**perimental branch of the program _WSJT_, an e**Xt**ended and e**X**perimental branch of the program _WSJT_,
first released in 2001. Bill Somerville, G4WJS, and Steve Franke, first released in 2001. Bill Somerville, G4WJS, and Steve Franke,
K9AN, have been major contibutors to program development since 2013 K9AN, have been major contributors to program development since 2013
and 2015, respectively. and 2015, respectively.
_WSJT-X_ Version {VERSION_MAJOR}.{VERSION_MINOR} offers ten different _WSJT-X_ Version {VERSION_MAJOR}.{VERSION_MINOR} offers ten different
@ -16,15 +16,14 @@ making reliable QSOs under weak-signal conditions. They use nearly
identical message structure and source encoding. JT65 and QRA64 were identical message structure and source encoding. JT65 and QRA64 were
designed for EME ("`moonbounce`") on the VHF/UHF bands and have also designed for EME ("`moonbounce`") on the VHF/UHF bands and have also
proven very effective for worldwide QRP communication on the HF bands. proven very effective for worldwide QRP communication on the HF bands.
QRA64 has a number of advantages over JT65, including better QRA64 has a some advantages over JT65, including better performance
performance on the very weakest signals. We imagine that over time it for EME on the higher microwave bands. JT9 was originally designed
may replace JT65 for EME use. JT9 was originally designed for the LF, for the LF, MF, and lower HF bands. Its submode JT9A is 2 dB more
MF, and lower HF bands. Its submode JT9A is 2 dB more sensitive than sensitive than JT65 while using less than 10% of the bandwidth. JT4
JT65 while using less than 10% of the bandwidth. JT4 offers a wide offers a wide variety of tone spacings and has proven highly effective
variety of tone spacings and has proven highly effective for EME on for EME on microwave bands up to 24 GHz. These four "`slow`" modes
microwave bands up to 24 GHz. These four "`slow`" modes use use one-minute timed sequences of alternating transmission and
one-minute timed sequences of alternating transmission and reception, reception, so a minimal QSO takes four to six minutes — two or three
so a minimal QSO takes four to six minutes — two or three
transmissions by each station, one sending in odd UTC minutes and the transmissions by each station, one sending in odd UTC minutes and the
other even. FT8 is operationally similar but four times faster other even. FT8 is operationally similar but four times faster
(15-second T/R sequences) and less sensitive by a few dB. FT4 is (15-second T/R sequences) and less sensitive by a few dB. FT4 is

View File

@ -35,9 +35,7 @@ from another logging program. Turning *Show DXCC entity and worked
before status* off and then on again will cause _WSJT-X_ to re-read before status* off and then on again will cause _WSJT-X_ to re-read
the log file. Very large log files may cause _WSJT-X_ to slow down the log file. Very large log files may cause _WSJT-X_ to slow down
when searching for calls. If the ADIF log file has been changed when searching for calls. If the ADIF log file has been changed
outside of _WSJT-X_ you can force _WSJT-X_ to relaod the file from the outside of _WSJT-X_ you can force _WSJT-X_ to reload the file from the
*Settings | Colors* tab using the *Rescan ADIF Log* button, see *Settings | Colors* tab using the *Rescan ADIF Log* button, see
<<COLORS,Decode Highlighting>>. <<COLORS,Decode Highlighting>>.
Additional features are provided for *Contest* and *Fox* logging.
(more to come, here ...)

View File

@ -93,7 +93,7 @@ tab. Model QSOs then proceed as follows, for each event type:
*NA VHF Contest* *NA VHF Contest*
CQ K1ABC FN42 CQ TEST K1ABC FN42
K1ABC W9XYZ EN37 K1ABC W9XYZ EN37
W9XYZ K1ABC R FN42 W9XYZ K1ABC R FN42
K1ABC W9XYZ RRR K1ABC W9XYZ RRR
@ -134,7 +134,7 @@ to upgrade _WSJT-X_ if you will use *EU VHF Contest* messages.
*WW Digi Contest* *WW Digi Contest*
CQ K1ABC FN42 CQ WW K1ABC FN42
K1ABC S52XYZ JN76 K1ABC S52XYZ JN76
S52XYZ K1ABC R FN42 S52XYZ K1ABC R FN42
K1ABC S52XYZ RR73 K1ABC S52XYZ RR73

View File

@ -104,9 +104,9 @@ shape of your receiver's passband. Disconnect your antenna or tune to
a quiet frequency with no signals. With _WSJT-X_ running in one of a quiet frequency with no signals. With _WSJT-X_ running in one of
the slow modes, select *Measure reference spectrum* from the *Tools* the slow modes, select *Measure reference spectrum* from the *Tools*
menu. Wait for about a minute and then hit the *Stop* button. A file menu. Wait for about a minute and then hit the *Stop* button. A file
named `refspec.dat` will appear in your log directory. named `refspec.dat` will appear in your log directory. When you check
*Ref Spec* on the *Wide Graph*, the recorded reference spectrum will
[ ... more to come ... ] then be used to flatten your overall effective passband.
=== Phase Equalization === Phase Equalization

View File

@ -48,7 +48,7 @@ Tx3 messages -- those conveying signal report, serial number, and
6-character locator -- now use hashcodes for both callsigns. This 6-character locator -- now use hashcodes for both callsigns. This
change is *not* backward compatible with earlier versions of _WSJT-X_, so change is *not* backward compatible with earlier versions of _WSJT-X_, so
all users of *EU VHF Contest* messages should be sure to upgrade to all users of *EU VHF Contest* messages should be sure to upgrade to
versiion 2.2.0. See <<CONTEST_MSGS,Contest Messages>> for details. version 2.2.0. See <<CONTEST_MSGS,Contest Messages>> for details.
*Minor enhancements and bug fixes* *Minor enhancements and bug fixes*
@ -83,14 +83,25 @@ overlooked.
IMPORTANT: *Warnings* about usage that could lead to undesired IMPORTANT: *Warnings* about usage that could lead to undesired
consequences. consequences.
=== User Interface in Other Languages
Thanks to Xavi Perez, EA3W, in cooperation with G4WJS, the _WSJT-X_
user interface is now available the Catalan language. Spanish will
follow soon, and other languages when translations are made. When a
translated user interface is available for the computer's default
System Language, it will appear automatically on program startup.
=== How You Can Contribute === How You Can Contribute
_WSJT-X_ is part of an open-source project released under the _WSJT-X_ is part of an open-source project released under the
{gnu_gpl} (GPLv3). If you have programming or documentation skills or {gnu_gpl} (GPLv3). If you have programming or documentation skills or
would like to contribute to the project in other ways, please make would like to contribute to the project in other ways, please make
your interests known to the development team. The project's your interests known to the development team. We especially encourage
source-code repository can be found at {devrepo}, and communication those with translation skills to volunteer their help, either for
among the developers takes place on the email reflector {devmail}. this _User Guide_ or for the program's user interface.
Bug reports and suggestions for new features, improvements to the
_WSJT-X_ User Guide, etc., may be sent there as well. You must join The project's source-code repository can be found at {devrepo}, and
the group before posting to the email list. communication among the developers takes place on the email reflector
{devmail}. Bug reports and suggestions for new features, improvements
to the _WSJT-X_ User Guide, etc., may be sent there as well. You must
join the group before posting to the email list.

View File

@ -3,7 +3,8 @@
A few _WSJT-X_ features behave differently in Windows, Linux, or OS X, A few _WSJT-X_ features behave differently in Windows, Linux, or OS X,
or may not be relevant to all operating platforms. or may not be relevant to all operating platforms.
.File locations === File locations
* *Windows* * *Windows*
- *Settings:* %LOCALAPPDATA%\WSJT-X\WSJT-X.ini - *Settings:* %LOCALAPPDATA%\WSJT-X\WSJT-X.ini

View File

@ -52,10 +52,10 @@ were the callsigns `E9AA` through `E9ZZ`. Upon reception they are
converted back to the form `CQ AA` through `CQ ZZ`, for display to the converted back to the form `CQ AA` through `CQ ZZ`, for display to the
user. user.
The new FT4, FT8, and MSK144 protocols use a different lossless The FT4, FT8, and MSK144 protocols use different lossless compression
compression algorithm with features to generate and recognize the algorithms with features that generate and recognize special messages
special messages used for contesting and the like. (More to come, used for contesting and other special purposes. Full details have
here ...) been published in QEX, see {ft4_ft8_protocols}.
To be useful on channels with low signal-to-noise ratio, this kind of To be useful on channels with low signal-to-noise ratio, this kind of
lossless message compression requires use of a strong forward error lossless message compression requires use of a strong forward error

View File

@ -1,6 +1,6 @@
image::settings-advanced.png[align="center",alt="Settings Advanced"] image::settings-advanced.png[align="center",alt="Settings Advanced"]
_JT65 decoding parameters_ _JT65 VHF/UHF/Microwave decoding parameters_
- *Random erasure patterns* logarithmically scales the number of - *Random erasure patterns* logarithmically scales the number of
pseudo-random trials used by the Franke-Taylor JT65 decoder. Larger pseudo-random trials used by the Franke-Taylor JT65 decoder. Larger

View File

@ -1,9 +1,9 @@
// Status=review // Status=review
image::settings-audio.png[align="center",alt="_WSJT-X_ Audio Configuration Screen"]
Select the *Audio* tab to configure your sound system. Select the *Audio* tab to configure your sound system.
image::settings-audio.png[align="center",alt="_WSJT-X_ Audio Configuration Screen"]
* _Soundcard_: Select the audio devices to be used for *Input* and * _Soundcard_: Select the audio devices to be used for *Input* and
*Output*. Usually the *Mono* settings will suffice, but in special *Output*. Usually the *Mono* settings will suffice, but in special
cases you can choose *Left*, *Right*, or *Both* stereo channels. cases you can choose *Left*, *Right*, or *Both* stereo channels.
@ -19,7 +19,7 @@ to prevent inadvertently transmitting them over the air.
+ +
NOTE: Windows Vista and later may configure audio devices using NOTE: Windows 7 and later may configure audio devices using
the Texas Instruments PCM2900 series CODEC for microphone input rather the Texas Instruments PCM2900 series CODEC for microphone input rather
line input. (This chip is used in many radios with built-in USB line input. (This chip is used in many radios with built-in USB
CODECs, as well as various other audio interfaces.) If you are using CODECs, as well as various other audio interfaces.) If you are using

View File

@ -1,12 +1,13 @@
// Status=review // Status=review
[[FIG_BAND_SETTINGS]] [[FIG_BAND_SETTINGS]]
image::settings-frequencies.png[align="center",alt="Frequency Screen"]
_Working Frequencies_: By default, the *Working Frequencies* table _By default, the *Working Frequencies* table contains a list of
contains a list of frequencies conventionally used for modes FT8, JT4, frequencies conventionally used for modes FT8, JT4, JT9, JT65, MSK144,
JT9, JT65, MSK144, WSPR, and Echo. Conventions may change with time WSPR, and Echo. Conventions may change with time or by user
or by user preference; you can modify the frequency table as desired. preference; you can modify the frequency table as desired.
image::settings-frequencies.png[align="center",alt="Frequency Screen"]
- To change an existing entry, double-click to edit it, type a desired - To change an existing entry, double-click to edit it, type a desired
frequency in MHz or select from the drop down list of options, then frequency in MHz or select from the drop down list of options, then

View File

@ -1,6 +1,5 @@
// Status=review // Status=review
[[FIG_CONFIG_STATION]] [[FIG_CONFIG_STATION]]
image::settings-general.png[align="center",alt="Settings Window"]
Select the *General* tab on the *Settings* window. Under _Station Select the *General* tab on the *Settings* window. Under _Station
Details_ enter your callsign, grid locator (preferably the 6-character Details_ enter your callsign, grid locator (preferably the 6-character
@ -9,6 +8,8 @@ Middle East, and Northern Asia; Region 2 the Americas; and Region 3
Southern Asia and the Pacific. This information will be sufficient Southern Asia and the Pacific. This information will be sufficient
for initial tests. for initial tests.
image::settings-general.png[align="center",alt="Settings Window"]
Meanings of remaining options on the *General* tab should be Meanings of remaining options on the *General* tab should be
self-explanatory after you have made some QSOs using _WSJT-X_. You self-explanatory after you have made some QSOs using _WSJT-X_. You
may return to set these options to your preferences later. may return to set these options to your preferences later.

View File

@ -1,11 +1,11 @@
// Status=review // Status=review
image::RadioTab.png[align="center",alt="Radio Tab"]
_WSJT-X_ offers CAT (Computer Aided Transceiver) control of relevant _WSJT-X_ offers CAT (Computer Aided Transceiver) control of relevant
features of most modern transceivers. To configure the program for features of most modern transceivers. To configure the program for
your radio, select the *Radio* tab. your radio, select the *Radio* tab.
image::RadioTab.png[align="center",alt="Radio Tab"]
* Select your radio type from the drop-down list labeled *Rig*, or * Select your radio type from the drop-down list labeled *Rig*, or
*None* if you do not wish to use CAT control. *None* if you do not wish to use CAT control.
@ -26,8 +26,6 @@ your radio, select the *Radio* tab.
+ +
NOTE: _Omni-Rig_ is available only under Windows.
* Set *Poll Interval* to the desired interval for _WSJT-X_ to query * Set *Poll Interval* to the desired interval for _WSJT-X_ to query
your radio. For most radios a small number (say, 1 3 s) is your radio. For most radios a small number (say, 1 3 s) is
suitable. suitable.

View File

@ -1,11 +1,12 @@
// Status=review // Status=review
[[FigTxMacros]] [[FigTxMacros]]
image::tx-macros.png[align="center",alt="Tx Macros Screen"]
*Tx Macros* are an aid for sending brief, frequently used free-text *Tx Macros* are an aid for sending brief, frequently used free-text
messages such as the examples shown above. messages such as the examples shown above.
image::tx-macros.png[align="center",alt="Tx Macros Screen"]
- To add a new message to the list, enter the desired text (up to 13 - To add a new message to the list, enter the desired text (up to 13
characters) in the entry field at top, then click *Add*. characters) in the entry field at top, then click *Add*.

View File

@ -39,12 +39,6 @@ TIP: The PC audio mixer normally has two sliders, one for each
frequency setting, on HF bands you can display the full sub-band frequency setting, on HF bands you can display the full sub-band
generally used for one mode. generally used for one mode.
- Of course, you might prefer to concentrate on one mode at a time,
setting your dial frequency to (say) 14.074 for FT8, 14.076 for
JT65, or 14.078 for JT9. Present conventions have the nominal JT9
dial frequency 2 kHz higher than the JT65 dial frequency on most
bands, and the FT8 frequency 2 kHz lower.
.Transmitter Audio Level .Transmitter Audio Level
* Click the *Tune* button on the main screen to switch the radio into * Click the *Tune* button on the main screen to switch the radio into

View File

@ -1,14 +1,13 @@
// Status=review // Status=review
.Main Window: .Main Window:
- Select *FT8* on the *Mode* menu. - Select *FT8* on the *Mode* menu.
- Set Tx frequency to 1600 Hz, Rx to 1442 Hz.
- Double-click on *Erase* to clear both text windows. - Double-click on *Erase* to clear both text windows.
.Wide Graph Settings: .Wide Graph Settings:
- *Bins/Pixel* = 4, *Start* = 200 Hz, *N Avg* = 2 - *Bins/Pixel* = 5, *Start* = 100 Hz, *N Avg* = 2
- Adjust the width of the Wide Graph window so that the upper - Adjust the width of the Wide Graph window so that the upper
frequency limit is approximately 2600 Hz. frequency limit is approximately 3300 Hz.
.Open a Wave File: .Open a Wave File:
@ -31,7 +30,7 @@ frequency control on the main window will be updated accordingly.
frequency marker and its associated control on the main window will frequency marker and its associated control on the main window will
follow your frequency selections. follow your frequency selections.
- Do the same thing with the *Ctrl* key held down. Now the both colored - Do the same thing with the *Ctrl* key held down. Now both colored
markers and both spinner controls will follow your selections. markers and both spinner controls will follow your selections.
- Double-clicking at any frequency on the waterfall does all the - Double-clicking at any frequency on the waterfall does all the
@ -45,7 +44,7 @@ Rx frequency to that of the selected message and leaving Tx frequency
unchanged. To change both Rx and Tx frequencies, hold *Ctrl* down unchanged. To change both Rx and Tx frequencies, hold *Ctrl* down
when double-clicking. when double-clicking.
TIP: To avoid QRM from competing callers, it is frequently desirable TIP: To avoid QRM from competing callers, it is usually best
to answer a CQ on a different frequency from that of the CQing to answer a CQ on a different frequency from that of the CQing
station. The same is true when you tail-end another QSO. Choose a Tx station. The same is true when you tail-end another QSO. Choose a Tx
frequency that appears to be not in use. You might want to check the frequency that appears to be not in use. You might want to check the
@ -54,7 +53,7 @@ box *Hold Tx Freq*.
TIP: Keyboard shortcuts *Shift+F11* and *Shift+F12* provide an easy TIP: Keyboard shortcuts *Shift+F11* and *Shift+F12* provide an easy
way to move your Tx frequency down or up in 60 Hz steps. way to move your Tx frequency down or up in 60 Hz steps.
TIP: An online {ft8_tips} by ZL2IFB offers many helpful tips on TIP: An online {ft8_tips} by ZL2IFB offers many additional tips on
operating procedures. operating procedures.
.FT8 DXpedition Mode: .FT8 DXpedition Mode:

View File

@ -1,6 +1,7 @@
FT4 is designed for contesting, particularly on the HF bands. FT4 is designed for contesting, particularly on the HF bands and 6
Compared with FT8 it is 3.5 dB less sensitive and requires 1.6 times meters. Compared with FT8 it is 3.5 dB less sensitive and requires
the bandwidth, but it offers the potential for twice the QSO rate. 1.6 times the bandwidth, but it offers the potential for twice the QSO
rate.
.Main Window: .Main Window:
- Select *FT4* on the *Mode* menu. - Select *FT4* on the *Mode* menu.
@ -8,14 +9,14 @@ the bandwidth, but it offers the potential for twice the QSO rate.
.Wide Graph Settings: .Wide Graph Settings:
- *Bins/Pixel* = 7, *Start* = 100 Hz, *N Avg* = 1 - *Bins/Pixel* = 5, *Start* = 100 Hz, *N Avg* = 1
- Adjust the width of the Wide Graph window so that the upper - Adjust the width of the Wide Graph window so that the upper
frequency limit is approximately 4000 Hz. frequency limit is approximately 3300 Hz.
.Open a Wave File: .Open a Wave File:
- Select *File | Open* and navigate to - Select *File | Open* and navigate to
+...\save\samples\FT4\000000_000002.wav+. The waterfall and Band +...\save\samples\FT4\200514_182053.wav+. The waterfall and Band
Activity window should look something like the following screen shots. Activity window should look something like the following screen shots.
This sample file was recorded during a practice contest test session, so This sample file was recorded during a practice contest test session, so
most of the decoded messages use the *RTTY Roundup* message formats. most of the decoded messages use the *RTTY Roundup* message formats.

View File

@ -343,7 +343,7 @@ MHz. On higher microwave bands typical choices are JT65C or one of
the wider QRA64 or JT4 submodes, depending on the expected amount of the wider QRA64 or JT4 submodes, depending on the expected amount of
Doppler spread. JT4 and JT65 offer message *Averaging* -- the Doppler spread. JT4 and JT65 offer message *Averaging* -- the
summation of subsequent transmissions that convey the same message -- summation of subsequent transmissions that convey the same message --
to enable decodes at signal-to-noise ratios several dB below below the to enable decodes at signal-to-noise ratios several dB below the
threshold for single transmissions. These modes also allow *Deep threshold for single transmissions. These modes also allow *Deep
Search* decoding, in which the decoder hypothesizes messages Search* decoding, in which the decoder hypothesizes messages
containing known or previously decoded callsigns and tests them for containing known or previously decoded callsigns and tests them for
@ -412,7 +412,7 @@ image::EME_Deep_1.png[align="center",alt="EME_Deep_1"]
The message `CQ K1ABC FN42` appears in the _Average Decodes_ panel, The message `CQ K1ABC FN42` appears in the _Average Decodes_ panel,
flagged with the <<Decoded_Lines,end-of line label>> `f3`. The label flagged with the <<Decoded_Lines,end-of line label>> `f3`. The label
means that decoding was accomplished with the Franke-Taylor means that decoding was accomplished with the Franke-Taylor
algorithm, using the average or 3 transmissions. algorithm, using the average of 3 transmissions.
The _Message Averaging_ window now looks like this: The _Message Averaging_ window now looks like this:
@ -436,4 +436,6 @@ Decoding>>), and is based on the average of 2 transmissions.
You might wish to experiment with other combinations of entries for You might wish to experiment with other combinations of entries for
*My Call*, *DX Call*, and *DX Grid*, and with toggling the various *My Call*, *DX Call*, and *DX Grid*, and with toggling the various
options of the *Decode* menu on and off. options of the *Decode* menu on and off. For best sensitivity, most
users will want to use *Deep* decoding with *Enable averaging*,
*Enable deep search*, and *Enable AP* all turned on.

View File

@ -68,8 +68,7 @@ include::install-from-source.adoc[]
Select *Settings* from the *File* menu or by typing *F2*. (On Select *Settings* from the *File* menu or by typing *F2*. (On
Macintosh select *Preferences* from the _WSJT-X_ menu, or use the Macintosh select *Preferences* from the _WSJT-X_ menu, or use the
keyboard shortcut *Cmd+,*). The following sections describe setup keyboard shortcut *Cmd+,*). The following sections describe setup
options available on each of eight tabs selectable near the top of the options available on eight tabs selectable near the top of the window.
window.
[[GENERAL]] [[GENERAL]]
=== General === General
@ -103,6 +102,25 @@ include::settings-colors.adoc[]
=== Advanced === Advanced
include::settings-advanced.adoc[] include::settings-advanced.adoc[]
[[DARK_STYLE]]
=== Dark Style
An optional *Dark* style is available. To make it effective you will
probably want to redefine your color settings. In Windows or Linux,
start the program from a command-prompt window using the following
command, or modify the _WSJT-X_ desktop shortcut accordingly:
wsjtx --stylesheet :/qdarkstyle/style.qss
In macOS, enter the following command from a terminal:
open /Applications/wsjtx.app --args -stylesheet :/qdarkstyle/style.qss
Depending on your operating system, the main _WSJT-X_ window will look
something like this:
image::Windows_Dark.png[align="center"]
[[TRANSCEIVER]] [[TRANSCEIVER]]
== Transceiver Setup == Transceiver Setup
include::transceiver-setup.adoc[] include::transceiver-setup.adoc[]

View File

@ -533,7 +533,12 @@ subroutine unpack77(c77,nrx,msg,unpk77_success)
! EU VHF contest ! EU VHF contest
read(c77,1060) n12,n22,ir,irpt,iserial,igrid6 read(c77,1060) n12,n22,ir,irpt,iserial,igrid6
1060 format(b12,b22,b1,b3,b11,b25) 1060 format(b12,b22,b1,b3,b11,b25)
if(igrid6.lt.0 .or. igrid6.gt.18662399) then
unpk77_success=.false.
return
endif
call hash12(n12,call_1) call hash12(n12,call_1)
if(n12.eq.hashmy12) call_1='<'//trim(mycall13)//'>'
call hash22(n22,call_2) call hash22(n22,call_2)
nrs=52+irpt nrs=52+irpt
write(cexch,1022) nrs,iserial write(cexch,1022) nrs,iserial
@ -545,7 +550,7 @@ subroutine unpack77(c77,nrx,msg,unpk77_success)
else if(i3.ge.6) then ! i3 values 6 and 7 are not yet defined else if(i3.ge.6) then ! i3 values 6 and 7 are not yet defined
unpk77_success=.false. unpk77_success=.false.
endif endif
! if(msg(1:4).eq.'CQ <') unpk77_success=.false. if(msg(1:4).eq.'CQ <') unpk77_success=.false.
return return
end subroutine unpack77 end subroutine unpack77
@ -1157,6 +1162,7 @@ subroutine pack77_3(nwords,w,i3,n3,c77)
"NB ","NS ","QC ","ON ","MB ","SK ","AB ","BC ","NWT","NF ", & "NB ","NS ","QC ","ON ","MB ","SK ","AB ","BC ","NWT","NF ", &
"LB ","NU ","YT ","PEI","DC "/ "LB ","NU ","YT ","PEI","DC "/
if(w(1)(1:1).eq.'<' .and. w(2)(1:1).eq.'<') go to 900
if(nwords.eq.4 .or. nwords.eq.5 .or. nwords.eq.6) then if(nwords.eq.4 .or. nwords.eq.5 .or. nwords.eq.6) then
i1=1 i1=1
if(trim(w(1)).eq.'TU;') i1=2 if(trim(w(1)).eq.'TU;') i1=2

View File

@ -87,6 +87,9 @@ contains
this%callback => callback this%callback => callback
hhmmss=cdatetime0(8:13) hhmmss=cdatetime0(8:13)
dxcall13=hiscall ! initialize for use in packjt77
mycall13=mycall
smax1=0. smax1=0.
nd1=0 nd1=0

View File

@ -7,12 +7,10 @@ subroutine encode174_91_nocrc(message,codeword)
use crc use crc
integer, parameter:: N=174, K=91, M=N-K integer, parameter:: N=174, K=91, M=N-K
character*91 tmpchar
integer*1 codeword(N) integer*1 codeword(N)
integer*1 gen(M,K) integer*1 gen(M,K)
integer*1 message(K) integer*1 message(K)
integer*1 pchecks(M) integer*1 pchecks(M)
integer*1, target :: i1MsgBytes(12)
include "ldpc_174_91_c_generator.f90" include "ldpc_174_91_c_generator.f90"
logical first logical first
data first/.true./ data first/.true./

View File

@ -454,7 +454,7 @@ subroutine ft8b(dd0,newdat,nQSOProgress,nfqso,nftx,ndepth,nzhsym,lapon, &
if(.not.nagain) then if(.not.nagain) then
xsnr=xsnr2 xsnr=xsnr2
endif endif
if(nsync.le.7 .and. xsnr.lt.-24.0) then !bail out, likely false decode if(nsync.le.10 .and. xsnr.lt.-24.0) then !bail out, likely false decode
nbadcrc=1 nbadcrc=1
return return
endif endif

View File

@ -167,7 +167,7 @@ subroutine osd174_91(llr,k,apmask,ndeep,message91,cw,nhardmin,dmin)
nt=40 nt=40
ntheta=12 ntheta=12
ntau=15 ntau=15
elseif(ndeep.eq.6) then else !ndeep=6
nord=4 nord=4
npre1=1 npre1=1
npre2=1 npre2=1

View File

@ -61,6 +61,7 @@ program jt49sim
nsym=0 nsym=0
dnsps=0. dnsps=0.
baud=0. baud=0.
sig=0.
if(imode.eq.4) then if(imode.eq.4) then
nsym=206 !Number of channel symbols (JT4) nsym=206 !Number of channel symbols (JT4)

View File

@ -124,12 +124,12 @@ subroutine refspectrum(id2,bclear,brefspec,buseref,fname)
if(buseref) then if(buseref) then
if(blastuse.neqv.buseref) then !just enabled so read filter if(blastuse.neqv.buseref) then !just enabled so read filter
fil=1.0 fil=1.0
open(16,file=fname,status='old',err=110) open(16,file=fname,status='old',err=999)
read(16,1003,err=20,end=100) ndummy,ndummy,nterms,a read(16,1003,err=20,end=999) ndummy,ndummy,nterms,a
goto 30 goto 30
20 rewind(16) !allow for old style refspec.dat with no header 20 rewind(16) !allow for old style refspec.dat with no header
30 do i=1,NH 30 do i=1,NH
read(16,1005,err=100,end=100) freq,s(i),ref(i),fil(i),filter(i) read(16,1005,err=999,end=999) freq,s(i),ref(i),fil(i),filter(i)
enddo enddo
! Make the filter causal for overlap and add. ! Make the filter causal for overlap and add.
cx(0)=0.0 cx(0)=0.0
@ -139,8 +139,7 @@ subroutine refspectrum(id2,bclear,brefspec,buseref,fname)
x(800:NH)=0.0 x(800:NH)=0.0
call four2a(cx,NFFT,1,-1,0) call four2a(cx,NFFT,1,-1,0)
cfil=cx cfil=cx
100 close(16) close(16)
110 continue
endif endif
! Use overlap and add method to apply causal reference filter. ! Use overlap and add method to apply causal reference filter.
x(0:NH-1)=id2(1:NH) x(0:NH-1)=id2(1:NH)
@ -155,5 +154,5 @@ subroutine refspectrum(id2,bclear,brefspec,buseref,fname)
endif endif
blastuse=buseref blastuse=buseref
return 999 return
end subroutine refspectrum end subroutine refspectrum

View File

@ -243,7 +243,7 @@ int floatcomp(const void* elem1, const void* elem2)
int unpk_(signed char *message, char *hashtab, char *loctab, char *call_loc_pow, char *callsign) int unpk_(signed char *message, char *hashtab, char *loctab, char *call_loc_pow, char *callsign)
{ {
int n1,n2,n3,ndbm,ihash,nadd,noprint=0; int n1,n2,n3,ndbm,ihash,nadd,noprint=0;
char grid[5],grid6[7],cdbm[3]; char grid[5],grid6[7],cdbm[4];
unpack50(message,&n1,&n2); unpack50(message,&n1,&n2);
if( !unpackcall(n1,callsign) ) return 1; if( !unpackcall(n1,callsign) ) return 1;

148
main.cpp
View File

@ -107,10 +107,23 @@ int main(int argc, char *argv[])
ExceptionCatchingApplication a(argc, argv); ExceptionCatchingApplication a(argc, argv);
try try
{ {
QLocale locale; // get the current system locale
qDebug () << "locale: language:" << locale.language () << "script:" << locale.script ()
<< "country:" << locale.country () << "ui-languages:" << locale.uiLanguages ();
setlocale (LC_NUMERIC, "C"); // ensure number forms are in
// consistent format, do this after
// instantiating QApplication so
// that GUI has correct l18n
// Override programs executable basename as application name.
a.setApplicationName ("WSJT-X");
a.setApplicationVersion (version ());
// //
// Enable i18n // Enable base i18n
// //
QTranslator translator_from_resources; QTranslator translator_from_resources;
QTranslator base_translator_from_resources;
// Default translations for releases use translations stored in // Default translations for releases use translations stored in
// the resources file system under the Translations // the resources file system under the Translations
// directory. These are built by the CMake build system from .ts // directory. These are built by the CMake build system from .ts
@ -121,28 +134,25 @@ int main(int argc, char *argv[])
// translations but should only be set when adding new // translations but should only be set when adding new
// languages. The resulting .ts files should be checked info // languages. The resulting .ts files should be checked info
// source control for translators to access and update. // source control for translators to access and update.
translator_from_resources.load (QLocale::system (), "wsjtx", "_", ":/Translations");
// try and load the base translation
for (QString locale_name : locale.uiLanguages ())
{
auto language = locale_name.left (2);
if (base_translator_from_resources.load ("wsjtx_" + language, ":/Translations"))
{
qDebug () << QString {"Loaded base translation file from :/Translations based on language %1"}.arg (language);
a.installTranslator (&base_translator_from_resources);
break;
}
}
// now try and load the most specific translations (may be a
// duplicate but we shouldn't care)
if (translator_from_resources.load (locale, "wsjtx", "_", ":/Translations"))
{
qDebug () << "Loaded translations for current locale from resources";
a.installTranslator (&translator_from_resources); a.installTranslator (&translator_from_resources);
}
QTranslator translator_from_files;
// Load any matching translation from the current directory
// using the locale name. This allows translators to easily test
// their translations by releasing (lrelease) a .qm file into
// the current directory with a suitable name
// (e.g. wsjtx_en_GB.qm), then running wsjtx to view the
// results. Either the system locale setting or the environment
// variable LANG can be used to select the target language.
translator_from_files.load (QString {"wsjtx_"} + QLocale::system ().name ());
a.installTranslator (&translator_from_files);
setlocale (LC_NUMERIC, "C"); // ensure number forms are in
// consistent format, do this after
// instantiating QApplication so
// that GUI has correct l18n
// Override programs executable basename as application name.
a.setApplicationName ("WSJT-X");
a.setApplicationVersion (version ());
QCommandLineParser parser; QCommandLineParser parser;
parser.setApplicationDescription ("\n" PROJECT_SUMMARY_DESCRIPTION); parser.setApplicationDescription ("\n" PROJECT_SUMMARY_DESCRIPTION);
@ -161,6 +171,12 @@ int main(int argc, char *argv[])
, a.translate ("main", "configuration")); , a.translate ("main", "configuration"));
parser.addOption (cfg_option); parser.addOption (cfg_option);
// support for UI language override (useful on Windows)
QCommandLineOption lang_option (QStringList {} << "l" << "language"
, a.translate ("main", "Where <language> is <lang-code>[-<country-code>].")
, a.translate ("main", "language"));
parser.addOption (lang_option);
QCommandLineOption test_option (QStringList {} << "test-mode" QCommandLineOption test_option (QStringList {} << "test-mode"
, a.translate ("main", "Writable files in test location. Use with caution, for testing only.")); , a.translate ("main", "Writable files in test location. Use with caution, for testing only."));
parser.addOption (test_option); parser.addOption (test_option);
@ -184,6 +200,94 @@ int main(int argc, char *argv[])
} }
} }
//
// Complete i18n
//
QTranslator translation_override_from_resources;
QTranslator base_translation_override_from_resources;
// Load any matching translation from the current directory
// using the command line option language override. This allows
// translators to easily test their translations by releasing
// (lrelease) a .qm file into the current directory with a
// suitable name (e.g. wsjtx_en_GB.qm), then running wsjtx to
// view the results.
if (parser.isSet (lang_option))
{
auto language = parser.value (lang_option).replace ('-', '_');
// try and load the base translation
auto base_language = language.left (2);
if (base_translation_override_from_resources.load ("wsjtx_" + base_language, ":/Translations"))
{
qDebug () << QString {"Loaded base translation file from :/Translations based on language %1"}.arg (base_language);
a.installTranslator (&base_translation_override_from_resources);
}
// now load the requested translations (may be a duplicate
// but we shouldn't care)
if (translation_override_from_resources.load ("wsjtx_" + language , ":/Translations"))
{
qDebug () << QString {"Loaded translation file from :/Translations based on language %1"}.arg (language);
a.installTranslator (&translation_override_from_resources);
}
}
QTranslator translator_from_cwd;
QTranslator base_translator_from_cwd;
// Load any matching translation from the current directory
// using the current locale. This allows translators to easily
// test their translations by releasing (lrelease) a .qm file
// into the current directory with a suitable name (e.g.
// wsjtx_en_GB.qm), then running wsjtx to view the results. The
// system locale setting will be used to select the translation
// file which can be overridden by the LANG environment variable
// on non-Windows system.
// try and load the base translation
for (QString locale_name : locale.uiLanguages ())
{
auto language = locale_name.left (2);
if (base_translator_from_cwd.load ("wsjtx_" + language))
{
qDebug () << QString {"Loaded base translation file from $cwd based on language %1"}.arg (language);
a.installTranslator (&base_translator_from_cwd);
break;
}
}
// now try and load the most specific translations (may be a
// duplicate but we shouldn't care)
if (translator_from_cwd.load (locale, "wsjtx", "_"))
{
qDebug () << "loaded translations for current locale from a file";
a.installTranslator (&translator_from_cwd);
}
QTranslator translation_override_from_cwd;
QTranslator base_translation_override_from_cwd;
// Load any matching translation from the current directory
// using the command line option language override. This allows
// translators to easily test their translations on Windows by
// releasing (lrelease) a .qm file into the current directory
// with a suitable name (e.g. wsjtx_en_GB.qm), then running
// wsjtx to view the results.
if (parser.isSet (lang_option))
{
auto language = parser.value (lang_option).replace ('-', '_');
// try and load the base translation
auto base_language = language.left (2);
if (base_translation_override_from_cwd.load ("wsjtx_" + base_language))
{
qDebug () << QString {"Loaded base translation file from $cwd based on language %1"}.arg (base_language);
a.installTranslator (&base_translation_override_from_cwd);
}
// now load the requested translations (may be a duplicate
// but we shouldn't care)
if (translation_override_from_cwd.load ("wsjtx_" + language))
{
qDebug () << QString {"loaded translation file from $cwd based on language %1"}.arg (language);
a.installTranslator (&translation_override_from_cwd);
}
}
QStandardPaths::setTestModeEnabled (parser.isSet (test_option)); QStandardPaths::setTestModeEnabled (parser.isSet (test_option));
// support for multiple instances running from a single installation // support for multiple instances running from a single installation

View File

@ -101,22 +101,22 @@ QString DecodeHighlightingModel::highlight_name (Highlight h)
{ {
switch (h) switch (h)
{ {
case Highlight::CQ: return "CQ in message"; case Highlight::CQ: return tr ("CQ in message");
case Highlight::MyCall: return "My Call in message"; case Highlight::MyCall: return tr ("My Call in message");
case Highlight::Tx: return "Transmitted message"; case Highlight::Tx: return tr ("Transmitted message");
case Highlight::DXCC: return "New DXCC"; case Highlight::DXCC: return tr ("New DXCC");
case Highlight::DXCCBand: return "New DXCC on Band"; case Highlight::DXCCBand: return tr ("New DXCC on Band");
case Highlight::Grid: return "New Grid"; case Highlight::Grid: return tr ("New Grid");
case Highlight::GridBand: return "New Grid on Band"; case Highlight::GridBand: return tr ("New Grid on Band");
case Highlight::Call: return "New Call"; case Highlight::Call: return tr ("New Call");
case Highlight::CallBand: return "New Call on Band"; case Highlight::CallBand: return tr ("New Call on Band");
case Highlight::Continent: return "New Continent"; case Highlight::Continent: return tr ("New Continent");
case Highlight::ContinentBand: return "New Continent on Band"; case Highlight::ContinentBand: return tr ("New Continent on Band");
case Highlight::CQZone: return "New CQ Zone"; case Highlight::CQZone: return tr ("New CQ Zone");
case Highlight::CQZoneBand: return "New CQ Zone on Band"; case Highlight::CQZoneBand: return tr ("New CQ Zone on Band");
case Highlight::ITUZone: return "New ITU Zone"; case Highlight::ITUZone: return tr ("New ITU Zone");
case Highlight::ITUZoneBand: return "New ITU Zone on Band"; case Highlight::ITUZoneBand: return tr ("New ITU Zone on Band");
case Highlight::LotW: return "LotW User"; case Highlight::LotW: return tr ("LoTW User");
} }
return "Unknown"; return "Unknown";
} }
@ -166,9 +166,9 @@ QVariant DecodeHighlightingModel::data (const QModelIndex& index, int role) cons
return QString {"%1%2%3%4%4%5%6"} return QString {"%1%2%3%4%4%5%6"}
.arg (highlight_name (item.type_)) .arg (highlight_name (item.type_))
.arg (fg_unset || bg_unset ? QString {" ["} : QString {}) .arg (fg_unset || bg_unset ? QString {" ["} : QString {})
.arg (fg_unset ? QString {"f/g unset"} : QString {}) .arg (fg_unset ? tr ("f/g unset") : QString {})
.arg (fg_unset && bg_unset ? QString {" "} : QString {}) .arg (fg_unset && bg_unset ? QString {" "} : QString {})
.arg (bg_unset ? QString {"b/g unset"} : QString {}) .arg (bg_unset ? tr ("b/g unset") : QString {})
.arg (fg_unset || bg_unset ? QString {"]"} : QString {}); .arg (fg_unset || bg_unset ? QString {"]"} : QString {});
break; break;
case Qt::ForegroundRole: case Qt::ForegroundRole:

View File

@ -124,6 +124,7 @@ namespace
// 7110 LSB EMCOMM // 7110 LSB EMCOMM
// //
{7038600, Modes::WSPR, IARURegions::ALL}, {7038600, Modes::WSPR, IARURegions::ALL},
{7071000, Modes::FT8, IARURegions::ALL},
{7074000, Modes::FT8, IARURegions::ALL}, {7074000, Modes::FT8, IARURegions::ALL},
{7076000, Modes::JT65, IARURegions::ALL}, {7076000, Modes::JT65, IARURegions::ALL},
{7078000, Modes::JT9, IARURegions::ALL}, {7078000, Modes::JT9, IARURegions::ALL},
@ -157,6 +158,7 @@ namespace
// 10142.25 OLIVIA, Contestia, etc. // 10142.25 OLIVIA, Contestia, etc.
// 10143.25 OLIVIA, Contestia, etc. (main QRQ) // 10143.25 OLIVIA, Contestia, etc. (main QRQ)
// //
{10133000, Modes::FT8, IARURegions::ALL},
{10136000, Modes::FT8, IARURegions::ALL}, {10136000, Modes::FT8, IARURegions::ALL},
{10138000, Modes::JT65, IARURegions::ALL}, {10138000, Modes::JT65, IARURegions::ALL},
{10138700, Modes::WSPR, IARURegions::ALL}, {10138700, Modes::WSPR, IARURegions::ALL},
@ -201,6 +203,7 @@ namespace
// 14106.5 OLIVIA 1000 (main QRG) // 14106.5 OLIVIA 1000 (main QRG)
// //
{14095600, Modes::WSPR, IARURegions::ALL}, {14095600, Modes::WSPR, IARURegions::ALL},
{14071000, Modes::FT8, IARURegions::ALL},
{14074000, Modes::FT8, IARURegions::ALL}, {14074000, Modes::FT8, IARURegions::ALL},
{14076000, Modes::JT65, IARURegions::ALL}, {14076000, Modes::JT65, IARURegions::ALL},
{14078000, Modes::JT9, IARURegions::ALL}, {14078000, Modes::JT9, IARURegions::ALL},
@ -267,6 +270,7 @@ namespace
{50293000, Modes::WSPR, IARURegions::R3}, {50293000, Modes::WSPR, IARURegions::R3},
{50310000, Modes::JT65, IARURegions::ALL}, {50310000, Modes::JT65, IARURegions::ALL},
{50312000, Modes::JT9, IARURegions::ALL}, {50312000, Modes::JT9, IARURegions::ALL},
{50310000, Modes::FT8, IARURegions::ALL},
{50313000, Modes::FT8, IARURegions::ALL}, {50313000, Modes::FT8, IARURegions::ALL},
{50318000, Modes::FT4, IARURegions::ALL}, // provisional {50318000, Modes::FT4, IARURegions::ALL}, // provisional
{50323000, Modes::FT8, IARURegions::ALL}, {50323000, Modes::FT8, IARURegions::ALL},

View File

@ -37,8 +37,9 @@
<tr><td><b>Ctrl+O </b></td><td>Open a .wav file</td></tr> <tr><td><b>Ctrl+O </b></td><td>Open a .wav file</td></tr>
<tr><td><b>Alt+O </b></td><td>Change operator</td></tr> <tr><td><b>Alt+O </b></td><td>Change operator</td></tr>
<tr><td><b>Alt+Q </b></td><td>Log QSO</td></tr> <tr><td><b>Alt+Q </b></td><td>Log QSO</td></tr>
<tr><td><b>Ctrl+R </b></td><td>Set Tx4 message to RRR</td></tr> <tr><td><b>Ctrl+R </b></td><td>Set Tx4 message to RRR (not in FT4)</td></tr>
<tr><td><b>Alt+R </b></td><td>Set Tx4 message to RR73</td></tr> <tr><td><b>Alt+R </b></td><td>Set Tx4 message to RR73</td></tr>
<tr><td><b>Alt+S </b></td><td>Stop monitoring</td></tr> <tr><td><b>Alt+S </b></td><td>Stop monitoring</td></tr>
<tr><td><b>Alt+T </b></td><td>Tune</td></tr> <tr><td><b>Alt+T </b></td><td>Toggle Tune status</td></tr>
<tr><td><b>Alt+Z </b></td><td>Clear hung decoder status</td></tr>
</table> </table>

6324
translations/wsjtx_ca.ts Normal file

File diff suppressed because it is too large Load Diff

View File

@ -18,7 +18,7 @@
</message> </message>
<message numerus="yes"> <message numerus="yes">
<location filename="../widgets/AbstractLogWindow.cpp" line="65"/> <location filename="../widgets/AbstractLogWindow.cpp" line="65"/>
<source>Are you sure you want to delete the %n selected QSO(s) from the log</source> <source>Are you sure you want to delete the %n selected QSO(s) from the log?</source>
<translation type="unfinished"> <translation type="unfinished">
<numerusform></numerusform> <numerusform></numerusform>
<numerusform></numerusform> <numerusform></numerusform>
@ -692,7 +692,7 @@ Format:
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../DXLabSuiteCommanderTransceiver.cpp" line="503"/> <location filename="../Transceiver/DXLabSuiteCommanderTransceiver.cpp" line="503"/>
<source>DX Lab Suite Commander sent an unrecognized frequency</source> <source>DX Lab Suite Commander sent an unrecognized frequency</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -737,6 +737,96 @@ Format:
</context> </context>
<context> <context>
<name>DecodeHighlightingModel</name> <name>DecodeHighlightingModel</name>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="104"/>
<source>CQ in message</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="105"/>
<source>My Call in message</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="106"/>
<source>Transmitted message</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="107"/>
<source>New DXCC</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="108"/>
<source>New DXCC on Band</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="109"/>
<source>New Grid</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="110"/>
<source>New Grid on Band</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="111"/>
<source>New Call</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="112"/>
<source>New Call on Band</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="113"/>
<source>New Continent</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="114"/>
<source>New Continent on Band</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="115"/>
<source>New CQ Zone</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="116"/>
<source>New CQ Zone on Band</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="117"/>
<source>New ITU Zone</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="118"/>
<source>New ITU Zone on Band</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="119"/>
<source>LoTW User</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="169"/>
<source>f/g unset</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="171"/>
<source>b/g unset</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../models/DecodeHighlightingModel.cpp" line="244"/> <location filename="../models/DecodeHighlightingModel.cpp" line="244"/>
<source>Highlight Type</source> <source>Highlight Type</source>
@ -1822,6 +1912,12 @@ Error(%2): %3</source>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.ui" line="50"/> <location filename="../widgets/mainwindow.ui" line="50"/>
<location filename="../widgets/mainwindow.cpp" line="5797"/>
<location filename="../widgets/mainwindow.cpp" line="5845"/>
<location filename="../widgets/mainwindow.cpp" line="6003"/>
<location filename="../widgets/mainwindow.cpp" line="6043"/>
<location filename="../widgets/mainwindow.cpp" line="6091"/>
<location filename="../widgets/mainwindow.cpp" line="6216"/>
<source>Band Activity</source> <source>Band Activity</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1833,6 +1929,11 @@ Error(%2): %3</source>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.ui" line="194"/> <location filename="../widgets/mainwindow.ui" line="194"/>
<location filename="../widgets/mainwindow.cpp" line="5796"/>
<location filename="../widgets/mainwindow.cpp" line="5840"/>
<location filename="../widgets/mainwindow.cpp" line="6004"/>
<location filename="../widgets/mainwindow.cpp" line="6044"/>
<location filename="../widgets/mainwindow.cpp" line="6092"/>
<source>Rx Frequency</source> <source>Rx Frequency</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -2290,6 +2391,7 @@ Not available to nonstandard callsign holders.</source>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.ui" line="1394"/> <location filename="../widgets/mainwindow.ui" line="1394"/>
<location filename="../widgets/mainwindow.cpp" line="5867"/>
<source>Fox</source> <source>Fox</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -3130,6 +3232,7 @@ list. The list can be maintained in Settings (F2).</source>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.ui" line="3125"/> <location filename="../widgets/mainwindow.ui" line="3125"/>
<location filename="../widgets/mainwindow.cpp" line="8103"/>
<source>Runaway Tx watchdog</source> <source>Runaway Tx watchdog</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -3405,7 +3508,14 @@ list. The list can be maintained in Settings (F2).</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="434"/> <location filename="../widgets/mainwindow.cpp" line="329"/>
<location filename="../widgets/mainwindow.cpp" line="4120"/>
<location filename="../widgets/mainwindow.cpp" line="7634"/>
<source>Receiving</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../widgets/mainwindow.cpp" line="437"/>
<source>Do you want to reconfigure the radio interface?</source> <source>Do you want to reconfigure the radio interface?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -3435,7 +3545,27 @@ list. The list can be maintained in Settings (F2).</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="819"/> <location filename="../widgets/mainwindow.cpp" line="828"/>
<location filename="../widgets/mainwindow.cpp" line="5792"/>
<location filename="../widgets/mainwindow.cpp" line="5798"/>
<location filename="../widgets/mainwindow.cpp" line="5836"/>
<location filename="../widgets/mainwindow.cpp" line="5846"/>
<location filename="../widgets/mainwindow.cpp" line="5943"/>
<location filename="../widgets/mainwindow.cpp" line="5944"/>
<location filename="../widgets/mainwindow.cpp" line="5992"/>
<location filename="../widgets/mainwindow.cpp" line="5993"/>
<location filename="../widgets/mainwindow.cpp" line="5997"/>
<location filename="../widgets/mainwindow.cpp" line="5998"/>
<location filename="../widgets/mainwindow.cpp" line="6045"/>
<location filename="../widgets/mainwindow.cpp" line="6046"/>
<location filename="../widgets/mainwindow.cpp" line="6211"/>
<location filename="../widgets/mainwindow.cpp" line="6212"/>
<location filename="../widgets/mainwindow.cpp" line="6397"/>
<source>Message</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../widgets/mainwindow.cpp" line="842"/>
<source>Error Killing jt9.exe Process</source> <source>Error Killing jt9.exe Process</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -3455,23 +3585,23 @@ list. The list can be maintained in Settings (F2).</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="1254"/> <location filename="../widgets/mainwindow.cpp" line="1258"/>
<location filename="../widgets/mainwindow.cpp" line="6063"/> <location filename="../widgets/mainwindow.cpp" line="6186"/>
<source>Improper mode</source> <source>Improper mode</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="1405"/> <location filename="../widgets/mainwindow.cpp" line="1409"/>
<location filename="../widgets/mainwindow.cpp" line="8591"/> <location filename="../widgets/mainwindow.cpp" line="8730"/>
<source>File Open Error</source> <source>File Open Error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="1406"/> <location filename="../widgets/mainwindow.cpp" line="1410"/>
<location filename="../widgets/mainwindow.cpp" line="7620"/> <location filename="../widgets/mainwindow.cpp" line="7748"/>
<location filename="../widgets/mainwindow.cpp" line="8039"/> <location filename="../widgets/mainwindow.cpp" line="8177"/>
<location filename="../widgets/mainwindow.cpp" line="8592"/> <location filename="../widgets/mainwindow.cpp" line="8731"/>
<location filename="../widgets/mainwindow.cpp" line="8712"/> <location filename="../widgets/mainwindow.cpp" line="8857"/>
<source>Cannot open &quot;%1&quot; for append: %2</source> <source>Cannot open &quot;%1&quot; for append: %2</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -3491,7 +3621,21 @@ list. The list can be maintained in Settings (F2).</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="2072"/> <location filename="../widgets/mainwindow.cpp" line="1787"/>
<location filename="../widgets/mainwindow.cpp" line="5941"/>
<location filename="../widgets/mainwindow.cpp" line="6087"/>
<source>Single-Period Decodes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../widgets/mainwindow.cpp" line="1788"/>
<location filename="../widgets/mainwindow.cpp" line="5942"/>
<location filename="../widgets/mainwindow.cpp" line="6088"/>
<source>Average Decodes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../widgets/mainwindow.cpp" line="2089"/>
<source>Change Operator</source> <source>Change Operator</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -3506,8 +3650,8 @@ list. The list can be maintained in Settings (F2).</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="2175"/> <location filename="../widgets/mainwindow.cpp" line="2200"/>
<location filename="../widgets/mainwindow.cpp" line="5296"/> <location filename="../widgets/mainwindow.cpp" line="5405"/>
<source>Cannot open &quot;%1&quot; for writing: %2</source> <source>Cannot open &quot;%1&quot; for writing: %2</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -3625,161 +3769,194 @@ list. The list can be maintained in Settings (F2).</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="4546"/> <location filename="../widgets/mainwindow.cpp" line="4224"/>
<source>Last Tx: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../widgets/mainwindow.cpp" line="4624"/>
<source>Should you switch to EU VHF Contest mode?
To do so, check &apos;Special operating activity&apos; and
&apos;EU VHF Contest&apos; on the Settings | Advanced tab.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../widgets/mainwindow.cpp" line="4643"/>
<source>Should you switch to ARRL Field Day mode?</source> <source>Should you switch to ARRL Field Day mode?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="4553"/> <location filename="../widgets/mainwindow.cpp" line="4648"/>
<source>Should you switch to RTTY contest mode?</source> <source>Should you switch to RTTY contest mode?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="5263"/> <location filename="../widgets/mainwindow.cpp" line="5372"/>
<location filename="../widgets/mainwindow.cpp" line="5282"/> <location filename="../widgets/mainwindow.cpp" line="5391"/>
<location filename="../widgets/mainwindow.cpp" line="5295"/> <location filename="../widgets/mainwindow.cpp" line="5404"/>
<location filename="../widgets/mainwindow.cpp" line="5321"/> <location filename="../widgets/mainwindow.cpp" line="5430"/>
<source>Add to CALL3.TXT</source> <source>Add to CALL3.TXT</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="5264"/> <location filename="../widgets/mainwindow.cpp" line="5373"/>
<source>Please enter a valid grid locator</source> <source>Please enter a valid grid locator</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="5283"/> <location filename="../widgets/mainwindow.cpp" line="5392"/>
<source>Cannot open &quot;%1&quot; for read/write: %2</source> <source>Cannot open &quot;%1&quot; for read/write: %2</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="5319"/> <location filename="../widgets/mainwindow.cpp" line="5428"/>
<source>%1 <source>%1
is already in CALL3.TXT, do you wish to replace it?</source> is already in CALL3.TXT, do you wish to replace it?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="5486"/> <location filename="../widgets/mainwindow.cpp" line="5603"/>
<source>Warning: DX Call field is empty.</source> <source>Warning: DX Call field is empty.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="5539"/> <location filename="../widgets/mainwindow.cpp" line="5660"/>
<source>Log file error</source> <source>Log file error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="5540"/> <location filename="../widgets/mainwindow.cpp" line="5661"/>
<source>Cannot open &quot;%1&quot;</source> <source>Cannot open &quot;%1&quot;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="5556"/> <location filename="../widgets/mainwindow.cpp" line="5677"/>
<source>Error sending log to N1MM</source> <source>Error sending log to N1MM</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="5557"/> <location filename="../widgets/mainwindow.cpp" line="5678"/>
<source>Write returned &quot;%1&quot;</source> <source>Write returned &quot;%1&quot;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="6345"/> <location filename="../widgets/mainwindow.cpp" line="5842"/>
<location filename="../widgets/mainwindow.cpp" line="6378"/> <source>Stations calling DXpedition %1</source>
<location filename="../widgets/mainwindow.cpp" line="6388"/> <translation type="unfinished"></translation>
</message>
<message>
<location filename="../widgets/mainwindow.cpp" line="5877"/>
<source>Hound</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../widgets/mainwindow.cpp" line="6217"/>
<source>Tx Messages</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../widgets/mainwindow.cpp" line="6468"/>
<location filename="../widgets/mainwindow.cpp" line="6501"/>
<location filename="../widgets/mainwindow.cpp" line="6511"/>
<source>Confirm Erase</source> <source>Confirm Erase</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="6346"/> <location filename="../widgets/mainwindow.cpp" line="6469"/>
<source>Are you sure you want to erase file ALL.TXT?</source> <source>Are you sure you want to erase file ALL.TXT?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="6356"/> <location filename="../widgets/mainwindow.cpp" line="6479"/>
<location filename="../widgets/mainwindow.cpp" line="8084"/> <location filename="../widgets/mainwindow.cpp" line="8222"/>
<source>Confirm Reset</source> <source>Confirm Reset</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="6357"/> <location filename="../widgets/mainwindow.cpp" line="6480"/>
<source>Are you sure you want to erase your contest log?</source> <source>Are you sure you want to erase your contest log?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="6358"/> <location filename="../widgets/mainwindow.cpp" line="6481"/>
<source>Doing this will remove all QSO records for the current contest. They will be kept in the ADIF log file but will not be available for export in your Cabrillo log.</source> <source>Doing this will remove all QSO records for the current contest. They will be kept in the ADIF log file but will not be available for export in your Cabrillo log.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="6371"/> <location filename="../widgets/mainwindow.cpp" line="6494"/>
<source>Cabrillo Log saved</source> <source>Cabrillo Log saved</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="6379"/> <location filename="../widgets/mainwindow.cpp" line="6502"/>
<source>Are you sure you want to erase file wsjtx_log.adi?</source> <source>Are you sure you want to erase file wsjtx_log.adi?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="6389"/> <location filename="../widgets/mainwindow.cpp" line="6512"/>
<source>Are you sure you want to erase the WSPR hashtable?</source> <source>Are you sure you want to erase the WSPR hashtable?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="6483"/> <location filename="../widgets/mainwindow.cpp" line="6606"/>
<source>VHF features warning</source> <source>VHF features warning</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="7082"/> <location filename="../widgets/mainwindow.cpp" line="7211"/>
<source>Tune digital gain </source> <source>Tune digital gain </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="7084"/> <location filename="../widgets/mainwindow.cpp" line="7213"/>
<source>Transmit digital gain </source> <source>Transmit digital gain </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="7103"/> <location filename="../widgets/mainwindow.cpp" line="7232"/>
<source>Prefixes</source> <source>Prefixes</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="7472"/> <location filename="../widgets/mainwindow.cpp" line="7601"/>
<source>Network Error</source> <source>Network Error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="7473"/> <location filename="../widgets/mainwindow.cpp" line="7602"/>
<source>Error: %1 <source>Error: %1
UDP server %2:%3</source> UDP server %2:%3</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="7619"/> <location filename="../widgets/mainwindow.cpp" line="7747"/>
<source>File Error</source> <source>File Error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="7854"/> <location filename="../widgets/mainwindow.cpp" line="7981"/>
<source>Phase Training Disabled</source> <source>Phase Training Disabled</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="7857"/> <location filename="../widgets/mainwindow.cpp" line="7984"/>
<source>Phase Training Enabled</source> <source>Phase Training Enabled</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="8042"/> <location filename="../widgets/mainwindow.cpp" line="8118"/>
<location filename="../widgets/mainwindow.cpp" line="8715"/> <source>WD:%1m</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../widgets/mainwindow.cpp" line="8180"/>
<location filename="../widgets/mainwindow.cpp" line="8860"/>
<source>Log File Error</source> <source>Log File Error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="8085"/> <location filename="../widgets/mainwindow.cpp" line="8223"/>
<source>Are you sure you want to clear the QSO queues?</source> <source>Are you sure you want to clear the QSO queues?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -3937,7 +4114,7 @@ UDP server %2:%3</source>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="198"/> <location filename="../main.cpp" line="252"/>
<source>Invalid rig name - \ &amp; / not allowed</source> <source>Invalid rig name - \ &amp; / not allowed</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -4951,11 +5128,6 @@ a few, particularly some Kenwood rigs, require it).</source>
<source>RTS:</source> <source>RTS:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../Configuration.ui" line="932"/>
<source>How this program activates the PTT on your radio</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../Configuration.ui" line="935"/> <location filename="../Configuration.ui" line="935"/>
<source>PTT Method</source> <source>PTT Method</source>
@ -5607,7 +5779,27 @@ Right click for insert and delete options.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../Configuration.ui" line="2291"/> <location filename="../Configuration.ui" line="932"/>
<source>How this program activates the PTT on your radio?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Configuration.ui" line="954"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Use the RS-232 DTR control line to toggle your radio&apos;s PTT, requires hardware to interface the line.&lt;/p&gt;&lt;p&gt;Some commercial interface units also use this method.&lt;/p&gt;&lt;p&gt;The DTR control line of the CAT serial port may be used for this or a DTR control line on a different serial port may be used.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Configuration.ui" line="985"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Use the RS-232 RTS control line to toggle your radio&apos;s PTT, requires hardware to interface the line.&lt;/p&gt;&lt;p&gt;Some commercial interface units also use this method.&lt;/p&gt;&lt;p&gt;The RTS control line of the CAT serial port may be used for this or a RTS control line on a different serial port may be used. Note that this option is not available on the CAT serial port when hardware flow control is used.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Configuration.ui" line="1083"/>
<source>If this is available then it is usually the correct mode for this program.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Configuration.ui" line="2231"/>
<source>Rescan ADIF Log</source> <source>Rescan ADIF Log</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -5889,104 +6081,114 @@ Right click for insert and delete options.</source>
<name>main</name> <name>main</name>
<message> <message>
<location filename="../main.cpp" line="81"/> <location filename="../main.cpp" line="81"/>
<location filename="../main.cpp" line="412"/> <location filename="../main.cpp" line="468"/>
<source>Fatal error</source> <source>Fatal error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="86"/> <location filename="../main.cpp" line="86"/>
<location filename="../main.cpp" line="417"/> <location filename="../main.cpp" line="473"/>
<source>Unexpected fatal error</source> <source>Unexpected fatal error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="154"/> <location filename="../main.cpp" line="149"/>
<source>Where &lt;rig-name&gt; is for multi-instance support.</source> <source>Where &lt;rig-name&gt; is for multi-instance support.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="155"/> <location filename="../main.cpp" line="150"/>
<source>rig-name</source> <source>rig-name</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="160"/> <location filename="../main.cpp" line="155"/>
<source>Where &lt;configuration&gt; is an existing one.</source> <source>Where &lt;configuration&gt; is an existing one.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="161"/> <location filename="../main.cpp" line="156"/>
<source>configuration</source> <source>configuration</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="165"/> <location filename="../main.cpp" line="161"/>
<source>Where &lt;language&gt; is &lt;lang-code&gt;[-&lt;country-code&gt;].</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.cpp" line="162"/>
<source>language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.cpp" line="166"/>
<source>Writable files in test location. Use with caution, for testing only.</source> <source>Writable files in test location. Use with caution, for testing only.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="170"/> <location filename="../main.cpp" line="171"/>
<source>Command line error</source> <source>Command line error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="177"/> <location filename="../main.cpp" line="178"/>
<source>Command line help</source> <source>Command line help</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="182"/> <location filename="../main.cpp" line="183"/>
<source>Application version</source> <source>Application version</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="229"/> <location filename="../main.cpp" line="283"/>
<source>Another instance may be running</source> <source>Another instance may be running</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="230"/> <location filename="../main.cpp" line="284"/>
<source>try to remove stale lock file?</source> <source>try to remove stale lock file?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="265"/> <location filename="../main.cpp" line="319"/>
<source>Failed to create a temporary directory</source> <source>Failed to create a temporary directory</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="266"/> <location filename="../main.cpp" line="320"/>
<location filename="../main.cpp" line="274"/> <location filename="../main.cpp" line="328"/>
<source>Path: &quot;%1&quot;</source> <source>Path: &quot;%1&quot;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="272"/> <location filename="../main.cpp" line="326"/>
<source>Failed to create a usable temporary directory</source> <source>Failed to create a usable temporary directory</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="273"/> <location filename="../main.cpp" line="327"/>
<source>Another application may be locking the directory</source> <source>Another application may be locking the directory</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="306"/> <location filename="../main.cpp" line="360"/>
<source>Failed to create data directory</source> <source>Failed to create data directory</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="307"/> <location filename="../main.cpp" line="361"/>
<source>path: &quot;%1&quot;</source> <source>path: &quot;%1&quot;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="362"/> <location filename="../main.cpp" line="416"/>
<source>Shared memory error</source> <source>Shared memory error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="363"/> <location filename="../main.cpp" line="417"/>
<source>Unable to create shared memory segment</source> <source>Unable to create shared memory segment</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

6214
translations/wsjtx_es_ES.ts Normal file

File diff suppressed because it is too large Load Diff

View File

@ -18,7 +18,7 @@
</message> </message>
<message numerus="yes"> <message numerus="yes">
<location filename="../widgets/AbstractLogWindow.cpp" line="65"/> <location filename="../widgets/AbstractLogWindow.cpp" line="65"/>
<source>Are you sure you want to delete the %n selected QSO(s) from the log</source> <source>Are you sure you want to delete the %n selected QSO(s) from the log?</source>
<translation type="unfinished"> <translation type="unfinished">
<numerusform></numerusform> <numerusform></numerusform>
<numerusform></numerusform> <numerusform></numerusform>
@ -692,7 +692,7 @@ Format:
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../DXLabSuiteCommanderTransceiver.cpp" line="503"/> <location filename="../Transceiver/DXLabSuiteCommanderTransceiver.cpp" line="503"/>
<source>DX Lab Suite Commander sent an unrecognized frequency</source> <source>DX Lab Suite Commander sent an unrecognized frequency</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -737,6 +737,96 @@ Format:
</context> </context>
<context> <context>
<name>DecodeHighlightingModel</name> <name>DecodeHighlightingModel</name>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="104"/>
<source>CQ in message</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="105"/>
<source>My Call in message</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="106"/>
<source>Transmitted message</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="107"/>
<source>New DXCC</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="108"/>
<source>New DXCC on Band</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="109"/>
<source>New Grid</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="110"/>
<source>New Grid on Band</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="111"/>
<source>New Call</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="112"/>
<source>New Call on Band</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="113"/>
<source>New Continent</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="114"/>
<source>New Continent on Band</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="115"/>
<source>New CQ Zone</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="116"/>
<source>New CQ Zone on Band</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="117"/>
<source>New ITU Zone</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="118"/>
<source>New ITU Zone on Band</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="119"/>
<source>LoTW User</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="169"/>
<source>f/g unset</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../models/DecodeHighlightingModel.cpp" line="171"/>
<source>b/g unset</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../models/DecodeHighlightingModel.cpp" line="244"/> <location filename="../models/DecodeHighlightingModel.cpp" line="244"/>
<source>Highlight Type</source> <source>Highlight Type</source>
@ -1822,6 +1912,12 @@ Error(%2): %3</source>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.ui" line="50"/> <location filename="../widgets/mainwindow.ui" line="50"/>
<location filename="../widgets/mainwindow.cpp" line="5797"/>
<location filename="../widgets/mainwindow.cpp" line="5845"/>
<location filename="../widgets/mainwindow.cpp" line="6003"/>
<location filename="../widgets/mainwindow.cpp" line="6043"/>
<location filename="../widgets/mainwindow.cpp" line="6091"/>
<location filename="../widgets/mainwindow.cpp" line="6216"/>
<source>Band Activity</source> <source>Band Activity</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -1833,6 +1929,11 @@ Error(%2): %3</source>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.ui" line="194"/> <location filename="../widgets/mainwindow.ui" line="194"/>
<location filename="../widgets/mainwindow.cpp" line="5796"/>
<location filename="../widgets/mainwindow.cpp" line="5840"/>
<location filename="../widgets/mainwindow.cpp" line="6004"/>
<location filename="../widgets/mainwindow.cpp" line="6044"/>
<location filename="../widgets/mainwindow.cpp" line="6092"/>
<source>Rx Frequency</source> <source>Rx Frequency</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -2290,6 +2391,7 @@ Not available to nonstandard callsign holders.</source>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.ui" line="1394"/> <location filename="../widgets/mainwindow.ui" line="1394"/>
<location filename="../widgets/mainwindow.cpp" line="5867"/>
<source>Fox</source> <source>Fox</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -3130,6 +3232,7 @@ list. The list can be maintained in Settings (F2).</source>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.ui" line="3125"/> <location filename="../widgets/mainwindow.ui" line="3125"/>
<location filename="../widgets/mainwindow.cpp" line="8103"/>
<source>Runaway Tx watchdog</source> <source>Runaway Tx watchdog</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -3405,7 +3508,14 @@ list. The list can be maintained in Settings (F2).</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="434"/> <location filename="../widgets/mainwindow.cpp" line="329"/>
<location filename="../widgets/mainwindow.cpp" line="4120"/>
<location filename="../widgets/mainwindow.cpp" line="7634"/>
<source>Receiving</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../widgets/mainwindow.cpp" line="437"/>
<source>Do you want to reconfigure the radio interface?</source> <source>Do you want to reconfigure the radio interface?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -3435,7 +3545,27 @@ list. The list can be maintained in Settings (F2).</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="819"/> <location filename="../widgets/mainwindow.cpp" line="828"/>
<location filename="../widgets/mainwindow.cpp" line="5792"/>
<location filename="../widgets/mainwindow.cpp" line="5798"/>
<location filename="../widgets/mainwindow.cpp" line="5836"/>
<location filename="../widgets/mainwindow.cpp" line="5846"/>
<location filename="../widgets/mainwindow.cpp" line="5943"/>
<location filename="../widgets/mainwindow.cpp" line="5944"/>
<location filename="../widgets/mainwindow.cpp" line="5992"/>
<location filename="../widgets/mainwindow.cpp" line="5993"/>
<location filename="../widgets/mainwindow.cpp" line="5997"/>
<location filename="../widgets/mainwindow.cpp" line="5998"/>
<location filename="../widgets/mainwindow.cpp" line="6045"/>
<location filename="../widgets/mainwindow.cpp" line="6046"/>
<location filename="../widgets/mainwindow.cpp" line="6211"/>
<location filename="../widgets/mainwindow.cpp" line="6212"/>
<location filename="../widgets/mainwindow.cpp" line="6397"/>
<source>Message</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../widgets/mainwindow.cpp" line="842"/>
<source>Error Killing jt9.exe Process</source> <source>Error Killing jt9.exe Process</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -3455,23 +3585,23 @@ list. The list can be maintained in Settings (F2).</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="1254"/> <location filename="../widgets/mainwindow.cpp" line="1258"/>
<location filename="../widgets/mainwindow.cpp" line="6063"/> <location filename="../widgets/mainwindow.cpp" line="6186"/>
<source>Improper mode</source> <source>Improper mode</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="1405"/> <location filename="../widgets/mainwindow.cpp" line="1409"/>
<location filename="../widgets/mainwindow.cpp" line="8591"/> <location filename="../widgets/mainwindow.cpp" line="8730"/>
<source>File Open Error</source> <source>File Open Error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="1406"/> <location filename="../widgets/mainwindow.cpp" line="1410"/>
<location filename="../widgets/mainwindow.cpp" line="7620"/> <location filename="../widgets/mainwindow.cpp" line="7748"/>
<location filename="../widgets/mainwindow.cpp" line="8039"/> <location filename="../widgets/mainwindow.cpp" line="8177"/>
<location filename="../widgets/mainwindow.cpp" line="8592"/> <location filename="../widgets/mainwindow.cpp" line="8731"/>
<location filename="../widgets/mainwindow.cpp" line="8712"/> <location filename="../widgets/mainwindow.cpp" line="8857"/>
<source>Cannot open &quot;%1&quot; for append: %2</source> <source>Cannot open &quot;%1&quot; for append: %2</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -3491,7 +3621,21 @@ list. The list can be maintained in Settings (F2).</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="2072"/> <location filename="../widgets/mainwindow.cpp" line="1787"/>
<location filename="../widgets/mainwindow.cpp" line="5941"/>
<location filename="../widgets/mainwindow.cpp" line="6087"/>
<source>Single-Period Decodes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../widgets/mainwindow.cpp" line="1788"/>
<location filename="../widgets/mainwindow.cpp" line="5942"/>
<location filename="../widgets/mainwindow.cpp" line="6088"/>
<source>Average Decodes</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../widgets/mainwindow.cpp" line="2089"/>
<source>Change Operator</source> <source>Change Operator</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -3506,8 +3650,8 @@ list. The list can be maintained in Settings (F2).</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="2175"/> <location filename="../widgets/mainwindow.cpp" line="2200"/>
<location filename="../widgets/mainwindow.cpp" line="5296"/> <location filename="../widgets/mainwindow.cpp" line="5405"/>
<source>Cannot open &quot;%1&quot; for writing: %2</source> <source>Cannot open &quot;%1&quot; for writing: %2</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -3625,161 +3769,194 @@ list. The list can be maintained in Settings (F2).</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="4546"/> <location filename="../widgets/mainwindow.cpp" line="4224"/>
<source>Last Tx: %1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../widgets/mainwindow.cpp" line="4624"/>
<source>Should you switch to EU VHF Contest mode?
To do so, check &apos;Special operating activity&apos; and
&apos;EU VHF Contest&apos; on the Settings | Advanced tab.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../widgets/mainwindow.cpp" line="4643"/>
<source>Should you switch to ARRL Field Day mode?</source> <source>Should you switch to ARRL Field Day mode?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="4553"/> <location filename="../widgets/mainwindow.cpp" line="4648"/>
<source>Should you switch to RTTY contest mode?</source> <source>Should you switch to RTTY contest mode?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="5263"/> <location filename="../widgets/mainwindow.cpp" line="5372"/>
<location filename="../widgets/mainwindow.cpp" line="5282"/> <location filename="../widgets/mainwindow.cpp" line="5391"/>
<location filename="../widgets/mainwindow.cpp" line="5295"/> <location filename="../widgets/mainwindow.cpp" line="5404"/>
<location filename="../widgets/mainwindow.cpp" line="5321"/> <location filename="../widgets/mainwindow.cpp" line="5430"/>
<source>Add to CALL3.TXT</source> <source>Add to CALL3.TXT</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="5264"/> <location filename="../widgets/mainwindow.cpp" line="5373"/>
<source>Please enter a valid grid locator</source> <source>Please enter a valid grid locator</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="5283"/> <location filename="../widgets/mainwindow.cpp" line="5392"/>
<source>Cannot open &quot;%1&quot; for read/write: %2</source> <source>Cannot open &quot;%1&quot; for read/write: %2</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="5319"/> <location filename="../widgets/mainwindow.cpp" line="5428"/>
<source>%1 <source>%1
is already in CALL3.TXT, do you wish to replace it?</source> is already in CALL3.TXT, do you wish to replace it?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="5486"/> <location filename="../widgets/mainwindow.cpp" line="5603"/>
<source>Warning: DX Call field is empty.</source> <source>Warning: DX Call field is empty.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="5539"/> <location filename="../widgets/mainwindow.cpp" line="5660"/>
<source>Log file error</source> <source>Log file error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="5540"/> <location filename="../widgets/mainwindow.cpp" line="5661"/>
<source>Cannot open &quot;%1&quot;</source> <source>Cannot open &quot;%1&quot;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="5556"/> <location filename="../widgets/mainwindow.cpp" line="5677"/>
<source>Error sending log to N1MM</source> <source>Error sending log to N1MM</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="5557"/> <location filename="../widgets/mainwindow.cpp" line="5678"/>
<source>Write returned &quot;%1&quot;</source> <source>Write returned &quot;%1&quot;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="6345"/> <location filename="../widgets/mainwindow.cpp" line="5842"/>
<location filename="../widgets/mainwindow.cpp" line="6378"/> <source>Stations calling DXpedition %1</source>
<location filename="../widgets/mainwindow.cpp" line="6388"/> <translation type="unfinished"></translation>
</message>
<message>
<location filename="../widgets/mainwindow.cpp" line="5877"/>
<source>Hound</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../widgets/mainwindow.cpp" line="6217"/>
<source>Tx Messages</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../widgets/mainwindow.cpp" line="6468"/>
<location filename="../widgets/mainwindow.cpp" line="6501"/>
<location filename="../widgets/mainwindow.cpp" line="6511"/>
<source>Confirm Erase</source> <source>Confirm Erase</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="6346"/> <location filename="../widgets/mainwindow.cpp" line="6469"/>
<source>Are you sure you want to erase file ALL.TXT?</source> <source>Are you sure you want to erase file ALL.TXT?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="6356"/> <location filename="../widgets/mainwindow.cpp" line="6479"/>
<location filename="../widgets/mainwindow.cpp" line="8084"/> <location filename="../widgets/mainwindow.cpp" line="8222"/>
<source>Confirm Reset</source> <source>Confirm Reset</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="6357"/> <location filename="../widgets/mainwindow.cpp" line="6480"/>
<source>Are you sure you want to erase your contest log?</source> <source>Are you sure you want to erase your contest log?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="6358"/> <location filename="../widgets/mainwindow.cpp" line="6481"/>
<source>Doing this will remove all QSO records for the current contest. They will be kept in the ADIF log file but will not be available for export in your Cabrillo log.</source> <source>Doing this will remove all QSO records for the current contest. They will be kept in the ADIF log file but will not be available for export in your Cabrillo log.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="6371"/> <location filename="../widgets/mainwindow.cpp" line="6494"/>
<source>Cabrillo Log saved</source> <source>Cabrillo Log saved</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="6379"/> <location filename="../widgets/mainwindow.cpp" line="6502"/>
<source>Are you sure you want to erase file wsjtx_log.adi?</source> <source>Are you sure you want to erase file wsjtx_log.adi?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="6389"/> <location filename="../widgets/mainwindow.cpp" line="6512"/>
<source>Are you sure you want to erase the WSPR hashtable?</source> <source>Are you sure you want to erase the WSPR hashtable?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="6483"/> <location filename="../widgets/mainwindow.cpp" line="6606"/>
<source>VHF features warning</source> <source>VHF features warning</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="7082"/> <location filename="../widgets/mainwindow.cpp" line="7211"/>
<source>Tune digital gain </source> <source>Tune digital gain </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="7084"/> <location filename="../widgets/mainwindow.cpp" line="7213"/>
<source>Transmit digital gain </source> <source>Transmit digital gain </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="7103"/> <location filename="../widgets/mainwindow.cpp" line="7232"/>
<source>Prefixes</source> <source>Prefixes</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="7472"/> <location filename="../widgets/mainwindow.cpp" line="7601"/>
<source>Network Error</source> <source>Network Error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="7473"/> <location filename="../widgets/mainwindow.cpp" line="7602"/>
<source>Error: %1 <source>Error: %1
UDP server %2:%3</source> UDP server %2:%3</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="7619"/> <location filename="../widgets/mainwindow.cpp" line="7747"/>
<source>File Error</source> <source>File Error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="7854"/> <location filename="../widgets/mainwindow.cpp" line="7981"/>
<source>Phase Training Disabled</source> <source>Phase Training Disabled</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="7857"/> <location filename="../widgets/mainwindow.cpp" line="7984"/>
<source>Phase Training Enabled</source> <source>Phase Training Enabled</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="8042"/> <location filename="../widgets/mainwindow.cpp" line="8118"/>
<location filename="../widgets/mainwindow.cpp" line="8715"/> <source>WD:%1m</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../widgets/mainwindow.cpp" line="8180"/>
<location filename="../widgets/mainwindow.cpp" line="8860"/>
<source>Log File Error</source> <source>Log File Error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../widgets/mainwindow.cpp" line="8085"/> <location filename="../widgets/mainwindow.cpp" line="8223"/>
<source>Are you sure you want to clear the QSO queues?</source> <source>Are you sure you want to clear the QSO queues?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -3937,7 +4114,7 @@ UDP server %2:%3</source>
<context> <context>
<name>QObject</name> <name>QObject</name>
<message> <message>
<location filename="../main.cpp" line="198"/> <location filename="../main.cpp" line="252"/>
<source>Invalid rig name - \ &amp; / not allowed</source> <source>Invalid rig name - \ &amp; / not allowed</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -4951,11 +5128,6 @@ a few, particularly some Kenwood rigs, require it).</source>
<source>RTS:</source> <source>RTS:</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<location filename="../Configuration.ui" line="932"/>
<source>How this program activates the PTT on your radio</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../Configuration.ui" line="935"/> <location filename="../Configuration.ui" line="935"/>
<source>PTT Method</source> <source>PTT Method</source>
@ -5607,7 +5779,27 @@ Right click for insert and delete options.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../Configuration.ui" line="2291"/> <location filename="../Configuration.ui" line="932"/>
<source>How this program activates the PTT on your radio?</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Configuration.ui" line="954"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Use the RS-232 DTR control line to toggle your radio&apos;s PTT, requires hardware to interface the line.&lt;/p&gt;&lt;p&gt;Some commercial interface units also use this method.&lt;/p&gt;&lt;p&gt;The DTR control line of the CAT serial port may be used for this or a DTR control line on a different serial port may be used.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Configuration.ui" line="985"/>
<source>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Use the RS-232 RTS control line to toggle your radio&apos;s PTT, requires hardware to interface the line.&lt;/p&gt;&lt;p&gt;Some commercial interface units also use this method.&lt;/p&gt;&lt;p&gt;The RTS control line of the CAT serial port may be used for this or a RTS control line on a different serial port may be used. Note that this option is not available on the CAT serial port when hardware flow control is used.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Configuration.ui" line="1083"/>
<source>If this is available then it is usually the correct mode for this program.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../Configuration.ui" line="2231"/>
<source>Rescan ADIF Log</source> <source>Rescan ADIF Log</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
@ -5889,104 +6081,114 @@ Right click for insert and delete options.</source>
<name>main</name> <name>main</name>
<message> <message>
<location filename="../main.cpp" line="81"/> <location filename="../main.cpp" line="81"/>
<location filename="../main.cpp" line="412"/> <location filename="../main.cpp" line="468"/>
<source>Fatal error</source> <source>Fatal error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="86"/> <location filename="../main.cpp" line="86"/>
<location filename="../main.cpp" line="417"/> <location filename="../main.cpp" line="473"/>
<source>Unexpected fatal error</source> <source>Unexpected fatal error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="154"/> <location filename="../main.cpp" line="149"/>
<source>Where &lt;rig-name&gt; is for multi-instance support.</source> <source>Where &lt;rig-name&gt; is for multi-instance support.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="155"/> <location filename="../main.cpp" line="150"/>
<source>rig-name</source> <source>rig-name</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="160"/> <location filename="../main.cpp" line="155"/>
<source>Where &lt;configuration&gt; is an existing one.</source> <source>Where &lt;configuration&gt; is an existing one.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="161"/> <location filename="../main.cpp" line="156"/>
<source>configuration</source> <source>configuration</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="165"/> <location filename="../main.cpp" line="161"/>
<source>Where &lt;language&gt; is &lt;lang-code&gt;[-&lt;country-code&gt;].</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.cpp" line="162"/>
<source>language</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../main.cpp" line="166"/>
<source>Writable files in test location. Use with caution, for testing only.</source> <source>Writable files in test location. Use with caution, for testing only.</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="170"/> <location filename="../main.cpp" line="171"/>
<source>Command line error</source> <source>Command line error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="177"/> <location filename="../main.cpp" line="178"/>
<source>Command line help</source> <source>Command line help</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="182"/> <location filename="../main.cpp" line="183"/>
<source>Application version</source> <source>Application version</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="229"/> <location filename="../main.cpp" line="283"/>
<source>Another instance may be running</source> <source>Another instance may be running</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="230"/> <location filename="../main.cpp" line="284"/>
<source>try to remove stale lock file?</source> <source>try to remove stale lock file?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="265"/> <location filename="../main.cpp" line="319"/>
<source>Failed to create a temporary directory</source> <source>Failed to create a temporary directory</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="266"/> <location filename="../main.cpp" line="320"/>
<location filename="../main.cpp" line="274"/> <location filename="../main.cpp" line="328"/>
<source>Path: &quot;%1&quot;</source> <source>Path: &quot;%1&quot;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="272"/> <location filename="../main.cpp" line="326"/>
<source>Failed to create a usable temporary directory</source> <source>Failed to create a usable temporary directory</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="273"/> <location filename="../main.cpp" line="327"/>
<source>Another application may be locking the directory</source> <source>Another application may be locking the directory</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="306"/> <location filename="../main.cpp" line="360"/>
<source>Failed to create data directory</source> <source>Failed to create data directory</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="307"/> <location filename="../main.cpp" line="361"/>
<source>path: &quot;%1&quot;</source> <source>path: &quot;%1&quot;</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="362"/> <location filename="../main.cpp" line="416"/>
<source>Shared memory error</source> <source>Shared memory error</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
<location filename="../main.cpp" line="363"/> <location filename="../main.cpp" line="417"/>
<source>Unable to create shared memory segment</source> <source>Unable to create shared memory segment</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>

View File

@ -63,7 +63,7 @@ void AbstractLogWindow::impl::delete_QSOs ()
&& MessageBox::Yes == MessageBox::query_message (self_ && MessageBox::Yes == MessageBox::query_message (self_
, tr ("Confirm Delete") , tr ("Confirm Delete")
, tr ("Are you sure you want to delete the %n " , tr ("Are you sure you want to delete the %n "
"selected QSO(s) from the log", "" "selected QSO(s) from the log?", ""
, row_indexes.size ()))) , row_indexes.size ())))
{ {
// We must work with source model indexes because we don't want row // We must work with source model indexes because we don't want row

View File

@ -22,10 +22,11 @@ HelpTextWindow::HelpTextWindow (QString const& title, QString const& file_name,
, tr ("Error: %1").arg (source.errorString ())); , tr ("Error: %1").arg (source.errorString ()));
return; return;
} }
setText (QTextStream {&source}.readAll ());
setWindowTitle(QApplication::applicationName () + " - " + title); setWindowTitle(QApplication::applicationName () + " - " + title);
setMargin (10); setMargin (10);
setBackgroundRole (QPalette::Base); setBackgroundRole (QPalette::Base);
setAutoFillBackground (true); setAutoFillBackground (true);
setStyleSheet (font_as_stylesheet (font)); setStyleSheet (font_as_stylesheet (font));
setText (QTextStream {&source}.readAll ());
setMinimumSize (sizeHint ());
} }

View File

@ -496,8 +496,6 @@ void DisplayText::displayFoxToBeCalled(QString t, QColor bg, QColor fg)
namespace namespace
{ {
void update_selection (QTextCursor& cursor, QColor const& bg, QColor const& fg) void update_selection (QTextCursor& cursor, QColor const& bg, QColor const& fg)
{
if (!cursor.isNull ())
{ {
QTextCharFormat format {cursor.charFormat ()}; QTextCharFormat format {cursor.charFormat ()};
if (bg.isValid ()) if (bg.isValid ())
@ -518,11 +516,8 @@ namespace
} }
cursor.mergeCharFormat (format); cursor.mergeCharFormat (format);
} }
}
void reset_selection (QTextCursor& cursor) void reset_selection (QTextCursor& cursor)
{
if (!cursor.isNull ())
{ {
// restore previous text format, we rely on the text // restore previous text format, we rely on the text
// char format at he start of the selection being the // char format at he start of the selection being the
@ -532,18 +527,53 @@ namespace
cursor.setCharFormat (c2.charFormat ()); cursor.setCharFormat (c2.charFormat ());
} }
} }
namespace
{
QString get_timestamp (QTextCursor& cursor)
{
QString timestamp;
if (cursor.movePosition (QTextCursor::PreviousCharacter)
&& cursor.movePosition (QTextCursor::StartOfLine)
&& cursor.movePosition (QTextCursor::EndOfWord, QTextCursor::KeepAnchor)
&& cursor.hasSelection ())
{
timestamp = cursor.selectedText ();
cursor.movePosition (QTextCursor::StartOfLine);
}
return timestamp;
}
} }
void DisplayText::highlight_callsign (QString const& callsign, QColor const& bg, void DisplayText::highlight_callsign (QString const& callsign, QColor const& bg,
QColor const& fg, bool last_only) QColor const& fg, bool last_period_only)
{ {
// qDebug () << "DisplayText::highlight_callsign: callsign:" << callsign << "last period:" << last_period_only;
if (!callsign.size ())
{
return;
}
QRegularExpression target {QString {"<?"} + callsign + QString {">?"}, QRegularExpression::DontCaptureOption};
QTextCharFormat old_format {currentCharFormat ()}; QTextCharFormat old_format {currentCharFormat ()};
QTextCursor cursor {document ()}; QTextCursor cursor {document ()};
if (last_only) if (last_period_only)
{ {
// highlight each instance of the given callsign (word) in the
// current period
cursor.movePosition (QTextCursor::End); cursor.movePosition (QTextCursor::End);
cursor = document ()->find (callsign, cursor QTextCursor period_start {cursor};
QTextCursor prior {cursor};
auto period_timestamp = get_timestamp (period_start);
while (period_timestamp.size () && period_timestamp == get_timestamp (prior))
{
period_start = prior;
}
while (!cursor.isNull () && cursor > period_start)
{
cursor = document ()->find (target, cursor
, QTextDocument::FindBackward | QTextDocument::FindWholeWords); , QTextDocument::FindBackward | QTextDocument::FindWholeWords);
if (!cursor.isNull () && cursor.hasSelection ())
{
if (bg.isValid () || fg.isValid ()) if (bg.isValid () || fg.isValid ())
{ {
update_selection (cursor, bg, fg); update_selection (cursor, bg, fg);
@ -553,6 +583,8 @@ void DisplayText::highlight_callsign (QString const& callsign, QColor const& bg,
reset_selection (cursor); reset_selection (cursor);
} }
} }
}
}
else else
{ {
auto pos = highlighted_calls_.find (callsign); auto pos = highlighted_calls_.find (callsign);
@ -569,20 +601,26 @@ void DisplayText::highlight_callsign (QString const& callsign, QColor const& bg,
} }
while (!cursor.isNull ()) while (!cursor.isNull ())
{ {
cursor = document ()->find (callsign, cursor, QTextDocument::FindWholeWords); cursor = document ()->find (target, cursor, QTextDocument::FindWholeWords);
if (!cursor.isNull () && cursor.hasSelection ())
{
update_selection (cursor, bg, fg); update_selection (cursor, bg, fg);
} }
} }
}
else if (pos != highlighted_calls_.end ()) else if (pos != highlighted_calls_.end ())
{ {
highlighted_calls_.erase (pos); highlighted_calls_.erase (pos);
QTextCursor cursor {document ()}; QTextCursor cursor {document ()};
while (!cursor.isNull ()) while (!cursor.isNull ())
{ {
cursor = document ()->find (callsign, cursor, QTextDocument::FindWholeWords); cursor = document ()->find (target, cursor, QTextDocument::FindWholeWords);
if (!cursor.isNull () && cursor.hasSelection ())
{
reset_selection (cursor); reset_selection (cursor);
} }
} }
} }
}
setCurrentCharFormat (old_format); setCurrentCharFormat (old_format);
} }

View File

@ -43,7 +43,7 @@ public:
Q_SLOT void appendText (QString const& text, QColor bg = QColor {}, QColor fg = QColor {} Q_SLOT void appendText (QString const& text, QColor bg = QColor {}, QColor fg = QColor {}
, QString const& call1 = QString {}, QString const& call2 = QString {}); , QString const& call1 = QString {}, QString const& call2 = QString {});
Q_SLOT void erase (); Q_SLOT void erase ();
Q_SLOT void highlight_callsign (QString const& callsign, QColor const& bg, QColor const& fg, bool last_only); Q_SLOT void highlight_callsign (QString const& callsign, QColor const& bg, QColor const& fg, bool last_period_only);
private: private:
void mouseDoubleClickEvent (QMouseEvent *) override; void mouseDoubleClickEvent (QMouseEvent *) override;

View File

@ -294,7 +294,6 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
m_saveAll {false}, m_saveAll {false},
m_widebandDecode {false}, m_widebandDecode {false},
m_dataAvailable {false}, m_dataAvailable {false},
m_blankLine {false},
m_decodedText2 {false}, m_decodedText2 {false},
m_freeText {false}, m_freeText {false},
m_sentFirst73 {false}, m_sentFirst73 {false},
@ -327,7 +326,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
m_nsendingsh {0}, m_nsendingsh {0},
m_onAirFreq0 {0.0}, m_onAirFreq0 {0.0},
m_first_error {true}, m_first_error {true},
tx_status_label {"Receiving"}, tx_status_label {tr ("Receiving")},
wsprNet {new WSPRNet {&m_network_manager, this}}, wsprNet {new WSPRNet {&m_network_manager, this}},
m_appDir {QApplication::applicationDirPath ()}, m_appDir {QApplication::applicationDirPath ()},
m_cqStr {""}, m_cqStr {""},
@ -802,8 +801,6 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
SLOT(setFreq4(int,int))); SLOT(setFreq4(int,int)));
decodeBusy(false); decodeBusy(false);
QString t1[19]={"1 mW","2 mW","5 mW","10 mW","20 mW","50 mW","100 mW","200 mW","500 mW",
"1 W","2 W","5 W","10 W","20 W","50 W","100 W","200 W","500 W","1 kW"};
m_msg[0][0]=0; m_msg[0][0]=0;
ui->labDXped->setVisible(false); ui->labDXped->setVisible(false);
@ -812,13 +809,10 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
ui->labNextCall->setVisible(false); ui->labNextCall->setVisible(false);
ui->labNextCall->setToolTip(""); //### Possibly temporary ? ### ui->labNextCall->setToolTip(""); //### Possibly temporary ? ###
for(int i=0; i<19; i++) { //Initialize dBm values char const * const power[] = {"1 mW","2 mW","5 mW","10 mW","20 mW","50 mW","100 mW","200 mW","500 mW",
float dbm=(10.0*i)/3.0; "1 W","2 W","5 W","10 W","20 W","50 W","100 W","200 W","500 W","1 kW"};
int ndbm=int(dbm+0.5); for(auto i = 0u; i < sizeof power / sizeof power[0]; ++i) { //Initialize dBm values
QString t; ui->TxPowerComboBox->addItem (QString {"%1 dBm %2"}.arg (int (10. * i / 3.)).arg (power[i]));
t = t.asprintf("%d dBm ",ndbm);
t+=t1[i];
ui->TxPowerComboBox->addItem(t);
} }
m_dateTimeRcvdRR73=QDateTime::currentDateTimeUtc(); m_dateTimeRcvdRR73=QDateTime::currentDateTimeUtc();
@ -826,7 +820,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
ui->labAz->setStyleSheet("border: 0px;"); ui->labAz->setStyleSheet("border: 0px;");
ui->labAz->setText(""); ui->labAz->setText("");
auto t = "UTC dB DT Freq Message"; auto t = "UTC dB DT Freq " + tr ("Message");
ui->decodedTextLabel->setText(t); ui->decodedTextLabel->setText(t);
ui->decodedTextLabel2->setText(t); ui->decodedTextLabel2->setText(t);
readSettings(); //Restore user's setup parameters readSettings(); //Restore user's setup parameters
@ -936,7 +930,7 @@ MainWindow::MainWindow(QDir const& temp_directory, bool multiple,
m_saveDecoded=ui->actionSave_decoded->isChecked(); m_saveDecoded=ui->actionSave_decoded->isChecked();
m_saveAll=ui->actionSave_all->isChecked(); m_saveAll=ui->actionSave_all->isChecked();
ui->sbTxPercent->setValue(m_pctx); ui->sbTxPercent->setValue(m_pctx);
ui->TxPowerComboBox->setCurrentIndex(int(0.3*(m_dBm + 30.0)+0.2)); ui->TxPowerComboBox->setCurrentIndex(int(.3 * m_dBm + .2));
ui->cbUploadWSPR_Spots->setChecked(m_uploadSpots); ui->cbUploadWSPR_Spots->setChecked(m_uploadSpots);
if((m_ndepth&7)==1) ui->actionQuickDecode->setChecked(true); if((m_ndepth&7)==1) ui->actionQuickDecode->setChecked(true);
if((m_ndepth&7)==2) ui->actionMediumDecode->setChecked(true); if((m_ndepth&7)==2) ui->actionMediumDecode->setChecked(true);
@ -1200,7 +1194,7 @@ void MainWindow::readSettings()
m_ndepth=m_settings->value("NDepth",3).toInt(); m_ndepth=m_settings->value("NDepth",3).toInt();
m_pctx=m_settings->value("PctTx",20).toInt(); m_pctx=m_settings->value("PctTx",20).toInt();
m_dBm=m_settings->value("dBm",37).toInt(); m_dBm=m_settings->value("dBm",37).toInt();
m_send_RR73=m_settings->value("RR73",37).toBool(); m_send_RR73=m_settings->value("RR73",false).toBool();
if(m_send_RR73) { if(m_send_RR73) {
m_send_RR73=false; m_send_RR73=false;
on_txrb4_doubleClicked(); on_txrb4_doubleClicked();
@ -1426,15 +1420,9 @@ void MainWindow::dataSink(qint64 frames)
if(m_ihsym==40 and m_decoderBusy) { if(m_ihsym==40 and m_decoderBusy) {
qDebug() << "Clearing hung decoder status"; qDebug() << "Clearing hung decoder status";
decodeDone(); //Clear a hung decoder status decodeDone(); //Clear a hung decoder status
m_blankLine=true;
} }
} }
/*
if(m_ihsym==m_hsymStop or (m_mode=="FT8" and m_ihsym==m_earlyDecode and !m_diskData) or
(m_mode=="FT8" and m_ihsym==m_earlyDecode2 and !m_diskData)) {
*/
bool bCallDecoder=false; bool bCallDecoder=false;
if(m_ihsym==m_hsymStop) bCallDecoder=true; if(m_ihsym==m_hsymStop) bCallDecoder=true;
if(m_mode=="FT8" and !m_diskData) { if(m_mode=="FT8" and !m_diskData) {
@ -1786,8 +1774,8 @@ void MainWindow::on_actionSettings_triggered() //Setup Dialog
m_config.transceiver_online (); m_config.transceiver_online ();
if(!m_bFastMode) setXIT (ui->TxFreqSpinBox->value ()); if(!m_bFastMode) setXIT (ui->TxFreqSpinBox->value ());
if(m_config.single_decode() or m_mode=="JT4") { if(m_config.single_decode() or m_mode=="JT4") {
ui->label_6->setText("Single-Period Decodes"); ui->label_6->setText(tr ("Single-Period Decodes"));
ui->label_7->setText("Average Decodes"); ui->label_7->setText(tr ("Average Decodes"));
} }
update_watchdog_label (); update_watchdog_label ();
@ -2109,7 +2097,6 @@ void MainWindow::keyPressEvent (QKeyEvent * e)
case Qt::Key_Z: //### Recover from hung decode() ?? ### case Qt::Key_Z: //### Recover from hung decode() ?? ###
if(e->modifiers() & Qt::AltModifier) { if(e->modifiers() & Qt::AltModifier) {
decodeDone(); decodeDone();
m_blankLine=true;
return; return;
} }
break; case Qt::Key_PageUp: break; case Qt::Key_PageUp:
@ -2299,10 +2286,13 @@ void MainWindow::setup_status_bar (bool vhf)
mode_label.setStyleSheet ("QLabel{background-color: #99ff33}"); mode_label.setStyleSheet ("QLabel{background-color: #99ff33}");
} else if ("MSK144" == m_mode) { } else if ("MSK144" == m_mode) {
mode_label.setStyleSheet ("QLabel{background-color: #ff6666}"); mode_label.setStyleSheet ("QLabel{background-color: #ff6666}");
} else if ("FT4" == m_mode) {
mode_label.setStyleSheet ("QLabel{background-color: #ff0099}");
} else if ("FT8" == m_mode) { } else if ("FT8" == m_mode) {
mode_label.setStyleSheet ("QLabel{background-color: #6699ff}"); mode_label.setStyleSheet ("QLabel{background-color: #6699ff}");
} else if ("FreqCal" == m_mode) { } else if ("FreqCal" == m_mode) {
mode_label.setStyleSheet ("QLabel{background-color: #ff9933}"); } mode_label.setStyleSheet ("QLabel{background-color: #ff9933}");
}
last_tx_label.setText (QString {}); last_tx_label.setText (QString {});
if (m_mode.contains (QRegularExpression {R"(^(Echo|ISCAT))"})) { if (m_mode.contains (QRegularExpression {R"(^(Echo|ISCAT))"})) {
if (band_hopping_label.isVisible ()) statusBar ()->removeWidget (&band_hopping_label); if (band_hopping_label.isVisible ()) statusBar ()->removeWidget (&band_hopping_label);
@ -2829,7 +2819,6 @@ void MainWindow::on_DecodeButton_clicked (bool /* checked */) //Decode request
if(!m_mode.startsWith ("WSPR") && !m_decoderBusy) { if(!m_mode.startsWith ("WSPR") && !m_decoderBusy) {
dec_data.params.newdat=0; dec_data.params.newdat=0;
dec_data.params.nagain=1; dec_data.params.nagain=1;
m_blankLine=false; // don't insert the separator again
decode(); decode();
} }
} }
@ -3120,11 +3109,6 @@ void MainWindow::decodeDone ()
ui->DecodeButton->setChecked (false); ui->DecodeButton->setChecked (false);
decodeBusy(false); decodeBusy(false);
m_RxLog=0; m_RxLog=0;
m_blankLine=true;
if(m_mode=="FT8") {
if(dec_data.params.nzhsym==m_earlyDecode) m_blankLine=false;
if(dec_data.params.nzhsym==m_earlyDecode2) m_blankLine=false;
}
if(SpecOp::FOX == m_config.special_op_id()) houndCallers(); if(SpecOp::FOX == m_config.special_op_id()) houndCallers();
to_jt9(m_ihsym,-1,1); //Tell jt9 we know it has finished to_jt9(m_ihsym,-1,1); //Tell jt9 we know it has finished
@ -3180,13 +3164,19 @@ void MainWindow::readFromStdout() //readFromStdout
if(navg>=2) bAvgMsg=true; if(navg>=2) bAvgMsg=true;
} }
write_all("Rx",line_read.trimmed()); write_all("Rx",line_read.trimmed());
if (m_config.insert_blank () && m_blankLine && SpecOp::FOX != m_config.special_op_id()) { int ntime=6;
if(m_TRperiod>=60) ntime=4;
if (line_read.left(ntime) != m_tBlankLine) {
ui->decodedTextBrowser->new_period ();
if (m_config.insert_blank ()
&& SpecOp::FOX != m_config.special_op_id()) {
QString band; QString band;
if((QDateTime::currentMSecsSinceEpoch() / 1000 - m_secBandChanged) > 4*int(m_TRperiod)/4) { if((QDateTime::currentMSecsSinceEpoch() / 1000 - m_secBandChanged) > 4*int(m_TRperiod)/4) {
band = ' ' + m_config.bands ()->find (m_freqNominal); band = ' ' + m_config.bands ()->find (m_freqNominal);
} }
ui->decodedTextBrowser->insertLineSpacer (band.rightJustified (40, '-')); ui->decodedTextBrowser->insertLineSpacer (band.rightJustified (40, '-'));
m_blankLine = false; }
m_tBlankLine = line_read.left(ntime);
} }
DecodedText decodedtext0 {QString::fromUtf8(line_read.constData())}; DecodedText decodedtext0 {QString::fromUtf8(line_read.constData())};
@ -3504,11 +3494,6 @@ void MainWindow::decodeBusy(bool b) //decodeBusy()
{ {
if (!b) { if (!b) {
m_optimizingProgress.reset (); m_optimizingProgress.reset ();
} else {
if (!m_decoderBusy)
{
ui->decodedTextBrowser->new_period ();
}
} }
m_decoderBusy=b; m_decoderBusy=b;
ui->DecodeButton->setEnabled(!b); ui->DecodeButton->setEnabled(!b);
@ -4123,12 +4108,11 @@ void MainWindow::guiUpdate()
} else if(m_monitoring) { } else if(m_monitoring) {
if (!m_tx_watchdog) { if (!m_tx_watchdog) {
tx_status_label.setStyleSheet("QLabel{background-color: #00ff00}"); tx_status_label.setStyleSheet("QLabel{background-color: #00ff00}");
QString t; auto t = tr ("Receiving");
t="Receiving";
if(m_mode=="MSK144") { if(m_mode=="MSK144") {
int npct=int(100.0*m_fCPUmskrtd/0.298667); int npct=int(100.0*m_fCPUmskrtd/0.298667);
if(npct>90) tx_status_label.setStyleSheet("QLabel{background-color: #ff0000}"); if(npct>90) tx_status_label.setStyleSheet("QLabel{background-color: #ff0000}");
t = t.asprintf("Receiving %2d%%",npct); t += QString {" %1%"}.arg (npct, 2);
} }
tx_status_label.setText (t); tx_status_label.setText (t);
} }
@ -4228,7 +4212,7 @@ void MainWindow::stopTx2()
WSPR_scheduling (); WSPR_scheduling ();
m_ntr=0; m_ntr=0;
} }
last_tx_label.setText("Last Tx: " + m_currentMessage.trimmed()); last_tx_label.setText(tr ("Last Tx: %1").arg (m_currentMessage.trimmed()));
} }
void MainWindow::ba2msg(QByteArray ba, char message[]) //ba2msg() void MainWindow::ba2msg(QByteArray ba, char message[]) //ba2msg()
@ -4451,6 +4435,7 @@ void MainWindow::doubleClickOnCall(Qt::KeyboardModifiers modifiers)
if(m_mode=="ISCAT") { if(m_mode=="ISCAT") {
MessageBox::information_message (this, MessageBox::information_message (this,
"Double-click not available for ISCAT mode"); "Double-click not available for ISCAT mode");
return;
} }
if(m_decodedText2) { if(m_decodedText2) {
cursor=ui->decodedTextBrowser->textCursor(); cursor=ui->decodedTextBrowser->textCursor();
@ -5147,7 +5132,7 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional)
} }
if(SpecOp::EU_VHF==m_config.special_op_id()) { if(SpecOp::EU_VHF==m_config.special_op_id()) {
QString a; QString a;
t="<" + t0.split(" ").at(0) + "> <" + t0.split(" ").at(1) + "> "; t="<" + t0s.split(" ").at(0) + "> <" + t0s.split(" ").at(1) + "> ";
a = a.asprintf("%4.4d ",ui->sbSerialNumber->value()); a = a.asprintf("%4.4d ",ui->sbSerialNumber->value());
sent=rs + a + m_config.my_grid(); sent=rs + a + m_config.my_grid();
} }
@ -5233,7 +5218,8 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional)
case Configuration::type_2_msg_1_full: case Configuration::type_2_msg_1_full:
msgtype(t + my_grid, ui->tx1); msgtype(t + my_grid, ui->tx1);
if (!eme_short_codes) { if (!eme_short_codes) {
if((m_mode=="MSK144" || m_mode=="FT8") && SpecOp::NA_VHF == m_config.special_op_id()) { if((m_mode=="MSK144" || m_mode=="FT8" || m_mode=="FT4") &&
SpecOp::NA_VHF == m_config.special_op_id()) {
msgtype(t + "R " + my_grid, ui->tx3); msgtype(t + "R " + my_grid, ui->tx3);
} else { } else {
msgtype(t + "R" + rpt, ui->tx3); msgtype(t + "R" + rpt, ui->tx3);
@ -5245,7 +5231,8 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional)
break; break;
case Configuration::type_2_msg_3_full: case Configuration::type_2_msg_3_full:
if ((m_mode=="MSK144" || m_mode=="FT8") && SpecOp::NA_VHF == m_config.special_op_id()) { if ((m_mode=="MSK144" || m_mode=="FT8" || m_mode=="FT4") &&
SpecOp::NA_VHF == m_config.special_op_id()) {
msgtype(t + "R " + my_grid, ui->tx3); msgtype(t + "R " + my_grid, ui->tx3);
msgtype(t + "RRR", ui->tx4); msgtype(t + "RRR", ui->tx4);
} else { } else {
@ -5260,7 +5247,8 @@ void MainWindow::genStdMsgs(QString rpt, bool unconditional)
case Configuration::type_2_msg_5_only: case Configuration::type_2_msg_5_only:
msgtype(t00 + my_grid, ui->tx1); msgtype(t00 + my_grid, ui->tx1);
if (!eme_short_codes) { if (!eme_short_codes) {
if ((m_mode=="MSK144" || m_mode=="FT8") && SpecOp::NA_VHF == m_config.special_op_id()) { if ((m_mode=="MSK144" || m_mode=="FT8" || m_mode=="FT4") &&
SpecOp::NA_VHF == m_config.special_op_id()) {
msgtype(t + "R " + my_grid, ui->tx3); msgtype(t + "R " + my_grid, ui->tx3);
msgtype(t + "RRR", ui->tx4); msgtype(t + "RRR", ui->tx4);
} else { } else {
@ -5474,7 +5462,8 @@ void MainWindow::msgtype(QString t, QLineEdit* tx) //msgtype()
//### Check this stuff ### //### Check this stuff ###
if(itype==7 and m_config.enable_VHF_features() and m_mode=="JT65") shortMsg=true; if(itype==7 and m_config.enable_VHF_features() and m_mode=="JT65") shortMsg=true;
if(m_mode=="MSK144" and t.mid(0,1)=="<") text=false; if(m_mode=="MSK144" and t.mid(0,1)=="<") text=false;
if((m_mode=="MSK144" or m_mode=="FT8") and SpecOp::NA_VHF==m_config.special_op_id()) { if((m_mode=="MSK144" or m_mode=="FT8" or m_mode=="FT4") and
SpecOp::NA_VHF==m_config.special_op_id()) {
int i0=t.trimmed().length()-7; int i0=t.trimmed().length()-7;
if(t.mid(i0,3)==" R ") text=false; if(t.mid(i0,3)==" R ") text=false;
} }
@ -5734,7 +5723,6 @@ void MainWindow::displayWidgets(qint64 n)
if(i==12) ui->pbR2T->setVisible(b); if(i==12) ui->pbR2T->setVisible(b);
if(i==13) ui->pbT2R->setVisible(b); if(i==13) ui->pbT2R->setVisible(b);
if(i==14) ui->cbHoldTxFreq->setVisible(b); if(i==14) ui->cbHoldTxFreq->setVisible(b);
if(i==14 and (!b)) ui->cbHoldTxFreq->setChecked(false);
if(i==15) ui->sbSubmode->setVisible(b); if(i==15) ui->sbSubmode->setVisible(b);
if(i==16) ui->syncSpinBox->setVisible(b); if(i==16) ui->syncSpinBox->setVisible(b);
if(i==17) ui->WSPR_controls_widget->setVisible(b); if(i==17) ui->WSPR_controls_widget->setVisible(b);
@ -5796,13 +5784,13 @@ void MainWindow::on_actionFT4_triggered()
// ui->cbAutoSeq->setChecked(false); // ui->cbAutoSeq->setChecked(false);
m_fastGraph->hide(); m_fastGraph->hide();
m_wideGraph->show(); m_wideGraph->show();
ui->decodedTextLabel2->setText(" UTC dB DT Freq Message"); ui->decodedTextLabel2->setText(" UTC dB DT Freq " + tr ("Message"));
m_wideGraph->setPeriod(m_TRperiod,m_nsps); m_wideGraph->setPeriod(m_TRperiod,m_nsps);
m_modulator->setTRPeriod(m_TRperiod); // TODO - not thread safe m_modulator->setTRPeriod(m_TRperiod); // TODO - not thread safe
m_detector->setTRPeriod(m_TRperiod); // TODO - not thread safe m_detector->setTRPeriod(m_TRperiod); // TODO - not thread safe
ui->label_7->setText("Rx Frequency"); ui->label_7->setText(tr ("Rx Frequency"));
ui->label_6->setText("Band Activity"); ui->label_6->setText(tr ("Band Activity"));
ui->decodedTextLabel->setText( " UTC dB DT Freq Message"); ui->decodedTextLabel->setText( " UTC dB DT Freq " + tr ("Message"));
displayWidgets(nWidgets("111010000100111000010000000110001")); displayWidgets(nWidgets("111010000100111000010000000110001"));
ui->txrb2->setEnabled(true); ui->txrb2->setEnabled(true);
ui->txrb4->setEnabled(true); ui->txrb4->setEnabled(true);
@ -5840,17 +5828,17 @@ void MainWindow::on_actionFT8_triggered()
m_TRperiod=15.0; m_TRperiod=15.0;
m_fastGraph->hide(); m_fastGraph->hide();
m_wideGraph->show(); m_wideGraph->show();
ui->decodedTextLabel2->setText(" UTC dB DT Freq Message"); ui->decodedTextLabel2->setText(" UTC dB DT Freq " + tr ("Message"));
m_wideGraph->setPeriod(m_TRperiod,m_nsps); m_wideGraph->setPeriod(m_TRperiod,m_nsps);
m_modulator->setTRPeriod(m_TRperiod); // TODO - not thread safe m_modulator->setTRPeriod(m_TRperiod); // TODO - not thread safe
m_detector->setTRPeriod(m_TRperiod); // TODO - not thread safe m_detector->setTRPeriod(m_TRperiod); // TODO - not thread safe
ui->label_7->setText("Rx Frequency"); ui->label_7->setText(tr ("Rx Frequency"));
if(SpecOp::FOX==m_config.special_op_id()) { if(SpecOp::FOX==m_config.special_op_id()) {
ui->label_6->setText("Stations calling DXpedition " + m_config.my_callsign()); ui->label_6->setText(tr ("Stations calling DXpedition %1").arg (m_config.my_callsign()));
ui->decodedTextLabel->setText( "Call Grid dB Freq Dist Age Continent"); ui->decodedTextLabel->setText( "Call Grid dB Freq Dist Age Continent");
} else { } else {
ui->label_6->setText("Band Activity"); ui->label_6->setText(tr ("Band Activity"));
ui->decodedTextLabel->setText( " UTC dB DT Freq Message"); ui->decodedTextLabel->setText( " UTC dB DT Freq " + tr ("Message"));
} }
displayWidgets(nWidgets("111010000100111000010000100110001")); displayWidgets(nWidgets("111010000100111000010000100110001"));
ui->txrb2->setEnabled(true); ui->txrb2->setEnabled(true);
@ -5871,7 +5859,7 @@ void MainWindow::on_actionFT8_triggered()
ui->tabWidget->setCurrentIndex(2); ui->tabWidget->setCurrentIndex(2);
ui->TxFreqSpinBox->setValue(300); ui->TxFreqSpinBox->setValue(300);
displayWidgets(nWidgets("111010000100111000010000000000100")); displayWidgets(nWidgets("111010000100111000010000000000100"));
ui->labDXped->setText("Fox"); ui->labDXped->setText(tr ("Fox"));
on_fox_log_action_triggered(); on_fox_log_action_triggered();
} }
if(SpecOp::HOUND == m_config.special_op_id()) { if(SpecOp::HOUND == m_config.special_op_id()) {
@ -5881,7 +5869,7 @@ void MainWindow::on_actionFT8_triggered()
ui->tabWidget->setCurrentIndex(0); ui->tabWidget->setCurrentIndex(0);
ui->cbHoldTxFreq->setChecked(true); ui->cbHoldTxFreq->setChecked(true);
displayWidgets(nWidgets("111010000100110000010000000000110")); displayWidgets(nWidgets("111010000100110000010000000000110"));
ui->labDXped->setText("Hound"); ui->labDXped->setText(tr ("Hound"));
ui->txrb1->setChecked(true); ui->txrb1->setChecked(true);
ui->txrb2->setEnabled(false); ui->txrb2->setEnabled(false);
ui->txrb4->setEnabled(false); ui->txrb4->setEnabled(false);
@ -5945,10 +5933,10 @@ void MainWindow::on_actionJT4_triggered()
m_bFast9=false; m_bFast9=false;
setup_status_bar (bVHF); setup_status_bar (bVHF);
ui->sbSubmode->setMaximum(6); ui->sbSubmode->setMaximum(6);
ui->label_6->setText("Single-Period Decodes"); ui->label_6->setText(tr ("Single-Period Decodes"));
ui->label_7->setText("Average Decodes"); ui->label_7->setText(tr ("Average Decodes"));
ui->decodedTextLabel->setText("UTC dB DT Freq Message"); ui->decodedTextLabel->setText("UTC dB DT Freq " + tr ("Message"));
ui->decodedTextLabel2->setText("UTC dB DT Freq Message"); ui->decodedTextLabel2->setText("UTC dB DT Freq " + tr ("Message"));
if(bVHF) { if(bVHF) {
ui->sbSubmode->setValue(m_nSubMode); ui->sbSubmode->setValue(m_nSubMode);
} else { } else {
@ -5996,19 +5984,19 @@ void MainWindow::on_actionJT9_triggered()
m_fastGraph->show(); m_fastGraph->show();
ui->TxFreqSpinBox->setValue(700); ui->TxFreqSpinBox->setValue(700);
ui->RxFreqSpinBox->setValue(700); ui->RxFreqSpinBox->setValue(700);
ui->decodedTextLabel->setText("UTC dB T Freq Message"); ui->decodedTextLabel->setText("UTC dB T Freq " + tr ("Message"));
ui->decodedTextLabel2->setText("UTC dB T Freq Message"); ui->decodedTextLabel2->setText("UTC dB T Freq " + tr ("Message"));
} else { } else {
ui->cbAutoSeq->setChecked(false); ui->cbAutoSeq->setChecked(false);
m_TRperiod=60.0; m_TRperiod=60.0;
ui->decodedTextLabel->setText("UTC dB DT Freq Message"); ui->decodedTextLabel->setText("UTC dB DT Freq " + tr ("Message"));
ui->decodedTextLabel2->setText("UTC dB DT Freq Message"); ui->decodedTextLabel2->setText("UTC dB DT Freq " + tr ("Message"));
} }
m_wideGraph->setPeriod(m_TRperiod,m_nsps); m_wideGraph->setPeriod(m_TRperiod,m_nsps);
m_modulator->setTRPeriod(m_TRperiod); // TODO - not thread safe m_modulator->setTRPeriod(m_TRperiod); // TODO - not thread safe
m_detector->setTRPeriod(m_TRperiod); // TODO - not thread safe m_detector->setTRPeriod(m_TRperiod); // TODO - not thread safe
ui->label_6->setText("Band Activity"); ui->label_6->setText(tr ("Band Activity"));
ui->label_7->setText("Rx Frequency"); ui->label_7->setText(tr ("Rx Frequency"));
if(bVHF) { if(bVHF) {
displayWidgets(nWidgets("111110101000111110010000000000000")); displayWidgets(nWidgets("111110101000111110010000000000000"));
} else { } else {
@ -6047,10 +6035,10 @@ void MainWindow::on_actionJT9_JT65_triggered()
m_bFastMode=false; m_bFastMode=false;
m_bFast9=false; m_bFast9=false;
ui->sbSubmode->setValue(0); ui->sbSubmode->setValue(0);
ui->label_6->setText("Band Activity"); ui->label_6->setText(tr ("Band Activity"));
ui->label_7->setText("Rx Frequency"); ui->label_7->setText(tr ("Rx Frequency"));
ui->decodedTextLabel->setText("UTC dB DT Freq Message"); ui->decodedTextLabel->setText("UTC dB DT Freq " + tr ("Message"));
ui->decodedTextLabel2->setText("UTC dB DT Freq Message"); ui->decodedTextLabel2->setText("UTC dB DT Freq " + tr ("Message"));
displayWidgets(nWidgets("111010000001111000010000000000001")); displayWidgets(nWidgets("111010000001111000010000000000001"));
fast_config(false); fast_config(false);
statusChanged(); statusChanged();
@ -6091,12 +6079,12 @@ void MainWindow::on_actionJT65_triggered()
ui->sbSubmode->setMaximum(2); ui->sbSubmode->setMaximum(2);
if(bVHF) { if(bVHF) {
ui->sbSubmode->setValue(m_nSubMode); ui->sbSubmode->setValue(m_nSubMode);
ui->label_6->setText("Single-Period Decodes"); ui->label_6->setText(tr ("Single-Period Decodes"));
ui->label_7->setText("Average Decodes"); ui->label_7->setText(tr ("Average Decodes"));
} else { } else {
ui->sbSubmode->setValue(0); ui->sbSubmode->setValue(0);
ui->label_6->setText("Band Activity"); ui->label_6->setText(tr ("Band Activity"));
ui->label_7->setText("Rx Frequency"); ui->label_7->setText(tr ("Rx Frequency"));
} }
if(bVHF) { if(bVHF) {
displayWidgets(nWidgets("111110010000110110101100010000000")); displayWidgets(nWidgets("111110010000110110101100010000000"));
@ -6215,13 +6203,13 @@ void MainWindow::on_actionMSK144_triggered()
ui->RxFreqSpinBox->setMinimum(1400); ui->RxFreqSpinBox->setMinimum(1400);
ui->RxFreqSpinBox->setMaximum(1600); ui->RxFreqSpinBox->setMaximum(1600);
ui->RxFreqSpinBox->setSingleStep(10); ui->RxFreqSpinBox->setSingleStep(10);
ui->decodedTextLabel->setText("UTC dB T Freq Message"); ui->decodedTextLabel->setText("UTC dB T Freq " + tr ("Message"));
ui->decodedTextLabel2->setText("UTC dB T Freq Message"); ui->decodedTextLabel2->setText("UTC dB T Freq " + tr ("Message"));
m_modulator->setTRPeriod(m_TRperiod); // TODO - not thread safe m_modulator->setTRPeriod(m_TRperiod); // TODO - not thread safe
m_detector->setTRPeriod(m_TRperiod); // TODO - not thread safe m_detector->setTRPeriod(m_TRperiod); // TODO - not thread safe
m_fastGraph->setTRPeriod(m_TRperiod); m_fastGraph->setTRPeriod(m_TRperiod);
ui->label_6->setText("Band Activity"); ui->label_6->setText(tr ("Band Activity"));
ui->label_7->setText("Tx Messages"); ui->label_7->setText(tr ("Tx Messages"));
ui->actionMSK144->setChecked(true); ui->actionMSK144->setChecked(true);
ui->rptSpinBox->setMinimum(-8); ui->rptSpinBox->setMinimum(-8);
ui->rptSpinBox->setMaximum(24); ui->rptSpinBox->setMaximum(24);
@ -6401,7 +6389,7 @@ void MainWindow::WSPR_config(bool b)
} }
m_bSimplex = true; m_bSimplex = true;
} else { } else {
ui->decodedTextLabel->setText("UTC dB DT Freq Message"); ui->decodedTextLabel->setText("UTC dB DT Freq " + tr ("Message"));
m_bSimplex = false; m_bSimplex = false;
} }
enable_DXCC_entity (m_config.DXCC ()); // sets text window proportions and (re)inits the logbook enable_DXCC_entity (m_config.DXCC ()); // sets text window proportions and (re)inits the logbook
@ -7638,7 +7626,7 @@ void MainWindow::p1ReadFromStdout() //p1readFromStdout
if(!m_diskData) { if(!m_diskData) {
WSPR_history(m_dialFreqRxWSPR, m_nWSPRdecodes); WSPR_history(m_dialFreqRxWSPR, m_nWSPRdecodes);
if(m_nWSPRdecodes==0 and ui->band_hopping_group_box->isChecked()) { if(m_nWSPRdecodes==0 and ui->band_hopping_group_box->isChecked()) {
t = " Receiving " + m_mode + " ----------------------- " + t = " " + tr ("Receiving") + " " + m_mode + " ----------------------- " +
m_config.bands ()->find (m_dialFreqRxWSPR); m_config.bands ()->find (m_dialFreqRxWSPR);
t=WSPR_hhmm(-60) + ' ' + t.rightJustified (66, '-'); t=WSPR_hhmm(-60) + ' ' + t.rightJustified (66, '-');
ui->decodedTextBrowser->appendText(t); ui->decodedTextBrowser->appendText(t);
@ -7658,7 +7646,6 @@ void MainWindow::p1ReadFromStdout() //p1readFromStdout
} }
m_RxLog=0; m_RxLog=0;
m_startAnother=m_loopall; m_startAnother=m_loopall;
m_blankLine=true;
m_decoderBusy = false; m_decoderBusy = false;
statusUpdate (); statusUpdate ();
} else { } else {
@ -7710,12 +7697,15 @@ void MainWindow::p1ReadFromStdout() //p1readFromStdout
rxLine += t1; rxLine += t1;
} }
if (m_config.insert_blank () && m_blankLine) { if (rxLine.left (4) != m_tBlankLine) {
ui->decodedTextBrowser->new_period ();
if (m_config.insert_blank ()) {
QString band; QString band;
Frequency f=1000000.0*rxFields.at(3).toDouble()+0.5; Frequency f=1000000.0*rxFields.at(3).toDouble()+0.5;
band = ' ' + m_config.bands ()->find (f); band = ' ' + m_config.bands ()->find (f);
ui->decodedTextBrowser->appendText(band.rightJustified (71, '-')); ui->decodedTextBrowser->appendText(band.rightJustified (71, '-'));
m_blankLine = false; }
m_tBlankLine = rxLine.left(4);
} }
m_nWSPRdecodes += 1; m_nWSPRdecodes += 1;
ui->decodedTextBrowser->appendText(rxLine); ui->decodedTextBrowser->appendText(rxLine);
@ -7967,7 +7957,6 @@ void MainWindow::fastPick(int x0, int x1, int y)
if(!m_decoderBusy) { if(!m_decoderBusy) {
dec_data.params.newdat=0; dec_data.params.newdat=0;
dec_data.params.nagain=1; dec_data.params.nagain=1;
m_blankLine=false; // don't insert the separator again
m_nPick=1; m_nPick=1;
if(y > 120) m_nPick=2; if(y > 120) m_nPick=2;
m_t0Pick=x0/pixPerSecond; m_t0Pick=x0/pixPerSecond;
@ -8109,7 +8098,7 @@ void MainWindow::tx_watchdog (bool triggered)
if (m_tune) stop_tuning (); if (m_tune) stop_tuning ();
if (m_auto) auto_tx_mode (false); if (m_auto) auto_tx_mode (false);
tx_status_label.setStyleSheet ("QLabel{background-color: #ff0000}"); tx_status_label.setStyleSheet ("QLabel{background-color: #ff0000}");
tx_status_label.setText ("Runaway Tx watchdog"); tx_status_label.setText (tr ("Runaway Tx watchdog"));
QApplication::alert (this); QApplication::alert (this);
} }
else else
@ -8124,7 +8113,7 @@ void MainWindow::update_watchdog_label ()
{ {
if (m_config.watchdog () && !m_mode.startsWith ("WSPR")) if (m_config.watchdog () && !m_mode.startsWith ("WSPR"))
{ {
watchdog_label.setText (QString {"WD:%1m"}.arg (m_config.watchdog () - m_idleMinutes)); watchdog_label.setText (tr ("WD:%1m").arg (m_config.watchdog () - m_idleMinutes));
watchdog_label.setVisible (true); watchdog_label.setVisible (true);
} }
else else

View File

@ -486,7 +486,6 @@ private:
bool m_dataAvailable; bool m_dataAvailable;
bool m_bDecoded; bool m_bDecoded;
bool m_noSuffix; bool m_noSuffix;
bool m_blankLine;
bool m_decodedText2; bool m_decodedText2;
bool m_freeText; bool m_freeText;
bool m_sentFirst73; bool m_sentFirst73;
@ -494,6 +493,7 @@ private:
QString m_currentMessage; QString m_currentMessage;
int m_lastMessageType; int m_lastMessageType;
QString m_lastMessageSent; QString m_lastMessageSent;
QString m_tBlankLine;
bool m_bShMsgs; bool m_bShMsgs;
bool m_bSWL; bool m_bSWL;
bool m_uploadSpots; bool m_uploadSpots;

View File

@ -488,6 +488,9 @@ void CPlotter::DrawOverlay() //DrawOverlay()
painter0.drawLine(x1,24,x1,30); painter0.drawLine(x1,24,x1,30);
} }
int yh=5;
int yTxTop=12;
int yRxBottom=yTxTop + 2*yh + 4;
if(m_mode=="JT9" or m_mode=="JT65" or m_mode=="JT9+JT65" if(m_mode=="JT9" or m_mode=="JT65" or m_mode=="JT9+JT65"
or m_mode=="QRA64" or m_mode=="FT8" or m_mode=="FT4") { or m_mode=="QRA64" or m_mode=="FT8" or m_mode=="FT4") {
@ -513,12 +516,14 @@ void CPlotter::DrawOverlay() //DrawOverlay()
painter0.drawLine(x6,24,x6,30); painter0.drawLine(x6,24,x6,30);
} else { } else {
// Draw the green "goal post"
painter0.setPen(penGreen); painter0.setPen(penGreen);
x1=XfromFreq(m_rxFreq); x1=XfromFreq(m_rxFreq);
x2=XfromFreq(m_rxFreq+bw); x2=XfromFreq(m_rxFreq+bw);
painter0.drawLine(x1,24,x1,30); painter0.drawLine(x1,yRxBottom-yh,x1,yRxBottom);
painter0.drawLine(x1,28,x2,28); painter0.drawLine(x1,yRxBottom,x2,yRxBottom);
painter0.drawLine(x2,24,x2,30); painter0.drawLine(x2,yRxBottom-yh,x2,yRxBottom);
} }
} }
@ -538,9 +543,10 @@ void CPlotter::DrawOverlay() //DrawOverlay()
x1=XfromFreq(m_txFreq-0.5*bw); x1=XfromFreq(m_txFreq-0.5*bw);
x2=XfromFreq(m_txFreq+0.5*bw); x2=XfromFreq(m_txFreq+0.5*bw);
} }
painter0.drawLine(x1,17,x1,21); // Draw the red "goal post"
painter0.drawLine(x1,17,x2,17); painter0.drawLine(x1,yTxTop,x1,yTxTop+yh);
painter0.drawLine(x2,17,x2,21); painter0.drawLine(x1,yTxTop,x2,yTxTop);
painter0.drawLine(x2,yTxTop,x2,yTxTop+yh);
} }
if(m_mode=="JT9+JT65") { if(m_mode=="JT9+JT65") {

View File

@ -157,6 +157,9 @@
<property name="text"> <property name="text">
<string>Adjust...</string> <string>Adjust...</string>
</property> </property>
<property name="autoDefault">
<bool>false</bool>
</property>
</widget> </widget>
</item> </item>
</layout> </layout>

View File

@ -9,8 +9,8 @@ SOURCES += \
widgets/colorhighlighting.cpp widgets/ExportCabrillo.cpp \ widgets/colorhighlighting.cpp widgets/ExportCabrillo.cpp \
widgets/AbstractLogWindow.cpp \ widgets/AbstractLogWindow.cpp \
widgets/FrequencyLineEdit.cpp widgets/FrequencyDeltaLineEdit.cpp \ widgets/FrequencyLineEdit.cpp widgets/FrequencyDeltaLineEdit.cpp \
widgets/FoxLogWindow.cpp widgets/CabrilloLogWindow.cpp widgets/FoxLogWindow.cpp widgets/CabrilloLogWindow.cpp \
widgets/HelpTextWindow.cpp
HEADERS += \ HEADERS += \
widgets/mainwindow.h widgets/plotter.h \ widgets/mainwindow.h widgets/plotter.h \
widgets/about.h widgets/widegraph.h \ widgets/about.h widgets/widegraph.h \
@ -21,7 +21,7 @@ HEADERS += \
widgets/fastplot.h widgets/MessageBox.hpp widgets/colorhighlighting.h \ widgets/fastplot.h widgets/MessageBox.hpp widgets/colorhighlighting.h \
widgets/ExportCabrillo.h widgets/AbstractLogWindow.hpp \ widgets/ExportCabrillo.h widgets/AbstractLogWindow.hpp \
widgets/FoxLogWindow.hpp widgets/CabrilloLogWindow.hpp \ widgets/FoxLogWindow.hpp widgets/CabrilloLogWindow.hpp \
widgets/DateTimeEdit.hpp widgets/DateTimeEdit.hpp widgets/HelpTextWindow.hpp
FORMS += \ FORMS += \
widgets/mainwindow.ui widgets/about.ui \ widgets/mainwindow.ui widgets/about.ui \