not1mm 24.4.26__tar.gz → 24.4.30__tar.gz
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-24.4.26 → not1mm-24.4.30}/PKG-INFO +58 -34
- {not1mm-24.4.26 → not1mm-24.4.30}/README.md +57 -33
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/__main__.py +33 -93
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/bandmap.py +28 -81
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/checkwindow.py +23 -35
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/configuration.ui +5 -5
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/lib/cat_interface.py +28 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/lib/cwinterface.py +18 -6
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/lib/settings.py +6 -1
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/lib/version.py +1 -1
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/logwindow.py +37 -50
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/radio.py +9 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/vfo.py +26 -38
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm.egg-info/PKG-INFO +58 -34
- {not1mm-24.4.26 → not1mm-24.4.30}/pyproject.toml +1 -1
- {not1mm-24.4.26 → not1mm-24.4.30}/LICENSE +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/__init__.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/JetBrainsMono-Regular.ttf +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/MASTER.SCP +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/about.ui +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/alpha bravo charlie delta.txt +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/bandmap.ui +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/check.png +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/checkwindow.ui +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/contests.sql +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/cty.json +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/cwmacros.txt +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/donors.html +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/editcontact.ui +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/editmacro.ui +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/greendot.png +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/k6gte-not1mm.desktop +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/k6gte.not1mm-128.png +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/k6gte.not1mm-32.png +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/k6gte.not1mm-64.png +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/logwindow.ui +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/logwindowx.ui +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/main.ui +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/new_contest.ui +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/not1mm.html +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/opon.ui +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/0.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/1.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/2.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/3.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/4.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/5.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/6.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/7.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/73.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/8.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/9.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/a.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/again.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/b.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/c.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/contest.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/cq.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/d.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/e.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/f.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/g.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/h.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/i.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/j.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/k.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/k6gte.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/l.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/m.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/mynumber.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/n.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/nil.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/o.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/p.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/q.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/r.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/roger.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/s.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/space.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/t.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/thankyou.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/thankyouqrz.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/u.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/v.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/w.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/x.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/y.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/yourcall.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/phonetics/z.wav +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/pickcontest.ui +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/radio_green.png +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/radio_grey.png +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/radio_red.png +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/reddot.png +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/settings.ui +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/ssbmacros.txt +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/data/vfo.ui +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/fsutils.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/lib/__init__.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/lib/about.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/lib/database.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/lib/edit_contact.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/lib/edit_macro.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/lib/edit_opon.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/lib/edit_station.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/lib/ft8_watcher.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/lib/ham_utility.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/lib/lookup.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/lib/multicast.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/lib/n1mm.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/lib/new_contest.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/lib/plugin_common.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/lib/select_contest.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/lib/super_check_partial.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/lib/versiontest.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/plugins/10_10_fall_cw.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/plugins/10_10_spring_cw.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/plugins/10_10_summer_phone.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/plugins/10_10_winter_phone.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/plugins/__init__.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/plugins/arrl_10m.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/plugins/arrl_dx_cw.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/plugins/arrl_dx_ssb.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/plugins/arrl_field_day.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/plugins/arrl_rtty_ru.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/plugins/arrl_ss_cw.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/plugins/arrl_ss_phone.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/plugins/arrl_vhf_jan.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/plugins/arrl_vhf_jun.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/plugins/arrl_vhf_sep.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/plugins/canada_day.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/plugins/cq_160_cw.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/plugins/cq_160_ssb.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/plugins/cq_wpx_cw.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/plugins/cq_wpx_ssb.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/plugins/cq_ww_cw.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/plugins/cq_ww_ssb.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/plugins/cwt.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/plugins/general_logging.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/plugins/iaru_hf.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/plugins/jidx_cw.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/plugins/jidx_ph.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/plugins/naqp_cw.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/plugins/naqp_ssb.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/plugins/phone_weekly_test.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/plugins/stew_perry_topband.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm/plugins/winter_field_day.py +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm.egg-info/SOURCES.txt +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm.egg-info/dependency_links.txt +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm.egg-info/entry_points.txt +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm.egg-info/requires.txt +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/not1mm.egg-info/top_level.txt +0 -0
- {not1mm-24.4.26 → not1mm-24.4.30}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: not1mm
|
3
|
-
Version: 24.4.
|
3
|
+
Version: 24.4.30
|
4
4
|
Summary: NOT1MM Logger
|
5
5
|
Author-email: Michael Bridak <michael.bridak@gmail.com>
|
6
6
|
Project-URL: Homepage, https://github.com/mbridak/not1mm
|
@@ -31,6 +31,7 @@ Requires-Dist: appdata
|
|
31
31
|
Requires-Dist: Levenshtein
|
32
32
|
|
33
33
|
# Not1MM
|
34
|
+
<!-- markdownlint-disable MD001 MD033 -->
|
34
35
|
|
35
36
|

|
36
37
|
|
@@ -55,16 +56,16 @@ Requires-Dist: Levenshtein
|
|
55
56
|
- [Common installation recipes for Ubuntu and Fedora](#common-installation-recipes-for-ubuntu-and-fedora)
|
56
57
|
- [Ubuntu 22.04 LTS](#ubuntu-2204-lts)
|
57
58
|
- [Ubuntu 23.04](#ubuntu-2304)
|
58
|
-
- [Ubuntu 24.04](#ubuntu-2404)
|
59
|
+
- [Ubuntu 24.04 LTS](#ubuntu-2404-lts)
|
59
60
|
- [Fedora 38 \& 39](#fedora-38--39)
|
60
61
|
- [Fedora 40](#fedora-40)
|
61
62
|
- [Python, PyPI, pip and pipx](#python-pypi-pip-and-pipx)
|
62
63
|
- [Bootstrapping pipx](#bootstrapping-pipx)
|
63
64
|
- [Installing with pipx](#installing-with-pipx)
|
65
|
+
- [Installing from GitHub source](#installing-from-github-source)
|
64
66
|
- [After the install](#after-the-install)
|
65
67
|
- [You may or may not get a warning message like](#you-may-or-may-not-get-a-warning-message-like)
|
66
68
|
- [Or this fan favorite](#or-this-fan-favorite)
|
67
|
-
- [Installing from GitHub source](#installing-from-github-source)
|
68
69
|
- [Various data file locations](#various-data-file-locations)
|
69
70
|
- [Data](#data)
|
70
71
|
- [Config](#config)
|
@@ -179,6 +180,8 @@ I wish to thank those who've contributed to the project.
|
|
179
180
|
|
180
181
|
## Recent Changes
|
181
182
|
|
183
|
+
- [24-4-30] Allowsending CW via rigctld if your radio supports it.
|
184
|
+
- [24-4-27] Cleaned up dark mode code.
|
182
185
|
- [24-4-25-1] Reduce delta time to poll. Reorder poll_radio callback. Remove unused CAT lib from main.
|
183
186
|
- [24-4-25] Limited loop in radio.py, reducing clock cycles used. Moved Log window to the top of the logger.
|
184
187
|
- [24-4-24] Placed CAT control into a thread so disconnecting the radio wouldn't lock up the interface.
|
@@ -217,6 +220,10 @@ through your distribution's package manager before continuing.
|
|
217
220
|
I've taken the time to install some common Linux distributions into a VM and
|
218
221
|
noted the minimum steps needed to install not1mm.
|
219
222
|
|
223
|
+
<details>
|
224
|
+
|
225
|
+
<summary><b>Ubuntu 22.04 LTS, 23.04 and 24.04 LTS</b></summary>
|
226
|
+
|
220
227
|
#### Ubuntu 22.04 LTS
|
221
228
|
|
222
229
|
```bash
|
@@ -236,7 +243,7 @@ pipx install not1mm
|
|
236
243
|
pipx ensurepath
|
237
244
|
```
|
238
245
|
|
239
|
-
#### Ubuntu 24.04
|
246
|
+
#### Ubuntu 24.04 LTS
|
240
247
|
|
241
248
|
```bash
|
242
249
|
sudo apt update
|
@@ -246,6 +253,12 @@ pip install --break-system-packages not1mm
|
|
246
253
|
source .profile
|
247
254
|
```
|
248
255
|
|
256
|
+
</details>
|
257
|
+
|
258
|
+
<details>
|
259
|
+
|
260
|
+
<summary><b>Fedora 38, 39 and 40</b></summary>
|
261
|
+
|
249
262
|
#### Fedora 38 & 39
|
250
263
|
|
251
264
|
```bash
|
@@ -262,6 +275,9 @@ sudo dnf install python3-pip python3-pyqt6 portaudio
|
|
262
275
|
pip install not1mm
|
263
276
|
```
|
264
277
|
|
278
|
+
</details>
|
279
|
+
<br>
|
280
|
+
|
265
281
|
You can now open a new terminal and type not1mm. On it's first run, it may or
|
266
282
|
may not install a lovely non AI generated icon, which you can later click on to
|
267
283
|
launch the application.
|
@@ -313,6 +329,40 @@ If you need to later update not1mm, you can do so with:
|
|
313
329
|
pipx upgrade not1mm
|
314
330
|
```
|
315
331
|
|
332
|
+
<details>
|
333
|
+
<summary><b>Installing from GitHub source.</b></summary>
|
334
|
+
|
335
|
+
### Installing from GitHub source
|
336
|
+
|
337
|
+
Since this is packaged for PyPI, if you want to work on your own source branch,
|
338
|
+
after cloning from github you would:
|
339
|
+
|
340
|
+
```bash
|
341
|
+
pip install --upgrade pip
|
342
|
+
pip install setuptools
|
343
|
+
pip install build
|
344
|
+
source rebuild.sh
|
345
|
+
```
|
346
|
+
|
347
|
+
from the root directory. This installs a build chain and a local editable copy
|
348
|
+
of not1mm.
|
349
|
+
|
350
|
+
There's two ways to launch the program from the local editable copy.
|
351
|
+
|
352
|
+
You can either be in the root of the source directory and type:
|
353
|
+
|
354
|
+
```bash
|
355
|
+
python not1mm
|
356
|
+
```
|
357
|
+
|
358
|
+
or be in some other directory and just type:
|
359
|
+
|
360
|
+
```bash
|
361
|
+
not1mm
|
362
|
+
```
|
363
|
+
|
364
|
+
</details>
|
365
|
+
|
316
366
|
## After the install
|
317
367
|
|
318
368
|
You can now open a new terminal and type `not1mm`. On it's first run, it may or
|
@@ -344,35 +394,6 @@ For a more permanent solution you can place the line
|
|
344
394
|
`export QT_QPA_PLATFORM=wayland` in your home directories .bashrc file. Then
|
345
395
|
after logging out and back in you should be able to launch it normally.
|
346
396
|
|
347
|
-
### Installing from GitHub source
|
348
|
-
|
349
|
-
Since this is packaged for PyPI, if you want to work on your own source branch,
|
350
|
-
after cloning from github you would:
|
351
|
-
|
352
|
-
```bash
|
353
|
-
pip install --upgrade pip
|
354
|
-
pip install setuptools
|
355
|
-
pip install build
|
356
|
-
source rebuild.sh
|
357
|
-
```
|
358
|
-
|
359
|
-
from the root directory. This installs a build chain and a local editable copy
|
360
|
-
of not1mm.
|
361
|
-
|
362
|
-
There's two ways to launch the program from the local editable copy.
|
363
|
-
|
364
|
-
You can either be in the root of the source directory and type:
|
365
|
-
|
366
|
-
```bash
|
367
|
-
python not1mm
|
368
|
-
```
|
369
|
-
|
370
|
-
or be in some other directory and just type:
|
371
|
-
|
372
|
-
```bash
|
373
|
-
not1mm
|
374
|
-
```
|
375
|
-
|
376
397
|
## Various data file locations
|
377
398
|
|
378
399
|
### Data
|
@@ -482,7 +503,10 @@ onscreen icon for CAT status. Green good, Red bad, Grey neither.
|
|
482
503
|
|
483
504
|
Under the `CW` TAB, There are three options. `cwdaemon`, which normally uses IP
|
484
505
|
`127.0.0.1` and port `6789`. `pywinkeyer` which normally uses IP `127.0.0.1` and
|
485
|
-
|
506
|
+
`CAT` which if your radio supports it, sends Morse characters via rigctld. As far
|
507
|
+
as I can tell rigctld does not support setting the radios internal keyer speed. So
|
508
|
+
the CW speed control widget will not be functional and you'd need to control the
|
509
|
+
keyer speed thru the radios interface.
|
486
510
|
|
487
511
|
### Cluster
|
488
512
|
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# Not1MM
|
2
|
+
<!-- markdownlint-disable MD001 MD033 -->
|
2
3
|
|
3
4
|

|
4
5
|
|
@@ -23,16 +24,16 @@
|
|
23
24
|
- [Common installation recipes for Ubuntu and Fedora](#common-installation-recipes-for-ubuntu-and-fedora)
|
24
25
|
- [Ubuntu 22.04 LTS](#ubuntu-2204-lts)
|
25
26
|
- [Ubuntu 23.04](#ubuntu-2304)
|
26
|
-
- [Ubuntu 24.04](#ubuntu-2404)
|
27
|
+
- [Ubuntu 24.04 LTS](#ubuntu-2404-lts)
|
27
28
|
- [Fedora 38 \& 39](#fedora-38--39)
|
28
29
|
- [Fedora 40](#fedora-40)
|
29
30
|
- [Python, PyPI, pip and pipx](#python-pypi-pip-and-pipx)
|
30
31
|
- [Bootstrapping pipx](#bootstrapping-pipx)
|
31
32
|
- [Installing with pipx](#installing-with-pipx)
|
33
|
+
- [Installing from GitHub source](#installing-from-github-source)
|
32
34
|
- [After the install](#after-the-install)
|
33
35
|
- [You may or may not get a warning message like](#you-may-or-may-not-get-a-warning-message-like)
|
34
36
|
- [Or this fan favorite](#or-this-fan-favorite)
|
35
|
-
- [Installing from GitHub source](#installing-from-github-source)
|
36
37
|
- [Various data file locations](#various-data-file-locations)
|
37
38
|
- [Data](#data)
|
38
39
|
- [Config](#config)
|
@@ -147,6 +148,8 @@ I wish to thank those who've contributed to the project.
|
|
147
148
|
|
148
149
|
## Recent Changes
|
149
150
|
|
151
|
+
- [24-4-30] Allowsending CW via rigctld if your radio supports it.
|
152
|
+
- [24-4-27] Cleaned up dark mode code.
|
150
153
|
- [24-4-25-1] Reduce delta time to poll. Reorder poll_radio callback. Remove unused CAT lib from main.
|
151
154
|
- [24-4-25] Limited loop in radio.py, reducing clock cycles used. Moved Log window to the top of the logger.
|
152
155
|
- [24-4-24] Placed CAT control into a thread so disconnecting the radio wouldn't lock up the interface.
|
@@ -185,6 +188,10 @@ through your distribution's package manager before continuing.
|
|
185
188
|
I've taken the time to install some common Linux distributions into a VM and
|
186
189
|
noted the minimum steps needed to install not1mm.
|
187
190
|
|
191
|
+
<details>
|
192
|
+
|
193
|
+
<summary><b>Ubuntu 22.04 LTS, 23.04 and 24.04 LTS</b></summary>
|
194
|
+
|
188
195
|
#### Ubuntu 22.04 LTS
|
189
196
|
|
190
197
|
```bash
|
@@ -204,7 +211,7 @@ pipx install not1mm
|
|
204
211
|
pipx ensurepath
|
205
212
|
```
|
206
213
|
|
207
|
-
#### Ubuntu 24.04
|
214
|
+
#### Ubuntu 24.04 LTS
|
208
215
|
|
209
216
|
```bash
|
210
217
|
sudo apt update
|
@@ -214,6 +221,12 @@ pip install --break-system-packages not1mm
|
|
214
221
|
source .profile
|
215
222
|
```
|
216
223
|
|
224
|
+
</details>
|
225
|
+
|
226
|
+
<details>
|
227
|
+
|
228
|
+
<summary><b>Fedora 38, 39 and 40</b></summary>
|
229
|
+
|
217
230
|
#### Fedora 38 & 39
|
218
231
|
|
219
232
|
```bash
|
@@ -230,6 +243,9 @@ sudo dnf install python3-pip python3-pyqt6 portaudio
|
|
230
243
|
pip install not1mm
|
231
244
|
```
|
232
245
|
|
246
|
+
</details>
|
247
|
+
<br>
|
248
|
+
|
233
249
|
You can now open a new terminal and type not1mm. On it's first run, it may or
|
234
250
|
may not install a lovely non AI generated icon, which you can later click on to
|
235
251
|
launch the application.
|
@@ -281,6 +297,40 @@ If you need to later update not1mm, you can do so with:
|
|
281
297
|
pipx upgrade not1mm
|
282
298
|
```
|
283
299
|
|
300
|
+
<details>
|
301
|
+
<summary><b>Installing from GitHub source.</b></summary>
|
302
|
+
|
303
|
+
### Installing from GitHub source
|
304
|
+
|
305
|
+
Since this is packaged for PyPI, if you want to work on your own source branch,
|
306
|
+
after cloning from github you would:
|
307
|
+
|
308
|
+
```bash
|
309
|
+
pip install --upgrade pip
|
310
|
+
pip install setuptools
|
311
|
+
pip install build
|
312
|
+
source rebuild.sh
|
313
|
+
```
|
314
|
+
|
315
|
+
from the root directory. This installs a build chain and a local editable copy
|
316
|
+
of not1mm.
|
317
|
+
|
318
|
+
There's two ways to launch the program from the local editable copy.
|
319
|
+
|
320
|
+
You can either be in the root of the source directory and type:
|
321
|
+
|
322
|
+
```bash
|
323
|
+
python not1mm
|
324
|
+
```
|
325
|
+
|
326
|
+
or be in some other directory and just type:
|
327
|
+
|
328
|
+
```bash
|
329
|
+
not1mm
|
330
|
+
```
|
331
|
+
|
332
|
+
</details>
|
333
|
+
|
284
334
|
## After the install
|
285
335
|
|
286
336
|
You can now open a new terminal and type `not1mm`. On it's first run, it may or
|
@@ -312,35 +362,6 @@ For a more permanent solution you can place the line
|
|
312
362
|
`export QT_QPA_PLATFORM=wayland` in your home directories .bashrc file. Then
|
313
363
|
after logging out and back in you should be able to launch it normally.
|
314
364
|
|
315
|
-
### Installing from GitHub source
|
316
|
-
|
317
|
-
Since this is packaged for PyPI, if you want to work on your own source branch,
|
318
|
-
after cloning from github you would:
|
319
|
-
|
320
|
-
```bash
|
321
|
-
pip install --upgrade pip
|
322
|
-
pip install setuptools
|
323
|
-
pip install build
|
324
|
-
source rebuild.sh
|
325
|
-
```
|
326
|
-
|
327
|
-
from the root directory. This installs a build chain and a local editable copy
|
328
|
-
of not1mm.
|
329
|
-
|
330
|
-
There's two ways to launch the program from the local editable copy.
|
331
|
-
|
332
|
-
You can either be in the root of the source directory and type:
|
333
|
-
|
334
|
-
```bash
|
335
|
-
python not1mm
|
336
|
-
```
|
337
|
-
|
338
|
-
or be in some other directory and just type:
|
339
|
-
|
340
|
-
```bash
|
341
|
-
not1mm
|
342
|
-
```
|
343
|
-
|
344
365
|
## Various data file locations
|
345
366
|
|
346
367
|
### Data
|
@@ -450,7 +471,10 @@ onscreen icon for CAT status. Green good, Red bad, Grey neither.
|
|
450
471
|
|
451
472
|
Under the `CW` TAB, There are three options. `cwdaemon`, which normally uses IP
|
452
473
|
`127.0.0.1` and port `6789`. `pywinkeyer` which normally uses IP `127.0.0.1` and
|
453
|
-
|
474
|
+
`CAT` which if your radio supports it, sends Morse characters via rigctld. As far
|
475
|
+
as I can tell rigctld does not support setting the radios internal keyer speed. So
|
476
|
+
the CW speed control widget will not be functional and you'd need to control the
|
477
|
+
keyer speed thru the radios interface.
|
454
478
|
|
455
479
|
### Cluster
|
456
480
|
|
@@ -38,7 +38,7 @@ except OSError as exception:
|
|
38
38
|
import soundfile as sf
|
39
39
|
from PyQt6 import QtCore, QtGui, QtWidgets, uic
|
40
40
|
from PyQt6.QtCore import QDir, Qt, QThread
|
41
|
-
from PyQt6.QtGui import QFontDatabase, QColorConstants
|
41
|
+
from PyQt6.QtGui import QFontDatabase, QColorConstants, QPalette, QColor
|
42
42
|
from PyQt6.QtWidgets import QFileDialog
|
43
43
|
|
44
44
|
from not1mm.lib.about import About
|
@@ -567,76 +567,50 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
567
567
|
"""
|
568
568
|
print(f"{result=}")
|
569
569
|
|
570
|
-
def setDarkMode(self,
|
571
|
-
"""
|
570
|
+
def setDarkMode(self, setdarkmode=False) -> None:
|
571
|
+
"""Forces a darkmode palette."""
|
572
572
|
|
573
|
-
logger.debug(f"Dark mode set to: {
|
573
|
+
logger.debug(f"Dark mode set to: {setdarkmode}")
|
574
574
|
|
575
575
|
cmd = {}
|
576
576
|
cmd["cmd"] = "DARKMODE"
|
577
|
-
cmd["state"] =
|
577
|
+
cmd["state"] = setdarkmode
|
578
578
|
cmd["station"] = platform.node()
|
579
579
|
self.multicast_interface.send_as_json(cmd)
|
580
580
|
|
581
|
-
if
|
582
|
-
darkPalette =
|
583
|
-
darkColor =
|
584
|
-
disabledColor =
|
585
|
-
darkPalette.setColor(
|
581
|
+
if setdarkmode:
|
582
|
+
darkPalette = QPalette()
|
583
|
+
darkColor = QColor(56, 56, 56)
|
584
|
+
disabledColor = QColor(127, 127, 127)
|
585
|
+
darkPalette.setColor(QPalette.ColorRole.Window, darkColor)
|
586
|
+
darkPalette.setColor(QPalette.ColorRole.WindowText, QColorConstants.White)
|
587
|
+
darkPalette.setColor(QPalette.ColorRole.Base, QColor(45, 45, 45))
|
588
|
+
darkPalette.setColor(QPalette.ColorRole.AlternateBase, darkColor)
|
589
|
+
darkPalette.setColor(QPalette.ColorRole.Text, QColorConstants.White)
|
590
|
+
darkPalette.setColor(QPalette.ColorRole.Button, darkColor)
|
591
|
+
darkPalette.setColor(QPalette.ColorRole.ButtonText, QColorConstants.White)
|
592
|
+
darkPalette.setColor(QPalette.ColorRole.BrightText, QColorConstants.Red)
|
593
|
+
darkPalette.setColor(QPalette.ColorRole.Link, QColor(42, 130, 218))
|
594
|
+
darkPalette.setColor(QPalette.ColorRole.Highlight, QColor(42, 130, 218))
|
586
595
|
darkPalette.setColor(
|
587
|
-
|
596
|
+
QPalette.ColorRole.HighlightedText, QColorConstants.Black
|
588
597
|
)
|
589
598
|
darkPalette.setColor(
|
590
|
-
|
591
|
-
|
592
|
-
darkPalette.setColor(QtGui.QPalette.ColorRole.AlternateBase, darkColor)
|
593
|
-
darkPalette.setColor(QtGui.QPalette.ColorRole.Text, QColorConstants.White)
|
594
|
-
darkPalette.setColor(
|
595
|
-
QtGui.QPalette.ColorGroup.Disabled,
|
596
|
-
QtGui.QPalette.ColorRole.Text,
|
599
|
+
QPalette.ColorGroup.Disabled,
|
600
|
+
QPalette.ColorRole.ButtonText,
|
597
601
|
disabledColor,
|
598
602
|
)
|
599
|
-
darkPalette.setColor(QtGui.QPalette.ColorRole.Button, darkColor)
|
600
|
-
darkPalette.setColor(
|
601
|
-
QtGui.QPalette.ColorRole.ButtonText, QColorConstants.White
|
602
|
-
)
|
603
603
|
darkPalette.setColor(
|
604
|
-
|
605
|
-
|
604
|
+
QPalette.ColorGroup.Disabled,
|
605
|
+
QPalette.ColorRole.HighlightedText,
|
606
606
|
disabledColor,
|
607
607
|
)
|
608
608
|
darkPalette.setColor(
|
609
|
-
|
610
|
-
|
611
|
-
darkPalette.setColor(
|
612
|
-
QtGui.QPalette.ColorRole.Link, QtGui.QColor(42, 130, 218)
|
613
|
-
)
|
614
|
-
darkPalette.setColor(
|
615
|
-
QtGui.QPalette.ColorRole.Highlight, QtGui.QColor(42, 130, 218)
|
616
|
-
)
|
617
|
-
darkPalette.setColor(
|
618
|
-
QtGui.QPalette.ColorRole.HighlightedText, QColorConstants.Black
|
619
|
-
)
|
620
|
-
darkPalette.setColor(
|
621
|
-
QtGui.QPalette.ColorGroup.Disabled,
|
622
|
-
QtGui.QPalette.ColorRole.HighlightedText,
|
609
|
+
QPalette.ColorGroup.Disabled,
|
610
|
+
QPalette.ColorRole.Text,
|
623
611
|
disabledColor,
|
624
612
|
)
|
625
|
-
|
626
|
-
"QPushButton {"
|
627
|
-
"background-color: rgb(56,56,56);"
|
628
|
-
"color: white;"
|
629
|
-
"border-style: outset;"
|
630
|
-
"border-width: 2px;"
|
631
|
-
"border-radius: 5px;"
|
632
|
-
"border-color: rgb(45,45,45);"
|
633
|
-
"padding: 6px;"
|
634
|
-
"}"
|
635
|
-
"QPushButton:pressed {"
|
636
|
-
"background-color: rgb(127, 127, 127);"
|
637
|
-
"border-style: inset;"
|
638
|
-
"}"
|
639
|
-
)
|
613
|
+
|
640
614
|
self.current_palette = darkPalette
|
641
615
|
self.setPalette(darkPalette)
|
642
616
|
self.text_color = QColorConstants.White
|
@@ -651,18 +625,6 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
651
625
|
self.other_1.setPalette(darkPalette)
|
652
626
|
self.other_2.setPalette(darkPalette)
|
653
627
|
self.cw_entry.setPalette(darkPalette)
|
654
|
-
self.F1.setStyleSheet(dark_button_style)
|
655
|
-
self.F2.setStyleSheet(dark_button_style)
|
656
|
-
self.F3.setStyleSheet(dark_button_style)
|
657
|
-
self.F4.setStyleSheet(dark_button_style)
|
658
|
-
self.F5.setStyleSheet(dark_button_style)
|
659
|
-
self.F6.setStyleSheet(dark_button_style)
|
660
|
-
self.F7.setStyleSheet(dark_button_style)
|
661
|
-
self.F8.setStyleSheet(dark_button_style)
|
662
|
-
self.F9.setStyleSheet(dark_button_style)
|
663
|
-
self.F10.setStyleSheet(dark_button_style)
|
664
|
-
self.F11.setStyleSheet(dark_button_style)
|
665
|
-
self.F12.setStyleSheet(dark_button_style)
|
666
628
|
else:
|
667
629
|
palette = self.style().standardPalette()
|
668
630
|
self.current_palette = palette
|
@@ -679,33 +641,6 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
679
641
|
self.other_2.setPalette(palette)
|
680
642
|
self.cw_entry.setPalette(palette)
|
681
643
|
self.text_color = QColorConstants.Black
|
682
|
-
light_button_style = (
|
683
|
-
"QPushButton {"
|
684
|
-
"background-color: rgb(245,245,245);"
|
685
|
-
"color: rgb(52,52,52);"
|
686
|
-
"border-style: outset;"
|
687
|
-
"border-width: 2px;"
|
688
|
-
"border-radius: 5px;"
|
689
|
-
"border-color: rgb(150,150,150);"
|
690
|
-
"padding: 6px;"
|
691
|
-
"}"
|
692
|
-
"QPushButton:pressed {"
|
693
|
-
"background-color: rgb(127, 127, 127);"
|
694
|
-
"border-style: inset;"
|
695
|
-
"}"
|
696
|
-
)
|
697
|
-
self.F1.setStyleSheet(light_button_style)
|
698
|
-
self.F2.setStyleSheet(light_button_style)
|
699
|
-
self.F3.setStyleSheet(light_button_style)
|
700
|
-
self.F4.setStyleSheet(light_button_style)
|
701
|
-
self.F5.setStyleSheet(light_button_style)
|
702
|
-
self.F6.setStyleSheet(light_button_style)
|
703
|
-
self.F7.setStyleSheet(light_button_style)
|
704
|
-
self.F8.setStyleSheet(light_button_style)
|
705
|
-
self.F9.setStyleSheet(light_button_style)
|
706
|
-
self.F10.setStyleSheet(light_button_style)
|
707
|
-
self.F11.setStyleSheet(light_button_style)
|
708
|
-
self.F12.setStyleSheet(light_button_style)
|
709
644
|
|
710
645
|
def set_radio_icon(self, state: int) -> None:
|
711
646
|
"""
|
@@ -770,7 +705,9 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
770
705
|
# self.send_backspace()
|
771
706
|
self.oldtext = newtext
|
772
707
|
return
|
773
|
-
if self.
|
708
|
+
if self.pref.get("cwtype") == 3 and self.rig_control is not None:
|
709
|
+
self.rig_control.sendcw(newtext[len(self.oldtext) :])
|
710
|
+
elif self.cw is not None:
|
774
711
|
self.cw.sendcw(newtext[len(self.oldtext) :])
|
775
712
|
self.oldtext = newtext
|
776
713
|
|
@@ -2375,6 +2312,9 @@ class MainWindow(QtWidgets.QMainWindow):
|
|
2375
2312
|
self.voice_string(self.process_macro(function_key.toolTip()))
|
2376
2313
|
return
|
2377
2314
|
if self.cw:
|
2315
|
+
if self.pref.get("cwtype") == 3 and self.rig_control is not None:
|
2316
|
+
self.rig_control.sendcw(self.process_macro(function_key.toolTip()))
|
2317
|
+
return
|
2378
2318
|
self.cw.sendcw(self.process_macro(function_key.toolTip()))
|
2379
2319
|
|
2380
2320
|
def run_sp_buttons_clicked(self) -> None:
|