not1mm 24.10.6__py3-none-any.whl → 24.10.10__py3-none-any.whl

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.
not1mm/lib/settings.py CHANGED
@@ -20,6 +20,15 @@ class Settings(QtWidgets.QDialog):
20
20
  self.logger = logging.getLogger("settings")
21
21
  uic.loadUi(app_data_path / "configuration.ui", self)
22
22
  self.buttonBox.accepted.connect(self.save_changes)
23
+ self.usecwdaemon_radioButton.clicked.connect(self.set_cwdaemon_port_hint)
24
+ self.usepywinkeyer_radioButton.clicked.connect(self.set_winkeyer_port_hint)
25
+ self.usecwviacat_radioButton.clicked.connect(self.set_catforcw_port_hint)
26
+ self.cwport_field.setToolTip(
27
+ "Usually 6789 for cwdaemon and 8000 for pywinkeyer."
28
+ )
29
+ self.rigcontrolport_field.setToolTip(
30
+ "Usually 4532 for rigctld and 12345 for flrig."
31
+ )
23
32
  self.preference = pref
24
33
  if sd:
25
34
  self.devices = sd.query_devices()
@@ -29,6 +38,44 @@ class Settings(QtWidgets.QDialog):
29
38
 
30
39
  def setup(self):
31
40
  """setup dialog"""
41
+
42
+ self.use_esm.setChecked(bool(self.preference.get("use_esm")))
43
+
44
+ value = self.preference.get("esm_agn", "DISABLED")
45
+ index = self.esm_agn.findText(value)
46
+ if index != -1:
47
+ self.esm_agn.setCurrentIndex(index)
48
+
49
+ value = self.preference.get("esm_cq", "DISABLED")
50
+ index = self.esm_cq.findText(value)
51
+ if index != -1:
52
+ self.esm_cq.setCurrentIndex(index)
53
+
54
+ value = self.preference.get("esm_exch", "DISABLED")
55
+ index = self.esm_exch.findText(value)
56
+ if index != -1:
57
+ self.esm_exch.setCurrentIndex(index)
58
+
59
+ value = self.preference.get("esm_hiscall", "DISABLED")
60
+ index = self.esm_hiscall.findText(value)
61
+ if index != -1:
62
+ self.esm_hiscall.setCurrentIndex(index)
63
+
64
+ value = self.preference.get("esm_mycall", "DISABLED")
65
+ index = self.esm_mycall.findText(value)
66
+ if index != -1:
67
+ self.esm_mycall.setCurrentIndex(index)
68
+
69
+ value = self.preference.get("esm_qrz", "DISABLED")
70
+ index = self.esm_qrz.findText(value)
71
+ if index != -1:
72
+ self.esm_qrz.setCurrentIndex(index)
73
+
74
+ value = self.preference.get("esm_qsob4", "DISABLED")
75
+ index = self.esm_qsob4.findText(value)
76
+ if index != -1:
77
+ self.esm_qsob4.setCurrentIndex(index)
78
+
32
79
  for device in self.devices:
33
80
  if device.get("max_output_channels"):
34
81
  self.sounddevice.addItem(device.get("name"))
@@ -37,7 +84,6 @@ class Settings(QtWidgets.QDialog):
37
84
  if index != -1:
38
85
  self.sounddevice.setCurrentIndex(index)
39
86
  self.useqrz_radioButton.setChecked(bool(self.preference.get("useqrz")))
40
- # self.usehamdb_radioButton.setChecked(bool(self.preference.get("usehamdb")))
41
87
  self.usehamqth_radioButton.setChecked(bool(self.preference.get("usehamqth")))
