not1mm 23.5.6__py3-none-any.whl → 23.5.8__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/__main__.py CHANGED
@@ -8,6 +8,7 @@ import importlib
8
8
  import logging
9
9
  import os
10
10
  import pkgutil
11
+ import platform
11
12
  import queue
12
13
  import re
13
14
  import socket
@@ -378,6 +379,8 @@ class MainWindow(QtWidgets.QMainWindow):
378
379
  def edit_configuration_settings(self):
379
380
  """Configuration Settings was clicked"""
380
381
  self.configuration_dialog = Settings(WORKING_PATH, CONFIG_PATH, self.pref)
382
+ if self.pref.get("dark_mode"):
383
+ self.configuration_dialog.setStyleSheet(DARK_STYLESHEET)
381
384
  self.configuration_dialog.usehamdb_radioButton.hide()
382
385
  # self.configuration_dialog.n1mm_tab.hide()
383
386
  self.configuration_dialog.show()
@@ -408,6 +411,7 @@ class MainWindow(QtWidgets.QMainWindow):
408
411
  self.make_op_dir()
409
412
  cmd = {}
410
413
  cmd["cmd"] = "NEWDB"
414
+ cmd["station"] = platform.node()
411
415
  self.multicast_interface.send_as_json(cmd)
412
416
  self.clearinputs()
413
417
  self.edit_station_settings()
@@ -430,6 +434,7 @@ class MainWindow(QtWidgets.QMainWindow):
430
434
  self.make_op_dir()
431
435
  cmd = {}
432
436
  cmd["cmd"] = "NEWDB"
437
+ cmd["station"] = platform.node()
433
438
  self.multicast_interface.send_as_json(cmd)
434
439
  self.clearinputs()
435
440
 
@@ -444,6 +449,8 @@ class MainWindow(QtWidgets.QMainWindow):
444
449
 
445
450
  if contests:
446
451
  self.contest_dialog = SelectContest(WORKING_PATH)
452
+ if self.pref.get("dark_mode"):
453
+ self.contest_dialog.setStyleSheet(DARK_STYLESHEET)
447
454
  self.contest_dialog.contest_list.setRowCount(0)
448
455
  self.contest_dialog.contest_list.setColumnCount(4)
449
456
  self.contest_dialog.contest_list.verticalHeader().setVisible(False)
@@ -501,6 +508,8 @@ class MainWindow(QtWidgets.QMainWindow):
501
508
  if self.contest_settings is None:
502
509
  return
503
510
  self.contest_dialog = NewContest(WORKING_PATH)
511
+ if self.pref.get("dark_mode"):
512
+ self.contest_dialog.setStyleSheet(DARK_STYLESHEET)
504
513
  self.contest_dialog.setWindowTitle("Edit Contest")
505
514
  self.contest_dialog.title.setText("")
506
515
  self.contest_dialog.accepted.connect(self.save_edited_contest)
@@ -591,10 +600,12 @@ class MainWindow(QtWidgets.QMainWindow):
591
600
 
592
601
  cmd = {}
593
602
  cmd["cmd"] = "NEWDB"
603
+ cmd["station"] = platform.node()
594
604
  self.multicast_interface.send_as_json(cmd)
595
605
  if hasattr(self.contest, "columns"):
596
606
  cmd = {}
597
607
  cmd["cmd"] = "SHOWCOLUMNS"
608
+ cmd["station"] = platform.node()
598
609
  cmd["COLUMNS"] = self.contest.columns
599
610
  self.multicast_interface.send_as_json(cmd)
600
611
 
@@ -610,6 +621,7 @@ class MainWindow(QtWidgets.QMainWindow):
610
621
  "RTTY": (self.Band_Mode_Frame_RTTY,),
611
622
  "PSK": (self.Band_Mode_Frame_RTTY,),
612
623
  "SSB+CW": (self.Band_Mode_Frame_CW, self.Band_Mode_Frame_SSB),
624
+ "BOTH": (self.Band_Mode_Frame_CW, self.Band_Mode_Frame_SSB),
613
625
  "DIGITAL": (self.Band_Mode_Frame_RTTY,),
