not1mm 24.10.27.1__tar.gz → 24.11.2__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 (176) hide show
  1. {not1mm-24.10.27.1 → not1mm-24.11.2}/PKG-INFO +2 -30
  2. {not1mm-24.10.27.1 → not1mm-24.11.2}/README.md +1 -29
  3. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/__main__.py +138 -8
  4. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/configuration.ui +617 -612
  5. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/main.ui +34 -7
  6. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/lib/database.py +97 -0
  7. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/lib/settings.py +8 -1
  8. not1mm-24.11.2/not1mm/lib/version.py +3 -0
  9. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/arrl_ss_cw.py +10 -0
  10. not1mm-24.11.2/not1mm/test.py +61 -0
  11. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm.egg-info/PKG-INFO +2 -30
  12. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm.egg-info/top_level.txt +0 -1
  13. {not1mm-24.10.27.1 → not1mm-24.11.2}/pyproject.toml +2 -2
  14. not1mm-24.10.27.1/not1mm/lib/version.py +0 -3
  15. not1mm-24.10.27.1/not1mm/test.py +0 -11
  16. {not1mm-24.10.27.1 → not1mm-24.11.2}/LICENSE +0 -0
  17. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/__init__.py +0 -0
  18. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/bandmap.py +0 -0
  19. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/checkwindow.py +0 -0
  20. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/JetBrainsMono-ExtraLight.ttf +0 -0
  21. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/MASTER.SCP +0 -0
  22. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/about.ui +0 -0
  23. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/alpha bravo charlie delta.txt +0 -0
  24. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/bandmap.ui +0 -0
  25. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/check.png +0 -0
  26. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/checkwindow.ui +0 -0
  27. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/contests.sql +0 -0
  28. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/cty.json +0 -0
  29. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/cwmacros.txt +0 -0
  30. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/donors.html +0 -0
  31. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/editcontact.ui +0 -0
  32. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/editmacro.ui +0 -0
  33. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/greendot.png +0 -0
  34. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/k6gte-not1mm.desktop +0 -0
  35. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/k6gte.not1mm-128.png +0 -0
  36. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/k6gte.not1mm-32.png +0 -0
  37. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/k6gte.not1mm-64.png +0 -0
  38. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/logwindow.ui +0 -0
  39. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/logwindowx.ui +0 -0
  40. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/new_contest.ui +0 -0
  41. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/not1mm.html +0 -0
  42. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/opon.ui +0 -0
  43. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/0.wav +0 -0
  44. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/1.wav +0 -0
  45. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/2.wav +0 -0
  46. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/3.wav +0 -0
  47. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/4.wav +0 -0
  48. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/5.wav +0 -0
  49. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/6.wav +0 -0
  50. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/7.wav +0 -0
  51. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/73.wav +0 -0
  52. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/8.wav +0 -0
  53. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/9.wav +0 -0
  54. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/a.wav +0 -0
  55. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/again.wav +0 -0
  56. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/b.wav +0 -0
  57. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/c.wav +0 -0
  58. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/contest.wav +0 -0
  59. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/cq.wav +0 -0
  60. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/cq2.wav +0 -0
  61. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/d.wav +0 -0
  62. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/e.wav +0 -0
  63. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/f.wav +0 -0
  64. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/g.wav +0 -0
  65. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/h.wav +0 -0
  66. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/i.wav +0 -0
  67. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/j.wav +0 -0
  68. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/k.wav +0 -0
  69. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/k6gte.wav +0 -0
  70. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/l.wav +0 -0
  71. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/m.wav +0 -0
  72. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/mynumber.wav +0 -0
  73. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/n.wav +0 -0
  74. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/nil.wav +0 -0
  75. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/o.wav +0 -0
  76. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/p.wav +0 -0
  77. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/q.wav +0 -0
  78. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/r.wav +0 -0
  79. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/roger.wav +0 -0
  80. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/s.wav +0 -0
  81. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/space.wav +0 -0
  82. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/t.wav +0 -0
  83. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/thankyou.wav +0 -0
  84. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/thankyouqrz.wav +0 -0
  85. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/u.wav +0 -0
  86. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/v.wav +0 -0
  87. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/w.wav +0 -0
  88. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/x.wav +0 -0
  89. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/y.wav +0 -0
  90. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/yourcall.wav +0 -0
  91. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/phonetics/z.wav +0 -0
  92. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/pickcontest.ui +0 -0
  93. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/radio_green.png +0 -0
  94. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/radio_grey.png +0 -0
  95. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/radio_red.png +0 -0
  96. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/reddot.png +0 -0
  97. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/rttymacros.txt +0 -0
  98. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/settings.ui +0 -0
  99. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/splash.png +0 -0
  100. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/ssbmacros.txt +0 -0
  101. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/data/vfo.ui +0 -0
  102. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/fsutils.py +0 -0
  103. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/lib/__init__.py +0 -0
  104. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/lib/about.py +0 -0
  105. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/lib/cat_interface.py +0 -0
  106. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/lib/cwinterface.py +0 -0
  107. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/lib/edit_contact.py +0 -0
  108. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/lib/edit_macro.py +0 -0
  109. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/lib/edit_opon.py +0 -0
  110. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/lib/edit_station.py +0 -0
  111. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/lib/fldigi_sendstring.py +0 -0
  112. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/lib/fldigi_watcher.py +0 -0
  113. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/lib/ft8_watcher.py +0 -0
  114. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/lib/ham_utility.py +0 -0
  115. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/lib/lookup.py +0 -0
  116. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/lib/multicast.py +0 -0
  117. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/lib/n1mm.py +0 -0
  118. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/lib/new_contest.py +0 -0
  119. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/lib/playsound.py +0 -0
  120. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/lib/plugin_common.py +0 -0
  121. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/lib/select_contest.py +0 -0
  122. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/lib/super_check_partial.py +0 -0
  123. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/lib/versiontest.py +0 -0
  124. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/logwindow.py +0 -0
  125. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/lookupservice.py +0 -0
  126. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/10_10_fall_cw.py +0 -0
  127. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/10_10_spring_cw.py +0 -0
  128. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/10_10_summer_phone.py +0 -0
  129. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/10_10_winter_phone.py +0 -0
  130. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/__init__.py +0 -0
  131. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/arrl_10m.py +0 -0
  132. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/arrl_dx_cw.py +0 -0
  133. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/arrl_dx_ssb.py +0 -0
  134. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/arrl_field_day.py +0 -0
  135. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/arrl_rtty_ru.py +0 -0
  136. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/arrl_ss_phone.py +0 -0
  137. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/arrl_vhf_jan.py +0 -0
  138. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/arrl_vhf_jun.py +0 -0
  139. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/arrl_vhf_sep.py +0 -0
  140. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/canada_day.py +0 -0
  141. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/cq_160_cw.py +0 -0
  142. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/cq_160_ssb.py +0 -0
  143. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/cq_wpx_cw.py +0 -0
  144. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/cq_wpx_rtty.py +0 -0
  145. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/cq_wpx_ssb.py +0 -0
  146. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/cq_ww_cw.py +0 -0
  147. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/cq_ww_rtty.py +0 -0
  148. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/cq_ww_ssb.py +0 -0
  149. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/cwt.py +0 -0
  150. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/general_logging.py +0 -0
  151. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/helvetia.py +0 -0
  152. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/iaru_fieldday_r1_cw.py +0 -0
  153. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/iaru_fieldday_r1_ssb.py +0 -0
  154. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/iaru_hf.py +0 -0
  155. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/icwc_mst.py +0 -0
  156. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/jidx_cw.py +0 -0
  157. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/jidx_ph.py +0 -0
  158. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/k1usn_sst.py +0 -0
  159. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/naqp_cw.py +0 -0
  160. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/naqp_rtty.py +0 -0
  161. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/naqp_ssb.py +0 -0
  162. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/phone_weekly_test.py +0 -0
  163. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/ref_cw.py +0 -0
  164. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/ref_ssb.py +0 -0
  165. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/stew_perry_topband.py +0 -0
  166. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/weekly_rtty.py +0 -0
  167. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/plugins/winter_field_day.py +0 -0
  168. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/radio.py +0 -0
  169. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/vfo.py +0 -0
  170. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm/voice_keying.py +0 -0
  171. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm.egg-info/SOURCES.txt +0 -0
  172. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm.egg-info/dependency_links.txt +0 -0
  173. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm.egg-info/entry_points.txt +0 -0
  174. {not1mm-24.10.27.1 → not1mm-24.11.2}/not1mm.egg-info/requires.txt +0 -0
  175. {not1mm-24.10.27.1 → not1mm-24.11.2}/setup.cfg +0 -0
  176. {not1mm-24.10.27.1 → not1mm-24.11.2}/test/contests.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 24.10.27.1
