not1mm 24.4.25.1__py3-none-any.whl → 24.4.30__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
@@ -38,7 +38,7 @@ except OSError as exception:
38
38
  import soundfile as sf
39
39
  from PyQt6 import QtCore, QtGui, QtWidgets, uic
40
40
  from PyQt6.QtCore import QDir, Qt, QThread
41
- from PyQt6.QtGui import QFontDatabase, QColorConstants
41
+ from PyQt6.QtGui import QFontDatabase, QColorConstants, QPalette, QColor
42
42
  from PyQt6.QtWidgets import QFileDialog
43
43
 
44
44
  from not1mm.lib.about import About
@@ -150,10 +150,11 @@ class MainWindow(QtWidgets.QMainWindow):
150
150
  "cluster_port": 7373,
151
151
  "cluster_filter": "Set DX Filter SpotterCont=NA",
152
152
  "cluster_mode": "OPEN",
153
- "logwindow": True,
154
- "bandmapwindow": True,
155
- "checkwindow": True,
153
+ "logwindow": False,
154
+ "bandmapwindow": False,
155
+ "checkwindow": False,
156
156
  "vfowindow": False,
157
+ "darkmode": True,
157
158
  }
158
159
  appstarted = False
159
160
  contact = {}
@@ -566,76 +567,50 @@ class MainWindow(QtWidgets.QMainWindow):
566
567
  """
567
568
  print(f"{result=}")
568
569
 
569
- def setDarkMode(self, dark):
570
- """testing"""
570
+ def setDarkMode(self, setdarkmode=False) -> None:
571
+ """Forces a darkmode palette."""
571
572
 
572
- logger.debug(f"Dark mode set to: {dark}")
573
+ logger.debug(f"Dark mode set to: {setdarkmode}")
573
574
 
574
575
  cmd = {}
575
576
  cmd["cmd"] = "DARKMODE"
576
- cmd["state"] = dark
577
+ cmd["state"] = setdarkmode
577
578
  cmd["station"] = platform.node()
578
579
  self.multicast_interface.send_as_json(cmd)
579
580
 
580
- if dark:
581
- darkPalette = QtGui.QPalette()
582
- darkColor = QtGui.QColor(56, 56, 56)
583
- disabledColor = QtGui.QColor(127, 127, 127)
584
- darkPalette.setColor(QtGui.QPalette.ColorRole.Window, darkColor)
581
+ if setdarkmode:
582
+ darkPalette = QPalette()
583
+ darkColor = QColor(56, 56, 56)
584
+ disabledColor = QColor(127, 127, 127)
585
+ darkPalette.setColor(QPalette.ColorRole.Window, darkColor)
586
+ darkPalette.setColor(QPalette.ColorRole.WindowText, QColorConstants.White)
587
+ darkPalette.setColor(QPalette.ColorRole.Base, QColor(45, 45, 45))
588
+ darkPalette.setColor(QPalette.ColorRole.AlternateBase, darkColor)
589
+ darkPalette.setColor(QPalette.ColorRole.Text, QColorConstants.White)
590
+ darkPalette.setColor(QPalette.ColorRole.Button, darkColor)
591
+ darkPalette.setColor(QPalette.ColorRole.ButtonText, QColorConstants.White)
592
+ darkPalette.setColor(QPalette.ColorRole.BrightText, QColorConstants.Red)
593
+ darkPalette.setColor(QPalette.ColorRole.Link, QColor(42, 130, 218))
594
+ darkPalette.setColor(QPalette.ColorRole.Highlight, QColor(42, 130, 218))
585
595
  darkPalette.setColor(
586
- QtGui.QPalette.ColorRole.WindowText, QColorConstants.White
596
+ QPalette.ColorRole.HighlightedText, QColorConstants.Black
587
597
  )
588
598
  darkPalette.setColor(
589
- QtGui.QPalette.ColorRole.Base, QtGui.QColor(45, 45, 45)
590
- )
591
- darkPalette.setColor(QtGui.QPalette.ColorRole.AlternateBase, darkColor)
592
- darkPalette.setColor(QtGui.QPalette.ColorRole.Text, QColorConstants.White)
593
- darkPalette.setColor(
594
- QtGui.QPalette.ColorGroup.Disabled,
595
- QtGui.QPalette.ColorRole.Text,
599
+ QPalette.ColorGroup.Disabled,
600
+ QPalette.ColorRole.ButtonText,
596
601
  disabledColor,
597
602
  )
598
- darkPalette.setColor(QtGui.QPalette.ColorRole.Button, darkColor)
599
- darkPalette.setColor(
600
- QtGui.QPalette.ColorRole.ButtonText, QColorConstants.White
601
- )
602
603
  darkPalette.setColor(
603
- QtGui.QPalette.ColorGroup.Disabled,
604
- QtGui.QPalette.ColorRole.ButtonText,
604
+ QPalette.ColorGroup.Disabled,
605
+ QPalette.ColorRole.HighlightedText,
605
606
  disabledColor,
606
607
  )
607
608
  darkPalette.setColor(
608
- QtGui.QPalette.ColorRole.BrightText, QColorConstants.Red
609
- )
610
- darkPalette.setColor(
611
- QtGui.QPalette.ColorRole.Link, QtGui.QColor(42, 130, 218)
612
- )
613
- darkPalette.setColor(
614
- QtGui.QPalette.ColorRole.Highlight, QtGui.QColor(42, 130, 218)
615
- )
616
- darkPalette.setColor(
617
- QtGui.QPalette.ColorRole.HighlightedText, QColorConstants.Black
618
- )
619
- darkPalette.setColor(
620
- QtGui.QPalette.ColorGroup.Disabled,
621
- QtGui.QPalette.ColorRole.HighlightedText,
609
+ QPalette.ColorGroup.Disabled,
610
+ QPalette.ColorRole.Text,
622
611
  disabledColor,
623
612
  )
624
- dark_button_style = (
625
- "QPushButton {"
626
- "background-color: rgb(56,56,56);"
627
- "color: white;"
628
- "border-style: outset;"
629
- "border-width: 2px;"
630
- "border-radius: 5px;"
631
- "border-color: rgb(45,45,45);"
632
- "padding: 6px;"
633
- "}"
634
- "QPushButton:pressed {"
635
- "background-color: rgb(127, 127, 127);"
636
- "border-style: inset;"
637
- "}"
638
- )
613
+
639
614
  self.current_palette = darkPalette
640
615
  self.setPalette(darkPalette)
641
616
  self.text_color = QColorConstants.White
@@ -650,18 +625,6 @@ class MainWindow(QtWidgets.QMainWindow):
650
625
  self.other_1.setPalette(darkPalette)
651
626
  self.other_2.setPalette(darkPalette)
652
627
  self.cw_entry.setPalette(darkPalette)
653
- self.F1.setStyleSheet(dark_button_style)
654
- self.F2.setStyleSheet(dark_button_style)
655
- self.F3.setStyleSheet(dark_button_style)
656
- self.F4.setStyleSheet(dark_button_style)
657
- self.F5.setStyleSheet(dark_button_style)
658
- self.F6.setStyleSheet(dark_button_style)
659
- self.F7.setStyleSheet(dark_button_style)
660
- self.F8.setStyleSheet(dark_button_style)
661
- self.F9.setStyleSheet(dark_button_style)
662
- self.F10.setStyleSheet(dark_button_style)
663
- self.F11.setStyleSheet(dark_button_style)
664
- self.F12.setStyleSheet(dark_button_style)
665
628
  else:
666
629
  palette = self.style().standardPalette()
667
630
  self.current_palette = palette
@@ -678,33 +641,6 @@ class MainWindow(QtWidgets.QMainWindow):
678
641
  self.other_2.setPalette(palette)
679
642
  self.cw_entry.setPalette(palette)
680
643
  self.text_color = QColorConstants.Black
681
- light_button_style = (
682
- "QPushButton {"
683
- "background-color: rgb(245,245,245);"
684
- "color: rgb(52,52,52);"
685
- "border-style: outset;"
686
- "border-width: 2px;"
687
- "border-radius: 5px;"
688
- "border-color: rgb(150,150,150);"
689
- "padding: 6px;"
690
- "}"
691
- "QPushButton:pressed {"
692
- "background-color: rgb(127, 127, 127);"
693
- "border-style: inset;"
694
- "}"
695
- )
696
- self.F1.setStyleSheet(light_button_style)
697
- self.F2.setStyleSheet(light_button_style)
698
- self.F3.setStyleSheet(light_button_style)
699
- self.F4.setStyleSheet(light_button_style)
700
- self.F5.setStyleSheet(light_button_style)
701
- self.F6.setStyleSheet(light_button_style)
702
- self.F7.setStyleSheet(light_button_style)
703
- self.F8.setStyleSheet(light_button_style)
704
- self.F9.setStyleSheet(light_button_style)
705
- self.F10.setStyleSheet(light_button_style)
706
- self.F11.setStyleSheet(light_button_style)
707
- self.F12.setStyleSheet(light_button_style)
708
644
 
709
645
  def set_radio_icon(self, state: int) -> None:
710
646
  """
