not1mm 25.1.6__tar.gz → 25.1.23__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 (178) hide show
  1. {not1mm-25.1.6 → not1mm-25.1.23}/PKG-INFO +22 -21
  2. {not1mm-25.1.6 → not1mm-25.1.23}/README.md +20 -19
  3. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/__main__.py +32 -0
  4. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/main.ui +14 -0
  5. not1mm-25.1.23/not1mm/data/ratewindow.ui +1185 -0
  6. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/lib/database.py +4 -0
  7. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/lib/plugin_common.py +1 -1
  8. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/lib/version.py +1 -1
  9. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/winter_field_day.py +2 -0
  10. not1mm-25.1.23/not1mm/ratewindow.py +263 -0
  11. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm.egg-info/PKG-INFO +22 -21
  12. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm.egg-info/SOURCES.txt +2 -0
  13. {not1mm-25.1.6 → not1mm-25.1.23}/pyproject.toml +1 -1
  14. {not1mm-25.1.6 → not1mm-25.1.23}/LICENSE +0 -0
  15. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/__init__.py +0 -0
  16. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/bandmap.py +0 -0
  17. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/checkwindow.py +0 -0
  18. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/JetBrainsMono-ExtraLight.ttf +0 -0
  19. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/MASTER.SCP +0 -0
  20. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/about.ui +0 -0
  21. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/alpha bravo charlie delta.txt +0 -0
  22. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/bandmap.ui +0 -0
  23. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/check.png +0 -0
  24. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/checkwindow.ui +0 -0
  25. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/configuration.ui +0 -0
  26. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/contests.sql +0 -0
  27. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/cty.json +0 -0
  28. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/cwmacros.txt +0 -0
  29. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/donors.html +0 -0
  30. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/editcontact.ui +0 -0
  31. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/editmacro.ui +0 -0
  32. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/greendot.png +0 -0
  33. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/k6gte-not1mm.desktop +0 -0
  34. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/k6gte.not1mm-128.png +0 -0
  35. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/k6gte.not1mm-32.png +0 -0
  36. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/k6gte.not1mm-64.png +0 -0
  37. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/logwindow.ui +0 -0
  38. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/logwindowx.ui +0 -0
  39. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/new_contest.ui +0 -0
  40. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/not1mm.html +0 -0
  41. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/opon.ui +0 -0
  42. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/0.wav +0 -0
  43. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/1.wav +0 -0
  44. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/2.wav +0 -0
  45. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/3.wav +0 -0
  46. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/4.wav +0 -0
  47. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/5.wav +0 -0
  48. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/6.wav +0 -0
  49. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/7.wav +0 -0
  50. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/73.wav +0 -0
  51. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/8.wav +0 -0
  52. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/9.wav +0 -0
  53. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/a.wav +0 -0
  54. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/again.wav +0 -0
  55. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/b.wav +0 -0
  56. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/c.wav +0 -0
  57. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/contest.wav +0 -0
  58. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/cq.wav +0 -0
  59. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/cq2.wav +0 -0
  60. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/d.wav +0 -0
  61. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/e.wav +0 -0
  62. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/f.wav +0 -0
  63. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/g.wav +0 -0
  64. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/h.wav +0 -0
  65. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/i.wav +0 -0
  66. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/j.wav +0 -0
  67. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/k.wav +0 -0
  68. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/k6gte.wav +0 -0
  69. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/l.wav +0 -0
  70. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/m.wav +0 -0
  71. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/mynumber.wav +0 -0
  72. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/n.wav +0 -0
  73. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/nil.wav +0 -0
  74. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/o.wav +0 -0
  75. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/p.wav +0 -0
  76. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/q.wav +0 -0
  77. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/r.wav +0 -0
  78. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/roger.wav +0 -0
  79. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/s.wav +0 -0
  80. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/space.wav +0 -0
  81. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/t.wav +0 -0
  82. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/thankyou.wav +0 -0
  83. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/thankyouqrz.wav +0 -0
  84. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/u.wav +0 -0
  85. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/v.wav +0 -0
  86. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/w.wav +0 -0
  87. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/x.wav +0 -0
  88. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/y.wav +0 -0
  89. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/yourcall.wav +0 -0
  90. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/phonetics/z.wav +0 -0
  91. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/pickcontest.ui +0 -0
  92. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/radio_green.png +0 -0
  93. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/radio_grey.png +0 -0
  94. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/radio_red.png +0 -0
  95. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/reddot.png +0 -0
  96. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/rttymacros.txt +0 -0
  97. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/settings.ui +0 -0
  98. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/splash.png +0 -0
  99. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/ssbmacros.txt +0 -0
  100. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/data/vfo.ui +0 -0
  101. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/fsutils.py +0 -0
  102. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/lib/__init__.py +0 -0
  103. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/lib/about.py +0 -0
  104. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/lib/cat_interface.py +0 -0
  105. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/lib/cwinterface.py +0 -0
  106. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/lib/edit_contact.py +0 -0
  107. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/lib/edit_macro.py +0 -0
  108. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/lib/edit_opon.py +0 -0
  109. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/lib/edit_station.py +0 -0
  110. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/lib/fldigi_sendstring.py +0 -0
  111. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/lib/ft8_watcher.py +0 -0
  112. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/lib/ham_utility.py +0 -0
  113. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/lib/lookup.py +0 -0
  114. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/lib/multicast.py +0 -0
  115. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/lib/n1mm.py +0 -0
  116. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/lib/new_contest.py +0 -0
  117. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/lib/select_contest.py +0 -0
  118. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/lib/settings.py +0 -0
  119. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/lib/super_check_partial.py +0 -0
  120. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/lib/versiontest.py +0 -0
  121. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/logwindow.py +0 -0
  122. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/lookupservice.py +0 -0
  123. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/10_10_fall_cw.py +0 -0
  124. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/10_10_spring_cw.py +0 -0
  125. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/10_10_summer_phone.py +0 -0
  126. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/10_10_winter_phone.py +0 -0
  127. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/__init__.py +0 -0
  128. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/arrl_10m.py +0 -0
  129. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/arrl_160m.py +0 -0
  130. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/arrl_dx_cw.py +0 -0
  131. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/arrl_dx_ssb.py +0 -0
  132. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/arrl_field_day.py +0 -0
  133. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/arrl_rtty_ru.py +0 -0
  134. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/arrl_ss_cw.py +0 -0
  135. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/arrl_ss_phone.py +0 -0
  136. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/arrl_vhf_jan.py +0 -0
  137. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/arrl_vhf_jun.py +0 -0
  138. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/arrl_vhf_sep.py +0 -0
  139. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/canada_day.py +0 -0
  140. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/cq_160_cw.py +0 -0
  141. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/cq_160_ssb.py +0 -0
  142. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/cq_wpx_cw.py +0 -0
  143. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/cq_wpx_rtty.py +0 -0
  144. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/cq_wpx_ssb.py +0 -0
  145. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/cq_ww_cw.py +0 -0
  146. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/cq_ww_rtty.py +0 -0
  147. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/cq_ww_ssb.py +0 -0
  148. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/cwt.py +0 -0
  149. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/darc_xmas.py +0 -0
  150. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/general_logging.py +0 -0
  151. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/helvetia.py +0 -0
  152. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/iaru_fieldday_r1_cw.py +0 -0
  153. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/iaru_fieldday_r1_ssb.py +0 -0
  154. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/iaru_hf.py +0 -0
  155. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/icwc_mst.py +0 -0
  156. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/jidx_cw.py +0 -0
  157. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/jidx_ph.py +0 -0
  158. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/k1usn_sst.py +0 -0
  159. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/lz-dx.py +0 -0
  160. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/naqp_cw.py +0 -0
  161. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/naqp_rtty.py +0 -0
  162. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/naqp_ssb.py +0 -0
  163. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/phone_weekly_test.py +0 -0
  164. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/raem.py +0 -0
  165. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/ref_cw.py +0 -0
  166. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/ref_ssb.py +0 -0
  167. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/stew_perry_topband.py +0 -0
  168. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/plugins/weekly_rtty.py +0 -0
  169. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/radio.py +0 -0
  170. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/rtc_service.py +0 -0
  171. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/test.py +0 -0
  172. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/vfo.py +0 -0
  173. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm/voice_keying.py +0 -0
  174. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm.egg-info/dependency_links.txt +0 -0
  175. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm.egg-info/entry_points.txt +0 -0
  176. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm.egg-info/requires.txt +0 -0
  177. {not1mm-25.1.6 → not1mm-25.1.23}/not1mm.egg-info/top_level.txt +0 -0
  178. {not1mm-25.1.6 → not1mm-25.1.23}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: not1mm
