not1mm 25.3.27__tar.gz → 25.3.31__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 (186) hide show
  1. {not1mm-25.3.27 → not1mm-25.3.31}/PKG-INFO +4 -2
  2. {not1mm-25.3.27 → not1mm-25.3.31}/README.md +3 -1
  3. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/__main__.py +36 -20
  4. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/bandmap.py +13 -42
  5. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/checkwindow.py +1 -1
  6. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/main.ui +3 -1
  7. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/lib/version.py +1 -1
  8. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/logwindow.py +2 -0
  9. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/ratewindow.py +1 -1
  10. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/statistics.py +1 -1
  11. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/vfo.py +1 -1
  12. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm.egg-info/PKG-INFO +4 -2
  13. {not1mm-25.3.27 → not1mm-25.3.31}/pyproject.toml +1 -1
  14. {not1mm-25.3.27 → not1mm-25.3.31}/LICENSE +0 -0
  15. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/__init__.py +0 -0
  16. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/JetBrainsMono-ExtraLight.ttf +0 -0
  17. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/MASTER.SCP +0 -0
  18. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/about.ui +0 -0
  19. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/alpha bravo charlie delta.txt +0 -0
  20. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/bandmap.ui +0 -0
  21. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/check.png +0 -0
  22. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/checkwindow.ui +0 -0
  23. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/configuration.ui +0 -0
  24. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/contests.sql +0 -0
  25. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/cty.json +0 -0
  26. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/cwmacros.txt +0 -0
  27. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/donors.html +0 -0
  28. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/editcontact.ui +0 -0
  29. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/editmacro.ui +0 -0
  30. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/greendot.png +0 -0
  31. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/k6gte-not1mm.desktop +0 -0
  32. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/k6gte.not1mm-128.png +0 -0
  33. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/k6gte.not1mm-32.png +0 -0
  34. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/k6gte.not1mm-64.png +0 -0
  35. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/logwindow.ui +0 -0
  36. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/logwindowx.ui +0 -0
  37. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/new_contest.ui +0 -0
  38. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/not1mm.html +0 -0
  39. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/opon.ui +0 -0
  40. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/0.wav +0 -0
  41. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/1.wav +0 -0
  42. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/2.wav +0 -0
  43. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/3.wav +0 -0
  44. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/4.wav +0 -0
  45. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/5.wav +0 -0
  46. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/6.wav +0 -0
  47. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/7.wav +0 -0
  48. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/73.wav +0 -0
  49. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/8.wav +0 -0
  50. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/9.wav +0 -0
  51. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/a.wav +0 -0
  52. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/again.wav +0 -0
  53. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/b.wav +0 -0
  54. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/c.wav +0 -0
  55. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/contest.wav +0 -0
  56. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/cq.wav +0 -0
  57. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/cq2.wav +0 -0
  58. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/d.wav +0 -0
  59. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/e.wav +0 -0
  60. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/f.wav +0 -0
  61. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/g.wav +0 -0
  62. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/h.wav +0 -0
  63. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/i.wav +0 -0
  64. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/j.wav +0 -0
  65. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/k.wav +0 -0
  66. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/k6gte.wav +0 -0
  67. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/l.wav +0 -0
  68. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/m.wav +0 -0
  69. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/mynumber.wav +0 -0
  70. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/n.wav +0 -0
  71. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/nil.wav +0 -0
  72. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/o.wav +0 -0
  73. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/p.wav +0 -0
  74. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/q.wav +0 -0
  75. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/r.wav +0 -0
  76. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/roger.wav +0 -0
  77. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/s.wav +0 -0
  78. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/space.wav +0 -0
  79. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/t.wav +0 -0
  80. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/thankyou.wav +0 -0
  81. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/thankyouqrz.wav +0 -0
  82. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/u.wav +0 -0
  83. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/v.wav +0 -0
  84. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/w.wav +0 -0
  85. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/x.wav +0 -0
  86. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/y.wav +0 -0
  87. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/yourcall.wav +0 -0
  88. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/phonetics/z.wav +0 -0
  89. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/pickcontest.ui +0 -0
  90. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/radio_green.png +0 -0
  91. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/radio_grey.png +0 -0
  92. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/radio_red.png +0 -0
  93. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/ratewindow.ui +0 -0
  94. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/reddot.png +0 -0
  95. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/rttymacros.txt +0 -0
  96. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/settings.ui +0 -0
  97. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/splash.png +0 -0
  98. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/ssbmacros.txt +0 -0
  99. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/statistics.ui +0 -0
  100. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/data/vfo.ui +0 -0
  101. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/fsutils.py +0 -0
  102. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/lib/__init__.py +0 -0
  103. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/lib/about.py +0 -0
  104. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/lib/cat_interface.py +0 -0
  105. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/lib/cwinterface.py +0 -0
  106. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/lib/database.py +0 -0
  107. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/lib/edit_contact.py +0 -0
  108. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/lib/edit_macro.py +0 -0
  109. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/lib/edit_opon.py +0 -0
  110. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/lib/edit_station.py +0 -0
  111. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/lib/fldigi_sendstring.py +0 -0
  112. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/lib/ft8_watcher.py +0 -0
  113. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/lib/ham_utility.py +0 -0
  114. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/lib/lookup.py +0 -0
  115. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/lib/multicast.py +0 -0
  116. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/lib/n1mm.py +0 -0
  117. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/lib/new_contest.py +0 -0
  118. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/lib/plugin_common.py +0 -0
  119. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/lib/select_contest.py +0 -0
  120. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/lib/settings.py +0 -0
  121. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/lib/super_check_partial.py +0 -0
  122. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/lib/versiontest.py +0 -0
  123. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/lookupservice.py +0 -0
  124. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/10_10_fall_cw.py +0 -0
  125. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/10_10_spring_cw.py +0 -0
  126. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/10_10_summer_phone.py +0 -0
  127. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/10_10_winter_phone.py +0 -0
  128. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/__init__.py +0 -0
  129. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/arrl_10m.py +0 -0
  130. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/arrl_160m.py +0 -0
  131. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/arrl_dx_cw.py +0 -0
  132. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/arrl_dx_ssb.py +0 -0
  133. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/arrl_field_day.py +0 -0
  134. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/arrl_rtty_ru.py +0 -0
  135. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/arrl_ss_cw.py +0 -0
  136. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/arrl_ss_phone.py +0 -0
  137. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/arrl_vhf_jan.py +0 -0
  138. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/arrl_vhf_jun.py +0 -0
  139. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/arrl_vhf_sep.py +0 -0
  140. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/canada_day.py +0 -0
  141. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/cq_160_cw.py +0 -0
  142. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/cq_160_ssb.py +0 -0
  143. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/cq_wpx_cw.py +0 -0
  144. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/cq_wpx_rtty.py +0 -0
  145. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/cq_wpx_ssb.py +0 -0
  146. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/cq_ww_cw.py +0 -0
  147. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/cq_ww_rtty.py +0 -0
  148. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/cq_ww_ssb.py +0 -0
  149. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/cwt.py +0 -0
  150. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/darc_vhf.py +0 -0
  151. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/darc_xmas.py +0 -0
  152. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/ea_majistad_cw.py +0 -0
  153. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/ea_majistad_ssb.py +0 -0
  154. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/ea_rtty.py +0 -0
  155. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/general_logging.py +0 -0
  156. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/helvetia.py +0 -0
  157. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/iaru_fieldday_r1_cw.py +0 -0
  158. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/iaru_fieldday_r1_ssb.py +0 -0
  159. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/iaru_hf.py +0 -0
  160. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/icwc_mst.py +0 -0
  161. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/jidx_cw.py +0 -0
  162. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/jidx_ph.py +0 -0
  163. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/k1usn_sst.py +0 -0
  164. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/labre_rs_digi.py +0 -0
  165. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/lz-dx.py +0 -0
  166. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/naqp_cw.py +0 -0
  167. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/naqp_rtty.py +0 -0
  168. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/naqp_ssb.py +0 -0
  169. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/phone_weekly_test.py +0 -0
  170. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/raem.py +0 -0
  171. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/randomgram.py +0 -0
  172. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/ref_cw.py +0 -0
  173. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/ref_ssb.py +0 -0
  174. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/stew_perry_topband.py +0 -0
  175. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/weekly_rtty.py +0 -0
  176. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/plugins/winter_field_day.py +0 -0
  177. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/radio.py +0 -0
  178. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/rtc_service.py +0 -0
  179. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/test.py +0 -0
  180. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm/voice_keying.py +0 -0
  181. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm.egg-info/SOURCES.txt +0 -0
  182. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm.egg-info/dependency_links.txt +0 -0
  183. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm.egg-info/entry_points.txt +0 -0
  184. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm.egg-info/requires.txt +0 -0
  185. {not1mm-25.3.27 → not1mm-25.3.31}/not1mm.egg-info/top_level.txt +0 -0
  186. {not1mm-25.3.27 → not1mm-25.3.31}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: not1mm
