not1mm 23.12.19__tar.gz → 23.12.20__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-23.12.19 → not1mm-23.12.20}/PKG-INFO +4 -1
  2. {not1mm-23.12.19 → not1mm-23.12.20}/README.md +3 -0
  3. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/new_contest.ui +11 -1
  4. not1mm-23.12.20/not1mm/lib/version.py +2 -0
  5. not1mm-23.12.20/not1mm/plugins/arrl_vhf_jun.py +358 -0
  6. not1mm-23.12.20/not1mm/plugins/arrl_vhf_sep.py +357 -0
  7. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm.egg-info/PKG-INFO +4 -1
  8. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm.egg-info/SOURCES.txt +2 -0
  9. {not1mm-23.12.19 → not1mm-23.12.20}/pyproject.toml +1 -1
  10. not1mm-23.12.19/not1mm/lib/version.py +0 -2
  11. {not1mm-23.12.19 → not1mm-23.12.20}/LICENSE +0 -0
  12. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/__init__.py +0 -0
  13. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/__main__.py +0 -0
  14. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/bandmap.py +0 -0
  15. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/checkwindow.py +0 -0
  16. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/JetBrainsMono-Regular.ttf +0 -0
  17. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/MASTER.SCP +0 -0
  18. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/about.ui +0 -0
  19. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/alpha bravo charlie delta.txt +0 -0
  20. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/bandmap.ui +0 -0
  21. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/check.png +0 -0
  22. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/checkwindow.ui +0 -0
  23. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/configuration.ui +0 -0
  24. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/contests.sql +0 -0
  25. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/cty.json +0 -0
  26. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/cwmacros.txt +0 -0
  27. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/donors.html +0 -0
  28. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/editcontact.ui +0 -0
  29. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/editmacro.ui +0 -0
  30. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/greendot.png +0 -0
  31. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/k6gte-not1mm.desktop +0 -0
  32. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/k6gte.not1mm-128.png +0 -0
  33. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/k6gte.not1mm-32.png +0 -0
  34. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/k6gte.not1mm-64.png +0 -0
  35. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/logwindow.ui +0 -0
  36. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/main.ui +0 -0
  37. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/not1mm.html +0 -0
  38. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/opon.ui +0 -0
  39. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/0.wav +0 -0
  40. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/1.wav +0 -0
  41. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/2.wav +0 -0
  42. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/3.wav +0 -0
  43. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/4.wav +0 -0
  44. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/5.wav +0 -0
  45. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/6.wav +0 -0
  46. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/7.wav +0 -0
  47. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/73.wav +0 -0
  48. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/8.wav +0 -0
  49. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/9.wav +0 -0
  50. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/a.wav +0 -0
  51. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/again.wav +0 -0
  52. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/b.wav +0 -0
  53. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/c.wav +0 -0
  54. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/contest.wav +0 -0
  55. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/cq.wav +0 -0
  56. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/d.wav +0 -0
  57. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/e.wav +0 -0
  58. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/f.wav +0 -0
  59. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/g.wav +0 -0
  60. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/h.wav +0 -0
  61. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/i.wav +0 -0
  62. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/j.wav +0 -0
  63. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/k.wav +0 -0
  64. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/k6gte.wav +0 -0
  65. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/l.wav +0 -0
  66. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/m.wav +0 -0
  67. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/mynumber.wav +0 -0
  68. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/n.wav +0 -0
  69. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/nil.wav +0 -0
  70. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/o.wav +0 -0
  71. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/p.wav +0 -0
  72. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/q.wav +0 -0
  73. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/r.wav +0 -0
  74. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/roger.wav +0 -0
  75. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/s.wav +0 -0
  76. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/space.wav +0 -0
  77. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/t.wav +0 -0
  78. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/thankyou.wav +0 -0
  79. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/thankyouqrz.wav +0 -0
  80. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/u.wav +0 -0
  81. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/v.wav +0 -0
  82. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/w.wav +0 -0
  83. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/x.wav +0 -0
  84. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/y.wav +0 -0
  85. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/yourcall.wav +0 -0
  86. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/phonetics/z.wav +0 -0
  87. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/pickcontest.ui +0 -0
  88. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/radio_green.png +0 -0
  89. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/radio_grey.png +0 -0
  90. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/radio_red.png +0 -0
  91. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/reddot.png +0 -0
  92. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/settings.ui +0 -0
  93. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/ssbmacros.txt +0 -0
  94. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/data/vfo.ui +0 -0
  95. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/lib/__init__.py +0 -0
  96. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/lib/about.py +0 -0
  97. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/lib/cat_interface.py +0 -0
  98. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/lib/cwinterface.py +0 -0
  99. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/lib/database.py +0 -0
  100. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/lib/edit_contact.py +0 -0
  101. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/lib/edit_macro.py +0 -0
  102. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/lib/edit_opon.py +0 -0
  103. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/lib/edit_station.py +0 -0
  104. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/lib/ham_utility.py +0 -0
  105. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/lib/lookup.py +0 -0
  106. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/lib/multicast.py +0 -0
  107. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/lib/n1mm.py +0 -0
  108. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/lib/new_contest.py +0 -0
  109. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/lib/plugin_common.py +0 -0
  110. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/lib/select_contest.py +0 -0
  111. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/lib/settings.py +0 -0
  112. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/lib/super_check_partial.py +0 -0
  113. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/lib/versiontest.py +0 -0
  114. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/logwindow.py +0 -0
  115. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/plugins/10_10_fall_cw.py +0 -0
  116. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/plugins/10_10_spring_cw.py +0 -0
  117. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/plugins/10_10_summer_phone.py +0 -0
  118. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/plugins/10_10_winter_phone.py +0 -0
  119. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/plugins/__init__.py +0 -0
  120. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/plugins/arrl_10m.py +0 -0
  121. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/plugins/arrl_dx_cw.py +0 -0
  122. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/plugins/arrl_dx_ssb.py +0 -0
  123. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/plugins/arrl_field_day.py +0 -0
  124. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/plugins/arrl_rtty_ru.py +0 -0
  125. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/plugins/arrl_ss_cw.py +0 -0
  126. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/plugins/arrl_ss_phone.py +0 -0
  127. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/plugins/arrl_vhf_jan.py +0 -0
  128. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/plugins/canada_day.py +0 -0
  129. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/plugins/cq_wpx_cw.py +0 -0
  130. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/plugins/cq_wpx_ssb.py +0 -0
  131. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/plugins/cq_ww_cw.py +0 -0
  132. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/plugins/cq_ww_ssb.py +0 -0
  133. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/plugins/cwt.py +0 -0
  134. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/plugins/general_logging.py +0 -0
  135. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/plugins/iaru_hf.py +0 -0
  136. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/plugins/jidx_cw.py +0 -0
  137. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/plugins/jidx_ph.py +0 -0
  138. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/plugins/naqp_cw.py +0 -0
  139. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/plugins/naqp_ssb.py +0 -0
  140. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/plugins/winter_field_day.py +0 -0
  141. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/testing/fakeflrig.py +0 -0
  142. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/testing/flrigclient.py +0 -0
  143. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/testing/multicast_listener.py +0 -0
  144. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/testing/n1mm_listener.py +0 -0
  145. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/testing/test.py +0 -0
  146. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm/vfo.py +0 -0
  147. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm.egg-info/dependency_links.txt +0 -0
  148. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm.egg-info/entry_points.txt +0 -0
  149. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm.egg-info/requires.txt +0 -0
  150. {not1mm-23.12.19 → not1mm-23.12.20}/not1mm.egg-info/top_level.txt +0 -0
  151. {not1mm-23.12.19 → not1mm-23.12.20}/setup.cfg +0 -0
  152. {not1mm-23.12.19 → not1mm-23.12.20}/testing/test.py +0 -0
  153. {not1mm-23.12.19 → not1mm-23.12.20}/usb_vfo_knob/code.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 23.12.19