614
626
  "SSB+CW+DIGITAL": (
615
627
  self.Band_Mode_Frame_RTTY,
@@ -875,6 +887,7 @@ class MainWindow(QtWidgets.QMainWindow):
875
887
  self.callsign.setFocus()
876
888
  cmd = {}
877
889
  cmd["cmd"] = "CALLCHANGED"
890
+ cmd["station"] = platform.node()
878
891
  cmd["call"] = ""
879
892
  self.multicast_interface.send_as_json(cmd)
880
893
 
@@ -913,6 +926,7 @@ class MainWindow(QtWidgets.QMainWindow):
913
926
  self.clearinputs()
914
927
  cmd = {}
915
928
  cmd["cmd"] = "UPDATELOG"
929
+ cmd["station"] = platform.node()
916
930
  self.multicast_interface.send_as_json(cmd)
917
931
  # self.contact["ContestName"] = self.contest.name
918
932
  # self.contact["SNT"] = self.sent.text()
@@ -996,6 +1010,8 @@ class MainWindow(QtWidgets.QMainWindow):
996
1010
  """Show settings dialog"""
997
1011
  logger.debug("Station Settings selected")
998
1012
  self.settings_dialog = EditStation(WORKING_PATH)
1013
+ if self.pref.get("dark_mode"):
1014
+ self.settings_dialog.setStyleSheet(DARK_STYLESHEET)
999
1015
  self.settings_dialog.accepted.connect(self.save_settings)
1000
1016
  # if self.pref.get("dark_mode"):
1001
1017
  # self.settings_dialog.setStyleSheet(DARK_STYLESHEET)
@@ -1481,9 +1497,13 @@ class MainWindow(QtWidgets.QMainWindow):
1481
1497
  if hasattr(self.contest, "columns"):
1482
1498
  cmd = {}
1483
1499
  cmd["cmd"] = "SHOWCOLUMNS"
1500
+ cmd["station"] = platform.node()
1484
1501
  cmd["COLUMNS"] = self.contest.columns
1485
1502
  self.multicast_interface.send_as_json(cmd)
1486
- if json_data.get("cmd", "") == "TUNE":
1503
+ if (
1504
+ json_data.get("cmd", "") == "TUNE"
1505
+ and json_data.get("station", "") == platform.node()
1506
+ ):
1487
1507
  # b'{"cmd": "TUNE", "freq": 7.0235, "spot": "MM0DGI"}'
1488
1508
  vfo = json_data.get("freq")
1489
1509
  vfo = float(vfo) * 1000000
@@ -1632,6 +1652,7 @@ class MainWindow(QtWidgets.QMainWindow):
1632
1652
  return
1633
1653
  cmd = {}
1634
1654
  cmd["cmd"] = "CALLCHANGED"
1655
+ cmd["station"] = platform.node()
1635
1656
  cmd["call"] = stripped_text
1636
1657
  self.multicast_interface.send_as_json(cmd)
1637
1658
  self.check_callsign(stripped_text)
@@ -1773,7 +1794,8 @@ class MainWindow(QtWidgets.QMainWindow):
1773
1794
  if self.rig_control.online:
1774
1795
  vfo = self.rig_control.get_vfo()
1775
1796
  mode = self.rig_control.get_mode()
1776
- self.radio_state["ptt"] = self.rig_control.get_ptt()
1797
+ bw = self.rig_control.get_bw()
1798
+ # self.radio_state["ptt"] = self.rig_control.get_ptt()
1777
1799
  # if self.radio_state.get("ptt", 0) == 1:
1778
1800
  # self.leftdot.setPixmap(self.greendot)
1779
1801
  # else:
@@ -1790,13 +1812,16 @@ class MainWindow(QtWidgets.QMainWindow):
1790
1812
  self.contact["Band"] = get_logged_band(str(vfo))
1791
1813
  self.set_band_indicator(band)
1792
1814
  self.radio_state["mode"] = mode
1793
- # logger.debug("VFO: %s MODE: %s", vfo, mode)
1815
+ self.radio_state["bw"] = bw
1816
+ logger.debug("VFO: %s MODE: %s BW: %s", vfo, mode, bw)
1794
1817
  self.set_window_title()
1795
1818
  cmd = {}
1796
1819
  cmd["cmd"] = "RADIO_STATE"
1820
+ cmd["station"] = platform.node()
1797
1821
  cmd["band"] = band
1798
1822
  cmd["vfoa"] = vfo
1799
1823
  cmd["mode"] = mode
1824
+ cmd["bw"] = bw
1800
1825
  self.multicast_interface.send_as_json(cmd)
1801
1826
 
1802
1827
  def edit_cw_macros(self) -> None:
not1mm/bandmap.py CHANGED
@@ -14,6 +14,7 @@ from pathlib import Path
14
14
  import logging
15
15
  import os
16
16
  import pkgutil
17
+ import platform
17
18
  import sys
18
19
  import sqlite3
19
20
 
@@ -43,6 +44,11 @@ else:
43
44
  CONFIG_PATH = str(Path.home() / ".config")
44
45
  CONFIG_PATH += "/not1mm"
45
46
 
47
+ DARK_STYLESHEET = ""
48
+
49
+ with open(WORKING_PATH + "/data/Combinear.qss", encoding="utf-8") as stylefile:
50
+ DARK_STYLESHEET = stylefile.read()
51
+
46
52
  MULTICAST_PORT = 2239
47
53
  MULTICAST_GROUP = "224.1.1.1"
48
54
  INTERFACE_IP = "0.0.0.0"
@@ -193,12 +199,16 @@ class MainWindow(QtWidgets.QMainWindow):
193
199
  lineitemlist = []
194
200
  textItemList = []
195
201
  connected = False
202
+ bandwidth = 0
203
+ bandwidth_mark = []
196
204
 
197
205
  def __init__(self, *args, **kwargs):
198
206
  super().__init__(*args, **kwargs)
199
207
  self._udpwatch = None
200
208
  data_path = WORKING_PATH + "/data/bandmap.ui"
201
209
  uic.loadUi(data_path, self)
210
+ if PREF.get("dark_mode"):
211
+ self.setStyleSheet(DARK_STYLESHEET)
202
212
  self.agetime = self.clear_spot_olderSpinBox.value()
203
213
  self.clear_spot_olderSpinBox.valueChanged.connect(self.spot_aging_changed)
204
214
  self.clearButton.clicked.connect(self.clear_spots)
@@ -262,10 +272,14 @@ class MainWindow(QtWidgets.QMainWindow):
262
272
  the_error = f"Not JSON: {err}\n{bundle}"
263
273
  logger.debug(the_error)
264
274
  continue
265
- if packet.get("cmd", "") == "RADIO_STATE":
275
+ if (
276
+ packet.get("cmd", "") == "RADIO_STATE"
277
+ and packet.get("station", "") == platform.node()
278
+ ):
266
279
  self.set_band(packet.get("band") + "m", False)
267
280
  self.rx_freq = float(packet.get("vfoa")) / 1000000
268
281
  self.tx_freq = self.rx_freq
282
+ self.bandwidth = int(packet.get("bw", "0"))
269
283
  step, _ = self.determine_step_digits()
270
284
  self.drawTXRXMarks(step)
271
285
 
@@ -276,6 +290,7 @@ class MainWindow(QtWidgets.QMainWindow):
276
290
  if item:
277
291
  cmd = {}
278
292
  cmd["cmd"] = "TUNE"
293
+ cmd["station"] = platform.node()
279
294
  cmd["freq"] = items[0].property("freq")
280
295
  cmd["spot"] = items[0].toPlainText().split()[0]
281
296
  packet = bytes(dumps(cmd), encoding="ascii")
@@ -293,13 +308,14 @@ class MainWindow(QtWidgets.QMainWindow):
293
308
  self.clear_all_callsign_from_scene()
294
309
  self.clear_freq_mark(self.rxMark)
295
310
  self.clear_freq_mark(self.txMark)
311
+ self.clear_freq_mark(self.bandwidth_mark)
296
312
  self.bandmap_scene.clear()
297
313
 
298
314
  step, _digits = self.determine_step_digits()
299
315
  steps = int(round((self.currentBand.end - self.currentBand.start) / step))
300
316
  self.graphicsView.setFixedSize(330, steps * PIXELSPERSTEP + 30)
301
317
  self.graphicsView.setScene(self.bandmap_scene)
302
- for i in range(steps):
318
+ for i in range(steps): # Draw tickmarks
303
319
  length = 10
304
320
  if i % 5 == 0:
305
321
  length = 15
@@ -310,7 +326,7 @@ class MainWindow(QtWidgets.QMainWindow):
310
326
  i * PIXELSPERSTEP,
311
327
  QtGui.QPen(QtGui.QColor(192, 192, 192)),
312
328
  )