42
88
  self.lookup_user_name_field.setText(
43
89
  str(self.preference.get("lookupusername", ""))
@@ -51,7 +97,10 @@ class Settings(QtWidgets.QDialog):
51
97
  self.useflrig_radioButton.setChecked(bool(self.preference.get("useflrig")))
52
98
 
53
99
  self.cwip_field.setText(str(self.preference.get("cwip", "")))
54
- self.cwport_field.setText(str(self.preference.get("cwport", "")))
100
+ if self.preference.get("cwport", ""):
101
+ self.cwport_field.setText(str(self.preference.get("cwport", "")))
102
+ else:
103
+ self.cwport_field.setText("")
55
104
  self.usecwdaemon_radioButton.setChecked(
56
105
  bool(self.preference.get("cwtype") == 1)
57
106
  )
@@ -61,6 +110,13 @@ class Settings(QtWidgets.QDialog):
61
110
  self.usecwviacat_radioButton.setChecked(
62
111
  bool(self.preference.get("cwtype") == 3)
63
112
  )
113
+ if self.preference.get("cwtype") == 1:
114
+ self.set_cwdaemon_port_hint()
115
+ elif self.preference.get("cwtype") == 2:
116
+ self.set_winkeyer_port_hint()
117
+ elif self.preference.get("cwtype") == 3:
118
+ self.set_catforcw_port_hint()
119
+
64
120
  self.connect_to_server.setChecked(bool(self.preference.get("useserver")))
65
121
  self.multicast_group.setText(str(self.preference.get("multicast_group", "")))
66
122
  self.multicast_port.setText(str(self.preference.get("multicast_port", "")))
@@ -73,13 +129,14 @@ class Settings(QtWidgets.QDialog):
73
129
  str(self.preference.get("n1mm_station_name", ""))
74
130
  )
75
131
  self.n1mm_operator.setText(str(self.preference.get("n1mm_operator", "")))
76
- # self.n1mm_ip.setText(str(self.preference.get("n1mm_ip", "")))
77
132
  self.n1mm_radioport.setText(str(self.preference.get("n1mm_radioport", "")))
78
133
  self.n1mm_contactport.setText(str(self.preference.get("n1mm_contactport", "")))
79
134
  self.n1mm_lookupport.setText(str(self.preference.get("n1mm_lookupport", "")))
80
135
  self.n1mm_scoreport.setText(str(self.preference.get("n1mm_scoreport", "")))
81
136
  self.send_n1mm_radio.setChecked(bool(self.preference.get("send_n1mm_radio")))
82
- self.send_n1mm_contact.setChecked(bool(self.preference.get("send_n1mm_contact")))
137
+ self.send_n1mm_contact.setChecked(
138
+ bool(self.preference.get("send_n1mm_contact"))
139
+ )
83
140
  self.send_n1mm_lookup.setChecked(bool(self.preference.get("send_n1mm_lookup")))
84
141
  self.send_n1mm_score.setChecked(bool(self.preference.get("send_n1mm_score")))
85
142
 
@@ -105,15 +162,41 @@ class Settings(QtWidgets.QDialog):
105
162
  self.activate_6m.setChecked(bool("6" in self.preference.get("bands", [])))
106
163
  self.activate_4m.setChecked(bool("4" in self.preference.get("bands", [])))
107
164
  self.activate_2m.setChecked(bool("2" in self.preference.get("bands", [])))
108
- self.activate_1dot25.setChecked(bool("1.25" in self.preference.get("bands", [])))
165
+ self.activate_1dot25.setChecked(
166
+ bool("1.25" in self.preference.get("bands", []))
167
+ )
109
168
  self.activate_70cm.setChecked(bool("70cm" in self.preference.get("bands", [])))
110
169
  self.activate_33cm.setChecked(bool("33cm" in self.preference.get("bands", [])))
111
170
  self.activate_23cm.setChecked(bool("23cm" in self.preference.get("bands", [])))
112
171
 
172
+ def set_cwdaemon_port_hint(self):
173
+ """Sets placeholder hint for the CW interface."""
174
+ self.cwip_field.setPlaceholderText("127.0.0.1")
175
+ self.cwport_field.setPlaceholderText("6789")
176
+
177
+ def set_winkeyer_port_hint(self):
178
+ """Sets placeholder hint for the CW interface."""
179
+ self.cwip_field.setPlaceholderText("127.0.0.1")
180
+ self.cwport_field.setPlaceholderText("8000")
181
+
182
+ def set_catforcw_port_hint(self):
183
+ """Sets placeholder hint for the CW interface."""
184
+ self.cwip_field.setPlaceholderText("")
185
+ self.cwport_field.setPlaceholderText("")
186
+
113
187
  def save_changes(self):
114
188
  """
115
189
  Write preferences to json file.
116
190
  """
