not1mm 25.1.15__tar.gz → 25.1.23.1__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 (179) hide show
  1. {not1mm-25.1.15 → not1mm-25.1.23.1}/PKG-INFO +20 -20
  2. {not1mm-25.1.15 → not1mm-25.1.23.1}/README.md +19 -19
  3. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/__main__.py +40 -0
  4. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/main.ui +14 -0
  5. not1mm-25.1.23.1/not1mm/data/ratewindow.ui +1185 -0
  6. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/lib/database.py +4 -0
  7. not1mm-25.1.23.1/not1mm/lib/version.py +3 -0
  8. not1mm-25.1.23.1/not1mm/ratewindow.py +263 -0
  9. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm.egg-info/PKG-INFO +20 -20
  10. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm.egg-info/SOURCES.txt +2 -0
  11. {not1mm-25.1.15 → not1mm-25.1.23.1}/pyproject.toml +1 -1
  12. not1mm-25.1.15/not1mm/lib/version.py +0 -3
  13. {not1mm-25.1.15 → not1mm-25.1.23.1}/LICENSE +0 -0
  14. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/__init__.py +0 -0
  15. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/bandmap.py +0 -0
  16. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/checkwindow.py +0 -0
  17. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/JetBrainsMono-ExtraLight.ttf +0 -0
  18. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/MASTER.SCP +0 -0
  19. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/about.ui +0 -0
  20. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/alpha bravo charlie delta.txt +0 -0
  21. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/bandmap.ui +0 -0
  22. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/check.png +0 -0
  23. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/checkwindow.ui +0 -0
  24. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/configuration.ui +0 -0
  25. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/contests.sql +0 -0
  26. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/cty.json +0 -0
  27. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/cwmacros.txt +0 -0
  28. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/donors.html +0 -0
  29. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/editcontact.ui +0 -0
  30. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/editmacro.ui +0 -0
  31. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/greendot.png +0 -0
  32. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/k6gte-not1mm.desktop +0 -0
  33. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/k6gte.not1mm-128.png +0 -0
  34. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/k6gte.not1mm-32.png +0 -0
  35. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/k6gte.not1mm-64.png +0 -0
  36. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/logwindow.ui +0 -0
  37. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/logwindowx.ui +0 -0
  38. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/new_contest.ui +0 -0
  39. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/not1mm.html +0 -0
  40. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/opon.ui +0 -0
  41. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/0.wav +0 -0
  42. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/1.wav +0 -0
  43. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/2.wav +0 -0
  44. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/3.wav +0 -0
  45. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/4.wav +0 -0
  46. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/5.wav +0 -0
  47. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/6.wav +0 -0
  48. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/7.wav +0 -0
  49. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/73.wav +0 -0
  50. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/8.wav +0 -0
  51. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/9.wav +0 -0
  52. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/a.wav +0 -0
  53. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/again.wav +0 -0
  54. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/b.wav +0 -0
  55. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/c.wav +0 -0
  56. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/contest.wav +0 -0
  57. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/cq.wav +0 -0
  58. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/cq2.wav +0 -0
  59. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/d.wav +0 -0
  60. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/e.wav +0 -0
  61. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/f.wav +0 -0
  62. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/g.wav +0 -0
  63. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/h.wav +0 -0
  64. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/i.wav +0 -0
  65. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/j.wav +0 -0
  66. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/k.wav +0 -0
  67. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/k6gte.wav +0 -0
  68. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/l.wav +0 -0
  69. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/m.wav +0 -0
  70. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/mynumber.wav +0 -0
  71. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/n.wav +0 -0
  72. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/nil.wav +0 -0
  73. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/o.wav +0 -0
  74. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/p.wav +0 -0
  75. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/q.wav +0 -0
  76. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/r.wav +0 -0
  77. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/roger.wav +0 -0
  78. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/s.wav +0 -0
  79. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/space.wav +0 -0
  80. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/t.wav +0 -0
  81. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/thankyou.wav +0 -0
  82. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/thankyouqrz.wav +0 -0
  83. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/u.wav +0 -0
  84. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/v.wav +0 -0
  85. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/w.wav +0 -0
  86. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/x.wav +0 -0
  87. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/y.wav +0 -0
  88. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/yourcall.wav +0 -0
  89. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/phonetics/z.wav +0 -0
  90. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/pickcontest.ui +0 -0
  91. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/radio_green.png +0 -0
  92. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/radio_grey.png +0 -0
  93. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/radio_red.png +0 -0
  94. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/reddot.png +0 -0
  95. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/rttymacros.txt +0 -0
  96. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/settings.ui +0 -0
  97. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/splash.png +0 -0
  98. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/ssbmacros.txt +0 -0
  99. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/data/vfo.ui +0 -0
  100. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/fsutils.py +0 -0
  101. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/lib/__init__.py +0 -0
  102. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/lib/about.py +0 -0
  103. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/lib/cat_interface.py +0 -0
  104. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/lib/cwinterface.py +0 -0
  105. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/lib/edit_contact.py +0 -0
  106. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/lib/edit_macro.py +0 -0
  107. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/lib/edit_opon.py +0 -0
  108. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/lib/edit_station.py +0 -0
  109. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/lib/fldigi_sendstring.py +0 -0
  110. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/lib/ft8_watcher.py +0 -0
  111. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/lib/ham_utility.py +0 -0
  112. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/lib/lookup.py +0 -0
  113. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/lib/multicast.py +0 -0
  114. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/lib/n1mm.py +0 -0
  115. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/lib/new_contest.py +0 -0
  116. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/lib/plugin_common.py +0 -0
  117. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/lib/select_contest.py +0 -0
  118. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/lib/settings.py +0 -0
  119. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/lib/super_check_partial.py +0 -0
  120. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/lib/versiontest.py +0 -0
  121. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/logwindow.py +0 -0
  122. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/lookupservice.py +0 -0
  123. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/10_10_fall_cw.py +0 -0
  124. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/10_10_spring_cw.py +0 -0
  125. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/10_10_summer_phone.py +0 -0
  126. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/10_10_winter_phone.py +0 -0
  127. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/__init__.py +0 -0
  128. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/arrl_10m.py +0 -0
  129. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/arrl_160m.py +0 -0
  130. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/arrl_dx_cw.py +0 -0
  131. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/arrl_dx_ssb.py +0 -0
  132. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/arrl_field_day.py +0 -0
  133. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/arrl_rtty_ru.py +0 -0
  134. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/arrl_ss_cw.py +0 -0
  135. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/arrl_ss_phone.py +0 -0
  136. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/arrl_vhf_jan.py +0 -0
  137. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/arrl_vhf_jun.py +0 -0
  138. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/arrl_vhf_sep.py +0 -0
  139. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/canada_day.py +0 -0
  140. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/cq_160_cw.py +0 -0
  141. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/cq_160_ssb.py +0 -0
  142. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/cq_wpx_cw.py +0 -0
  143. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/cq_wpx_rtty.py +0 -0
  144. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/cq_wpx_ssb.py +0 -0
  145. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/cq_ww_cw.py +0 -0
  146. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/cq_ww_rtty.py +0 -0
  147. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/cq_ww_ssb.py +0 -0
  148. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/cwt.py +0 -0
  149. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/darc_xmas.py +0 -0
  150. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/general_logging.py +0 -0
  151. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/helvetia.py +0 -0
  152. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/iaru_fieldday_r1_cw.py +0 -0
  153. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/iaru_fieldday_r1_ssb.py +0 -0
  154. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/iaru_hf.py +0 -0
  155. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/icwc_mst.py +0 -0
  156. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/jidx_cw.py +0 -0
  157. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/jidx_ph.py +0 -0
  158. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/k1usn_sst.py +0 -0
  159. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/lz-dx.py +0 -0
  160. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/naqp_cw.py +0 -0
  161. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/naqp_rtty.py +0 -0
  162. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/naqp_ssb.py +0 -0
  163. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/phone_weekly_test.py +0 -0
  164. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/raem.py +0 -0
  165. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/ref_cw.py +0 -0
  166. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/ref_ssb.py +0 -0
  167. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/stew_perry_topband.py +0 -0
  168. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/weekly_rtty.py +0 -0
  169. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/plugins/winter_field_day.py +0 -0
  170. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/radio.py +0 -0
  171. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/rtc_service.py +0 -0
  172. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/test.py +0 -0
  173. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/vfo.py +0 -0
  174. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm/voice_keying.py +0 -0
  175. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm.egg-info/dependency_links.txt +0 -0
  176. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm.egg-info/entry_points.txt +0 -0
  177. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm.egg-info/requires.txt +0 -0
  178. {not1mm-25.1.15 → not1mm-25.1.23.1}/not1mm.egg-info/top_level.txt +0 -0
  179. {not1mm-25.1.15 → not1mm-25.1.23.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: not1mm
3
- Version: 25.1.15
3
+ Version: 25.1.23.1
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
@@ -51,7 +51,6 @@ Requires-Dist: Levenshtein
51
51
  - [The What](#the-what)
52
52
  - [Target Environment](#target-environment)
53
53
  - [The Why](#the-why)
54
- - [General logging](#general-logging)
55
54
  - [Current state](#current-state)
56
55
  - [Code maturity](#code-maturity)
57
56
  - [Data and RTTY](#data-and-rtty)
@@ -115,6 +114,7 @@ Requires-Dist: Levenshtein
115
114
  - [Editing a contact](#editing-a-contact)
116
115
  - [The Bandmap Window](#the-bandmap-window)
117
116
  - [The Check Window](#the-check-window)
117
+ - [The Rate Window](#the-rate-window)
118
118
  - [The Remote VFO Window](#the-remote-vfo-window)
119
119
  - [Cabrillo](#cabrillo)
120
120
  - [ADIF](#adif)
@@ -164,11 +164,6 @@ I'm a casual contester and could not find any contesting software for Linux that
164
164
  I wanted to use. There is [Tucnak](http://tucnak.nagano.cz/) which is very robust
165
165
  and mature. It just wasn't for me.
166
166
 
167
- ### General logging
168
-
169
- In short... Don't. There are much better general purpose QSO logging programs.
170
- Try QLog or CQRLog.
171
-
172
167
  ## Current state
173
168
 
174
169
  ### Code maturity
@@ -240,6 +235,7 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
240
235
 
241
236
  ## Recent Changes (Polishing the Turd)
242
237
 
238
+ - [25-1-23] Added a basic rate window. Changed DB to WAL mode.
243
239
  - [25-1-15] Fix bug in ADIF output where mode showed as CW-R and not CW.
244
240
  - [25-1-6] Altered RTTY RU UDP ADIF parse.
245
241
  - [25-1-1] Added ARRL RTTY RU.
@@ -248,7 +244,7 @@ See [CHANGELOG.md](CHANGELOG.md) for prior changes.
248
244
 
249
245
  ## Flatpak
250
246
 
251
- I've tried for a couple days to get not1mm to build as a flatpak. I've failed.
247
+ I've tried for a couple days to get Not1MM to build as a flatpak. I've failed.
252
248
  It keeps failing at building numpy. If you happen to be a flatpak savant, please
253
249
  feel free to look at com.github.mbridak.not1mm.yaml and python3-modules.yaml and
254
250
  clue me into the black magic needed to get it to work.
@@ -257,7 +253,7 @@ clue me into the black magic needed to get it to work.
257
253
 
258
254
  ### Prerequisites
259
255
 
260
- not1mm requires:
256
+ Not1MM requires:
261
257
 
262
258
  - Python 3.9+
263
259
  - PyQt6
@@ -269,7 +265,7 @@ You should install these through your distribution's package manager before cont
269
265
  ### Common installation recipes for Ubuntu and Fedora
270
266
 
271
267
  I've taken the time to install some common Linux distributions into a VM and
272
- noted the minimum steps needed to install not1mm.
268
+ noted the minimum steps needed to install Not1MM.
273
269
 
274
270
  <details>
275
271
 
@@ -393,14 +389,14 @@ python3 -m pipx ensurepath
393
389
 
394
390
  #### Installing with pipx
395
391
 
396
- Then installing not1mm is as simple as:
392
+ Then installing Not1MM is as simple as:
397
393
 
398
394
  ```bash
399
395
  # Install not1mm
400
396
  pipx install not1mm
401
397
  ```
402
398
 
403
- If you need to later update not1mm, you can do so with:
399
+ If you need to later update Not1MM, you can do so with:
404
400
 
405
401
  ```bash
406
402
  # Update not1mm
@@ -423,7 +419,7 @@ source rebuild.sh
423
419
  ```
424
420
 
425
421
  from the root directory. This installs a build chain and a local editable copy
426
- of not1mm.
422
+ of Not1MM.
427
423
 
428
424
  There's two ways to launch the program from the local editable copy.
429
425
 
@@ -626,14 +622,10 @@ On the Options TAB you can:
626
622
 
627
623
  ## Logging WSJT-X FT8/FT4/ETC and FLDIGI RTTY contacts
628
624
 
629
- not1mm listens for WSJT-X UDP traffic on the Multicast address 224.0.0.1:2237.
630
- No setup is needed to be done on not1mm's side. That's good because I'm lazy.
625
+ Not1MM listens for WSJT-X UDP traffic on the Multicast address 224.0.0.1:2237.
626
+ No setup is needed to be done on Not1MM's side. That's good because I'm lazy.
631
627
 
632
- ~~not1mm polls for fldigi QSOs via it's XMLRPC interface. It does this in a rather stupid
633
- way. It just keeps asking what was the last QSO and compares it to the previous response.
634
- If it's different, it's new.~~
635
-
636
- not1mm watches for fldigi qso's by watching for UDP traffic from fldigi on 127.0.0.1:9876.
628
+ Not1MM watches for fldigi qso's by watching for UDP traffic from fldigi on 127.0.0.1:9876.
637
629
 
638
630
  ![fldigi configuration dialog](https://github.com/mbridak/not1mm/blob/master/pic/fldigi_adif_udp.png?raw=true)
639
631
 
@@ -811,6 +803,14 @@ Clicking on any of these items will change the callsign field.
811
803
 
812
804
  ![Check Window](https://github.com/mbridak/not1mm/raw/master/pic/checkwindow.png)
813
805
 
806
+ ### The Rate Window
807
+
808
+ `Window`>`Rate Window`
809
+
810
+ This window contains QSO rates and counts.
811
+
812
+ ![Rate Window](https://github.com/mbridak/not1mm/raw/master/pic/rate_window.png)
813
+
814
814
  ### The Remote VFO Window
815
815
 
816
816
  You can control the VFO on a remote rig by following the directions listed in
@@ -20,7 +20,6 @@
20
20
  - [The What](#the-what)
21
21
  - [Target Environment](#target-environment)
22
22
  - [The Why](#the-why)
23
- - [General logging](#general-logging)
24
23
  - [Current state](#current-state)
25
24
  - [Code maturity](#code-maturity)
26
25
  - [Data and RTTY](#data-and-rtty)
@@ -84,6 +83,7 @@
84
83
  - [Editing a contact](#editing-a-contact)
85
84
  - [The Bandmap Window](#the-bandmap-window)
86
85
  - [The Check Window](#the-check-window)
86
+ - [The Rate Window](#the-rate-window)
87
87
  - [The Remote VFO Window](#the-remote-vfo-window)
88
88
  - [Cabrillo](#cabrillo)
89
89
  - [ADIF](#adif)
@@ -133,11 +133,6 @@ I'm a casual contester and could not find any contesting software for Linux that
133
133
  I wanted to use. There is [Tucnak](http://tucnak.nagano.cz/) which is very robust
134
134
  and mature. It just wasn't for me.
135
135
 
136
- ### General logging
137
-
138
- In short... Don't. There are much better general purpose QSO logging programs.
139
- Try QLog or CQRLog.
140
-
141
136
  ## Current state
142
137
 
143
138
  ### Code maturity
@@ -209,6 +204,7 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
209
204
 
210
205
  ## Recent Changes (Polishing the Turd)
211
206
 
207
+ - [25-1-23] Added a basic rate window. Changed DB to WAL mode.
212
208
  - [25-1-15] Fix bug in ADIF output where mode showed as CW-R and not CW.
213
209
  - [25-1-6] Altered RTTY RU UDP ADIF parse.
214
210
  - [25-1-1] Added ARRL RTTY RU.
@@ -217,7 +213,7 @@ See [CHANGELOG.md](CHANGELOG.md) for prior changes.
217
213
 
218
214
  ## Flatpak
219
215
 
220
- I've tried for a couple days to get not1mm to build as a flatpak. I've failed.
216
+ I've tried for a couple days to get Not1MM to build as a flatpak. I've failed.
221
217
  It keeps failing at building numpy. If you happen to be a flatpak savant, please
222
218
  feel free to look at com.github.mbridak.not1mm.yaml and python3-modules.yaml and
223
219
  clue me into the black magic needed to get it to work.
@@ -226,7 +222,7 @@ clue me into the black magic needed to get it to work.
226
222
 
227
223
  ### Prerequisites
228
224
 
229
- not1mm requires:
225
+ Not1MM requires:
230
226
 
231
227
  - Python 3.9+
232
228
  - PyQt6
@@ -238,7 +234,7 @@ You should install these through your distribution's package manager before cont
238
234
  ### Common installation recipes for Ubuntu and Fedora
239
235
 
240
236
  I've taken the time to install some common Linux distributions into a VM and
241
- noted the minimum steps needed to install not1mm.
237
+ noted the minimum steps needed to install Not1MM.
242
238
 
243
239
  <details>
244
240
 
@@ -362,14 +358,14 @@ python3 -m pipx ensurepath
362
358
 
363
359
  #### Installing with pipx
364
360
 
365
- Then installing not1mm is as simple as:
361
+ Then installing Not1MM is as simple as:
366
362
 
367
363
  ```bash
368
364
  # Install not1mm
369
365
  pipx install not1mm
370
366
  ```
371
367
 
372
- If you need to later update not1mm, you can do so with:
368
+ If you need to later update Not1MM, you can do so with:
373
369
 
374
370
  ```bash
375
371
  # Update not1mm
@@ -392,7 +388,7 @@ source rebuild.sh
392
388
  ```
393
389
 
394
390
  from the root directory. This installs a build chain and a local editable copy
395
- of not1mm.
391
+ of Not1MM.
396
392
 
397
393
  There's two ways to launch the program from the local editable copy.
398
394
 
@@ -595,14 +591,10 @@ On the Options TAB you can:
595
591
 
596
592
  ## Logging WSJT-X FT8/FT4/ETC and FLDIGI RTTY contacts
597
593
 
598
- not1mm listens for WSJT-X UDP traffic on the Multicast address 224.0.0.1:2237.
599
- No setup is needed to be done on not1mm's side. That's good because I'm lazy.
594
+ Not1MM listens for WSJT-X UDP traffic on the Multicast address 224.0.0.1:2237.
595
+ No setup is needed to be done on Not1MM's side. That's good because I'm lazy.
600
596
 
601
- ~~not1mm polls for fldigi QSOs via it's XMLRPC interface. It does this in a rather stupid
602
- way. It just keeps asking what was the last QSO and compares it to the previous response.
603
- If it's different, it's new.~~
604
-
605
- not1mm watches for fldigi qso's by watching for UDP traffic from fldigi on 127.0.0.1:9876.
597
+ Not1MM watches for fldigi qso's by watching for UDP traffic from fldigi on 127.0.0.1:9876.
606
598
 
607
599
  ![fldigi configuration dialog](https://github.com/mbridak/not1mm/blob/master/pic/fldigi_adif_udp.png?raw=true)
608
600
 
@@ -780,6 +772,14 @@ Clicking on any of these items will change the callsign field.
780
772
 
781
773
  ![Check Window](https://github.com/mbridak/not1mm/raw/master/pic/checkwindow.png)
782
774
 
775
+ ### The Rate Window
776
+
777
+ `Window`>`Rate Window`
778
+
779
+ This window contains QSO rates and counts.
780
+
781
+ ![Rate Window](https://github.com/mbridak/not1mm/raw/master/pic/rate_window.png)
782
+
783
783
  ### The Remote VFO Window
784
784
 
785
785
  You can control the VFO on a remote rig by following the directions listed in
@@ -73,6 +73,7 @@ from not1mm.logwindow import LogWindow
73
73
  from not1mm.checkwindow import CheckWindow
74
74
  from not1mm.bandmap import BandMapWindow
75
75
  from not1mm.vfo import VfoWindow
76
+ from not1mm.ratewindow import RateWindow
76
77
  from not1mm.radio import Radio
77
78
  from not1mm.voice_keying import Voice
78
79
  from not1mm.lookupservice import LookupService
@@ -136,6 +137,7 @@ class MainWindow(QtWidgets.QMainWindow):
136
137
  "bandmapwindow": False,
137
138
  "checkwindow": False,
138
139
  "vfowindow": False,
140
+ "ratewindow": False,
139
141
  "darkmode": True,
140
142
  }
141
143
  appstarted = False
@@ -180,6 +182,7 @@ class MainWindow(QtWidgets.QMainWindow):
180
182
  check_window = None
181
183
  bandmap_window = None
182
184
  vfo_window = None
185
+ rate_window = None
183
186
  lookup_service = None
184
187
  fldigi_util = None
185
188
  rtc_service = None
@@ -236,6 +239,7 @@ class MainWindow(QtWidgets.QMainWindow):
236
239
  self.actionLog_Window.triggered.connect(self.launch_log_window)
237
240
  self.actionBandmap.triggered.connect(self.launch_bandmap_window)
238
241
  self.actionCheck_Window.triggered.connect(self.launch_check_window)
242
+ self.actionRate_Window.triggered.connect(self.launch_rate_window)
239
243
  self.actionVFO.triggered.connect(self.launch_vfo)
240
244
  self.actionRecalculate_Mults.triggered.connect(self.recalculate_mults)
241
245
  self.actionLoad_Call_History_File.triggered.connect(self.load_call_history)
@@ -642,6 +646,15 @@ class MainWindow(QtWidgets.QMainWindow):
642
646
  self.check_window.hide()
643
647
  self.check_window.message.connect(self.dockwidget_message)
644
648
 
649
+ self.show_splash_msg("Setting up RateWindow.")
650
+ self.rate_window = RateWindow()
651
+ self.rate_window.setObjectName("rate-window")
652
+ if os.environ.get("WAYLAND_DISPLAY") and old_Qt is True:
653
+ self.rate_window.setFeatures(dockfeatures)
654
+ self.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, self.rate_window)
655
+ self.rate_window.hide()
656
+ self.rate_window.message.connect(self.dockwidget_message)
657
+
645
658
  self.show_splash_msg("Setting up VFOWindow.")
646
659
  self.vfo_window = VfoWindow()
647
660
  self.vfo_window.setObjectName("vfo-window")
@@ -692,6 +705,14 @@ class MainWindow(QtWidgets.QMainWindow):
692
705
  self.check_window.hide()
693
706
  self.check_window.setActive(False)
694
707
 
708
+ self.actionRate_Window.setChecked(self.pref.get("ratewindow", False))
709
+ if self.actionRate_Window.isChecked():
710
+ self.rate_window.show()
711
+ self.rate_window.setActive(True)
712
+ else:
713
+ self.rate_window.hide()
714
+ self.rate_window.setActive(False)
715
+
695
716
  self.actionVFO.setChecked(self.pref.get("vfowindow", False))
696
717
  if self.actionVFO.isChecked():
697
718
  self.vfo_window.show()
@@ -966,6 +987,8 @@ class MainWindow(QtWidgets.QMainWindow):
966
987
  self.check_window.msg_from_main(cmd)
967
988
  if self.vfo_window:
968
989
  self.vfo_window.msg_from_main(cmd)
990
+ if self.rate_window:
991
+ self.rate_window.msg_from_main(cmd)
969
992
 
970
993
  if setdarkmode:
971
994
  darkPalette = QPalette()
@@ -1305,6 +1328,8 @@ class MainWindow(QtWidgets.QMainWindow):
1305
1328
  cmd["cmd"] = "NEWDB"
1306
1329
  if self.log_window:
1307
1330
  self.log_window.msg_from_main(cmd)
1331
+ if self.rate_window:
1332
+ self.rate_window.msg_from_main(cmd)
1308
1333
  self.clearinputs()
1309
1334
  self.edit_station_settings()
1310
1335
 
@@ -1342,6 +1367,8 @@ class MainWindow(QtWidgets.QMainWindow):
1342
1367
  cmd["cmd"] = "NEWDB"
1343
1368
  if self.log_window:
1344
1369
  self.log_window.msg_from_main(cmd)
1370
+ if self.rate_window:
1371
+ self.rate_window.msg_from_main(cmd)
1345
1372
  self.clearinputs()
1346
1373
  self.open_contest()
1347
1374
 
@@ -1632,6 +1659,8 @@ class MainWindow(QtWidgets.QMainWindow):
1632
1659
  cmd["cmd"] = "NEWDB"
1633
1660
  if self.log_window:
1634
1661
  self.log_window.msg_from_main(cmd)
1662
+ if self.rate_window:
1663
+ self.rate_window.msg_from_main(cmd)
1635
1664
  if hasattr(self.contest, "columns"):
1636
1665
  cmd = {}
1637
1666
  cmd["cmd"] = "SHOWCOLUMNS"
@@ -1841,6 +1870,17 @@ class MainWindow(QtWidgets.QMainWindow):
1841
1870
  self.check_window.hide()
1842
1871
  self.check_window.setActive(False)
1843
1872
 
1873
+ def launch_rate_window(self) -> None:
1874
+ """Launch the check window"""
1875
+ self.pref["ratewindow"] = self.actionRate_Window.isChecked()
1876
+ self.write_preference()
1877
+ if self.actionRate_Window.isChecked():
1878
+ self.rate_window.show()
1879
+ self.rate_window.setActive(True)
1880
+ else:
1881
+ self.rate_window.hide()
1882
+ self.rate_window.setActive(False)
1883
+
1844
1884
  def launch_vfo(self) -> None:
1845
1885
  """Launch the VFO window"""
1846
1886
  self.pref["vfowindow"] = self.actionVFO.isChecked()
@@ -1513,6 +1513,7 @@
1513
1513
  <addaction name="actionLog_Window"/>
1514
1514
  <addaction name="actionBandmap"/>
1515
1515
  <addaction name="actionCheck_Window"/>
1516
+ <addaction name="actionRate_Window"/>
1516
1517
  <addaction name="actionVFO"/>
1517
1518
  </widget>
1518
1519
  <widget class="QMenu" name="menuOther">
@@ -1961,6 +1962,19 @@
1961
1962
  </font>
1962
1963
  </property>
1963
1964
  </action>
1965
+ <action name="actionRate_Window">
1966
+ <property name="checkable">
1967
+ <bool>true</bool>
1968
+ </property>
1969
+ <property name="text">
1970
+ <string>Rate Window</string>
1971
+ </property>
1972
+ <property name="font">
1973
+ <font>
1974
+ <family>JetBrains Mono ExtraLight</family>
1975
+ </font>
1976
+ </property>
1977
+ </action>
1964
1978
  <action name="actionVFO">
1965
1979
  <property name="checkable">
1966
1980
  <bool>true</bool>