3
+ Version: 24.11.2
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
@@ -232,35 +232,7 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
232
232
 
233
233
  ## Recent Changes (Polishing the Turd)
234
234
 
235
- - [24-10-27-1] Fixed setting radios ssb mode when crossing 10M boundary.
236
- - [24-10-27] Fix bug where a contacts info could be carried over to new contact if no new value was written.
237
- - [24-10-26] Clear inputs when seeking to a call from the bandmap via the arrow up and down. Fixed bandmap crash from bad telnet data. Drop beacons from bandmap.
238
- - [24-10-25] Add File Menu option to create either an ASCII or UTF8 Cabrillo.
239
- - [24-10-24-1] Make all Cabrillo files with UTF-8.
240
- - [24-10-24] Forgot to convert the VFO dockwidget along with the rest. CQ WW CW, Dupes now score 0.
241
- - [24-10-23] Remove duplicate marked calls in the bandmap.
242
- - [24-10-22] Added ESM to RAC Canada Day. Added French REF.
243
- - [24-10-21] Scaled back the hits returned from the check window from 25 to 20. Seems less resource hungry now.
244
- - [24-10-20-1] ReWrote how the widgets interact. I probably broke a thing or two. Let me know.
245
- - [24-10-20] Add ESM to ARRL DX.
246
- - [24-10-19-1] Rewrite part of CAT control.
247
- - [24-10-19] Change ESM button states when the run state is toggled. Add ESM to ARRL Field Day and Winter Field Day.
248
- - [24-10-18] Fixed marked spots showing the correct time.
249
- - [24-10-17-2] Add ESM to ARRL Sweepstakes.
250
- - [24-10-17-1] Fix dupe check. Reordered change mode and interface update sequence. Resend mode if rigctld does not report back `RPRT 0`
251
- - [24-10-17] Increased max CW speed to 99, 'cause people be crazy. Trying smaller timeout for the rigctlsocket. Not having the checkwindow process events while not visible since it's a resource hog.
252
- - [24-10-15-1] Fix callsigns with a slash failing check during ESM.
253
- - [24-10-15] Add NAQP RTTY, Added ESM to NAQP.
254
- - [24-10-14] Add ESM to CQ WPX.
255
- - [24-10-13] Added ESM to Weekly RTTY, K1USN and CWT.
256
- - [24-10-11] added ESM to CQWW SSB and RTTY.
257
- - [24-10-10] Add ESM to CQ WW CW to test it out.
258
- - [24-10-8] Fix crash on Tune to spot. Change placeholder text for the CW port for those unable to read documentation.
259
- - [24-10-6] Removed 60, 30, 17 and 12M from the default list of bands.
260
- - [24-10-5-1] Store the bandmap spots age timer in the preferences.
261
- - [24-10-5] Force reselction of contest after different DB opened.
262
- - [24-10-2] Add WPX RTTY.
263
- - [24-10-1] Merged PR removing leading zeros from serial numbers. Merged PR correcting the parsing of lookups for previous name and state in the CWT.
235
+ - [24-11-2] Add beginning of call history files. Add command buttons.
264
236
 