191
+ self.preference["use_esm"] = self.use_esm.isChecked()
192
+ self.preference["esm_cq"] = self.esm_cq.currentText()
193
+ self.preference["esm_agn"] = self.esm_agn.currentText()
194
+ self.preference["esm_exch"] = self.esm_exch.currentText()
195
+ self.preference["esm_hiscall"] = self.esm_hiscall.currentText()
196
+ self.preference["esm_mycall"] = self.esm_mycall.currentText()
197
+ self.preference["esm_qrz"] = self.esm_qrz.currentText()
198
+ self.preference["esm_qsob4"] = self.esm_qsob4.currentText()
199
+
117
200
  self.preference["sounddevice"] = self.sounddevice.currentText()
118
201
  self.preference["useqrz"] = self.useqrz_radioButton.isChecked()
119
202
  # self.preference["usehamdb"] = self.usehamdb_radioButton.isChecked()
@@ -131,6 +214,7 @@ class Settings(QtWidgets.QDialog):
131
214
  try:
132
215
  self.preference["cwport"] = int(self.cwport_field.text())
133
216
  except ValueError:
217
+ self.preference["cwport"] = None
134
218
  ...
135
219
  self.preference["cwtype"] = 0
136
220
  if self.usecwdaemon_radioButton.isChecked():
not1mm/lib/version.py CHANGED
@@ -1,3 +1,3 @@
1
1
  """It's the version"""
2
2
 
3
- __version__ = "24.10.6"
3
+ __version__ = "24.10.10"
@@ -380,3 +380,111 @@ def cabrillo(self):
380
380
 
381
381
  def recalculate_mults(self):
382
382
  """Recalculates multipliers after change in logged qso."""