3
- Version: 25.1.6
3
+ Version: 25.1.23
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,8 @@ 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.
239
+ - [25-1-15] Fix bug in ADIF output where mode showed as CW-R and not CW.
243
240
  - [25-1-6] Altered RTTY RU UDP ADIF parse.
244
241
  - [25-1-1] Added ARRL RTTY RU.
245
242
 
@@ -247,7 +244,7 @@ See [CHANGELOG.md](CHANGELOG.md) for prior changes.
247
244
 
248
245
  ## Flatpak
249
246
 
250
- 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.
251
248
  It keeps failing at building numpy. If you happen to be a flatpak savant, please
252
249
  feel free to look at com.github.mbridak.not1mm.yaml and python3-modules.yaml and
253
250
  clue me into the black magic needed to get it to work.
@@ -256,7 +253,7 @@ clue me into the black magic needed to get it to work.
256
253
 
257
254
  ### Prerequisites
258
255
 
259
- not1mm requires:
256
+ Not1MM requires:
260
257
 
261
258
  - Python 3.9+
262
259
  - PyQt6
@@ -268,7 +265,7 @@ You should install these through your distribution's package manager before cont
268
265
  ### Common installation recipes for Ubuntu and Fedora
269
266
 
270
267
  I've taken the time to install some common Linux distributions into a VM and