313
- if i % 5 == 0:
329
+ if i % 5 == 0: # Add Frequency
314
330
  freq = self.currentBand.start + step * i
315
331
  text = f"{freq:.3f}"
316
332
  self.something = self.bandmap_scene.addText(text)
@@ -333,19 +349,25 @@ class MainWindow(QtWidgets.QMainWindow):
333
349
  self.zoom += 1
334
350
  self.zoom = min(self.zoom, 7)
335
351
  self.update()
352
+ self.center_on_rxfreq()
336
353
 
337
354
  def dec_zoom(self):
338
355
  """doc"""
339
356
  self.zoom -= 1
340
357
  self.zoom = max(self.zoom, 1)
341
358
  self.update()
359
+ self.center_on_rxfreq()
342
360
 
343
361
  def drawTXRXMarks(self, step):
344
362
  """doc"""
345
363
  if self.rx_freq:
364
+ self.clear_freq_mark(self.bandwidth_mark)
346
365
  self.clear_freq_mark(self.rxMark)
366
+ self.draw_bandwidth(
367
+ self.rx_freq, step, QtGui.QColor(30, 30, 180, 180), self.bandwidth_mark
368
+ )
347
369
  self.drawfreqmark(
348
- self.rx_freq, step, QtGui.QColor(30, 180, 30), self.rxMark
370
+ self.rx_freq, step, QtGui.QColor(30, 180, 30, 180), self.rxMark
349
371
  )