@@ -769,7 +705,9 @@ class MainWindow(QtWidgets.QMainWindow):
769
705
  # self.send_backspace()
770
706
  self.oldtext = newtext
771
707
  return
772
- if self.cw is not None:
708
+ if self.pref.get("cwtype") == 3 and self.rig_control is not None:
709
+ self.rig_control.sendcw(newtext[len(self.oldtext) :])
710
+ elif self.cw is not None:
773
711
  self.cw.sendcw(newtext[len(self.oldtext) :])
774
712
  self.oldtext = newtext
775
713
 
@@ -2374,6 +2312,9 @@ class MainWindow(QtWidgets.QMainWindow):
2374
2312
  self.voice_string(self.process_macro(function_key.toolTip()))
2375
2313
  return
2376
2314
  if self.cw:
2315
+ if self.pref.get("cwtype") == 3 and self.rig_control is not None:
2316
+ self.rig_control.sendcw(self.process_macro(function_key.toolTip()))
2317
+ return
2377
2318
  self.cw.sendcw(self.process_macro(function_key.toolTip()))
2378
2319
 
2379
2320
  def run_sp_buttons_clicked(self) -> None:
not1mm/bandmap.py CHANGED
@@ -17,7 +17,7 @@ from decimal import Decimal
17
17
  from json import loads
18
18
 
19
19
  from PyQt6 import QtCore, QtGui, QtWidgets, uic, QtNetwork
20
- from PyQt6.QtGui import QColorConstants
20
+ from PyQt6.QtGui import QColorConstants, QPalette, QColor
21
21
  from PyQt6.QtWidgets import QDockWidget
22
22
 
23
23
  import not1mm.fsutils as fsutils
@@ -319,7 +319,7 @@ class BandMapWindow(QDockWidget):
319
319
  bandwidth_mark = []
320
320
  worked_list = {}
321
321
  multicast_interface = None
322
- text_color = QtGui.QColor(45, 45, 45)
322
+ text_color = QColor(45, 45, 45)
323
323
 
324
324
  def __init__(self):
325
325
  super().__init__()
@@ -366,101 +366,50 @@ class BandMapWindow(QDockWidget):
366
366
  return loads(file_descriptor.read())
367
367
 
368
368
  def setDarkMode(self, setdarkmode=False):
369
- """testing"""
370
-
369
+ """Set dark mode"""
371
370
  if setdarkmode:
372
- darkPalette = QtGui.QPalette()
373
- darkColor = QtGui.QColor(56, 56, 56)
371
+ darkPalette = QPalette()
372
+ darkColor = QColor(56, 56, 56)
374
373
  self.text_color = QColorConstants.White
375
- disabledColor = QtGui.QColor(127, 127, 127)
376
- darkPalette.setColor(QtGui.QPalette.ColorRole.Window, darkColor)
377
- darkPalette.setColor(
378
- QtGui.QPalette.ColorRole.WindowText, QColorConstants.White
379
- )
374
+ disabledColor = QColor(127, 127, 127)
375
+ darkPalette.setColor(QPalette.ColorRole.Window, darkColor)
376
+ darkPalette.setColor(QPalette.ColorRole.WindowText, QColorConstants.White)
377
+ darkPalette.setColor(QPalette.ColorRole.Base, QColor(45, 45, 45))
378
+ darkPalette.setColor(QPalette.ColorRole.AlternateBase, darkColor)
379
+ darkPalette.setColor(QPalette.ColorRole.Text, QColorConstants.White)
380
+ darkPalette.setColor(QPalette.ColorRole.Button, darkColor)
381
+ darkPalette.setColor(QPalette.ColorRole.ButtonText, QColorConstants.White)
382
+ darkPalette.setColor(QPalette.ColorRole.BrightText, QColorConstants.Red)
383
+ darkPalette.setColor(QPalette.ColorRole.Link, QColor(42, 130, 218))
384
+ darkPalette.setColor(QPalette.ColorRole.Highlight, QColor(42, 130, 218))
380
385
  darkPalette.setColor(
381
- QtGui.QPalette.ColorRole.Base, QtGui.QColor(45, 45, 45)
386
+ QPalette.ColorRole.HighlightedText, QColorConstants.Black
382
387
  )
383
- darkPalette.setColor(QtGui.QPalette.ColorRole.AlternateBase, darkColor)
384
- darkPalette.setColor(QtGui.QPalette.ColorRole.Text, QColorConstants.White)
385
388
  darkPalette.setColor(
386
- QtGui.QPalette.ColorGroup.Disabled,
387
- QtGui.QPalette.ColorRole.Text,
389
+ QPalette.ColorGroup.Disabled,
390
+ QPalette.ColorRole.ButtonText,
388
391
  disabledColor,
389
392
  )
390
- darkPalette.setColor(QtGui.QPalette.ColorRole.Button, darkColor)
391
- darkPalette.setColor(
392
- QtGui.QPalette.ColorRole.ButtonText, QColorConstants.White
393
- )
394
393
  darkPalette.setColor(
395
- QtGui.QPalette.ColorGroup.Disabled,
396
- QtGui.QPalette.ColorRole.ButtonText,
394
+ QPalette.ColorGroup.Disabled,
395
+ QPalette.ColorRole.HighlightedText,
397
396
  disabledColor,
398
397
  )
399
398
  darkPalette.setColor(
400
- QtGui.QPalette.ColorRole.BrightText, QColorConstants.Red
401
- )
402
- darkPalette.setColor(
403
- QtGui.QPalette.ColorRole.Link, QtGui.QColor(42, 130, 218)
404
- )
405
- darkPalette.setColor(
406
- QtGui.QPalette.ColorRole.Highlight, QtGui.QColor(42, 130, 218)
407
- )
408
- darkPalette.setColor(
409
- QtGui.QPalette.ColorRole.HighlightedText, QColorConstants.Black
410
- )
411
- darkPalette.setColor(
412
- QtGui.QPalette.ColorGroup.Disabled,
413
- QtGui.QPalette.ColorRole.HighlightedText,
399
+ QPalette.ColorGroup.Disabled,
400
+ QPalette.ColorRole.Text,
414
401
  disabledColor,
415
402
  )