265
237
  See [CHANGELOG.md](CHANGELOG.md) for prior changes.
266
238
 
@@ -201,35 +201,7 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
201
201
 
202
202
  ## Recent Changes (Polishing the Turd)
203
203
 
204
- - [24-10-27-1] Fixed setting radios ssb mode when crossing 10M boundary.
205
- - [24-10-27] Fix bug where a contacts info could be carried over to new contact if no new value was written.
206
- - [24-10-26] Clear inputs when seeking to a call from the bandmap via the arrow up and down. Fixed bandmap crash from bad telnet data. Drop beacons from bandmap.
207
- - [24-10-25] Add File Menu option to create either an ASCII or UTF8 Cabrillo.
208
- - [24-10-24-1] Make all Cabrillo files with UTF-8.
209
- - [24-10-24] Forgot to convert the VFO dockwidget along with the rest. CQ WW CW, Dupes now score 0.
210
- - [24-10-23] Remove duplicate marked calls in the bandmap.
211
- - [24-10-22] Added ESM to RAC Canada Day. Added French REF.
212
- - [24-10-21] Scaled back the hits returned from the check window from 25 to 20. Seems less resource hungry now.
213
- - [24-10-20-1] ReWrote how the widgets interact. I probably broke a thing or two. Let me know.
214
- - [24-10-20] Add ESM to ARRL DX.
215
- - [24-10-19-1] Rewrite part of CAT control.
216
- - [24-10-19] Change ESM button states when the run state is toggled. Add ESM to ARRL Field Day and Winter Field Day.
217
- - [24-10-18] Fixed marked spots showing the correct time.
218
- - [24-10-17-2] Add ESM to ARRL Sweepstakes.
219
- - [24-10-17-1] Fix dupe check. Reordered change mode and interface update sequence. Resend mode if rigctld does not report back `RPRT 0`
220
- - [24-10-17] Increased max CW speed to 99, 'cause people be crazy. Trying smaller timeout for the rigctlsocket. Not having the checkwindow process events while not visible since it's a resource hog.
221
- - [24-10-15-1] Fix callsigns with a slash failing check during ESM.
222
- - [24-10-15] Add NAQP RTTY, Added ESM to NAQP.
223
- - [24-10-14] Add ESM to CQ WPX.
224
- - [24-10-13] Added ESM to Weekly RTTY, K1USN and CWT.
225
- - [24-10-11] added ESM to CQWW SSB and RTTY.
226
- - [24-10-10] Add ESM to CQ WW CW to test it out.
227
- - [24-10-8] Fix crash on Tune to spot. Change placeholder text for the CW port for those unable to read documentation.
228
- - [24-10-6] Removed 60, 30, 17 and 12M from the default list of bands.
229
- - [24-10-5-1] Store the bandmap spots age timer in the preferences.
230
- - [24-10-5] Force reselction of contest after different DB opened.
231
- - [24-10-2] Add WPX RTTY.
232
- - [24-10-1] Merged PR removing leading zeros from serial numbers. Merged PR correcting the parsing of lookups for previous name and state in the CWT.
204
+ - [24-11-2] Add beginning of call history files. Add command buttons.
233
205
 
