not1mm 24.10.6__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.6 → not1mm-24.10.10}/PKG-INFO +63 -2
  2. {not1mm-24.10.6 → not1mm-24.10.10}/README.md +62 -1
  3. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/__main__.py +94 -18
  4. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/configuration.ui +585 -0
  5. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/lib/settings.py +89 -5
  6. not1mm-24.10.10/not1mm/lib/version.py +3 -0
  7. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/cq_ww_cw.py +108 -0
  8. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm.egg-info/PKG-INFO +63 -2
  9. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm.egg-info/top_level.txt +0 -1
  10. {not1mm-24.10.6 → not1mm-24.10.10}/pyproject.toml +2 -2
  11. not1mm-24.10.6/not1mm/lib/version.py +0 -3
  12. {not1mm-24.10.6 → not1mm-24.10.10}/LICENSE +0 -0
  13. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/__init__.py +0 -0
  14. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/bandmap.py +0 -0
  15. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/checkwindow.py +0 -0
  16. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/JetBrainsMono-ExtraLight.ttf +0 -0
  17. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/MASTER.SCP +0 -0
  18. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/about.ui +0 -0
  19. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/alpha bravo charlie delta.txt +0 -0
  20. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/bandmap.ui +0 -0
  21. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/check.png +0 -0
  22. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/checkwindow.ui +0 -0
  23. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/contests.sql +0 -0
  24. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/cty.json +0 -0
  25. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/cwmacros.txt +0 -0
  26. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/donors.html +0 -0
  27. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/editcontact.ui +0 -0
  28. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/editmacro.ui +0 -0
  29. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/greendot.png +0 -0
  30. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/k6gte-not1mm.desktop +0 -0
  31. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/k6gte.not1mm-128.png +0 -0
  32. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/k6gte.not1mm-32.png +0 -0
  33. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/k6gte.not1mm-64.png +0 -0
  34. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/logwindow.ui +0 -0
  35. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/logwindowx.ui +0 -0
  36. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/main.ui +0 -0
  37. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/new_contest.ui +0 -0
  38. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/not1mm.html +0 -0
  39. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/opon.ui +0 -0
  40. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/0.wav +0 -0
  41. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/1.wav +0 -0
  42. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/2.wav +0 -0
  43. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/3.wav +0 -0
  44. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/4.wav +0 -0
  45. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/5.wav +0 -0
  46. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/6.wav +0 -0
  47. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/7.wav +0 -0
  48. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/73.wav +0 -0
  49. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/8.wav +0 -0
  50. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/9.wav +0 -0
  51. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/a.wav +0 -0
  52. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/again.wav +0 -0
  53. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/b.wav +0 -0
  54. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/c.wav +0 -0
  55. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/contest.wav +0 -0
  56. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/cq.wav +0 -0
  57. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/d.wav +0 -0
  58. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/e.wav +0 -0
  59. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/f.wav +0 -0
  60. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/g.wav +0 -0
  61. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/h.wav +0 -0
  62. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/i.wav +0 -0
  63. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/j.wav +0 -0
  64. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/k.wav +0 -0
  65. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/k6gte.wav +0 -0
  66. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/l.wav +0 -0
  67. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/m.wav +0 -0
  68. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/mynumber.wav +0 -0
  69. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/n.wav +0 -0
  70. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/nil.wav +0 -0
  71. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/o.wav +0 -0
  72. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/p.wav +0 -0
  73. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/q.wav +0 -0
  74. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/r.wav +0 -0
  75. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/roger.wav +0 -0
  76. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/s.wav +0 -0
  77. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/space.wav +0 -0
  78. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/t.wav +0 -0
  79. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/thankyou.wav +0 -0
  80. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/thankyouqrz.wav +0 -0
  81. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/u.wav +0 -0
  82. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/v.wav +0 -0
  83. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/w.wav +0 -0
  84. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/x.wav +0 -0
  85. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/y.wav +0 -0
  86. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/yourcall.wav +0 -0
  87. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/phonetics/z.wav +0 -0
  88. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/pickcontest.ui +0 -0
  89. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/radio_green.png +0 -0
  90. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/radio_grey.png +0 -0
  91. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/radio_red.png +0 -0
  92. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/reddot.png +0 -0
  93. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/rttymacros.txt +0 -0
  94. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/settings.ui +0 -0
  95. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/splash.png +0 -0
  96. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/ssbmacros.txt +0 -0
  97. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/data/vfo.ui +0 -0
  98. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/fsutils.py +0 -0
  99. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/lib/__init__.py +0 -0
  100. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/lib/about.py +0 -0
  101. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/lib/cat_interface.py +0 -0
  102. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/lib/cwinterface.py +0 -0
  103. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/lib/database.py +0 -0
  104. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/lib/edit_contact.py +0 -0
  105. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/lib/edit_macro.py +0 -0
  106. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/lib/edit_opon.py +0 -0
  107. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/lib/edit_station.py +0 -0
  108. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/lib/fldigi_sendstring.py +0 -0
  109. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/lib/fldigi_watcher.py +0 -0
  110. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/lib/ft8_watcher.py +0 -0
  111. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/lib/ham_utility.py +0 -0
  112. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/lib/lookup.py +0 -0
  113. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/lib/multicast.py +0 -0
  114. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/lib/n1mm.py +0 -0
  115. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/lib/new_contest.py +0 -0
  116. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/lib/playsound.py +0 -0
  117. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/lib/plugin_common.py +0 -0
  118. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/lib/select_contest.py +0 -0
  119. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/lib/super_check_partial.py +0 -0
  120. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/lib/versiontest.py +0 -0
  121. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/logwindow.py +0 -0
  122. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/lookupservice.py +0 -0
  123. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/10_10_fall_cw.py +0 -0
  124. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/10_10_spring_cw.py +0 -0
  125. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/10_10_summer_phone.py +0 -0
  126. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/10_10_winter_phone.py +0 -0
  127. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/__init__.py +0 -0
  128. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/arrl_10m.py +0 -0
  129. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/arrl_dx_cw.py +0 -0
  130. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/arrl_dx_ssb.py +0 -0
  131. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/arrl_field_day.py +0 -0
  132. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/arrl_rtty_ru.py +0 -0
  133. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/arrl_ss_cw.py +0 -0
  134. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/arrl_ss_phone.py +0 -0
  135. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/arrl_vhf_jan.py +0 -0
  136. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/arrl_vhf_jun.py +0 -0
  137. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/arrl_vhf_sep.py +0 -0
  138. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/canada_day.py +0 -0
  139. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/cq_160_cw.py +0 -0
  140. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/cq_160_ssb.py +0 -0
  141. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/cq_wpx_cw.py +0 -0
  142. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/cq_wpx_rtty.py +0 -0
  143. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/cq_wpx_ssb.py +0 -0
  144. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/cq_ww_rtty.py +0 -0
  145. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/cq_ww_ssb.py +0 -0
  146. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/cwt.py +0 -0
  147. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/general_logging.py +0 -0
  148. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/helvetia.py +0 -0
  149. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/iaru_fieldday_r1_cw.py +0 -0
  150. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/iaru_fieldday_r1_ssb.py +0 -0
  151. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/iaru_hf.py +0 -0
  152. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/icwc_mst.py +0 -0
  153. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/jidx_cw.py +0 -0
  154. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/jidx_ph.py +0 -0
  155. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/k1usn_sst.py +0 -0
  156. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/naqp_cw.py +0 -0
  157. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/naqp_ssb.py +0 -0
  158. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/phone_weekly_test.py +0 -0
  159. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/ref_cw.py +0 -0
  160. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/stew_perry_topband.py +0 -0
  161. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/weekly_rtty.py +0 -0
  162. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/plugins/winter_field_day.py +0 -0
  163. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/radio.py +0 -0
  164. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/test.py +0 -0
  165. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/vfo.py +0 -0
  166. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm/voice_keying.py +0 -0
  167. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm.egg-info/SOURCES.txt +0 -0
  168. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm.egg-info/dependency_links.txt +0 -0
  169. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm.egg-info/entry_points.txt +0 -0
  170. {not1mm-24.10.6 → not1mm-24.10.10}/not1mm.egg-info/requires.txt +0 -0
  171. {not1mm-24.10.6 → not1mm-24.10.10}/setup.cfg +0 -0
  172. {not1mm-24.10.6 → 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.6
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,8 @@ 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.
233
+ - [24-10-8] Fix crash on Tune to spot. Change placeholder text for the CW port for those unable to read documentation.
222
234
  - [24-10-6] Removed 60, 30, 17 and 12M from the default list of bands.
223
235
  - [24-10-5-1] Store the bandmap spots age timer in the preferences.
224
236
  - [24-10-5] Force reselction of contest after different DB opened.
@@ -827,6 +839,55 @@ After editing a contact and before generating a Cabrillo file. There is a Misc
827
839
  menu option that will recalculate the multipliers incase an edit had caused a
828
840
  change.
829
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
+
830
891
  ## Contest specific notes
831
892
 
832
893
  I found it might be beneficial to have a section devoted to wierd quirky things
@@ -868,4 +929,4 @@ The best thing you can do is play around with it to see how it behaves.
868
929
  In the `Sent Exchange` field of the New Contest dialog put in the Precidence,
869
930
  Call, Check and Section. Example: `A K6GTE 17 ORG`.
870
931
 
871
- 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,8 @@ 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.
202
+ - [24-10-8] Fix crash on Tune to spot. Change placeholder text for the CW port for those unable to read documentation.
191
203
  - [24-10-6] Removed 60, 30, 17 and 12M from the default list of bands.
192
204
  - [24-10-5-1] Store the bandmap spots age timer in the preferences.
193
205
  - [24-10-5] Force reselction of contest after different DB opened.
@@ -796,6 +808,55 @@ After editing a contact and before generating a Cabrillo file. There is a Misc
796
808
  menu option that will recalculate the multipliers incase an edit had caused a
797
809
  change.
798
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
+
799
860
  ## Contest specific notes
800
861
 
801
862
  I found it might be beneficial to have a section devoted to wierd quirky things
@@ -837,4 +898,4 @@ The best thing you can do is play around with it to see how it behaves.
837
898
  In the `Sent Exchange` field of the New Contest dialog put in the Precidence,
838
899
  Call, Check and Section. Example: `A K6GTE 17 ORG`.
839
900
 
840
- 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
@@ -2609,13 +2659,16 @@ class MainWindow(QtWidgets.QMainWindow):
2609
2659
  self.rig_control.poll_callback.connect(self.poll_radio)
2610
2660
  self.radio_thread.start()
2611
2661
 
2612
- if self.pref.get("cwtype", 0) == 0:
2613
- self.cw = None
2614
- else:
2662
+ self.cw = None
2663
+ if (
2664
+ self.pref.get("cwport")
2665
+ and self.pref.get("cwip")
2666
+ and self.pref.get("cwtype")
2667
+ ):
2615
2668
  self.cw = CW(
2616
2669
  int(self.pref.get("cwtype")),
2617
2670
  self.pref.get("cwip"),
2618
- int(self.pref.get("cwport", 6789)),
2671
+ int(self.pref.get("cwport")),
2619
2672
  )
2620
2673
  self.cw.speed = 20
2621
2674
  if self.cw.servertype == 2:
@@ -2646,13 +2699,9 @@ class MainWindow(QtWidgets.QMainWindow):
2646
2699
  self.pref["bands"] = [
2647
2700
  "160",
2648
2701
  "80",
2649
- "60",
2650
2702
  "40",
2651
- "30",
2652
2703
  "20",
2653
- "17",
2654
2704
  "15",
2655
- "12",
2656
2705
  "10",
2657
2706
  ]
2658
2707
 
@@ -2667,7 +2716,33 @@ class MainWindow(QtWidgets.QMainWindow):
2667
2716
  for band_to_show in self.pref.get("bands", []):
2668
2717
  if band_to_show in _indicator:
2669
2718
  _indicator[band_to_show].show()
2670
- # 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"))
2671
2746
 
2672
2747
  def watch_udp(self) -> None:
2673
2748
  """
@@ -2711,7 +2786,8 @@ class MainWindow(QtWidgets.QMainWindow):
2711
2786
  self.callsign_changed()
2712
2787
  self.callsign.setFocus()
2713
2788
  self.callsign.activateWindow()
2714
- window.raise_()
2789
+ # This broke somehow.
2790
+ # window.raise_()
2715
2791
  continue
2716
2792
 
2717
2793
  if (