not1mm 24.3.27__py3-none-any.whl → 24.4.1.1__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 +3 -9
- not1mm/checkwindow.py +82 -36
- not1mm/data/checkwindow.ui +152 -100
- not1mm/data/logwindow.ui +40 -50
- not1mm/data/logwindowx.ui +66 -0
- not1mm/data/vfo.ui +39 -70
- not1mm/lib/version.py +1 -1
- not1mm/logwindow.py +2 -1
- not1mm/vfo.py +2 -2
- {not1mm-24.3.27.dist-info → not1mm-24.4.1.1.dist-info}/METADATA +40 -56
- {not1mm-24.3.27.dist-info → not1mm-24.4.1.1.dist-info}/RECORD +15 -14
- {not1mm-24.3.27.dist-info → not1mm-24.4.1.1.dist-info}/LICENSE +0 -0
- {not1mm-24.3.27.dist-info → not1mm-24.4.1.1.dist-info}/WHEEL +0 -0
- {not1mm-24.3.27.dist-info → not1mm-24.4.1.1.dist-info}/entry_points.txt +0 -0
- {not1mm-24.3.27.dist-info → not1mm-24.4.1.1.dist-info}/top_level.txt +0 -0
not1mm/__main__.py
CHANGED
@@ -1366,9 +1366,7 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
1366
1366
|
def launch_log_window(self) -> None:
|
1367
1367
|
"""Launch the log window"""
|
1368
1368
|
if not self.log_window:
|
1369
|
-
|
1370
|
-
self.log_window = QDockWidget(log_widget.property("windowTitle"), self)
|
1371
|
-
self.log_window.setWidget(log_widget)
|
1369
|
+
self.log_window = LogWindow()
|
1372
1370
|
self.addDockWidget(Qt.BottomDockWidgetArea, self.log_window)
|
1373
1371
|
self.log_window.show()
|
1374
1372
|
|
@@ -1382,18 +1380,14 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
1382
1380
|
def launch_check_window(self) -> None:
|
1383
1381
|
"""Launch the check window"""
|
1384
1382
|
if not self.check_window:
|
1385
|
-
|
1386
|
-
self.check_window = QDockWidget(check_widget.property("windowTitle"), self)
|
1387
|
-
self.check_window.setWidget(check_widget)
|
1383
|
+
self.check_window = CheckWindow()
|
1388
1384
|
self.addDockWidget(Qt.RightDockWidgetArea, self.check_window)
|
1389
1385
|
self.check_window.show()
|
1390
1386
|
|
1391
1387
|
def launch_vfo(self) -> None:
|
1392
1388
|
"""Launch the VFO window"""
|
1393
1389
|
if not self.vfo_window:
|
1394
|
-
|
1395
|
-
self.vfo_window = QDockWidget(vfo_widget.property("windowTitle"), self)
|
1396
|
-
self.vfo_window.setWidget(vfo_widget)
|
1390
|
+
self.vfo_window = VfoWindow()
|
1397
1391
|
self.addDockWidget(Qt.RightDockWidgetArea, self.vfo_window)
|
1398
1392
|
self.vfo_window.show()
|
1399
1393
|
|
not1mm/checkwindow.py
CHANGED
@@ -10,11 +10,12 @@ import os
|
|
10
10
|
import platform
|
11
11
|
import queue
|
12
12
|
from json import loads
|
13
|
+
import Levenshtein
|
13
14
|
|
14
15
|
from PyQt5 import QtGui, uic
|
15
16
|
from PyQt5.QtCore import Qt
|
16
|
-
from PyQt5.QtWidgets import
|
17
|
-
from PyQt5.
|
17
|
+
from PyQt5.QtWidgets import QLabel, QVBoxLayout, QWidget, QDockWidget
|
18
|
+
from PyQt5.QtGui import QMouseEvent
|
18
19
|
|
19
20
|
import not1mm.fsutils as fsutils
|
20
21
|
from not1mm.lib.database import DataBase
|
@@ -24,12 +25,21 @@ from not1mm.lib.super_check_partial import SCP
|
|
24
25
|
logger = logging.getLogger(__name__)
|
25
26
|
|
26
27
|
|
27
|
-
class CheckWindow(
|
28
|
+
class CheckWindow(QDockWidget):
|
28
29
|
"""The check window. Shows list or probable stations."""
|
29
30
|
|
30
31
|
multicast_interface = None
|
31
32
|
dbname = None
|
32
33
|
pref = {}
|
34
|
+
call = None
|
35
|
+
masterLayout: QVBoxLayout = None
|
36
|
+
dxcLayout: QVBoxLayout = None
|
37
|
+
qsoLayout: QVBoxLayout = None
|
38
|
+
|
39
|
+
character_remove_color = "#cc3333"
|
40
|
+
character_add_color = "#3333cc"
|
41
|
+
|
42
|
+
masterScrollWidget: QWidget = None
|
33
43
|
|
34
44
|
def __init__(self, *args, **kwargs):
|
35
45
|
super().__init__(*args, **kwargs)
|
@@ -42,15 +52,6 @@ class CheckWindow(QWidget):
|
|
42
52
|
|
43
53
|
uic.loadUi(fsutils.APP_DATA_PATH / "checkwindow.ui", self)
|
44
54
|
|
45
|
-
self.logList.clear()
|
46
|
-
self.logList.itemClicked.connect(self.item_clicked)
|
47
|
-
self.masterList.clear()
|
48
|
-
self.masterList.itemClicked.connect(self.item_clicked)
|
49
|
-
self.telnetList.clear()
|
50
|
-
self.telnetList.itemClicked.connect(self.item_clicked)
|
51
|
-
self.callhistoryList.clear()
|
52
|
-
self.callhistoryList.hide()
|
53
|
-
self.callhistoryListLabel.hide()
|
54
55
|
self.mscp = SCP(fsutils.APP_DATA_PATH)
|
55
56
|
self._udpwatch = None
|
56
57
|
self.udp_fifo = queue.Queue()
|
@@ -67,7 +68,7 @@ class CheckWindow(QWidget):
|
|
67
68
|
cmd = {}
|
68
69
|
cmd["cmd"] = "CHANGECALL"
|
69
70
|
cmd["station"] = platform.node()
|
70
|
-
cmd["call"] = item
|
71
|
+
cmd["call"] = item
|
71
72
|
self.multicast_interface.send_as_json(cmd)
|
72
73
|
|
73
74
|
def setDarkMode(self, dark: bool):
|
@@ -99,6 +100,7 @@ class CheckWindow(QWidget):
|
|
99
100
|
)
|
100
101
|
|
101
102
|
self.setPalette(darkPalette)
|
103
|
+
# self.CheckPartialWindow.setPalette(darkPalette)
|
102
104
|
else:
|
103
105
|
palette = self.style().standardPalette()
|
104
106
|
self.setPalette(palette)
|
@@ -151,11 +153,12 @@ class CheckWindow(QWidget):
|
|
151
153
|
self.clear_lists()
|
152
154
|
if json_data.get("cmd", "") == "CALLCHANGED":
|
153
155
|
call = json_data.get("call", "")
|
156
|
+
self.call = call
|
154
157
|
self.master_list(call)
|
155
158
|
self.log_list(call)
|
156
159
|
continue
|
157
160
|
if json_data.get("cmd", "") == "CHECKSPOTS":
|
158
|
-
self.
|
161
|
+
self.populate_layout(self.dxcLayout, [])
|
159
162
|
spots = json_data.get("spots", [])
|
160
163
|
self.telnet_list(spots)
|
161
164
|
continue
|
@@ -178,10 +181,9 @@ class CheckWindow(QWidget):
|
|
178
181
|
-------
|
179
182
|
None
|
180
183
|
"""
|
181
|
-
self.
|
182
|
-
self.
|
183
|
-
self.
|
184
|
-
self.callhistoryList.clear()
|
184
|
+
self.populate_layout(self.masterLayout, [])
|
185
|
+
self.populate_layout(self.qsoLayout, [])
|
186
|
+
self.populate_layout(self.dxcLayout, [])
|
185
187
|
|
186
188
|
def master_list(self, call: str) -> None:
|
187
189
|
"""
|
@@ -196,14 +198,9 @@ class CheckWindow(QWidget):
|
|
196
198
|
-------
|
197
199
|
None
|
198
200
|
"""
|
201
|
+
self.populate_layout(self.masterLayout, [])
|
199
202
|
results = self.mscp.super_check(call)
|
200
|
-
self.
|
201
|
-
for item in results:
|
202
|
-
if "#" in item:
|
203
|
-
continue
|
204
|
-
listItem = QListWidgetItem(item)
|
205
|
-
self.masterList.addItem(listItem)
|
206
|
-
self.masterList.show()
|
203
|
+
self.populate_layout(self.masterLayout, filter(lambda x: "#" not in x, results))
|
207
204
|
|
208
205
|
def log_list(self, call: str) -> None:
|
209
206
|
"""
|
@@ -218,13 +215,10 @@ class CheckWindow(QWidget):
|
|
218
215
|
-------
|
219
216
|
None
|
220
217
|
"""
|
221
|
-
self.
|
218
|
+
self.populate_layout(self.qsoLayout, [])
|
222
219
|
if call:
|
223
220
|
result = self.database.get_like_calls_and_bands(call)
|
224
|
-
|
225
|
-
listItem = QListWidgetItem(calls)
|
226
|
-
self.logList.addItem(listItem)
|
227
|
-
self.logList.show()
|
221
|
+
self.populate_layout(self.qsoLayout, result)
|
228
222
|
|
229
223
|
def telnet_list(self, spots: list) -> None:
|
230
224
|
"""
|
@@ -239,10 +233,62 @@ class CheckWindow(QWidget):
|
|
239
233
|
-------
|
240
234
|
None
|
241
235
|
"""
|
242
|
-
self.
|
236
|
+
self.populate_layout(self.dxcLayout, [])
|
243
237
|
if spots:
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
238
|
+
self.populate_layout(
|
239
|
+
self.dxcLayout,
|
240
|
+
filter(lambda x: x, [x.get("callsign", None) for x in spots]),
|
241
|
+
)
|
242
|
+
|
243
|
+
def populate_layout(self, layout, call_list):
|
244
|
+
for i in reversed(range(layout.count())):
|
245
|
+
if layout.itemAt(i).widget():
|
246
|
+
layout.itemAt(i).widget().setParent(None)
|
247
|
+
else:
|
248
|
+
layout.removeItem(layout.itemAt(i))
|
249
|
+
labels = []
|
250
|
+
for call in call_list:
|
251
|
+
if call:
|
252
|
+
if self.call:
|
253
|
+
label_text = ""
|
254
|
+
for tag, i1, i2, j1, j2 in Levenshtein.opcodes(call, self.call):
|
255
|
+
# logger.debug('{:7} a[{}:{}] --> b[{}:{}] {!r:>8} --> {!r}'.format(
|
256
|
+
# tag, i1, i2, j1, j2, call[i1:i2], self.call[j1:j2]))
|
257
|
+
if tag == "equal":
|
258
|
+
label_text += call[i1:i2]
|
259
|
+
continue
|
260
|
+
elif tag == "replace":
|
261
|
+
label_text += f"<span style='background-color: {self.character_remove_color};'>{call[i1:i2]}</span>"
|
262
|
+
elif tag == "insert" or tag == "delete":
|
263
|
+
label_text += f"<span style='background-color: {self.character_add_color};'>{call[i1:i2]}</span>"
|
264
|
+
labels.append(
|
265
|
+
(
|
266
|
+
Levenshtein.hamming(call, self.call),
|
267
|
+
CallLabel(
|
268
|
+
label_text, call=call, callback=self.item_clicked
|
269
|
+
),
|
270
|
+
)
|
271
|
+
)
|
272
|
+
|
273
|
+
for _, label in sorted(labels, key=lambda x: x[0]):
|
274
|
+
layout.addWidget(label)
|
275
|
+
# top aligns
|
276
|
+
layout.addStretch(0)
|
277
|
+
|
278
|
+
|
279
|
+
class CallLabel(QLabel):
|
280
|
+
call: str = None
|
281
|
+
|
282
|
+
def __init__(
|
283
|
+
self,
|
284
|
+
*args,
|
285
|
+
call=None,
|
286
|
+
callback=None,
|
287
|
+
):
|
288
|
+
super().__init__(*args)
|
289
|
+
self.call = call
|
290
|
+
self.callback = callback
|
291
|
+
|
292
|
+
def mouseDoubleClickEvent(self, e: QMouseEvent) -> None:
|
293
|
+
if self.call and self.callback:
|
294
|
+
self.callback(self.call)
|
not1mm/data/checkwindow.ui
CHANGED
@@ -1,119 +1,171 @@
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
2
2
|
<ui version="4.0">
|
3
|
-
<class>
|
4
|
-
<widget class="
|
3
|
+
<class>CheckPartialWindow</class>
|
4
|
+
<widget class="QDockWidget" name="CheckPartialWindow">
|
5
5
|
<property name="geometry">
|
6
6
|
<rect>
|
7
7
|
<x>0</x>
|
8
8
|
<y>0</y>
|
9
|
-
<width>
|
10
|
-
<height>
|
9
|
+
<width>322</width>
|
10
|
+
<height>374</height>
|
11
11
|
</rect>
|
12
12
|
</property>
|
13
13
|
<property name="font">
|
14
14
|
<font>
|
15
15
|
<family>JetBrains Mono</family>
|
16
|
-
<pointsize>12</pointsize>
|
17
16
|
</font>
|
18
17
|
</property>
|
18
|
+
<property name="focusPolicy">
|
19
|
+
<enum>Qt::NoFocus</enum>
|
20
|
+
</property>
|
19
21
|
<property name="windowTitle">
|
20
|
-
<string>
|
22
|
+
<string>CheckPartial</string>
|
21
23
|
</property>
|
22
|
-
<
|
23
|
-
<
|
24
|
-
<
|
25
|
-
|
26
|
-
|
27
|
-
<
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
<
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
<
|
67
|
-
<
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
24
|
+
<widget class="QWidget" name="widget">
|
25
|
+
<layout class="QGridLayout" name="checkpartialgridlayout">
|
26
|
+
<property name="margin" stdset="0">
|
27
|
+
<number>2</number>
|
28
|
+
</property>
|
29
|
+
<item row="1" column="1">
|
30
|
+
<widget class="QScrollArea" name="masterAreaScroll">
|
31
|
+
<property name="focusPolicy">
|
32
|
+
<enum>Qt::ClickFocus</enum>
|
33
|
+
</property>
|
34
|
+
<property name="sizeAdjustPolicy">
|
35
|
+
<enum>QAbstractScrollArea::AdjustToContents</enum>
|
36
|
+
</property>
|
37
|
+
<property name="widgetResizable">
|
38
|
+
<bool>true</bool>
|
39
|
+
</property>
|
40
|
+
<widget class="QWidget" name="masterScrollWidget">
|
41
|
+
<property name="geometry">
|
42
|
+
<rect>
|
43
|
+
<x>0</x>
|
44
|
+
<y>0</y>
|
45
|
+
<width>96</width>
|
46
|
+
<height>308</height>
|
47
|
+
</rect>
|
48
|
+
</property>
|
49
|
+
<layout class="QVBoxLayout" name="masterLayout">
|
50
|
+
<property name="spacing">
|
51
|
+
<number>0</number>
|
52
|
+
</property>
|
53
|
+
<property name="margin" stdset="0">
|
54
|
+
<number>0</number>
|
55
|
+
</property>
|
56
|
+
</layout>
|
57
|
+
</widget>
|
58
|
+
</widget>
|
59
|
+
</item>
|
60
|
+
<item row="1" column="2">
|
61
|
+
<widget class="QScrollArea" name="dxcAreaScroll">
|
62
|
+
<property name="focusPolicy">
|
63
|
+
<enum>Qt::ClickFocus</enum>
|
64
|
+
</property>
|
65
|
+
<property name="sizeAdjustPolicy">
|
66
|
+
<enum>QAbstractScrollArea::AdjustToContents</enum>
|
67
|
+
</property>
|
68
|
+
<property name="widgetResizable">
|
69
|
+
<bool>true</bool>
|
70
|
+
</property>
|
71
|
+
<widget class="QWidget" name="dxcScrollWidget">
|
72
|
+
<property name="geometry">
|
73
|
+
<rect>
|
74
|
+
<x>0</x>
|
75
|
+
<y>0</y>
|
76
|
+
<width>95</width>
|
77
|
+
<height>308</height>
|
78
|
+
</rect>
|
79
|
+
</property>
|
80
|
+
<layout class="QVBoxLayout" name="dxcLayout">
|
81
|
+
<property name="spacing">
|
82
|
+
<number>0</number>
|
83
|
+
</property>
|
84
|
+
<property name="margin" stdset="0">
|
85
|
+
<number>0</number>
|
86
|
+
</property>
|
87
|
+
</layout>
|
88
|
+
</widget>
|
89
|
+
</widget>
|
90
|
+
</item>
|
91
|
+
<item row="1" column="0">
|
92
|
+
<widget class="QScrollArea" name="qsoAreaScroll">
|
93
|
+
<property name="focusPolicy">
|
94
|
+
<enum>Qt::ClickFocus</enum>
|
95
|
+
</property>
|
96
|
+
<property name="sizeAdjustPolicy">
|
97
|
+
<enum>QAbstractScrollArea::AdjustToContents</enum>
|
98
|
+
</property>
|
99
|
+
<property name="widgetResizable">
|
100
|
+
<bool>true</bool>
|
101
|
+
</property>
|
102
|
+
<widget class="QWidget" name="qsoScrollWidget">
|
103
|
+
<property name="geometry">
|
104
|
+
<rect>
|
105
|
+
<x>0</x>
|
106
|
+
<y>0</y>
|
107
|
+
<width>95</width>
|
108
|
+
<height>308</height>
|
109
|
+
</rect>
|
110
|
+
</property>
|
111
|
+
<layout class="QVBoxLayout" name="qsoLayout">
|
112
|
+
<property name="spacing">
|
113
|
+
<number>0</number>
|
114
|
+
</property>
|
115
|
+
<property name="margin" stdset="0">
|
116
|
+
<number>0</number>
|
117
|
+
</property>
|
118
|
+
</layout>
|
119
|
+
</widget>
|
120
|
+
</widget>
|
121
|
+
</item>
|
122
|
+
<item row="0" column="0">
|
123
|
+
<widget class="QLabel" name="logListLabel">
|
124
|
+
<property name="font">
|
125
|
+
<font>
|
126
|
+
<family>JetBrains Mono</family>
|
127
|
+
<pointsize>10</pointsize>
|
128
|
+
</font>
|
129
|
+
</property>
|
130
|
+
<property name="text">
|
131
|
+
<string>Log</string>
|
132
|
+
</property>
|
133
|
+
</widget>
|
134
|
+
</item>
|
135
|
+
<item row="0" column="1">
|
136
|
+
<widget class="QLabel" name="masterListLabel">
|
137
|
+
<property name="font">
|
138
|
+
<font>
|
139
|
+
<family>JetBrains Mono</family>
|
140
|
+
<pointsize>10</pointsize>
|
141
|
+
</font>
|
142
|
+
</property>
|
143
|
+
<property name="text">
|
144
|
+
<string>Master</string>
|
145
|
+
</property>
|
146
|
+
</widget>
|
147
|
+
</item>
|
148
|
+
<item row="0" column="2">
|
149
|
+
<widget class="QLabel" name="telnetListLabel">
|
150
|
+
<property name="font">
|
151
|
+
<font>
|
152
|
+
<family>JetBrains Mono</family>
|
153
|
+
<pointsize>10</pointsize>
|
154
|
+
</font>
|
155
|
+
</property>
|
156
|
+
<property name="text">
|
157
|
+
<string>DXC</string>
|
158
|
+
</property>
|
159
|
+
</widget>
|
160
|
+
</item>
|
161
|
+
</layout>
|
162
|
+
</widget>
|
116
163
|
</widget>
|
164
|
+
<tabstops>
|
165
|
+
<tabstop>dxcAreaScroll</tabstop>
|
166
|
+
<tabstop>qsoAreaScroll</tabstop>
|
167
|
+
<tabstop>masterAreaScroll</tabstop>
|
168
|
+
</tabstops>
|
117
169
|
<resources/>
|
118
170
|
<connections/>
|
119
171
|
</ui>
|
not1mm/data/logwindow.ui
CHANGED
@@ -1,65 +1,55 @@
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
2
2
|
<ui version="4.0">
|
3
|
-
<class>
|
4
|
-
<widget class="
|
3
|
+
<class>DockWidget</class>
|
4
|
+
<widget class="QDockWidget" name="DockWidget">
|
5
5
|
<property name="geometry">
|
6
6
|
<rect>
|
7
7
|
<x>0</x>
|
8
8
|
<y>0</y>
|
9
|
-
<width>
|
10
|
-
<height>
|
9
|
+
<width>818</width>
|
10
|
+
<height>374</height>
|
11
11
|
</rect>
|
12
12
|
</property>
|
13
13
|
<property name="windowTitle">
|
14
|
-
<string>
|
14
|
+
<string>DockWidget</string>
|
15
15
|
</property>
|
16
|
-
<
|
17
|
-
<
|
18
|
-
<
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
</property>
|
23
|
-
<property name="rightMargin">
|
24
|
-
<number>2</number>
|
25
|
-
</property>
|
26
|
-
<property name="bottomMargin">
|
27
|
-
<number>2</number>
|
28
|
-
</property>
|
29
|
-
<item>
|
30
|
-
<widget class="QSplitter" name="splitter">
|
31
|
-
<property name="orientation">
|
32
|
-
<enum>Qt::Vertical</enum>
|
33
|
-
</property>
|
34
|
-
<widget class="QTableWidget" name="generalLog">
|
35
|
-
<property name="font">
|
36
|
-
<font>
|
37
|
-
<family>JetBrains Mono</family>
|
38
|
-
</font>
|
39
|
-
</property>
|
40
|
-
<property name="focusPolicy">
|
41
|
-
<enum>Qt::NoFocus</enum>
|
42
|
-
</property>
|
43
|
-
<property name="tabKeyNavigation">
|
44
|
-
<bool>false</bool>
|
45
|
-
</property>
|
46
|
-
</widget>
|
47
|
-
<widget class="QTableWidget" name="focusedLog">
|
48
|
-
<property name="font">
|
49
|
-
<font>
|
50
|
-
<family>JetBrains Mono</family>
|
51
|
-
</font>
|
52
|
-
</property>
|
53
|
-
<property name="focusPolicy">
|
54
|
-
<enum>Qt::NoFocus</enum>
|
55
|
-
</property>
|
56
|
-
<property name="tabKeyNavigation">
|
57
|
-
<bool>false</bool>
|
16
|
+
<widget class="QWidget" name="dockWidgetContents">
|
17
|
+
<layout class="QVBoxLayout" name="verticalLayout">
|
18
|
+
<item>
|
19
|
+
<widget class="QSplitter" name="splitter">
|
20
|
+
<property name="orientation">
|
21
|
+
<enum>Qt::Vertical</enum>
|
58
22
|
</property>
|
23
|
+
<widget class="QTableWidget" name="generalLog">
|
24
|
+
<property name="font">
|
25
|
+
<font>
|
26
|
+
<family>JetBrains Mono</family>
|
27
|
+
</font>
|
28
|
+
</property>
|
29
|
+
<property name="focusPolicy">
|
30
|
+
<enum>Qt::NoFocus</enum>
|
31
|
+
</property>
|
32
|
+
<property name="tabKeyNavigation">
|
33
|
+
<bool>false</bool>
|
34
|
+
</property>
|
35
|
+
</widget>
|
36
|
+
<widget class="QTableWidget" name="focusedLog">
|
37
|
+
<property name="font">
|
38
|
+
<font>
|
39
|
+
<family>JetBrains Mono</family>
|
40
|
+
</font>
|
41
|
+
</property>
|
42
|
+
<property name="focusPolicy">
|
43
|
+
<enum>Qt::NoFocus</enum>
|
44
|
+
</property>
|
45
|
+
<property name="tabKeyNavigation">
|
46
|
+
<bool>false</bool>
|
47
|
+
</property>
|
48
|
+
</widget>
|
59
49
|
</widget>
|
60
|
-
</
|
61
|
-
</
|
62
|
-
</
|
50
|
+
</item>
|
51
|
+
</layout>
|
52
|
+
</widget>
|
63
53
|
</widget>
|
64
54
|
<resources/>
|
65
55
|
<connections/>
|
@@ -0,0 +1,66 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<ui version="4.0">
|
3
|
+
<class>LogWindow</class>
|
4
|
+
<widget class="QWidget" name="LogWindow">
|
5
|
+
<property name="geometry">
|
6
|
+
<rect>
|
7
|
+
<x>0</x>
|
8
|
+
<y>0</y>
|
9
|
+
<width>825</width>
|
10
|
+
<height>392</height>
|
11
|
+
</rect>
|
12
|
+
</property>
|
13
|
+
<property name="windowTitle">
|
14
|
+
<string>QSO Logs</string>
|
15
|
+
</property>
|
16
|
+
<layout class="QVBoxLayout" name="verticalLayout">
|
17
|
+
<property name="leftMargin">
|
18
|
+
<number>2</number>
|
19
|
+
</property>
|
20
|
+
<property name="topMargin">
|
21
|
+
<number>2</number>
|
22
|
+
</property>
|
23
|
+
<property name="rightMargin">
|
24
|
+
<number>2</number>
|
25
|
+
</property>
|
26
|
+
<property name="bottomMargin">
|
27
|
+
<number>2</number>
|
28
|
+
</property>
|
29
|
+
<item>
|
30
|
+
<widget class="QSplitter" name="splitter">
|
31
|
+
<property name="orientation">
|
32
|
+
<enum>Qt::Vertical</enum>
|
33
|
+
</property>
|
34
|
+
<widget class="QTableWidget" name="generalLog">
|
35
|
+
<property name="font">
|
36
|
+
<font>
|
37
|
+
<family>JetBrains Mono</family>
|
38
|
+
</font>
|
39
|
+
</property>
|
40
|
+
<property name="focusPolicy">
|
41
|
+
<enum>Qt::NoFocus</enum>
|
42
|
+
</property>
|
43
|
+
<property name="tabKeyNavigation">
|
44
|
+
<bool>false</bool>
|
45
|
+
</property>
|
46
|
+
</widget>
|
47
|
+
<widget class="QTableWidget" name="focusedLog">
|
48
|
+
<property name="font">
|
49
|
+
<font>
|
50
|
+
<family>JetBrains Mono</family>
|
51
|
+
</font>
|
52
|
+
</property>
|
53
|
+
<property name="focusPolicy">
|
54
|
+
<enum>Qt::NoFocus</enum>
|
55
|
+
</property>
|
56
|
+
<property name="tabKeyNavigation">
|
57
|
+
<bool>false</bool>
|
58
|
+
</property>
|
59
|
+
</widget>
|
60
|
+
</widget>
|
61
|
+
</item>
|
62
|
+
</layout>
|
63
|
+
</widget>
|
64
|
+
<resources/>
|
65
|
+
<connections/>
|
66
|
+
</ui>
|
not1mm/data/vfo.ui
CHANGED
@@ -1,83 +1,52 @@
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
2
2
|
<ui version="4.0">
|
3
|
-
<class>
|
4
|
-
<widget class="
|
3
|
+
<class>DockWidget</class>
|
4
|
+
<widget class="QDockWidget" name="DockWidget">
|
5
5
|
<property name="geometry">
|
6
6
|
<rect>
|
7
7
|
<x>0</x>
|
8
8
|
<y>0</y>
|
9
|
-
<width>
|
10
|
-
<height>
|
9
|
+
<width>304</width>
|
10
|
+
<height>132</height>
|
11
11
|
</rect>
|
12
12
|
</property>
|
13
13
|
<property name="windowTitle">
|
14
|
-
<string>
|
14
|
+
<string>DockWidget</string>
|
15
15
|
</property>
|
16
|
-
<
|
17
|
-
<
|
18
|
-
<
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
<
|
24
|
-
<
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
<property name="autoFillBackground">
|
51
|
-
<bool>false</bool>
|
52
|
-
</property>
|
53
|
-
<property name="smallDecimalPoint">
|
54
|
-
<bool>false</bool>
|
55
|
-
</property>
|
56
|
-
<property name="digitCount">
|
57
|
-
<number>11</number>
|
58
|
-
</property>
|
59
|
-
<property name="mode">
|
60
|
-
<enum>QLCDNumber::Dec</enum>
|
61
|
-
</property>
|
62
|
-
<property name="segmentStyle">
|
63
|
-
<enum>QLCDNumber::Flat</enum>
|
64
|
-
</property>
|
65
|
-
<property name="intValue" stdset="0">
|
66
|
-
<number>14032000</number>
|
67
|
-
</property>
|
68
|
-
</widget>
|
69
|
-
</item>
|
70
|
-
</layout>
|
71
|
-
</widget>
|
72
|
-
</item>
|
73
|
-
</layout>
|
74
|
-
</item>
|
75
|
-
</layout>
|
76
|
-
<action name="actionQuit">
|
77
|
-
<property name="text">
|
78
|
-
<string>Quit</string>
|
79
|
-
</property>
|
80
|
-
</action>
|
16
|
+
<widget class="QWidget" name="dockWidgetContents">
|
17
|
+
<layout class="QGridLayout" name="gridLayout_2">
|
18
|
+
<item row="0" column="0">
|
19
|
+
<widget class="QFrame" name="frame">
|
20
|
+
<property name="frameShape">
|
21
|
+
<enum>QFrame::StyledPanel</enum>
|
22
|
+
</property>
|
23
|
+
<property name="frameShadow">
|
24
|
+
<enum>QFrame::Raised</enum>
|
25
|
+
</property>
|
26
|
+
<layout class="QGridLayout" name="gridLayout">
|
27
|
+
<item row="0" column="0">
|
28
|
+
<widget class="QLCDNumber" name="lcdNumber">
|
29
|
+
<property name="font">
|
30
|
+
<font>
|
31
|
+
<pointsize>25</pointsize>
|
32
|
+
</font>
|
33
|
+
</property>
|
34
|
+
<property name="digitCount">
|
35
|
+
<number>11</number>
|
36
|
+
</property>
|
37
|
+
<property name="segmentStyle">
|
38
|
+
<enum>QLCDNumber::Flat</enum>
|
39
|
+
</property>
|
40
|
+
<property name="intValue" stdset="0">
|
41
|
+
<number>14032000</number>
|
42
|
+
</property>
|
43
|
+
</widget>
|
44
|
+
</item>
|
45
|
+
</layout>
|
46
|
+
</widget>
|
47
|
+
</item>
|
48
|
+
</layout>
|
49
|
+
</widget>
|
81
50
|
</widget>
|
82
51
|
<resources/>
|
83
52
|
<connections/>
|
not1mm/lib/version.py
CHANGED
not1mm/logwindow.py
CHANGED
@@ -16,6 +16,7 @@ from json import loads
|
|
16
16
|
import math
|
17
17
|
from PyQt5 import QtCore, QtGui, QtWidgets, uic
|
18
18
|
from PyQt5.QtCore import Qt, QItemSelectionModel
|
19
|
+
from PyQt5.QtWidgets import QDockWidget
|
19
20
|
|
20
21
|
import not1mm.fsutils as fsutils
|
21
22
|
from not1mm.lib.database import DataBase
|
@@ -51,7 +52,7 @@ def safe_float(the_input: any, default=0.0) -> float:
|
|
51
52
|
return default
|
52
53
|
|
53
54
|
|
54
|
-
class LogWindow(
|
55
|
+
class LogWindow(QDockWidget):
|
55
56
|
"""
|
56
57
|
The main window
|
57
58
|
"""
|
not1mm/vfo.py
CHANGED
@@ -16,7 +16,7 @@ from json import loads, JSONDecodeError
|
|
16
16
|
import serial
|
17
17
|
from PyQt5 import QtCore, QtGui, QtWidgets, uic
|
18
18
|
from PyQt5.QtCore import Qt, QTimer
|
19
|
-
from PyQt5.QtWidgets import QWidget
|
19
|
+
from PyQt5.QtWidgets import QWidget, QDockWidget
|
20
20
|
|
21
21
|
import not1mm.fsutils as fsutils
|
22
22
|
from not1mm.lib.cat_interface import CAT
|
@@ -25,7 +25,7 @@ from not1mm.lib.multicast import Multicast
|
|
25
25
|
logger = logging.getLogger(__name__)
|
26
26
|
|
27
27
|
|
28
|
-
class VfoWindow(
|
28
|
+
class VfoWindow(QDockWidget):
|
29
29
|
"""The VFO window."""
|
30
30
|
|
31
31
|
pref = {}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: not1mm
|
3
|
-
Version: 24.
|
3
|
+
Version: 24.4.1.1
|
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
|
@@ -28,6 +28,7 @@ Requires-Dist: numpy
|
|
28
28
|
Requires-Dist: notctyparser >=23.6.21
|
29
29
|
Requires-Dist: rapidfuzz
|
30
30
|
Requires-Dist: appdata
|
31
|
+
Requires-Dist: Levenshtein
|
31
32
|
|
32
33
|
# Not1MM
|
33
34
|
|
@@ -48,20 +49,20 @@ The worlds #1 unfinished contest logger <sup>*According to my daughter Corinna.<
|
|
48
49
|
- [Our Code Contributors ✨](#our-code-contributors-)
|
49
50
|
- [List of should be working contests](#list-of-should-be-working-contests)
|
50
51
|
- [Recent Changes](#recent-changes)
|
52
|
+
- [Flatpak](#flatpak)
|
51
53
|
- [Installation](#installation)
|
52
54
|
- [Prerequisites](#prerequisites)
|
53
|
-
- [Common recipes for Ubuntu and Fedora](#common-recipes-for-ubuntu-and-fedora)
|
55
|
+
- [Common installation recipes for Ubuntu and Fedora](#common-installation-recipes-for-ubuntu-and-fedora)
|
54
56
|
- [Ubuntu 22.04 LTS](#ubuntu-2204-lts)
|
55
57
|
- [Ubuntu 23.04](#ubuntu-2304)
|
56
58
|
- [Fedora 38 \& 39](#fedora-38--39)
|
57
59
|
- [Python, PyPI, pip and pipx](#python-pypi-pip-and-pipx)
|
58
|
-
|
59
|
-
|
60
|
+
- [Bootstrapping pipx](#bootstrapping-pipx)
|
61
|
+
- [Installing with pipx](#installing-with-pipx)
|
60
62
|
- [After the install](#after-the-install)
|
61
63
|
- [You may or may not get a warning message like](#you-may-or-may-not-get-a-warning-message-like)
|
62
64
|
- [Or this fan favorite](#or-this-fan-favorite)
|
63
|
-
- [
|
64
|
-
- [Wayland Compositor](#wayland-compositor)
|
65
|
+
- [Installing from GitHub source](#installing-from-github-source)
|
65
66
|
- [Various data file locations](#various-data-file-locations)
|
66
67
|
- [Data](#data)
|
67
68
|
- [Config](#config)
|
@@ -90,25 +91,22 @@ The worlds #1 unfinished contest logger <sup>*According to my daughter Corinna.<
|
|
90
91
|
- [Macro use with voice](#macro-use-with-voice)
|
91
92
|
- [cty.dat and QRZ lookups for distance and bearing](#ctydat-and-qrz-lookups-for-distance-and-bearing)
|
92
93
|
- [Other uses for the call field](#other-uses-for-the-call-field)
|
93
|
-
- [Windows](#windows)
|
94
|
+
- [The Windows](#the-windows)
|
94
95
|
- [The Main Window](#the-main-window)
|
95
|
-
|
96
|
-
- [Log
|
96
|
+
- [Keyboard commands](#keyboard-commands)
|
97
|
+
- [The Log Window](#the-log-window)
|
97
98
|
- [Editing a contact](#editing-a-contact)
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
- [Remote VFO](#remote-vfo)
|
99
|
+
- [The Bandmap Window](#the-bandmap-window)
|
100
|
+
- [The Check Window](#the-check-window)
|
101
|
+
- [The Remote VFO Window](#the-remote-vfo-window)
|
102
102
|
- [Cabrillo](#cabrillo)
|
103
103
|
- [ADIF](#adif)
|
104
|
-
- [
|
104
|
+
- [Recalulate Mults](#recalulate-mults)
|
105
105
|
- [Contest specific notes](#contest-specific-notes)
|
106
106
|
- [ARRL Sweekstakes](#arrl-sweekstakes)
|
107
107
|
- [The exchange parser](#the-exchange-parser)
|
108
108
|
- [The exchange](#the-exchange)
|
109
109
|
|
110
|
-
[Visit the Wiki](https://github.com/mbridak/not1mm/wiki/Not1MM)
|
111
|
-
|
112
110
|
## What and why is Not1MM
|
113
111
|
|
114
112
|
Not1MM's interface is a blatant ripoff of N1MM. It is NOT N1MM and any problem
|
@@ -179,24 +177,18 @@ I wish to thank those who've contributed to the project.
|
|
179
177
|
|
180
178
|
## Recent Changes
|
181
179
|
|
182
|
-
- [24-
|
183
|
-
- [24-
|
184
|
-
- [24-3-25] Yanked version 24-3-24-1. Fixed widget focus issues.
|
185
|
-
- [24-3-24-1] Killed an SQL query bug causing crash when pressing arrow down.
|
186
|
-
- [24-3-24] Reworked fsutil.py to correct directory paths for Linux.
|
187
|
-
- [24-3-23] Yanked version 24-3-21, too many bugs for existing userbase.
|
188
|
-
- [24-3-21] Merged PR from @kyleboyle for docking windows. MacOS and Windows support.
|
189
|
-
- [24-3-19] Removed some useless bloat causing slow interface on FreeBSD 13/14 and maybe others.
|
190
|
-
- [24-3-16] Add Save/Fail confirmation dialogs when saving ADIF of Cabrillo files.
|
191
|
-
- [24-3-15] Change 'CWR' to 'CW' in the ADIF output.
|
192
|
-
- [24-3-13] Added CQ 160 CW and SSB
|
193
|
-
- [24-3-9] Marked calls in the bandmap window colored Blue, until worked.
|
194
|
-
- [24-3-7] Merged PR from @arodland for faster fuzzy SCP lookups.
|
195
|
-
- [24-3-2-1] Added marking stations on the bandmap to work later with CTRL-M.
|
196
|
-
- [24-3-2] Merged PR from @arodland for fuzzy SCP lookup.
|
180
|
+
- [24-4-1-1] Added color text indicators to the Check Partial window. Poached the code from @kyleboyle. Thanks! Fixed the Log, VFO and Check Partial windows to be actual docking widgets.
|
181
|
+
- [24-4-1] Removed some un-needed loops and widgets from the check window.
|
197
182
|
|
198
183
|
See [CHANGELOG.md](CHANGELOG.md) for prior changes.
|
199
184
|
|
185
|
+
## Flatpak
|
186
|
+
|
187
|
+
I've tried for a couple days to get not1mm to build as a flatpak. I've failed.
|
188
|
+
It keeps failing at building numpy. If you happen to be a flatpak savant, please
|
189
|
+
feel free to look at com.github.mbridak.not1mm.yaml and python3-modules.yaml and
|
190
|
+
clue me into the black magic needed to get it to work.
|
191
|
+
|
200
192
|
## Installation
|
201
193
|
|
202
194
|
### Prerequisites
|
@@ -204,7 +196,10 @@ See [CHANGELOG.md](CHANGELOG.md) for prior changes.
|
|
204
196
|
not1mm requires Python 3.9+, PyQt5 and libportaudio2. You should install these
|
205
197
|
through your distribution's package manager before continuing.
|
206
198
|
|
207
|
-
### Common recipes for Ubuntu and Fedora
|
199
|
+
### Common installation recipes for Ubuntu and Fedora
|
200
|
+
|
201
|
+
I've taken the time to install some common Linux distributions into a VM and
|
202
|
+
noted the minimum steps needed to install not1mm.
|
208
203
|
|
209
204
|
#### Ubuntu 22.04 LTS
|
210
205
|
|
@@ -252,7 +247,7 @@ Linux distros will make you do this unless you include a command line argument
|
|
252
247
|
akin to '--break-my-system' when using pip. I'm not telling you to use pipx.
|
253
248
|
But... **Use pipx**.
|
254
249
|
|
255
|
-
|
250
|
+
#### Bootstrapping pipx
|
256
251
|
|
257
252
|
Assuming you have only Python installed, your path to pipx is:
|
258
253
|
|
@@ -268,7 +263,7 @@ python3 -m pip install --user pipx
|
|
268
263
|
python3 -m pipx ensurepath
|
269
264
|
```
|
270
265
|
|
271
|
-
|
266
|
+
#### Installing with pipx
|
272
267
|
|
273
268
|
Then installing not1mm is as simple as:
|
274
269
|
|
@@ -315,7 +310,7 @@ For a more permanent solution you can place the line
|
|
315
310
|
`export QT_QPA_PLATFORM=wayland` in your home directories .bashrc file. Then
|
316
311
|
after logging out and back in you should be able to launch it normally.
|
317
312
|
|
318
|
-
###
|
313
|
+
### Installing from GitHub source
|
319
314
|
|
320
315
|
Since this is packaged for PyPI, if you want to work on your own source branch,
|
321
316
|
after cloning from github you would:
|
@@ -344,13 +339,6 @@ or be in some other directory and just type:
|
|
344
339
|
not1mm
|
345
340
|
```
|
346
341
|
|
347
|
-
## Wayland Compositor
|
348
|
-
|
349
|
-
One side effect of Wayland is that we are not able to request for a window to
|
350
|
-
regain or retain focus. So if you were to click on a spot in the bandmap window
|
351
|
-
to tune to that spot, you would have to then click on the main window to
|
352
|
-
continue entering contest data. I'm aware of this, but I can not change it.
|
353
|
-
|
354
342
|
## Various data file locations
|
355
343
|
|
356
344
|
### Data
|
@@ -562,13 +550,13 @@ is this has happened, since the gridsquare will replace the word "Regional".
|
|
562
550
|
|
563
551
|
**You must press the SPACE bar after entering any of the above.**
|
564
552
|
|
565
|
-
## Windows
|
553
|
+
## The Windows
|
566
554
|
|
567
555
|
### The Main Window
|
568
556
|
|
569
557
|

|
570
558
|
|
571
|
-
|
559
|
+
#### Keyboard commands
|
572
560
|
|
573
561
|
| Key | Result |
|
574
562
|
| -------------- | --- |
|
@@ -588,7 +576,7 @@ is this has happened, since the gridsquare will replace the word "Regional".
|
|
588
576
|
| [CTRL-G] | Tune to a spot matching partial text in the callsign entry field (CAT Required). |
|
589
577
|
| [CTRL-SHIFT-K] | Open CW text input field. |
|
590
578
|
|
591
|
-
### Log
|
579
|
+
### The Log Window
|
592
580
|
|
593
581
|
`Window`>`Log Window`
|
594
582
|
|
@@ -615,13 +603,7 @@ You can not directly edit the multiplier status of a contact. Instead see the
|
|
615
603
|
next section on recalculating mults. If you change the callsign make sure the
|
616
604
|
`WPX` field is still valid.
|
617
605
|
|
618
|
-
|
619
|
-
|
620
|
-
After editing a contact and before generating a Cabrillo file. There is a Misc
|
621
|
-
menu option that will recalculate the multipliers incase an edit had caused a
|
622
|
-
change.
|
623
|
-
|
624
|
-
## Bandmap
|
606
|
+
### The Bandmap Window
|
625
607
|
|
626
608
|
`Window`>`Bandmap`
|
627
609
|
|
@@ -640,7 +622,7 @@ blue rectangle shows the receivers bandwidth if one is reported.
|
|
640
622
|
Clicked on spots now tune the radio and set the callsign field. Previously
|
641
623
|
worked calls are displayed in red.
|
642
624
|
|
643
|
-
|
625
|
+
### The Check Window
|
644
626
|
|
645
627
|
`Window`>`Check Window`
|
646
628
|
|
@@ -654,7 +636,7 @@ Clicking on any of these items will change the callsign field.
|
|
654
636
|
|
655
637
|

|
656
638
|
|
657
|
-
|
639
|
+
### The Remote VFO Window
|
658
640
|
|
659
641
|
You can control the VFO on a remote rig by following the directions listed in
|
660
642
|
the link below. It's a small hardware project with a BOM of under $20, and
|
@@ -690,9 +672,11 @@ Boom... ADIF
|
|
690
672
|
|
691
673
|
`StationCall`\_`ContestName`\_`Date`\_`Time`.adi
|
692
674
|
|
693
|
-
##
|
675
|
+
## Recalulate Mults
|
694
676
|
|
695
|
-
|
677
|
+
After editing a contact and before generating a Cabrillo file. There is a Misc
|
678
|
+
menu option that will recalculate the multipliers incase an edit had caused a
|
679
|
+
change.
|
696
680
|
|
697
681
|
## Contest specific notes
|
698
682
|
|
@@ -1,17 +1,17 @@
|
|
1
1
|
not1mm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
|
-
not1mm/__main__.py,sha256=
|
2
|
+
not1mm/__main__.py,sha256=y7pJidcDn71lr-JLfZPQSqPDNgbrImeIgKgvJNhVrb8,117984
|
3
3
|
not1mm/bandmap.py,sha256=a0QZj0HvPh8ixj207ANRHO29aKN3YMKolp_P47gSOtI,33404
|
4
|
-
not1mm/checkwindow.py,sha256=
|
4
|
+
not1mm/checkwindow.py,sha256=3m3rYItlWtbnRWxI_k1ECmweuVJtf0W2tU1NjL6a8FU,9657
|
5
5
|
not1mm/fsutils.py,sha256=Li8Tq9K7c_q7onOHOQ7u1dOOFfhIIz5Aj2LKuQtGOO4,1652
|
6
|
-
not1mm/logwindow.py,sha256=
|
7
|
-
not1mm/vfo.py,sha256=
|
6
|
+
not1mm/logwindow.py,sha256=weejWrd-yo6SXX48sr2cjuIe_L-1hnba896A6hxv-EE,43864
|
7
|
+
not1mm/vfo.py,sha256=cEu8hjD3fZ6gfKOOFqoy9WVMFOOmOC9ab-x_6Wwzp4w,11547
|
8
8
|
not1mm/data/JetBrainsMono-Regular.ttf,sha256=UOHctAKY_PzCGh7zy-6f6egnCcSK0wzmF0csBqO9lDY,203952
|
9
9
|
not1mm/data/MASTER.SCP,sha256=1vQRvEZ865brfmmajp-Lj-hgWejVGI992q8o971bUV8,366478
|
10
10
|
not1mm/data/about.ui,sha256=7TqvtXFFm0Rmcu0bmLupwpO1CsK8MekfZ09_xn6kZrQ,2067
|
11
11
|
not1mm/data/alpha bravo charlie delta.txt,sha256=d5QMmSWEUAe4Rj1XbNjTPLa_5Be4Se6u5LUIqAYidOQ,224
|
12
12
|
not1mm/data/bandmap.ui,sha256=NqVoAGyuf_Rsts_FnL0pYEtE08DJb6qm4KAQ_T01bM8,7125
|
13
13
|
not1mm/data/check.png,sha256=UvFOLr8V-79qnjW8wUaGItXk_OSP8m8hqPevs8NDlFY,387
|
14
|
-
not1mm/data/checkwindow.ui,sha256=
|
14
|
+
not1mm/data/checkwindow.ui,sha256=0e8CqRy5yXLwAi_SRfYh4X1efz2IHzqLWUJPgNrjDDg,4611
|
15
15
|
not1mm/data/configuration.ui,sha256=DJZxA4zZPb4sTdVn17j1fwaTw-5lJCNQ6PspQrsdMe4,51643
|
16
16
|
not1mm/data/contests.sql,sha256=4hmJCDvrbxnA_Y5S4T5o52TZieeFk6QUwFerwlFePNA,89307
|
17
17
|
not1mm/data/cty.json,sha256=CGf_bvqr_qfr0kXLQC0JGW1BWSX-1Ce8qZwDMMN7tuM,4783134
|
@@ -24,7 +24,8 @@ not1mm/data/k6gte-not1mm.desktop,sha256=bSiSG7PzGygv0bBaF7Nf48PApVyrobSBVNk7j7wR
|
|
24
24
|
not1mm/data/k6gte.not1mm-128.png,sha256=ZP93MfRqr4WwsFCwg1m5MZjLs8bG895vDW9DDDn1B_Q,6076
|
25
25
|
not1mm/data/k6gte.not1mm-32.png,sha256=XdTsCa3xqwTfn26Ga7RwO_Vlbg_77RKkSc8bMxVcCac,1526
|
26
26
|
not1mm/data/k6gte.not1mm-64.png,sha256=6ku45Gq1g5ezh04F07osoKRtanb3e4kbx5XdIEh3N90,2925
|
27
|
-
not1mm/data/logwindow.ui,sha256=
|
27
|
+
not1mm/data/logwindow.ui,sha256=vfkNdzJgFs3tTOBKLDavF2zVMvNHWOZ82fAErRi6pQY,1436
|
28
|
+
not1mm/data/logwindowx.ui,sha256=9FzDJtLRpagvAWcDjFdB9NnvNZ4bVxdTNHy1Jit2ido,1610
|
28
29
|
not1mm/data/main.ui,sha256=X9sNqSZyKennX-7Ne4c8yLnkbN13T5YpDUeri-wPOn4,54070
|
29
30
|
not1mm/data/new_contest.ui,sha256=Xubngdbs_V_-o8huXzKOOaQOfj1NSXu9giIcaL4d0qk,21823
|
30
31
|
not1mm/data/not1mm.html,sha256=c9-mfjMwDt4f5pySUruz2gREW33CQ2_rCddM2z5CZQo,23273
|
@@ -36,7 +37,7 @@ not1mm/data/radio_red.png,sha256=QvkMk7thd_hCEIyK5xGAG4xVVXivl39nwOfD8USDI20,957
|
|
36
37
|
not1mm/data/reddot.png,sha256=M33jEMoU8W4rQ4_MVyzzKxDPDte1ypKBch5VnUMNLKE,565
|
37
38
|
not1mm/data/settings.ui,sha256=7r4aZwxKUHQGm8NLQGLINurGMvT_5VMU9p2dznW25bA,40028
|
38
39
|
not1mm/data/ssbmacros.txt,sha256=0Qccj4y0nlK-w5da9a9ti-jILkURtwztoDuL_D0pEJM,470
|
39
|
-
not1mm/data/vfo.ui,sha256=
|
40
|
+
not1mm/data/vfo.ui,sha256=Fp_2lFrZgaLx0PZS8_JeoH4zKCCA4LUNtK3wmlyrztM,1413
|
40
41
|
not1mm/data/phonetics/0.wav,sha256=0OpYiR-3MK6fVHE6MB-HeOxSAPiDNMjqvx5JcIZtsQk,42590
|
41
42
|
not1mm/data/phonetics/1.wav,sha256=OEAavA8cfVxFZwaT0HY9Wg9NAGEPKBhwhEdzGXkQs_U,30248
|
42
43
|
not1mm/data/phonetics/2.wav,sha256=AmCfvo8y8BT9OlHkCs_N4y_mUAjmyG_x9ahbgiwU2FE,29584
|
@@ -103,7 +104,7 @@ not1mm/lib/plugin_common.py,sha256=AAKBPCXzTWZJb-h08uPNnHVG7bSCg7kwukc211gFivY,8
|
|
103
104
|
not1mm/lib/select_contest.py,sha256=Ezc7MTZXEbQ_nXK7gmghalqfbbDyxp0pAVt0-chBJOw,359
|
104
105
|
not1mm/lib/settings.py,sha256=9dyXiUZcrR57EVemGDrO2ad3HSMQbe5ngl_bxtZtEic,8877
|
105
106
|
not1mm/lib/super_check_partial.py,sha256=p5l3u2ZOCBtlWgbvskC50FpuoaIpR07tfC6zTdRWbh4,2334
|
106
|
-
not1mm/lib/version.py,sha256=
|
107
|
+
not1mm/lib/version.py,sha256=gUR6aMT2qsB4VwR9eK35GmjHRw6xQLgG3L0-5h8FX3k,49
|
107
108
|
not1mm/lib/versiontest.py,sha256=8vDNptuBBunn-1IGkjNaquehqBYUJyjrPSF8Igmd4_Y,1286
|
108
109
|
not1mm/plugins/10_10_fall_cw.py,sha256=pG0cFmTNOFO03wXcI1a3EEaT1QK83yWIsrSdqCOU-gg,10834
|
109
110
|
not1mm/plugins/10_10_spring_cw.py,sha256=aWTohVrnZpT0SlQuqq7zxQaYe4SExEkOl3NI8xYYJWI,10840
|
@@ -137,9 +138,9 @@ not1mm/plugins/naqp_ssb.py,sha256=pof1k6Eg_MDQXSaCOJLh1jfVyyIri0LdHYrZQu7P_gs,11
|
|
137
138
|
not1mm/plugins/phone_weekly_test.py,sha256=EfLQzKREEXO_Ljg-q3VWg87JfbPVar9ydNhCdmHCrt8,12278
|
138
139
|
not1mm/plugins/stew_perry_topband.py,sha256=bjcImkZhBXpw4XKogs85mpShz7QgYbVohvhFMQ050DI,10546
|
139
140
|
not1mm/plugins/winter_field_day.py,sha256=7JK-RS1abcj1xQLnTF8rIPHRpDzmp4sAFBBML8b-Lwk,10212
|
140
|
-
not1mm-24.
|
141
|
-
not1mm-24.
|
142
|
-
not1mm-24.
|
143
|
-
not1mm-24.
|
144
|
-
not1mm-24.
|
145
|
-
not1mm-24.
|
141
|
+
not1mm-24.4.1.1.dist-info/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
142
|
+
not1mm-24.4.1.1.dist-info/METADATA,sha256=9ECpINXJHA12eRbjp-kpDxqeabQm-k9Hh-j6sry8GbU,26391
|
143
|
+
not1mm-24.4.1.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
144
|
+
not1mm-24.4.1.1.dist-info/entry_points.txt,sha256=pMcZk_0dxFgLkcUkF0Q874ojpwOmF3OL6EKw9LgvocM,47
|
145
|
+
not1mm-24.4.1.1.dist-info/top_level.txt,sha256=0YmTxEcDzQlzXub-lXASvoLpg_mt1c2thb5cVkDf5J4,7
|
146
|
+
not1mm-24.4.1.1.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|