416
403
 
417
404
  self.setPalette(darkPalette)
418
405
  self.callsignField.setPalette(darkPalette)
419
406
  self.update()
420
- dark_button_style = (
421
- "QPushButton {"
422
- "background-color: rgb(56,56,56);"
423
- "color: white;"
424
- "border-style: outset;"
425
- "border-width: 2px;"
426
- "border-radius: 5px;"
427
- "border-color: rgb(45,45,45);"
428
- "padding: 6px;"
429
- "}"
430
- "QPushButton:pressed {"
431
- "background-color: rgb(127, 127, 127);"
432
- "border-style: inset;"
433
- "}"
434
- )
435
- self.connectButton.setStyleSheet(dark_button_style)
436
- self.clearButton.setStyleSheet(dark_button_style)
437
- self.zoominButton.setStyleSheet(dark_button_style)
438
- self.zoomoutButton.setStyleSheet(dark_button_style)
439
407
  else:
440
408
  palette = self.style().standardPalette()
441
409
  self.setPalette(palette)
442
410
  self.callsignField.setPalette(palette)
443
411
  self.text_color = QColorConstants.Black
444
412
  self.update()
445
- light_button_style = (
446
- "QPushButton {"
447
- "background-color: rgb(245,245,245);"
448
- "color: rgb(52,52,52);"
449
- "border-style: outset;"
450
- "border-width: 2px;"
451
- "border-radius: 5px;"
452
- "border-color: rgb(150,150,150);"
453
- "padding: 6px;"
454
- "}"
455
- "QPushButton:pressed {"
456
- "background-color: rgb(127, 127, 127);"
457
- "border-style: inset;"
458
- "}"
459
- )
460
- self.connectButton.setStyleSheet(light_button_style)
461
- self.clearButton.setStyleSheet(light_button_style)
462
- self.zoominButton.setStyleSheet(light_button_style)
463
- self.zoomoutButton.setStyleSheet(light_button_style)
464
413
 
465
414
  def connect(self):
466
415
  """Connect to the cluster."""
@@ -686,11 +635,9 @@ class BandMapWindow(QDockWidget):
686
635
  self.clear_freq_mark(self.bandwidth_mark)
687
636
  self.clear_freq_mark(self.rxMark)
688
637
  self.draw_bandwidth(
689
- self.rx_freq, step, QtGui.QColor(30, 30, 180, 180), self.bandwidth_mark
690
- )
691
- self.drawfreqmark(
692
- self.rx_freq, step, QtGui.QColor(30, 180, 30, 180), self.rxMark
638
+ self.rx_freq, step, QColor(30, 30, 180, 180), self.bandwidth_mark
693
639
  )
640
+ self.drawfreqmark(self.rx_freq, step, QColor(30, 180, 30, 180), self.rxMark)
694
641
 
695
642
  def Freq2ScenePos(self, freq: float):
696
643
  """doc"""
@@ -751,7 +698,7 @@ class BandMapWindow(QDockWidget):
751
698
  if freq < self.currentBand.start or freq > self.currentBand.end:
752
699
  return
753
700
  if freq and self.bandwidth:
754
- # color = QtGui.QColor(30, 30, 180)
701
+ # color = QColor(30, 30, 180)
755
702
  bw_start = Decimal(str(freq)) - (
756
703
  (Decimal(str(self.bandwidth)) / 2) / 1000000
757
704
  )
@@ -786,11 +733,11 @@ class BandMapWindow(QDockWidget):
786
733
  for items in result:
787
734
  pen_color = self.text_color
788
735
  if items.get("comment") == "MARKED":
789
- pen_color = QtGui.QColor(47, 47, 255)
736
+ pen_color = QColor(47, 47, 255)
790
737
  if items.get("callsign") in self.worked_list:
791
738
  call_bandlist = self.worked_list.get(items.get("callsign"))
792
739
  if self.currentBand.altname in call_bandlist:
793
- pen_color = QtGui.QColor(255, 47, 47)
740
+ pen_color = QColor(255, 47, 47)
794
741
  freq_y = (
795
742
  (items.get("freq") - self.currentBand.start) / step
796
743
  ) * PIXELSPERSTEP
not1mm/checkwindow.py CHANGED
@@ -12,9 +12,9 @@ import queue
12
12
  from json import loads
13
13
  import Levenshtein
14
14
 
15
- from PyQt6 import QtGui, uic
15
+ from PyQt6 import uic
16
16
  from PyQt6.QtWidgets import QLabel, QVBoxLayout, QWidget, QDockWidget
17
- from PyQt6.QtGui import QMouseEvent, QColorConstants
17
+ from PyQt6.QtGui import QMouseEvent, QColorConstants, QPalette, QColor
18
18
 
19
19
  import not1mm.fsutils as fsutils
20
20
  from not1mm.lib.database import DataBase
@@ -70,51 +70,39 @@ class CheckWindow(QDockWidget):
70
70
  cmd["call"] = item
71
71
  self.multicast_interface.send_as_json(cmd)
72
72
 
73
- def setDarkMode(self, dark: bool):
73
+ def setDarkMode(self, dark: bool) -> None:
74
74
  """Forces a darkmode palette."""
75
75
 
76
76
  if dark:
77
- darkPalette = QtGui.QPalette()
78
- darkColor = QtGui.QColor(56, 56, 56)
79
- disabledColor = QtGui.QColor(127, 127, 127)
80
- darkPalette.setColor(QtGui.QPalette.ColorRole.Window, darkColor)
77
+ darkPalette = QPalette()
78
+ darkColor = QColor(56, 56, 56)
79
+ disabledColor = QColor(127, 127, 127)
80
+ darkPalette.setColor(QPalette.ColorRole.Window, darkColor)
81
+ darkPalette.setColor(QPalette.ColorRole.WindowText, QColorConstants.White)
82
+ darkPalette.setColor(QPalette.ColorRole.Base, QColor(45, 45, 45))
83
+ darkPalette.setColor(QPalette.ColorRole.AlternateBase, darkColor)
84
+ darkPalette.setColor(QPalette.ColorRole.Text, QColorConstants.White)
85
+ darkPalette.setColor(QPalette.ColorRole.Button, darkColor)
86
+ darkPalette.setColor(QPalette.ColorRole.ButtonText, QColorConstants.White)
87
+ darkPalette.setColor(QPalette.ColorRole.BrightText, QColorConstants.Red)
88
+ darkPalette.setColor(QPalette.ColorRole.Link, QColor(42, 130, 218))
89
+ darkPalette.setColor(QPalette.ColorRole.Highlight, QColor(42, 130, 218))
81
90
  darkPalette.setColor(
82
- QtGui.QPalette.ColorRole.WindowText, QColorConstants.White
91
+ QPalette.ColorRole.HighlightedText, QColorConstants.Black
83
92
  )
84
93
  darkPalette.setColor(
85
- QtGui.QPalette.ColorRole.Base, QtGui.QColor(45, 45, 45)
86
- )
87
- darkPalette.setColor(QtGui.QPalette.ColorRole.AlternateBase, darkColor)
88
- darkPalette.setColor(QtGui.QPalette.ColorRole.Text, QColorConstants.White)
89
- darkPalette.setColor(
90
- QtGui.QPalette.ColorGroup.Disabled,
91
- QtGui.QPalette.ColorRole.Text,
94
+ QPalette.ColorGroup.Disabled,
95
+ QPalette.ColorRole.ButtonText,
92
96
  disabledColor,
93
97
  )
