not1mm 24.3.15__tar.gz → 24.3.24__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.
Files changed (161) hide show
  1. {not1mm-24.3.15 → not1mm-24.3.24}/PKG-INFO +68 -55
  2. {not1mm-24.3.15 → not1mm-24.3.24}/README.md +66 -54
  3. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/__main__.py +288 -124
  4. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/bandmap.py +207 -191
  5. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/checkwindow.py +62 -109
  6. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/MASTER.SCP +1077 -749
  7. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/bandmap.ui +4 -4
  8. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/checkwindow.ui +9 -16
  9. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/cty.json +1 -1
  10. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/logwindow.ui +16 -11
  11. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/main.ui +16 -6
  12. not1mm-24.3.24/not1mm/data/vfo.ui +84 -0
  13. not1mm-24.3.24/not1mm/fsutils.py +63 -0
  14. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/lib/about.py +4 -2
  15. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/lib/cat_interface.py +1 -1
  16. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/lib/cwinterface.py +1 -1
  17. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/lib/database.py +4 -4
  18. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/lib/edit_contact.py +2 -2
  19. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/lib/edit_macro.py +2 -3
  20. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/lib/edit_opon.py +2 -2
  21. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/lib/edit_station.py +3 -3
  22. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/lib/ham_utility.py +1 -1
  23. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/lib/lookup.py +1 -1
  24. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/lib/multicast.py +9 -4
  25. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/lib/n1mm.py +1 -1
  26. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/lib/new_contest.py +2 -2
  27. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/lib/plugin_common.py +3 -2
  28. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/lib/select_contest.py +2 -2
  29. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/lib/settings.py +3 -4
  30. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/lib/super_check_partial.py +8 -5
  31. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/lib/version.py +1 -1
  32. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/logwindow.py +62 -105
  33. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/plugins/10_10_fall_cw.py +3 -1
  34. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/plugins/10_10_spring_cw.py +3 -1
  35. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/plugins/10_10_summer_phone.py +3 -1
  36. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/plugins/10_10_winter_phone.py +3 -1
  37. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/plugins/arrl_10m.py +3 -1
  38. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/plugins/arrl_dx_cw.py +3 -1
  39. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/plugins/arrl_dx_ssb.py +3 -1
  40. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/plugins/arrl_field_day.py +3 -1
  41. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/plugins/arrl_ss_cw.py +3 -1
  42. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/plugins/arrl_ss_phone.py +3 -1
  43. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/plugins/arrl_vhf_jan.py +3 -1
  44. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/plugins/arrl_vhf_jun.py +3 -1
  45. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/plugins/arrl_vhf_sep.py +3 -1
  46. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/plugins/canada_day.py +3 -1
  47. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/plugins/cq_160_cw.py +4 -2
  48. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/plugins/cq_160_ssb.py +4 -2
  49. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/plugins/cq_wpx_cw.py +3 -1
  50. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/plugins/cq_wpx_ssb.py +3 -1
  51. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/plugins/cq_ww_cw.py +3 -1
  52. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/plugins/cq_ww_ssb.py +3 -1
  53. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/plugins/cwt.py +3 -1
  54. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/plugins/general_logging.py +1 -1
  55. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/plugins/iaru_hf.py +3 -1
  56. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/plugins/jidx_cw.py +3 -1
  57. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/plugins/jidx_ph.py +3 -1
  58. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/plugins/naqp_cw.py +3 -1
  59. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/plugins/naqp_ssb.py +3 -1
  60. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/plugins/phone_weekly_test.py +3 -1
  61. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/plugins/stew_perry_topband.py +3 -1
  62. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/plugins/winter_field_day.py +3 -1
  63. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/vfo.py +78 -98
  64. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm.egg-info/PKG-INFO +68 -55
  65. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm.egg-info/SOURCES.txt +2 -0
  66. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm.egg-info/requires.txt +1 -0
  67. {not1mm-24.3.15 → not1mm-24.3.24}/pyproject.toml +2 -1
  68. not1mm-24.3.24/testing/detectdark.py +35 -0
  69. not1mm-24.3.24/testing/test.py +17 -0
  70. not1mm-24.3.15/not1mm/data/vfo.ui +0 -72
  71. not1mm-24.3.15/testing/test.py +0 -15
  72. {not1mm-24.3.15 → not1mm-24.3.24}/LICENSE +0 -0
  73. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/__init__.py +0 -0
  74. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/JetBrainsMono-Regular.ttf +0 -0
  75. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/about.ui +0 -0
  76. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/alpha bravo charlie delta.txt +0 -0
  77. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/check.png +0 -0
  78. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/configuration.ui +0 -0
  79. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/contests.sql +0 -0
  80. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/cwmacros.txt +0 -0
  81. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/donors.html +0 -0
  82. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/editcontact.ui +0 -0
  83. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/editmacro.ui +0 -0
  84. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/greendot.png +0 -0
  85. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/k6gte-not1mm.desktop +0 -0
  86. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/k6gte.not1mm-128.png +0 -0
  87. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/k6gte.not1mm-32.png +0 -0
  88. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/k6gte.not1mm-64.png +0 -0
  89. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/new_contest.ui +0 -0
  90. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/not1mm.html +0 -0
  91. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/opon.ui +0 -0
  92. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/0.wav +0 -0
  93. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/1.wav +0 -0
  94. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/2.wav +0 -0
  95. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/3.wav +0 -0
  96. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/4.wav +0 -0
  97. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/5.wav +0 -0
  98. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/6.wav +0 -0
  99. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/7.wav +0 -0
  100. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/73.wav +0 -0
  101. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/8.wav +0 -0
  102. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/9.wav +0 -0
  103. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/a.wav +0 -0
  104. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/again.wav +0 -0
  105. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/b.wav +0 -0
  106. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/c.wav +0 -0
  107. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/contest.wav +0 -0
  108. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/cq.wav +0 -0
  109. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/d.wav +0 -0
  110. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/e.wav +0 -0
  111. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/f.wav +0 -0
  112. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/g.wav +0 -0
  113. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/h.wav +0 -0
  114. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/i.wav +0 -0
  115. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/j.wav +0 -0
  116. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/k.wav +0 -0
  117. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/k6gte.wav +0 -0
  118. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/l.wav +0 -0
  119. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/m.wav +0 -0
  120. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/mynumber.wav +0 -0
  121. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/n.wav +0 -0
  122. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/nil.wav +0 -0
  123. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/o.wav +0 -0
  124. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/p.wav +0 -0
  125. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/q.wav +0 -0
  126. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/r.wav +0 -0
  127. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/roger.wav +0 -0
  128. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/s.wav +0 -0
  129. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/space.wav +0 -0
  130. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/t.wav +0 -0
  131. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/thankyou.wav +0 -0
  132. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/thankyouqrz.wav +0 -0
  133. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/u.wav +0 -0
  134. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/v.wav +0 -0
  135. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/w.wav +0 -0
  136. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/x.wav +0 -0
  137. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/y.wav +0 -0
  138. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/yourcall.wav +0 -0
  139. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/phonetics/z.wav +0 -0
  140. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/pickcontest.ui +0 -0
  141. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/radio_green.png +0 -0
  142. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/radio_grey.png +0 -0
  143. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/radio_red.png +0 -0
  144. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/reddot.png +0 -0
  145. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/settings.ui +0 -0
  146. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/data/ssbmacros.txt +0 -0
  147. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/lib/__init__.py +0 -0
  148. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/lib/versiontest.py +0 -0
  149. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/plugins/__init__.py +0 -0
  150. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/plugins/arrl_rtty_ru.py +0 -0
  151. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/testing/fakeflrig.py +0 -0
  152. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/testing/flrigclient.py +0 -0
  153. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/testing/multicast_listener.py +0 -0
  154. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/testing/n1mm_listener.py +0 -0
  155. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/testing/simulant.py +0 -0
  156. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm/testing/test.py +0 -0
  157. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm.egg-info/dependency_links.txt +0 -0
  158. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm.egg-info/entry_points.txt +0 -0
  159. {not1mm-24.3.15 → not1mm-24.3.24}/not1mm.egg-info/top_level.txt +0 -0
  160. {not1mm-24.3.15 → not1mm-24.3.24}/setup.cfg +0 -0
  161. {not1mm-24.3.15 → not1mm-24.3.24}/usb_vfo_knob/code.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: not1mm
3
- Version: 24.3.15
3
+ Version: 24.3.24
4
4
  Summary: NOT1MM Logger
5
5
  Author-email: Michael Bridak <michael.bridak@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/mbridak/not1mm
@@ -27,6 +27,7 @@ Requires-Dist: soundfile
27
27
  Requires-Dist: numpy
28
28
  Requires-Dist: notctyparser>=23.6.21
29
29
  Requires-Dist: rapidfuzz
30
+ Requires-Dist: appdata
30
31
 
31
32
  # Not1MM
32
33
 
@@ -47,19 +48,16 @@ The worlds #1 unfinished contest logger <sup>*According to my daughter Corinna.<
47
48
  - [Our Code Contributors ✨](#our-code-contributors-)
48
49
  - [List of should be working contests](#list-of-should-be-working-contests)
49
50
  - [Recent Changes](#recent-changes)
50
- - [Installing from PyPi](#installing-from-pypi)
51
- - [Python and pip](#python-and-pip)
52
- - [Installing with pip](#installing-with-pip)
53
- - [Ubuntu 22.04 LTS](#ubuntu-2204-lts)
54
- - [Ubuntu 23.04](#ubuntu-2304)
55
- - [Fedora 38 \& 39](#fedora-38--39)
51
+ - [Installation](#installation)
52
+ - [Python, PyPI, pip and pipx](#python-pypi-pip-and-pipx)
53
+ - [Bootstrapping pipx](#bootstrapping-pipx)
54
+ - [Installing with pipx](#installing-with-pipx)
55
+ - [Installing portaudio](#installing-portaudio)
56
+ - [After install](#after-install)
56
57
  - [You may or may not get a warning message like](#you-may-or-may-not-get-a-warning-message-like)
57
58
  - [Or this fan favorite](#or-this-fan-favorite)
58
- - [Updating with pip/pipx](#updating-with-pippipx)
59
- - [Other Libraries](#other-libraries)
60
- - [Dark mode on Ubuntu](#dark-mode-on-ubuntu)
61
59
  - [Wayland Compositor](#wayland-compositor)
62
- - [Running from source](#running-from-source)
60
+ - [Running from source](#running-from-source)
63
61
  - [Various data file locations](#various-data-file-locations)
64
62
  - [Data](#data)
65
63
  - [Config](#config)
@@ -70,13 +68,14 @@ The worlds #1 unfinished contest logger <sup>*According to my daughter Corinna.<
70
68
  - [Revisiting an old friend](#revisiting-an-old-friend)
71
69
  - [Station Settings dialog (REQUIRED)](#station-settings-dialog-required)
72
70
  - [Changing station information](#changing-station-information)
73
- - [Adding a contest to the current dababase (REQUIRED)](#adding-a-contest-to-the-current-dababase-required)
74
- - [Selecting an existing contest as the current contest](#selecting-an-existing-contest-as-the-current-contest)
75
- - [Editing existing contest parameters](#editing-existing-contest-parameters)
71
+ - [Selecting a contest (REQUIRED)](#selecting-a-contest-required)
72
+ - [Selecting a new contest](#selecting-a-new-contest)
73
+ - [Selecting an existing contest as the current contest](#selecting-an-existing-contest-as-the-current-contest)
74
+ - [Editing existing contest parameters](#editing-existing-contest-parameters)
76
75
  - [Configuration Settings](#configuration-settings)
77
76
  - [Lookup](#lookup)
78
77
  - [Soundcard](#soundcard)
79
- - [CAT](#cat)
78
+ - [CAT Control](#cat-control)
80
79
  - [CW Keyer interface](#cw-keyer-interface)
81
80
  - [Cluster](#cluster)
82
81
  - [N1MM Packets](#n1mm-packets)
@@ -89,7 +88,7 @@ The worlds #1 unfinished contest logger <sup>*According to my daughter Corinna.<
89
88
  - [Other uses for the call field](#other-uses-for-the-call-field)
90
89
  - [Windows](#windows)
91
90
  - [The Main Window](#the-main-window)
92
- - [Keyboard commands](#keyboard-commands)
91
+ - [Keyboard commands](#keyboard-commands)
93
92
  - [Log Display](#log-display)
94
93
  - [Editing a contact](#editing-a-contact)
95
94
  - [Recalulate Mults](#recalulate-mults)
@@ -168,6 +167,11 @@ I wish to thank those who've contributed to the project.
168
167
 
169
168
  ## Recent Changes
170
169
 
170
+ - [24-3-24] Reworked fsutil.py to correct directory paths for Linux.
171
+ - [24-3-23] Yanked version 24-3-21, too many bugs for existing userbase.
172
+ - [24-3-21] Merged PR from @kyleboyle for docking windows. MacOS and Windows support.
173
+ - [24-3-19] Removed some useless bloat causing slow interface on FreeBSD 13/14 and maybe others.
174
+ - [24-3-16] Add Save/Fail confirmation dialogs when saving ADIF of Cabrillo files.
171
175
  - [24-3-15] Change 'CWR' to 'CW' in the ADIF output.
172
176
  - [24-3-13] Added CQ 160 CW and SSB
173
177
  - [24-3-9] Marked calls in the bandmap window colored Blue, until worked.
@@ -177,43 +181,64 @@ I wish to thank those who've contributed to the project.
177
181
 
178
182
  See [CHANGELOG.md](CHANGELOG.md) for prior changes.
179
183
 
180
- ## Installing from PyPi
184
+ ## Installation
181
185
 
182
- ### Python and pip
186
+ ### Python, PyPI, pip and pipx
183
187
 
184
- This software is a Python package hosted on PyPi, and installable with the pip or pipx command. If this is your first exposure to pip you can get all the details from [The PyPA](https://packaging.python.org/en/latest/tutorials/installing-packages/). In short, most linux distros come with Python pre installed. If pip is not installed by default, you can usually load it through your package manager. For example `sudo apt install python3-pip` or `sudo dnf install python3-pip`.
188
+ This software is a Python package hosted on PyPI, and installable with the pip or pipx command. If this is your first exposure to Python packaging you can get all the details from:
185
189
 
186
- ### Installing with pip
190
+ - [The PyPA](https://packaging.python.org/en/latest/tutorials/installing-packages/)
191
+ - [Install packages in a virtual environment using pip and venv](https://packaging.python.org/en/latest/guides/installing-using-pip-and-virtual-environments/)
192
+ - [Installing stand alone command line tools](https://packaging.python.org/en/latest/guides/installing-stand-alone-command-line-tools/)
187
193
 
188
- I've included what installation steps I took to install on fresh images of Ubuntu and Fedora below. YMMV.
194
+ In short, You should install stuff into a Python virtual environment. Newer Linux distros will make you do this unless you include a command line argument akin to '--break-my-system' when using pip. I'm not telling you to use pipx. But... **Use pipx**.
189
195
 
190
- #### Ubuntu 22.04 LTS
196
+ ### Bootstrapping pipx
197
+
198
+ Assuming you have only Python installed, your path to pipx is:
191
199
 
192
200
  ```bash
193
- sudo apt update
194
- sudo apt upgrade
195
- sudo apt install -y libportaudio2 python3-pip python3-pyqt5 python3-numpy adwaita-qt
196
- pip install -U not1mm
201
+ # First get pip installed. Either with apt or dnf, or the ensurepip command.
202
+ python3 -m ensurepip
203
+
204
+ # Update the pip that was just installed.
205
+ python3 -m pip install --upgrade pip
206
+
207
+ # Install pipx
208
+ python3 -m pip install --user pipx
209
+ python3 -m pipx ensurepath
197
210
  ```
198
211
 
199
- #### Ubuntu 23.04
212
+ ### Installing with pipx
213
+
214
+ Then installing not1mm is as simple as:
200
215
 
201
216
  ```bash
202
- sudo apt update
203
- sudo apt upgrade
204
- sudo apt install -y libportaudio2 adwaita-qt pipx
217
+ # Install not1mm
205
218
  pipx install not1mm
206
- pipx ensurepath
207
219
  ```
208
220
 
209
- #### Fedora 38 & 39
221
+ If you need to later update not1mm, you can do so with:
222
+
223
+ ```bash
224
+ # Update not1mm
225
+ pipx upgrade not1mm
226
+ ```
227
+
228
+ ### Installing portaudio
229
+
230
+ not1mm uses portaudio to play audio. You can install it with:
210
231
 
211
232
  ```bash
212
- sudo dnf upgrade --refresh
233
+ # Ubuntu
234
+ sudo apt install -y libportaudio2
235
+
236
+ # Fedora
213
237
  sudo dnf install python3-pip portaudio
214
- pip install not1mm
215
238
  ```
216
239
 
240
+ ## After install
241
+
217
242
  You can now open a new terminal and type `not1mm`. On it's first run, it may or may not install a lovely non AI generated
218
243
  icon, which you can later click on to launch the application.
219
244
 
@@ -240,27 +265,13 @@ To avoid this you can export an environment variable and launch the app like thi
240
265
 
241
266
  For a more permanent solution you can place the line `export QT_QPA_PLATFORM=wayland` in your home directories .bashrc file. Then after logging out and back in you should be able to launch it normally.
242
267
 
243
- ### Updating with pip/pipx
244
-
245
- I've been posting updates just about everyday. Sometimes multiple times a day. It's early days, so there is much to do. You can check for and install updates with `pip install -U not1mm` or if installed with pipx `pipx upgrade not1mm`.
246
-
247
- ## Other Libraries
248
-
249
- The audio library used, uses pipewire/portaudio. You may need to install portaudio. Ubuntu: `sudo apt install libportaudio2`
250
-
251
- ### Dark mode on Ubuntu
252
-
253
- I believe I figured out dark mode in Ubuntu and have it working on my shack PC that runs Ubuntu 22.04. The secret sauce seems to be installing adwaita-qt with apt, and setting an environment variable `QT_STYLE_OVERRIDE` to `Adwaita-Dark`. I set the environment variable in the start of the program if running on a Gnome platform. So you don't need to do that part.
254
-
255
- Or see this discussion [darkmode](https://github.com/mbridak/not1mm/discussions/60).
256
-
257
268
  ## Wayland Compositor
258
269
 
259
270
  One side effect of Wayland is that we are not able to request for a window to regain or retain focus. So if you were to click on a spot in the bandmap window to tune to that spot, you would have to then click on the main window to continue entering contest data. I'm aware of this, but I can not change it.
260
271
 
261
- ## Running from source
272
+ ### Running from source
262
273
 
263
- Since this is packaged for PyPi, if you want to work on your own source branch, after cloning from github you would:
274
+ Since this is packaged for PyPI, if you want to work on your own source branch, after cloning from github you would:
264
275
 
265
276
  ```bash
266
277
  pip install --upgrade pip
@@ -329,19 +340,21 @@ You can fill. You can fill. Everyone look at your keys.
329
340
 
330
341
  Station information can be changed any time by going to `File` > `Station Settings` and editing the information.
331
342
 
332
- ## Adding a contest to the current dababase (REQUIRED)
343
+ ## Selecting a contest (REQUIRED)
344
+
345
+ ### Selecting a new contest
333
346
 
334
347
  Select `File` > `New Contest`
335
348
 
336
349
  ![New Contest Dialog](https://github.com/mbridak/not1mm/raw/master/pic/new_contest.png)
337
350
 
338
- ## Selecting an existing contest as the current contest
351
+ ### Selecting an existing contest as the current contest
339
352
 
340
353
  Select `File` > `Open Contest`
341
354
 
342
355
  ![Open an existing contest](https://github.com/mbridak/not1mm/raw/master/pic/select_contest.png)
343
356
 
344
- ## Editing existing contest parameters
357
+ ### Editing existing contest parameters
345
358
 
346
359
  You can edit the parameters of a previously defined contest by selecting it as the current contest. Then select `File` > `Edit Current Contest`. Click `OK` to save the new values and reload the contest. `Cancel` to keep the existing parameters.
347
360
 
@@ -361,7 +374,7 @@ For callsign lookup, Two services are supported. QRZ and HamQTH. They require a
361
374
 
362
375
  Choose the sound output device for the voice keyer.
363
376
 
364
- ### CAT
377
+ ### CAT Control
365
378
 
366
379
  Under the `CAT` TAB, you can choose either `rigctld` normally with an IP of `127.0.0.1` and a port of `4532`. Or `flrig`, IP normally of `127.0.0.1` and a port of `12345`. `None` is always an option, but is it really? There's an onscreen icon for CAT status. Green good, Red bad, Grey neither.
367
380
 
@@ -444,7 +457,7 @@ After this, a request is made to QRZ for the gridsquare of the callsign. If ther
444
457
 
445
458
  ![Main screen with callouts](https://github.com/mbridak/not1mm/raw/master/pic/mainwithcallouts.png)
446
459
 
447
- #### Keyboard commands
460
+ ### Keyboard commands
448
461
 
449
462
  | Key | Result |
450
463
  | -------------- | --- |
@@ -17,19 +17,16 @@ The worlds #1 unfinished contest logger <sup>*According to my daughter Corinna.<
17
17
  - [Our Code Contributors ✨](#our-code-contributors-)
18
18
  - [List of should be working contests](#list-of-should-be-working-contests)
19
19
  - [Recent Changes](#recent-changes)
20
- - [Installing from PyPi](#installing-from-pypi)
21
- - [Python and pip](#python-and-pip)
22
- - [Installing with pip](#installing-with-pip)
23
- - [Ubuntu 22.04 LTS](#ubuntu-2204-lts)
24
- - [Ubuntu 23.04](#ubuntu-2304)
25
- - [Fedora 38 \& 39](#fedora-38--39)
20
+ - [Installation](#installation)
21
+ - [Python, PyPI, pip and pipx](#python-pypi-pip-and-pipx)
22
+ - [Bootstrapping pipx](#bootstrapping-pipx)
23
+ - [Installing with pipx](#installing-with-pipx)
24
+ - [Installing portaudio](#installing-portaudio)
25
+ - [After install](#after-install)
26
26
  - [You may or may not get a warning message like](#you-may-or-may-not-get-a-warning-message-like)
27
27
  - [Or this fan favorite](#or-this-fan-favorite)
28
- - [Updating with pip/pipx](#updating-with-pippipx)
29
- - [Other Libraries](#other-libraries)
30
- - [Dark mode on Ubuntu](#dark-mode-on-ubuntu)
31
28
  - [Wayland Compositor](#wayland-compositor)
32
- - [Running from source](#running-from-source)
29
+ - [Running from source](#running-from-source)
33
30
  - [Various data file locations](#various-data-file-locations)
34
31
  - [Data](#data)
35
32
  - [Config](#config)
@@ -40,13 +37,14 @@ The worlds #1 unfinished contest logger <sup>*According to my daughter Corinna.<
40
37
  - [Revisiting an old friend](#revisiting-an-old-friend)
41
38
  - [Station Settings dialog (REQUIRED)](#station-settings-dialog-required)
42
39
  - [Changing station information](#changing-station-information)
43
- - [Adding a contest to the current dababase (REQUIRED)](#adding-a-contest-to-the-current-dababase-required)
44
- - [Selecting an existing contest as the current contest](#selecting-an-existing-contest-as-the-current-contest)
45
- - [Editing existing contest parameters](#editing-existing-contest-parameters)
40
+ - [Selecting a contest (REQUIRED)](#selecting-a-contest-required)
41
+ - [Selecting a new contest](#selecting-a-new-contest)
42
+ - [Selecting an existing contest as the current contest](#selecting-an-existing-contest-as-the-current-contest)
43
+ - [Editing existing contest parameters](#editing-existing-contest-parameters)
46
44
  - [Configuration Settings](#configuration-settings)
47
45
  - [Lookup](#lookup)
48
46
  - [Soundcard](#soundcard)
49
- - [CAT](#cat)
47
+ - [CAT Control](#cat-control)
50
48
  - [CW Keyer interface](#cw-keyer-interface)
51
49
  - [Cluster](#cluster)
52
50
  - [N1MM Packets](#n1mm-packets)
@@ -59,7 +57,7 @@ The worlds #1 unfinished contest logger <sup>*According to my daughter Corinna.<
59
57
  - [Other uses for the call field](#other-uses-for-the-call-field)
60
58
  - [Windows](#windows)
61
59
  - [The Main Window](#the-main-window)
62
- - [Keyboard commands](#keyboard-commands)
60
+ - [Keyboard commands](#keyboard-commands)
63
61
  - [Log Display](#log-display)
64
62
  - [Editing a contact](#editing-a-contact)
65
63
  - [Recalulate Mults](#recalulate-mults)
@@ -138,6 +136,11 @@ I wish to thank those who've contributed to the project.
138
136
 
139
137
  ## Recent Changes
140
138
 
139
+ - [24-3-24] Reworked fsutil.py to correct directory paths for Linux.
140
+ - [24-3-23] Yanked version 24-3-21, too many bugs for existing userbase.
141
+ - [24-3-21] Merged PR from @kyleboyle for docking windows. MacOS and Windows support.
142
+ - [24-3-19] Removed some useless bloat causing slow interface on FreeBSD 13/14 and maybe others.
143
+ - [24-3-16] Add Save/Fail confirmation dialogs when saving ADIF of Cabrillo files.
141
144
  - [24-3-15] Change 'CWR' to 'CW' in the ADIF output.
142
145
  - [24-3-13] Added CQ 160 CW and SSB
143
146
  - [24-3-9] Marked calls in the bandmap window colored Blue, until worked.
@@ -147,43 +150,64 @@ I wish to thank those who've contributed to the project.
147
150
 
148
151
  See [CHANGELOG.md](CHANGELOG.md) for prior changes.
149
152
 
150
- ## Installing from PyPi
153
+ ## Installation
151
154
 
152
- ### Python and pip
155
+ ### Python, PyPI, pip and pipx
153
156
 
154
- This software is a Python package hosted on PyPi, and installable with the pip or pipx command. If this is your first exposure to pip you can get all the details from [The PyPA](https://packaging.python.org/en/latest/tutorials/installing-packages/). In short, most linux distros come with Python pre installed. If pip is not installed by default, you can usually load it through your package manager. For example `sudo apt install python3-pip` or `sudo dnf install python3-pip`.
157
+ This software is a Python package hosted on PyPI, and installable with the pip or pipx command. If this is your first exposure to Python packaging you can get all the details from:
155
158
 
156
- ### Installing with pip
159
+ - [The PyPA](https://packaging.python.org/en/latest/tutorials/installing-packages/)
160
+ - [Install packages in a virtual environment using pip and venv](https://packaging.python.org/en/latest/guides/installing-using-pip-and-virtual-environments/)
161
+ - [Installing stand alone command line tools](https://packaging.python.org/en/latest/guides/installing-stand-alone-command-line-tools/)
157
162
 
158
- I've included what installation steps I took to install on fresh images of Ubuntu and Fedora below. YMMV.
163
+ In short, You should install stuff into a Python virtual environment. Newer Linux distros will make you do this unless you include a command line argument akin to '--break-my-system' when using pip. I'm not telling you to use pipx. But... **Use pipx**.
159
164
 
160
- #### Ubuntu 22.04 LTS
165
+ ### Bootstrapping pipx
166
+
167
+ Assuming you have only Python installed, your path to pipx is:
161
168
 
162
169
  ```bash
163
- sudo apt update
164
- sudo apt upgrade
165
- sudo apt install -y libportaudio2 python3-pip python3-pyqt5 python3-numpy adwaita-qt
166
- pip install -U not1mm
170
+ # First get pip installed. Either with apt or dnf, or the ensurepip command.
171
+ python3 -m ensurepip
172
+
173
+ # Update the pip that was just installed.
174
+ python3 -m pip install --upgrade pip
175
+
176
+ # Install pipx
177
+ python3 -m pip install --user pipx
178
+ python3 -m pipx ensurepath
167
179
  ```
168
180
 
169
- #### Ubuntu 23.04
181
+ ### Installing with pipx
182
+
183
+ Then installing not1mm is as simple as:
170
184
 
171
185
  ```bash
172
- sudo apt update
173
- sudo apt upgrade
174
- sudo apt install -y libportaudio2 adwaita-qt pipx
186
+ # Install not1mm
175
187
  pipx install not1mm
176
- pipx ensurepath
177
188
  ```
178
189
 
179
- #### Fedora 38 & 39
190
+ If you need to later update not1mm, you can do so with:
191
+
192
+ ```bash
193
+ # Update not1mm
194
+ pipx upgrade not1mm
195
+ ```
196
+
197
+ ### Installing portaudio
198
+
199
+ not1mm uses portaudio to play audio. You can install it with:
180
200
 
181
201
  ```bash
182
- sudo dnf upgrade --refresh
202
+ # Ubuntu
203
+ sudo apt install -y libportaudio2
204
+
205
+ # Fedora
183
206
  sudo dnf install python3-pip portaudio
184
- pip install not1mm
185
207
  ```
186
208
 
209
+ ## After install
210
+
187
211
  You can now open a new terminal and type `not1mm`. On it's first run, it may or may not install a lovely non AI generated
188
212
  icon, which you can later click on to launch the application.
189
213
 
@@ -210,27 +234,13 @@ To avoid this you can export an environment variable and launch the app like thi
210
234
 
211
235
  For a more permanent solution you can place the line `export QT_QPA_PLATFORM=wayland` in your home directories .bashrc file. Then after logging out and back in you should be able to launch it normally.
212
236
 
213
- ### Updating with pip/pipx
214
-
215
- I've been posting updates just about everyday. Sometimes multiple times a day. It's early days, so there is much to do. You can check for and install updates with `pip install -U not1mm` or if installed with pipx `pipx upgrade not1mm`.
216
-
217
- ## Other Libraries
218
-
219
- The audio library used, uses pipewire/portaudio. You may need to install portaudio. Ubuntu: `sudo apt install libportaudio2`
220
-
221
- ### Dark mode on Ubuntu
222
-
223
- I believe I figured out dark mode in Ubuntu and have it working on my shack PC that runs Ubuntu 22.04. The secret sauce seems to be installing adwaita-qt with apt, and setting an environment variable `QT_STYLE_OVERRIDE` to `Adwaita-Dark`. I set the environment variable in the start of the program if running on a Gnome platform. So you don't need to do that part.
224
-
225
- Or see this discussion [darkmode](https://github.com/mbridak/not1mm/discussions/60).
226
-
227
237
  ## Wayland Compositor
228
238
 
229
239
  One side effect of Wayland is that we are not able to request for a window to regain or retain focus. So if you were to click on a spot in the bandmap window to tune to that spot, you would have to then click on the main window to continue entering contest data. I'm aware of this, but I can not change it.
230
240
 
231
- ## Running from source
241
+ ### Running from source
232
242
 
233
- Since this is packaged for PyPi, if you want to work on your own source branch, after cloning from github you would:
243
+ Since this is packaged for PyPI, if you want to work on your own source branch, after cloning from github you would:
234
244
 
235
245
  ```bash
236
246
  pip install --upgrade pip
@@ -299,19 +309,21 @@ You can fill. You can fill. Everyone look at your keys.
299
309
 
300
310
  Station information can be changed any time by going to `File` > `Station Settings` and editing the information.
301
311
 
302
- ## Adding a contest to the current dababase (REQUIRED)
312
+ ## Selecting a contest (REQUIRED)
313
+
314
+ ### Selecting a new contest
303
315
 
304
316
  Select `File` > `New Contest`
305
317
 
306
318
  ![New Contest Dialog](https://github.com/mbridak/not1mm/raw/master/pic/new_contest.png)
307
319
 
308
- ## Selecting an existing contest as the current contest
320
+ ### Selecting an existing contest as the current contest
309
321
 
310
322
  Select `File` > `Open Contest`
311
323
 
312
324
  ![Open an existing contest](https://github.com/mbridak/not1mm/raw/master/pic/select_contest.png)
313
325
 
314
- ## Editing existing contest parameters
326
+ ### Editing existing contest parameters
315
327
 
316
328
  You can edit the parameters of a previously defined contest by selecting it as the current contest. Then select `File` > `Edit Current Contest`. Click `OK` to save the new values and reload the contest. `Cancel` to keep the existing parameters.
317
329
 
@@ -331,7 +343,7 @@ For callsign lookup, Two services are supported. QRZ and HamQTH. They require a
331
343
 
332
344
  Choose the sound output device for the voice keyer.
333
345
 
334
- ### CAT
346
+ ### CAT Control
335
347
 
336
348
  Under the `CAT` TAB, you can choose either `rigctld` normally with an IP of `127.0.0.1` and a port of `4532`. Or `flrig`, IP normally of `127.0.0.1` and a port of `12345`. `None` is always an option, but is it really? There's an onscreen icon for CAT status. Green good, Red bad, Grey neither.
337
349
 
@@ -414,7 +426,7 @@ After this, a request is made to QRZ for the gridsquare of the callsign. If ther
414
426
 
415
427
  ![Main screen with callouts](https://github.com/mbridak/not1mm/raw/master/pic/mainwithcallouts.png)
416
428
 
417
- #### Keyboard commands
429
+ ### Keyboard commands
418
430
 
419
431
  | Key | Result |
420
432
  | -------------- | --- |