350
372
 
351
373
  def Freq2ScenePos(self, freq: float):
@@ -358,11 +380,25 @@ class MainWindow(QtWidgets.QMainWindow):
358
380
  )
359
381
  return ret
360
382
 
383
+ def center_on_rxfreq(self):
384
+ """doc"""
385
+ freq_pos = self.Freq2ScenePos(self.rx_freq).y()
386
+ self.scrollArea.verticalScrollBar().setValue(
387
+ int(freq_pos - (self.height() / 2) + 80)
388
+ )
389
+ # This does not work... Have no idea why.
390
+ # anim = QtCore.QPropertyAnimation(
391
+ # self.scrollArea.verticalScrollBar(), "value".encode()
392
+ # )
393
+ # anim.setDuration(300)
394
+ # anim.setStartValue(self.scrollArea.verticalScrollBar().value())
395
+ # anim.setEndValue(int(freq_pos - (self.height() / 2) + 80))
396
+ # anim.start(QtCore.QAbstractAnimation.DeletionPolicy.DeleteWhenStopped)
397
+
361
398
  def drawfreqmark(self, freq, step, color, currentPolygon):
362
399
  """doc"""
363
400
 
364
401
  self.clear_freq_mark(currentPolygon)
365
-
366
402
  # do not show the freq mark if it is outside the bandmap
367
403
  if freq < self.currentBand.start or freq > self.currentBand.end:
368
404
  return
@@ -378,6 +414,28 @@ class MainWindow(QtWidgets.QMainWindow):
378
414
  brush = QtGui.QBrush(color)
379
415
  currentPolygon.append(self.bandmap_scene.addPolygon(poly, pen, brush))
380
416
 
417
+ def draw_bandwidth(self, freq, step, color, currentPolygon):
418
+ """bandwidth"""
419
+ logger.debug("%s", f"mark:{currentPolygon} f:{freq} b:{self.bandwidth}")
420
+ self.clear_freq_mark(currentPolygon)
421
+ if freq < self.currentBand.start or freq > self.currentBand.end:
422
+ return
423
+ if freq and self.bandwidth:
424
+ # color = QtGui.QColor(30, 30, 180)
425
+ bw_start = freq - ((self.bandwidth / 2) / 1000000)
426
+ bw_end = freq + ((self.bandwidth / 2) / 1000000)
427
+ logger.debug("%s", f"s:{bw_start} e:{bw_end}")
428
+ Yposition_neg = self.Freq2ScenePos(bw_start).y()
429
+ Yposition_pos = self.Freq2ScenePos(bw_end).y()
430
+ poly = QtGui.QPolygonF()
431
+ poly.append(QtCore.QPointF(15, Yposition_neg))
432
+ poly.append(QtCore.QPointF(20, Yposition_neg))
433
+ poly.append(QtCore.QPointF(20, Yposition_pos))
434
+ poly.append(QtCore.QPointF(15, Yposition_pos))
435
+ pen = QtGui.QPen()
436
+ brush = QtGui.QBrush(color)
437
+ currentPolygon.append(self.bandmap_scene.addPolygon(poly, pen, brush))
438
+
381
439
  def update_stations(self):
382
440
  """doc"""
383
441
  self.update_timer.setInterval(UPDATE_INTERVAL)
@@ -486,6 +544,13 @@ class MainWindow(QtWidgets.QMainWindow):
486
544
  if "login:" in data:
487
545
  self.send_command(self.callsignField.text())
488
546
  self.send_command(PREF.get("cluster_filter", ""))
547
+ self.send_command("set dx extension Name CTY State Section")
548
+ self.send_command("set dx mode " + PREF.get("cluster_mode", "OPEN"))
549
+ return
550
+ if "call:" in data:
551
+ self.send_command(self.callsignField.text())
552
+ self.send_command(PREF.get("cluster_filter", ""))
553
+ self.send_command("set dx extension Name CTY State Section")
489
554
  self.send_command("set dx mode " + PREF.get("cluster_mode", "OPEN"))