234
206
  See [CHANGELOG.md](CHANGELOG.md) for prior changes.
235
207
 
@@ -37,6 +37,7 @@ from PyQt6 import QtCore, QtGui, QtWidgets, uic
37
37
  from PyQt6.QtCore import QDir, Qt, QThread, QSettings, QCoreApplication
38
38
  from PyQt6.QtGui import QFontDatabase, QColorConstants, QPalette, QColor, QPixmap
39
39
  from PyQt6.QtWidgets import QFileDialog, QSplashScreen, QApplication
40
+ from PyQt6.QtCore import QT_VERSION_STR, PYQT_VERSION_STR
40
41
 
41
42
  from not1mm.lib.about import About
42
43
  from not1mm.lib.cwinterface import CW
@@ -163,6 +164,7 @@ class MainWindow(QtWidgets.QMainWindow):
163
164
  text_color = QColorConstants.Black
164
165
  current_palette = None
165
166
  use_esm = False
167
+ use_call_history = False
166
168
  esm_dict = {}
167
169
 
168
170
  radio_thread = QThread()
@@ -198,6 +200,7 @@ class MainWindow(QtWidgets.QMainWindow):
198
200
  self.setCorner(Qt.Corner.TopLeftCorner, Qt.DockWidgetArea.LeftDockWidgetArea)
199
201
  self.setCorner(Qt.Corner.BottomLeftCorner, Qt.DockWidgetArea.LeftDockWidgetArea)
200
202
  uic.loadUi(fsutils.APP_DATA_PATH / "main.ui", self)
203
+ self.history_info.hide()
201
204
  QApplication.instance().focusObjectChanged.connect(self.on_focus_changed)