94
- darkPalette.setColor(QtGui.QPalette.ColorRole.Button, darkColor)
95
- darkPalette.setColor(
96
- QtGui.QPalette.ColorRole.ButtonText, QColorConstants.White
97
- )
98
98
  darkPalette.setColor(
99
- QtGui.QPalette.ColorGroup.Disabled,
100
- QtGui.QPalette.ColorRole.ButtonText,
99
+ QPalette.ColorGroup.Disabled,
100
+ QPalette.ColorRole.HighlightedText,
101
101
  disabledColor,
102
102
  )
103
103
  darkPalette.setColor(
104
- QtGui.QPalette.ColorRole.BrightText, QColorConstants.Red
105
- )
106
- darkPalette.setColor(
107
- QtGui.QPalette.ColorRole.Link, QtGui.QColor(42, 130, 218)
108
- )
109
- darkPalette.setColor(
110
- QtGui.QPalette.ColorRole.Highlight, QtGui.QColor(42, 130, 218)
111
- )
112
- darkPalette.setColor(
113
- QtGui.QPalette.ColorRole.HighlightedText, QColorConstants.Black
114
- )
115
- darkPalette.setColor(
116
- QtGui.QPalette.ColorGroup.Disabled,
117
- QtGui.QPalette.ColorRole.HighlightedText,
104
+ QPalette.ColorGroup.Disabled,
105
+ QPalette.ColorRole.Text,
118
106
  disabledColor,
119
107
  )
120
108
 
@@ -726,7 +726,7 @@
726
726
  </widget>
727
727
  </item>
728
728
  <item row="2" column="3" alignment="Qt::AlignHCenter">
729
- <widget class="QRadioButton" name="radioButton_5">
729
+ <widget class="QRadioButton" name="usecwviacat_radioButton">
730
730
  <property name="font">
731
731
  <font>
732
732
  <family>JetBrains Mono</family>
@@ -735,13 +735,13 @@
735
735
  </font>
736
736
  </property>
737
737
  <property name="accessibleName">
738
- <string>none</string>
738
+ <string>CAT</string>
739
739
  </property>
740
740
  <property name="accessibleDescription">
741
- <string>none</string>
741
+ <string>use cat for c w</string>
742
742
  </property>
743
743
  <property name="text">
744
- <string>None</string>
744
+ <string>CAT</string>
745
745
  </property>
746
746
  </widget>
747
747
  </item>
@@ -1604,7 +1604,7 @@
1604
1604
  <tabstop>rigcontrolport_field</tabstop>
1605
1605
  <tabstop>cwport_field</tabstop>
1606
1606
  <tabstop>usepywinkeyer_radioButton</tabstop>
1607
- <tabstop>radioButton_5</tabstop>
1607
+ <tabstop>usecwviacat_radioButton</tabstop>
1608
1608
  <tabstop>cwip_field</tabstop>
1609
1609
  <tabstop>usecwdaemon_radioButton</tabstop>
1610
1610
  <tabstop>connect_to_server</tabstop>
@@ -90,6 +90,34 @@ class CAT:
90
90
  if self.interface == "rigctld":
91
91
  self.__initialize_rigctrld()
92
92
 
93
+ def sendcw(self, texttosend):
94
+ """..."""
95
+ logger.debug(f"{texttosend=} {self.interface=}")
96
+ if self.interface == "flrig":
97
+ ...
98
+ return
99
+ if self.interface == "rigctld":
100
+ self.sendcwrigctl(texttosend)
101
+
102
+ def sendcwrigctl(self, texttosend):
103
+ """..."""
104
+ if self.rigctrlsocket:
105
+ try:
106
+ self.online = True
107
+ self.rigctrlsocket.send(bytes(f"b{texttosend}\n", "utf-8"))
108
+ _ = self.rigctrlsocket.recv(1024).decode().strip()
109
+ return True
110
+ except socket.error as exception:
111
+ self.online = False
112
+ logger.debug("setvfo_rigctld: %s", f"{exception}")
113
+ self.rigctrlsocket = None
114
+ return False
115
+ self.__initialize_rigctrld()
116
+ return False
117
+
118
+ def sendcwxmlrpc(self, texttosend):
119
+ """..."""
120
+
93
121
  def get_vfo(self) -> str:
94
122
  """Poll the radio for current vfo using the interface"""
95
123
  vfo = ""
not1mm/lib/cwinterface.py CHANGED
@@ -15,10 +15,17 @@ logger = logging.getLogger("cwinterface")
15
15
 
16
16
 
17
17
  class CW:
18
- """An interface to cwdaemon and PyWinkeyerSerial"""
18
+ """
19
+
20
+ An interface to cwdaemon and PyWinkeyerSerial
21
+
22
+ servertype: int 1=cwdaemon, 2=pywinkeyer, 3=rigctld
23
+
24
+ """
19
25
 
20
26
  def __init__(self, servertype: int, host: str, port: int) -> None:
21
27
  self.servertype = servertype
28
+ self.cat = None
22
29
  self.host = host
23
30
  self.port = port
24
31
  self.speed = 20
@@ -42,35 +49,40 @@ class CW:
42
49
 
43
50
  def sendcw(self, texttosend):
44
51
  """sends cw to k1el"""
45
- logger.info("sendcw: %s", texttosend)
52
+ logger.debug(f"{texttosend=} {self.servertype=}")
46
53
  if self.servertype == 2:
47
54
  self._sendcw_xmlrpc(texttosend)
48
55
  if self.servertype == 1:
49
56
  self._sendcw_udp(texttosend)
57
+ if self.servertype == 3 and self.cw is not None:
58
+ self._sendcwcat(texttosend)
50
59
 
51
60
  def _sendcw_xmlrpc(self, texttosend):
52
61
  """sends cw to xmlrpc"""
53
- logger.info("xmlrpc: %s", texttosend)
62
+ logger.debug("xmlrpc: %s", texttosend)
54
63
  with ServerProxy(f"http://{self.host}:{self.port}") as proxy:
55
64
  try:
56
65
  proxy.k1elsendstring(texttosend)
57
66
  except Error as exception:
58
- logger.info(
67
+ logger.debug(
59
68
  "http://%s:%s, xmlrpc error: %s", self.host, self.port, exception
60
69
  )
61
70
  except ConnectionRefusedError:
62
- logger.info(
71
+ logger.debug(
63
72
  "http://%s:%s, xmlrpc Connection Refused", self.host, self.port
64
73
  )
65
74
 
66
75
  def _sendcw_udp(self, texttosend):
67
76
  """send cw to udp port"""
68
- logger.info("UDP: %s", texttosend)
77
+ logger.debug("UDP: %s", texttosend)
69
78
  server_address_port = (self.host, self.port)
70
79
  # bufferSize = 1024
71
80
  udp_client_socket = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM)
72
81
  udp_client_socket.sendto(bytes(texttosend, "utf-8"), server_address_port)
73
82
 
83
+ def _sendcwcat(self, texttosend):
84
+ """..."""
85
+
74
86
  def set_winkeyer_speed(self, speed):
75
87
  """doc"""
76
88
  with ServerProxy(f"http://{self.host}:{self.port}") as proxy:
not1mm/lib/settings.py CHANGED
@@ -58,6 +58,9 @@ class Settings(QtWidgets.QDialog):
58
58
  self.usepywinkeyer_radioButton.setChecked(
59
59
  bool(self.preference.get("cwtype") == 2)
60
60
  )
61
+ self.usecwviacat_radioButton.setChecked(
62
+ bool(self.preference.get("cwtype") == 3)
63
+ )
61
64
  self.connect_to_server.setChecked(bool(self.preference.get("useserver")))
62
65
  self.multicast_group.setText(str(self.preference.get("multicast_group", "")))
63
66
  self.multicast_port.setText(str(self.preference.get("multicast_port", "")))
@@ -131,8 +134,10 @@ class Settings(QtWidgets.QDialog):
131
134
  self.preference["cwtype"] = 0
132
135
  if self.usecwdaemon_radioButton.isChecked():
133
136
  self.preference["cwtype"] = 1
134
- if self.usepywinkeyer_radioButton.isChecked():
137
+ elif self.usepywinkeyer_radioButton.isChecked():
135
138
  self.preference["cwtype"] = 2
139
+ elif self.usecwviacat_radioButton.isChecked():
140
+ self.preference["cwtype"] = 3
136
141
  self.preference["useserver"] = self.connect_to_server.isChecked()
137
142
  self.preference["multicast_group"] = self.multicast_group.text()
138
143
  self.preference["multicast_port"] = self.multicast_port.text()
not1mm/lib/version.py CHANGED
@@ -1,3 +1,3 @@
1
1
  """It's the version"""
2
2
 
3
- __version__ = "24.4.25.1"
3
+ __version__ = "24.4.30"
not1mm/logwindow.py CHANGED
@@ -17,6 +17,7 @@ import math
17
17
  from PyQt6 import QtCore, QtGui, QtWidgets, uic
18
18
  from PyQt6.QtCore import QItemSelectionModel
19
19
  from PyQt6.QtWidgets import QDockWidget
20
+ from PyQt6.QtGui import QColorConstants, QPalette, QColor
20
21
 
21
22
  import not1mm.fsutils as fsutils
22
23
  from not1mm.lib.database import DataBase
@@ -167,58 +168,44 @@ class LogWindow(QDockWidget):
167
168
 
168
169
  self.multicast_interface.send_as_json(cmd)
169
170
 
170
- def set_dark_mode(self, dark: bool):
171
- """testing"""
171
+ def set_dark_mode(self, dark: bool) -> None:
172
+ """Forces a darkmode palette."""
172
173
 
173
174
  if dark:
174
- dark_palette = QtGui.QPalette()
175
- dark_color = QtGui.QColor(56, 56, 56)
176
- disabled_color = QtGui.QColor(127, 127, 127)
177
- dark_palette.setColor(QtGui.QPalette.ColorRole.Window, dark_color)
178
- dark_palette.setColor(
179
- QtGui.QPalette.ColorRole.WindowText, QtGui.QColorConstants.White
180
- )
181
- dark_palette.setColor(
182
- QtGui.QPalette.ColorRole.Base, QtGui.QColor(45, 45, 45)
183
- )
184
- dark_palette.setColor(QtGui.QPalette.ColorRole.AlternateBase, dark_color)
185
- dark_palette.setColor(
186
- QtGui.QPalette.ColorRole.Text, QtGui.QColorConstants.White
187
- )
188
- dark_palette.setColor(
189
- QtGui.QPalette.ColorGroup.Disabled,
190
- QtGui.QPalette.ColorRole.Text,
191
- disabled_color,
192
- )
193
- dark_palette.setColor(QtGui.QPalette.ColorRole.Button, dark_color)
194
- dark_palette.setColor(
195
- QtGui.QPalette.ColorRole.ButtonText, QtGui.QColorConstants.White
196
- )
197
- dark_palette.setColor(
198
- QtGui.QPalette.ColorGroup.Disabled,
199
- QtGui.QPalette.ColorRole.ButtonText,
200
- disabled_color,
201
- )
202
- dark_palette.setColor(
203
- QtGui.QPalette.ColorRole.BrightText, QtGui.QColorConstants.Red
204
- )
205
- dark_palette.setColor(
206
- QtGui.QPalette.ColorRole.Link, QtGui.QColor(42, 130, 218)
207
- )
208
- dark_palette.setColor(
209
- QtGui.QPalette.ColorRole.Highlight, QtGui.QColor(42, 130, 218)
210
- )
211
- dark_palette.setColor(
212
- QtGui.QPalette.ColorRole.HighlightedText, QtGui.QColorConstants.Black
213
- )
214
- dark_palette.setColor(
215
- QtGui.QPalette.ColorGroup.Disabled,
216
- QtGui.QPalette.ColorRole.HighlightedText,
217
- disabled_color,
218
- )
219
-
220
- self.setPalette(dark_palette)
221
- self.current_palette = dark_palette
175
+ darkPalette = QPalette()
176
+ darkColor = QColor(56, 56, 56)
177
+ disabledColor = QColor(127, 127, 127)
178
+ darkPalette.setColor(QPalette.ColorRole.Window, darkColor)
179
+ darkPalette.setColor(QPalette.ColorRole.WindowText, QColorConstants.White)
180
+ darkPalette.setColor(QPalette.ColorRole.Base, QColor(45, 45, 45))
181
+ darkPalette.setColor(QPalette.ColorRole.AlternateBase, darkColor)
182
+ darkPalette.setColor(QPalette.ColorRole.Text, QColorConstants.White)
183
+ darkPalette.setColor(QPalette.ColorRole.Button, darkColor)
184
+ darkPalette.setColor(QPalette.ColorRole.ButtonText, QColorConstants.White)
185
+ darkPalette.setColor(QPalette.ColorRole.BrightText, QColorConstants.Red)
186
+ darkPalette.setColor(QPalette.ColorRole.Link, QColor(42, 130, 218))
187
+ darkPalette.setColor(QPalette.ColorRole.Highlight, QColor(42, 130, 218))
188
+ darkPalette.setColor(
189
+ QPalette.ColorRole.HighlightedText, QColorConstants.Black
190
+ )
191
+ darkPalette.setColor(
192
+ QPalette.ColorGroup.Disabled,
193
+ QPalette.ColorRole.ButtonText,
194
+ disabledColor,
195
+ )
196
+ darkPalette.setColor(
197
+ QPalette.ColorGroup.Disabled,
198
+ QPalette.ColorRole.HighlightedText,
199
+ disabledColor,
200
+ )
201
+ darkPalette.setColor(
202
+ QPalette.ColorGroup.Disabled,
203
+ QPalette.ColorRole.Text,
204
+ disabledColor,
205
+ )
206
+
207
+ self.setPalette(darkPalette)
208
+ self.current_palette = darkPalette
222
209
  else:
223
210
  palette = self.style().standardPalette()
224
211
  self.setPalette(palette)
not1mm/radio.py CHANGED
@@ -10,10 +10,13 @@ GPL V3
10
10
  # pylint: disable=logging-fstring-interpolation, line-too-long, no-name-in-module
11
11
 
12
12
  import datetime
13
+ import logging
13
14
 
14
15
  from PyQt6.QtCore import QObject, pyqtSignal, QThread
15
16
  from not1mm.lib.cat_interface import CAT
16
17
 
18
+ logger = logging.getLogger("cat_interface")
19
+
17
20
 
18
21
  class Radio(QObject):
19
22
  """Radio class"""
@@ -72,6 +75,12 @@ class Radio(QObject):
72
75
  )
73
76
  QThread.msleep(100)
74
77
 