490
555
  return
491
556
  if "DX de" in data:
not1mm/data/main.ui CHANGED
@@ -6,8 +6,8 @@
6
6
  <rect>
7
7
  <x>0</x>
8
8
  <y>0</y>
9
- <width>1975</width>
10
- <height>366</height>
9
+ <width>1731</width>
10
+ <height>358</height>
11
11
  </rect>
12
12
  </property>
13
13
  <property name="sizePolicy">
@@ -645,7 +645,6 @@
645
645
  <font>
646
646
  <family>JetBrains Mono</family>
647
647
  <pointsize>20</pointsize>
648
- <weight>75</weight>
649
648
  <bold>true</bold>
650
649
  </font>
651
650
  </property>
@@ -1019,11 +1018,19 @@
1019
1018
  <rect>
1020
1019
  <x>0</x>
1021
1020
  <y>0</y>
1022
- <width>1975</width>
1023
- <height>23</height>
1021
+ <width>1731</width>
1022
+ <height>30</height>
1024
1023
  </rect>
1025
1024
  </property>
1025
+ <property name="nativeMenuBar">
1026
+ <bool>true</bool>
1027
+ </property>
1026
1028
  <widget class="QMenu" name="menuFile">
1029
+ <property name="font">
1030
+ <font>
1031
+ <family>JetBrains Mono</family>
1032
+ </font>
1033
+ </property>
1027
1034
  <property name="title">
1028
1035
  <string>File</string>
1029
1036
  </property>
@@ -156,6 +156,44 @@ class CAT:
156
156
  self.__initialize_rigctrld()
157
157
  return ""
158
158
 
159
+ def get_bw(self):
160
+ """Get current vfo bandwidth"""
161
+ if self.interface == "flrig":
162
+ return self.__getbw_flrig()
163
+ if self.interface == "rigctld":
164
+ return self.__getbw_rigctld()
165
+ return False
166
+
167
+ def __getbw_flrig(self):
168
+ """ccc"""
169
+ try:
170
+ self.online = True
171
+ return self.server.rig.get_bw()
172
+ except ConnectionRefusedError as exception:
173
+ self.online = False
174
+ logger.debug("getbw_flrig: %s", exception)
175
+ return ""
176
+
177
+ def __getbw_rigctld(self):
178
+ """ccc"""
179
+ if self.rigctrlsocket:
180
+ try:
181
+ self.online = True
182
+ self.rigctrlsocket.send(b"m\n")
183
+ mode = self.rigctrlsocket.recv(1024).decode()
184
+ mode = mode.strip().split()[1]
185
+ logger.debug("%s", mode)
186
+ return mode
187
+ except IndexError as exception:
188
+ logger.debug("%s", exception)
189
+ except socket.error as exception:
190
+ self.online = False
191
+ logger.debug("%s", exception)
192
+ self.rigctrlsocket = None
193
+ return ""
194
+ self.__initialize_rigctrld()
195
+ return ""
196
+
159
197
  def get_power(self):
160
198
  """Get power level from rig"""
161
199
  if self.interface == "flrig":
not1mm/lib/version.py CHANGED
@@ -1,2 +1,2 @@
1
1
  """It's the version"""
2
- __version__ = "23.5.6"
2
+ __version__ = "23.5.8"
not1mm/logwindow.py CHANGED
@@ -45,6 +45,11 @@ else:
45
45
  CONFIG_PATH = str(Path.home() / ".config")
46
46
  CONFIG_PATH += "/not1mm"
47
47
 
48
+ DARK_STYLESHEET = ""
49
+
50
+ with open(WORKING_PATH + "/data/Combinear.qss", encoding="utf-8") as stylefile:
51
+ DARK_STYLESHEET = stylefile.read()
52
+
48
53
  MULTICAST_PORT = 2239
49
54
  MULTICAST_GROUP = "224.1.1.1"
50
55
  INTERFACE_IP = "0.0.0.0"
@@ -92,6 +97,8 @@ class MainWindow(QtWidgets.QMainWindow):
92
97
  self._udpwatch = None
93
98
  self.udp_fifo = queue.Queue()
94
99
  self.load_pref()
100
+ if self.pref.get("dark_mode"):
101
+ self.setStyleSheet(DARK_STYLESHEET)
95
102
  self.dbname = DATA_PATH + "/" + self.pref.get("current_database", "ham.db")
96
103
  self.database = DataBase(self.dbname, WORKING_PATH)
97
104
  self.database.current_contest = self.pref.get("contest", 0)