202
205
  self.inputs_dict = {
203
206
  self.callsign: "callsign",
@@ -223,12 +226,15 @@ class MainWindow(QtWidgets.QMainWindow):
223
226
 
224
227
  self.actionCW_Macros.triggered.connect(self.cw_macros_state_changed)
225
228
  self.actionDark_Mode_2.triggered.connect(self.dark_mode_state_changed)
226
- self.actionCommand_Buttons.triggered.connect(self.command_buttons_state_change)
229
+ self.actionCommand_Buttons_2.triggered.connect(
230
+ self.command_buttons_state_change
231
+ )
227
232
  self.actionLog_Window.triggered.connect(self.launch_log_window)
228
233
  self.actionBandmap.triggered.connect(self.launch_bandmap_window)
229
234
  self.actionCheck_Window.triggered.connect(self.launch_check_window)
230
235
  self.actionVFO.triggered.connect(self.launch_vfo)
231
236
  self.actionRecalculate_Mults.triggered.connect(self.recalculate_mults)
237
+ self.actionLoad_Call_History_File.triggered.connect(self.load_call_history)
232
238
 
233
239
  self.actionGenerate_Cabrillo_ASCII.triggered.connect(
234
240
  lambda x: self.generate_cabrillo("ascii")
@@ -289,6 +295,12 @@ class MainWindow(QtWidgets.QMainWindow):
289
295
  self.radio_green = QtGui.QPixmap(str(icon_path / "radio_green.png"))
290
296
  self.radio_icon.setPixmap(self.radio_grey)
291
297
 
298
+ self.log_it.clicked.connect(self.save_contact)
299
+ self.wipe.clicked.connect(self.clearinputs)
300
+ self.esc_stop.clicked.connect(self.stop_cw)
301
+ self.mark.clicked.connect(self.mark_spot)
302
+ self.spot_it.clicked.connect(self.spot_dx)
303
+
292
304
  self.F1.setContextMenuPolicy(QtCore.Qt.ContextMenuPolicy.CustomContextMenu)
293
305
  self.F1.customContextMenuRequested.connect(lambda x: self.edit_macro(self.F1))
294
306
  self.F1.clicked.connect(lambda x: self.process_function_key(self.F1))
@@ -589,7 +601,21 @@ class MainWindow(QtWidgets.QMainWindow):
589
601
  self.voice_process.current_op = self.current_op
590
602
  self.make_op_dir()
591
603
 
592
- # Featureset for wayland
604
+ logger.debug(f"{QT_VERSION_STR=} {PYQT_VERSION_STR=}")
605
+ x = PYQT_VERSION_STR.split(".")
606
+ old_Qt = True
607
+ # test if pyqt version is at least 6.7.1
608
+ if len(x) == 1:
609
+ if int(x[0]) > 6:
610
+ old_Qt = False
611
+ elif len(x) == 2:
612
+ if int(x[0]) >= 6 and int(x[1]) > 8:
613
+ old_Qt = False
614
+ elif len(x) == 3:
615
+ if int(x[0]) >= 6 and int(x[1]) >= 7 and int(x[2]) >= 2:
616
+ old_Qt = False
617
+
618
+ # Featureset for wayland if pyqt is older that 6.7.1
593
619
  dockfeatures = (
594
620
  QtWidgets.QDockWidget.DockWidgetFeature.DockWidgetClosable
595
621
  | QtWidgets.QDockWidget.DockWidgetFeature.DockWidgetMovable
@@ -598,7 +624,7 @@ class MainWindow(QtWidgets.QMainWindow):
598
624
  self.show_splash_msg("Setting up BandMapWindow.")
599
625
  self.bandmap_window = BandMapWindow()
600
626
  self.bandmap_window.setObjectName("bandmap-window")
601
- if os.environ.get("WAYLAND_DISPLAY"):
627
+ if os.environ.get("WAYLAND_DISPLAY") and old_Qt is True:
602
628
  self.bandmap_window.setFeatures(dockfeatures)
603
629
  self.addDockWidget(Qt.DockWidgetArea.LeftDockWidgetArea, self.bandmap_window)
604
630
  self.bandmap_window.hide()
@@ -609,7 +635,7 @@ class MainWindow(QtWidgets.QMainWindow):
609
635
  self.show_splash_msg("Setting up CheckWindow.")
610
636
  self.check_window = CheckWindow()
611
637
  self.check_window.setObjectName("check-window")
612
- if os.environ.get("WAYLAND_DISPLAY"):
638
+ if os.environ.get("WAYLAND_DISPLAY") and old_Qt is True:
613
639
  self.check_window.setFeatures(dockfeatures)
614
640
  self.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, self.check_window)
615
641
  self.check_window.hide()
@@ -618,7 +644,7 @@ class MainWindow(QtWidgets.QMainWindow):
618
644
  self.show_splash_msg("Setting up VFOWindow.")
619
645
  self.vfo_window = VfoWindow()
620
646
  self.vfo_window.setObjectName("vfo-window")
621
- if os.environ.get("WAYLAND_DISPLAY"):
647
+ if os.environ.get("WAYLAND_DISPLAY") and old_Qt is True:
622
648
  self.vfo_window.setFeatures(dockfeatures)
623
649
  self.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, self.vfo_window)
624
650
  self.vfo_window.hide()
@@ -626,7 +652,7 @@ class MainWindow(QtWidgets.QMainWindow):
626
652
  self.show_splash_msg("Setting up LogWindow.")
627
653
  self.log_window = LogWindow()
628
654
  self.log_window.setObjectName("log-window")
629
- if os.environ.get("WAYLAND_DISPLAY"):
655
+ if os.environ.get("WAYLAND_DISPLAY") and old_Qt is True:
630
656
  self.log_window.setFeatures(dockfeatures)
631
657
  self.addDockWidget(Qt.DockWidgetArea.TopDockWidgetArea, self.log_window)
632
658
  self.log_window.hide()
@@ -688,6 +714,45 @@ class MainWindow(QtWidgets.QMainWindow):
688
714
  "You can udate to the current version by using:\npip install -U not1mm"
689
715
  )
