not1mm 24.7.13__tar.gz → 24.7.25__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 (158) hide show
  1. {not1mm-24.7.13 → not1mm-24.7.25}/PKG-INFO +4 -1
  2. {not1mm-24.7.13 → not1mm-24.7.25}/README.md +3 -0
  3. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/__main__.py +54 -50
  4. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/k6gte-not1mm.desktop +1 -1
  5. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/main.ui +2 -2
  6. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/lib/cat_interface.py +39 -5
  7. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/lib/version.py +1 -1
  8. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm.egg-info/PKG-INFO +4 -1
  9. {not1mm-24.7.13 → not1mm-24.7.25}/pyproject.toml +1 -1
  10. {not1mm-24.7.13 → not1mm-24.7.25}/LICENSE +0 -0
  11. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/__init__.py +0 -0
  12. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/bandmap.py +0 -0
  13. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/checkwindow.py +0 -0
  14. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/JetBrainsMono-Regular.ttf +0 -0
  15. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/MASTER.SCP +0 -0
  16. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/about.ui +0 -0
  17. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/alpha bravo charlie delta.txt +0 -0
  18. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/bandmap.ui +0 -0
  19. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/check.png +0 -0
  20. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/checkwindow.ui +0 -0
  21. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/configuration.ui +0 -0
  22. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/contests.sql +0 -0
  23. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/cty.json +0 -0
  24. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/cwmacros.txt +0 -0
  25. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/donors.html +0 -0
  26. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/editcontact.ui +0 -0
  27. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/editmacro.ui +0 -0
  28. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/greendot.png +0 -0
  29. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/k6gte.not1mm-128.png +0 -0
  30. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/k6gte.not1mm-32.png +0 -0
  31. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/k6gte.not1mm-64.png +0 -0
  32. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/logwindow.ui +0 -0
  33. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/logwindowx.ui +0 -0
  34. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/new_contest.ui +0 -0
  35. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/not1mm.html +0 -0
  36. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/opon.ui +0 -0
  37. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/0.wav +0 -0
  38. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/1.wav +0 -0
  39. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/2.wav +0 -0
  40. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/3.wav +0 -0
  41. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/4.wav +0 -0
  42. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/5.wav +0 -0
  43. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/6.wav +0 -0
  44. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/7.wav +0 -0
  45. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/73.wav +0 -0
  46. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/8.wav +0 -0
  47. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/9.wav +0 -0
  48. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/a.wav +0 -0
  49. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/again.wav +0 -0
  50. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/b.wav +0 -0
  51. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/c.wav +0 -0
  52. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/contest.wav +0 -0
  53. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/cq.wav +0 -0
  54. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/d.wav +0 -0
  55. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/e.wav +0 -0
  56. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/f.wav +0 -0
  57. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/g.wav +0 -0
  58. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/h.wav +0 -0
  59. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/i.wav +0 -0
  60. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/j.wav +0 -0
  61. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/k.wav +0 -0
  62. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/k6gte.wav +0 -0
  63. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/l.wav +0 -0
  64. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/m.wav +0 -0
  65. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/mynumber.wav +0 -0
  66. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/n.wav +0 -0
  67. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/nil.wav +0 -0
  68. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/o.wav +0 -0
  69. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/p.wav +0 -0
  70. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/q.wav +0 -0
  71. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/r.wav +0 -0
  72. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/roger.wav +0 -0
  73. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/s.wav +0 -0
  74. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/space.wav +0 -0
  75. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/t.wav +0 -0
  76. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/thankyou.wav +0 -0
  77. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/thankyouqrz.wav +0 -0
  78. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/u.wav +0 -0
  79. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/v.wav +0 -0
  80. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/w.wav +0 -0
  81. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/x.wav +0 -0
  82. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/y.wav +0 -0
  83. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/yourcall.wav +0 -0
  84. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/phonetics/z.wav +0 -0
  85. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/pickcontest.ui +0 -0
  86. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/radio_green.png +0 -0
  87. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/radio_grey.png +0 -0
  88. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/radio_red.png +0 -0
  89. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/reddot.png +0 -0
  90. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/settings.ui +0 -0
  91. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/ssbmacros.txt +0 -0
  92. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/data/vfo.ui +0 -0
  93. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/fsutils.py +0 -0
  94. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/lib/__init__.py +0 -0
  95. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/lib/about.py +0 -0
  96. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/lib/cwinterface.py +0 -0
  97. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/lib/database.py +0 -0
  98. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/lib/edit_contact.py +0 -0
  99. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/lib/edit_macro.py +0 -0
  100. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/lib/edit_opon.py +0 -0
  101. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/lib/edit_station.py +0 -0
  102. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/lib/ft8_watcher.py +0 -0
  103. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/lib/ham_utility.py +0 -0
  104. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/lib/lookup.py +0 -0
  105. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/lib/multicast.py +0 -0
  106. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/lib/n1mm.py +0 -0
  107. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/lib/new_contest.py +0 -0
  108. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/lib/playsound.py +0 -0
  109. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/lib/plugin_common.py +0 -0
  110. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/lib/select_contest.py +0 -0
  111. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/lib/settings.py +0 -0
  112. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/lib/super_check_partial.py +0 -0
  113. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/lib/versiontest.py +0 -0
  114. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/logwindow.py +0 -0
  115. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/playsoundtest.py +0 -0
  116. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/10_10_fall_cw.py +0 -0
  117. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/10_10_spring_cw.py +0 -0
  118. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/10_10_summer_phone.py +0 -0
  119. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/10_10_winter_phone.py +0 -0
  120. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/__init__.py +0 -0
  121. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/arrl_10m.py +0 -0
  122. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/arrl_dx_cw.py +0 -0
  123. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/arrl_dx_ssb.py +0 -0
  124. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/arrl_field_day.py +0 -0
  125. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/arrl_rtty_ru.py +0 -0
  126. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/arrl_ss_cw.py +0 -0
  127. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/arrl_ss_phone.py +0 -0
  128. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/arrl_vhf_jan.py +0 -0
  129. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/arrl_vhf_jun.py +0 -0
  130. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/arrl_vhf_sep.py +0 -0
  131. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/canada_day.py +0 -0
  132. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/cq_160_cw.py +0 -0
  133. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/cq_160_ssb.py +0 -0
  134. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/cq_wpx_cw.py +0 -0
  135. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/cq_wpx_ssb.py +0 -0
  136. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/cq_ww_cw.py +0 -0
  137. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/cq_ww_ssb.py +0 -0
  138. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/cwt.py +0 -0
  139. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/general_logging.py +0 -0
  140. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/iaru_hf.py +0 -0
  141. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/icwc_mst.py +0 -0
  142. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/jidx_cw.py +0 -0
  143. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/jidx_ph.py +0 -0
  144. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/k1usn_sst.py +0 -0
  145. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/naqp_cw.py +0 -0
  146. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/naqp_ssb.py +0 -0
  147. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/phone_weekly_test.py +0 -0
  148. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/stew_perry_topband.py +0 -0
  149. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/plugins/winter_field_day.py +0 -0
  150. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/radio.py +0 -0
  151. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/vfo.py +0 -0
  152. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm/voice_keying.py +0 -0
  153. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm.egg-info/SOURCES.txt +0 -0
  154. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm.egg-info/dependency_links.txt +0 -0
  155. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm.egg-info/entry_points.txt +0 -0
  156. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm.egg-info/requires.txt +0 -0
  157. {not1mm-24.7.13 → not1mm-24.7.25}/not1mm.egg-info/top_level.txt +0 -0
  158. {not1mm-24.7.13 → not1mm-24.7.25}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 24.7.13