3
+ Version: 23.12.20
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
@@ -146,6 +146,8 @@ I wish to thank those who've contributed to the project.
146
146
  - ARRL Sweepstakes CW
147
147
  - ARRL Sweepstakes SSB
148
148
  - ARRL VHF January
149
+ - ARRL VHF June
150
+ - ARRL VHF September
149
151
  - CQ WPX CW
150
152
  - CQ WPX SSB
151
153
  - CQ World Wide CW
@@ -161,6 +163,7 @@ I wish to thank those who've contributed to the project.
161
163
 
162
164
  ## Recent Changes
163
165
 
166
+ - [23-12-20] Add ARRL VHF Jun and Sep.
164
167
  - [23-12-19] Add ARRL VHF contest. Add VHF frequencies. Add Bands TAB to configuration dialog to select active bands you want displayed.
165
168
  - [23-12-17] Add ARRL 10M contest. Fixed crash in RAC Canada Day
166
169
  - [23-12-5] Removed deprecated datetime.utcnow()
@@ -117,6 +117,8 @@ I wish to thank those who've contributed to the project.
117
117
  - ARRL Sweepstakes CW
118
118
  - ARRL Sweepstakes SSB
119
119
  - ARRL VHF January
120
+ - ARRL VHF June
121
+ - ARRL VHF September
120
122
  - CQ WPX CW
