not1mm 24.4.2.1__tar.gz → 24.4.4.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 (153) hide show
  1. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/PKG-INFO +3 -1
  2. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/README.md +2 -0
  3. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/__main__.py +63 -15
  4. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/main.ui +12 -1
  5. not1mm-24.4.4.1/not1mm/lib/new_contest.py +26 -0
  6. not1mm-24.4.4.1/not1mm/lib/version.py +3 -0
  7. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/plugins/10_10_fall_cw.py +2 -0
  8. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/plugins/10_10_spring_cw.py +2 -0
  9. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/plugins/10_10_summer_phone.py +2 -0
  10. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/plugins/10_10_winter_phone.py +2 -0
  11. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/plugins/arrl_10m.py +2 -0
  12. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/plugins/arrl_dx_cw.py +2 -0
  13. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/plugins/arrl_dx_ssb.py +2 -0
  14. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/plugins/arrl_field_day.py +2 -0
  15. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/plugins/arrl_rtty_ru.py +2 -0
  16. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/plugins/arrl_ss_cw.py +2 -5
  17. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/plugins/arrl_ss_phone.py +2 -5
  18. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/plugins/arrl_vhf_jan.py +2 -0
  19. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/plugins/arrl_vhf_jun.py +2 -0
  20. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/plugins/arrl_vhf_sep.py +2 -0
  21. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/plugins/canada_day.py +2 -0
  22. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/plugins/cq_160_cw.py +2 -0
  23. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/plugins/cq_160_ssb.py +2 -0
  24. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/plugins/cq_wpx_cw.py +2 -0
  25. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/plugins/cq_wpx_ssb.py +2 -0
  26. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/plugins/cq_ww_cw.py +2 -0
  27. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/plugins/cq_ww_ssb.py +2 -0
  28. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/plugins/cwt.py +3 -0
  29. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/plugins/general_logging.py +1 -1
  30. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/plugins/iaru_hf.py +2 -0
  31. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/plugins/jidx_cw.py +2 -0
  32. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/plugins/jidx_ph.py +2 -0
  33. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/plugins/naqp_cw.py +2 -0
  34. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/plugins/naqp_ssb.py +2 -0
  35. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/plugins/phone_weekly_test.py +2 -0
  36. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/plugins/stew_perry_topband.py +1 -0
  37. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/plugins/winter_field_day.py +2 -0
  38. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/vfo.py +2 -1
  39. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm.egg-info/PKG-INFO +3 -1
  40. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/pyproject.toml +1 -1
  41. not1mm-24.4.2.1/not1mm/lib/new_contest.py +0 -15
  42. not1mm-24.4.2.1/not1mm/lib/version.py +0 -3
  43. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/LICENSE +0 -0
  44. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/__init__.py +0 -0
  45. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/bandmap.py +0 -0
  46. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/checkwindow.py +0 -0
  47. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/JetBrainsMono-Regular.ttf +0 -0
  48. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/MASTER.SCP +0 -0
  49. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/about.ui +0 -0
  50. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/alpha bravo charlie delta.txt +0 -0
  51. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/bandmap.ui +0 -0
  52. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/check.png +0 -0
  53. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/checkwindow.ui +0 -0
  54. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/configuration.ui +0 -0
  55. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/contests.sql +0 -0
  56. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/cty.json +0 -0
  57. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/cwmacros.txt +0 -0
  58. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/donors.html +0 -0
  59. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/editcontact.ui +0 -0
  60. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/editmacro.ui +0 -0
  61. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/greendot.png +0 -0
  62. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/k6gte-not1mm.desktop +0 -0
  63. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/k6gte.not1mm-128.png +0 -0
  64. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/k6gte.not1mm-32.png +0 -0
  65. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/k6gte.not1mm-64.png +0 -0
  66. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/logwindow.ui +0 -0
  67. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/logwindowx.ui +0 -0
  68. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/new_contest.ui +0 -0
  69. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/not1mm.html +0 -0
  70. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/opon.ui +0 -0
  71. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/0.wav +0 -0
  72. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/1.wav +0 -0
  73. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/2.wav +0 -0
  74. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/3.wav +0 -0
  75. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/4.wav +0 -0
  76. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/5.wav +0 -0
  77. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/6.wav +0 -0
  78. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/7.wav +0 -0
  79. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/73.wav +0 -0
  80. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/8.wav +0 -0
  81. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/9.wav +0 -0
  82. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/a.wav +0 -0
  83. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/again.wav +0 -0
  84. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/b.wav +0 -0
  85. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/c.wav +0 -0
  86. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/contest.wav +0 -0
  87. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/cq.wav +0 -0
  88. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/d.wav +0 -0
  89. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/e.wav +0 -0
  90. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/f.wav +0 -0
  91. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/g.wav +0 -0
  92. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/h.wav +0 -0
  93. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/i.wav +0 -0
  94. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/j.wav +0 -0
  95. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/k.wav +0 -0
  96. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/k6gte.wav +0 -0
  97. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/l.wav +0 -0
  98. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/m.wav +0 -0
  99. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/mynumber.wav +0 -0
  100. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/n.wav +0 -0
  101. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/nil.wav +0 -0
  102. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/o.wav +0 -0
  103. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/p.wav +0 -0
  104. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/q.wav +0 -0
  105. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/r.wav +0 -0
  106. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/roger.wav +0 -0
  107. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/s.wav +0 -0
  108. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/space.wav +0 -0
  109. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/t.wav +0 -0
  110. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/thankyou.wav +0 -0
  111. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/thankyouqrz.wav +0 -0
  112. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/u.wav +0 -0
  113. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/v.wav +0 -0
  114. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/w.wav +0 -0
  115. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/x.wav +0 -0
  116. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/y.wav +0 -0
  117. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/yourcall.wav +0 -0
  118. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/phonetics/z.wav +0 -0
  119. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/pickcontest.ui +0 -0
  120. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/radio_green.png +0 -0
  121. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/radio_grey.png +0 -0
  122. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/radio_red.png +0 -0
  123. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/reddot.png +0 -0
  124. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/settings.ui +0 -0
  125. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/ssbmacros.txt +0 -0
  126. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/data/vfo.ui +0 -0
  127. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/fsutils.py +0 -0
  128. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/lib/__init__.py +0 -0
  129. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/lib/about.py +0 -0
  130. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/lib/cat_interface.py +0 -0
  131. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/lib/cwinterface.py +0 -0
  132. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/lib/database.py +0 -0
  133. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/lib/edit_contact.py +0 -0
  134. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/lib/edit_macro.py +0 -0
  135. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/lib/edit_opon.py +0 -0
  136. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/lib/edit_station.py +0 -0
  137. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/lib/ham_utility.py +0 -0
  138. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/lib/lookup.py +0 -0
  139. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/lib/multicast.py +0 -0
  140. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/lib/n1mm.py +0 -0
  141. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/lib/plugin_common.py +0 -0
  142. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/lib/select_contest.py +0 -0
  143. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/lib/settings.py +0 -0
  144. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/lib/super_check_partial.py +0 -0
  145. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/lib/versiontest.py +0 -0
  146. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/logwindow.py +0 -0
  147. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm/plugins/__init__.py +0 -0
  148. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm.egg-info/SOURCES.txt +0 -0
  149. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm.egg-info/dependency_links.txt +0 -0
  150. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm.egg-info/entry_points.txt +0 -0
  151. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm.egg-info/requires.txt +0 -0
  152. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/not1mm.egg-info/top_level.txt +0 -0
  153. {not1mm-24.4.2.1 → not1mm-24.4.4.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 24.4.2.1
3
+ Version: 24.4.4.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
@@ -177,6 +177,8 @@ I wish to thank those who've contributed to the project.
177
177
 
178
178
  ## Recent Changes
179
179
 
180
+ - [24-4-4-1] Made docking widgets open state persistent.
181
+ - [24-4-4] Added per-contest echange hint when adding new contest.
180
182
  - [24-4-2] Migrated to PyQt6. I'm sure there are broken things.
181
183
  - [24-4-1-2] Added color text indicators to the Check Partial window. Poached the code from @kyleboyle. Thanks! Fixed the Log, VFO and Check Partial windows to be actual docking widgets. Refocus call field after double clicking on item in the check partial window.
182
184
  - [24-4-1] Removed some un-needed loops and widgets from the check window. Fixed docking to the left side.
@@ -145,6 +145,8 @@ I wish to thank those who've contributed to the project.
145
145
 
146
146
  ## Recent Changes
147
147
 
148
+ - [24-4-4-1] Made docking widgets open state persistent.
149
+ - [24-4-4] Added per-contest echange hint when adding new contest.
148
150
  - [24-4-2] Migrated to PyQt6. I'm sure there are broken things.
149
151
  - [24-4-1-2] Added color text indicators to the Check Partial window. Poached the code from @kyleboyle. Thanks! Fixed the Log, VFO and Check Partial windows to be actual docking widgets. Refocus call field after double clicking on item in the check partial window.
150
152
  - [24-4-1] Removed some un-needed loops and widgets from the check window. Fixed docking to the left side.
@@ -484,6 +484,40 @@ class MainWindow(QtWidgets.QMainWindow):
484
484
  if self.pref.get("contest"):
485
485
  self.load_contest()
486
486
 
487
+ self.actionLog_Window.setChecked(self.pref.get("logwindow", False))
488
+ if self.log_window:
489
+ self.log_window.close()
490
+ if self.actionLog_Window.isChecked():
491
+ self.log_window = LogWindow()
492
+ self.addDockWidget(Qt.DockWidgetArea.BottomDockWidgetArea, self.log_window)
493
+ self.log_window.show()
494
+
495
+ self.actionBandmap.setChecked(self.pref.get("bandmapwindow", False))
496
+ if self.bandmap_window:
497
+ self.bandmap_window.close()
498
+ if self.actionBandmap.isChecked():
499
+ self.bandmap_window = BandMapWindow()
500
+ self.addDockWidget(
501
+ Qt.DockWidgetArea.RightDockWidgetArea, self.bandmap_window
502
+ )
503
+ self.bandmap_window.show()
504
+
505
+ self.actionCheck_Window.setChecked(self.pref.get("checkwindow", False))
506
+ if self.check_window:
507
+ self.check_window.close()
508
+ if self.actionCheck_Window.isChecked():
509
+ self.check_window = CheckWindow()
510
+ self.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, self.check_window)
511
+ self.check_window.show()
512
+
513
+ self.actionVFO.setChecked(self.pref.get("vfowindow", False))
514
+ if self.vfo_window:
515
+ self.vfo_window.close()
516
+ if self.actionVFO.isChecked():
517
+ self.vfo_window = VfoWindow()
518
+ self.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, self.vfo_window)
519
+ self.vfo_window.show()
520
+
487
521
  if not DEBUG_ENABLED:
488
522
  if VersionTest(__version__).test():
489
523
  self.show_message_box(
@@ -1389,35 +1423,49 @@ class MainWindow(QtWidgets.QMainWindow):
1389
1423
 
1390
1424
  def launch_log_window(self) -> None:
1391
1425
  """Launch the log window"""
1426
+ self.pref["logwindow"] = self.actionLog_Window.isChecked()
1427
+ self.write_preference()
1392
1428
  if self.log_window:
1393
1429
  self.log_window.close()
1394
- self.log_window = LogWindow()
1395
- self.addDockWidget(Qt.DockWidgetArea.BottomDockWidgetArea, self.log_window)
1396
- self.log_window.show()
1430
+ if self.actionLog_Window.isChecked():
1431
+ self.log_window = LogWindow()
1432
+ self.addDockWidget(Qt.DockWidgetArea.BottomDockWidgetArea, self.log_window)
1433
+ self.log_window.show()
1397
1434
 
1398
1435
  def launch_bandmap_window(self) -> None:
1399
1436
  """Launch the bandmap window"""
1437
+ self.pref["bandmapwindow"] = self.actionBandmap.isChecked()
1438
+ self.write_preference()
1400
1439
  if self.bandmap_window:
1401
1440
  self.bandmap_window.close()
1402
- self.bandmap_window = BandMapWindow()
1403
- self.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, self.bandmap_window)
1404
- self.bandmap_window.show()
1441
+ if self.actionBandmap.isChecked():
1442
+ self.bandmap_window = BandMapWindow()
1443
+ self.addDockWidget(
1444
+ Qt.DockWidgetArea.RightDockWidgetArea, self.bandmap_window
1445
+ )
1446
+ self.bandmap_window.show()
1405
1447
 