@@ -256,6 +263,8 @@ class MainWindow(QtWidgets.QMainWindow):
256
263
  """Show edit contact dialog"""
257
264
  logger.debug("Edit: %s", uuid)
258
265
  self.edit_contact_dialog = EditContact(WORKING_PATH)
266
+ if self.pref.get("dark_mode"):
267
+ self.edit_contact_dialog.setStyleSheet(DARK_STYLESHEET)
259
268
  self.edit_contact_dialog.accepted.connect(self.save_edited_contact)
260
269
  self.contact = self.database.fetch_contact_by_uuid(uuid)
261
270
  self.edit_contact_dialog.delete_2.clicked.connect(self.delete_contact)
@@ -45,10 +45,8 @@ def interface(self):
45
45
  self.field2.show()
46
46
  self.field3.show()
47
47
  self.field4.show()
48
- label = self.field3.findChild(QtWidgets.QLabel)
49
- label.setText("SentNR")
50
- label = self.field4.findChild(QtWidgets.QLabel)
51
- label.setText("RcvNR")
48
+ self.other_label.setText("SentNR")
49
+ self.exch_label.setText("RcvNR")
52
50
 
53
51
 
54
52
  def reset_label(self):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 23.5.6
3
+ Version: 23.5.8
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
@@ -35,8 +35,7 @@ Requires-Dist: soundfile
35
35
 
