not1mm 24.10.8__tar.gz → 24.10.10__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. {not1mm-24.10.8 → not1mm-24.10.10}/PKG-INFO +62 -2
  2. {not1mm-24.10.8 → not1mm-24.10.10}/README.md +61 -1
  3. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/__main__.py +85 -9
  4. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/configuration.ui +585 -0
  5. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/lib/settings.py +53 -0
  6. not1mm-24.10.10/not1mm/lib/version.py +3 -0
  7. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/cq_ww_cw.py +108 -0
  8. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm.egg-info/PKG-INFO +62 -2
  9. {not1mm-24.10.8 → not1mm-24.10.10}/pyproject.toml +1 -1
  10. not1mm-24.10.8/not1mm/lib/version.py +0 -3
  11. {not1mm-24.10.8 → not1mm-24.10.10}/LICENSE +0 -0
  12. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/__init__.py +0 -0
  13. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/bandmap.py +0 -0
  14. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/checkwindow.py +0 -0
  15. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/JetBrainsMono-ExtraLight.ttf +0 -0
  16. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/MASTER.SCP +0 -0
  17. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/about.ui +0 -0
  18. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/alpha bravo charlie delta.txt +0 -0
  19. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/bandmap.ui +0 -0
  20. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/check.png +0 -0
  21. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/checkwindow.ui +0 -0
  22. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/contests.sql +0 -0
  23. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/cty.json +0 -0
  24. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/cwmacros.txt +0 -0
  25. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/donors.html +0 -0
  26. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/editcontact.ui +0 -0
  27. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/editmacro.ui +0 -0
  28. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/greendot.png +0 -0
  29. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/k6gte-not1mm.desktop +0 -0
  30. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/k6gte.not1mm-128.png +0 -0
  31. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/k6gte.not1mm-32.png +0 -0
  32. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/k6gte.not1mm-64.png +0 -0
  33. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/logwindow.ui +0 -0
  34. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/logwindowx.ui +0 -0
  35. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/main.ui +0 -0
  36. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/new_contest.ui +0 -0
  37. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/not1mm.html +0 -0
  38. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/opon.ui +0 -0
  39. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/0.wav +0 -0
  40. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/1.wav +0 -0
  41. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/2.wav +0 -0
  42. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/3.wav +0 -0
  43. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/4.wav +0 -0
  44. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/5.wav +0 -0
  45. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/6.wav +0 -0
  46. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/7.wav +0 -0
  47. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/73.wav +0 -0
  48. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/8.wav +0 -0
  49. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/9.wav +0 -0
  50. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/a.wav +0 -0
  51. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/again.wav +0 -0
  52. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/b.wav +0 -0
  53. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/c.wav +0 -0
  54. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/contest.wav +0 -0
  55. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/cq.wav +0 -0
  56. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/d.wav +0 -0
  57. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/e.wav +0 -0
  58. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/f.wav +0 -0
  59. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/g.wav +0 -0
  60. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/h.wav +0 -0
  61. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/i.wav +0 -0
  62. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/j.wav +0 -0
  63. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/k.wav +0 -0
  64. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/k6gte.wav +0 -0
  65. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/l.wav +0 -0
  66. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/m.wav +0 -0
  67. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/mynumber.wav +0 -0
  68. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/n.wav +0 -0
  69. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/nil.wav +0 -0
  70. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/o.wav +0 -0
  71. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/p.wav +0 -0
  72. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/q.wav +0 -0
  73. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/r.wav +0 -0
  74. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/roger.wav +0 -0
  75. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/s.wav +0 -0
  76. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/space.wav +0 -0
  77. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/t.wav +0 -0
  78. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/thankyou.wav +0 -0
  79. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/thankyouqrz.wav +0 -0
  80. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/u.wav +0 -0
  81. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/v.wav +0 -0
  82. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/w.wav +0 -0
  83. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/x.wav +0 -0
  84. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/y.wav +0 -0
  85. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/yourcall.wav +0 -0
  86. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/phonetics/z.wav +0 -0
  87. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/pickcontest.ui +0 -0
  88. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/radio_green.png +0 -0
  89. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/radio_grey.png +0 -0
  90. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/radio_red.png +0 -0
  91. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/reddot.png +0 -0
  92. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/rttymacros.txt +0 -0
  93. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/settings.ui +0 -0
  94. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/splash.png +0 -0
  95. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/ssbmacros.txt +0 -0
  96. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/data/vfo.ui +0 -0
  97. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/fsutils.py +0 -0
  98. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/lib/__init__.py +0 -0
  99. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/lib/about.py +0 -0
  100. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/lib/cat_interface.py +0 -0
  101. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/lib/cwinterface.py +0 -0
  102. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/lib/database.py +0 -0
  103. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/lib/edit_contact.py +0 -0
  104. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/lib/edit_macro.py +0 -0
  105. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/lib/edit_opon.py +0 -0
  106. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/lib/edit_station.py +0 -0
  107. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/lib/fldigi_sendstring.py +0 -0
  108. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/lib/fldigi_watcher.py +0 -0
  109. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/lib/ft8_watcher.py +0 -0
  110. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/lib/ham_utility.py +0 -0
  111. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/lib/lookup.py +0 -0
  112. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/lib/multicast.py +0 -0
  113. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/lib/n1mm.py +0 -0
  114. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/lib/new_contest.py +0 -0
  115. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/lib/playsound.py +0 -0
  116. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/lib/plugin_common.py +0 -0
  117. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/lib/select_contest.py +0 -0
  118. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/lib/super_check_partial.py +0 -0
  119. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/lib/versiontest.py +0 -0
  120. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/logwindow.py +0 -0
  121. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/lookupservice.py +0 -0
  122. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/10_10_fall_cw.py +0 -0
  123. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/10_10_spring_cw.py +0 -0
  124. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/10_10_summer_phone.py +0 -0
  125. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/10_10_winter_phone.py +0 -0
  126. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/__init__.py +0 -0
  127. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/arrl_10m.py +0 -0
  128. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/arrl_dx_cw.py +0 -0
  129. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/arrl_dx_ssb.py +0 -0
  130. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/arrl_field_day.py +0 -0
  131. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/arrl_rtty_ru.py +0 -0
  132. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/arrl_ss_cw.py +0 -0
  133. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/arrl_ss_phone.py +0 -0
  134. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/arrl_vhf_jan.py +0 -0
  135. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/arrl_vhf_jun.py +0 -0
  136. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/arrl_vhf_sep.py +0 -0
  137. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/canada_day.py +0 -0
  138. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/cq_160_cw.py +0 -0
  139. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/cq_160_ssb.py +0 -0
  140. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/cq_wpx_cw.py +0 -0
  141. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/cq_wpx_rtty.py +0 -0
  142. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/cq_wpx_ssb.py +0 -0
  143. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/cq_ww_rtty.py +0 -0
  144. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/cq_ww_ssb.py +0 -0
  145. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/cwt.py +0 -0
  146. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/general_logging.py +0 -0
  147. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/helvetia.py +0 -0
  148. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/iaru_fieldday_r1_cw.py +0 -0
  149. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/iaru_fieldday_r1_ssb.py +0 -0
  150. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/iaru_hf.py +0 -0
  151. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/icwc_mst.py +0 -0
  152. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/jidx_cw.py +0 -0
  153. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/jidx_ph.py +0 -0
  154. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/k1usn_sst.py +0 -0
  155. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/naqp_cw.py +0 -0
  156. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/naqp_ssb.py +0 -0
  157. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/phone_weekly_test.py +0 -0
  158. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/ref_cw.py +0 -0
  159. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/stew_perry_topband.py +0 -0
  160. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/weekly_rtty.py +0 -0
  161. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/plugins/winter_field_day.py +0 -0
  162. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/radio.py +0 -0
  163. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/test.py +0 -0
  164. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/vfo.py +0 -0
  165. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm/voice_keying.py +0 -0
  166. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm.egg-info/SOURCES.txt +0 -0
  167. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm.egg-info/dependency_links.txt +0 -0
  168. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm.egg-info/entry_points.txt +0 -0
  169. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm.egg-info/requires.txt +0 -0
  170. {not1mm-24.10.8 → not1mm-24.10.10}/not1mm.egg-info/top_level.txt +0 -0
  171. {not1mm-24.10.8 → not1mm-24.10.10}/setup.cfg +0 -0
  172. {not1mm-24.10.8 → not1mm-24.10.10}/test/contests.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 24.10.8