1406
1448
  def launch_check_window(self) -> None:
1407
1449
  """Launch the check window"""
1450
+ self.pref["checkwindow"] = self.actionCheck_Window.isChecked()
1451
+ self.write_preference()
1408
1452
  if self.check_window:
1409
1453
  self.check_window.close()
1410
- self.check_window = CheckWindow()
1411
- self.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, self.check_window)
1412
- self.check_window.show()
1454
+ if self.actionCheck_Window.isChecked():
1455
+ self.check_window = CheckWindow()
1456
+ self.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, self.check_window)
1457
+ self.check_window.show()
1413
1458
 
1414
1459
  def launch_vfo(self) -> None:
1415
1460
  """Launch the VFO window"""
1461
+ self.pref["vfowindow"] = self.actionVFO.isChecked()
1462
+ self.write_preference()
1416
1463
  if self.vfo_window:
1417
1464
  self.vfo_window.close()
1418
- self.vfo_window = VfoWindow()
1419
- self.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, self.vfo_window)
1420
- self.vfo_window.show()
1465
+ if self.actionVFO.isChecked():
1466
+ self.vfo_window = VfoWindow()
1467
+ self.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, self.vfo_window)
1468
+ self.vfo_window.show()
1421
1469
 
1422
1470
  def clear_band_indicators(self) -> None:
1423
1471
  """
@@ -3181,9 +3229,9 @@ class MainWindow(QtWidgets.QMainWindow):
3181
3229
  )
3182
3230
  try:
3183
3231
  fsutils.openFileWithOS(fsutils.USER_DATA_PATH / macro_file)
3184
- except:
3185
- logger.exception(
3186
- f"Could not open file {fsutils.USER_DATA_PATH / macro_file}"
3232
+ except FileNotFoundError | PermissionError | OSError as err:
3233
+ logger.critical(
3234
+ f"Could not open file {fsutils.USER_DATA_PATH / macro_file} {err}"
3187
3235
  )
3188
3236
 
3189
3237
  def read_cw_macros(self) -> None:
@@ -894,7 +894,6 @@
894
894
  <item>
895
895
  <widget class="QFrame" name="Button_Row1">
896
896
  <layout class="QHBoxLayout" name="ButtonRow1">
897
-
898
897
  <property name="sizeConstraint">
899
898
  <enum>QLayout::SetNoConstraint</enum>
900
899
  </property>
@@ -1543,6 +1542,9 @@
1543
1542
  </property>
1544
1543
  </action>
1545
1544
  <action name="actionLog_Window">
1545
+ <property name="checkable">
1546
+ <bool>true</bool>
1547
+ </property>
1546
1548
  <property name="text">
1547
1549
  <string>QSO Log</string>
1548
1550
  </property>
@@ -1708,6 +1710,9 @@
1708
1710
  </property>
1709
1711
  </action>
1710
1712
  <action name="actionBandmap">
1713
+ <property name="checkable">
1714
+ <bool>true</bool>
1715
+ </property>
1711
1716
  <property name="text">
1712
1717
  <string>Bandmap</string>
1713
1718
  </property>
@@ -1743,11 +1748,17 @@
1743
1748
  </property>
1744
1749
  </action>
1745
1750
  <action name="actionCheck_Window">
1751
+ <property name="checkable">
1752
+ <bool>true</bool>
1753
+ </property>
1746
1754
  <property name="text">
1747
1755
  <string>Check Partial</string>
1748
1756
  </property>
1749
1757
  </action>
1750
1758
  <action name="actionVFO">
1759
+ <property name="checkable">
1760
+ <bool>true</bool>
1761
+ </property>
1751
1762
  <property name="text">
1752
1763
  <string>VFO</string>
1753
1764
  </property>
@@ -0,0 +1,26 @@
1
+ """New Contest Dialog"""
2
+
3
+ import importlib
4
+ from PyQt6 import QtWidgets, uic
5
+
6
+
7
+ class NewContest(QtWidgets.QDialog):
8
+ """New Contest"""
9
+
10
+ def __init__(self, app_data_path):
11
+ super().__init__(None)
12
+ uic.loadUi(app_data_path / "new_contest.ui", self)
13
+ self.buttonBox.clicked.connect(self.store)
14
+ self.contest.currentTextChanged.connect(self.add_exchange_hint)
15
+
16
+ def store(self):
17
+ """dialog magic"""
18
+
19
+ def add_exchange_hint(self):
20
+ """add hint"""
21
+ contest_name = self.contest.currentText().lower().replace(" ", "_")
22
+ temp = importlib.import_module(f"not1mm.plugins.{contest_name}")
23
+ if hasattr(temp, "EXCHANGE_HINT"):
24
+ self.exchange.setPlaceholderText(temp.EXCHANGE_HINT)
25
+ else:
26
+ self.exchange.setPlaceholderText("")
@@ -0,0 +1,3 @@
1
+ """It's the version"""
2
+
3
+ __version__ = "24.4.4.1"
@@ -13,6 +13,8 @@ from not1mm.lib.version import __version__
13
13
 