3
- Version: 25.3.27
3
+ Version: 25.3.31
4
4
  Summary: NOT1MM Logger
5
5
  Author-email: Michael Bridak <michael.bridak@gmail.com>
6
6
  License: GPL-3.0-or-later
@@ -247,7 +247,9 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
247
247
 
248
248
  ## Recent Changes
249
249
 
250
- - [25-3-27] Add more DI and PH modeto stats window.
250
+ - [25-3-31] Maybe try and do something useful with the detection of the systems dark mode.
251
+ - [25-3-27-1] Detect system dark mode.
252
+ - [25-3-27] Add more DI and PH mode to stats window.
251
253
  - [25-3-26] Record 0 points on dupes for each contest, excluding RandomGram.
252
254
  - [25-3-25-1] Improved process messaging.
253
255
  - [25-3-25] Use safer dict key access in the stats window.
@@ -215,7 +215,9 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
215
215
 
216
216
  ## Recent Changes
217
217
 
218
- - [25-3-27] Add more DI and PH modeto stats window.
218
+ - [25-3-31] Maybe try and do something useful with the detection of the systems dark mode.
219
+ - [25-3-27-1] Detect system dark mode.
220
+ - [25-3-27] Add more DI and PH mode to stats window.
219
221
  - [25-3-26] Record 0 points on dupes for each contest, excluding RandomGram.
