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 +28 -3
- not1mm/bandmap.py +70 -5
- not1mm/data/main.ui +12 -5
- not1mm/lib/cat_interface.py +38 -0
- not1mm/lib/version.py +1 -1
- not1mm/logwindow.py +9 -0
- not1mm/plugins/cq_wpx_cw.py +2 -4
- {not1mm-23.5.6.dist-info → not1mm-23.5.8.dist-info}/METADATA +7 -12
- {not1mm-23.5.6.dist-info → not1mm-23.5.8.dist-info}/RECORD +13 -13
- {not1mm-23.5.6.dist-info → not1mm-23.5.8.dist-info}/LICENSE +0 -0
- {not1mm-23.5.6.dist-info → not1mm-23.5.8.dist-info}/WHEEL +0 -0
- {not1mm-23.5.6.dist-info → not1mm-23.5.8.dist-info}/entry_points.txt +0 -0
- {not1mm-23.5.6.dist-info → not1mm-23.5.8.dist-info}/top_level.txt +0 -0
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
|
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
|
-
|
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
|
-
|
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
|
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>
|
10
|
-
<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>
|
1023
|
-
<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>
|
not1mm/lib/cat_interface.py
CHANGED
@@ -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.
|
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)
|
not1mm/plugins/cq_wpx_cw.py
CHANGED
@@ -45,10 +45,8 @@ def interface(self):
|
|
45
45
|
self.field2.show()
|
46
46
|
self.field3.show()
|
47
47
|
self.field4.show()
|
48
|
-
|
49
|
-
|
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.
|
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
|
-
- [
|
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
|
-
##
|
99
|
+
## Current state
|
101
100
|
|
102
|
-
|
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
|

|
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-
|
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=
|
3
|
-
not1mm/bandmap.py,sha256=
|
4
|
-
not1mm/logwindow.py,sha256=
|
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=
|
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=
|
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=
|
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=
|
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.
|
119
|
-
not1mm-23.5.
|
120
|
-
not1mm-23.5.
|
121
|
-
not1mm-23.5.
|
122
|
-
not1mm-23.5.
|
123
|
-
not1mm-23.5.
|
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,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|