14
14
  logger = logging.getLogger(__name__)
15
15
 
16
+ EXCHANGE_HINT = "Name + 10-10# + SPC"
17
+
16
18
  name = "10 10 FALL CW"
17
19
  cabrillo_name = "10-10-FALL-CW"
18
20
  mode = "CW" # CW SSB BOTH RTTY
@@ -12,6 +12,8 @@ from not1mm.lib.version import __version__
12
12
 
13
13
  logger = logging.getLogger(__name__)
14
14
 
15
+ EXCHANGE_HINT = "Name + 10-10# + SPC"
16
+
15
17
  name = "10 10 SPRING CW"
16
18
  cabrillo_name = "10-10-SPRING-CW"
17
19
  mode = "CW" # CW SSB BOTH RTTY
@@ -14,6 +14,8 @@ from not1mm.lib.version import __version__
14
14
 
15
15
  logger = logging.getLogger(__name__)
16
16
 
17
+ EXCHANGE_HINT = "Name + 10-10# + SPC"
18
+
17
19
  name = "10 10 SUMMER PHONE"
18
20
  cabrillo_name = "10-10-SUMMER-PHONE"
19
21
  mode = "SSB" # CW SSB BOTH RTTY
@@ -14,6 +14,8 @@ from not1mm.lib.version import __version__
14
14
 
15
15
  logger = logging.getLogger(__name__)
16
16
 
17
+ EXCHANGE_HINT = "Name + 10-10# + SPC"
18
+
17
19
  name = "10 10 WINTER PHONE"
18
20
  cabrillo_name = "10-10-WINTER-PHONE"
19
21
  mode = "SSB" # CW SSB BOTH RTTY
@@ -57,6 +57,8 @@ from not1mm.lib.version import __version__
57
57
 
58
58
  logger = logging.getLogger(__name__)
59
59
 
60
+ EXCHANGE_HINT = "State/Province"
61
+
60
62
  name = "ARRL 10M"
61
63
  mode = "BOTH" # CW SSB BOTH RTTY
62
64
  cabrillo_name = "ARRL-10"
@@ -15,6 +15,8 @@ from not1mm.lib.version import __version__
15
15
 
16
16
  logger = logging.getLogger(__name__)
17
17
 
18
+ EXCHANGE_HINT = "State/Province"
19
+
18
20
  name = "ARRL DX CW"
19
21
  cabrillo_name = "ARRL-DX-CW"
20
22
  mode = "CW" # CW SSB BOTH RTTY
@@ -15,6 +15,8 @@ from not1mm.lib.version import __version__
15
15
 
16
16
  logger = logging.getLogger(__name__)
17
17
 
18
+ EXCHANGE_HINT = "State/Province"
19
+
18
20
  name = "ARRL DX SSB"
19
21
  cabrillo_name = "ARRL-DX-SSB"
20
22
  mode = "SSB" # CW SSB BOTH RTTY
@@ -13,6 +13,8 @@ from not1mm.lib.version import __version__
13
13
 
14
14
  logger = logging.getLogger(__name__)
15
15
 
16
+ EXCHANGE_HINT = "1D ORG"
17
+
16
18
  name = "ARRL Field Day"
17
19
  mode = "BOTH" # CW SSB BOTH RTTY
18
20
  cabrillo_name = "ARRL-FD"
@@ -8,6 +8,8 @@ from pathlib import Path
8
8
 
9
9
  from PyQt6 import QtWidgets
10
10
 
11
+ EXCHANGE_HINT = ""
12
+
11
13
  name = "ARRL RTTY Round Up"
12
14
  cabrillo_name = "ARRL-RTTY"
13
15
  mode = "BOTH" # CW SSB BOTH RTTY
@@ -14,6 +14,8 @@ from not1mm.lib.version import __version__
14
14
 
15
15
  logger = logging.getLogger(__name__)
16
16
 
17
+ EXCHANGE_HINT = "Prec Call Check Section"
18
+
17
19
  name = "ARRL Sweepstakes CW"
18
20
  cabrillo_name = "ARRL-SS-CW"
19
21
  mode = "CW" # CW SSB BOTH RTTY
@@ -381,23 +383,19 @@ def parse_exchange(self):
381
383
  for tokens in exchange.split():