220
222
  - [25-3-25-1] Improved process messaging.
221
223
  - [25-3-25] Use safer dict key access in the stats window.
@@ -212,6 +212,11 @@ class MainWindow(QtWidgets.QMainWindow):
212
212
  uic.loadUi(fsutils.APP_DATA_PATH / "main.ui", self)
213
213
  self.history_info.hide()
214
214
  QApplication.instance().focusObjectChanged.connect(self.on_focus_changed)
215
+ QApplication.instance().styleHints().colorSchemeChanged.connect(
216
+ self.dark_watcher
217
+ )
218
+ self.dark_watcher(QApplication.instance().styleHints().colorScheme())
219
+
215
220
  self.inputs_dict = {
216
221
  self.callsign: "callsign",
217
222
  self.sent: "sent",
@@ -235,7 +240,8 @@ class MainWindow(QtWidgets.QMainWindow):
235
240
  self.cw_entry.returnPressed.connect(self.toggle_cw_entry)
236
241
 
237
242
  self.actionCW_Macros.triggered.connect(self.cw_macros_state_changed)
238
- self.actionDark_Mode_2.triggered.connect(self.dark_mode_state_changed)
243
+ # self.actionDark_Mode_2.hide()
244
+ # self.actionDark_Mode_2.triggered.connect(self.dark_mode_state_changed)
239
245
  self.actionCommand_Buttons_2.triggered.connect(
240
246
  self.command_buttons_state_change
241
247
  )
@@ -771,6 +777,16 @@ class MainWindow(QtWidgets.QMainWindow):
771
777
  )