3
+ Version: 24.7.25
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
@@ -223,6 +223,9 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
223
223
 
224
224
  ## Recent Changes
225
225
 
226
+ - [24-7-25] Updated application categories for the desktop file.
227
+ - [24-7-25] Maybe let flrig send CW... Probably not.
228
+ - [24-7-19] Use Qt's QSettings to store window and dockwidgets states.
226
229
  - [24-7-13] Trap Exceptions in flrig xmlrpc client.
227
230
 
228
231
  See [CHANGELOG.md](CHANGELOG.md) for prior changes.
@@ -191,6 +191,9 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
191
191
 
192
192
  ## Recent Changes
193
193
 
194
+ - [24-7-25] Updated application categories for the desktop file.
195
+ - [24-7-25] Maybe let flrig send CW... Probably not.
196
+ - [24-7-19] Use Qt's QSettings to store window and dockwidgets states.
194
197
  - [24-7-13] Trap Exceptions in flrig xmlrpc client.
195
198
 
196
199
  See [CHANGELOG.md](CHANGELOG.md) for prior changes.
@@ -39,7 +39,7 @@ except OSError as exception:
39
39
  print("portaudio is not installed")
40
40
  sd = None
41
41
  from PyQt6 import QtCore, QtGui, QtWidgets, uic