382
384
  text = ""
383
385
  numb = ""
384
- print(f"'{tokens}'")
385
386
  if tokens.isdigit():
386
- print(f"{tokens} is digits")
387
387
  if sn == "":
388
388
  sn = tokens
389
389
  else:
390
390
  ck = tokens
391
391
  continue
392
392
  elif tokens.isalpha():
393
- print(f"{tokens} is alpha")
394
393
  if len(tokens) == 1:
395
394
  prec = tokens
396
395
  else:
397
396
  sec = tokens
398
397
  continue
399
398
  elif tokens.isalnum():
400
- print("isalnum")
401
399
  if tokens[:1].isalpha():
402
400
  print(f"{tokens} is callsign")
403
401
  call = tokens
@@ -406,7 +404,6 @@ def parse_exchange(self):
406
404
  if c.isalpha():
407
405
  text = tokens[i:]
408
406
  numb = tokens[:i]
409
- print(f"{tokens[:i]} {tokens[i:]}")
410
407
  break
411
408
  if len(text) == 1:
412
409
  prec = text
@@ -14,6 +14,8 @@ from not1mm.lib.version import __version__
14
14
 
15
15
  logger = logging.getLogger(__name__)
16
16
 
17
+ EXCHANGE_HINT = "Prec Call Check Section"
18
+
17
19
  name = "ARRL Sweepstakes Phone"
18
20
  cabrillo_name = "ARRL-SS-SSB"
19
21
  mode = "SSB" # CW SSB BOTH RTTY
@@ -383,30 +385,25 @@ def parse_exchange(self):
383
385
  numb = ""
384
386
  print(f"'{tokens}'")
385
387
  if tokens.isdigit():
386
- print(f"{tokens} is digits")
387
388
  if sn == "":
388
389
  sn = tokens
389
390
  else:
390
391
  ck = tokens
391
392
  continue
392
393
  elif tokens.isalpha():
393
- print(f"{tokens} is alpha")
394
394
  if len(tokens) == 1:
395
395
  prec = tokens
396
396
  else:
397
397
  sec = tokens
398
398
  continue
399
399
  elif tokens.isalnum():
400
- print("isalnum")
401
400
  if tokens[:1].isalpha():
402
- print(f"{tokens} is callsign")
403
401
  call = tokens
404
402
  continue
405
403
  for i, c in enumerate(tokens):
406
404
  if c.isalpha():
407
405
  text = tokens[i:]
408
406
  numb = tokens[:i]
409
- print(f"{tokens[:i]} {tokens[i:]}")
410
407
  break
411
408
  if len(text) == 1:
412
409
  prec = text
@@ -48,6 +48,8 @@ from not1mm.lib.version import __version__
48
48
 
49
49
  logger = logging.getLogger(__name__)
50
50
 
51
+ EXCHANGE_HINT = "4-character grid square"
52
+
51
53
  name = "ARRL VHF JAN"
52
54
  mode = "BOTH" # CW SSB BOTH RTTY
53
55
  cabrillo_name = "ARRL-VHF-JAN"
@@ -16,6 +16,8 @@ from not1mm.lib.version import __version__
16
16
 
17
17
  logger = logging.getLogger(__name__)
18
18
 
19
+ EXCHANGE_HINT = "4-character grid square"
20
+
19
21
  name = "ARRL VHF JUN"
20
22
  mode = "BOTH" # CW SSB BOTH RTTY
21
23
  cabrillo_name = "ARRL-VHF-JUN"
@@ -16,6 +16,8 @@ from not1mm.lib.version import __version__
16
16
 
17
17
  logger = logging.getLogger(__name__)
18
18
 
19
+ EXCHANGE_HINT = "4-character grid square"
20
+
19
21
  name = "ARRL VHF SEP"
20
22
  mode = "BOTH" # CW SSB BOTH RTTY
21
23
  cabrillo_name = "ARRL-VHF-SEP"
@@ -14,6 +14,8 @@ from not1mm.lib.version import __version__
14
14
 
15
15
  logger = logging.getLogger(__name__)
16
16
 
17
+ EXCHANGE_HINT = "Province/Territory"
18
+
17
19
  name = "CANADA DAY"
18
20
  cabrillo_name = "CANADA-DAY"
19
21
  mode = "BOTH" # CW SSB BOTH RTTY
@@ -15,6 +15,8 @@ from not1mm.lib.version import __version__
15
15
 