383
+
384
+
385
+ def process_esm(self, new_focused_widget=None, with_enter=False):
386
+ """ESM State Machine"""
387
+
388
+ # self.pref["run_state"]
389
+
390
+ # -----===== Assigned F-Keys =====-----
391
+ # self.esm_dict["CQ"]
392
+ # self.esm_dict["EXCH"]
393
+ # self.esm_dict["QRZ"]
394
+ # self.esm_dict["AGN"]
395
+ # self.esm_dict["HISCALL"]
396
+ # self.esm_dict["MYCALL"]
397
+ # self.esm_dict["QSOB4"]
398
+
399
+ # ----==== text fields ====----
400
+ # self.callsign
401
+ # self.sent
402
+ # self.receive
403
+ # self.other_1
404
+ # self.other_2
405
+
406
+ inputs = {
407
+ self.callsign: "callsign",
408
+ self.sent: "sent",
409
+ self.receive: "receive",
410
+ self.other_1: "other_1",
411
+ self.other_2: "other_2",
412
+ }
413
+ if new_focused_widget is not None:
414
+ self.current_widget = inputs.get(new_focused_widget)
415
+
416
+ # print(f"checking esm {self.current_widget=} {with_enter=} {self.pref.get("run_state")=}")
417
+
418
+ for a_button in [
419
+ self.F1,
420
+ self.F2,
421
+ self.F3,
422
+ self.F4,
423
+ self.F5,
424
+ self.F6,
425
+ self.F7,
426
+ self.F8,
427
+ self.F9,
428
+ self.F10,
429
+ self.F11,
430
+ self.F12,
431
+ ]:
432
+ self.restore_button_color(a_button)
433
+
434
+ buttons_to_send = []
435
+
436
+ if self.pref.get("run_state"):
437
+ if self.current_widget == "callsign":
438
+ if len(self.callsign.text()) < 3:
439
+ self.make_button_green(self.esm_dict["CQ"])
440
+ buttons_to_send.append(self.esm_dict["CQ"])
441
+ elif len(self.callsign.text()) > 2 and self.callsign.text().isalnum():
442
+ self.make_button_green(self.esm_dict["HISCALL"])
443
+ self.make_button_green(self.esm_dict["EXCH"])
444
+ buttons_to_send.append(self.esm_dict["HISCALL"])
445
+ buttons_to_send.append(self.esm_dict["EXCH"])
446
+
447
+ if self.current_widget == "other_2":
448
+ if self.other_2.text() == "":
449
+ self.make_button_green(self.esm_dict["AGN"])
450
+ buttons_to_send.append(self.esm_dict["AGN"])
451
+ elif self.other_2.text().isnumeric():
452
+ self.make_button_green(self.esm_dict["QRZ"])
453
+ buttons_to_send.append(self.esm_dict["QRZ"])
454
+ buttons_to_send.append("LOGIT")
455
+ else:
456
+ self.make_button_green(self.esm_dict["AGN"])
457
+ buttons_to_send.append(self.esm_dict["AGN"])
458
+
459
+ if with_enter is True and bool(len(buttons_to_send)):
460
+ for button in buttons_to_send:
461
+ if button:
462
+ if button == "LOGIT":
463
+ self.save_contact()
464
+ continue
465
+ self.process_function_key(button)
466
+ else:
467
+ if self.current_widget == "callsign":
468
+ if len(self.callsign.text()) > 2 and self.callsign.text().isalnum():
469
+ self.make_button_green(self.esm_dict["MYCALL"])
470
+ buttons_to_send.append(self.esm_dict["MYCALL"])
471
+
472
+ if self.current_widget == "other_2":
473
+ if self.other_2.text() == "":
474
+ self.make_button_green(self.esm_dict["AGN"])
475
+ buttons_to_send.append(self.esm_dict["AGN"])
476
+ elif self.other_2.text().isnumeric():
477
+ self.make_button_green(self.esm_dict["EXCH"])
478
+ buttons_to_send.append(self.esm_dict["EXCH"])
479
+ buttons_to_send.append("LOGIT")
480
+ else:
481
+ self.make_button_green(self.esm_dict["AGN"])
482
+ buttons_to_send.append(self.esm_dict["AGN"])
483
+
484
+ if with_enter is True and bool(len(buttons_to_send)):
485
+ for button in buttons_to_send:
486
+ if button:
487
+ if button == "LOGIT":
488
+ self.save_contact()
489
+ continue
490
+ self.process_function_key(button)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 24.10.6
3
+ Version: 24.10.10
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
@@ -118,6 +118,16 @@ Requires-Dist: Levenshtein
118
118
  - [Cabrillo](#cabrillo)
119
119
  - [ADIF](#adif)
120
120
  - [Recalulate Mults](#recalulate-mults)
121
+ - [Testing Out ESM Currently only in CQ WW CW](#testing-out-esm-currently-only-in-cq-ww-cw)
122
+ - [Run States](#run-states)
123
+ - [CQ](#cq)
124
+ - [Call Entered send His Call and the Exchange](#call-entered-send-his-call-and-the-exchange)
125
+ - [Empty exchange field send AGN till you get it](#empty-exchange-field-send-agn-till-you-get-it)
126
+ - [Exchange field filled, send TU QRZ and logs it](#exchange-field-filled-send-tu-qrz-and-logs-it)
127
+ - [S\&P States](#sp-states)
128
+ - [With his call entered, Send your call](#with-his-call-entered-send-your-call)
129
+ - [If no exchange entered send AGN](#if-no-exchange-entered-send-agn)
130
+ - [With exchange entered, send your exchange and log it](#with-exchange-entered-send-your-exchange-and-log-it)
121
131
  - [Contest specific notes](#contest-specific-notes)
122
132
  - [ARRL Sweekstakes](#arrl-sweekstakes)
123
133
  - [The exchange parser](#the-exchange-parser)
@@ -219,6 +229,8 @@ generated, 'cause I'm lazy, list of those who've submitted PR's.
219
229
 
220
230
  ## Recent Changes
221
231
 
232
+ - [24-10-10] Add ESM to CQ WW CW to test it out.
233
+ - [24-10-8] Fix crash on Tune to spot. Change placeholder text for the CW port for those unable to read documentation.
222
234
  - [24-10-6] Removed 60, 30, 17 and 12M from the default list of bands.
223
235
  - [24-10-5-1] Store the bandmap spots age timer in the preferences.
224
236
  - [24-10-5] Force reselction of contest after different DB opened.
@@ -827,6 +839,55 @@ After editing a contact and before generating a Cabrillo file. There is a Misc
827
839
  menu option that will recalculate the multipliers incase an edit had caused a
828
840
  change.
829
841
 
842
+ ## Testing Out ESM Currently only in CQ WW CW
843
+
844
+ I caved and started working on ESM or Enter Sends Message. Currently it is only
845
+ working in the CQ WW CW. To test it out you can go to `FILE -> Configuration Settings`
846
+
847
+ ![Config Screen](https://private-user-images.githubusercontent.com/49108421/375571913-1fbb1da1-5b81-45f8-8b6d-412702add200.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg2MDU2MjUsIm5iZiI6MTcyODYwNTMyNSwicGF0aCI6Ii80OTEwODQyMS8zNzU1NzE5MTMtMWZiYjFkYTEtNWI4MS00NWY4LThiNmQtNDEyNzAyYWRkMjAwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDExVDAwMDg0NVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTU2NDBlZTliMTFlYzc1NjE1MzA4MjE1YTVkMzlhNmIwNzYzYjVlMzM5MDdjNTlkODVlODY1MzBlZWJmZWEzMWImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.DITQPUAHkFLk1ezFxvQYLCJVaq8vrUDm_5EbfDLJbsE)
848
+
849
+
850
+ Check the mark to Use ESM and tell it which function keys do what. The keys will need
851
+ to have the same function in both Run and S&P modes. The function keys will highlight
852
+ green depending on the state of the input fields. The green keys will be sent if you
853
+ press the Enter key. You should use the Space bar to move to another field.
854
+
855
+ The contact will be automatically logged once all the needed info is collected and the
856
+ QRZ (for Run) or Exchange (for S&P) is sent.
857
+
858
+ ## Run States
859
+
860
+ ### CQ
861
+
862
+ ![CQ](https://private-user-images.githubusercontent.com/49108421/375572433-a156588d-83b5-4edd-b9f6-4ab4291c258c.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg2MDU2MjUsIm5iZiI6MTcyODYwNTMyNSwicGF0aCI6Ii80OTEwODQyMS8zNzU1NzI0MzMtYTE1NjU4OGQtODNiNS00ZWRkLWI5ZjYtNGFiNDI5MWMyNThjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDExVDAwMDg0NVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTVjYTdjZDhhMmJiZTA5NTdmNDIxNTgxMmY5NmJmNDBiZmZjZTk2MTAyODM4NjYxYWQzY2Q3NGNkN2ZiYzZmNTImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.44q-Ns0aWBLBFARF8Oyb2wxF0olZx28eddPyp_p_T3s)
863
+
864
+ ### Call Entered send His Call and the Exchange
865
+
866
+ ![Call Entered send His Call and the Exchange.](https://private-user-images.githubusercontent.com/49108421/375572785-1d9f6a33-1cd1-4e08-82d5-b11851e279c7.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg2MDYyNjAsIm5iZiI6MTcyODYwNTk2MCwicGF0aCI6Ii80OTEwODQyMS8zNzU1NzI3ODUtMWQ5ZjZhMzMtMWNkMS00ZTA4LTgyZDUtYjExODUxZTI3OWM3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDExVDAwMTkyMFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWEyZmEzOGM4ZmQ4MTNlZmM5ZDA2N2FmNDBkNTYzOTVmYTM3NzFiY2Q4NDE1ZTlkYzhmMjhiNGI4NGJiMmMzY2EmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.KcEd-CBbY2MHKrApqmXkr06Pcb0kvYyxK8tdQH3doc4)
867
+
868
+ ### Empty exchange field send AGN till you get it
869
+
870
+ ![Empty exchange field send AGN till you get it](https://private-user-images.githubusercontent.com/49108421/375573288-3fa5f231-0648-412a-94d7-06ab38e1334f.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg2MDYyNjAsIm5iZiI6MTcyODYwNTk2MCwicGF0aCI6Ii80OTEwODQyMS8zNzU1NzMyODgtM2ZhNWYyMzEtMDY0OC00MTJhLTk0ZDctMDZhYjM4ZTEzMzRmLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDExVDAwMTkyMFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWIxNjA5NWM0MWI2ZmU0ODNmYjY2N2M5YTdjNzQ5ZDdkZWZkZmE3MDI2NjBlNzc4YmNhNTNjYjMzOTI4MjIwMzcmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.VycMnaYPKW08YmCQmeGpQWToDpNNaEmNZ3LAnEQUifM)
871
+
872
+ ### Exchange field filled, send TU QRZ and logs it
873
+
874
+ ![Exchange field filled, send TU QRZ and logs it](https://private-user-images.githubusercontent.com/49108421/375573434-b6ee0617-60ac-4937-82cc-e1b1428899d5.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg2MDYyNjAsIm5iZiI6MTcyODYwNTk2MCwicGF0aCI6Ii80OTEwODQyMS8zNzU1NzM0MzQtYjZlZTA2MTctNjBhYy00OTM3LTgyY2MtZTFiMTQyODg5OWQ1LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDExVDAwMTkyMFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQxNzM4ODY2NWViNzNhZjI2OWRiYzQ0ZTBmMWIxOTRhODRiZDI1ZjQ3OWI0YjY5OGM4OGYxYmRjYWVjYjYzNjYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.yCx8NWkE9Ep-NKv2oxEjWWDMraBZsov59GzHspC3jmk)
875
+
876
+ ## S&P States
877
+
878
+ ### With his call entered, Send your call
879
+
880
+ ![With his call entered, Send your call](https://private-user-images.githubusercontent.com/49108421/375573821-67dd35c7-8563-4ad6-bee6-7f7514e7d3a6.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg2MDYyNjAsIm5iZiI6MTcyODYwNTk2MCwicGF0aCI6Ii80OTEwODQyMS8zNzU1NzM4MjEtNjdkZDM1YzctODU2My00YWQ2LWJlZTYtN2Y3NTE0ZTdkM2E2LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDExVDAwMTkyMFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTdkNDRmYmI2MThlYjg2ZjU5NjY3OWY2YTEyMGU2YWQ5YjIyM2NhY2QzODVhY2U3ZGZhMDI3ZDQzMmY1MTU5MWMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.p8JisS0D5noIDRUAjwkOyxpzR10MhIYmW-y8h2ngnZo)
881
+
882
+ ### If no exchange entered send AGN
883
+
884
+ ![If no exchange entered send AGN](https://private-user-images.githubusercontent.com/49108421/375573957-9753786b-3018-4821-b07a-42bdf50b4468.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg2MDYyNjAsIm5iZiI6MTcyODYwNTk2MCwicGF0aCI6Ii80OTEwODQyMS8zNzU1NzM5NTctOTc1Mzc4NmItMzAxOC00ODIxLWIwN2EtNDJiZGY1MGI0NDY4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDExVDAwMTkyMFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWY5M2E1MzllOTc3YmEwNDZkOWFlYmEyMmQzNDc0YTUwYThmNzk1ODQ4M2IzMGExNjQyMTdlMzkyYzdmZjgyODkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.We-bPqprJ24HQW7eCjxFKuUxWJwawRZWab74INuSyyA)
885
+
886
+ ### With exchange entered, send your exchange and log it
887
+
888
+ ![With exchange entered, send your exchange and log it](https://private-user-images.githubusercontent.com/49108421/375574075-9857287e-ce11-44c8-a7de-417912988f08.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mjg2MDYyNjAsIm5iZiI6MTcyODYwNTk2MCwicGF0aCI6Ii80OTEwODQyMS8zNzU1NzQwNzUtOTg1NzI4N2UtY2UxMS00NGM4LWE3ZGUtNDE3OTEyOTg4ZjA4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDEwMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQxMDExVDAwMTkyMFomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPThmNzZiOTRkMzQyOGIxMWUzMjM4ZWVjMzI3ZTkzZjc3OThkZjI5NWYxYTNkYTQ0ZDYyNzJkMTA5ZjQwNDBmMzEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.YtD5IoXhSmSUs53ofWJUmuJZqca2Uhe6dYk8JyOHBgM)
889
+
890
+
830
891
  ## Contest specific notes
831
892
 
832
893
  I found it might be beneficial to have a section devoted to wierd quirky things
@@ -868,4 +929,4 @@ The best thing you can do is play around with it to see how it behaves.
868
929
  In the `Sent Exchange` field of the New Contest dialog put in the Precidence,
869
930
  Call, Check and Section. Example: `A K6GTE 17 ORG`.
870
931
 
871
- For the Run Exchange macro I'd put `{HISCALL} # A K6GTE 17 ORG`.
932
+ For the Run Exchange macro I'd put `{HISCALL} {SENTNR} {EXCH}`.
@@ -1,5 +1,5 @@
1
1
  not1mm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- not1mm/__main__.py,sha256=jShyKC6PnUdyT9htancQg_m5j1KlFnKmPdjmNV_he60,131520
2
+ not1mm/__main__.py,sha256=m9GEvmOqtLldHG6w_gk8j2oSzGXi6RqBnxnVjGvlwpQ,134547
3
3
  not1mm/bandmap.py,sha256=P91rYGmd8r5K6TRNZt7kqqW6zCBVlFA1_n9-V7as1WE,31672
4
4
  not1mm/checkwindow.py,sha256=aI-nr8OF90IWV7R_XRdmitvBJ9M85evCs72HoU3Jnvc,10374
5
5
  not1mm/fsutils.py,sha256=ukHKxKTeNKxKwqRaJjtzRShL4X5Xl0jRBbADyy3Ifp8,1701
@@ -16,7 +16,7 @@ not1mm/data/alpha bravo charlie delta.txt,sha256=d5QMmSWEUAe4Rj1XbNjTPLa_5Be4Se6
16
16
  not1mm/data/bandmap.ui,sha256=hvovf1YKyfUVVbKl6Ib2zU4RdUrFsQwm-255wVeKXZE,7180
17
17
  not1mm/data/check.png,sha256=UvFOLr8V-79qnjW8wUaGItXk_OSP8m8hqPevs8NDlFY,387
18
18
  not1mm/data/checkwindow.ui,sha256=Ux5EgO-JalGB9qx3M6tmMpGHO0RmuuY1w0XEbuwd1xk,4658
19
- not1mm/data/configuration.ui,sha256=L3gZPd_qaAntVIojUktJXSj6dAAs9NNWLgzxdaWEZBE,53488
19
+ not1mm/data/configuration.ui,sha256=VGJYL14XPuJkJVKk0FWyZWFXK5ibZ3_0_VUBXyzKnOk,68141
20
20
  not1mm/data/contests.sql,sha256=4hmJCDvrbxnA_Y5S4T5o52TZieeFk6QUwFerwlFePNA,89307
21
21
  not1mm/data/cty.json,sha256=sBIN1raQOKeVIO5dRaWn0Yqq8XZKpM_VCzS3kMlcwp4,4871545
22
22
  not1mm/data/cwmacros.txt,sha256=PvJ7TxGILq-ErHb6Gbrm-08x76BbCdXb8AY8a7st5mg,451
@@ -112,9 +112,9 @@ not1mm/lib/new_contest.py,sha256=IznTDMq7yXHB6zBoGUEC_WDYPCPpsSZW4wwMJi16zK0,816
112
112
  not1mm/lib/playsound.py,sha256=kxkcitBFbZCXJ2wxQ1lxg4rBwfxiSpuNpJSXHOPCoXA,9241
113
113
  not1mm/lib/plugin_common.py,sha256=TbFUbftjELFt4QRdsjSHbqnXSngZOlSwlCTClqosDXA,9727
114
114
  not1mm/lib/select_contest.py,sha256=WsptLuwkouIHeocJL3oZ6-eUfEnhpwdc-x7eMZ_TIVM,359
115
- not1mm/lib/settings.py,sha256=0Su8BQM4haVhc_P74q8UhzRZxtgWhM40UmVtQdMJQeM,10022
115
+ not1mm/lib/settings.py,sha256=7_JFDSKPOd35Gwzqhrbed4EfrlYUm7AEnz2xBRioc-g,13280
116
116
  not1mm/lib/super_check_partial.py,sha256=p5l3u2ZOCBtlWgbvskC50FpuoaIpR07tfC6zTdRWbh4,2334
117
- not1mm/lib/version.py,sha256=-VK621TV7vjdeRUalV4nYjao7hyeK_a1xlqZJIMqY7A,48
117
+ not1mm/lib/version.py,sha256=_D_ukQUdYbZSA6fI-cZ2OwXpNOQ_nr5d5rAAmQskuEQ,49
118
118
  not1mm/lib/versiontest.py,sha256=8vDNptuBBunn-1IGkjNaquehqBYUJyjrPSF8Igmd4_Y,1286
119
119
  not1mm/plugins/10_10_fall_cw.py,sha256=IttjX1yy4nDdACGsiYlPteFG8eVseX_WtoFio6bqHE8,10953
120
120
  not1mm/plugins/10_10_spring_cw.py,sha256=ThCptdM3dX4ywhoy2JRcOEyHSqcJolFaT7O_PYzM1Mg,10958
@@ -137,7 +137,7 @@ not1mm/plugins/cq_160_ssb.py,sha256=zIwSMAjHSt6W2edrDzVbyTf860JowHoFkU9BKO8Enag,
137
137
  not1mm/plugins/cq_wpx_cw.py,sha256=9aNzAR-KhznIwUlxUFjAi_hbiw_6RrCMwUBk9I2f6Hs,14037
138
138
  not1mm/plugins/cq_wpx_rtty.py,sha256=PpU_PxjQGeMjzbofYNsl-No37s7IgkPyW2bKFRkN9jU,16473
139
139
  not1mm/plugins/cq_wpx_ssb.py,sha256=-hGRovqHR9rfOUnG4LPOoABTb4heH8VAX6rYdJbCqsw,12687
140
- not1mm/plugins/cq_ww_cw.py,sha256=m4Xkqb_qFyXWEgkxqbanvtiCTvI8NNPKNXzHgFZzhnE,12340
140
+ not1mm/plugins/cq_ww_cw.py,sha256=rtJynxy4RAYXwGOk76k6DbVN1lo-Zl9voFH5t2OgplA,16130
141
141
  not1mm/plugins/cq_ww_rtty.py,sha256=WnqSfCNX6ieLZlUg_P_vx-Z2iY0lxdwEgPuT9aax1JU,16772
142
142
  not1mm/plugins/cq_ww_ssb.py,sha256=hZwG88-hPLmwIGXHX_S_ty8Nhn1kIuPjSuTRpCWoN9g,12631
143
143
  not1mm/plugins/cwt.py,sha256=KvvkEfQrYSra0y8qE4yThvZNLrZcslt0IqYEomDpf-M,12774
@@ -157,10 +157,9 @@ not1mm/plugins/ref_cw.py,sha256=aWjHHkqIKutjRUtzh09y5haFfnZK9poRQDWRQMDRxxU,1632
157
157
  not1mm/plugins/stew_perry_topband.py,sha256=CKBQbYl4ETxhXJd2dma4fg_C5pag_s7Nf61SCztZtqE,10668
158
158
  not1mm/plugins/weekly_rtty.py,sha256=DQcy3SY0Zn56EdlYGf3NxrRhTnkNa5IqRQPRQdKDSPs,14255
159
159
  not1mm/plugins/winter_field_day.py,sha256=4rcfRtobwjHO6BNL3WOTHzBmyyeuX79BNGBG8PfjrI8,10238
160
- test/contests.py,sha256=bPJZz0zC_d_lpkc9_-Llct628DZIL5kI7m2QIVhAcVM,17498
161
- not1mm-24.10.6.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
162
- not1mm-24.10.6.dist-info/METADATA,sha256=7tWxHcNmpDHMgBdupY6ZsugM5vCFGFezsnFJveseiKE,30738
163
- not1mm-24.10.6.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
164
- not1mm-24.10.6.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
165
- not1mm-24.10.6.dist-info/top_level.txt,sha256=b4JoTnuFyh8DwxYUjTpCWpKI9Yi1tKwwvCjSYiNY4G8,12
166
- not1mm-24.10.6.dist-info/RECORD,,
160
+ not1mm-24.10.10.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
161
+ not1mm-24.10.10.dist-info/METADATA,sha256=LAq5jcblrc5PwviH6M4bpuKNRuMiBrJA47vV93OUT5o,39215
162
+ not1mm-24.10.10.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
163
+ not1mm-24.10.10.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
164
+ not1mm-24.10.10.dist-info/top_level.txt,sha256=0YmTxEcDzQlzXub-lXASvoLpg_mt1c2thb5cVkDf5J4,7
165
+ not1mm-24.10.10.dist-info/RECORD,,