121
123
  - CQ WPX SSB
122
124
  - CQ World Wide CW
@@ -132,6 +134,7 @@ I wish to thank those who've contributed to the project.
132
134
 
133
135
  ## Recent Changes
134
136
 
137
+ - [23-12-20] Add ARRL VHF Jun and Sep.
135
138
  - [23-12-19] Add ARRL VHF contest. Add VHF frequencies. Add Bands TAB to configuration dialog to select active bands you want displayed.
136
139
  - [23-12-17] Add ARRL 10M contest. Fixed crash in RAC Canada Day
137
140
  - [23-12-5] Removed deprecated datetime.utcnow()
@@ -247,6 +247,16 @@
247
247
  <string>ARRL VHF JAN</string>
248
248
  </property>
249
249
  </item>
250
+ <item>
251
+ <property name="text">
252
+ <string>ARRL VHF JUN</string>
253
+ </property>
254
+ </item>
255
+ <item>
256
+ <property name="text">
257
+ <string>ARRL VHF SEP</string>
258
+ </property>
259
+ </item>
250
260
  <item>
251
261
  <property name="text">
252
262
  <string>CANADA DAY</string>
@@ -316,7 +326,7 @@
316
326
  </property>
317
327
  <property name="time">
318
328
  <time>
319
- <hour>16</hour>
329
+ <hour>0</hour>
320
330
  <minute>0</minute>
321
331
  <second>0</second>
322
332
  </time>