271
- noted the minimum steps needed to install not1mm.
268
+ noted the minimum steps needed to install Not1MM.
272
269
 
273
270
  <details>
274
271
 
@@ -392,14 +389,14 @@ python3 -m pipx ensurepath
392
389
 
393
390
  #### Installing with pipx
394
391
 
395
- Then installing not1mm is as simple as:
392
+ Then installing Not1MM is as simple as:
396
393
 
397
394
  ```bash
398
395
  # Install not1mm
399
396
  pipx install not1mm
400
397
  ```
401
398
 
402
- 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:
403
400
 
404
401
  ```bash
405
402
  # Update not1mm
@@ -422,7 +419,7 @@ source rebuild.sh
422
419
  ```
423
420
 
424
421
  from the root directory. This installs a build chain and a local editable copy
425
- of not1mm.
422
+ of Not1MM.
426
423
 
427
424
  There's two ways to launch the program from the local editable copy.
428
425
 
@@ -625,14 +622,10 @@ On the Options TAB you can:
625
622
 
626
623
  ## Logging WSJT-X FT8/FT4/ETC and FLDIGI RTTY contacts
627
624
 
628
- not1mm listens for WSJT-X UDP traffic on the Multicast address 224.0.0.1:2237.
629
- 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.
630
627
 
631
- ~~not1mm polls for fldigi QSOs via it's XMLRPC interface. It does this in a rather stupid
632
- way. It just keeps asking what was the last QSO and compares it to the previous response.
633
- If it's different, it's new.~~
634
-
635
- 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.
636
629
 
637
630
  ![fldigi configuration dialog](https://github.com/mbridak/not1mm/blob/master/pic/fldigi_adif_udp.png?raw=true)
638
631
 
@@ -810,6 +803,14 @@ Clicking on any of these items will change the callsign field.
810
803
 
811
804
  ![Check Window](https://github.com/mbridak/not1mm/raw/master/pic/checkwindow.png)
812
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
+
813
814
  ### The Remote VFO Window
814
815
 
815
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,8 @@ 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.
208
+ - [25-1-15] Fix bug in ADIF output where mode showed as CW-R and not CW.
212
209
  - [25-1-6] Altered RTTY RU UDP ADIF parse.
213
210
  - [25-1-1] Added ARRL RTTY RU.
214
211
 
@@ -216,7 +213,7 @@ See [CHANGELOG.md](CHANGELOG.md) for prior changes.
216
213
 
217
214
  ## Flatpak
218
215
 
219
- 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.
220
217
  It keeps failing at building numpy. If you happen to be a flatpak savant, please
221
218
  feel free to look at com.github.mbridak.not1mm.yaml and python3-modules.yaml and
222
219
  clue me into the black magic needed to get it to work.
@@ -225,7 +222,7 @@ clue me into the black magic needed to get it to work.
225
222
 
226
223
  ### Prerequisites
227
224
 
228
- not1mm requires:
225
+ Not1MM requires:
229
226
 
230
227
  - Python 3.9+
231
228
  - PyQt6
@@ -237,7 +234,7 @@ You should install these through your distribution's package manager before cont
237
234
  ### Common installation recipes for Ubuntu and Fedora
238
235
 
239
236
  I've taken the time to install some common Linux distributions into a VM and
240
- noted the minimum steps needed to install not1mm.
237
+ noted the minimum steps needed to install Not1MM.
241
238
 
242
239
  <details>
243
240
 
@@ -361,14 +358,14 @@ python3 -m pipx ensurepath
361
358
 
362
359
  #### Installing with pipx
363
360
 
364
- Then installing not1mm is as simple as:
361
+ Then installing Not1MM is as simple as:
365
362
 
366
363
  ```bash
367
364
  # Install not1mm
368
365
  pipx install not1mm
369
366
  ```
370
367
 
371
- 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:
372
369
 
373
370
  ```bash
374
371
  # Update not1mm
@@ -391,7 +388,7 @@ source rebuild.sh
391
388
  ```
392
389
 
393
390
  from the root directory. This installs a build chain and a local editable copy
394
- of not1mm.
391
+ of Not1MM.
395
392
 
396
393
  There's two ways to launch the program from the local editable copy.
397
394
 
@@ -594,14 +591,10 @@ On the Options TAB you can:
594
591
 
595
592
  ## Logging WSJT-X FT8/FT4/ETC and FLDIGI RTTY contacts
596
593
 
597
- not1mm listens for WSJT-X UDP traffic on the Multicast address 224.0.0.1:2237.
598
- 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.
599
596
 
600
- ~~not1mm polls for fldigi QSOs via it's XMLRPC interface. It does this in a rather stupid
601
- way. It just keeps asking what was the last QSO and compares it to the previous response.
602
- If it's different, it's new.~~
603
-
604
- 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.
605
598
 
606
599
  ![fldigi configuration dialog](https://github.com/mbridak/not1mm/blob/master/pic/fldigi_adif_udp.png?raw=true)
607
600
 
@@ -779,6 +772,14 @@ Clicking on any of these items will change the callsign field.
779
772
 
780
773
  ![Check Window](https://github.com/mbridak/not1mm/raw/master/pic/checkwindow.png)
781
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
+
782
783
  ### The Remote VFO Window
783
784
 
784
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
@@ -236,6 +238,7 @@ class MainWindow(QtWidgets.QMainWindow):
236
238
  self.actionLog_Window.triggered.connect(self.launch_log_window)
237
239
  self.actionBandmap.triggered.connect(self.launch_bandmap_window)
238
240
  self.actionCheck_Window.triggered.connect(self.launch_check_window)
241
+ self.actionRate_Window.triggered.connect(self.launch_rate_window)
239
242
  self.actionVFO.triggered.connect(self.launch_vfo)
240
243
  self.actionRecalculate_Mults.triggered.connect(self.recalculate_mults)
241
244
  self.actionLoad_Call_History_File.triggered.connect(self.load_call_history)
@@ -642,6 +645,15 @@ class MainWindow(QtWidgets.QMainWindow):
642
645
  self.check_window.hide()
643
646
  self.check_window.message.connect(self.dockwidget_message)
644
647
 
648
+ self.show_splash_msg("Setting up RateWindow.")
649
+ self.rate_window = RateWindow()
650
+ self.rate_window.setObjectName("rate-window")
651
+ if os.environ.get("WAYLAND_DISPLAY") and old_Qt is True:
652
+ self.rate_window.setFeatures(dockfeatures)
653
+ self.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, self.rate_window)
654
+ self.rate_window.hide()
655
+ self.rate_window.message.connect(self.dockwidget_message)
656
+
645
657
  self.show_splash_msg("Setting up VFOWindow.")
646
658
  self.vfo_window = VfoWindow()
647
659
  self.vfo_window.setObjectName("vfo-window")
@@ -692,6 +704,15 @@ class MainWindow(QtWidgets.QMainWindow):
692
704
  self.check_window.hide()
693
705
  self.check_window.setActive(False)
694
706
 
707
+ self.actionRate_Window.setChecked(self.pref.get("ratewindow", False))
708
+ if self.actionRate_Window.isChecked():
709
+ print(f"===============ratewindow=============")
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()
@@ -1841,6 +1862,17 @@ class MainWindow(QtWidgets.QMainWindow):
1841
1862
  self.check_window.hide()
1842
1863
  self.check_window.setActive(False)
1843
1864
 
1865
+ def launch_rate_window(self) -> None:
1866
+ """Launch the check window"""
1867
+ self.pref["ratewindow"] = self.actionRate_Window.isChecked()
1868
+ self.write_preference()
1869
+ if self.actionRate_Window.isChecked():
1870
+ self.rate_window.show()
1871
+ self.rate_window.setActive(True)
1872
+ else:
1873
+ self.rate_window.hide()
1874
+ self.rate_window.setActive(False)
1875
+
1844
1876
  def launch_vfo(self) -> None:
1845
1877
  """Launch the VFO window"""
1846
1878
  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>