772
778
  self.fldigi_qso(datagram.decode())
773
779
 
780
+ def is_it_dark(self) -> bool:
781
+ """Returns if the DE has a dark theme active."""
782
+ hints = QtGui.QGuiApplication.styleHints()
783
+ scheme = hints.colorScheme()
784
+ return scheme == Qt.ColorScheme.Dark
785
+
786
+ def dark_watcher(self, color_scheme):
787
+ """..."""
788
+ self.setDarkMode(setdarkmode=color_scheme == Qt.ColorScheme.Dark)
789
+
774
790
  def load_call_history(self) -> None:
775
791
  """Display filepicker and load chosen call history file."""
776
792
  filename = self.filepicker("other")
@@ -1009,18 +1025,18 @@ class MainWindow(QtWidgets.QMainWindow):
1009
1025
  cmd = {}
1010
1026
  cmd["cmd"] = "DARKMODE"
1011
1027
  cmd["state"] = setdarkmode
1012
- if self.log_window:
1013
- self.log_window.msg_from_main(cmd)
1028
+ # if self.log_window:
1029
+ # self.log_window.msg_from_main(cmd)
1014
1030
  if self.bandmap_window:
1015
1031
  self.bandmap_window.msg_from_main(cmd)
1016
- if self.check_window:
1017
- self.check_window.msg_from_main(cmd)
1018
- if self.vfo_window:
1019
- self.vfo_window.msg_from_main(cmd)
1020
- if self.rate_window:
1021
- self.rate_window.msg_from_main(cmd)
1022
- if self.statistics_window:
1023
- self.statistics_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)
1024
1040
 
1025
1041
  if setdarkmode:
1026
1042
  darkPalette = QPalette()
@@ -3046,12 +3062,12 @@ class MainWindow(QtWidgets.QMainWindow):
3046
3062
  if self.lookup_service:
3047
3063
  self.lookup_service.msg_from_main(cmd)
3048
3064
 
3049
- if self.pref.get("darkmode"):
3050
- self.actionDark_Mode_2.setChecked(True)
3051
- self.setDarkMode(True)
3052
- else:
3053
- self.setDarkMode(False)
3054
- self.actionDark_Mode_2.setChecked(False)
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)
3055
3071
 
3056
3072
  try:
3057
3073
  if self.rtc_thread.isRunning():
@@ -3235,9 +3251,9 @@ class MainWindow(QtWidgets.QMainWindow):
3235
3251
 
3236
3252
  def dark_mode_state_changed(self) -> None:
3237
3253
  """Called when the Dark Mode menu state is changed."""
3238
- self.pref["darkmode"] = self.actionDark_Mode_2.isChecked()
3239
- self.write_preference()
3240
- self.setDarkMode(self.actionDark_Mode_2.isChecked())
3254
+ # self.pref["darkmode"] = self.actionDark_Mode_2.isChecked()
3255
+ # self.write_preference()
3256
+ # # self.setDarkMode(self.actionDark_Mode_2.isChecked())
3241
3257
 
3242
3258
  def rtc_response(self, response):
3243
3259
  print(f"{response=}")
@@ -21,7 +21,7 @@ from json import loads
21
21
  from PyQt6 import QtCore, QtGui, QtWidgets, uic, QtNetwork
22
22
  from PyQt6.QtGui import QColorConstants, QPalette, QColor
23
23
  from PyQt6.QtWidgets import QDockWidget
24
- from PyQt6.QtCore import pyqtSignal
24
+ from PyQt6.QtCore import Qt, pyqtSignal
25
25
 
26
26
  import not1mm.fsutils as fsutils
27
27
 