690
716
 
717
+ def load_call_history(self) -> None:
718
+ """"""
719
+ filename = self.filepicker("other")
720
+ if filename:
721
+ self.database.create_callhistory_table()
722
+ self.database.delete_callhistory()
723
+
724
+ try:
725
+ with open(filename, "rt", encoding="utf-8") as file_descriptor:
726
+ lines = file_descriptor.readlines()
727
+ if "!!Order!!" in lines[0]:
728
+ item_names = lines[0].strip().split(",")
729
+ # ['!!Order!!', 'Call', 'Sect', 'State', 'CK', 'UserText', '']
730
+ item_names = item_names[1:-1]
731
+ # ['Call', 'Sect', 'State', 'CK', 'UserText']
732
+ lines = lines[1:]
733
+ group_list = []
734
+ for line in lines:
735
+ if line.startswith("#"):
736
+ continue
737
+ group = {}
738
+ fields = line.strip().split(",")
739
+ # ['4U1WB','MDC','DC','89','']
740
+ count = 0
741
+ try:
742
+ for item in item_names:
743
+ if item == "":
744
+ continue
745
+ group[item] = fields[count]
746
+ count += 1
747
+ group_list.append(group)
748
+ # database.add_callhistory_item(group)
749
+ # print(f"{group=}")
750
+ except IndexError:
751
+ ...
752
+ self.database.add_callhistory_items(group_list)
753
+ except FileNotFoundError as err:
754
+ self.show_message_box(f"{err}")
755
+
691
756
  def on_focus_changed(self, new):
692
757
  """"""
693
758
  if self.use_esm:
@@ -1713,6 +1778,14 @@ class MainWindow(QtWidgets.QMainWindow):
1713
1778
  "Database (*.db)",
1714
1779
  options=options,
1715
1780
  )
1781
+ if action == "other":
1782
+ file, _ = QFileDialog.getOpenFileName(
1783
+ self,
1784
+ "Choose a File",
1785
+ "~/",
1786
+ "Any (*.*)",
1787
+ options=options,
1788
+ )
1716
1789
  return file
1717
1790
 
1718
1791
  def recalculate_mults(self) -> None:
@@ -1892,6 +1965,43 @@ class MainWindow(QtWidgets.QMainWindow):
1892
1965
  if self.rig_control.interface == "flrig":
1893
1966
  self.rig_control.cat.set_flrig_cw_speed(self.cw_speed.value())
1894
1967
 