16
16
  logger = logging.getLogger(__name__)
17
17
 
18
+ EXCHANGE_HINT = "ST/Prov or DX CQ Zone"
19
+
18
20
  name = "CQ 160 CW"
19
21
  cabrillo_name = "CQ-160-CW"
20
22
  mode = "CW" # CW SSB BOTH RTTY
@@ -15,6 +15,8 @@ from not1mm.lib.version import __version__
15
15
 
16
16
  logger = logging.getLogger(__name__)
17
17
 
18
+ EXCHANGE_HINT = "ST/Prov or DX CQ Zone"
19
+
18
20
  name = "CQ 160 SSB"
19
21
  cabrillo_name = "CQ-160-SSB"
20
22
  mode = "SSB" # CW SSB BOTH RTTY
@@ -14,6 +14,8 @@ from not1mm.lib.version import __version__
14
14
 
15
15
  logger = logging.getLogger(__name__)
16
16
 
17
+ EXCHANGE_HINT = "#"
18
+
17
19
  name = "CQ WPX CW"
18
20
  cabrillo_name = "CQ-WPX-CW"
19
21
  mode = "CW" # CW SSB BOTH RTTY
@@ -14,6 +14,8 @@ from not1mm.lib.version import __version__
14
14
 
15
15
  logger = logging.getLogger(__name__)
16
16
 
17
+ EXCHANGE_HINT = "#"
18
+
17
19
  name = "CQ WPX SSB"
18
20
  cabrillo_name = "CQ-WPX-SSB"
19
21
  mode = "SSB" # CW SSB BOTH RTTY
@@ -14,6 +14,8 @@ from not1mm.lib.version import __version__
14
14
 
15
15
  logger = logging.getLogger(__name__)
16
16
 
17
+ EXCHANGE_HINT = "CQ Zone No."
18
+
17
19
  name = "CQ WW CW"
18
20
  cabrillo_name = "CQ-WW-CW"
19
21
  mode = "CW" # CW SSB BOTH RTTY
@@ -14,6 +14,8 @@ from not1mm.lib.version import __version__
14
14
 
15
15
  logger = logging.getLogger(__name__)
16
16
 
17
+ EXCHANGE_HINT = "CQ Zone No."
18
+
17
19
  name = "CQ WW SSB"
18
20
  cabrillo_name = "CQ-WW-SSB"
19
21
  mode = "SSB" # CW SSB BOTH RTTY
@@ -13,6 +13,9 @@ from not1mm.lib.plugin_common import gen_adif, get_points
13
13
  from not1mm.lib.version import __version__
14
14
 
15
15
  logger = logging.getLogger(__name__)
16
+
17
+ EXCHANGE_HINT = "Name + Member No./'CWA'"
18
+
16
19
  name = "CWT"
17
20
  mode = "CW" # CW SSB BOTH RTTY
18
21
  # columns = [0, 1, 2, 3, 4, 5, 6, 11, 15]
@@ -10,7 +10,7 @@ from not1mm.lib.plugin_common import gen_adif, get_points
10
10
  from not1mm.lib.version import __version__
11
11
 
12
12
  logger = logging.getLogger(__name__)
13
-
13
+ EXCHANGE_HINT = ""
14
14
  name = "General Logging"
15
15
  cabrillo_name = "General-Logging"
16
16
  mode = "BOTH" # CW SSB BOTH RTTY
@@ -27,6 +27,8 @@ from not1mm.lib.version import __version__
27
27
 
28
28
  logger = logging.getLogger(__name__)
29
29
 
30
+ EXCHANGE_HINT = "ITU Zone"
31
+
30
32
  name = "IARU HF"
31
33
  cabrillo_name = "IARU-HF"
32
34
  mode = "BOTH" # CW SSB BOTH RTTY
@@ -14,6 +14,8 @@ from not1mm.lib.version import __version__
14
14
 
15
15
  logger = logging.getLogger(__name__)
16
16
 
17
+ EXCHANGE_HINT = "Prefecture or CQ Zone"
18
+
17
19
  name = "JIDX CW"
18
20
  cabrillo_name = "JIDX-CW"
19
21
  mode = "CW" # CW SSB BOTH RTTY
@@ -14,6 +14,8 @@ from not1mm.lib.version import __version__
14
14
 
15
15
  logger = logging.getLogger(__name__)
16
16
 
