mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-11-22 08:04:49 -05:00
Add acronym decoder widget
This commit is contained in:
parent
197a22ae85
commit
4c6ee84f48
@ -106,3 +106,4 @@ Click to specify the name of the .txt file which received characters are logged
|
|||||||
|
|
||||||
The received text area shows characters as they are received.
|
The received text area shows characters as they are received.
|
||||||
|
|
||||||
|
Holding the cursor over an acronym may show a tooltip with the decoded acronym.
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
#include "plugin/pluginapi.h"
|
#include "plugin/pluginapi.h"
|
||||||
#include "util/simpleserializer.h"
|
#include "util/simpleserializer.h"
|
||||||
#include "util/db.h"
|
#include "util/db.h"
|
||||||
|
#include "util/rtty.h"
|
||||||
#include "gui/basicchannelsettingsdialog.h"
|
#include "gui/basicchannelsettingsdialog.h"
|
||||||
#include "gui/devicestreamselectiondialog.h"
|
#include "gui/devicestreamselectiondialog.h"
|
||||||
#include "dsp/dspengine.h"
|
#include "dsp/dspengine.h"
|
||||||
@ -482,6 +483,8 @@ RttyDemodGUI::RttyDemodGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, Baseb
|
|||||||
connect(&m_channelMarker, SIGNAL(highlightedByCursor()), this, SLOT(channelMarkerHighlightedByCursor()));
|
connect(&m_channelMarker, SIGNAL(highlightedByCursor()), this, SLOT(channelMarkerHighlightedByCursor()));
|
||||||
connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()));
|
connect(getInputMessageQueue(), SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()));
|
||||||
|
|
||||||
|
ui->text->addAcronyms(Rtty::m_acronyms);
|
||||||
|
|
||||||
ui->scopeContainer->setVisible(false);
|
ui->scopeContainer->setVisible(false);
|
||||||
|
|
||||||
// Hide developer only settings
|
// Hide developer only settings
|
||||||
|
@ -916,7 +916,7 @@
|
|||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPlainTextEdit" name="text">
|
<widget class="AcronymView" name="text">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>Received text</string>
|
<string>Received text</string>
|
||||||
</property>
|
</property>
|
||||||
@ -1293,6 +1293,12 @@
|
|||||||
<header>gui/glscopegui.h</header>
|
<header>gui/glscopegui.h</header>
|
||||||
<container>1</container>
|
<container>1</container>
|
||||||
</customwidget>
|
</customwidget>
|
||||||
|
<customwidget>
|
||||||
|
<class>AcronymView</class>
|
||||||
|
<extends>QTextEdit</extends>
|
||||||
|
<header>gui/acronymview.h</header>
|
||||||
|
<container>1</container>
|
||||||
|
</customwidget>
|
||||||
</customwidgets>
|
</customwidgets>
|
||||||
<tabstops>
|
<tabstops>
|
||||||
<tabstop>deltaFrequency</tabstop>
|
<tabstop>deltaFrequency</tabstop>
|
||||||
|
@ -115,6 +115,12 @@ Predefined text supports the following variable substitutions:
|
|||||||
|
|
||||||
The substitutions are applied when the Transmit Settings dialog is closed.
|
The substitutions are applied when the Transmit Settings dialog is closed.
|
||||||
|
|
||||||
|
<h3>21: Transmitted Text</h3>
|
||||||
|
|
||||||
|
The trasnmitted text area shows characters as they are transmitted.
|
||||||
|
|
||||||
|
Holding the cursor over an acronym may show a tooltip with the decoded acronym.
|
||||||
|
|
||||||
<h2>API</h2>
|
<h2>API</h2>
|
||||||
|
|
||||||
Full details of the API can be found in the Swagger documentation. Below are a few examples.
|
Full details of the API can be found in the Swagger documentation. Below are a few examples.
|
||||||
|
@ -31,6 +31,7 @@
|
|||||||
#include "plugin/pluginapi.h"
|
#include "plugin/pluginapi.h"
|
||||||
#include "util/simpleserializer.h"
|
#include "util/simpleserializer.h"
|
||||||
#include "util/db.h"
|
#include "util/db.h"
|
||||||
|
#include "util/rtty.h"
|
||||||
#include "util/maidenhead.h"
|
#include "util/maidenhead.h"
|
||||||
#include "gui/glspectrum.h"
|
#include "gui/glspectrum.h"
|
||||||
#include "gui/crightclickenabler.h"
|
#include "gui/crightclickenabler.h"
|
||||||
@ -476,6 +477,8 @@ RttyModGUI::RttyModGUI(PluginAPI* pluginAPI, DeviceUISet *deviceUISet, BasebandS
|
|||||||
m_settings.setChannelMarker(&m_channelMarker);
|
m_settings.setChannelMarker(&m_channelMarker);
|
||||||
m_settings.setRollupState(&m_rollupState);
|
m_settings.setRollupState(&m_rollupState);
|
||||||
|
|
||||||
|
ui->transmittedText->addAcronyms(Rtty::m_acronyms);
|
||||||
|
|
||||||
ui->spectrumContainer->setVisible(false);
|
ui->spectrumContainer->setVisible(false);
|
||||||
|
|
||||||
displaySettings();
|
displaySettings();
|
||||||
|
@ -751,7 +751,7 @@
|
|||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<spacer name="horizontalSpacer_2">
|
<spacer name="horizontalSpacerSettings">
|
||||||
<property name="orientation">
|
<property name="orientation">
|
||||||
<enum>Qt::Horizontal</enum>
|
<enum>Qt::Horizontal</enum>
|
||||||
</property>
|
</property>
|
||||||
@ -854,11 +854,7 @@
|
|||||||
<number>3</number>
|
<number>3</number>
|
||||||
</property>
|
</property>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPlainTextEdit" name="transmittedText">
|
<widget class="AcronymView" name="transmittedText"/>
|
||||||
<property name="readOnly">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
@ -960,6 +956,12 @@
|
|||||||
<header>gui/levelmeter.h</header>
|
<header>gui/levelmeter.h</header>
|
||||||
<container>1</container>
|
<container>1</container>
|
||||||
</customwidget>
|
</customwidget>
|
||||||
|
<customwidget>
|
||||||
|
<class>AcronymView</class>
|
||||||
|
<extends>QTextEdit</extends>
|
||||||
|
<header>gui/acronymview.h</header>
|
||||||
|
<container>1</container>
|
||||||
|
</customwidget>
|
||||||
</customwidgets>
|
</customwidgets>
|
||||||
<tabstops>
|
<tabstops>
|
||||||
<tabstop>deltaFrequency</tabstop>
|
<tabstop>deltaFrequency</tabstop>
|
||||||
|
@ -57,7 +57,7 @@ void RttyModSettings::resetToDefaults()
|
|||||||
"UR 599 QTH IS ${location}",
|
"UR 599 QTH IS ${location}",
|
||||||
"TU DE ${callsign} CQ"
|
"TU DE ${callsign} CQ"
|
||||||
});
|
});
|
||||||
m_rgbColor = QColor(0, 105, 2).rgb();
|
m_rgbColor = QColor(180, 205, 130).rgb();
|
||||||
m_title = "RTTY Modulator";
|
m_title = "RTTY Modulator";
|
||||||
m_streamIndex = 0;
|
m_streamIndex = 0;
|
||||||
m_useReverseAPI = false;
|
m_useReverseAPI = false;
|
||||||
|
@ -259,6 +259,7 @@ set(sdrbase_SOURCES
|
|||||||
util/simpleserializer.cpp
|
util/simpleserializer.cpp
|
||||||
util/serialutil.cpp
|
util/serialutil.cpp
|
||||||
#util/spinlock.cpp
|
#util/spinlock.cpp
|
||||||
|
util/rtty.cpp
|
||||||
util/uid.cpp
|
util/uid.cpp
|
||||||
util/units.cpp
|
util/units.cpp
|
||||||
util/timeutil.cpp
|
util/timeutil.cpp
|
||||||
@ -491,6 +492,7 @@ set(sdrbase_HEADERS
|
|||||||
util/profiler.h
|
util/profiler.h
|
||||||
util/radiosonde.h
|
util/radiosonde.h
|
||||||
util/rtpsink.h
|
util/rtpsink.h
|
||||||
|
util/rtty.h
|
||||||
util/syncmessenger.h
|
util/syncmessenger.h
|
||||||
util/samplesourceserializer.h
|
util/samplesourceserializer.h
|
||||||
util/simpleserializer.h
|
util/simpleserializer.h
|
||||||
|
290
sdrbase/util/rtty.cpp
Normal file
290
sdrbase/util/rtty.cpp
Normal file
@ -0,0 +1,290 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Copyright (C) 2023 Jon Beniston, M7RCE //
|
||||||
|
// //
|
||||||
|
// This program is free software; you can redistribute it and/or modify //
|
||||||
|
// it under the terms of the GNU General Public License as published by //
|
||||||
|
// the Free Software Foundation as version 3 of the License, or //
|
||||||
|
// (at your option) any later version. //
|
||||||
|
// //
|
||||||
|
// This program is distributed in the hope that it will be useful, //
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
||||||
|
// GNU General Public License V3 for more details. //
|
||||||
|
// //
|
||||||
|
// You should have received a copy of the GNU General Public License //
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>. //
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include "util/rtty.h"
|
||||||
|
|
||||||
|
// From http://www.ct2fzi.net/abreviations/abreviations.html
|
||||||
|
const QHash<QString, QString> Rtty::m_acronyms = {
|
||||||
|
{"AA", "After All"},
|
||||||
|
{"AB", "All Before"},
|
||||||
|
{"ABT", "About"},
|
||||||
|
{"ACK", "Acknowledgement"},
|
||||||
|
{"ADEE", "Addressee"},
|
||||||
|
{"ADR", "Address"},
|
||||||
|
{"AF", "Audio Frequency"},
|
||||||
|
{"AGN", "Again"},
|
||||||
|
{"AM", "Amplitude Modulation"},
|
||||||
|
{"AMU", "Antenna Matching Unit"},
|
||||||
|
{"ANS", "Answer"},
|
||||||
|
{"ANT", "Antenna"},
|
||||||
|
{"ARQ", "Automatic Repeat Request"},
|
||||||
|
{"ATU", "Antenna Tuning Unit"},
|
||||||
|
{"B4", "Before"},
|
||||||
|
{"BCN", "Beacon"},
|
||||||
|
{"BCNU", "Be Seeing You"},
|
||||||
|
{"BD", "Bad"},
|
||||||
|
{"BK", "Break"},
|
||||||
|
{"BN", "Been"},
|
||||||
|
{"BTH", "Both"},
|
||||||
|
{"BTR", "Better"},
|
||||||
|
{"BTW", "By The Way"},
|
||||||
|
{"BTU", "Back To You"},
|
||||||
|
{"C", "Correct"},
|
||||||
|
{"CBA", "Callbook Address"},
|
||||||
|
{"CFM", "Confirm"},
|
||||||
|
{"CK", "Check"},
|
||||||
|
{"CKT", "Circuit"},
|
||||||
|
{"CL", "Closing Down"},
|
||||||
|
{"CLBK", "Callbook"},
|
||||||
|
{"CLD", "Called"},
|
||||||
|
{"CLG", "Calling"},
|
||||||
|
{"CMG", "Coming"},
|
||||||
|
{"CNT", "Can't"},
|
||||||
|
{"COMP", "Computer"},
|
||||||
|
{"CONDX", "Conditions"},
|
||||||
|
{"COZ", "Because"},
|
||||||
|
{"CPI", "Copy"},
|
||||||
|
{"CQ", "General Call"},
|
||||||
|
{"CRD", "Card"},
|
||||||
|
{"CS", "Callsign"},
|
||||||
|
{"CTCSS", "Continuous Tone Coded Squelch System"},
|
||||||
|
{"CU", "See You"},
|
||||||
|
{"CUAGN", "See You Again"},
|
||||||
|
{"CUD", "Could"},
|
||||||
|
{"CUL", "See You Later"},
|
||||||
|
{"CUM", "Come"},
|
||||||
|
{"CUZ", "Because"},
|
||||||
|
{"CW", "Continuous Wave / Morse"},
|
||||||
|
{"DA", "Day"},
|
||||||
|
{"DE", "From"},
|
||||||
|
{"DF", "Direction Finding"},
|
||||||
|
{"DIFF", "Difference"},
|
||||||
|
{"DLD", "Delivered"},
|
||||||
|
{"DLVD", "Delivered"},
|
||||||
|
{"DN", "Down"},
|
||||||
|
{"DR", "Dear"},
|
||||||
|
{"DSB", "Double Side Band"},
|
||||||
|
{"DSP", "Digital Signal Processing"},
|
||||||
|
{"DSW", "Goodbye (Russian)"},
|
||||||
|
{"DWN", "Down"},
|
||||||
|
{"DX", "Distance"},
|
||||||
|
{"EL", "Element"},
|
||||||
|
{"EME", "Earth-Moon-Earth"},
|
||||||
|
{"ENUF", "Enough"},
|
||||||
|
{"ES", "And"},
|
||||||
|
{"EU", "Europe"},
|
||||||
|
{"EVE", "Evening"},
|
||||||
|
{"FB", "Fine Business"},
|
||||||
|
{"FER", "For"},
|
||||||
|
{"FIO", "For Information Only"},
|
||||||
|
{"FM", "Frequency Modulation"},
|
||||||
|
{"FQ", "Frequency"},
|
||||||
|
{"FREQ", "Frequency"},
|
||||||
|
{"FSD", "Full Scale Deflection"},
|
||||||
|
{"FSK", "Frequency Shift Keying"},
|
||||||
|
{"FWD", "Forward"},
|
||||||
|
{"FWIW", "For What It's Worth"},
|
||||||
|
{"FYI", "For Your Information"},
|
||||||
|
{"GA", "Good Afternoon"},
|
||||||
|
{"GB", "Good Bye"},
|
||||||
|
{"GD", "Good Day"},
|
||||||
|
{"GE", "Good Evening"},
|
||||||
|
{"GESS", "Guess"},
|
||||||
|
{"GG", "Going"},
|
||||||
|
{"GLD", "Glad"},
|
||||||
|
{"GM", "Good Morning"},
|
||||||
|
{"GMT", "Greenwich Mean Time"},
|
||||||
|
{"GN", "Good Night"},
|
||||||
|
{"GND", "Ground"},
|
||||||
|
{"GP", "Ground Plane"},
|
||||||
|
{"GPS", "Global Positioning System"},
|
||||||
|
{"GS", "Green Stamp"},
|
||||||
|
{"GUD", "Good"},
|
||||||
|
{"GV", "Give"},
|
||||||
|
{"GVG", "Giving"},
|
||||||
|
{"HAGD", "Have A Good Day"},
|
||||||
|
{"HAGWE", "Have A Good Weekend"},
|
||||||
|
{"HF", "High Frequency"},
|
||||||
|
{"HI", "High"},
|
||||||
|
{"HPE", "Hope"},
|
||||||
|
{"HQ", "Headquarters"},
|
||||||
|
{"HR", "Here / Hour"},
|
||||||
|
{"HRD", "Heard"},
|
||||||
|
{"HV", "Have"},
|
||||||
|
{"HVG", "Having"},
|
||||||
|
{"HVY", "Heavy"},
|
||||||
|
{"HW", "How"},
|
||||||
|
{"IMHO", "In My Humble Opinion"},
|
||||||
|
{"IMI", "Say again"},
|
||||||
|
{"K", "Over"},
|
||||||
|
{"KN", "Over"},
|
||||||
|
{"LF", "Low Frequency"},
|
||||||
|
{"LNG", "Long"},
|
||||||
|
{"LP", "Long Path"},
|
||||||
|
{"LSB", "Lower Sideband"},
|
||||||
|
{"LSN", "Listen"},
|
||||||
|
{"LTR", "Later"},
|
||||||
|
{"LV", "Leave"},
|
||||||
|
{"LVG", "Leaving"},
|
||||||
|
{"LW", "Long Wire"},
|
||||||
|
{"MGR", "Manager"},
|
||||||
|
{"MI", "My"},
|
||||||
|
{"MNI", "Many"},
|
||||||
|
{"MOM", "Moment"},
|
||||||
|
{"MS", "Meteor Scatter"},
|
||||||
|
{"MSG", "Message"},
|
||||||
|
{"N", "No"},
|
||||||
|
{"NCS", "Net Control Station"},
|
||||||
|
{"ND", "Nothing Doing"},
|
||||||
|
{"NM", "No More"},
|
||||||
|
{"NR", "Near / Number"},
|
||||||
|
{"NW", "Now"},
|
||||||
|
{"OB", "Old Boy"},
|
||||||
|
{"OC", "Old Chap"},
|
||||||
|
{"OM", "Old Man"},
|
||||||
|
{"OP", "Operator"},
|
||||||
|
{"OPR", "Operator"},
|
||||||
|
{"OT", "Old Timer"},
|
||||||
|
{"OW", "Old Woman"},
|
||||||
|
{"PA", "Power Amplifier"},
|
||||||
|
{"PBL", "Preamble"},
|
||||||
|
{"PKG", "Package"},
|
||||||
|
{"POV", "Point Of View"},
|
||||||
|
{"PSE", "Please"},
|
||||||
|
{"PSK", "Phase Shift Keying"},
|
||||||
|
{"PT", "Point"},
|
||||||
|
{"PTT", "Push To Talk"},
|
||||||
|
{"PWR", "Power"},
|
||||||
|
{"PX", "Prefix"},
|
||||||
|
{"QRA", "Address"},
|
||||||
|
{"QRG", "Frequency"},
|
||||||
|
{"QRK", "Readability"},
|
||||||
|
{"QRL", "Busy"},
|
||||||
|
{"QRM", "Interference"},
|
||||||
|
{"QRN", "Noise"},
|
||||||
|
{"QRO", "High Power"},
|
||||||
|
{"QRP", "Low Power"},
|
||||||
|
{"QRQ", "Send Faster"},
|
||||||
|
{"QRS", "Send Slower"},
|
||||||
|
{"QRSS", "Send Very Slowly"},
|
||||||
|
{"QRT", "Stop Sending"},
|
||||||
|
{"QRU", "Nothing Further To Say"},
|
||||||
|
{"QRV", "Ready"},
|
||||||
|
{"QRX", "Wait"},
|
||||||
|
{"QRZ", "Who Is Calling Me"},
|
||||||
|
{"QSA", "Signal Strength"},
|
||||||
|
{"QSB", "Fading"},
|
||||||
|
{"QSK", "Break-in"},
|
||||||
|
{"QSL", "All Received OK"},
|
||||||
|
{"QSLL", "I Will Send A QSL Card"},
|
||||||
|
{"QSO", "Contact"},
|
||||||
|
{"QSP", "Relay A Message"},
|
||||||
|
{"QSX", "Listening On Frequency"},
|
||||||
|
{"QSY", "Change Frequency"},
|
||||||
|
{"QTH", "Location"},
|
||||||
|
{"R", "Received OK"},
|
||||||
|
{"RC", "Ragchew"},
|
||||||
|
{"RCD", "Recieved"},
|
||||||
|
{"RCVR", "Receiver"},
|
||||||
|
{"RE", "Regarding"},
|
||||||
|
{"REF", "Reference"},
|
||||||
|
{"RF", "Radio Frequency"},
|
||||||
|
{"RFI", "Radio Frequency Interference"},
|
||||||
|
{"RPT", "Repeat / Report"},
|
||||||
|
{"RST", "Signal Report"},
|
||||||
|
{"RTTY", "Radio Teletype"},
|
||||||
|
{"RX", "Receive"},
|
||||||
|
{"SA", "Say"},
|
||||||
|
{"SDR", "Software Defined Radio"},
|
||||||
|
{"SEZ", "Says"},
|
||||||
|
{"SGD", "Signed"},
|
||||||
|
{"SHUD", "Should"},
|
||||||
|
{"SIG", "Signal"},
|
||||||
|
{"SK", "End Of Work"},
|
||||||
|
{"SKED", "Schedule"},
|
||||||
|
{"SN", "Soon"},
|
||||||
|
{"SP", "Short Path"},
|
||||||
|
{"SRI", "Sorry"},
|
||||||
|
{"SSB", "Single Sideband"},
|
||||||
|
{"STN", "Station"},
|
||||||
|
{"SUM", "Some"},
|
||||||
|
{"SVC", "Service"},
|
||||||
|
{"SWR", "Standing Wave Ratio"},
|
||||||
|
{"TFC", "Traffic"},
|
||||||
|
{"TIA", "Thanks In Advance"},
|
||||||
|
{"TKS", "Thanks"},
|
||||||
|
{"TMW", "Tomorrow"},
|
||||||
|
{"TNC", "Terminal Node Controller"},
|
||||||
|
{"TNX", "Thanks"},
|
||||||
|
{"TR", "Transmit"},
|
||||||
|
{"T/R", "Transmit/Receive"},
|
||||||
|
{"TRBL", "Trouble"},
|
||||||
|
{"TRF", "Tuned Radio Frequency"},
|
||||||
|
{"TRIX", "Tricks"},
|
||||||
|
{"TRX", "Transceiver"},
|
||||||
|
{"TT", "That"},
|
||||||
|
{"TTS", "That Is"},
|
||||||
|
{"TU", "Thank You"},
|
||||||
|
{"TVI", "Television Interference"},
|
||||||
|
{"TX", "Transmit"},
|
||||||
|
{"TXT", "Text"},
|
||||||
|
{"U", "You"},
|
||||||
|
{"UHF", "Ultra High Frequency"},
|
||||||
|
{"UNLIS", "Unlicensed"},
|
||||||
|
{"UR", "Your"},
|
||||||
|
{"URS", "Yours"},
|
||||||
|
{"UTC", "Coordinated Universal Time"},
|
||||||
|
{"V", "Volts"},
|
||||||
|
{"VHF", "Very High Frequency"},
|
||||||
|
{"VE", "Understood"},
|
||||||
|
{"VERT", "Vertical"},
|
||||||
|
{"VFB", "Very Fine Business"},
|
||||||
|
{"VFO", "Variable Frequency Oscillator"},
|
||||||
|
{"VLF", "Very Low Frequency"},
|
||||||
|
{"VOX", "Voice Operated"},
|
||||||
|
{"VSB", "Vestigial Sideband"},
|
||||||
|
{"VSWR", "Voltage Standing Wave Ratio"},
|
||||||
|
{"VY", "Very"},
|
||||||
|
{"W", "Watts"},
|
||||||
|
{"WA", "Word After"},
|
||||||
|
{"WAT", "What"},
|
||||||
|
{"WATSA", "What Say"},
|
||||||
|
{"WB", "Word Before"},
|
||||||
|
{"WD", "Word"},
|
||||||
|
{"WDS", "Words"},
|
||||||
|
{"WID", "With"},
|
||||||
|
{"WKD", "Worked"},
|
||||||
|
{"WKG", "Working"},
|
||||||
|
{"WL", "Will"},
|
||||||
|
{"WPM", "Words Per Minute"},
|
||||||
|
{"WRD", "Word"},
|
||||||
|
{"WRK", "Work"},
|
||||||
|
{"WUD", "Would"},
|
||||||
|
{"WX", "Weather"},
|
||||||
|
{"XCVR", "Transceiver"},
|
||||||
|
{"XMTR", "Transmitter"},
|
||||||
|
{"XTAL", "Crystal"},
|
||||||
|
{"YF", "Wife"},
|
||||||
|
{"YL", "Young Lady"},
|
||||||
|
{"YR", "Year"},
|
||||||
|
{"Z", "Zulu Time"},
|
||||||
|
{"30", "I Have Nothing More to Send"},
|
||||||
|
{"33", "Fondest Regards"},
|
||||||
|
{"55", "Best Success"},
|
||||||
|
{"73", "Best Wishes"},
|
||||||
|
{"88", "Love And Kisses"},
|
||||||
|
};
|
31
sdrbase/util/rtty.h
Normal file
31
sdrbase/util/rtty.h
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Copyright (C) 2023 Jon Beniston, M7RCE //
|
||||||
|
// //
|
||||||
|
// This program is free software; you can redistribute it and/or modify //
|
||||||
|
// it under the terms of the GNU General Public License as published by //
|
||||||
|
// the Free Software Foundation as version 3 of the License, or //
|
||||||
|
// (at your option) any later version. //
|
||||||
|
// //
|
||||||
|
// This program is distributed in the hope that it will be useful, //
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
||||||
|
// GNU General Public License V3 for more details. //
|
||||||
|
// //
|
||||||
|
// You should have received a copy of the GNU General Public License //
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>. //
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef INCLUDE_UTIL_RTTY_H
|
||||||
|
#define INCLUDE_UTIL_RTTY_H
|
||||||
|
|
||||||
|
#include <QHash>
|
||||||
|
|
||||||
|
#include "export.h"
|
||||||
|
|
||||||
|
class SDRBASE_API Rtty
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
static const QHash<QString, QString> m_acronyms;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* INCLUDE_UTIL_RTTY_H */
|
@ -7,6 +7,7 @@ set(CMAKE_AUTOUIC OFF)
|
|||||||
set(sdrgui_SOURCES
|
set(sdrgui_SOURCES
|
||||||
mainwindow.cpp
|
mainwindow.cpp
|
||||||
gui/aboutdialog.cpp
|
gui/aboutdialog.cpp
|
||||||
|
gui/acronymview.cpp
|
||||||
gui/addpresetdialog.cpp
|
gui/addpresetdialog.cpp
|
||||||
gui/audiodialog.cpp
|
gui/audiodialog.cpp
|
||||||
gui/audioselectdialog.cpp
|
gui/audioselectdialog.cpp
|
||||||
@ -127,6 +128,7 @@ set(sdrgui_HEADERS
|
|||||||
gui/aboutdialog.h
|
gui/aboutdialog.h
|
||||||
gui/accessiblevaluedial.h
|
gui/accessiblevaluedial.h
|
||||||
gui/accessiblevaluedialz.h
|
gui/accessiblevaluedialz.h
|
||||||
|
gui/acronymview.h
|
||||||
gui/addpresetdialog.h
|
gui/addpresetdialog.h
|
||||||
gui/audiodialog.h
|
gui/audiodialog.h
|
||||||
gui/audioselectdialog.h
|
gui/audioselectdialog.h
|
||||||
|
68
sdrgui/gui/acronymview.cpp
Normal file
68
sdrgui/gui/acronymview.cpp
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Copyright (C) 2023 Jon Beniston, M7RCE //
|
||||||
|
// //
|
||||||
|
// This program is free software; you can redistribute it and/or modify //
|
||||||
|
// it under the terms of the GNU General Public License as published by //
|
||||||
|
// the Free Software Foundation as version 3 of the License, or //
|
||||||
|
// (at your option) any later version. //
|
||||||
|
// //
|
||||||
|
// This program is distributed in the hope that it will be useful, //
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
||||||
|
// GNU General Public License V3 for more details. //
|
||||||
|
// //
|
||||||
|
// You should have received a copy of the GNU General Public License //
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>. //
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#include <QEvent>
|
||||||
|
#include <QHelpEvent>
|
||||||
|
#include <QToolTip>
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
|
#include "acronymview.h"
|
||||||
|
|
||||||
|
AcronymView::AcronymView(QWidget* parent) :
|
||||||
|
QPlainTextEdit(parent)
|
||||||
|
{
|
||||||
|
setMouseTracking(true);
|
||||||
|
setReadOnly(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AcronymView::event(QEvent* event)
|
||||||
|
{
|
||||||
|
if (event->type() == QEvent::ToolTip)
|
||||||
|
{
|
||||||
|
QHelpEvent* helpEvent = static_cast<QHelpEvent*>(event);
|
||||||
|
QTextCursor cursor = cursorForPosition(helpEvent->pos());
|
||||||
|
cursor.select(QTextCursor::WordUnderCursor);
|
||||||
|
QString text = cursor.selectedText();
|
||||||
|
// Remove trailing digits from METAR
|
||||||
|
while (text.size() > 0 && text.right(1)[0].isDigit()) {
|
||||||
|
text = text.left(text.size() - 1);
|
||||||
|
}
|
||||||
|
if (!text.isEmpty() && m_acronym.contains(text))
|
||||||
|
{
|
||||||
|
QToolTip::showText(helpEvent->globalPos(), QString("%1 - %2").arg(text).arg(m_acronym.value(text)));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!text.isEmpty()) {
|
||||||
|
qDebug() << "AcronymView::event: No tooltip for " << text;
|
||||||
|
}
|
||||||
|
QToolTip::hideText();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return QPlainTextEdit::event(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AcronymView::addAcronym(const QString& acronym, const QString& explanation)
|
||||||
|
{
|
||||||
|
m_acronym.insert(acronym, explanation);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AcronymView::addAcronyms(const QHash<QString, QString>& acronyms)
|
||||||
|
{
|
||||||
|
m_acronym.insert(acronyms);
|
||||||
|
}
|
41
sdrgui/gui/acronymview.h
Normal file
41
sdrgui/gui/acronymview.h
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
// Copyright (C) 2023 Jon Beniston, M7RCE //
|
||||||
|
// //
|
||||||
|
// This program is free software; you can redistribute it and/or modify //
|
||||||
|
// it under the terms of the GNU General Public License as published by //
|
||||||
|
// the Free Software Foundation as version 3 of the License, or //
|
||||||
|
// (at your option) any later version. //
|
||||||
|
// //
|
||||||
|
// This program is distributed in the hope that it will be useful, //
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
|
||||||
|
// GNU General Public License V3 for more details. //
|
||||||
|
// //
|
||||||
|
// You should have received a copy of the GNU General Public License //
|
||||||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>. //
|
||||||
|
///////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifndef INCLUDE_GUI_ACRONYMVIEW_H
|
||||||
|
#define INCLUDE_GUI_ACRONYMVIEW_H
|
||||||
|
|
||||||
|
#include <QHash>
|
||||||
|
#include <QPlainTextEdit>
|
||||||
|
|
||||||
|
#include "export.h"
|
||||||
|
|
||||||
|
// Displays text like a QPlainTextEdit, but adds tooltips for acronyms in the text
|
||||||
|
class SDRGUI_API AcronymView : public QPlainTextEdit {
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
QHash<QString, QString> m_acronym;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
AcronymView(QWidget* parent = nullptr);
|
||||||
|
bool event(QEvent* event);
|
||||||
|
void addAcronym(const QString& acronym, const QString& explanation);
|
||||||
|
void addAcronyms(const QHash<QString, QString>& acronyms);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // INCLUDE_GUI_ACRONYMVIEW_H
|
Loading…
Reference in New Issue
Block a user