78
+ def sendcw(self, texttosend):
79
+ """..."""
80
+ logger.debug(f"Send CW: {texttosend}")
81
+ if self.cat:
82
+ self.cat.sendcw(texttosend)
83
+
75
84
  def set_vfo(self, vfo):
76
85
  if self.cat:
77
86
  self.cat.set_vfo(vfo)
not1mm/vfo.py CHANGED
@@ -14,10 +14,10 @@ import platform
14
14
  from json import loads, JSONDecodeError
15
15
 
16
16
  import serial
17
- from PyQt6 import QtCore, QtGui, QtWidgets, uic
17
+ from PyQt6 import QtCore, QtWidgets, uic
18
18
  from PyQt6.QtCore import QTimer
19
19
  from PyQt6.QtWidgets import QDockWidget
20
- from PyQt6.QtGui import QColorConstants
20
+ from PyQt6.QtGui import QColorConstants, QPalette, QColor
21
21
 
22
22
  import not1mm.fsutils as fsutils
23
23
  from not1mm.lib.cat_interface import CAT
@@ -61,57 +61,45 @@ class VfoWindow(QDockWidget):
61
61
  self.poll_rig_timer.timeout.connect(self.poll_radio)
62
62
  self.poll_rig_timer.start(500)
63
63
 
64
- def setDarkMode(self, dark: bool):
65
- """testing"""
64
+ def setDarkMode(self, dark: bool) -> None:
65
+ """Forces a darkmode palette."""
66
66
 
67
67
  if dark:
68
- darkPalette = QtGui.QPalette()
69
- darkColor = QtGui.QColor(56, 56, 56)
70
- self.text_color = QColorConstants.White
71
- disabledColor = QtGui.QColor(127, 127, 127)
72
- darkPalette.setColor(QtGui.QPalette.ColorRole.Window, darkColor)
73
- darkPalette.setColor(
74
- QtGui.QPalette.ColorRole.WindowText, QColorConstants.White
75
- )
68
+ darkPalette = QPalette()
69
+ darkColor = QColor(56, 56, 56)
70
+ disabledColor = QColor(127, 127, 127)
71
+ darkPalette.setColor(QPalette.ColorRole.Window, darkColor)
72
+ darkPalette.setColor(QPalette.ColorRole.WindowText, QColorConstants.White)
73
+ darkPalette.setColor(QPalette.ColorRole.Base, QColor(45, 45, 45))
74
+ darkPalette.setColor(QPalette.ColorRole.AlternateBase, darkColor)
75
+ darkPalette.setColor(QPalette.ColorRole.Text, QColorConstants.White)
76
+ darkPalette.setColor(QPalette.ColorRole.Button, darkColor)
77
+ darkPalette.setColor(QPalette.ColorRole.ButtonText, QColorConstants.White)
78
+ darkPalette.setColor(QPalette.ColorRole.BrightText, QColorConstants.Red)
79
+ darkPalette.setColor(QPalette.ColorRole.Link, QColor(42, 130, 218))
80
+ darkPalette.setColor(QPalette.ColorRole.Highlight, QColor(42, 130, 218))
76
81
  darkPalette.setColor(
77
- QtGui.QPalette.ColorRole.Base, QtGui.QColor(45, 45, 45)
82
+ QPalette.ColorRole.HighlightedText, QColorConstants.Black
78
83
  )
79
- darkPalette.setColor(QtGui.QPalette.ColorRole.AlternateBase, darkColor)
80
- darkPalette.setColor(QtGui.QPalette.ColorRole.Text, QColorConstants.White)
81
84
  darkPalette.setColor(
82
- QtGui.QPalette.ColorGroup.Disabled,
83
- QtGui.QPalette.ColorRole.Text,
85
+ QPalette.ColorGroup.Disabled,
86
+ QPalette.ColorRole.ButtonText,
84
87
  disabledColor,
85
88
  )
86
- darkPalette.setColor(QtGui.QPalette.ColorRole.Button, darkColor)
87
- darkPalette.setColor(
88
- QtGui.QPalette.ColorRole.ButtonText, QColorConstants.White
89
- )
90
89
  darkPalette.setColor(
91
- QtGui.QPalette.ColorGroup.Disabled,
92
- QtGui.QPalette.ColorRole.ButtonText,
90
+ QPalette.ColorGroup.Disabled,
91
+ QPalette.ColorRole.HighlightedText,
93
92
  disabledColor,
94
93
  )
95
94
  darkPalette.setColor(
96
- QtGui.QPalette.ColorRole.BrightText, QColorConstants.Red
97
- )
98
- darkPalette.setColor(
99
- QtGui.QPalette.ColorRole.Link, QtGui.QColor(42, 130, 218)
100
- )
101
- darkPalette.setColor(
102
- QtGui.QPalette.ColorRole.Highlight, QtGui.QColor(42, 130, 218)
103
- )
104
- darkPalette.setColor(
105
- QtGui.QPalette.ColorRole.HighlightedText, QColorConstants.Black
106
- )
107
- darkPalette.setColor(
108
- QtGui.QPalette.ColorGroup.Disabled,
109
- QtGui.QPalette.ColorRole.HighlightedText,
95
+ QPalette.ColorGroup.Disabled,
96
+ QPalette.ColorRole.Text,
110
97
  disabledColor,
111
98
  )
112
99
 
113
- self.setPalette(darkPalette)
114
100
  self.current_palette = darkPalette
101
+ self.setPalette(darkPalette)
102
+ self.text_color = QColorConstants.White
115
103
  else:
116
104
  palette = self.style().standardPalette()
117
105
  self.current_palette = palette
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 24.4.25.1
3
+ Version: 24.4.30
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
@@ -31,6 +31,7 @@ Requires-Dist: appdata
31
31
  Requires-Dist: Levenshtein
32
32
 
33
33
  # Not1MM
34
+ <!-- markdownlint-disable MD001 MD033 -->
34
35
 
35
36
  ![logo](https://github.com/mbridak/not1mm/raw/master/not1mm/data/k6gte.not1mm.svg)
36
37
 
@@ -55,14 +56,16 @@ Requires-Dist: Levenshtein
55
56
  - [Common installation recipes for Ubuntu and Fedora](#common-installation-recipes-for-ubuntu-and-fedora)
56
57
  - [Ubuntu 22.04 LTS](#ubuntu-2204-lts)
57
58
  - [Ubuntu 23.04](#ubuntu-2304)
59
+ - [Ubuntu 24.04 LTS](#ubuntu-2404-lts)
58
60
  - [Fedora 38 \& 39](#fedora-38--39)
61
+ - [Fedora 40](#fedora-40)
59
62
  - [Python, PyPI, pip and pipx](#python-pypi-pip-and-pipx)
60
63
  - [Bootstrapping pipx](#bootstrapping-pipx)
61
64
  - [Installing with pipx](#installing-with-pipx)
65
+ - [Installing from GitHub source](#installing-from-github-source)
62
66
  - [After the install](#after-the-install)
63
67
  - [You may or may not get a warning message like](#you-may-or-may-not-get-a-warning-message-like)
64
68
  - [Or this fan favorite](#or-this-fan-favorite)
65
- - [Installing from GitHub source](#installing-from-github-source)
66
69
  - [Various data file locations](#various-data-file-locations)
67
70
  - [Data](#data)
68
71
  - [Config](#config)
@@ -177,6 +180,8 @@ I wish to thank those who've contributed to the project.
177
180
 
178
181
  ## Recent Changes
179
182
 
183
+ - [24-4-30] Allowsending CW via rigctld if your radio supports it.
184
+ - [24-4-27] Cleaned up dark mode code.
180
185
  - [24-4-25-1] Reduce delta time to poll. Reorder poll_radio callback. Remove unused CAT lib from main.
181
186
  - [24-4-25] Limited loop in radio.py, reducing clock cycles used. Moved Log window to the top of the logger.
182
187
  - [24-4-24] Placed CAT control into a thread so disconnecting the radio wouldn't lock up the interface.
@@ -215,6 +220,10 @@ through your distribution's package manager before continuing.
215
220
  I've taken the time to install some common Linux distributions into a VM and
216
221
  noted the minimum steps needed to install not1mm.
217
222
 
223
+ <details>
224
+
225
+ <summary><b>Ubuntu 22.04 LTS, 23.04 and 24.04 LTS</b></summary>
226
+
218
227
  #### Ubuntu 22.04 LTS
219
228
 
220
229
  ```bash
@@ -234,6 +243,22 @@ pipx install not1mm
234
243
  pipx ensurepath
235
244
  ```
236
245
 
246
+ #### Ubuntu 24.04 LTS
247
+
248
+ ```bash
249
+ sudo apt update
250
+ sudo apt upgrade
251
+ sudo apt install -y libportaudio2 pyqt6-dev-tools python3-pip
252
+ pip install --break-system-packages not1mm
253
+ source .profile
254
+ ```
255
+
256
+ </details>
257
+
258
+ <details>
259
+
260
+ <summary><b>Fedora 38, 39 and 40</b></summary>
261
+
237
262
  #### Fedora 38 & 39
238
263
 
239
264
  ```bash
@@ -242,6 +267,17 @@ sudo dnf install python3-pip portaudio
242
267
  pip install not1mm
243
268
  ```
244
269
 
270
+ #### Fedora 40
271
+
272
+ ```bash
273
+ sudo dnf upgrade --refresh
274
+ sudo dnf install python3-pip python3-pyqt6 portaudio
275
+ pip install not1mm
276
+ ```
277
+
278
+ </details>
279
+ <br>
280
+
245
281
  You can now open a new terminal and type not1mm. On it's first run, it may or
246
282
  may not install a lovely non AI generated icon, which you can later click on to
247
283
  launch the application.
@@ -293,6 +329,40 @@ If you need to later update not1mm, you can do so with:
293
329
  pipx upgrade not1mm
294
330
  ```
295
331
 
332
+ <details>
333
+ <summary><b>Installing from GitHub source.</b></summary>
334
+
335
+ ### Installing from GitHub source
336
+
337
+ Since this is packaged for PyPI, if you want to work on your own source branch,
338
+ after cloning from github you would:
339
+
340
+ ```bash
341
+ pip install --upgrade pip
342
+ pip install setuptools
343
+ pip install build
344
+ source rebuild.sh
345
+ ```
346
+
347
+ from the root directory. This installs a build chain and a local editable copy
348
+ of not1mm.
349
+
350
+ There's two ways to launch the program from the local editable copy.
351
+
352
+ You can either be in the root of the source directory and type:
353
+
354
+ ```bash
355
+ python not1mm
356
+ ```
357
+
358
+ or be in some other directory and just type:
359
+
360
+ ```bash
361
+ not1mm
362
+ ```
363
+
364
+ </details>
365
+
296
366
  ## After the install
297
367
 
298
368
  You can now open a new terminal and type `not1mm`. On it's first run, it may or
@@ -324,35 +394,6 @@ For a more permanent solution you can place the line
324
394
  `export QT_QPA_PLATFORM=wayland` in your home directories .bashrc file. Then
325
395
  after logging out and back in you should be able to launch it normally.
326
396
 
327
- ### Installing from GitHub source
328
-
329
- Since this is packaged for PyPI, if you want to work on your own source branch,
330
- after cloning from github you would:
331
-
332
- ```bash
333
- pip install --upgrade pip
334
- pip install setuptools
335
- pip install build
336
- source rebuild.sh
337
- ```
338
-
339
- from the root directory. This installs a build chain and a local editable copy
340
- of not1mm.
341
-
342
- There's two ways to launch the program from the local editable copy.
343
-
344
- You can either be in the root of the source directory and type:
345
-
346
- ```bash
347
- python not1mm
348
- ```
349
-
350
- or be in some other directory and just type:
351
-
352
- ```bash
353
- not1mm
354
- ```
355
-
356
397
  ## Various data file locations
357
398
 
358
399
  ### Data
@@ -462,7 +503,10 @@ onscreen icon for CAT status. Green good, Red bad, Grey neither.
462
503
 
463
504
  Under the `CW` TAB, There are three options. `cwdaemon`, which normally uses IP
464
505
  `127.0.0.1` and port `6789`. `pywinkeyer` which normally uses IP `127.0.0.1` and
465
- port `8000`. Or `None`, if you want to Morse it like it's 1899.
506
+ `CAT` which if your radio supports it, sends Morse characters via rigctld. As far
507
+ as I can tell rigctld does not support setting the radios internal keyer speed. So
508
+ the CW speed control widget will not be functional and you'd need to control the
509
+ keyer speed thru the radios interface.
466
510
 
467
511
  ### Cluster
468
512
 
@@ -1,11 +1,11 @@
1
1
  not1mm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- not1mm/__main__.py,sha256=TPnGFy4UQkvMBpjW1xyK1iPUNrj16nIAA6SS6IP5yF0,123515
3
- not1mm/bandmap.py,sha256=3kmRYItrBqpjudFb2NnkGNJpDWkwOpGPQbKwHmYnQ-o,34021
4
- not1mm/checkwindow.py,sha256=9ueFgYLM4RFmroMJBXXn98XWO9ZJ-Dop6MwZUXRNFF0,10577
2
+ not1mm/__main__.py,sha256=B2BSFagNTFJ6jWChOEj41TAtsWZ4rXo59sDiKp4rie0,121264
3
+ not1mm/bandmap.py,sha256=DyAIgEfV_Ceg_BuBwvV3a2aRHTG3M63ZokoULS0wTdk,32071
4
+ not1mm/checkwindow.py,sha256=PHQhyN-25ZugbxKKjSxs0wqD80GTHYdIs1IIBjCGVc8,10278
5
5
  not1mm/fsutils.py,sha256=ukHKxKTeNKxKwqRaJjtzRShL4X5Xl0jRBbADyy3Ifp8,1701
6
- not1mm/logwindow.py,sha256=UcO8mgs_E7ier2gg_1ESTaRxABEvcpCwKmSibm7hl74,44603
7
- not1mm/radio.py,sha256=im14hFLKu0NreymcYoeSE3gyFHoXygP8azY0nsfBLP0,2876
8
- not1mm/vfo.py,sha256=pRRj0XTbeTU9noo3nC1dbg26VYj6gHEw_srUDbyYqC0,12169
6
+ not1mm/logwindow.py,sha256=MpEVvnuQh9P5Z8kK2MozAaMCNSx1C4isAEYCETI7SjI,44285
7
+ not1mm/radio.py,sha256=R_RaxdiqcMzIQN2za7qBsStrT5X0AwZcz8xtiCwsYdE,3097
8
+ not1mm/vfo.py,sha256=7CMI0h9jCEhaonOIvN_7wSiEnsSSxsB1IvOYC9bML6w,11889
9
9
  not1mm/data/JetBrainsMono-Regular.ttf,sha256=UOHctAKY_PzCGh7zy-6f6egnCcSK0wzmF0csBqO9lDY,203952
10
10
  not1mm/data/MASTER.SCP,sha256=1vQRvEZ865brfmmajp-Lj-hgWejVGI992q8o971bUV8,366478
11
11
  not1mm/data/about.ui,sha256=7TqvtXFFm0Rmcu0bmLupwpO1CsK8MekfZ09_xn6kZrQ,2067
@@ -13,7 +13,7 @@ not1mm/data/alpha bravo charlie delta.txt,sha256=d5QMmSWEUAe4Rj1XbNjTPLa_5Be4Se6
13
13
  not1mm/data/bandmap.ui,sha256=NqVoAGyuf_Rsts_FnL0pYEtE08DJb6qm4KAQ_T01bM8,7125
14
14
  not1mm/data/check.png,sha256=UvFOLr8V-79qnjW8wUaGItXk_OSP8m8hqPevs8NDlFY,387
15
15
  not1mm/data/checkwindow.ui,sha256=aILeaBJB5Xium-JIFiJ39VEoGH6TIpK0lHVa2RcfeaQ,4614
16
- not1mm/data/configuration.ui,sha256=DJZxA4zZPb4sTdVn17j1fwaTw-5lJCNQ6PspQrsdMe4,51643
16
+ not1mm/data/configuration.ui,sha256=fRdyDusgQdUl76XC__RHwpkOlOERmnGFQ3DMCgkxh8U,51672
17
17
  not1mm/data/contests.sql,sha256=4hmJCDvrbxnA_Y5S4T5o52TZieeFk6QUwFerwlFePNA,89307
18
18
  not1mm/data/cty.json,sha256=xnLK-kNB5phKPef7R7PJZcSGGHegZ1AH2xw9ZWJwccM,4790698
19
19
  not1mm/data/cwmacros.txt,sha256=PvJ7TxGILq-ErHb6Gbrm-08x76BbCdXb8AY8a7st5mg,451
@@ -89,8 +89,8 @@ not1mm/data/phonetics/yourcall.wav,sha256=4kheHJmCiRDL2kjhlgXQ8_u_eEMgKxiNGu5UBk
89
89
  not1mm/data/phonetics/z.wav,sha256=arafCi7fwmBLdVDI-PRyaL4U-03PIQDhffwY5noJ_2c,51768
90
90
  not1mm/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
91
91
  not1mm/lib/about.py,sha256=sWycfGcruN3SaEe4JmaJ61K6D8Itq0WxpUYT-lEcmYM,416
92
- not1mm/lib/cat_interface.py,sha256=dr5bBcObNtRWVHr9A5kq9GCq0wQfOOfVhkrEAzJez90,15127
93
- not1mm/lib/cwinterface.py,sha256=Seupz7tMkCvJ80mgmyaNU_1AUADsvNPkAfwDSlwibF0,3126
92
+ not1mm/lib/cat_interface.py,sha256=GP06hWIFrM_6hFQCJEq6QuNF8HaZn4UojIOlt_iWLDA,16042
93
+ not1mm/lib/cwinterface.py,sha256=Q8p3pScOHczZ8ptICfH1Yu6rCEwQJLgrNwYMN76B2i8,3389
94
94
  not1mm/lib/database.py,sha256=RQoj3JsTejMiiFIN42lY3N4jrj80htftdoFeRqVKnKs,42480
95
95
  not1mm/lib/edit_contact.py,sha256=Ki9bGPpqyQQBB1cU8VIBDCal3lbXeQ6qxhzklmhE2_w,353
96
96
  not1mm/lib/edit_macro.py,sha256=raKWBwsHInj5EUKmvyLQ6gqc3ZFDlstsD3xqoM4PC8E,517
@@ -104,9 +104,9 @@ not1mm/lib/n1mm.py,sha256=V1NiNyOHaPNYKe_vRsq44O1R42N8uS5PlfRa5Db4Tv0,5712
104
104
  not1mm/lib/new_contest.py,sha256=IznTDMq7yXHB6zBoGUEC_WDYPCPpsSZW4wwMJi16zK0,816
105
105
  not1mm/lib/plugin_common.py,sha256=AAKBPCXzTWZJb-h08uPNnHVG7bSCg7kwukc211gFivY,8605
106
106
  not1mm/lib/select_contest.py,sha256=WsptLuwkouIHeocJL3oZ6-eUfEnhpwdc-x7eMZ_TIVM,359
107
- not1mm/lib/settings.py,sha256=i4Za_BZDl9UotB10o8sjIkzRdR0493rMI5VaQltUZHA,9054
107
+ not1mm/lib/settings.py,sha256=MWiKXbasaFbzeHTjfzTaTqbCBrIijudP_-0a5jNmUAA,9265
108
108
  not1mm/lib/super_check_partial.py,sha256=p5l3u2ZOCBtlWgbvskC50FpuoaIpR07tfC6zTdRWbh4,2334
109
- not1mm/lib/version.py,sha256=5VfzMqJpSG9cTllQxeEteOeBs_mZEETIMigeCC1OoCI,50
109
+ not1mm/lib/version.py,sha256=zA20U-5Ca6bsgBYAJw2MX5JgzAAvPdJ2B59giQAav24,48
110
110
  not1mm/lib/versiontest.py,sha256=8vDNptuBBunn-1IGkjNaquehqBYUJyjrPSF8Igmd4_Y,1286
111
111
  not1mm/plugins/10_10_fall_cw.py,sha256=fUjfwjuscDjicXIxsO0JHh7xTR9Vu0iPsrOLb896Qak,10873
112
112
  not1mm/plugins/10_10_spring_cw.py,sha256=WNaJP5mBQfaB6SxnFI0Vawt3AKDr94tKVtAK-EVhtUY,10878
@@ -140,9 +140,9 @@ not1mm/plugins/naqp_ssb.py,sha256=IWksulcb2_DxlkeW0h3048t8I-u00G_67KBVKkp-TV4,11
140
140
  not1mm/plugins/phone_weekly_test.py,sha256=gCX0ESUoiQzDp9puwibt9-dRembNsiuEeBdawCVvjHA,12316
141
141
  not1mm/plugins/stew_perry_topband.py,sha256=DIMI3mGMKokXXb9pPLqdhBI6JVnnIs7ZnAL23nFmshE,10588
142
142
  not1mm/plugins/winter_field_day.py,sha256=4rcfRtobwjHO6BNL3WOTHzBmyyeuX79BNGBG8PfjrI8,10238
143
- not1mm-24.4.25.1.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
144
- not1mm-24.4.25.1.dist-info/METADATA,sha256=BSMf_2zOxDbDk8E4rgSG9kr8X6itsdP00ZY8KEIxGgo,27891
145
- not1mm-24.4.25.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
146
- not1mm-24.4.25.1.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
147
- not1mm-24.4.25.1.dist-info/top_level.txt,sha256=0YmTxEcDzQlzXub-lXASvoLpg_mt1c2thb5cVkDf5J4,7
148
- not1mm-24.4.25.1.dist-info/RECORD,,
143
+ not1mm-24.4.30.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
144
+ not1mm-24.4.30.dist-info/METADATA,sha256=KBVE9BJ01q8RlE8BBesdoAtBiMt5m0z_tnkQnNGyZAY,28897
145
+ not1mm-24.4.30.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
146
+ not1mm-24.4.30.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
147
+ not1mm-24.4.30.dist-info/top_level.txt,sha256=0YmTxEcDzQlzXub-lXASvoLpg_mt1c2thb5cVkDf5J4,7
148
+ not1mm-24.4.30.dist-info/RECORD,,