17
+ EXCHANGE_HINT = "Prefecture or CQ Zone"
18
+
17
19
  name = "JIDX PH"
18
20
  cabrillo_name = "JIDX-PH"
19
21
  mode = "SSB" # CW SSB BOTH RTTY
@@ -15,6 +15,8 @@ from not1mm.lib.version import __version__
15
15
 
16
16
  logger = logging.getLogger(__name__)
17
17
 
18
+ EXCHANGE_HINT = "Name or Name + SPC"
19
+
18
20
  name = "NAQP CW"
19
21
  cabrillo_name = "NAQP-CW"
20
22
  mode = "CW" # CW SSB BOTH RTTY
@@ -15,6 +15,8 @@ from not1mm.lib.version import __version__
15
15
 
16
16
  logger = logging.getLogger(__name__)
17
17
 
18
+ EXCHANGE_HINT = "Name or Name + SPC"
19
+
18
20
  name = "NAQP SSB"
19
21
  cabrillo_name = "NAQP-SSB"
20
22
  mode = "SSB" # CW SSB BOTH RTTY
@@ -37,6 +37,8 @@ from not1mm.lib.version import __version__
37
37
 
38
38
  logger = logging.getLogger(__name__)
39
39
 
40
+ EXCHANGE_HINT = "Name or Name + SPC"
41
+
40
42
  name = "PHONE WEEKLY TEST"
41
43
  cabrillo_name = "PHONE-WEEKLY-TEST"
42
44
  mode = "SSB" # CW SSB BOTH RTTY
@@ -39,6 +39,7 @@ from not1mm.lib.ham_utility import distance
39
39
 
40
40
  logger = logging.getLogger(__name__)
41
41
 
42
+ EXCHANGE_HINT = "4-Character grid square"
42
43
  cabrillo_name = "STEW-PERRY"
43
44
  name = "Stew Perry Topband"
44
45
 
@@ -12,6 +12,8 @@ from not1mm.lib.version import __version__
12
12
 
13
13
  logger = logging.getLogger(__name__)
14
14
 
15
+ EXCHANGE_HINT = "1O ORG"
16
+
15
17
  cabrillo_name = "WFD"
16
18
  name = "Winter Field Day"
17
19
  # 1 once per contest, 2 work each band, 3 each band/mode, 4 no dupe checking
@@ -328,7 +328,8 @@ class VfoWindow(QDockWidget):
328
328
  Display an alert box with the supplied message.
329
329
  """
330
330
  message_box = QtWidgets.QMessageBox()
331
- message_box.setPalette(self.current_palette)
331
+ if self.current_palette:
332
+ message_box.setPalette(self.current_palette)
332
333
  message_box.setIcon(QtWidgets.QMessageBox.Icon.Information)
333
334
  message_box.setText(message)
334
335
  message_box.setWindowTitle("Information")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 24.4.2.1
3
+ Version: 24.4.4.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
@@ -177,6 +177,8 @@ I wish to thank those who've contributed to the project.
177
177
 
178
178
  ## Recent Changes
179
179
 
180
+ - [24-4-4-1] Made docking widgets open state persistent.
181
+ - [24-4-4] Added per-contest echange hint when adding new contest.
180
182
  - [24-4-2] Migrated to PyQt6. I'm sure there are broken things.
181
183
  - [24-4-1-2] Added color text indicators to the Check Partial window. Poached the code from @kyleboyle. Thanks! Fixed the Log, VFO and Check Partial windows to be actual docking widgets. Refocus call field after double clicking on item in the check partial window.
182
184
  - [24-4-1] Removed some un-needed loops and widgets from the check window. Fixed docking to the left side.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "not1mm"
7
- version = "24.4.2.1"
7
+ version = "24.4.4.1"
8
8
  description = "NOT1MM Logger"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -1,15 +0,0 @@
1
- """New Contest Dialog"""
2
-
3
- from PyQt6 import QtWidgets, uic
4
-
5
-
6
- class NewContest(QtWidgets.QDialog):
7
- """New Contest"""
8
-
9
- def __init__(self, app_data_path):
10
- super().__init__(None)
11
- uic.loadUi(app_data_path / "new_contest.ui", self)
12
- self.buttonBox.clicked.connect(self.store)
13
-
14
- def store(self):
15
- """dialog magic"""
@@ -1,3 +0,0 @@
1
- """It's the version"""
2
-
3
- __version__ = "24.4.2.1"
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