42
- from PyQt6.QtCore import QDir, Qt, QThread
42
+ from PyQt6.QtCore import QDir, Qt, QThread, QSettings
43
43
  from PyQt6.QtGui import QFontDatabase, QColorConstants, QPalette, QColor
44
44
  from PyQt6.QtWidgets import QFileDialog
45
45
 
@@ -120,10 +120,6 @@ class MainWindow(QtWidgets.QMainWindow):
120
120
  "cw_macros": True,
121
121
  "bands_modes": True,
122
122
  "bands": ["160", "80", "40", "20", "15", "10"],
123
- "window_height": 200,
124
- "window_width": 600,
125
- "window_x": 120,
126
- "window_y": 120,
127
123
  "current_database": "ham.db",
128
124
  "contest": "",
129
125
  "multicast_group": "239.1.1.1",
@@ -202,6 +198,14 @@ class MainWindow(QtWidgets.QMainWindow):
202
198
  def __init__(self, *args, **kwargs):
203
199
  super().__init__(*args, **kwargs)
204
200
  logger.info("MainWindow: __init__")
201
+
202
+ self.dock_loc = {
203
+ "Top": Qt.DockWidgetArea.TopDockWidgetArea,
204
+ "Right": Qt.DockWidgetArea.RightDockWidgetArea,
205
+ "Left": Qt.DockWidgetArea.LeftDockWidgetArea,
206
+ "Bottom": Qt.DockWidgetArea.BottomDockWidgetArea,
207
+ }
208
+
205
209
  self.setCorner(Qt.Corner.TopRightCorner, Qt.DockWidgetArea.RightDockWidgetArea)
206
210
  self.setCorner(
207
211
  Qt.Corner.BottomRightCorner, Qt.DockWidgetArea.RightDockWidgetArea
@@ -219,6 +223,7 @@ class MainWindow(QtWidgets.QMainWindow):
219
223
  self.mscp = SCP(fsutils.APP_DATA_PATH)
220
224
  self.next_field = self.other_2
221
225
  self.dupe_indicator.hide()
226
+
222
227
  self.cw_speed.valueChanged.connect(self.cwspeed_spinbox_changed)
223
228
 
224
229
  self.cw_entry.textChanged.connect(self.handle_text_change)
@@ -516,38 +521,47 @@ class MainWindow(QtWidgets.QMainWindow):
516
521
  if self.pref.get("contest"):
517
522
  self.load_contest()
518
523
  self.read_cw_macros()
524
+
525
+ self.log_window = LogWindow()
526
+ self.log_window.setObjectName("log-window")
527
+ self.addDockWidget(Qt.DockWidgetArea.TopDockWidgetArea, self.log_window)
528
+ self.log_window.hide()
529
+
530
+ self.bandmap_window = BandMapWindow()
531
+ self.bandmap_window.setObjectName("bandmap-window")
532
+ self.addDockWidget(Qt.DockWidgetArea.LeftDockWidgetArea, self.bandmap_window)
533
+ self.bandmap_window.hide()
534
+
535
+ self.check_window = CheckWindow()
536
+ self.check_window.setObjectName("check-window")
537
+ self.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, self.check_window)
538
+ self.check_window.hide()
539
+
540
+ self.vfo_window = VfoWindow()
541
+ self.vfo_window.setObjectName("vfo-window")
542
+ self.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, self.vfo_window)
543
+ self.vfo_window.hide()
544
+
545
+ self.settings = QSettings("K6GTE", "not1mm")
546
+ if self.settings.value("windowState") is not None:
547
+ self.restoreState(self.settings.value("windowState"))
548
+ if self.settings.value("geometry") is not None:
549
+ self.restoreGeometry(self.settings.value("geometry"))
550
+
519
551
  self.actionLog_Window.setChecked(self.pref.get("logwindow", False))