36
36
  - [Not1MM](#not1mm)
37
37
  - [What and why is Not1MM](#what-and-why-is-not1mm)
38
- - [What it is not](#what-it-is-not)
39
- - [What it probably never will be](#what-it-probably-never-will-be)
38
+ - [Current state](#current-state)
40
39
  - [List of should be working contests](#list-of-should-be-working-contests)
41
40
  - [Changes of note](#changes-of-note)
42
41
  - [Installing from PyPi](#installing-from-pypi)
@@ -97,15 +96,9 @@ I personally don't. While it may be possible to get N1MM working under Wine, I h
97
96
  Something to do in my free time.
98
97
  While I'm not watching TV, Right vs Left political 'News' programs, mind numbing 'Reality' TV etc...
99
98
 
100
- ## What it is not
99
+ ## Current state
101
100
 
102
- Fully working.
103
-
104
- The current state is "**BETA**". I've used it for CQ WPX SSB and JIDX CW, and was able to work contacts and submit a cabrillo at the end. I'll add contests as/if I work them.
105
-
106
- ## What it probably never will be
107
-
108
- Feature complete. I'm only one guy, and I'm not what you'd consider to be a contester. So new contests will be sparse.
101
+ The current state is "**BETA**". I've used it for A few contests, and was able to work contacts and submit a cabrillo at the end. I'm not a "Contester". So I'll add contests as/if I work them. I'm only one guy, so if you see a bug let me know. I don't do much of any Data or RTTY operating. This is why you don't see RTTY in the list of working contests. The Lord helps those who burn people at the... I mean who help themselves. Feel free to fill in that hole with a pull request.
109
102
 
110
103
  ![main screen](https://github.com/mbridak/not1mm/raw/master/pic/main.png)
111
104
 
@@ -130,7 +123,9 @@ Feature complete. I'm only one guy, and I'm not what you'd consider to be a cont
130
123
 
131
124
  ## Changes of note
132
125
 
133
- - [23-5-6] Added AR Cluster filter options for the bandmap.
126
+ - [23-5-8] Bandmap zoom in/out now centers scale to RX Freq.
127
+ - [23-5-7] Added bandwidth marker to the bandmap.
128
+ - [23-5-6] Added AR Cluster filter options for the bandmap. Added a station ID to the multicast packets. This will prevent erratic bevahiour if 2 stations are on the same network.
134
129
  - [23-5-5] Re-wrote most of the log window code. Added ARRL Sweepstakes.
135
130
  - [23-5-4] Fixed 'Operators' line in WPX cabrillo file. Fix window title not updating if no CAT control.
136
131
  - [23-5-3] Added '#' macro.
@@ -1,7 +1,7 @@
1
1
  not1mm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- not1mm/__main__.py,sha256=4Pv8TdABAP4z7Q3Hn4a8eZYzeoYxXQ3qCJiJ81MoN-M,77957
3
- not1mm/bandmap.py,sha256=r-ibJcvPbNJer9Xu_iTnl98WA9e7xYmxcgTBuiVPuu8,18633
4
- not1mm/logwindow.py,sha256=VWB_uyi9SKafwgVRZWiq1dW_l3otDPu010pTHO8wRsQ,30050
2
+ not1mm/__main__.py,sha256=AQeowClF6O_IXSEhZipTsPJmPrvG3qXZoEFhwskqGik,79119
3
+ not1mm/bandmap.py,sha256=eRks_QCy8aRVvxXi34B5nda0lVw1ZYMZl4hWnRlN3QM,21632
4
+ not1mm/logwindow.py,sha256=etDssxhO2N6UzPcSdkPHXQR-8JJHThjvEMGC6ufkO1Q,30386
5
5
  not1mm/data/Combinear.qss,sha256=SKqM0g8GvNXay1ovgtwCw3Egt0eLfN5P3iTREInC1eE,16590
6
6
  not1mm/data/JetBrainsMono-Regular.ttf,sha256=UOHctAKY_PzCGh7zy-6f6egnCcSK0wzmF0csBqO9lDY,203952
7
7
  not1mm/data/MASTER.SCP,sha256=oqUB3Fvy40vU-ra-R3-cvTeBnZWW04Da1Et011UITbI,542666
@@ -21,7 +21,7 @@ not1mm/data/k6gte.not1mm-128.png,sha256=vWqt3Cgsaguj-BBiIoSJApzzhisPxldM8HZQbZ05
21
21
  not1mm/data/k6gte.not1mm-32.png,sha256=yucSwzlmqv3NegdWUvPvZzSgP7G22Ky3se8TWRXvzfI,1108
22
22
  not1mm/data/k6gte.not1mm-64.png,sha256=1KQvk0WBckUds79BvIFUt-KdTwQKKvTz6hiJu8MiT68,2152
23
23
  not1mm/data/logwindow.ui,sha256=_-wobHhIjALzCswyXIrqNadnLdc88eay1GNF23a-Qh0,970
24
- not1mm/data/main.ui,sha256=jWHKzooyCb1l7lC64k-Wi-8TGA-cMNvJoYtubjFDV48,43767
24
+ not1mm/data/main.ui,sha256=MUty-VU-5FMvXAmBEkzAfQR9Tn6yhjZ1L7tFaAoDjhw,43909
25
25
  not1mm/data/new_contest.ui,sha256=_w_tLQ3FZ-sqohkTX4OxbWv7EmEb0OG81_3O9pn3maw,17963
26
26
  not1mm/data/opon.ui,sha256=6r9_6ORGfNqwOnpzQjaJ1tWP_81amuXqLYlx1hHgdME,2018
27
27
  not1mm/data/pickcontest.ui,sha256=_9JFiJw4l-bRRgNDtVg1DpxreylYd_UqEq0wfcr9gJc,1600
@@ -78,7 +78,7 @@ not1mm/data/phonetics/yourcall.wav,sha256=4kheHJmCiRDL2kjhlgXQ8_u_eEMgKxiNGu5UBk
78
78
  not1mm/data/phonetics/z.wav,sha256=arafCi7fwmBLdVDI-PRyaL4U-03PIQDhffwY5noJ_2c,51768
79
79
  not1mm/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
80
  not1mm/lib/about.py,sha256=O9i8ypv2W9KZkPAp2bcRI0J5RgPE5R1vMfU8ZGlok_E,379
81
- not1mm/lib/cat_interface.py,sha256=u7sJy8b1xaF-6DhCwATuAEbpRRFyQbx_tYHI4kNzGG4,12468
81
+ not1mm/lib/cat_interface.py,sha256=EWw22HAe-zEGNPL-hmeCHplgg7ID9kSaeCgn6ftdxrI,13705
82
82
  not1mm/lib/cwinterface.py,sha256=77I7RFtrIljuuWna3mjkjxaPSM1kGaPV4duPkoiT8wA,1772
83
83
  not1mm/lib/database.py,sha256=KD8KuEsPWJBq44S1UqlNIgmXKF94NrWqH-cKGfcl9ow,34193
84
84
  not1mm/lib/edit_contact.py,sha256=YwuX-BuIa7AuPtLRENs4jTzxOrtk6MCxZj3BR_bDPW8,357
@@ -92,7 +92,7 @@ not1mm/lib/n1mm.py,sha256=bK5d21Yfn6xRpQcu2RdpL2zR8lOlRWOadD6Ai4_lFdc,4434
92
92
  not1mm/lib/new_contest.py,sha256=mHKNCS3iKOKN-bT9d8ZK3JemThOZFQ0ikfUSS0-ZTpY,354
93
93
  not1mm/lib/select_contest.py,sha256=XQdRUkPAIHIMVsilm82M54b_v9yWpYrZ1nfInJrtZoo,363
94
94
  not1mm/lib/settings.py,sha256=InjbBzXikT9UqfWP_Tl35aGFaRM4URmgKeSUxXHH3VQ,6188
95
- not1mm/lib/version.py,sha256=1tdSxx90JIGd6LQbOUEmGC_nPPyvDEQco_-lgYiqXtQ,46
95
+ not1mm/lib/version.py,sha256=keVaD-q9RJuqQFk4WZAu2AeL6fUX5J_WFumqvPTy8Kk,46
96
96
  not1mm/plugins/10_10_fall_cw.py,sha256=EJ2CPLQUb_SNkbXJw8hGk-M74IDxjQZDl3imiebxYa0,13746
97
97
  not1mm/plugins/10_10_spring_cw.py,sha256=NqsV2cWsMVuqBM98SLhacladI_gFiOUnlaI7jPbiZoQ,13752
98
98
  not1mm/plugins/10_10_summer_phone.py,sha256=9sZdeon3pCIIfmKOXIt5kUIejmb_L0xb8CYx9bd8llk,13759
@@ -104,7 +104,7 @@ not1mm/plugins/arrl_field_day.py,sha256=oTSyj-Xrbe9Gpk1SgAZh_mN9AnlmDQsz9RjSmOLO
104
104
  not1mm/plugins/arrl_rtty_ru.py,sha256=ehbrcbEGPbutduInyQXl_eqCWA61sekrTkvEXIiFlUA,2860
105
105
  not1mm/plugins/arrl_ss_cw.py,sha256=T1ZF0wp7Uz8ImykSMBMkTiK22VyfpQUAAs6fLesz4fY,15941
106
106
  not1mm/plugins/arrl_ss_phone.py,sha256=HfCzHQlRK7naejVJ3eK_RdQDtxT9LuHcRLj1PYSqWd0,15946
107
- not1mm/plugins/cq_wpx_cw.py,sha256=mC5grCYt6WtYzXcWvXpngRTom13KR5IzjYwX8UfCNRA,15022
107
+ not1mm/plugins/cq_wpx_cw.py,sha256=Vh0Uiwh2mKy14qtYQsEYuHafD6Y5iRoi-s01YqbbjIY,14939
108
108
  not1mm/plugins/cq_wpx_ssb.py,sha256=Wj14ByQMqQdLzU7VRm8yQWGfMPMW9yBl25jGvpvRKp0,15026
109
109
  not1mm/plugins/cq_ww_cw.py,sha256=VeybmlippQBMpPf0QXRvwjr9TdJRN-xSd74o8EUzt5I,13895
110
110
  not1mm/plugins/cq_ww_ssb.py,sha256=XdsbsPPuc8OgXOCcyJd8knQtjwiJ8HfYz9hsziRka_o,13899
@@ -115,9 +115,9 @@ not1mm/plugins/jidx_ph.py,sha256=nM5iPKowCm7jOszPuAmNXB9gAC7VNtZ4N6g9MAdYcdk,138
115
115
  not1mm/plugins/winter_field_day.py,sha256=22mWjH4SwARTEEqb4ZUJSBk_gOG4pvvmGgTQuoSR7As,3121
116
116
  not1mm/testing/test.py,sha256=XSwHWvWqaXznmZvBgwhoVTugEz7Gv5Ek6f4ol5cefEM,565
117
117
  testing/test.py,sha256=0jvT_UcvgcAGwkJNnB9PBDmQhLHQl85NQyT5f9GKBuQ,2248
118
- not1mm-23.5.6.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
119
- not1mm-23.5.6.dist-info/METADATA,sha256=dj5TQUJHw1N8a-2wThiyK_bljKevNCYhRhZyWSOPhkM,23883
120
- not1mm-23.5.6.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
121
- not1mm-23.5.6.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
122
- not1mm-23.5.6.dist-info/top_level.txt,sha256=-NwUrh4k1kzpOvf720xYWSTKSlr-zNSIz3D_eplrxLs,15
123
- not1mm-23.5.6.dist-info/RECORD,,
118
+ not1mm-23.5.8.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
119
+ not1mm-23.5.8.dist-info/METADATA,sha256=JQFdkQV_XtCbhaHm5549hx7XYu0HHaWQy__6WPS4Opk,24177
120
+ not1mm-23.5.8.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
121
+ not1mm-23.5.8.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
122
+ not1mm-23.5.8.dist-info/top_level.txt,sha256=-NwUrh4k1kzpOvf720xYWSTKSlr-zNSIz3D_eplrxLs,15
123
+ not1mm-23.5.8.dist-info/RECORD,,