1968
+ def stop_cw(self):
1969
+ """"""
1970
+ if self.cw is not None:
1971
+ if self.cw.servertype == 1:
1972
+ self.cw.sendcw("\x1b4")
1973
+ return
1974
+ if self.rig_control:
1975
+ if self.rig_control.online:
1976
+ if self.pref.get("cwtype") == 3 and self.rig_control is not None:
1977
+ if self.rig_control.interface == "flrig":
1978
+ self.rig_control.cat.set_flrig_cw_send(False)
1979
+ self.rig_control.cat.set_flrig_cw_send(True)
1980
+
1981
+ def mark_spot(self):
1982
+ """"""
1983
+ freq = self.radio_state.get("vfoa")
1984
+ dx = self.callsign.text()
1985
+ if freq and dx:
1986
+ cmd = {}
1987
+ cmd["cmd"] = "MARKDX"
1988
+ cmd["dx"] = dx
1989
+ cmd["freq"] = float(int(freq) / 1000)
1990
+ if self.bandmap_window:
1991
+ self.bandmap_window.msg_from_main(cmd)
1992
+
1993
+ def spot_dx(self):
1994
+ """"""
1995
+ freq = self.radio_state.get("vfoa")
1996
+ dx = self.callsign.text()
1997
+ if freq and dx:
1998
+ cmd = {}
1999
+ cmd["cmd"] = "SPOTDX"
2000
+ cmd["dx"] = dx
2001
+ cmd["freq"] = float(int(freq) / 1000)
2002
+ if self.bandmap_window:
2003
+ self.bandmap_window.msg_from_main(cmd)
2004
+
1895
2005
  def keyPressEvent(self, event) -> None: # pylint: disable=invalid-name
1896
2006
  """
1897
2007
  This overrides Qt key event.
@@ -1906,6 +2016,12 @@ class MainWindow(QtWidgets.QMainWindow):
1906
2016
  None
1907
2017
  """
1908
2018
  modifier = event.modifiers()
2019
+ if (
2020
+ event.key() == Qt.Key.Key_Equal
2021
+ and modifier == Qt.KeyboardModifier.ControlModifier
2022
+ ):
2023
+ self.save_contact()
2024
+ return
1909
2025
  if event.key() == Qt.Key.Key_K:
1910
2026
  self.toggle_cw_entry()
1911
2027
  return
@@ -2886,6 +3002,9 @@ class MainWindow(QtWidgets.QMainWindow):
2886
3002
  "DISABLED": None,
2887
3003
  }
2888
3004
 
3005
+ self.use_call_history = self.pref.get("use_call_history", False)
3006
+ if self.use_call_history:
3007
+ self.history_info.show()
2889
3008
  self.use_esm = self.pref.get("use_esm", False)
2890
3009
  self.esm_dict["CQ"] = fkey_dict.get(self.pref.get("esm_cq", "DISABLED"))
2891
3010
  self.esm_dict["EXCH"] = fkey_dict.get(self.pref.get("esm_exch", "DISABLED"))
@@ -2953,7 +3072,7 @@ class MainWindow(QtWidgets.QMainWindow):
2953
3072
  None
2954
3073
  """
2955
3074
 
2956
- self.pref["command_buttons"] = self.actionCommand_Buttons.isChecked()
3075
+ self.pref["command_buttons"] = self.actionCommand_Buttons_2.isChecked()
2957
3076
  self.write_preference()
2958
3077
  self.show_command_buttons()
2959
3078
 
@@ -3109,6 +3228,13 @@ class MainWindow(QtWidgets.QMainWindow):
3109
3228
  if self.lookup_service:
3110
3229
  self.lookup_service.msg_from_main(cmd)
3111
3230
  self.next_field.setFocus()
3231
+ if self.contest:
3232
+ if self.use_call_history and hasattr(
3233
+ self.contest, "check_call_history"
3234
+ ):
3235
+ self.contest.check_call_history(self)
3236
+ if "CQ WW" in self.contest.name or "IARU HF" in self.contest.name:
3237
+ self.contest.prefill(self)
3112
3238
  return
3113
3239
  cmd = {}
3114
3240
  cmd["cmd"] = "CALLCHANGED"
@@ -3278,7 +3404,11 @@ class MainWindow(QtWidgets.QMainWindow):
3278
3404
  )
3279
3405
  if len(callsign) > 2:
3280
3406
  if self.contest:
3281
- self.contest.prefill(self)
3407
+ if (
3408
+ "CQ WW" not in self.contest.name
3409
+ and "IARU HF" not in self.contest.name
3410
+ ):
3411
+ self.contest.prefill(self)
3282
3412
 
3283
3413
  def check_dupe(self, call: str) -> bool:
3284
3414
  """Checks if a callsign is a dupe on current band/mode."""