@@ -369,7 +369,7 @@ class BandMapWindow(QDockWidget):
369
369
  self.update_timer = QtCore.QTimer()
370
370
  self.update_timer.timeout.connect(self.update_station_timer)
371
371
  self.update_timer.start(UPDATE_INTERVAL)
372
- self.setDarkMode(self.settings.get("darkmode", False))
372
+ self.setDarkMode()
373
373
  self.update()
374
374
  self.request_workedlist()
375
375
  self.request_contest()
@@ -486,51 +486,22 @@ class BandMapWindow(QDockWidget):
486
486
  self.callsignField.setText(packet.get("operator", "").upper())
487
487
  return
488
488
  if packet.get("cmd", "") == "DARKMODE":
489
- self.setDarkMode(packet.get("state", False))
489
+ self.setDarkMode()
490
490
 
491
- def setDarkMode(self, setdarkmode=False):
491
+ def is_it_dark(self) -> bool:
492
+ """Returns if the DE has a dark theme active."""
493
+ hints = QtGui.QGuiApplication.styleHints()
494
+ scheme = hints.colorScheme()
495
+ return scheme == Qt.ColorScheme.Dark
496
+
497
+ def setDarkMode(self):
492
498
  """Set dark mode"""
493
- if setdarkmode:
494
- darkPalette = QPalette()
495
- darkColor = QColor(56, 56, 56)
496
- self.text_color = QColorConstants.White
497
- disabledColor = QColor(127, 127, 127)
498
- darkPalette.setColor(QPalette.ColorRole.Window, darkColor)
499
- darkPalette.setColor(QPalette.ColorRole.WindowText, QColorConstants.White)
500
- darkPalette.setColor(QPalette.ColorRole.Base, QColor(45, 45, 45))
501
- darkPalette.setColor(QPalette.ColorRole.AlternateBase, darkColor)
502
- darkPalette.setColor(QPalette.ColorRole.Text, QColorConstants.White)
503
- darkPalette.setColor(QPalette.ColorRole.Button, darkColor)
504
- darkPalette.setColor(QPalette.ColorRole.ButtonText, QColorConstants.White)
505
- darkPalette.setColor(QPalette.ColorRole.BrightText, QColorConstants.Red)
506
- darkPalette.setColor(QPalette.ColorRole.Link, QColor(42, 130, 218))
507
- darkPalette.setColor(QPalette.ColorRole.Highlight, QColor(42, 130, 218))
508
- darkPalette.setColor(
509
- QPalette.ColorRole.HighlightedText, QColorConstants.Black
510
- )
511
- darkPalette.setColor(
512
- QPalette.ColorGroup.Disabled,
513
- QPalette.ColorRole.ButtonText,
514
- disabledColor,
515
- )
516
- darkPalette.setColor(
517
- QPalette.ColorGroup.Disabled,
518
- QPalette.ColorRole.HighlightedText,
519
- disabledColor,
520
- )
521
- darkPalette.setColor(
522
- QPalette.ColorGroup.Disabled,
523
- QPalette.ColorRole.Text,
524
- disabledColor,
525
- )
526
499
 
527
- self.setPalette(darkPalette)
528
- self.callsignField.setPalette(darkPalette)
500
+ setdarkmode = self.is_it_dark()
501
+ if setdarkmode is True:
502
+ self.text_color = QColorConstants.White
529
503
  self.update()
530
504
  else:
531
- palette = self.style().standardPalette()
532
- self.setPalette(palette)
533
- self.callsignField.setPalette(palette)
534
505
  self.text_color = QColorConstants.Black
535
506
  self.update()
536
507
 
@@ -99,7 +99,7 @@ class CheckWindow(QDockWidget):
99
99
 
100
100
  def setDarkMode(self, dark: bool) -> None:
101
101
  """Forces a darkmode palette."""
102
-
102
+ return
103
103
  if dark:
104
104
  darkPalette = QPalette()
105
105
  darkColor = QColor(56, 56, 56)
