not1mm 25.3.31.1__tar.gz → 25.4.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 (188) hide show
  1. {not1mm-25.3.31.1 → not1mm-25.4.2}/PKG-INFO +13 -23
  2. {not1mm-25.3.31.1 → not1mm-25.4.2}/README.md +11 -21
  3. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/__main__.py +10 -33
  4. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/checkwindow.py +2 -46
  5. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/MASTER.SCP +4353 -4553
  6. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/bandmap.ui +29 -11
  7. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/cty.json +1 -1
  8. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/main.ui +39 -30
  9. not1mm-25.4.2/not1mm/data/ratewindow.ui +370 -0
  10. not1mm-25.4.2/not1mm/lib/version.py +3 -0
  11. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/logwindow.py +0 -49
  12. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/ratewindow.py +0 -77
  13. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/statistics.py +0 -50
  14. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/vfo.py +0 -48
  15. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm.egg-info/PKG-INFO +13 -23
  16. {not1mm-25.3.31.1 → not1mm-25.4.2}/pyproject.toml +2 -2
  17. not1mm-25.3.31.1/not1mm/data/ratewindow.ui +0 -753
  18. not1mm-25.3.31.1/not1mm/lib/version.py +0 -3
  19. {not1mm-25.3.31.1 → not1mm-25.4.2}/LICENSE +0 -0
  20. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/__init__.py +0 -0
  21. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/bandmap.py +0 -0
  22. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/JetBrainsMono-ExtraLight.ttf +0 -0
  23. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/about.ui +0 -0
  24. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/alpha bravo charlie delta.txt +0 -0
  25. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/check.png +0 -0
  26. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/checkwindow.ui +0 -0
  27. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/configuration.ui +0 -0
  28. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/contests.sql +0 -0
  29. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/cwmacros.txt +0 -0
  30. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/donors.html +0 -0
  31. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/editcontact.ui +0 -0
  32. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/editmacro.ui +0 -0
  33. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/greendot.png +0 -0
  34. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/k6gte-not1mm.desktop +0 -0
  35. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/k6gte.not1mm-128.png +0 -0
  36. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/k6gte.not1mm-32.png +0 -0
  37. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/k6gte.not1mm-64.png +0 -0
  38. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/logwindow.ui +0 -0
  39. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/logwindowx.ui +0 -0
  40. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/new_contest.ui +0 -0
  41. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/not1mm.html +0 -0
  42. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/opon.ui +0 -0
  43. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/0.wav +0 -0
  44. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/1.wav +0 -0
  45. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/2.wav +0 -0
  46. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/3.wav +0 -0
  47. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/4.wav +0 -0
  48. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/5.wav +0 -0
  49. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/6.wav +0 -0
  50. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/7.wav +0 -0
  51. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/73.wav +0 -0
  52. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/8.wav +0 -0
  53. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/9.wav +0 -0
  54. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/a.wav +0 -0
  55. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/again.wav +0 -0
  56. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/b.wav +0 -0
  57. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/c.wav +0 -0
  58. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/contest.wav +0 -0
  59. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/cq.wav +0 -0
  60. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/cq2.wav +0 -0
  61. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/d.wav +0 -0
  62. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/e.wav +0 -0
  63. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/f.wav +0 -0
  64. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/g.wav +0 -0
  65. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/h.wav +0 -0
  66. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/i.wav +0 -0
  67. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/j.wav +0 -0
  68. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/k.wav +0 -0
  69. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/k6gte.wav +0 -0
  70. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/l.wav +0 -0
  71. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/m.wav +0 -0
  72. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/mynumber.wav +0 -0
  73. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/n.wav +0 -0
  74. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/nil.wav +0 -0
  75. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/o.wav +0 -0
  76. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/p.wav +0 -0
  77. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/q.wav +0 -0
  78. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/r.wav +0 -0
  79. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/roger.wav +0 -0
  80. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/s.wav +0 -0
  81. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/space.wav +0 -0
  82. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/t.wav +0 -0
  83. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/thankyou.wav +0 -0
  84. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/thankyouqrz.wav +0 -0
  85. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/u.wav +0 -0
  86. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/v.wav +0 -0
  87. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/w.wav +0 -0
  88. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/x.wav +0 -0
  89. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/y.wav +0 -0
  90. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/yourcall.wav +0 -0
  91. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/phonetics/z.wav +0 -0
  92. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/pickcontest.ui +0 -0
  93. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/radio_green.png +0 -0
  94. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/radio_grey.png +0 -0
  95. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/radio_red.png +0 -0
  96. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/reddot.png +0 -0
  97. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/rttymacros.txt +0 -0
  98. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/settings.ui +0 -0
  99. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/splash.png +0 -0
  100. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/ssbmacros.txt +0 -0
  101. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/statistics.ui +0 -0
  102. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/data/vfo.ui +0 -0
  103. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/fsutils.py +0 -0
  104. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/lib/__init__.py +0 -0
  105. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/lib/about.py +0 -0
  106. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/lib/cat_interface.py +0 -0
  107. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/lib/cwinterface.py +0 -0
  108. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/lib/database.py +0 -0
  109. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/lib/edit_contact.py +0 -0
  110. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/lib/edit_macro.py +0 -0
  111. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/lib/edit_opon.py +0 -0
  112. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/lib/edit_station.py +0 -0
  113. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/lib/fldigi_sendstring.py +0 -0
  114. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/lib/ft8_watcher.py +0 -0
  115. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/lib/ham_utility.py +0 -0
  116. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/lib/lookup.py +0 -0
  117. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/lib/multicast.py +0 -0
  118. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/lib/n1mm.py +0 -0
  119. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/lib/new_contest.py +0 -0
  120. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/lib/plugin_common.py +0 -0
  121. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/lib/select_contest.py +0 -0
  122. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/lib/settings.py +0 -0
  123. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/lib/super_check_partial.py +0 -0
  124. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/lib/versiontest.py +0 -0
  125. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/lookupservice.py +0 -0
  126. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/10_10_fall_cw.py +0 -0
  127. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/10_10_spring_cw.py +0 -0
  128. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/10_10_summer_phone.py +0 -0
  129. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/10_10_winter_phone.py +0 -0
  130. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/__init__.py +0 -0
  131. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/arrl_10m.py +0 -0
  132. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/arrl_160m.py +0 -0
  133. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/arrl_dx_cw.py +0 -0
  134. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/arrl_dx_ssb.py +0 -0
  135. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/arrl_field_day.py +0 -0
  136. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/arrl_rtty_ru.py +0 -0
  137. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/arrl_ss_cw.py +0 -0
  138. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/arrl_ss_phone.py +0 -0
  139. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/arrl_vhf_jan.py +0 -0
  140. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/arrl_vhf_jun.py +0 -0
  141. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/arrl_vhf_sep.py +0 -0
  142. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/canada_day.py +0 -0
  143. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/cq_160_cw.py +0 -0
  144. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/cq_160_ssb.py +0 -0
  145. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/cq_wpx_cw.py +0 -0
  146. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/cq_wpx_rtty.py +0 -0
  147. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/cq_wpx_ssb.py +0 -0
  148. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/cq_ww_cw.py +0 -0
  149. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/cq_ww_rtty.py +0 -0
  150. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/cq_ww_ssb.py +0 -0
  151. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/cwt.py +0 -0
  152. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/darc_vhf.py +0 -0
  153. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/darc_xmas.py +0 -0
  154. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/ea_majistad_cw.py +0 -0
  155. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/ea_majistad_ssb.py +0 -0
  156. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/ea_rtty.py +0 -0
  157. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/general_logging.py +0 -0
  158. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/helvetia.py +0 -0
  159. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/iaru_fieldday_r1_cw.py +0 -0
  160. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/iaru_fieldday_r1_ssb.py +0 -0
  161. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/iaru_hf.py +0 -0
  162. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/icwc_mst.py +0 -0
  163. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/jidx_cw.py +0 -0
  164. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/jidx_ph.py +0 -0
  165. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/k1usn_sst.py +0 -0
  166. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/labre_rs_digi.py +0 -0
  167. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/lz-dx.py +0 -0
  168. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/naqp_cw.py +0 -0
  169. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/naqp_rtty.py +0 -0
  170. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/naqp_ssb.py +0 -0
  171. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/phone_weekly_test.py +0 -0
  172. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/raem.py +0 -0
  173. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/randomgram.py +0 -0
  174. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/ref_cw.py +0 -0
  175. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/ref_ssb.py +0 -0
  176. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/stew_perry_topband.py +0 -0
  177. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/weekly_rtty.py +0 -0
  178. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/plugins/winter_field_day.py +0 -0
  179. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/radio.py +0 -0
  180. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/rtc_service.py +0 -0
  181. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/test.py +0 -0
  182. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm/voice_keying.py +0 -0
  183. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm.egg-info/SOURCES.txt +0 -0
  184. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm.egg-info/dependency_links.txt +0 -0
  185. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm.egg-info/entry_points.txt +0 -0
  186. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm.egg-info/requires.txt +0 -0
  187. {not1mm-25.3.31.1 → not1mm-25.4.2}/not1mm.egg-info/top_level.txt +0 -0
  188. {not1mm-25.3.31.1 → not1mm-25.4.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: not1mm
3
- Version: 25.3.31.1
3
+ Version: 25.4.2
4
4
  Summary: NOT1MM Logger
5
5
  Author-email: Michael Bridak <michael.bridak@gmail.com>
6
6
  License: GPL-3.0-or-later
@@ -13,7 +13,7 @@ Classifier: Operating System :: POSIX :: Linux
13
13
  Classifier: Intended Audience :: End Users/Desktop
14
14
  Classifier: Natural Language :: English
15
15
  Classifier: Topic :: Communications :: Ham Radio
16
- Requires-Python: >=3.9
16
+ Requires-Python: >=3.10
17
17
  Description-Content-Type: text/markdown
18
18
  License-File: LICENSE
19
19
  Requires-Dist: PyQt6
@@ -247,24 +247,8 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
247
247
 
248
248
  ## Recent Changes
249
249
 
250
- - [25-3-31-1] Recolor rate window lables.
251
- - [25-3-31] Maybe try and do something useful with the detection of the systems dark mode.
252
- - [25-3-27-1] Detect system dark mode.
253
- - [25-3-27] Add more DI and PH mode to stats window.
254
- - [25-3-26] Record 0 points on dupes for each contest, excluding RandomGram.
255
- - [25-3-25-1] Improved process messaging.
256
- - [25-3-25] Use safer dict key access in the stats window.
257
- - [25-3-24] Add CW, PH, DI counts to the statistics window.
258
- - [25-3-23] Add a statistics window.
259
- - [25-3-19-1] Add EA His Maj King of Spain SSB.
260
- - [25-3-19] Merged PR from @DD5ML Adding DARC VHF.
261
- - [25-3-18] Add His Maj King of Spain CW
262
- - [25-3-17] Add EA RTTY contest.
263
- - [25-3-14] Add call history support to ARR Field Day.
264
- - [25-3-10] Slight change to adif header. Slight change to CAT status icon state.
265
- - [25-3-5] Added checks for blank/comment lines in the macros
266
- - [25-3-2] Added call history support to ARRL DX, just in time for it to be over.
267
- - [25-3-1] Add {OTHER1} and {OTHER2} macros.
250
+ - [25-4-2] Add some tool tips to bandmap and main. Updated Zoom buttons on bandmap. Updated minimum Python version to 3.10.
251
+ - [25-4-1] Fix: statistics window not populating when initially activated from the window menu. Removed unused code chucks. Removed some unused and hidden visual elements.
268
252
 
269
253
  See [CHANGELOG.md](CHANGELOG.md) for prior changes.
270
254
 
@@ -281,7 +265,7 @@ clue me into the black magic needed to get it to work.
281
265
 
282
266
  Not1MM requires:
283
267
 
284
- - Python 3.9+
268
+ - Python 3.10+
285
269
  - PyQt6
286
270
  - libportaudio2
287
271
  - libxcb-cursor0 (maybe... Depends on the distro)
@@ -634,12 +618,18 @@ appear. Those without will not.
634
618
 
635
619
  On the Options TAB you can:
636
620
 
637
- - Select to use Enter Sends Message (ESM), and configure it's function keys.
638
- - Select whether or not to use Call History info.
621
+ - Select to use Enter Sends Message ([ESM](#esm)), and configure it's function keys.
622
+ - Select whether or not to use [Call History](#call-history-files) info.
639
623
  - Select whether or not to send XML score info to online scoreboards.
640
624
 
641
625
  ![Options Screen](https://github.com/mbridak/not1mm/blob/master/pic/configuration_options.png?raw=true)
642
626
 
627
+ Three realtime score boards are supported:
628
+
629
+ - Real Time Contest Server at hamscore.com
630
+ - Contest Online ScoreBoard at contestonlinescore.com
631
+ - LiveScore at contest.run
632
+
643
633
  ## Logging WSJT-X FT8/FT4/ETC and FLDIGI RTTY contacts
644
634
 
645
635
  Not1MM listens for WSJT-X UDP traffic on the Multicast address 224.0.0.1:2237.
@@ -215,24 +215,8 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
215
215
 
216
216
  ## Recent Changes
217
217
 
218
- - [25-3-31-1] Recolor rate window lables.
219
- - [25-3-31] Maybe try and do something useful with the detection of the systems dark mode.
220
- - [25-3-27-1] Detect system dark mode.
221
- - [25-3-27] Add more DI and PH mode to stats window.
222
- - [25-3-26] Record 0 points on dupes for each contest, excluding RandomGram.
223
- - [25-3-25-1] Improved process messaging.
224
- - [25-3-25] Use safer dict key access in the stats window.
225
- - [25-3-24] Add CW, PH, DI counts to the statistics window.
226
- - [25-3-23] Add a statistics window.
227
- - [25-3-19-1] Add EA His Maj King of Spain SSB.
228
- - [25-3-19] Merged PR from @DD5ML Adding DARC VHF.
229
- - [25-3-18] Add His Maj King of Spain CW
230
- - [25-3-17] Add EA RTTY contest.
231
- - [25-3-14] Add call history support to ARR Field Day.
232
- - [25-3-10] Slight change to adif header. Slight change to CAT status icon state.
233
- - [25-3-5] Added checks for blank/comment lines in the macros
234
- - [25-3-2] Added call history support to ARRL DX, just in time for it to be over.
235
- - [25-3-1] Add {OTHER1} and {OTHER2} macros.
218
+ - [25-4-2] Add some tool tips to bandmap and main. Updated Zoom buttons on bandmap. Updated minimum Python version to 3.10.
219
+ - [25-4-1] Fix: statistics window not populating when initially activated from the window menu. Removed unused code chucks. Removed some unused and hidden visual elements.
236
220
 
237
221
  See [CHANGELOG.md](CHANGELOG.md) for prior changes.
238
222
 
@@ -249,7 +233,7 @@ clue me into the black magic needed to get it to work.
249
233
 
250
234
  Not1MM requires:
251
235
 
252
- - Python 3.9+
236
+ - Python 3.10+
253
237
  - PyQt6
254
238
  - libportaudio2
255
239
  - libxcb-cursor0 (maybe... Depends on the distro)
@@ -602,12 +586,18 @@ appear. Those without will not.
602
586
 
603
587
  On the Options TAB you can:
604
588
 
605
- - Select to use Enter Sends Message (ESM), and configure it's function keys.
606
- - Select whether or not to use Call History info.
589
+ - Select to use Enter Sends Message ([ESM](#esm)), and configure it's function keys.
590
+ - Select whether or not to use [Call History](#call-history-files) info.
607
591
  - Select whether or not to send XML score info to online scoreboards.
608
592
 
609
593
  ![Options Screen](https://github.com/mbridak/not1mm/blob/master/pic/configuration_options.png?raw=true)
610
594
 
595
+ Three realtime score boards are supported:
596
+
597
+ - Real Time Contest Server at hamscore.com
598
+ - Contest Online ScoreBoard at contestonlinescore.com
599
+ - LiveScore at contest.run
600
+
611
601
  ## Logging WSJT-X FT8/FT4/ETC and FLDIGI RTTY contacts
612
602
 
613
603
  Not1MM listens for WSJT-X UDP traffic on the Multicast address 224.0.0.1:2237.
@@ -240,8 +240,6 @@ class MainWindow(QtWidgets.QMainWindow):
240
240
  self.cw_entry.returnPressed.connect(self.toggle_cw_entry)
241
241
 
242
242
  self.actionCW_Macros.triggered.connect(self.cw_macros_state_changed)
243
- # self.actionDark_Mode_2.hide()
244
- # self.actionDark_Mode_2.triggered.connect(self.dark_mode_state_changed)
245
243
  self.actionCommand_Buttons_2.triggered.connect(
246
244
  self.command_buttons_state_change
247
245
  )
@@ -1025,18 +1023,9 @@ class MainWindow(QtWidgets.QMainWindow):
1025
1023
  cmd = {}
1026
1024
  cmd["cmd"] = "DARKMODE"
1027
1025
  cmd["state"] = setdarkmode
1028
- # if self.log_window:
1029
- # self.log_window.msg_from_main(cmd)
1030
1026
  if self.bandmap_window:
1031
1027
  self.bandmap_window.msg_from_main(cmd)
1032
- # if self.check_window:
1033
- # self.check_window.msg_from_main(cmd)
1034
- # if self.vfo_window:
1035
- # self.vfo_window.msg_from_main(cmd)
1036
- # if self.rate_window:
1037
- # self.rate_window.msg_from_main(cmd)
1038
- # if self.statistics_window:
1039
- # self.statistics_window.msg_from_main(cmd)
1028
+
1040
1029
 
1041
1030
  if setdarkmode:
1042
1031
  darkPalette = QPalette()
@@ -1947,6 +1936,7 @@ class MainWindow(QtWidgets.QMainWindow):
1947
1936
  if self.actionStatistics.isChecked():
1948
1937
  self.statistics_window.show()
1949
1938
  self.statistics_window.setActive(True)
1939
+ self.statistics_window.get_run_and_total_qs()
1950
1940
  else:
1951
1941
  self.statistics_window.hide()
1952
1942
  self.statistics_window.setActive(False)
@@ -3037,22 +3027,22 @@ class MainWindow(QtWidgets.QMainWindow):
3037
3027
  except (IOError, TypeError, ValueError) as exception:
3038
3028
  logger.critical("Error: %s", exception)
3039
3029
 
3040
- if self.pref.get("run_state"):
3030
+ if self.pref.get("run_state", False) is True:
3041
3031
  self.radioButton_run.setChecked(True)
3042
3032
  else:
3043
3033
  self.radioButton_sp.setChecked(True)
3044
3034
 
3045
- if self.pref.get("command_buttons"):
3035
+ if self.pref.get("command_buttons", False) is True:
3046
3036
  self.actionCommand_Buttons.setChecked(True)
3047
3037
  else:
3048
3038
  self.actionCommand_Buttons.setChecked(False)
3049
3039
 
3050
- if self.pref.get("cw_macros"):
3040
+ if self.pref.get("cw_macros", False) is True:
3051
3041
  self.actionCW_Macros.setChecked(True)
3052
3042
  else:
3053
3043
  self.actionCW_Macros.setChecked(False)
3054
3044
 
3055
- if self.pref.get("bands_modes"):
3045
+ if self.pref.get("bands_modes", False) is True:
3056
3046
  self.actionMode_and_Bands.setChecked(True)
3057
3047
  else:
3058
3048
  self.actionMode_and_Bands.setChecked(False)
@@ -3062,13 +3052,6 @@ class MainWindow(QtWidgets.QMainWindow):
3062
3052
  if self.lookup_service:
3063
3053
  self.lookup_service.msg_from_main(cmd)
3064
3054
 
3065
- # if self.pref.get("darkmode"):
3066
- # self.actionDark_Mode_2.setChecked(True)
3067
- # self.setDarkMode(True)
3068
- # else:
3069
- # self.setDarkMode(False)
3070
- # self.actionDark_Mode_2.setChecked(False)
3071
-
3072
3055
  try:
3073
3056
  if self.rtc_thread.isRunning():
3074
3057
  self.rtc_service.time_to_quit = True
@@ -3091,7 +3074,7 @@ class MainWindow(QtWidgets.QMainWindow):
3091
3074
  except ValueError:
3092
3075
  self.auto_cq_delay = 15000
3093
3076
 
3094
- if self.pref.get("send_rtc_scores", False):
3077
+ if self.pref.get("send_rtc_scores", False) is True:
3095
3078
  self.rtc_service = RTCService()
3096
3079
  self.rtc_service.moveToThread(self.rtc_thread)
3097
3080
  self.rtc_thread.started.connect(self.rtc_service.run)
@@ -3111,7 +3094,7 @@ class MainWindow(QtWidgets.QMainWindow):
3111
3094
  self.rig_control = None
3112
3095
  self.fldigi_util = FlDigi_Comm()
3113
3096
 
3114
- if self.pref.get("useflrig", False):
3097
+ if self.pref.get("useflrig", False) is True:
3115
3098
  logger.debug(
3116
3099
  "Using flrig: %s",
3117
3100
  f"{self.pref.get('CAT_ip')} {self.pref.get('CAT_port')}",
@@ -3128,7 +3111,7 @@ class MainWindow(QtWidgets.QMainWindow):
3128
3111
  self.rig_control.poll_callback.connect(self.poll_radio)
3129
3112
  self.radio_thread.start()
3130
3113
 
3131
- elif self.pref.get("userigctld", False):
3114
+ elif self.pref.get("userigctld", False) is True:
3132
3115
  logger.debug(
3133
3116
  "Using rigctld: %s",
3134
3117
  f"{self.pref.get('CAT_ip')} {self.pref.get('CAT_port')}",
@@ -3249,12 +3232,6 @@ class MainWindow(QtWidgets.QMainWindow):
3249
3232
 
3250
3233
  self.update_rtc_xml()
3251
3234
 
3252
- def dark_mode_state_changed(self) -> None:
3253
- """Called when the Dark Mode menu state is changed."""
3254
- # self.pref["darkmode"] = self.actionDark_Mode_2.isChecked()
3255
- # self.write_preference()
3256
- # # self.setDarkMode(self.actionDark_Mode_2.isChecked())
3257
-
3258
3235
  def rtc_response(self, response):
3259
3236
  print(f"{response=}")
3260
3237
 
@@ -3325,7 +3302,7 @@ class MainWindow(QtWidgets.QMainWindow):
3325
3302
 
3326
3303
  """
3327
3304
 
3328
- if self.pref.get("command_buttons"):
3305
+ if self.pref.get("command_buttons", False) is True:
3329
3306
  self.Command_Buttons.show()
3330
3307
  else:
3331
3308
  self.Command_Buttons.hide()
@@ -17,7 +17,7 @@ import Levenshtein
17
17
 
18
18
  from PyQt6 import uic
19
19
  from PyQt6.QtWidgets import QLabel, QVBoxLayout, QWidget, QDockWidget
20
- from PyQt6.QtGui import QMouseEvent, QColorConstants, QPalette, QColor
20
+ from PyQt6.QtGui import QMouseEvent
21
21
  from PyQt6.QtCore import pyqtSignal
22
22
 
23
23
  import not1mm.fsutils as fsutils
@@ -62,9 +62,7 @@ class CheckWindow(QDockWidget):
62
62
 
63
63
  def msg_from_main(self, packet):
64
64
  """"""
65
- if packet.get("cmd", "") == "DARKMODE":
66
- self.setDarkMode(packet.get("state", False))
67
- return
65
+
68
66
  if packet.get("cmd", "") == "UPDATELOG":
69
67
  self.clear_lists()
70
68
  return
@@ -97,47 +95,6 @@ class CheckWindow(QDockWidget):
97
95
  cmd["call"] = item
98
96
  self.message.emit(cmd)
99
97
 
100
- def setDarkMode(self, dark: bool) -> None:
101
- """Forces a darkmode palette."""
102
- return
103
- if dark:
104
- darkPalette = QPalette()
105
- darkColor = QColor(56, 56, 56)
106
- disabledColor = QColor(127, 127, 127)
107
- darkPalette.setColor(QPalette.ColorRole.Window, darkColor)
108
- darkPalette.setColor(QPalette.ColorRole.WindowText, QColorConstants.White)
109
- darkPalette.setColor(QPalette.ColorRole.Base, QColor(45, 45, 45))
110
- darkPalette.setColor(QPalette.ColorRole.AlternateBase, darkColor)
111
- darkPalette.setColor(QPalette.ColorRole.Text, QColorConstants.White)
112
- darkPalette.setColor(QPalette.ColorRole.Button, darkColor)
113
- darkPalette.setColor(QPalette.ColorRole.ButtonText, QColorConstants.White)
114
- darkPalette.setColor(QPalette.ColorRole.BrightText, QColorConstants.Red)
115
- darkPalette.setColor(QPalette.ColorRole.Link, QColor(42, 130, 218))
116
- darkPalette.setColor(QPalette.ColorRole.Highlight, QColor(42, 130, 218))
117
- darkPalette.setColor(
118
- QPalette.ColorRole.HighlightedText, QColorConstants.Black
119
- )
120
- darkPalette.setColor(
121
- QPalette.ColorGroup.Disabled,
122
- QPalette.ColorRole.ButtonText,
123
- disabledColor,
124
- )
125
- darkPalette.setColor(
126
- QPalette.ColorGroup.Disabled,
127
- QPalette.ColorRole.HighlightedText,
128
- disabledColor,
129
- )
130
- darkPalette.setColor(
131
- QPalette.ColorGroup.Disabled,
132
- QPalette.ColorRole.Text,
133
- disabledColor,
134
- )
135
-
136
- self.setPalette(darkPalette)
137
- else:
138
- palette = self.style().standardPalette()
139
- self.setPalette(palette)
140
-
141
98
  def load_pref(self) -> None:
142
99
  """
143
100
  Load preference file to get current db filename and sets the initial darkmode state.
@@ -162,7 +119,6 @@ class CheckWindow(QDockWidget):
162
119
 
163
120
  except IOError as exception:
164
121
  logger.critical("Error: %s", exception)
165
- self.setDarkMode(self.pref.get("darkmode", False))
166
122
 
167
123
  def clear_lists(self) -> None:
168
124
  """