3
+ Version: 24.10.10
4
4
  Summary: NOT1MM Logger
5
5
  Author-email: Michael Bridak <michael.bridak@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/mbridak/not1mm
@@ -118,6 +118,16 @@ Requires-Dist: Levenshtein
118
118
  - [Cabrillo](#cabrillo)
119
119
  - [ADIF](#adif)
120
120
  - [Recalulate Mults](#recalulate-mults)
121
+ - [Testing Out ESM Currently only in CQ WW CW](#testing-out-esm-currently-only-in-cq-ww-cw)
122
+ - [Run States](#run-states)
123
+ - [CQ](#cq)
124
+ - [Call Entered send His Call and the Exchange](#call-entered-send-his-call-and-the-exchange)
125
+ - [Empty exchange field send AGN till you get it](#empty-exchange-field-send-agn-till-you-get-it)
126
+ - [Exchange field filled, send TU QRZ and logs it](#exchange-field-filled-send-tu-qrz-and-logs-it)
127
+ - [S\&P States](#sp-states)
128
+ - [With his call entered, Send your call](#with-his-call-entered-send-your-call)
129
+ - [If no exchange entered send AGN](#if-no-exchange-entered-send-agn)
130
+ - [With exchange entered, send your exchange and log it](#with-exchange-entered-send-your-exchange-and-log-it)
121
131
  - [Contest specific notes](#contest-specific-notes)
122
132
  - [ARRL Sweekstakes](#arrl-sweekstakes)
123
133
  - [The exchange parser](#the-exchange-parser)
@@ -219,6 +229,7 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
219
229
 
220
230
  ## Recent Changes
221
231
 
232
+ - [24-10-10] Add ESM to CQ WW CW to test it out.
222
233
  - [24-10-8] Fix crash on Tune to spot. Change placeholder text for the CW port for those unable to read documentation.
223
234
  - [24-10-6] Removed 60, 30, 17 and 12M from the default list of bands.
224
235
  - [24-10-5-1] Store the bandmap spots age timer in the preferences.
@@ -828,6 +839,55 @@ After editing a contact and before generating a Cabrillo file. There is a Misc
828
839
  menu option that will recalculate the multipliers incase an edit had caused a
829
840
  change.
830
841
 
842
+ ## Testing Out ESM Currently only in CQ WW CW
843
+
844
+ I caved and started working on ESM or Enter Sends Message. Currently it is only
845
+ working in the CQ WW CW. To test it out you can go to `FILE -> Configuration Settings`
846
+
847
+ ![Config Screen](https://private-user-images.githubusercontent.com/49108421/375571913-1fbb1da1-5b81-45f8-8b6d-412702add200.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg2MDU2MjUsIm5iZiI6MTcyODYwNTMyNSwicGF0aCI6Ii80OTEwODQyMS8zNzU1NzE5MTMtMWZiYjFkYTEtNWI4MS00NWY4LThiNmQtNDEyNzAyYWRkMjAwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDExVDAwMDg0NVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTU2NDBlZTliMTFlYzc1NjE1MzA4MjE1YTVkMzlhNmIwNzYzYjVlMzM5MDdjNTlkODVlODY1MzBlZWJmZWEzMWImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.DITQPUAHkFLk1ezFxvQYLCJVaq8vrUDm_5EbfDLJbsE)
848
+
849
+
850
+ Check the mark to Use ESM and tell it which function keys do what. The keys will need
851
+ to have the same function in both Run and S&P modes. The function keys will highlight
852
+ green depending on the state of the input fields. The green keys will be sent if you
853
+ press the Enter key. You should use the Space bar to move to another field.
854
+
855
+ The contact will be automatically logged once all the needed info is collected and the
856
+ QRZ (for Run) or Exchange (for S&P) is sent.
857
+
858
+ ## Run States
859
+
860
+ ### CQ
861
+
862
+ ![CQ](https://private-user-images.githubusercontent.com/49108421/375572433-a156588d-83b5-4edd-b9f6-4ab4291c258c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg2MDU2MjUsIm5iZiI6MTcyODYwNTMyNSwicGF0aCI6Ii80OTEwODQyMS8zNzU1NzI0MzMtYTE1NjU4OGQtODNiNS00ZWRkLWI5ZjYtNGFiNDI5MWMyNThjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDExVDAwMDg0NVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTVjYTdjZDhhMmJiZTA5NTdmNDIxNTgxMmY5NmJmNDBiZmZjZTk2MTAyODM4NjYxYWQzY2Q3NGNkN2ZiYzZmNTImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.44q-Ns0aWBLBFARF8Oyb2wxF0olZx28eddPyp_p_T3s)
863
+
864
+ ### Call Entered send His Call and the Exchange
865
+
866
+ ![Call Entered send His Call and the Exchange.](https://private-user-images.githubusercontent.com/49108421/375572785-1d9f6a33-1cd1-4e08-82d5-b11851e279c7.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg2MDYyNjAsIm5iZiI6MTcyODYwNTk2MCwicGF0aCI6Ii80OTEwODQyMS8zNzU1NzI3ODUtMWQ5ZjZhMzMtMWNkMS00ZTA4LTgyZDUtYjExODUxZTI3OWM3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDExVDAwMTkyMFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWEyZmEzOGM4ZmQ4MTNlZmM5ZDA2N2FmNDBkNTYzOTVmYTM3NzFiY2Q4NDE1ZTlkYzhmMjhiNGI4NGJiMmMzY2EmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.KcEd-CBbY2MHKrApqmXkr06Pcb0kvYyxK8tdQH3doc4)
867
+
868
+ ### Empty exchange field send AGN till you get it
869
+
870
+ ![Empty exchange field send AGN till you get it](https://private-user-images.githubusercontent.com/49108421/375573288-3fa5f231-0648-412a-94d7-06ab38e1334f.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg2MDYyNjAsIm5iZiI6MTcyODYwNTk2MCwicGF0aCI6Ii80OTEwODQyMS8zNzU1NzMyODgtM2ZhNWYyMzEtMDY0OC00MTJhLTk0ZDctMDZhYjM4ZTEzMzRmLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDExVDAwMTkyMFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWIxNjA5NWM0MWI2ZmU0ODNmYjY2N2M5YTdjNzQ5ZDdkZWZkZmE3MDI2NjBlNzc4YmNhNTNjYjMzOTI4MjIwMzcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.VycMnaYPKW08YmCQmeGpQWToDpNNaEmNZ3LAnEQUifM)
871
+
872
+ ### Exchange field filled, send TU QRZ and logs it
873
+
874
+ ![Exchange field filled, send TU QRZ and logs it](https://private-user-images.githubusercontent.com/49108421/375573434-b6ee0617-60ac-4937-82cc-e1b1428899d5.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg2MDYyNjAsIm5iZiI6MTcyODYwNTk2MCwicGF0aCI6Ii80OTEwODQyMS8zNzU1NzM0MzQtYjZlZTA2MTctNjBhYy00OTM3LTgyY2MtZTFiMTQyODg5OWQ1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDExVDAwMTkyMFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQxNzM4ODY2NWViNzNhZjI2OWRiYzQ0ZTBmMWIxOTRhODRiZDI1ZjQ3OWI0YjY5OGM4OGYxYmRjYWVjYjYzNjYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.yCx8NWkE9Ep-NKv2oxEjWWDMraBZsov59GzHspC3jmk)
875
+
876
+ ## S&P States
877
+
878
+ ### With his call entered, Send your call
879
+
880
+ ![With his call entered, Send your call](https://private-user-images.githubusercontent.com/49108421/375573821-67dd35c7-8563-4ad6-bee6-7f7514e7d3a6.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg2MDYyNjAsIm5iZiI6MTcyODYwNTk2MCwicGF0aCI6Ii80OTEwODQyMS8zNzU1NzM4MjEtNjdkZDM1YzctODU2My00YWQ2LWJlZTYtN2Y3NTE0ZTdkM2E2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDExVDAwMTkyMFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTdkNDRmYmI2MThlYjg2ZjU5NjY3OWY2YTEyMGU2YWQ5YjIyM2NhY2QzODVhY2U3ZGZhMDI3ZDQzMmY1MTU5MWMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.p8JisS0D5noIDRUAjwkOyxpzR10MhIYmW-y8h2ngnZo)
881
+
882
+ ### If no exchange entered send AGN
883
+
884
+ ![If no exchange entered send AGN](https://private-user-images.githubusercontent.com/49108421/375573957-9753786b-3018-4821-b07a-42bdf50b4468.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg2MDYyNjAsIm5iZiI6MTcyODYwNTk2MCwicGF0aCI6Ii80OTEwODQyMS8zNzU1NzM5NTctOTc1Mzc4NmItMzAxOC00ODIxLWIwN2EtNDJiZGY1MGI0NDY4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDExVDAwMTkyMFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWY5M2E1MzllOTc3YmEwNDZkOWFlYmEyMmQzNDc0YTUwYThmNzk1ODQ4M2IzMGExNjQyMTdlMzkyYzdmZjgyODkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.We-bPqprJ24HQW7eCjxFKuUxWJwawRZWab74INuSyyA)
885
+
886
+ ### With exchange entered, send your exchange and log it
887
+
888
+ ![With exchange entered, send your exchange and log it](https://private-user-images.githubusercontent.com/49108421/375574075-9857287e-ce11-44c8-a7de-417912988f08.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg2MDYyNjAsIm5iZiI6MTcyODYwNTk2MCwicGF0aCI6Ii80OTEwODQyMS8zNzU1NzQwNzUtOTg1NzI4N2UtY2UxMS00NGM4LWE3ZGUtNDE3OTEyOTg4ZjA4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDExVDAwMTkyMFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPThmNzZiOTRkMzQyOGIxMWUzMjM4ZWVjMzI3ZTkzZjc3OThkZjI5NWYxYTNkYTQ0ZDYyNzJkMTA5ZjQwNDBmMzEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.YtD5IoXhSmSUs53ofWJUmuJZqca2Uhe6dYk8JyOHBgM)
889
+
890
+
831
891
  ## Contest specific notes
832
892
 
833
893
  I found it might be beneficial to have a section devoted to wierd quirky things
@@ -869,4 +929,4 @@ The best thing you can do is play around with it to see how it behaves.
869
929
  In the `Sent Exchange` field of the New Contest dialog put in the Precidence,
870
930
  Call, Check and Section. Example: `A K6GTE 17 ORG`.
871
931
 
872
- For the Run Exchange macro I'd put `{HISCALL} # A K6GTE 17 ORG`.
932
+ For the Run Exchange macro I'd put `{HISCALL} {SENTNR} {EXCH}`.
@@ -87,6 +87,16 @@
87
87
  - [Cabrillo](#cabrillo)
88
88
  - [ADIF](#adif)
89
89
  - [Recalulate Mults](#recalulate-mults)
90
+ - [Testing Out ESM Currently only in CQ WW CW](#testing-out-esm-currently-only-in-cq-ww-cw)
91
+ - [Run States](#run-states)
92
+ - [CQ](#cq)
93
+ - [Call Entered send His Call and the Exchange](#call-entered-send-his-call-and-the-exchange)
94
+ - [Empty exchange field send AGN till you get it](#empty-exchange-field-send-agn-till-you-get-it)
95
+ - [Exchange field filled, send TU QRZ and logs it](#exchange-field-filled-send-tu-qrz-and-logs-it)
96
+ - [S\&P States](#sp-states)
97
+ - [With his call entered, Send your call](#with-his-call-entered-send-your-call)
98
+ - [If no exchange entered send AGN](#if-no-exchange-entered-send-agn)
99
+ - [With exchange entered, send your exchange and log it](#with-exchange-entered-send-your-exchange-and-log-it)
90
100
  - [Contest specific notes](#contest-specific-notes)
91
101
  - [ARRL Sweekstakes](#arrl-sweekstakes)
92
102
  - [The exchange parser](#the-exchange-parser)
@@ -188,6 +198,7 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
188
198
 
189
199
  ## Recent Changes
190
200
 
201
+ - [24-10-10] Add ESM to CQ WW CW to test it out.
191
202
  - [24-10-8] Fix crash on Tune to spot. Change placeholder text for the CW port for those unable to read documentation.
192
203
  - [24-10-6] Removed 60, 30, 17 and 12M from the default list of bands.
193
204
  - [24-10-5-1] Store the bandmap spots age timer in the preferences.
@@ -797,6 +808,55 @@ After editing a contact and before generating a Cabrillo file. There is a Misc
797
808
  menu option that will recalculate the multipliers incase an edit had caused a
798
809
  change.
799
810
 
811
+ ## Testing Out ESM Currently only in CQ WW CW
812
+
813
+ I caved and started working on ESM or Enter Sends Message. Currently it is only
814
+ working in the CQ WW CW. To test it out you can go to `FILE -> Configuration Settings`
815
+
816
+ ![Config Screen](https://private-user-images.githubusercontent.com/49108421/375571913-1fbb1da1-5b81-45f8-8b6d-412702add200.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg2MDU2MjUsIm5iZiI6MTcyODYwNTMyNSwicGF0aCI6Ii80OTEwODQyMS8zNzU1NzE5MTMtMWZiYjFkYTEtNWI4MS00NWY4LThiNmQtNDEyNzAyYWRkMjAwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDExVDAwMDg0NVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTU2NDBlZTliMTFlYzc1NjE1MzA4MjE1YTVkMzlhNmIwNzYzYjVlMzM5MDdjNTlkODVlODY1MzBlZWJmZWEzMWImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.DITQPUAHkFLk1ezFxvQYLCJVaq8vrUDm_5EbfDLJbsE)
817
+
818
+
819
+ Check the mark to Use ESM and tell it which function keys do what. The keys will need
820
+ to have the same function in both Run and S&P modes. The function keys will highlight
821
+ green depending on the state of the input fields. The green keys will be sent if you
822
+ press the Enter key. You should use the Space bar to move to another field.
823
+
824
+ The contact will be automatically logged once all the needed info is collected and the
825
+ QRZ (for Run) or Exchange (for S&P) is sent.
826
+
827
+ ## Run States
828
+
829
+ ### CQ
830
+
831
+ ![CQ](https://private-user-images.githubusercontent.com/49108421/375572433-a156588d-83b5-4edd-b9f6-4ab4291c258c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg2MDU2MjUsIm5iZiI6MTcyODYwNTMyNSwicGF0aCI6Ii80OTEwODQyMS8zNzU1NzI0MzMtYTE1NjU4OGQtODNiNS00ZWRkLWI5ZjYtNGFiNDI5MWMyNThjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDExVDAwMDg0NVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTVjYTdjZDhhMmJiZTA5NTdmNDIxNTgxMmY5NmJmNDBiZmZjZTk2MTAyODM4NjYxYWQzY2Q3NGNkN2ZiYzZmNTImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.44q-Ns0aWBLBFARF8Oyb2wxF0olZx28eddPyp_p_T3s)
832
+
833
+ ### Call Entered send His Call and the Exchange
834
+
835
+ ![Call Entered send His Call and the Exchange.](https://private-user-images.githubusercontent.com/49108421/375572785-1d9f6a33-1cd1-4e08-82d5-b11851e279c7.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg2MDYyNjAsIm5iZiI6MTcyODYwNTk2MCwicGF0aCI6Ii80OTEwODQyMS8zNzU1NzI3ODUtMWQ5ZjZhMzMtMWNkMS00ZTA4LTgyZDUtYjExODUxZTI3OWM3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDExVDAwMTkyMFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWEyZmEzOGM4ZmQ4MTNlZmM5ZDA2N2FmNDBkNTYzOTVmYTM3NzFiY2Q4NDE1ZTlkYzhmMjhiNGI4NGJiMmMzY2EmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.KcEd-CBbY2MHKrApqmXkr06Pcb0kvYyxK8tdQH3doc4)
836
+
837
+ ### Empty exchange field send AGN till you get it
838
+
839
+ ![Empty exchange field send AGN till you get it](https://private-user-images.githubusercontent.com/49108421/375573288-3fa5f231-0648-412a-94d7-06ab38e1334f.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg2MDYyNjAsIm5iZiI6MTcyODYwNTk2MCwicGF0aCI6Ii80OTEwODQyMS8zNzU1NzMyODgtM2ZhNWYyMzEtMDY0OC00MTJhLTk0ZDctMDZhYjM4ZTEzMzRmLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDExVDAwMTkyMFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWIxNjA5NWM0MWI2ZmU0ODNmYjY2N2M5YTdjNzQ5ZDdkZWZkZmE3MDI2NjBlNzc4YmNhNTNjYjMzOTI4MjIwMzcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.VycMnaYPKW08YmCQmeGpQWToDpNNaEmNZ3LAnEQUifM)
840
+
841
+ ### Exchange field filled, send TU QRZ and logs it
842
+
843
+ ![Exchange field filled, send TU QRZ and logs it](https://private-user-images.githubusercontent.com/49108421/375573434-b6ee0617-60ac-4937-82cc-e1b1428899d5.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg2MDYyNjAsIm5iZiI6MTcyODYwNTk2MCwicGF0aCI6Ii80OTEwODQyMS8zNzU1NzM0MzQtYjZlZTA2MTctNjBhYy00OTM3LTgyY2MtZTFiMTQyODg5OWQ1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDExVDAwMTkyMFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQxNzM4ODY2NWViNzNhZjI2OWRiYzQ0ZTBmMWIxOTRhODRiZDI1ZjQ3OWI0YjY5OGM4OGYxYmRjYWVjYjYzNjYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.yCx8NWkE9Ep-NKv2oxEjWWDMraBZsov59GzHspC3jmk)
844
+
845
+ ## S&P States
846
+
847
+ ### With his call entered, Send your call
848
+
849
+ ![With his call entered, Send your call](https://private-user-images.githubusercontent.com/49108421/375573821-67dd35c7-8563-4ad6-bee6-7f7514e7d3a6.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg2MDYyNjAsIm5iZiI6MTcyODYwNTk2MCwicGF0aCI6Ii80OTEwODQyMS8zNzU1NzM4MjEtNjdkZDM1YzctODU2My00YWQ2LWJlZTYtN2Y3NTE0ZTdkM2E2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDExVDAwMTkyMFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTdkNDRmYmI2MThlYjg2ZjU5NjY3OWY2YTEyMGU2YWQ5YjIyM2NhY2QzODVhY2U3ZGZhMDI3ZDQzMmY1MTU5MWMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.p8JisS0D5noIDRUAjwkOyxpzR10MhIYmW-y8h2ngnZo)
850
+
851
+ ### If no exchange entered send AGN
852
+
853
+ ![If no exchange entered send AGN](https://private-user-images.githubusercontent.com/49108421/375573957-9753786b-3018-4821-b07a-42bdf50b4468.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg2MDYyNjAsIm5iZiI6MTcyODYwNTk2MCwicGF0aCI6Ii80OTEwODQyMS8zNzU1NzM5NTctOTc1Mzc4NmItMzAxOC00ODIxLWIwN2EtNDJiZGY1MGI0NDY4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDExVDAwMTkyMFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWY5M2E1MzllOTc3YmEwNDZkOWFlYmEyMmQzNDc0YTUwYThmNzk1ODQ4M2IzMGExNjQyMTdlMzkyYzdmZjgyODkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.We-bPqprJ24HQW7eCjxFKuUxWJwawRZWab74INuSyyA)
854
+
855
+ ### With exchange entered, send your exchange and log it
856
+
857
+ ![With exchange entered, send your exchange and log it](https://private-user-images.githubusercontent.com/49108421/375574075-9857287e-ce11-44c8-a7de-417912988f08.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg2MDYyNjAsIm5iZiI6MTcyODYwNTk2MCwicGF0aCI6Ii80OTEwODQyMS8zNzU1NzQwNzUtOTg1NzI4N2UtY2UxMS00NGM4LWE3ZGUtNDE3OTEyOTg4ZjA4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDExVDAwMTkyMFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPThmNzZiOTRkMzQyOGIxMWUzMjM4ZWVjMzI3ZTkzZjc3OThkZjI5NWYxYTNkYTQ0ZDYyNzJkMTA5ZjQwNDBmMzEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.YtD5IoXhSmSUs53ofWJUmuJZqca2Uhe6dYk8JyOHBgM)
858
+
859
+
800
860
  ## Contest specific notes
801
861
 
802
862
  I found it might be beneficial to have a section devoted to wierd quirky things
@@ -838,4 +898,4 @@ The best thing you can do is play around with it to see how it behaves.
838
898
  In the `Sent Exchange` field of the New Contest dialog put in the Precidence,
839
899
  Call, Check and Section. Example: `A K6GTE 17 ORG`.
840
900
 
841
- For the Run Exchange macro I'd put `{HISCALL} # A K6GTE 17 ORG`.
901
+ For the Run Exchange macro I'd put `{HISCALL} {SENTNR} {EXCH}`.
@@ -37,7 +37,7 @@ except OSError as exception:
37
37
  from PyQt6 import QtCore, QtGui, QtWidgets, uic
38
38
  from PyQt6.QtCore import QDir, Qt, QThread, QSettings, QCoreApplication
39
39
  from PyQt6.QtGui import QFontDatabase, QColorConstants, QPalette, QColor, QPixmap
40
- from PyQt6.QtWidgets import QFileDialog, QSplashScreen
40
+ from PyQt6.QtWidgets import QFileDialog, QSplashScreen, QApplication
41
41
 
42
42
  from not1mm.lib.about import About
43
43
  from not1mm.lib.cwinterface import CW
@@ -162,6 +162,8 @@ class MainWindow(QtWidgets.QMainWindow):
162
162
  oldtext = ""
163
163
  text_color = QColorConstants.Black
164
164
  current_palette = None
165
+ use_esm = False
166
+ esm_dict = {}
165
167
 
166
168
  radio_thread = QThread()
167
169
  voice_thread = QThread()
@@ -176,6 +178,8 @@ class MainWindow(QtWidgets.QMainWindow):
176
178
  lookup_service = None
177
179
  fldigi_util = None
178
180
 
181
+ current_widget = None
182
+
179
183
  def __init__(self, splash):
180
184
  super().__init__()
181
185
  logger.info("MainWindow: __init__")
@@ -194,6 +198,7 @@ class MainWindow(QtWidgets.QMainWindow):
194
198
  self.setCorner(Qt.Corner.TopLeftCorner, Qt.DockWidgetArea.LeftDockWidgetArea)
195
199
  self.setCorner(Qt.Corner.BottomLeftCorner, Qt.DockWidgetArea.LeftDockWidgetArea)
196
200
  uic.loadUi(fsutils.APP_DATA_PATH / "main.ui", self)
201
+ QApplication.instance().focusObjectChanged.connect(self.on_focus_changed)
197
202
  self.cw_entry.hide()
198
203
  self.leftdot.hide()
199
204
  self.rightdot.hide()
@@ -246,13 +251,18 @@ class MainWindow(QtWidgets.QMainWindow):
246
251
  self.radioButton_sp.clicked.connect(self.run_sp_buttons_clicked)
247
252
  self.score.setText("0")
248
253
  self.callsign.textEdited.connect(self.callsign_changed)
249
- self.callsign.returnPressed.connect(self.save_contact)
250
- self.sent.returnPressed.connect(self.save_contact)
251
- self.receive.returnPressed.connect(self.save_contact)
252
- self.other_1.returnPressed.connect(self.save_contact)
254
+ self.callsign.returnPressed.connect(self.check_esm_with_enter)
255
+ self.callsign.cursorPositionChanged.connect(self.check_esm)
256
+ self.sent.returnPressed.connect(self.check_esm_with_enter)
257
+ self.sent.cursorPositionChanged.connect(self.check_esm)
258
+ self.receive.returnPressed.connect(self.check_esm_with_enter)
259
+ self.receive.cursorPositionChanged.connect(self.check_esm)
260
+ self.other_1.returnPressed.connect(self.check_esm_with_enter)
253
261
  self.other_1.textEdited.connect(self.other_1_changed)
254
- self.other_2.returnPressed.connect(self.save_contact)
262
+ self.other_1.cursorPositionChanged.connect(self.check_esm)
263
+ self.other_2.returnPressed.connect(self.check_esm_with_enter)
255
264
  self.other_2.textEdited.connect(self.other_2_changed)
265
+ self.other_2.cursorPositionChanged.connect(self.check_esm)
256
266
 
257
267
  self.sent.setText("59")
258
268
  self.receive.setText("59")
@@ -651,6 +661,47 @@ class MainWindow(QtWidgets.QMainWindow):
651
661
  "You can udate to the current version by using:\npip install -U not1mm"
652
662
  )
653
663
 
664
+ def on_focus_changed(self, new):
665
+ """"""
666
+ if self.use_esm:
667
+ if hasattr(self.contest, "process_esm"):
668
+ self.contest.process_esm(self, new_focused_widget=new)
669
+
670
+ def make_button_green(self, the_button: QtWidgets.QPushButton) -> None:
671
+ """Turn the_button green."""
672
+ if the_button is not None:
673
+ pal = QPalette()
674
+ pal.isCopyOf(self.current_palette)
675
+ greenColor = QColor(0, 128, 0)
676
+ pal.setBrush(QPalette.ColorRole.Button, greenColor)
677
+ the_button.setPalette(pal)
678
+
679
+ def restore_button_color(self, the_button: QtWidgets.QPushButton) -> None:
680
+ """Restores the color of the button"""
681
+ the_button.setPalette(self.current_palette)
682
+
683
+ def check_esm_with_enter(self):
684
+ """Check for ESM, otherwise save contact."""
685
+ if self.use_esm:
686
+ if hasattr(self.contest, "process_esm"):
687
+ self.contest.process_esm(self, with_enter=True)
688
+ else:
689
+ self.save_contact()
690
+ else:
691
+ self.save_contact()
692
+
693
+ def check_esm(self):
694
+ """Check for ESM, otherwise save contact."""
695
+ if self.use_esm:
696
+ if hasattr(self.contest, "process_esm"):
697
+ self.contest.process_esm(self)
698
+ else:
699
+ ...
700
+ # self.save_contact()
701
+ else:
702
+ ...
703
+ # self.save_contact()
704
+
654
705
  def show_splash_msg(self, msg: str) -> None:
655
706
  """Show text message in the splash window."""
656
707
  self.splash.showMessage(
@@ -1719,7 +1770,6 @@ class MainWindow(QtWidgets.QMainWindow):
1719
1770
  -------
1720
1771
  None
1721
1772
  """
1722
-
1723
1773
  modifier = event.modifiers()
1724
1774
  if event.key() == Qt.Key.Key_K:
1725
1775
  self.toggle_cw_entry()
@@ -2027,7 +2077,7 @@ class MainWindow(QtWidgets.QMainWindow):
2027
2077
 
2028
2078
  logger.debug("saving contact")
2029
2079
  if self.contest is None:
2030
- self.show_message_box("You have no contest defined.")
2080
+ self.show_message_box("You have no contest defined...")
2031
2081
  return
2032
2082
  if len(self.callsign.text()) < 3:
2033
2083
  return
@@ -2666,7 +2716,33 @@ class MainWindow(QtWidgets.QMainWindow):
2666
2716
  for band_to_show in self.pref.get("bands", []):
2667
2717
  if band_to_show in _indicator:
2668
2718
  _indicator[band_to_show].show()
2669
- # self.show_band_mode()
2719
+
2720
+ fkey_dict = {
2721
+ "F1": self.F1,
2722
+ "F2": self.F2,
2723
+ "F3": self.F3,
2724
+ "F4": self.F4,
2725
+ "F5": self.F5,
2726
+ "F6": self.F6,
2727
+ "F7": self.F7,
2728
+ "F8": self.F8,
2729
+ "F9": self.F9,
2730
+ "F10": self.F10,
2731
+ "F11": self.F11,
2732
+ "F12": self.F12,
2733
+ "DISABLED": None,
2734
+ }
2735
+
2736
+ self.use_esm = self.pref.get("use_esm", False)
2737
+ self.esm_dict["CQ"] = fkey_dict.get(self.pref.get("esm_cq", "DISABLED"))
2738
+ self.esm_dict["EXCH"] = fkey_dict.get(self.pref.get("esm_exch", "DISABLED"))
2739
+ self.esm_dict["QRZ"] = fkey_dict.get(self.pref.get("esm_qrz", "DISABLED"))
2740
+ self.esm_dict["AGN"] = fkey_dict.get(self.pref.get("esm_agn", "DISABLED"))
2741
+ self.esm_dict["HISCALL"] = fkey_dict.get(
2742
+ self.pref.get("esm_hiscall", "DISABLED")
2743
+ )
2744
+ self.esm_dict["MYCALL"] = fkey_dict.get(self.pref.get("esm_mycall", "DISABLED"))
2745
+ self.esm_dict["QSOB4"] = fkey_dict.get(self.pref.get("esm_qsob4", "DISABLED"))
2670
2746
 
2671
2747
  def watch_udp(self) -> None:
2672
2748
  """