Skip to content

Commit 0086def

Browse files
authored
Merge pull request #249 from mbridak/Add_Rate_Window
Add rate window
2 parents eaed65d + b36b3f5 commit 0086def

File tree

6 files changed

+1507
-19
lines changed

6 files changed

+1507
-19
lines changed

README.md

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
- [The What](#the-what)
2121
- [Target Environment](#target-environment)
2222
- [The Why](#the-why)
23-
- [General logging](#general-logging)
2423
- [Current state](#current-state)
2524
- [Code maturity](#code-maturity)
2625
- [Data and RTTY](#data-and-rtty)
@@ -133,11 +132,6 @@ I'm a casual contester and could not find any contesting software for Linux that
133132
I wanted to use. There is [Tucnak](http://tucnak.nagano.cz/) which is very robust
134133
and mature. It just wasn't for me.
135134

136-
### General logging
137-
138-
In short... Don't. There are much better general purpose QSO logging programs.
139-
Try QLog or CQRLog.
140-
141135
## Current state
142136

143137
### Code maturity
@@ -217,7 +211,7 @@ See [CHANGELOG.md](CHANGELOG.md) for prior changes.
217211

218212
## Flatpak
219213

220-
I've tried for a couple days to get not1mm to build as a flatpak. I've failed.
214+
I've tried for a couple days to get Not1MM to build as a flatpak. I've failed.
221215
It keeps failing at building numpy. If you happen to be a flatpak savant, please
222216
feel free to look at com.github.mbridak.not1mm.yaml and python3-modules.yaml and
223217
clue me into the black magic needed to get it to work.
@@ -226,7 +220,7 @@ clue me into the black magic needed to get it to work.
226220

227221
### Prerequisites
228222

229-
not1mm requires:
223+
Not1MM requires:
230224

231225
- Python 3.9+
232226
- PyQt6
@@ -238,7 +232,7 @@ You should install these through your distribution's package manager before cont
238232
### Common installation recipes for Ubuntu and Fedora
239233

240234
I've taken the time to install some common Linux distributions into a VM and
241-
noted the minimum steps needed to install not1mm.
235+
noted the minimum steps needed to install Not1MM.
242236

243237
<details>
244238

@@ -362,14 +356,14 @@ python3 -m pipx ensurepath
362356

363357
#### Installing with pipx
364358

365-
Then installing not1mm is as simple as:
359+
Then installing Not1MM is as simple as:
366360

367361
```bash
368362
# Install not1mm
369363
pipx install not1mm
370364
```
371365

372-
If you need to later update not1mm, you can do so with:
366+
If you need to later update Not1MM, you can do so with:
373367

374368
```bash
375369
# Update not1mm
@@ -392,7 +386,7 @@ source rebuild.sh
392386
```
393387

394388
from the root directory. This installs a build chain and a local editable copy
395-
of not1mm.
389+
of Not1MM.
396390

397391
There's two ways to launch the program from the local editable copy.
398392

@@ -595,14 +589,10 @@ On the Options TAB you can:
595589

596590
## Logging WSJT-X FT8/FT4/ETC and FLDIGI RTTY contacts
597591

598-
not1mm listens for WSJT-X UDP traffic on the Multicast address 224.0.0.1:2237.
599-
No setup is needed to be done on not1mm's side. That's good because I'm lazy.
600-
601-
~~not1mm polls for fldigi QSOs via it's XMLRPC interface. It does this in a rather stupid
602-
way. It just keeps asking what was the last QSO and compares it to the previous response.
603-
If it's different, it's new.~~
592+
Not1MM listens for WSJT-X UDP traffic on the Multicast address 224.0.0.1:2237.
593+
No setup is needed to be done on Not1MM's side. That's good because I'm lazy.
604594

605-
not1mm watches for fldigi qso's by watching for UDP traffic from fldigi on 127.0.0.1:9876.
595+
Not1MM watches for fldigi qso's by watching for UDP traffic from fldigi on 127.0.0.1:9876.
606596

607597
![fldigi configuration dialog](https://github.com/mbridak/not1mm/blob/master/pic/fldigi_adif_udp.png?raw=true)
608598

not1mm/__main__.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
from not1mm.checkwindow import CheckWindow
7474
from not1mm.bandmap import BandMapWindow
7575
from not1mm.vfo import VfoWindow
76+
from not1mm.ratewindow import RateWindow
7677
from not1mm.radio import Radio
7778
from not1mm.voice_keying import Voice
7879
from not1mm.lookupservice import LookupService
@@ -136,6 +137,7 @@ class MainWindow(QtWidgets.QMainWindow):
136137
"bandmapwindow": False,
137138
"checkwindow": False,
138139
"vfowindow": False,
140+
"ratewindow": False,
139141
"darkmode": True,
140142
}
141143
appstarted = False
@@ -236,6 +238,7 @@ def __init__(self, splash):
236238
self.actionLog_Window.triggered.connect(self.launch_log_window)
237239
self.actionBandmap.triggered.connect(self.launch_bandmap_window)
238240
self.actionCheck_Window.triggered.connect(self.launch_check_window)
241+
self.actionRate_Window.triggered.connect(self.launch_rate_window)
239242
self.actionVFO.triggered.connect(self.launch_vfo)
240243
self.actionRecalculate_Mults.triggered.connect(self.recalculate_mults)
241244
self.actionLoad_Call_History_File.triggered.connect(self.load_call_history)
@@ -642,6 +645,15 @@ def __init__(self, splash):
642645
self.check_window.hide()
643646
self.check_window.message.connect(self.dockwidget_message)
644647

648+
self.show_splash_msg("Setting up RateWindow.")
649+
self.rate_window = RateWindow()
650+
self.rate_window.setObjectName("rate-window")
651+
if os.environ.get("WAYLAND_DISPLAY") and old_Qt is True:
652+
self.rate_window.setFeatures(dockfeatures)
653+
self.addDockWidget(Qt.DockWidgetArea.RightDockWidgetArea, self.rate_window)
654+
self.rate_window.hide()
655+
self.rate_window.message.connect(self.dockwidget_message)
656+
645657
self.show_splash_msg("Setting up VFOWindow.")
646658
self.vfo_window = VfoWindow()
647659
self.vfo_window.setObjectName("vfo-window")
@@ -692,6 +704,15 @@ def __init__(self, splash):
692704
self.check_window.hide()
693705
self.check_window.setActive(False)
694706

707+
self.actionRate_Window.setChecked(self.pref.get("ratewindow", False))
708+
if self.actionRate_Window.isChecked():
709+
print(f"===============ratewindow=============")
710+
self.rate_window.show()
711+
self.rate_window.setActive(True)
712+
else:
713+
self.rate_window.hide()
714+
self.rate_window.setActive(False)
715+
695716
self.actionVFO.setChecked(self.pref.get("vfowindow", False))
696717
if self.actionVFO.isChecked():
697718
self.vfo_window.show()
@@ -1841,6 +1862,17 @@ def launch_check_window(self) -> None:
18411862
self.check_window.hide()
18421863
self.check_window.setActive(False)
18431864

1865+
def launch_rate_window(self) -> None:
1866+
"""Launch the check window"""
1867+
self.pref["ratewindow"] = self.actionRate_Window.isChecked()
1868+
self.write_preference()
1869+
if self.actionRate_Window.isChecked():
1870+
self.rate_window.show()
1871+
self.rate_window.setActive(True)
1872+
else:
1873+
self.rate_window.hide()
1874+
self.rate_window.setActive(False)
1875+
18441876
def launch_vfo(self) -> None:
18451877
"""Launch the VFO window"""
18461878
self.pref["vfowindow"] = self.actionVFO.isChecked()

not1mm/data/main.ui

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1513,6 +1513,7 @@
15131513
<addaction name="actionLog_Window"/>
15141514
<addaction name="actionBandmap"/>
15151515
<addaction name="actionCheck_Window"/>
1516+
<addaction name="actionRate_Window"/>
15161517
<addaction name="actionVFO"/>
15171518
</widget>
15181519
<widget class="QMenu" name="menuOther">
@@ -1961,6 +1962,19 @@
19611962
</font>
19621963
</property>
19631964
</action>
1965+
<action name="actionRate_Window">
1966+
<property name="checkable">
1967+
<bool>true</bool>
1968+
</property>
1969+
<property name="text">
1970+
<string>Rate Window</string>
1971+
</property>
1972+
<property name="font">
1973+
<font>
1974+
<family>JetBrains Mono ExtraLight</family>
1975+
</font>
1976+
</property>
1977+
</action>
19641978
<action name="actionVFO">
19651979
<property name="checkable">
19661980
<bool>true</bool>

0 commit comments

Comments
 (0)