520
- if self.log_window:
521
- self.log_window.close()
522
552
  if self.actionLog_Window.isChecked():
523
- self.log_window = LogWindow()
524
- self.addDockWidget(Qt.DockWidgetArea.TopDockWidgetArea, self.log_window)
525
553
  self.log_window.show()
526
554
 
527
555
  self.actionBandmap.setChecked(self.pref.get("bandmapwindow", False))
528
- if self.bandmap_window:
529
- self.bandmap_window.close()
530
556
  if self.actionBandmap.isChecked():
531
- self.bandmap_window = BandMapWindow()
532
- self.addDockWidget(
533
- Qt.DockWidgetArea.LeftDockWidgetArea, self.bandmap_window
534
- )
535
557
  self.bandmap_window.show()
536
558
 
537
559
  self.actionCheck_Window.setChecked(self.pref.get("checkwindow", False))
538
- if self.check_window:
539
- self.check_window.close()
540
560
  if self.actionCheck_Window.isChecked():
541
- self.check_window = CheckWindow()
542
- self.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, self.check_window)
543
561
  self.check_window.show()
544
562
 
545
563
  self.actionVFO.setChecked(self.pref.get("vfowindow", False))
546
- if self.vfo_window:
547
- self.vfo_window.close()
548
564
  if self.actionVFO.isChecked():
549
- self.vfo_window = VfoWindow()
550
- self.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, self.vfo_window)
551
565
  self.vfo_window.show()
552
566
 
553
567
  if not DEBUG_ENABLED:
@@ -1424,47 +1438,37 @@ class MainWindow(QtWidgets.QMainWindow):
1424
1438
  """Launch the log window"""
1425
1439
  self.pref["logwindow"] = self.actionLog_Window.isChecked()
1426
1440
  self.write_preference()
1427
- if self.log_window:
1428
- self.log_window.close()
1429
1441
  if self.actionLog_Window.isChecked():
1430
- self.log_window = LogWindow()
1431
- self.addDockWidget(Qt.DockWidgetArea.TopDockWidgetArea, self.log_window)
1432
1442
  self.log_window.show()
1443
+ else:
1444
+ self.log_window.hide()
1433
1445
 
1434
1446
  def launch_bandmap_window(self) -> None:
1435
1447
  """Launch the bandmap window"""
1436
1448
  self.pref["bandmapwindow"] = self.actionBandmap.isChecked()
1437
1449
  self.write_preference()
1438
- if self.bandmap_window:
1439
- self.bandmap_window.close()
1440
1450
  if self.actionBandmap.isChecked():
1441
- self.bandmap_window = BandMapWindow()
1442
- self.addDockWidget(
1443
- Qt.DockWidgetArea.LeftDockWidgetArea, self.bandmap_window
1444
- )
1445
1451
  self.bandmap_window.show()
1452
+ else:
1453
+ self.bandmap_window.hide()
1446
1454
 
1447
1455
  def launch_check_window(self) -> None:
1448
1456
  """Launch the check window"""
1449
1457
  self.pref["checkwindow"] = self.actionCheck_Window.isChecked()
1450
1458
  self.write_preference()
1451
- if self.check_window:
1452
- self.check_window.close()
1453
1459
  if self.actionCheck_Window.isChecked():
1454
- self.check_window = CheckWindow()
1455
- self.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, self.check_window)
1456
1460
  self.check_window.show()
1461
+ else:
1462
+ self.check_window.hide()
1457
1463
 
1458
1464
  def launch_vfo(self) -> None:
1459
1465
  """Launch the VFO window"""
1460
1466
  self.pref["vfowindow"] = self.actionVFO.isChecked()
1461
1467
  self.write_preference()
1462
- if self.vfo_window:
1463
- self.vfo_window.close()
1464
1468
  if self.actionVFO.isChecked():
1465
- self.vfo_window = VfoWindow()
1466
- self.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, self.vfo_window)
1467
1469
  self.vfo_window.show()
1470
+ else:
1471
+ self.vfo_window.hide()
1468
1472
 
1469
1473
  def clear_band_indicators(self) -> None:
1470
1474
  """
@@ -1522,14 +1526,14 @@ class MainWindow(QtWidgets.QMainWindow):
1522
1526
  None
1523
1527
  """
1524
1528
 
1529
+ self.settings.setValue("geometry", self.saveGeometry())
1530
+ self.settings.setValue("windowState", self.saveState())
1531
+ self.settings.sync()
1532
+
1525
1533
  cmd = {}
1526
1534
  cmd["cmd"] = "HALT"
1527
1535
  cmd["station"] = platform.node()
1528
1536
  self.multicast_interface.send_as_json(cmd)
1529
- self.pref["window_width"] = self.size().width()
1530
- self.pref["window_height"] = self.size().height()
1531
- self.pref["window_x"] = self.pos().x()
1532
- self.pref["window_y"] = self.pos().y()
1533
1537
  self.write_preference()
1534
1538
 
1535
1539
  def cty_lookup(self, callsign: str) -> list:
@@ -3399,11 +3403,11 @@ app = QtWidgets.QApplication(sys.argv)
3399
3403
  families = load_fonts_from_dir(os.fspath(fsutils.APP_DATA_PATH))
3400
3404
  logger.info(f"font families {families}")
3401
3405
  window = MainWindow()
3402
- height = window.pref.get("window_height", 300)
3403
- width = window.pref.get("window_width", 700)
3404
- x = window.pref.get("window_x", -1)
3405
- y = window.pref.get("window_y", -1)
3406
- window.setGeometry(x, y, width, height)
3406
+ # height = window.pref.get("window_height", 300)
3407
+ # width = window.pref.get("window_width", 700)
3408
+ # x = window.pref.get("window_x", -1)
3409
+ # y = window.pref.get("window_y", -1)
3410
+ # window.setGeometry(x, y, width, height)
3407
3411
  window.callsign.setFocus()
3408
3412
  window.show()
3409
3413
  # timer = QtCore.QTimer()
@@ -7,4 +7,4 @@ Exec=not1mm
7
7
  Icon=k6gte-not1mm
8
8
  Terminal=false
9
9
  Type=Application
10
- Categories=HamRadio;
10
+ Categories=Qt;Utility;HamRadio;ContactManagement;Database;
@@ -9,8 +9,8 @@
9
9
  <rect>
10
10
  <x>0</x>
11
11
  <y>0</y>
12
- <width>878</width>
13
- <height>465</height>
12
+ <width>768</width>
13
+ <height>265</height>
14
14
  </rect>
15
15
  </property>
16
16
  <property name="sizePolicy">
@@ -2,6 +2,20 @@
2
2
  K6GTE, CAT interface abstraction
3
3
  Email: michael.bridak@gmail.com
4
4
  GPL V3