@@ -1504,7 +1504,6 @@
1504
1504
  <string>View</string>
1505
1505
  </property>
1506
1506
  <addaction name="actionCW_Macros"/>
1507
- <addaction name="actionDark_Mode_2"/>
1508
1507
  <addaction name="actionCommand_Buttons_2"/>
1509
1508
  </widget>
1510
1509
  <widget class="QMenu" name="menuWindow">
@@ -2031,6 +2030,9 @@
2031
2030
  <property name="checkable">
2032
2031
  <bool>true</bool>
2033
2032
  </property>
2033
+ <property name="enabled">
2034
+ <bool>true</bool>
2035
+ </property>
2034
2036
  <property name="text">
2035
2037
  <string>Dark Mode</string>
2036
2038
  </property>
@@ -1,3 +1,3 @@
1
1
  """It's the version"""
2
2
 
3
- __version__ = "25.3.27"
3
+ __version__ = "25.3.31"
@@ -194,6 +194,7 @@ class LogWindow(QDockWidget):
194
194
  self.generalLog.setColumnHidden(self.get_column(column), False)
195
195
  self.focusedLog.setColumnHidden(self.get_column(column), False)
196
196
  if msg.get("cmd", "") == "DARKMODE":
197
+ print(f".................{msg.get("state", False)=}")
197
198
  self.set_dark_mode(msg.get("state", False))
198
199
 
199
200
  def resize_headers_to_match(self) -> None:
@@ -203,6 +204,7 @@ class LogWindow(QDockWidget):
203
204
 
204
205
  def set_dark_mode(self, dark: bool) -> None:
205
206
  """Forces a darkmode palette."""
207
+ return
206
208
 
207
209
  if dark:
208
210
  darkPalette = QPalette()
@@ -73,7 +73,7 @@ class RateWindow(QDockWidget):
73
73
 
74
74
  def setDarkMode(self, dark: bool) -> None:
75
75
  """Forces a darkmode palette."""
76
-
76
+ return
77
77
  if dark:
78
78
  darkPalette = QPalette()
79
79
  darkColor = QColor(56, 56, 56)
@@ -76,7 +76,7 @@ class StatsWindow(QDockWidget):
76
76
 
77
77
  def setDarkMode(self, dark: bool) -> None:
78
78
  """Forces a darkmode palette."""
79
-
79
+ return
80
80
  if dark:
81
81
  darkPalette = QPalette()
82
82
  darkColor = QColor(56, 56, 56)
@@ -57,7 +57,7 @@ class VfoWindow(QDockWidget):
57
57
 
58
58
  def setDarkMode(self, dark: bool) -> None:
59
59
  """Forces a darkmode palette."""
60
-
60
+ return
61
61
  if dark:
62
62
  darkPalette = QPalette()
63
63
  darkColor = QColor(56, 56, 56)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: not1mm
3
- Version: 25.3.27
3
+ Version: 25.3.31
4
4
  Summary: NOT1MM Logger
5
5
  Author-email: Michael Bridak <michael.bridak@gmail.com>
6
6
  License: GPL-3.0-or-later
@@ -247,7 +247,9 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
247
247
 
248
248
  ## Recent Changes
249
249
 
250
- - [25-3-27] Add more DI and PH modeto stats window.
250
+ - [25-3-31] Maybe try and do something useful with the detection of the systems dark mode.
251
+ - [25-3-27-1] Detect system dark mode.
252
+ - [25-3-27] Add more DI and PH mode to stats window.
251
253
  - [25-3-26] Record 0 points on dupes for each contest, excluding RandomGram.
252
254
  - [25-3-25-1] Improved process messaging.
253
255
  - [25-3-25] Use safer dict key access in the stats window.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "not1mm"
7
- version = "25.3.27"
7
+ version = "25.3.31"
8
8
  description = "NOT1MM Logger"
9
9
  license = { text = "GPL-3.0-or-later" }
10
10
  readme = "README.md"
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes