not1mm 24.3.16__py3-none-any.whl → 24.3.21__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 +289 -125
- not1mm/bandmap.py +168 -163
- not1mm/checkwindow.py +55 -107
- not1mm/data/MASTER.SCP +1077 -749
- not1mm/data/bandmap.ui +4 -4
- not1mm/data/checkwindow.ui +9 -16
- not1mm/data/logwindow.ui +16 -11
- not1mm/data/main.ui +16 -6
- not1mm/data/vfo.ui +64 -52
- not1mm/data/vfo2.ui +84 -0
- not1mm/fsutils.py +38 -0
- not1mm/lib/about.py +4 -2
- not1mm/lib/cat_interface.py +1 -1
- not1mm/lib/cwinterface.py +1 -1
- not1mm/lib/database.py +4 -4
- not1mm/lib/edit_contact.py +2 -2
- not1mm/lib/edit_macro.py +2 -3
- not1mm/lib/edit_opon.py +2 -2
- not1mm/lib/edit_station.py +3 -3
- not1mm/lib/ham_utility.py +1 -1
- not1mm/lib/lookup.py +1 -1
- not1mm/lib/multicast.py +9 -4
- not1mm/lib/n1mm.py +1 -1
- not1mm/lib/new_contest.py +2 -2
- not1mm/lib/select_contest.py +2 -2
- not1mm/lib/settings.py +3 -4
- not1mm/lib/super_check_partial.py +6 -5
- not1mm/lib/version.py +1 -1
- not1mm/logwindow.py +60 -104
- not1mm/plugins/10_10_fall_cw.py +1 -1
- not1mm/plugins/10_10_spring_cw.py +1 -1
- not1mm/plugins/10_10_summer_phone.py +1 -1
- not1mm/plugins/10_10_winter_phone.py +1 -1
- not1mm/plugins/arrl_10m.py +1 -1
- not1mm/plugins/arrl_dx_cw.py +1 -1
- not1mm/plugins/arrl_dx_ssb.py +1 -1
- not1mm/plugins/arrl_field_day.py +1 -1
- not1mm/plugins/arrl_ss_cw.py +1 -1
- not1mm/plugins/arrl_ss_phone.py +1 -1
- not1mm/plugins/arrl_vhf_jan.py +1 -1
- not1mm/plugins/arrl_vhf_jun.py +1 -1
- not1mm/plugins/arrl_vhf_sep.py +1 -1
- not1mm/plugins/canada_day.py +1 -1
- not1mm/plugins/cq_160_cw.py +1 -1
- not1mm/plugins/cq_160_ssb.py +1 -1
- not1mm/plugins/cq_wpx_cw.py +1 -1
- not1mm/plugins/cq_wpx_ssb.py +1 -1
- not1mm/plugins/cq_ww_cw.py +1 -1
- not1mm/plugins/cq_ww_ssb.py +1 -1
- not1mm/plugins/cwt.py +1 -1
- not1mm/plugins/general_logging.py +1 -1
- not1mm/plugins/iaru_hf.py +1 -1
- not1mm/plugins/jidx_cw.py +1 -1
- not1mm/plugins/jidx_ph.py +1 -1
- not1mm/plugins/naqp_cw.py +1 -1
- not1mm/plugins/naqp_ssb.py +1 -1
- not1mm/plugins/phone_weekly_test.py +1 -1
- not1mm/plugins/stew_perry_topband.py +1 -1
- not1mm/plugins/winter_field_day.py +1 -1
- not1mm/vfo.py +77 -98
- {not1mm-24.3.16.dist-info → not1mm-24.3.21.dist-info}/METADATA +4 -1
- {not1mm-24.3.16.dist-info → not1mm-24.3.21.dist-info}/RECORD +68 -65
- testing/detectdark.py +35 -0
- testing/test.py +13 -11
- {not1mm-24.3.16.dist-info → not1mm-24.3.21.dist-info}/LICENSE +0 -0
- {not1mm-24.3.16.dist-info → not1mm-24.3.21.dist-info}/WHEEL +0 -0
- {not1mm-24.3.16.dist-info → not1mm-24.3.21.dist-info}/entry_points.txt +0 -0
- {not1mm-24.3.16.dist-info → not1mm-24.3.21.dist-info}/top_level.txt +0 -0
not1mm/vfo.py
CHANGED
@@ -9,58 +9,33 @@ VFO Window
|
|
9
9
|
# usb-Raspberry_Pi_Pico_W_E6614C311B331139-if00
|
10
10
|
|
11
11
|
import logging
|
12
|
-
|
13
12
|
import os
|
14
|
-
|
15
13
|
import platform
|
16
|
-
import queue
|
17
|
-
import sys
|
18
14
|
from json import loads, JSONDecodeError
|
19
|
-
from pathlib import Path
|
20
15
|
|
21
16
|
import serial
|
22
|
-
from PyQt5 import QtCore,
|
23
|
-
from PyQt5.QtCore import QTimer
|
24
|
-
from PyQt5.QtWidgets import
|
17
|
+
from PyQt5 import QtCore, QtGui, QtWidgets, uic
|
18
|
+
from PyQt5.QtCore import Qt, QTimer
|
19
|
+
from PyQt5.QtWidgets import QWidget
|
25
20
|
|
21
|
+
from not1mm import fsutils
|
26
22
|
from not1mm.lib.cat_interface import CAT
|
27
23
|
from not1mm.lib.multicast import Multicast
|
28
24
|
|
29
|
-
|
30
|
-
|
31
|
-
if __loader__:
|
32
|
-
WORKING_PATH = os.path.dirname(__loader__.get_filename())
|
33
|
-
else:
|
34
|
-
WORKING_PATH = os.path.dirname(os.path.realpath(__file__))
|
35
|
-
|
36
|
-
if "XDG_DATA_HOME" in os.environ:
|
37
|
-
DATA_PATH = os.environ.get("XDG_DATA_HOME")
|
38
|
-
else:
|
39
|
-
DATA_PATH = str(Path.home() / ".local" / "share")
|
40
|
-
DATA_PATH += "/not1mm"
|
41
|
-
|
42
|
-
if "XDG_CONFIG_HOME" in os.environ:
|
43
|
-
CONFIG_PATH = os.environ.get("XDG_CONFIG_HOME")
|
44
|
-
else:
|
45
|
-
CONFIG_PATH = str(Path.home() / ".config")
|
46
|
-
CONFIG_PATH += "/not1mm"
|
47
|
-
|
25
|
+
logger = logging.getLogger(__name__)
|
48
26
|
|
49
|
-
class
|
50
|
-
"""
|
51
|
-
The main window
|
52
|
-
"""
|
27
|
+
class VfoWindow(QWidget):
|
53
28
|
|
54
29
|
pref = {}
|
55
30
|
old_vfo = ""
|
56
31
|
old_pico = ""
|
57
32
|
message_shown = False
|
58
33
|
multicast_interface = None
|
34
|
+
current_palette = None
|
59
35
|
|
60
36
|
def __init__(self, *args, **kwargs):
|
61
37
|
super().__init__(*args, **kwargs)
|
62
|
-
|
63
|
-
uic.loadUi(data_path, self)
|
38
|
+
uic.loadUi(fsutils.APP_DATA_PATH / "vfo.ui", self)
|
64
39
|
self.rig_control = None
|
65
40
|
self.timer = QTimer()
|
66
41
|
self.timer.timeout.connect(self.getwaiting)
|
@@ -69,7 +44,7 @@ class MainWindow(QMainWindow):
|
|
69
44
|
self.lcdNumber.display(0)
|
70
45
|
self.pico = None
|
71
46
|
self._udpwatch = None
|
72
|
-
|
47
|
+
|
73
48
|
self.multicast_interface = Multicast(
|
74
49
|
self.pref.get("multicast_group", "239.1.1.1"),
|
75
50
|
self.pref.get("multicast_port", 2239),
|
@@ -77,9 +52,45 @@ class MainWindow(QMainWindow):
|
|
77
52
|
)
|
78
53
|
self.multicast_interface.ready_read_connect(self.watch_udp)
|
79
54
|
|
80
|
-
|
81
|
-
|
82
|
-
|
55
|
+
self.setup_serial()
|
56
|
+
#app.processEvents()
|
57
|
+
self.poll_rig_timer = QtCore.QTimer()
|
58
|
+
self.poll_rig_timer.timeout.connect(self.poll_radio)
|
59
|
+
self.poll_rig_timer.start(500)
|
60
|
+
|
61
|
+
def setDarkMode(self, dark: bool):
|
62
|
+
"""testing"""
|
63
|
+
|
64
|
+
if dark:
|
65
|
+
darkPalette = QtGui.QPalette()
|
66
|
+
darkColor = QtGui.QColor(45, 45, 45)
|
67
|
+
disabledColor = QtGui.QColor(127, 127, 127)
|
68
|
+
darkPalette.setColor(QtGui.QPalette.Window, darkColor)
|
69
|
+
darkPalette.setColor(QtGui.QPalette.WindowText, Qt.white)
|
70
|
+
darkPalette.setColor(QtGui.QPalette.Base, QtGui.QColor(18, 18, 18))
|
71
|
+
darkPalette.setColor(QtGui.QPalette.AlternateBase, darkColor)
|
72
|
+
darkPalette.setColor(QtGui.QPalette.Text, Qt.white)
|
73
|
+
darkPalette.setColor(
|
74
|
+
QtGui.QPalette.Disabled, QtGui.QPalette.Text, disabledColor
|
75
|
+
)
|
76
|
+
darkPalette.setColor(QtGui.QPalette.Button, darkColor)
|
77
|
+
darkPalette.setColor(QtGui.QPalette.ButtonText, Qt.white)
|
78
|
+
darkPalette.setColor(
|
79
|
+
QtGui.QPalette.Disabled, QtGui.QPalette.ButtonText, disabledColor
|
80
|
+
)
|
81
|
+
darkPalette.setColor(QtGui.QPalette.BrightText, Qt.red)
|
82
|
+
darkPalette.setColor(QtGui.QPalette.Link, QtGui.QColor(42, 130, 218))
|
83
|
+
darkPalette.setColor(QtGui.QPalette.Highlight, QtGui.QColor(42, 130, 218))
|
84
|
+
darkPalette.setColor(QtGui.QPalette.HighlightedText, Qt.black)
|
85
|
+
darkPalette.setColor(
|
86
|
+
QtGui.QPalette.Disabled, QtGui.QPalette.HighlightedText, disabledColor
|
87
|
+
)
|
88
|
+
self.current_palette = darkPalette
|
89
|
+
self.setPalette(darkPalette)
|
90
|
+
else:
|
91
|
+
palette = self.style().standardPalette()
|
92
|
+
self.current_palette = palette
|
93
|
+
self.setPalette(palette)
|
83
94
|
|
84
95
|
def load_pref(self) -> None:
|
85
96
|
"""
|
@@ -87,9 +98,9 @@ class MainWindow(QMainWindow):
|
|
87
98
|
Get CAT interface.
|
88
99
|
"""
|
89
100
|
try:
|
90
|
-
if os.path.exists(
|
101
|
+
if os.path.exists(fsutils.CONFIG_FILE):
|
91
102
|
with open(
|
92
|
-
|
103
|
+
fsutils.CONFIG_FILE, "rt", encoding="utf-8"
|
93
104
|
) as file_descriptor:
|
94
105
|
self.pref = loads(file_descriptor.read())
|
95
106
|
logger.info("%s", self.pref)
|
@@ -119,6 +130,7 @@ class MainWindow(QMainWindow):
|
|
119
130
|
int(self.pref.get("CAT_port", 4532)),
|
120
131
|
)
|
121
132
|
self.timer.start(100)
|
133
|
+
self.setDarkMode(self.pref.get("darkmode", False))
|
122
134
|
|
123
135
|
def discover_device(self) -> str:
|
124
136
|
"""
|
@@ -131,7 +143,7 @@ class MainWindow(QMainWindow):
|
|
131
143
|
|
132
144
|
devices = None
|
133
145
|
data = None
|
134
|
-
app.processEvents()
|
146
|
+
#app.processEvents()
|
135
147
|
try:
|
136
148
|
devices = os.listdir("/dev/serial/by-id")
|
137
149
|
except FileNotFoundError:
|
@@ -154,29 +166,28 @@ class MainWindow(QMainWindow):
|
|
154
166
|
Setup the device returned by discover_device()
|
155
167
|
Or display message saying we didn't find one.
|
156
168
|
"""
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
except OSError:
|
166
|
-
if self.message_shown is False:
|
167
|
-
self.message_shown = True
|
168
|
-
self.show_message_box(
|
169
|
-
"Unable to locate or open the VFO knob serial device."
|
170
|
-
)
|
171
|
-
self.lcdNumber.setStyleSheet("QLCDNumber { color: red; }")
|
172
|
-
else:
|
169
|
+
|
170
|
+
device = self.discover_device()
|
171
|
+
if device:
|
172
|
+
try:
|
173
|
+
self.pico = serial.Serial("/dev/serial/by-id/" + device, 115200)
|
174
|
+
self.pico.timeout = 100
|
175
|
+
self.lcdNumber.setStyleSheet("QLCDNumber { color: white; }")
|
176
|
+
except OSError:
|
173
177
|
if self.message_shown is False:
|
174
178
|
self.message_shown = True
|
175
179
|
self.show_message_box(
|
176
180
|
"Unable to locate or open the VFO knob serial device."
|
177
181
|
)
|
178
182
|
self.lcdNumber.setStyleSheet("QLCDNumber { color: red; }")
|
179
|
-
|
183
|
+
else:
|
184
|
+
if self.message_shown is False:
|
185
|
+
self.message_shown = True
|
186
|
+
self.show_message_box(
|
187
|
+
"Unable to locate or open the VFO knob serial device."
|
188
|
+
)
|
189
|
+
self.lcdNumber.setStyleSheet("QLCDNumber { color: red; }")
|
190
|
+
#app.processEvents()
|
180
191
|
|
181
192
|
def watch_udp(self) -> None:
|
182
193
|
"""
|
@@ -200,8 +211,7 @@ class MainWindow(QMainWindow):
|
|
200
211
|
if json_data.get("station", "") != platform.node():
|
201
212
|
continue
|
202
213
|
logger.debug(f"{json_data=}")
|
203
|
-
|
204
|
-
self.quit_app()
|
214
|
+
|
205
215
|
if json_data.get("cmd", "") == "TUNE":
|
206
216
|
# b'{"cmd": "TUNE", "freq": 7.0235, "spot": "MM0DGI"}'
|
207
217
|
vfo = json_data.get("freq")
|
@@ -214,6 +224,9 @@ class MainWindow(QMainWindow):
|
|
214
224
|
logger.critical("Unable to write to serial device.")
|
215
225
|
except AttributeError:
|
216
226
|
logger.critical("Unable to write to serial device.")
|
227
|
+
continue
|
228
|
+
if json_data.get("cmd", "") == "DARKMODE":
|
229
|
+
self.setDarkMode(json_data.get("state", False))
|
217
230
|
|
218
231
|
def showNumber(self, the_number) -> None:
|
219
232
|
"""Display vfo value with dots"""
|
@@ -221,7 +234,7 @@ class MainWindow(QMainWindow):
|
|
221
234
|
if len(dvfo) > 6:
|
222
235
|
dnum = f"{dvfo[:len(dvfo)-6]}.{dvfo[-6:-3]}.{dvfo[-3:]}"
|
223
236
|
self.lcdNumber.display(dnum)
|
224
|
-
app.processEvents()
|
237
|
+
#app.processEvents()
|
225
238
|
|
226
239
|
def poll_radio(self) -> None:
|
227
240
|
"""
|
@@ -244,7 +257,7 @@ class MainWindow(QMainWindow):
|
|
244
257
|
logger.debug(f"{vfo}")
|
245
258
|
self.showNumber(vfo)
|
246
259
|
# self.lcdNumber.display(dnum)
|
247
|
-
app.processEvents()
|
260
|
+
#app.processEvents()
|
248
261
|
cmd = f"F {vfo}\r"
|
249
262
|
try:
|
250
263
|
if self.pico:
|
@@ -271,56 +284,22 @@ class MainWindow(QMainWindow):
|
|
271
284
|
self.rig_control.set_vfo(result)
|
272
285
|
self.showNumber(result)
|
273
286
|
# self.lcdNumber.display(result)
|
274
|
-
app.processEvents()
|
287
|
+
#app.processEvents()
|
275
288
|
except OSError:
|
276
289
|
logger.critical("Unable to write to serial device.")
|
277
290
|
except AttributeError:
|
278
291
|
logger.critical("Unable to write to serial device.")
|
279
|
-
app.processEvents()
|
292
|
+
#app.processEvents()
|
280
293
|
|
281
294
|
def show_message_box(self, message: str) -> None:
|
282
295
|
"""
|
283
296
|
Display an alert box with the supplied message.
|
284
297
|
"""
|
285
298
|
message_box = QtWidgets.QMessageBox()
|
299
|
+
message_box.setPalette(self.current_palette)
|
286
300
|
message_box.setIcon(QtWidgets.QMessageBox.Information)
|
287
301
|
message_box.setText(message)
|
288
302
|
message_box.setWindowTitle("Information")
|
289
303
|
message_box.setStandardButtons(QtWidgets.QMessageBox.Ok)
|
290
304
|
_ = message_box.exec_()
|
291
305
|
|
292
|
-
|
293
|
-
def main():
|
294
|
-
"""main entry"""
|
295
|
-
window.show()
|
296
|
-
window.setup_serial()
|
297
|
-
app.processEvents()
|
298
|
-
timer = QtCore.QTimer()
|
299
|
-
timer.timeout.connect(window.poll_radio)
|
300
|
-
timer.start(250)
|
301
|
-
sys.exit(app.exec())
|
302
|
-
|
303
|
-
|
304
|
-
logger = logging.getLogger("__main__")
|
305
|
-
handler = logging.StreamHandler()
|
306
|
-
formatter = logging.Formatter(
|
307
|
-
datefmt="%H:%M:%S",
|
308
|
-
fmt="[%(asctime)s] %(levelname)s %(module)s - %(funcName)s Line %(lineno)d:\n%(message)s",
|
309
|
-
)
|
310
|
-
handler.setFormatter(formatter)
|
311
|
-
logger.addHandler(handler)
|
312
|
-
|
313
|
-
if Path("./debug").exists():
|
314
|
-
logger.setLevel(logging.DEBUG)
|
315
|
-
logger.debug("debugging on")
|
316
|
-
else:
|
317
|
-
logger.setLevel(logging.WARNING)
|
318
|
-
logger.warning("debugging off")
|
319
|
-
|
320
|
-
app = QApplication(sys.argv)
|
321
|
-
app.setStyle("Adwaita-Dark")
|
322
|
-
window = MainWindow()
|
323
|
-
|
324
|
-
|
325
|
-
if __name__ == "__main__":
|
326
|
-
main()
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: not1mm
|
3
|
-
Version: 24.3.
|
3
|
+
Version: 24.3.21
|
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
|
@@ -27,6 +27,7 @@ Requires-Dist: soundfile
|
|
27
27
|
Requires-Dist: numpy
|
28
28
|
Requires-Dist: notctyparser >=23.6.21
|
29
29
|
Requires-Dist: rapidfuzz
|
30
|
+
Requires-Dist: appdata
|
30
31
|
|
31
32
|
# Not1MM
|
32
33
|
|
@@ -168,6 +169,8 @@ I wish to thank those who've contributed to the project.
|
|
168
169
|
|
169
170
|
## Recent Changes
|
170
171
|
|
172
|
+
- [24-3-21] Merged PR from @kyleboyle for docking windows. MacOS and Windows support.
|
173
|
+
- [24-3-19] Removed some useless bloat causing slow interface on FreeBSD 13/14 and maybe others.
|
171
174
|
- [24-3-16] Add Save/Fail confirmation dialogs when saving ADIF of Cabrillo files.
|
172
175
|
- [24-3-15] Change 'CWR' to 'CW' in the ADIF output.
|
173
176
|
- [24-3-13] Added CQ 160 CW and SSB
|
@@ -1,16 +1,17 @@
|
|
1
1
|
not1mm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
|
-
not1mm/__main__.py,sha256=
|
3
|
-
not1mm/bandmap.py,sha256=
|
4
|
-
not1mm/checkwindow.py,sha256=
|
5
|
-
not1mm/
|
6
|
-
not1mm/
|
2
|
+
not1mm/__main__.py,sha256=kyio6SVPPMwC-Lq0sigYdt-dp7AFvoMHW_Uv2dzxeBU,115688
|
3
|
+
not1mm/bandmap.py,sha256=8X4f6mPwkeKk5FRKZz4RVHpZ2BiYMC1kdZ7yI1U_uF8,31328
|
4
|
+
not1mm/checkwindow.py,sha256=uiVreSneOcacQHlsLXF-TqSEGjVA8q7xd3YC0-p8eME,7187
|
5
|
+
not1mm/fsutils.py,sha256=a3LSvc_GbNSDQUvEzICEmo3MN8EKB0N8RZqNfGsCqv8,976
|
6
|
+
not1mm/logwindow.py,sha256=hKdl7-LsYW3MtjNRgtPdHSTvPoQ6X9UPQ1HyRIobCto,43586
|
7
|
+
not1mm/vfo.py,sha256=q08nk-Fig2rj9L5Qbd98awxMS0FsMThSyhexFQGNHBA,11491
|
7
8
|
not1mm/data/JetBrainsMono-Regular.ttf,sha256=UOHctAKY_PzCGh7zy-6f6egnCcSK0wzmF0csBqO9lDY,203952
|
8
|
-
not1mm/data/MASTER.SCP,sha256=
|
9
|
+
not1mm/data/MASTER.SCP,sha256=1vQRvEZ865brfmmajp-Lj-hgWejVGI992q8o971bUV8,366478
|
9
10
|
not1mm/data/about.ui,sha256=7TqvtXFFm0Rmcu0bmLupwpO1CsK8MekfZ09_xn6kZrQ,2067
|
10
11
|
not1mm/data/alpha bravo charlie delta.txt,sha256=d5QMmSWEUAe4Rj1XbNjTPLa_5Be4Se6u5LUIqAYidOQ,224
|
11
|
-
not1mm/data/bandmap.ui,sha256=
|
12
|
+
not1mm/data/bandmap.ui,sha256=X6BpebEQLc77OF37a_25JTndL5LPc6PJUaIF9THogQs,6746
|
12
13
|
not1mm/data/check.png,sha256=UvFOLr8V-79qnjW8wUaGItXk_OSP8m8hqPevs8NDlFY,387
|
13
|
-
not1mm/data/checkwindow.ui,sha256=
|
14
|
+
not1mm/data/checkwindow.ui,sha256=_a22PpCNxO2TrXL0n9xT6JDkCuck2vAIrCmTf0ffAmo,2564
|
14
15
|
not1mm/data/configuration.ui,sha256=DJZxA4zZPb4sTdVn17j1fwaTw-5lJCNQ6PspQrsdMe4,51643
|
15
16
|
not1mm/data/contests.sql,sha256=4hmJCDvrbxnA_Y5S4T5o52TZieeFk6QUwFerwlFePNA,89307
|
16
17
|
not1mm/data/cty.json,sha256=1x0RqUdqGuhLBU2yklu1isYm_4HyPstn7ehQilZduHw,4753305
|
@@ -23,8 +24,8 @@ not1mm/data/k6gte-not1mm.desktop,sha256=bSiSG7PzGygv0bBaF7Nf48PApVyrobSBVNk7j7wR
|
|
23
24
|
not1mm/data/k6gte.not1mm-128.png,sha256=ZP93MfRqr4WwsFCwg1m5MZjLs8bG895vDW9DDDn1B_Q,6076
|
24
25
|
not1mm/data/k6gte.not1mm-32.png,sha256=XdTsCa3xqwTfn26Ga7RwO_Vlbg_77RKkSc8bMxVcCac,1526
|
25
26
|
not1mm/data/k6gte.not1mm-64.png,sha256=6ku45Gq1g5ezh04F07osoKRtanb3e4kbx5XdIEh3N90,2925
|
26
|
-
not1mm/data/logwindow.ui,sha256=
|
27
|
-
not1mm/data/main.ui,sha256=
|
27
|
+
not1mm/data/logwindow.ui,sha256=hC_G_4UCxBogUrQ4NX-pY1cXVGQOltbRF361HbZG2cI,1229
|
28
|
+
not1mm/data/main.ui,sha256=X9sNqSZyKennX-7Ne4c8yLnkbN13T5YpDUeri-wPOn4,54070
|
28
29
|
not1mm/data/new_contest.ui,sha256=Xubngdbs_V_-o8huXzKOOaQOfj1NSXu9giIcaL4d0qk,21823
|
29
30
|
not1mm/data/not1mm.html,sha256=c9-mfjMwDt4f5pySUruz2gREW33CQ2_rCddM2z5CZQo,23273
|
30
31
|
not1mm/data/opon.ui,sha256=mC4OhoVIfR1H9IqHAKXliPMm8VOVmxSEadpsFQ7XnS4,2247
|
@@ -35,7 +36,8 @@ not1mm/data/radio_red.png,sha256=QvkMk7thd_hCEIyK5xGAG4xVVXivl39nwOfD8USDI20,957
|
|
35
36
|
not1mm/data/reddot.png,sha256=M33jEMoU8W4rQ4_MVyzzKxDPDte1ypKBch5VnUMNLKE,565
|
36
37
|
not1mm/data/settings.ui,sha256=7r4aZwxKUHQGm8NLQGLINurGMvT_5VMU9p2dznW25bA,40028
|
37
38
|
not1mm/data/ssbmacros.txt,sha256=0Qccj4y0nlK-w5da9a9ti-jILkURtwztoDuL_D0pEJM,470
|
38
|
-
not1mm/data/vfo.ui,sha256=
|
39
|
+
not1mm/data/vfo.ui,sha256=f18m5r3gMbm0xtPJAZH1qVvOggK24XKBL7OGmip_Ks8,2405
|
40
|
+
not1mm/data/vfo2.ui,sha256=f18m5r3gMbm0xtPJAZH1qVvOggK24XKBL7OGmip_Ks8,2405
|
39
41
|
not1mm/data/phonetics/0.wav,sha256=0OpYiR-3MK6fVHE6MB-HeOxSAPiDNMjqvx5JcIZtsQk,42590
|
40
42
|
not1mm/data/phonetics/1.wav,sha256=OEAavA8cfVxFZwaT0HY9Wg9NAGEPKBhwhEdzGXkQs_U,30248
|
41
43
|
not1mm/data/phonetics/2.wav,sha256=AmCfvo8y8BT9OlHkCs_N4y_mUAjmyG_x9ahbgiwU2FE,29584
|
@@ -85,68 +87,69 @@ not1mm/data/phonetics/y.wav,sha256=QINogHdj01-zkUX9E3fnVTzjGM8wc5F5NEGz-bSd3Ng,5
|
|
85
87
|
not1mm/data/phonetics/yourcall.wav,sha256=4kheHJmCiRDL2kjhlgXQ8_u_eEMgKxiNGu5UBk9k08E,46510
|
86
88
|
not1mm/data/phonetics/z.wav,sha256=arafCi7fwmBLdVDI-PRyaL4U-03PIQDhffwY5noJ_2c,51768
|
87
89
|
not1mm/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
88
|
-
not1mm/lib/about.py,sha256=
|
89
|
-
not1mm/lib/cat_interface.py,sha256=
|
90
|
-
not1mm/lib/cwinterface.py,sha256=
|
91
|
-
not1mm/lib/database.py,sha256=
|
92
|
-
not1mm/lib/edit_contact.py,sha256=
|
93
|
-
not1mm/lib/edit_macro.py,sha256=
|
94
|
-
not1mm/lib/edit_opon.py,sha256=
|
95
|
-
not1mm/lib/edit_station.py,sha256=
|
96
|
-
not1mm/lib/ham_utility.py,sha256=
|
97
|
-
not1mm/lib/lookup.py,sha256=
|
98
|
-
not1mm/lib/multicast.py,sha256=
|
99
|
-
not1mm/lib/n1mm.py,sha256=
|
100
|
-
not1mm/lib/new_contest.py,sha256=
|
90
|
+
not1mm/lib/about.py,sha256=3PSyHeNS9BIqhyY4QCm1a5Tzr7jMDOrkKnUWJh4j5lg,416
|
91
|
+
not1mm/lib/cat_interface.py,sha256=dr5bBcObNtRWVHr9A5kq9GCq0wQfOOfVhkrEAzJez90,15127
|
92
|
+
not1mm/lib/cwinterface.py,sha256=Seupz7tMkCvJ80mgmyaNU_1AUADsvNPkAfwDSlwibF0,3126
|
93
|
+
not1mm/lib/database.py,sha256=RQoj3JsTejMiiFIN42lY3N4jrj80htftdoFeRqVKnKs,42480
|
94
|
+
not1mm/lib/edit_contact.py,sha256=W4SrP3MHO0o87d02_9APx5pDaBPiCGwCNgMazTduFYA,353
|
95
|
+
not1mm/lib/edit_macro.py,sha256=1wyKiLYyTCvoVeIYRfZ7cu-OyfwDVEq6dsbeRyOdyXc,517
|
96
|
+
not1mm/lib/edit_opon.py,sha256=2_oJIpTbaXccPWvc4f9C_tRp2TFXHlhwL8xOvQrUmJI,359
|
97
|
+
not1mm/lib/edit_station.py,sha256=DQ-HW6RxIagyFHxj34-Ocbc5mXM11UsJ7ptXCreDeTQ,1964
|
98
|
+
not1mm/lib/ham_utility.py,sha256=pUrysod3wGk4BYOWDAKJxZZTiUNDE4ZzRk8S5ZnllNA,10978
|
99
|
+
not1mm/lib/lookup.py,sha256=WyLfb4i763fyRR9_QjV4eLexNxwsEcPUpuycevGuntw,13775
|
100
|
+
not1mm/lib/multicast.py,sha256=w4uFeZhjBFa_s5ltNGe2mTrG4r5xA2POtrxNLFKG8aQ,3196
|
101
|
+
not1mm/lib/n1mm.py,sha256=V1NiNyOHaPNYKe_vRsq44O1R42N8uS5PlfRa5Db4Tv0,5712
|
102
|
+
not1mm/lib/new_contest.py,sha256=EMiSYHijebaOZJBBJ2M94PZ9fmIr-EjonNPke2yEMto,350
|
101
103
|
not1mm/lib/plugin_common.py,sha256=AAKBPCXzTWZJb-h08uPNnHVG7bSCg7kwukc211gFivY,8605
|
102
|
-
not1mm/lib/select_contest.py,sha256=
|
103
|
-
not1mm/lib/settings.py,sha256=
|
104
|
-
not1mm/lib/super_check_partial.py,sha256=
|
105
|
-
not1mm/lib/version.py,sha256=
|
104
|
+
not1mm/lib/select_contest.py,sha256=Ezc7MTZXEbQ_nXK7gmghalqfbbDyxp0pAVt0-chBJOw,359
|
105
|
+
not1mm/lib/settings.py,sha256=9dyXiUZcrR57EVemGDrO2ad3HSMQbe5ngl_bxtZtEic,8877
|
106
|
+
not1mm/lib/super_check_partial.py,sha256=zX8OGNXP7GuigAG9bXyzTLG3_Ug5HqqzlZ1uPL6F8Ns,2299
|
107
|
+
not1mm/lib/version.py,sha256=xR-By9G65TFr0NJRvzJxtPVUkB6eBlNVpWZxRDFItUo,48
|
106
108
|
not1mm/lib/versiontest.py,sha256=8vDNptuBBunn-1IGkjNaquehqBYUJyjrPSF8Igmd4_Y,1286
|
107
|
-
not1mm/plugins/10_10_fall_cw.py,sha256=
|
108
|
-
not1mm/plugins/10_10_spring_cw.py,sha256=
|
109
|
-
not1mm/plugins/10_10_summer_phone.py,sha256=
|
110
|
-
not1mm/plugins/10_10_winter_phone.py,sha256=
|
109
|
+
not1mm/plugins/10_10_fall_cw.py,sha256=pG0cFmTNOFO03wXcI1a3EEaT1QK83yWIsrSdqCOU-gg,10834
|
110
|
+
not1mm/plugins/10_10_spring_cw.py,sha256=aWTohVrnZpT0SlQuqq7zxQaYe4SExEkOl3NI8xYYJWI,10840
|
111
|
+
not1mm/plugins/10_10_summer_phone.py,sha256=HMJYIC8hxQbc31BJv6f1BaZora8YWrDvptQPabNvjk4,10848
|
112
|
+
not1mm/plugins/10_10_winter_phone.py,sha256=csiQlznP7yOBqEhoEHvd5LKQ_2NGJk8Tul3xTwZO-Ug,10851
|
111
113
|
not1mm/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
112
|
-
not1mm/plugins/arrl_10m.py,sha256=
|
113
|
-
not1mm/plugins/arrl_dx_cw.py,sha256=
|
114
|
-
not1mm/plugins/arrl_dx_ssb.py,sha256=
|
115
|
-
not1mm/plugins/arrl_field_day.py,sha256=
|
114
|
+
not1mm/plugins/arrl_10m.py,sha256=EUmP3LFDqhL2mJxhsvN3dPEXJpfiazAoVMKHBipVoas,13643
|
115
|
+
not1mm/plugins/arrl_dx_cw.py,sha256=cNdVo58bbllTM4HzxVtnpwnlcBFGbh83isWSrDPaIEE,13688
|
116
|
+
not1mm/plugins/arrl_dx_ssb.py,sha256=Qw-jgCJ7isiVr-8wyQ1xuWpLJN3qlDucy0621sDL2Uc,13691
|
117
|
+
not1mm/plugins/arrl_field_day.py,sha256=sMBVPoCUkL6_3YNRNWdrdQNvEBM1aXGlC_eEgRmrPLs,10026
|
116
118
|
not1mm/plugins/arrl_rtty_ru.py,sha256=9v9wApmUZHAKX4t_O6hVqBnT7v5bqAGV8SjgDhfOuMs,7974
|
117
|
-
not1mm/plugins/arrl_ss_cw.py,sha256=
|
118
|
-
not1mm/plugins/arrl_ss_phone.py,sha256=
|
119
|
-
not1mm/plugins/arrl_vhf_jan.py,sha256=
|
120
|
-
not1mm/plugins/arrl_vhf_jun.py,sha256=
|
121
|
-
not1mm/plugins/arrl_vhf_sep.py,sha256=
|
122
|
-
not1mm/plugins/canada_day.py,sha256=
|
123
|
-
not1mm/plugins/cq_160_cw.py,sha256=
|
124
|
-
not1mm/plugins/cq_160_ssb.py,sha256=
|
125
|
-
not1mm/plugins/cq_wpx_cw.py,sha256=
|
126
|
-
not1mm/plugins/cq_wpx_ssb.py,sha256=
|
127
|
-
not1mm/plugins/cq_ww_cw.py,sha256=
|
128
|
-
not1mm/plugins/cq_ww_ssb.py,sha256=
|
129
|
-
not1mm/plugins/cwt.py,sha256=
|
130
|
-
not1mm/plugins/general_logging.py,sha256=
|
131
|
-
not1mm/plugins/iaru_hf.py,sha256=
|
132
|
-
not1mm/plugins/jidx_cw.py,sha256=
|
133
|
-
not1mm/plugins/jidx_ph.py,sha256=
|
134
|
-
not1mm/plugins/naqp_cw.py,sha256=
|
135
|
-
not1mm/plugins/naqp_ssb.py,sha256=
|
136
|
-
not1mm/plugins/phone_weekly_test.py,sha256=
|
137
|
-
not1mm/plugins/stew_perry_topband.py,sha256=
|
138
|
-
not1mm/plugins/winter_field_day.py,sha256=
|
119
|
+
not1mm/plugins/arrl_ss_cw.py,sha256=epwosJmLhrVBY5lVdRkT_z8vJzxUxbmwiK1PJz_LLzQ,13143
|
120
|
+
not1mm/plugins/arrl_ss_phone.py,sha256=oVw2z1IEc6-7GU-JM2PiOE83tob5JJcHXYPMf03x6fQ,13149
|
121
|
+
not1mm/plugins/arrl_vhf_jan.py,sha256=zGFYQ83F9tt-zM_1oL5n8c0gAyvekxF7WPAAEA79GT0,12438
|
122
|
+
not1mm/plugins/arrl_vhf_jun.py,sha256=zpIUoGIlRK9UN9BhhzfZlgfxvEJXO1Xl0U_CaD7doXI,11457
|
123
|
+
not1mm/plugins/arrl_vhf_sep.py,sha256=a3i5wmVWkEfo4A_3Hi4WS-6dQBCXdV_62SHhYTMclR4,11457
|
124
|
+
not1mm/plugins/canada_day.py,sha256=oyIPi73IoiF3-puYzcvXLVkchAeqemRvhHZPZvdICzc,11869
|
125
|
+
not1mm/plugins/cq_160_cw.py,sha256=I-z7Z3R3jEPL6qBChY9H4F3AW_gvEdrkYuDQ2EmtO2o,14018
|
126
|
+
not1mm/plugins/cq_160_ssb.py,sha256=nxIVfpF_QGR0gige5lUf1oEYRpT05eWtxCNUA7sjW_4,14061
|
127
|
+
not1mm/plugins/cq_wpx_cw.py,sha256=Ftw08EU8vYUIYgzJ-Olkt-qCWtfyBtFEGACQV-GMjA0,12378
|
128
|
+
not1mm/plugins/cq_wpx_ssb.py,sha256=zMh31RweV6EIORLfMUHFKzg7v4d-43H_N75r6wCLx2I,12466
|
129
|
+
not1mm/plugins/cq_ww_cw.py,sha256=gQ5XUfRXHER7dJzAbv8xx6WKlbNzoT0VmEmxYnMENpw,11083
|
130
|
+
not1mm/plugins/cq_ww_ssb.py,sha256=dsE-KIDk2_Zpx-x8R7LwAMpP0lNn5D0qz3okZ_iS-YM,11088
|
131
|
+
not1mm/plugins/cwt.py,sha256=abiNdx8lPSONkoSQZI-tV3nL2tMOgybOEY9LErqiAww,11976
|
132
|
+
not1mm/plugins/general_logging.py,sha256=kC3Gl-dxV9FwzkjOTLQwS3eHx3LLNrq6s5jPuT4Qn00,3369
|
133
|
+
not1mm/plugins/iaru_hf.py,sha256=M5c8FiyMyoIcUkV5-g5-nZ-ufW0ug4hTwVmY2awJY_c,11433
|
134
|
+
not1mm/plugins/jidx_cw.py,sha256=qHNJW6OnXzBdFQiL0Ua9c7cWkQuTPyKCDibma1OwumE,11049
|
135
|
+
not1mm/plugins/jidx_ph.py,sha256=UbawmW7obhjkRLa43V8o8rdkfReIKp_SM7k3EeLxAN8,11051
|
136
|
+
not1mm/plugins/naqp_cw.py,sha256=73aTpREZVtDqfEGYLGekqRLksEenpJ7EkIyZ2Zs4DMM,11472
|
137
|
+
not1mm/plugins/naqp_ssb.py,sha256=pof1k6Eg_MDQXSaCOJLh1jfVyyIri0LdHYrZQu7P_gs,11477
|
138
|
+
not1mm/plugins/phone_weekly_test.py,sha256=EfLQzKREEXO_Ljg-q3VWg87JfbPVar9ydNhCdmHCrt8,12278
|
139
|
+
not1mm/plugins/stew_perry_topband.py,sha256=bjcImkZhBXpw4XKogs85mpShz7QgYbVohvhFMQ050DI,10546
|
140
|
+
not1mm/plugins/winter_field_day.py,sha256=7JK-RS1abcj1xQLnTF8rIPHRpDzmp4sAFBBML8b-Lwk,10212
|
139
141
|
not1mm/testing/fakeflrig.py,sha256=_vJHGjARpSNxSZngkHNO_kkHoVnqtf--T6gwTAYnnZQ,2083
|
140
142
|
not1mm/testing/flrigclient.py,sha256=24r_0HqpoTjyJ6Bqg_HIC8Nn9wjtnwwWQ26I7UprwgA,1658
|
141
143
|
not1mm/testing/multicast_listener.py,sha256=2CkiyZ4EQxBX68_1QzGIX9g_UB9-CQq63OH-pUY3FiU,1051
|
142
144
|
not1mm/testing/n1mm_listener.py,sha256=UD-qyKEnppQua330WEFKMvMJaNjnYKi7dDuX_RGB5lQ,1099
|
143
145
|
not1mm/testing/simulant.py,sha256=kBqCZTe3ADEuHUsh9ygY9usn-jKe4EKRh7-L6tY6iYE,10948
|
144
146
|
not1mm/testing/test.py,sha256=97xdCpTVIWx1CUMU7JBrn9PMU7DqWnz6zO96XificC4,99
|
145
|
-
testing/
|
147
|
+
testing/detectdark.py,sha256=d2oUDqLkDLMCTFjW3lSJgaf-PgLDrk71gw2Cess5itY,895
|
148
|
+
testing/test.py,sha256=VkkKwKTJ4lqB7ozS9OEqy3NH67xU-_Dq0xkixKUdjrY,312
|
146
149
|
usb_vfo_knob/code.py,sha256=h59iPPlcYbkXmRcYPQHDBP0yfLEl7fY3VkiIszdQeyI,1057
|
147
|
-
not1mm-24.3.
|
148
|
-
not1mm-24.3.
|
149
|
-
not1mm-24.3.
|
150
|
-
not1mm-24.3.
|
151
|
-
not1mm-24.3.
|
152
|
-
not1mm-24.3.
|
150
|
+
not1mm-24.3.21.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
151
|
+
not1mm-24.3.21.dist-info/METADATA,sha256=wCb8l8Lz7tCkN5j0ACgHDn-_P8LMfIyWN4zPqx0VeYg,26168
|
152
|
+
not1mm-24.3.21.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
153
|
+
not1mm-24.3.21.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
|
154
|
+
not1mm-24.3.21.dist-info/top_level.txt,sha256=PBUZJeDgW5ta7ghk__UYh_ygOFIhe9ymJDaxEuVumFU,28
|
155
|
+
not1mm-24.3.21.dist-info/RECORD,,
|
testing/detectdark.py
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
import darkdetect
|
2
|
+
import sys
|
3
|
+
import threading
|
4
|
+
from PyQt5.QtWidgets import QApplication, QWidget
|
5
|
+
|
6
|
+
|
7
|
+
class Example(QWidget):
|
8
|
+
|
9
|
+
def __init__(self):
|
10
|
+
super().__init__()
|
11
|
+
|
12
|
+
self.init_ui()
|
13
|
+
|
14
|
+
def init_ui(self):
|
15
|
+
self.setWindowTitle("Darkdetect Listener Example")
|
16
|
+
self.setGeometry(300, 300, 300, 300)
|
17
|
+
|
18
|
+
self.show()
|
19
|
+
|
20
|
+
def on_dark_mode_changed(self, dark_mode):
|
21
|
+
if dark_mode:
|
22
|
+
self.setStyleSheet("background-color: black; color: white;")
|
23
|
+
else:
|
24
|
+
self.setStyleSheet("background-color: white; color: black;")
|
25
|
+
|
26
|
+
|
27
|
+
if __name__ == "__main__":
|
28
|
+
app = QApplication(sys.argv)
|
29
|
+
|
30
|
+
listener = darkdetect.Listener(print)
|
31
|
+
t = threading.Thread(target=listener.listen, daemon=True)
|
32
|
+
# OR: t = threading.Thread(target=darkdetect.listener, args=(print,), daemon=True)
|
33
|
+
t.start()
|
34
|
+
example = Example()
|
35
|
+
sys.exit(app.exec_())
|
testing/test.py
CHANGED
@@ -1,15 +1,17 @@
|
|
1
|
-
|
1
|
+
import sys
|
2
2
|
|
3
|
-
import
|
3
|
+
from PyQt6.QtWidgets import QApplication, QMainWindow, QPushButton
|
4
4
|
|
5
|
-
|
6
|
-
if len(proc.cmdline()) == 2:
|
7
|
-
print(proc.cmdline()[1])
|
5
|
+
import qdarktheme
|
8
6
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
print(__package__)
|
13
|
-
print(__loader__)
|
7
|
+
app = QApplication(sys.argv)
|
8
|
+
# Apply dark theme.
|
9
|
+
qdarktheme.setup_theme()
|
14
10
|
|
15
|
-
|
11
|
+
main_win = QMainWindow()
|
12
|
+
push_button = QPushButton("PyQtDarkTheme!!")
|
13
|
+
main_win.setCentralWidget(push_button)
|
14
|
+
|
15
|
+
main_win.show()
|
16
|
+
|
17
|
+
app.exec()
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|