5
+
6
+ rig.cwio_set_wpm n:i set cwio WPM
7
+ rig.cwio_text i:s send text via cwio interface
8
+ rig.cwio_send n:i cwio transmit 1/0 (on/off)
9
+ command lines to test the CW API via XMLRPC
10
+
11
+ Setting WPM
12
+ curl -d "<?xml version='1.0'?><methodCall><methodName>rig.cwio_set_wpm</methodName><params><param><value><i4>28</i4></value></param></params></methodCall>" http://localhost:12345
13
+
14
+ Setting the text to send
15
+ curl -d "<?xml version='1.0'?><methodCall><methodName>rig.cwio_text</methodName><params><param><value><string>test test test</string></value></param></params></methodCall>" http://localhost:12345
16
+
17
+ Enable send
18
+ curl -d "<?xml version='1.0'?><methodCall><methodName>rig.cwio_send</methodName><params><param><value><i4>1</i4></value></param></params></methodCall>" http://localhost:12345
5
19
  """
6
20
 
7
21
  import logging
@@ -94,7 +108,7 @@ class CAT:
94
108
  """..."""
95
109
  logger.debug(f"{texttosend=} {self.interface=}")
96
110
  if self.interface == "flrig":
97
- ...
111
+ self.sendcwxmlrpc(texttosend)
98
112
  return
99
113
  if self.interface == "rigctld":
100
114
  self.sendcwrigctl(texttosend)
@@ -117,6 +131,23 @@ class CAT:
117
131
 
118
132
  def sendcwxmlrpc(self, texttosend):
119
133
  """..."""
134
+ print(f"{texttosend=}")
135
+ try:
136
+ self.online = True
137
+ self.server.rig.cwio_send(1)
138
+ self.server.rig.cwio_text(texttosend)
139
+ return
140
+ except (
141
+ ConnectionRefusedError,
142
+ xmlrpc.client.Fault,
143
+ http.client.BadStatusLine,
144
+ http.client.CannotSendRequest,
145
+ http.client.ResponseNotReady,
146
+ ) as exception:
147
+ self.online = False
148
+ print("sendcwxmlrpc: %s", f"{exception}")
149
+ # logger.debug("sendcwxmlrpc: %s", f"{exception}")
150
+ return False
120
151
 
121
152
  def get_vfo(self) -> str:
122
153
  """Poll the radio for current vfo using the interface"""
@@ -328,10 +359,13 @@ class CAT:
328
359
 
329
360
  def set_vfo(self, freq: str) -> bool:
330
361
  """Sets the radios vfo"""
331
- if self.interface == "flrig":
332
- return self.__setvfo_flrig(freq)
333
- if self.interface == "rigctld":
334
- return self.__setvfo_rigctld(freq)
362
+ try:
363
+ if self.interface == "flrig":
364
+ return self.__setvfo_flrig(freq)
365
+ if self.interface == "rigctld":
366
+ return self.__setvfo_rigctld(freq)
367
+ except ValueError:
368
+ ...
335
369
  return False
336
370
 
337
371
  def __setvfo_flrig(self, freq: str) -> bool:
@@ -1,3 +1,3 @@
1
1
  """It's the version"""
2
2
 
3
- __version__ = "24.7.13"
3
+ __version__ = "24.7.25"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 24.7.13
3
+ Version: 24.7.25
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
@@ -223,6 +223,9 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
223
223
 
224
224
  ## Recent Changes
225
225
 
226
+ - [24-7-25] Updated application categories for the desktop file.
227
+ - [24-7-25] Maybe let flrig send CW... Probably not.
228
+ - [24-7-19] Use Qt's QSettings to store window and dockwidgets states.
226
229
  - [24-7-13] Trap Exceptions in flrig xmlrpc client.
227
230
 
228
231
  See [CHANGELOG.md](CHANGELOG.md) for prior changes.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "not1mm"
7
- version = "24.7.13"
7
+ version = "24.7.25"
8
8
  description = "NOT1MM Logger"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
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
File without changes
File without changes