@@ -0,0 +1,2 @@
1
+ """It's the version"""
2
+ __version__ = "23.12.20"
@@ -0,0 +1,358 @@
1
+ """ARRL Jun VHF"""
2
+
3
+
4
+ # Cabrillo name: ARRL-VHF-JUN
5
+ # Cabrillo name aliases: ARRL-VHF
6
+
7
+ # pylint: disable=invalid-name, unused-argument, unused-variable, c-extension-no-member
8
+
9
+ import datetime
10
+ import logging
11
+
12
+ from pathlib import Path
13
+ from PyQt5 import QtWidgets
14
+
15
+ from not1mm.lib.plugin_common import gen_adif, get_points
16
+ from not1mm.lib.version import __version__
17
+
18
+ logger = logging.getLogger("__main__")
19
+
20
+ name = "ARRL VHF JUN"
21
+ mode = "BOTH" # CW SSB BOTH RTTY
22
+ cabrillo_name = "ARRL-VHF-JUN"
23
+
24
+ columns = [
25
+ "YYYY-MM-DD HH:MM:SS",
26
+ "Call",
27
+ "Freq",
28
+ "SentNr",
29
+ "RcvNr",
30
+ "PTS",
31
+ ]
32
+
33
+ advance_on_space = [True, True, True, True, True]
34
+
35
+ # 1 once per contest, 2 work each band, 3 each band/mode, 4 no dupe checking
36
+ dupe_type = 2
37
+
38
+
39
+ def init_contest(self):
40
+ """setup plugin"""
41
+ set_tab_next(self)
42
+ set_tab_prev(self)
43
+ interface(self)
44
+ self.next_field = self.other_2
45
+
46
+
47
+ def interface(self):
48
+ """Setup user interface"""
49
+ self.field1.show()
50
+ self.field2.show()
51
+ self.field3.show()
52
+ self.field4.show()
53
+ label = self.field3.findChild(QtWidgets.QLabel)
54
+ label.setText("SentNR")
55
+ self.field3.setAccessibleName("Sent Grid")
56
+ label = self.field4.findChild(QtWidgets.QLabel)
57
+ label.setText("Grid")
58
+ self.field4.setAccessibleName("Gridsquare")
59
+
60
+
61
+ def reset_label(self):
62
+ """reset label after field cleared"""
63
+
64
+
65
+ def set_tab_next(self):
66
+ """Set TAB Advances"""
67
+ self.tab_next = {
68
+ self.callsign: self.field1.findChild(QtWidgets.QLineEdit),
69
+ self.field1.findChild(QtWidgets.QLineEdit): self.field2.findChild(
70
+ QtWidgets.QLineEdit
71
+ ),
72
+ self.field2.findChild(QtWidgets.QLineEdit): self.field3.findChild(
73
+ QtWidgets.QLineEdit
74
+ ),
75
+ self.field3.findChild(QtWidgets.QLineEdit): self.field4.findChild(
76
+ QtWidgets.QLineEdit
77
+ ),
78
+ self.field4.findChild(QtWidgets.QLineEdit): self.callsign,
79
+ }
80
+
81
+
82
+ def set_tab_prev(self):
83
+ """Set TAB Advances"""
84
+ self.tab_prev = {
85
+ self.callsign: self.field4.findChild(QtWidgets.QLineEdit),
86
+ self.field1.findChild(QtWidgets.QLineEdit): self.callsign,
87
+ self.field2.findChild(QtWidgets.QLineEdit): self.field1.findChild(
88
+ QtWidgets.QLineEdit
89
+ ),
90
+ self.field3.findChild(QtWidgets.QLineEdit): self.field2.findChild(
91
+ QtWidgets.QLineEdit
92
+ ),
93
+ self.field4.findChild(QtWidgets.QLineEdit): self.field3.findChild(
94
+ QtWidgets.QLineEdit
95
+ ),
96
+ }
97
+
98
+
99
+ def validate(self):
100
+ """doc"""
101
+ # exchange = self.other_2.text().upper().split()
102
+ # if len(exchange) == 3:
103
+ # if exchange[0].isalpha() and exchange[1].isdigit() and exchange[2].isalpha():
104
+ # return True
105
+ # return False
106
+ return True
107
+
108
+
109
+ def set_contact_vars(self):
110
+ """Contest Specific"""
111
+ self.contact["SNT"] = self.sent.text()
112
+ self.contact["RCV"] = self.receive.text()
113
+ self.contact["NR"] = self.other_2.text().upper()
114
+ self.contact["SentNr"] = self.other_1.text()
115
+
116
+
117
+ def predupe(self):
118
+ """called after callsign entered"""
119
+
120
+
121
+ def prefill(self):
122
+ """Fill sentnr"""
123
+ result = self.database.get_serial()
124
+ serial_nr = str(result.get("serial_nr", "1"))
125
+ if serial_nr == "None":
126
+ serial_nr = "1"
127
+
128
+ exchange = self.contest_settings.get("SentExchange", "").replace("#", serial_nr)
129
+ field = self.field3.findChild(QtWidgets.QLineEdit)
130
+ if len(field.text()) == 0:
131
+ field.setText(exchange)
132
+
133
+
134
+ def points(self):
135
+ """Calc point"""
136
+
137
+ # QSO Points: 1 point per 50 or 144 MHz QSO
138
+ # 2 points per 222 or 432 MHz QSO
139
+ # 4 points per 902 or 1296 MHz QSO
140
+ # 8 points per 2.3 GHz or higher QSO
141
+
142
+ _band = self.contact.get("Band", "")
143
+ if _band in ["50", "144"]:
144
+ return 1
145
+ if _band in ["222", "432"]:
146
+ return 2
147
+ if _band in ["902", "1296"]:
148
+ return 3
149
+ if _band in ["2300+"]:
150
+ return 4
151
+ return 0
152
+
153
+
154
+ def show_mults(self):
155
+ """Return display string for mults"""
156
+ # Multipliers: Grid squares once per band
157
+
158
+ dx = 0
159
+
160
+ sql = (
161
+ "select count(DISTINCT(NR || ':' || Band)) as mult_count "
162
+ f"from dxlog where ContestNR = {self.database.current_contest} and typeof(NR) = 'text';"
163
+ )
164
+ result = self.database.exec_sql(sql)
165
+
166
+ if result:
167
+ dx = result.get("mult_count", 0)
168
+
169
+ return dx
170
+
171
+
172
+ def show_qso(self):
173
+ """Return qso count"""
174
+ result = self.database.fetch_qso_count()
175
+ if result:
176
+ return int(result.get("qsos", 0))
177
+ return 0
178
+
179
+
180
+ def calc_score(self):
181
+ """Return calculated score"""
182
+ # Multipliers: Each US State + DC once per mode
183
+ _points = get_points(self)
184
+ _mults = show_mults(self)
185
+ _power_mult = 1
186
+ # if self.contest_settings.get("PowerCategory", "") == "QRP":
187
+ # _power_mult = 2
188
+ return _points * _power_mult * _mults
189
+
190
+
191
+ def adif(self):
192
+ """Call the generate ADIF function"""
193
+ gen_adif(self, cabrillo_name)
194
+
195
+
196
+ def cabrillo(self):
197
+ """Generates Cabrillo file. Maybe."""
198
+ # https://www.cqwpx.com/cabrillo.htm
199
+ logger.debug("******Cabrillo*****")
200
+ logger.debug("Station: %s", f"{self.station}")
201
+ logger.debug("Contest: %s", f"{self.contest_settings}")
202
+ now = datetime.datetime.now()
203
+ date_time = now.strftime("%Y-%m-%d_%H-%M-%S")
204
+ filename = (
205
+ str(Path.home())
206
+ + "/"
207
+ + f"{self.station.get('Call').upper()}_{cabrillo_name}_{date_time}.log"
208
+ )
209
+ logger.debug("%s", filename)
210
+ log = self.database.fetch_all_contacts_asc()
211
+ try:
212
+ with open(filename, "w", encoding="ascii") as file_descriptor:
213
+ print("START-OF-LOG: 3.0", end="\r\n", file=file_descriptor)
214
+ print(
215
+ f"CREATED-BY: Not1MM v{__version__}",
216
+ end="\r\n",
217
+ file=file_descriptor,
218
+ )
219
+ print(
220
+ f"CONTEST: {cabrillo_name}",
221
+ end="\r\n",
222
+ file=file_descriptor,
223
+ )
224
+ print(
225
+ f"CALLSIGN: {self.station.get('Call','')}",
226
+ end="\r\n",
227
+ file=file_descriptor,
228
+ )
229
+ print(
230
+ f"LOCATION: {self.station.get('ARRLSection', '')}",
231
+ end="\r\n",
232
+ file=file_descriptor,
233
+ )
234
+ # print(
235
+ # f"ARRL-SECTION: {self.pref.get('section', '')}",
236
+ # end="\r\n",
237
+ # file=file_descriptor,
238
+ # )
239
+ print(
240
+ f"CATEGORY-OPERATOR: {self.contest_settings.get('OperatorCategory','')}",
241
+ end="\r\n",
242
+ file=file_descriptor,
243
+ )
244
+ print(
245
+ f"CATEGORY-ASSISTED: {self.contest_settings.get('AssistedCategory','')}",
246
+ end="\r\n",
247
+ file=file_descriptor,
248
+ )
249
+ print(
250
+ f"CATEGORY-BAND: {self.contest_settings.get('BandCategory','')}",
251
+ end="\r\n",
252
+ file=file_descriptor,
253
+ )
254
+ print(
255
+ f"CATEGORY-MODE: {self.contest_settings.get('ModeCategory','')}",
256
+ end="\r\n",
257
+ file=file_descriptor,
258
+ )
259
+ print(
260
+ f"CATEGORY-TRANSMITTER: {self.contest_settings.get('TransmitterCategory','')}",
261
+ end="\r\n",
262
+ file=file_descriptor,
263
+ )
264
+ if self.contest_settings.get("OverlayCategory", "") != "N/A":
265
+ print(
266
+ f"CATEGORY-OVERLAY: {self.contest_settings.get('OverlayCategory','')}",
267
+ end="\r\n",
268
+ file=file_descriptor,
269
+ )
270
+ print(
271
+ f"GRID-LOCATOR: {self.station.get('GridSquare','')}",
272
+ end="\r\n",
273
+ file=file_descriptor,
274
+ )
275
+ # print(
276
+ # f"CATEGORY: {None}",
277
+ # end="\r\n",
278
+ # file=file_descriptor,
279
+ # )
280
+ print(
281
+ f"CATEGORY-POWER: {self.contest_settings.get('PowerCategory','')}",
282
+ end="\r\n",
283
+ file=file_descriptor,
284
+ )
285
+
286
+ print(
287
+ f"CLAIMED-SCORE: {calc_score(self)}",
288
+ end="\r\n",
289
+ file=file_descriptor,
290
+ )
291
+ print(
292
+ f"OPERATORS: {self.contest_settings.get('Operators','')}",
293
+ end="\r\n",
294
+ file=file_descriptor,
295
+ )
296
+ print(
297
+ f"NAME: {self.station.get('Name', '')}",
298
+ end="\r\n",
299
+ file=file_descriptor,
300
+ )
301
+ print(
302
+ f"ADDRESS: {self.station.get('Street1', '')}",
303
+ end="\r\n",
304
+ file=file_descriptor,
305
+ )
306
+ print(
307
+ f"ADDRESS-CITY: {self.station.get('City', '')}",
308
+ end="\r\n",
309
+ file=file_descriptor,
310
+ )
311
+ print(
312
+ f"ADDRESS-STATE-PROVINCE: {self.station.get('State', '')}",
313
+ end="\r\n",
314
+ file=file_descriptor,
315
+ )
316
+ print(
317
+ f"ADDRESS-POSTALCODE: {self.station.get('Zip', '')}",
318
+ end="\r\n",
319
+ file=file_descriptor,
320
+ )
321
+ print(
322
+ f"ADDRESS-COUNTRY: {self.station.get('Country', '')}",
323
+ end="\r\n",
324
+ file=file_descriptor,
325
+ )
326
+ print(
327
+ f"EMAIL: {self.station.get('Email', '')}",
328
+ end="\r\n",
329
+ file=file_descriptor,
330
+ )
331
+ for contact in log:
332
+ the_date_and_time = contact.get("TS", "")
333
+ themode = contact.get("Mode", "")
334
+ if themode == "LSB" or themode == "USB":
335
+ themode = "PH"
336
+ frequency = str(int(contact.get("Freq", "0"))).rjust(5)
337
+
338
+ loggeddate = the_date_and_time[:10]
339
+ loggedtime = the_date_and_time[11:13] + the_date_and_time[14:16]
340
+ print(
341
+ f"QSO: {frequency} {themode} {loggeddate} {loggedtime} "
342
+ f"{contact.get('StationPrefix', '').ljust(13)} "
343
+ f"{str(contact.get('SNT', '')).ljust(3)} "
344
+ f"{str(contact.get('SentNr', '')).ljust(6)} "
345
+ f"{contact.get('Call', '').ljust(13)} "
346
+ f"{str(contact.get('RCV', '')).ljust(3)} "
347
+ f"{str(contact.get('NR', '')).ljust(6)}",
348
+ end="\r\n",
349
+ file=file_descriptor,
350
+ )
351
+ print("END-OF-LOG:", end="\r\n", file=file_descriptor)
352
+ except IOError as exception:
353
+ logger.critical("cabrillo: IO error: %s, writing to %s", exception, filename)
354
+ return
355
+
356
+
357
+ def recalculate_mults(self):
358
+ """Recalculates multipliers after change in logged qso."""