Compare commits

...

103 Commits

Author SHA1 Message Date
Jordan Sherer 10310d18cf Bump Version v0.6.5 2018-09-29 18:06:31 -04:00
Jordan Sherer a74d8c9f6b Bump EOL for v0.6.5 2018-09-29 18:05:47 -04:00
Jordan Sherer c54dfbbcda Bump to 0.6.4 2018-09-15 18:07:20 -04:00
Jordan Sherer afbcf35d1c Added test button to notification sounds 2018-09-15 17:33:19 -04:00
Jordan Sherer 300ba49e8d Fix configuration styling of compose text font. Added table colors. 2018-09-15 17:33:09 -04:00
Jordan Sherer dae1118bf3 Fix ALLCALL SNR query when ALLCALL or the station calling is selected 2018-09-15 08:22:24 -04:00
Jordan Sherer ecc537475a Bump to v0.6.3 2018-09-14 08:45:40 -04:00
Jordan Sherer caef6ad1cd Bump message version to prevent incompatible CQs between 0.5 and 0.6 while we transition 2018-09-14 08:44:41 -04:00
Jordan Sherer ffbfb3b133 Fixed issue with APRS packet queue processing 2018-09-13 22:23:32 -04:00
Jordan Sherer f979e3c4a7 Removed station power from query menu 2018-09-13 16:44:47 -04:00
Jordan Sherer 2d7ff1367e Bump to v0.6.2 2018-09-13 02:05:54 -04:00
Jordan Sherer a829516a33 Fixed issue with offset qsy after a message send when using jump 2018-09-13 01:51:32 -04:00
Jordan Sherer 86d47c83b4 Fixed issues with callsigns selected after unsolicited ALLCALL 2018-09-13 01:45:27 -04:00
Jordan Sherer 735acb000e Fixed issue with ALLCALL block blocking legit directed query 2018-09-13 01:10:32 -04:00
Jordan Sherer 62042cfa33 Fixed grid display to 4 chars with tooltip for extended chars 2018-09-13 01:09:03 -04:00
Jordan Sherer 873929b3f6 Fixed configuration ui for compose textbox 2018-09-12 20:51:46 -04:00
Jordan Sherer e52a62e689 Fixed font picker remember choice 2018-09-12 16:37:58 -04:00
Jordan Sherer bafaf8a5ae Fixed saving of .wav files when it was disabled 2018-09-12 16:08:25 -04:00
Jordan Sherer f4ed9a9eac Fixed windows build 2018-09-12 11:56:38 -04:00
Jordan Sherer 71bf19b21c Bump to 0.6.1 2018-09-12 10:12:54 -04:00
Jordan Sherer 1181e68f27 Fixed highlighting when my call apprears in the band activity 2018-09-12 10:05:35 -04:00
Jordan Sherer 0722bdad52 Added application font name to button 2018-09-12 09:59:13 -04:00
Jordan Sherer 92c88f6c0a Moved notifications to a new configuration tab 2018-09-12 09:55:31 -04:00
Jordan Sherer 67a5f49ba2 Fixed installer icons 2018-09-12 09:29:24 -04:00
Jordan Sherer d715b1d534 Fixed band and call activity sorting when empty values are present 2018-09-12 09:04:22 -04:00
Jordan Sherer 23e378f977 Fixed QSY frequency offset of band and call activity 2018-09-11 23:03:44 -04:00
Jordan Sherer f27d664f61 Updated behavior of allcall to not respond automatically if we have a callsign selected 2018-09-11 19:04:54 -04:00
Jordan Sherer 16c665d199 Newline should remove block from cache 2018-09-11 18:58:33 -04:00
Jordan Sherer 0b11b1b1d3 Changed offset qsy to be a specific action. Clicking the tables no longer change your offset 2018-09-11 18:54:32 -04:00
Jordan Sherer e699d2e081 Fixed buffered messages from ages ago getting sent 2018-09-11 17:41:21 -04:00
Jordan Sherer 9f25842c79 Fixed message reply dialog to be non-modal 2018-09-11 13:35:29 -04:00
Jordan Sherer fddca6522e Added more sane defaults to tx watchdog. Fixed bug in relay disabled when no relay required 2018-09-11 11:20:17 -04:00
Jordan Sherer df0b06ccb7 Allow configuration for rig frequency changes during transmit 2018-09-11 10:52:07 -04:00
Jordan Sherer e9aa4203b5 Updated build for OSX 2018-09-10 13:18:34 -04:00
Jordan Sherer 418e071a8d Fixed QAction to support older versions of Qt 2018-09-10 10:22:24 -04:00
Jordan Sherer 4ca8ac338e Fixed template initialization defininition 2018-09-10 10:18:13 -04:00
Jordan Sherer acbd1080d5 Fixed issue with APRSIS passcode validity check 2018-09-10 10:12:42 -04:00
Jordan Sherer ae62a73b58 FT8Call icons 2018-09-10 09:05:03 -04:00
Jordan Sherer 95cd09c7f2 Updated icons 2018-09-09 22:50:44 -04:00
Jordan Sherer 0b49dc0398 Updated CPack for installation locations 2018-09-09 21:57:44 -04:00
Jordan Sherer 4b28f9eca5 Added QSY function to waterfall controls for centering a signal in the bandpass 2018-09-09 17:18:07 -04:00
Jordan Sherer 5a18b3f9fb Added ability to open settings to a specific tab to make editing macros easier 2018-09-09 15:47:26 -04:00
Jordan Sherer 8b9042e2d6 Added a huff escape for the ' DE ' sequence
Allows for better efficiency for multi-hop relay paths.
2018-09-09 15:38:35 -04:00
Jordan Sherer 826b829941 Added a default color for tx messages 2018-09-09 14:59:16 -04:00
Jordan Sherer a36ed10fe2 Fixed ALLCALL from bumping the directed or recent cache so we get fewer random messages mid-stream 2018-09-09 14:56:19 -04:00
Jordan Sherer 8d0d93d10e Added configuration option to disable message passing, even while AUTO is on 2018-09-09 14:37:34 -04:00
Jordan Sherer ca537f5e9f Stable sort callsigns 2018-09-09 14:22:21 -04:00
Jordan Sherer e0c3592868 Added relay actions and relay via menu. Removed retransmit and alert actions as they are superseded by relay/reply dialog 2018-09-09 12:40:02 -04:00
Jordan Sherer 3a9750015d Added a 'Relay via' menu and "hearing" of third party callsigns. 2018-09-09 10:42:36 -04:00
Jordan Sherer 38ddf11479 Added a custom reply dialog box so we can customize the text input validator (upper case text only) 2018-09-09 10:04:19 -04:00
Jordan Sherer 15ee95360f Initial cut of relay 2018-09-08 23:36:12 -04:00
Jordan Sherer 308a45efe0 Fixed inactive and highlight palletes for the table views 2018-09-08 14:31:21 -04:00
Jordan Sherer ad060dad81 Added about dialog. Most important feature since 0.0.1 2018-09-07 20:07:10 -04:00
Jordan Sherer 35139c6d84 Only issue a directed message alert for directed to me...not ALLCALL 2018-09-07 17:33:28 -04:00
Jordan Sherer 942d960a90 Bump EOL 2018-09-07 15:42:43 -04:00
Jordan Sherer b4c95e4313 Added directed message and alert message notification sound configuration options 2018-09-07 15:38:11 -04:00
Jordan Sherer 293781079a Bump to 0.6.0 2018-09-07 11:30:02 -04:00
Jordan Sherer 003120d998 Dummy Data on Startup 2018-09-07 11:20:10 -04:00
Jordan Sherer 57f84c8e2b Fixed stations heard and qso queries respecting callsign aging 2018-09-07 11:15:58 -04:00
Jordan Sherer 231c75715a Added deselect button to main button row 2018-09-07 10:33:53 -04:00
Jordan Sherer 0a1a08a1a5 Added random delay to APRS packet submission 2018-09-07 10:22:36 -04:00
Jordan Sherer 775008be48 Added configuration options to style transmit and receive text 2018-09-07 10:12:40 -04:00
Jordan Sherer b0937ffe18 To help with QRM, beacons now transmit between 500Hz and 1000Hz offset. 2018-09-06 17:52:29 -04:00
Jordan Sherer ea9cc62329 Upped aging max to 1440 minutes. Upped beacon min to 15 min 2018-09-06 17:48:03 -04:00
Jordan Sherer f6c59d33bd Added copy and paste to edit textboxes 2018-09-06 17:44:47 -04:00
Jordan Sherer 6725df3d26 Unify date formats in ALL.txt 2018-09-06 15:30:33 -04:00
Jordan Sherer dfdf23315b Added ability to send CQ QRP/CQ DX/CQ TEST along with customization for the message that the CQ button sends 2018-09-06 15:22:24 -04:00
Jordan Sherer 3a139fc87a Deselect callsign on Log QSO 2018-09-06 11:19:38 -04:00
Jordan Sherer 04e3dc9c3e Fixed tooltip backgrounds 2018-09-06 11:10:52 -04:00
Jordan Sherer ca66c6401c Fixed bug in printing. Do not append to a line that already has an EOT marker 2018-09-05 15:14:39 -04:00
Jordan Sherer 1ca079041f Updated APRSISClient to drop packets older than 5 minutes 2018-09-05 14:57:40 -04:00
Jordan Sherer e922df7635 Require APRS passcode for raw APRS usage 2018-09-05 11:33:50 -04:00
Jordan Sherer f30cf20400 Added tooltip description for up to 12 char grid locator 2018-09-05 10:54:56 -04:00
Jordan Sherer d4155ff348 Removed plotter context menu. Confusing. 2018-09-05 10:50:40 -04:00
Jordan Sherer 75fded07d3 Fixed call activity scroll jumping one last time 2018-09-04 15:39:43 -04:00
Jordan Sherer 61cddd5ba4 Added Darwin icons 2018-09-02 00:47:52 -04:00
Jordan Sherer 24e9b15e42 Added user configurable APRS server option 2018-09-02 00:05:15 -04:00
Jordan Sherer 9bbaba3f72 Moved aprs test 2018-09-02 00:01:08 -04:00
Jordan Sherer 8c8218bdd8 Fixed send button countdown text 2018-09-01 20:23:04 -04:00
Jordan Sherer b8c3b4ce91 Disable spotting of SSID suffix by default 2018-09-01 20:07:03 -04:00
Jordan Sherer bf7d057d6e Allow SSID-like suffixes to be sent to APRS 2018-09-01 20:04:15 -04:00
Jordan Sherer c4db1a9a00 Bump to v0.5.2 2018-09-01 18:31:43 -04:00
Jordan Sherer ecfbbe5219 Removed debug 2018-09-01 18:31:31 -04:00
Jordan Sherer 2620435e92 Added waterfall controls menu item 2018-09-01 18:26:10 -04:00
Jordan Sherer 0886dc1995 Fixed tx messages should display EOT character 2018-09-01 18:14:40 -04:00
Jordan Sherer 9a3d7dd992 Removed SSID from APRS spotting. Unintuitive 2018-09-01 18:06:12 -04:00
Jordan Sherer 6224c9cf75 Hide APRS SSID configuration option 2018-09-01 18:05:07 -04:00
Jordan Sherer a5e1d0206b Fixed bug when right click on band activity would display incorrect callsign that was selected in the call activity 2018-09-01 18:02:02 -04:00
Jordan Sherer c5531a5177 Updated QSO reply to send multiple stations if the base callsigns match 2018-09-01 17:56:10 -04:00
Jordan Sherer 536f017fd4 Bump to v0.5.1 2018-09-01 13:43:16 -04:00
Jordan Sherer 5c313af3ab Removed PWR. Added APRS SSID 2018-09-01 10:34:12 -04:00
Jordan Sherer 046fe83193 Fixed compound buffered commands double printing in the rx window 2018-08-31 22:29:13 -04:00
Jordan Sherer e861308d70 Added auto-prefix messages with directed callsigns 2018-08-31 21:30:34 -04:00
Jordan Sherer 6dcf4b96d2 Fixed bug in waterfall displaying mouse hover without mouse over 2018-08-31 19:04:57 -04:00
Jordan Sherer f00f5e23c1 Updated message textbox placeholder default 2018-08-31 19:03:31 -04:00
Jordan Sherer 2e8cde4193 Added deselect to the activity menus 2018-08-31 09:59:43 -04:00
Jordan Sherer 7caa7c83b8 Updated GRID command to no longer ACK a reply. It was giving off the wrong impression 2018-08-30 20:45:51 -04:00
Jordan Sherer 08d8beed64 Fixed issue with double printing of directed and undirected activity. Fixed enter key press with no message 2018-08-30 17:19:58 -04:00
Jordan Sherer e5347eb4b6 Fixed scrolling bug for band activity and call activity lists 2018-08-30 16:13:43 -04:00
Jordan Sherer 64022c18b6 Added compound callsigns to APRS position comment 2018-08-30 15:01:43 -04:00
Jordan Sherer 42c8d1c0bb Updated APRS client to be more resilient to server failure 2018-08-30 14:31:31 -04:00
Jordan Sherer 6ab3d32e3b Updated APRS spotting connections for better reliability 2018-08-30 12:18:20 -04:00
Jordan Sherer 2b62734437 Fixed bug with SNR report menu item 2018-08-29 22:17:14 -04:00
86 changed files with 3840 additions and 4896 deletions
+72 -22
View File
@@ -2,10 +2,9 @@
#include <cmath>
#include "Radio.hpp"
#include "varicode.h"
const int PACKET_TIMEOUT_SECONDS = 300;
APRSISClient::APRSISClient(QString host, quint16 port, QObject *parent):
QTcpSocket(parent),
@@ -13,7 +12,7 @@ APRSISClient::APRSISClient(QString host, quint16 port, QObject *parent):
m_port(port)
{
connect(&m_timer, &QTimer::timeout, this, &APRSISClient::sendReports);
m_timer.setInterval(60*1000); // every minute
m_timer.setInterval(60*1000); // every 60 seconds
m_timer.start();
}
@@ -184,32 +183,24 @@ QPair<QString, QString> APRSISClient::grid2aprs(QString grid){
};
}
void APRSISClient::enqueueSpot(QString theircall, QString grid, quint64 frequency, int snr){
void APRSISClient::enqueueSpot(QString theircall, QString grid, QString comment){
if(m_localCall.isEmpty()) return;
auto geo = APRSISClient::grid2aprs(grid);
auto spotFrame = QString("%1>%2,APRS,TCPIP*:=%3/%4nFT8CALL %5 %6MHz %7dB\n");
auto spotFrame = QString("%1>%2,APRS,TCPIP*:=%3/%4nFT8CALL %5\n");
spotFrame = spotFrame.arg(theircall);
spotFrame = spotFrame.arg(m_localCall);
spotFrame = spotFrame.arg(geo.first);
spotFrame = spotFrame.arg(geo.second);
spotFrame = spotFrame.arg(m_localGrid.left(4));
spotFrame = spotFrame.arg(Radio::frequency_MHz_string(frequency));
spotFrame = spotFrame.arg(Varicode::formatSNR(snr));
spotFrame = spotFrame.arg(comment.left(43));
enqueueRaw(spotFrame);
}
void APRSISClient::enqueueMessage(QString tocall, QString message){
if(m_localCall.isEmpty()) return;
auto messageFrame = QString("%1>APRS,TCPIP*::%2:%3\n");
messageFrame = messageFrame.arg(m_localCall);
messageFrame = messageFrame.arg(tocall + QString(" ").repeated(9-tocall.length()));
messageFrame = messageFrame.arg(message);
enqueueRaw(messageFrame);
}
void APRSISClient::enqueueThirdParty(QString theircall, QString payload){
if(!isPasscodeValid()){
return;
}
auto frame = QString("%1>%2,APRS,TCPIP*:%3\n");
frame = frame.arg(theircall);
frame = frame.arg(m_localCall);
@@ -218,12 +209,16 @@ void APRSISClient::enqueueThirdParty(QString theircall, QString payload){
}
void APRSISClient::enqueueRaw(QString aprsFrame){
m_frameQueue.enqueue(aprsFrame);
m_frameQueue.enqueue({ aprsFrame, QDateTime::currentDateTimeUtc() });
}
void APRSISClient::processQueue(bool disconnect){
// don't process queue if we haven't set our local callsign
if(m_localCall.isEmpty()) return;
// don't process queue if there's nothing to process
if(m_frameQueue.isEmpty()) return;
// 1. connect (and read)
// 2. login (and read)
// 3. for each raw frame in queue, send
@@ -237,19 +232,74 @@ void APRSISClient::processQueue(bool disconnect){
}
}
auto re = QRegExp("(full|unavailable|busy)");
auto line = QString(readLine());
if(line.toLower().indexOf(re) >= 0){
qDebug() << "APRSISClient Connection Busy:" << line;
return;
}
if(write(loginFrame(m_localCall).toLocal8Bit()) == -1){
qDebug() << "APRSISClient Write Login Error:" << errorString();
return;
}
if(!waitForReadyRead(5000)){
qDebug() << "APRSISClient Login Error: Server Not Responding";
return;
}
line = QString(readAll());
if(line.toLower().indexOf(re) >= 0){
qDebug() << "APRSISClient Server Busy:" << line;
return;
}
QQueue<QPair<QString, QDateTime>> delayed;
while(!m_frameQueue.isEmpty()){
if(write(m_frameQueue.head().toLocal8Bit()) == -1){
auto pair = m_frameQueue.head();
auto frame = pair.first;
auto timestamp = pair.second;
// if the packet is older than the timeout, drop it.
if(timestamp.secsTo(QDateTime::currentDateTimeUtc()) > PACKET_TIMEOUT_SECONDS){
qDebug() << "APRSISClient Packet Timeout:" << frame;
m_frameQueue.dequeue();
continue;
}
// random delay 25% of the time for throttling (a skip will add 60 seconds to the processing time)
if(qrand() % 100 <= 25){
qDebug() << "APRSISClient Throttle: Skipping Frame";
delayed.enqueue(m_frameQueue.dequeue());
continue;
}
QByteArray data = frame.toLocal8Bit();
if(write(data) == -1){
qDebug() << "APRSISClient Write Error:" << errorString();
return;
}
auto frame = m_frameQueue.dequeue();
qDebug() << "APRISISClient Write:" << frame;
qDebug() << "APRSISClient Write:" << data;
if(waitForReadyRead(5000)){
line = QString(readLine());
qDebug() << "APRSISClient Read:" << line;
if(line.toLower().indexOf(re) >= 0){
qDebug() << "APRSISClient Cannot Write Error:" << line;
return;
}
}
m_frameQueue.dequeue();
}
// enqueue the delayed frames for later processing
while(!delayed.isEmpty()){
m_frameQueue.enqueue(delayed.dequeue());
}
if(disconnect){
+31 -8
View File
@@ -1,6 +1,8 @@
#ifndef APRSISCLIENT_H
#define APRSISCLIENT_H
#include <QtGlobal>
#include <QDateTime>
#include <QTcpSocket>
#include <QQueue>
#include <QPair>
@@ -16,29 +18,50 @@ public:
static QPair<float, float> grid2deg(QString grid);
static QPair<QString, QString> grid2aprs(QString grid);
void setLocalStation(QString mycall, QString mygrid){
m_localCall = mycall;
m_localGrid = mygrid;
void setServer(QString host, quint16 port){
if(state() == QTcpSocket::ConnectedState){
disconnectFromHost();
}
m_host = host;
m_port = port;
}
void enqueueSpot(QString theircall, QString grid, quint64 frequency, int snr);
void enqueueMessage(QString tocall, QString message);
void setPaused(bool paused){
m_paused = paused;
}
void setLocalStation(QString mycall, QString mygrid, QString passcode){
m_localCall = mycall;
m_localGrid = mygrid;
m_localPasscode = passcode;
}
bool isPasscodeValid(){ return m_localPasscode == QString::number(hashCallsign(m_localCall)); }
void enqueueSpot(QString theircall, QString grid, QString comment);
void enqueueThirdParty(QString theircall, QString payload);
void enqueueRaw(QString aprsFrame);
void processQueue(bool disconnect=false);
void processQueue(bool disconnect=true);
public slots:
void sendReports(){ processQueue(true); }
void sendReports(){
if(m_paused) return;
processQueue(true);
}
private:
QString m_localCall;
QString m_localGrid;
QString m_localPasscode;
QQueue<QString> m_frameQueue;
QQueue<QPair<QString, QDateTime>> m_frameQueue;
QString m_host;
quint16 m_port;
QTimer m_timer;
bool m_paused;
};
#endif // APRSISCLIENT_H
+18 -7
View File
@@ -24,12 +24,22 @@ if (CPACK_GENERATOR MATCHES "NSIS")
set (CPACK_SET_DESTDIR FALSE)
set (CPACK_STRIP_FILES FALSE) # breaks Qt packaging on Windows
set (CPACK_NSIS_INSTALL_ROOT "C:\\FT8Call")
# set (CPACK_NSIS_INSTALL_ROOT "C:\\FT8Call")
if(CMAKE_CL_64)
set(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64")
set(CPACK_NSIS_PACKAGE_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY} (Win64)")
set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${CPACK_PACKAGE_NAME} ${CPACK_PACKAGE_VERSION} (Win64)")
else()
set(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES")
set(CPACK_NSIS_PACKAGE_NAME "${CPACK_PACKAGE_INSTALL_DIRECTORY}")
set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "${CPACK_PACKAGE_NAME} ${CPACK_PACKAGE_VERSION}")
endif()
# set the install/unistall icon used for the installer itself
# There is a bug in NSI that does not handle full unix paths properly.
set (CPACK_NSIS_MUI_ICON "@PROJECT_SOURCE_DIR@/icons/windows-icons\\wsjtx.ico")
set (CPACK_NSIS_MUI_UNIICON "@PROJECT_SOURCE_DIR@/icons/windows-icons\\wsjtx.ico")
set (CPACK_NSIS_MUI_ICON "@PROJECT_SOURCE_DIR@/icons/windows-icons\\ft8call.ico")
set (CPACK_NSIS_MUI_UNIICON "@PROJECT_SOURCE_DIR@/icons/windows-icons\\ft8call.ico")
# set the package header icon for MUI
set (CPACK_PACKAGE_ICON "@PROJECT_SOURCE_DIR@/icons/windows-icons\\installer_logo.bmp")
# tell cpack to create links to the doc files
@@ -57,11 +67,12 @@ endif ()
if ("${CPACK_GENERATOR}" STREQUAL "DragNDrop")
set (CPACK_DMG_VOLUME_NAME "@PROJECT_NAME@")
set (CPACK_DMG_BACKGROUND_IMAGE "@PROJECT_SOURCE_DIR@/icons/Darwin/DragNDrop Background.png")
set (CPACK_DMG_DS_STORE "@PROJECT_SOURCE_DIR@/Darwin/wsjtx_DMG.DS_Store")
set (CPACK_DMG_DS_STORE "@PROJECT_SOURCE_DIR@/Darwin/ft8call_DMG.DS_Store")
set (CPACK_BUNDLE_NAME "@WSJTX_BUNDLE_NAME@")
set (CPACK_PACKAGE_ICON "@PROJECT_BINARY_DIR@/wsjtx.icns")
set (CPACK_BUNDLE_ICON "@PROJECT_BINARY_DIR@/wsjtx.icns")
set (CPACK_BUNDLE_STARTUP_COMMAND "@PROJECT_SOURCE_DIR@/Mac-wsjtx-startup.sh")
set (CPACK_PACKAGE_ICON "@PROJECT_BINARY_DIR@/ft8call.icns")
set (CPACK_BUNDLE_ICON "@PROJECT_BINARY_DIR@/ft8call.icns")
set (CPACK_BUNDLE_STARTUP_COMMAND "@PROJECT_SOURCE_DIR@/Mac-ft8call-startup.sh")
set (CPACK_PACKAGING_INSTALL_PREFIX "/")
endif ()
if ("${CPACK_GENERATOR}" STREQUAL "WIX")
+18 -7
View File
@@ -305,6 +305,8 @@ set (wsjtx_CXXSRCS
WsprTxScheduler.cpp
varicode.cpp
SelfDestructMessageBox.cpp
messagereplydialog.cpp
keyeater.cpp
APRSISClient.cpp
mainwindow.cpp
Configuration.cpp
@@ -668,6 +670,7 @@ set (wsjtx_UISRCS
widegraph.ui
logqso.ui
Configuration.ui
messagereplydialog.ui
)
set (UDP_library_CXXSRCS
@@ -721,7 +724,7 @@ set (TOP_LEVEL_RESOURCES
mouse_commands.txt
prefixes.txt
cty.dat
icons/Darwin/wsjtx.iconset/icon_128x128.png
icons/Darwin/FT8Call.iconset/icon_128x128.png
contrib/gpl-v3-logo.svg
artwork/splash.png
)
@@ -821,6 +824,7 @@ endif (WIN32)
#
if (APPLE)
set (WSJTX_BUNDLE_VERSION ${wsjtx_VERSION})
set (CMAKE_INSTALL_PREFIX "/")
# make sure CMAKE_INSTALL_PREFIX ends in /
string (LENGTH "${CMAKE_INSTALL_PREFIX}" LEN)
@@ -1399,6 +1403,7 @@ if (UNIX)
endif (NOT APPLE)
endif (UNIX)
#
# installation
#
@@ -1479,7 +1484,6 @@ if (APPLE)
)
endif (APPLE)
#
# uninstall support
#
@@ -1517,18 +1521,25 @@ configure_file (
if (NOT WIN32 AND NOT APPLE)
# install a desktop file so wsjtx appears in the application start
# install a desktop file so ft8call appears in the application start
# menu with an icon
install (
FILES ft8call.desktop message_aggregator.desktop
DESTINATION share/applications
FILES ft8call.desktop
DESTINATION /usr/share/applications
#COMPONENT runtime
)
install (
FILES icons/Unix/wsjtx_icon.png
DESTINATION share/pixmaps
FILES icons/Unix/ft8call_icon.png
DESTINATION /usr/share/pixmaps
#COMPONENT runtime
)
execute_process(COMMAND ln -s /opt/ft8call/bin/ft8call lft8call)
install(FILES
${CMAKE_BINARY_DIR}/lft8call DESTINATION /usr/bin/ RENAME ft8call
#COMPONENT runtime
)
endif (NOT WIN32 AND NOT APPLE)
+451 -111
View File
@@ -156,6 +156,7 @@
#include <QThread>
#include <QTimer>
#include <QStandardPaths>
#include <QSound>
#include <QFont>
#include <QFontDialog>
#include <QColorDialog>
@@ -433,7 +434,7 @@ private:
void insert_station ();
Q_SLOT void on_font_push_button_clicked ();
Q_SLOT void on_decoded_text_font_push_button_clicked ();
Q_SLOT void on_tableFontButton_clicked();
Q_SLOT void on_PTT_port_combo_box_activated (int);
Q_SLOT void on_CAT_port_combo_box_activated (int);
Q_SLOT void on_CAT_serial_baud_combo_box_currentIndexChanged (int);
@@ -454,21 +455,37 @@ private:
Q_SLOT void on_PTT_method_button_group_buttonClicked (int);
Q_SLOT void on_station_message_line_edit_textChanged(QString const&);
Q_SLOT void on_qth_message_line_edit_textChanged(QString const&);
Q_SLOT void on_cq_message_line_edit_textChanged(QString const&);
Q_SLOT void on_reply_message_line_edit_textChanged(QString const&);
Q_SLOT void on_add_macro_line_edit_editingFinished ();
Q_SLOT void delete_macro ();
void delete_selected_macros (QModelIndexList);
Q_SLOT void on_save_path_select_push_button_clicked (bool);
Q_SLOT void on_azel_path_select_push_button_clicked (bool);
Q_SLOT void on_sound_dm_path_select_push_button_clicked();
Q_SLOT void on_sound_dm_path_test_push_button_clicked();
Q_SLOT void on_sound_dm_path_reset_push_button_clicked();
Q_SLOT void on_sound_am_path_select_push_button_clicked();
Q_SLOT void on_sound_am_path_test_push_button_clicked();
Q_SLOT void on_sound_am_path_reset_push_button_clicked();
Q_SLOT void on_calibration_intercept_spin_box_valueChanged (double);
Q_SLOT void on_calibration_slope_ppm_spin_box_valueChanged (double);
Q_SLOT void handle_transceiver_update (TransceiverState const&, unsigned sequence_number);
Q_SLOT void handle_transceiver_failure (QString const& reason);
Q_SLOT void on_pbCQmsg_clicked();
Q_SLOT void on_pbMyCall_clicked();
Q_SLOT void on_pbTxMsg_clicked();
Q_SLOT void on_pbNewDXCC_clicked();
Q_SLOT void on_pbNewCall_clicked();
Q_SLOT void on_tableBackgroundButton_clicked();
Q_SLOT void on_tableSelectedRowBackgroundButton_clicked();
Q_SLOT void on_tableForegroundButton_clicked();
Q_SLOT void on_rxBackgroundButton_clicked();
Q_SLOT void on_rxForegroundButton_clicked();
Q_SLOT void on_rxFontButton_clicked();
Q_SLOT void on_composeBackgroundButton_clicked();
Q_SLOT void on_composeForegroundButton_clicked();
Q_SLOT void on_composeFontButton_clicked();
Q_SLOT void on_txForegroundButton_clicked();
Q_SLOT void on_txFontButton_clicked();
Q_SLOT void on_cbFox_clicked (bool);
Q_SLOT void on_cbHound_clicked (bool);
Q_SLOT void on_cbx2ToneSpacing_clicked(bool);
@@ -499,11 +516,23 @@ private:
QDir default_azel_directory_;
QDir azel_directory_;
QString sound_dm_path_; // directed message sound file
QString sound_am_path_; // alert message sound file
QFont font_;
QFont next_font_;
QFont decoded_text_font_;
QFont next_decoded_text_font_;
QFont table_font_;
QFont next_table_font_;
QFont rx_text_font_;
QFont next_rx_text_font_;
QFont tx_text_font_;
QFont next_tx_text_font_;
QFont compose_text_font_;
QFont next_compose_text_font_;
bool restart_sound_input_device_;
bool restart_sound_output_device_;
@@ -555,17 +584,33 @@ private:
QString my_callsign_;
QString my_grid_;
QString my_station_;
int my_dBm_;
QString my_qth_;
QString cq_;
QString reply_;
int callsign_aging_;
int activity_aging_;
QColor color_CQ_;
QColor next_color_CQ_;
QColor color_MyCall_;
QColor next_color_MyCall_;
QColor color_ReceivedMsg_;
QColor next_color_ReceivedMsg_;
QColor color_cq_;
QColor next_color_cq_;
QColor color_mycall_;
QColor next_color_mycall_;
QColor color_table_background_;
QColor next_color_table_background_;
QColor color_table_highlight_;
QColor next_color_table_highlight_;
QColor color_table_foreground_;
QColor next_color_table_foreground_;
QColor color_rx_background_;
QColor next_color_rx_background_;
QColor color_rx_foreground_;
QColor next_color_rx_foreground_;
QColor color_compose_background_;
QColor next_color_compose_background_;
QColor color_compose_foreground_;
QColor next_color_compose_foreground_;
QColor color_tx_foreground_;
QColor next_color_tx_foreground_;
QColor color_DXCC_;
QColor next_color_DXCC_;
QColor color_NewCall_;
@@ -577,10 +622,11 @@ private:
double degrade_;
double txDelay_;
bool id_after_73_;
bool tx_QSY_allowed_;
bool tx_qsy_allowed_;
bool spot_to_reporting_networks_;
bool transmit_directed_;
bool autoreply_off_at_startup_;
bool relay_disabled_;
bool monitor_off_at_startup_;
bool monitor_last_used_;
bool log_as_DATA_;
@@ -606,6 +652,11 @@ private:
bool x4ToneSpacing_;
bool use_dynamic_info_;
QString opCall_;
QString aprs_server_name_;
QString aprs_passcode_;
port_type aprs_server_port_;
QString udp_server_name_;
port_type udp_server_port_;
// QString n1mm_server_name () const;
@@ -665,13 +716,23 @@ bool Configuration::restart_audio_output () const {return m_->restart_sound_outp
auto Configuration::type_2_msg_gen () const -> Type2MsgGen {return m_->type_2_msg_gen_;}
bool Configuration::use_dynamic_grid() const {return m_->use_dynamic_info_; }
QString Configuration::my_callsign () const {return m_->my_callsign_;}
QColor Configuration::color_CQ () const {return m_->color_CQ_;}
QColor Configuration::color_MyCall () const {return m_->color_MyCall_;}
QColor Configuration::color_ReceivedMsg () const {return m_->color_ReceivedMsg_;}
QColor Configuration::color_table_background() const { return m_->color_table_background_; }
QColor Configuration::color_table_highlight() const { return m_->color_table_highlight_; }
QColor Configuration::color_table_foreground() const { return m_->color_table_foreground_; }
QColor Configuration::color_CQ () const {return m_->color_cq_;}
QColor Configuration::color_MyCall () const {return m_->color_mycall_;}
QColor Configuration::color_rx_background () const {return m_->color_rx_background_;}
QColor Configuration::color_rx_foreground () const {return m_->color_rx_foreground_;}
QColor Configuration::color_tx_foreground () const {return m_->color_tx_foreground_;}
QColor Configuration::color_compose_background () const {return m_->color_compose_background_;}
QColor Configuration::color_compose_foreground () const {return m_->color_compose_foreground_;}
QColor Configuration::color_DXCC () const {return m_->color_DXCC_;}
QColor Configuration::color_NewCall () const {return m_->color_NewCall_;}
QFont Configuration::table_font () const {return m_->table_font_;}
QFont Configuration::text_font () const {return m_->font_;}
QFont Configuration::decoded_text_font () const {return m_->decoded_text_font_;}
QFont Configuration::rx_text_font () const {return m_->rx_text_font_;}
QFont Configuration::tx_text_font () const {return m_->tx_text_font_;}
QFont Configuration::compose_text_font () const {return m_->compose_text_font_;}
qint32 Configuration::id_interval () const {return m_->id_interval_;}
qint32 Configuration::ntrials() const {return m_->ntrials_;}
qint32 Configuration::aggressive() const {return m_->aggressive_;}
@@ -679,7 +740,7 @@ double Configuration::degrade() const {return m_->degrade_;}
double Configuration::txDelay() const {return m_->txDelay_;}
qint32 Configuration::RxBandwidth() const {return m_->RxBandwidth_;}
bool Configuration::id_after_73 () const {return m_->id_after_73_;}
bool Configuration::tx_QSY_allowed () const {return m_->tx_QSY_allowed_;}
bool Configuration::tx_qsy_allowed () const {return m_->tx_qsy_allowed_;}
bool Configuration::spot_to_reporting_networks () const
{
// rig must be open and working to spot externally
@@ -695,6 +756,7 @@ void Configuration::set_spot_to_reporting_networks (bool spot)
bool Configuration::transmit_directed() const { return m_->transmit_directed_; }
bool Configuration::autoreply_off_at_startup () const {return m_->autoreply_off_at_startup_;}
bool Configuration::relay_off() const { return m_->relay_disabled_; }
bool Configuration::monitor_off_at_startup () const {return m_->monitor_off_at_startup_;}
bool Configuration::monitor_last_used () const {return m_->rig_is_dummy_ || m_->monitor_last_used_;}
bool Configuration::log_as_DATA () const {return m_->log_as_DATA_;}
@@ -720,6 +782,9 @@ bool Configuration::x2ToneSpacing() const {return m_->x2ToneSpacing_;}
bool Configuration::x4ToneSpacing() const {return m_->x4ToneSpacing_;}
bool Configuration::split_mode () const {return m_->split_mode ();}
QString Configuration::opCall() const {return m_->opCall_;}
QString Configuration::aprs_server_name () const {return m_->aprs_server_name_;}
auto Configuration::aprs_server_port () const -> port_type {return m_->aprs_server_port_;}
QString Configuration::aprs_passcode() const { return m_->aprs_passcode_; }
QString Configuration::udp_server_name () const {return m_->udp_server_name_;}
auto Configuration::udp_server_port () const -> port_type {return m_->udp_server_port_;}
bool Configuration::accept_udp_requests () const {return m_->accept_udp_requests_;}
@@ -741,6 +806,8 @@ QStringListModel * Configuration::macros () {return &m_->macros_;}
QStringListModel const * Configuration::macros () const {return &m_->macros_;}
QDir Configuration::save_directory () const {return m_->save_directory_;}
QDir Configuration::azel_directory () const {return m_->azel_directory_;}
QString Configuration::sound_dm_path() const {return m_->sound_dm_path_;}
QString Configuration::sound_am_path() const {return m_->sound_am_path_;}
QString Configuration::rig_name () const {return m_->rig_params_.rig_name;}
bool Configuration::pwrBandTxMemory () const {return m_->pwrBandTxMemory_;}
bool Configuration::pwrBandTuneMemory () const {return m_->pwrBandTuneMemory_;}
@@ -865,16 +932,17 @@ QString Configuration::my_station() const
return station;
}
int Configuration::my_dBm() const {
return m_->my_dBm_;
}
QString Configuration::my_qth() const
{
return m_->my_qth_;
}
QString Configuration::reply() const
QString Configuration::cq_message() const
{
return m_->cq_;
}
QString Configuration::reply_message() const
{
return m_->reply_;
}
@@ -1040,6 +1108,7 @@ Configuration::impl::impl (Configuration * self, QDir const& temp_directory,
ui_->station_message_line_edit->setValidator (new QRegExpValidator {message_alphabet, this});
ui_->qth_message_line_edit->setValidator (new QRegExpValidator {message_alphabet, this});
ui_->reply_message_line_edit->setValidator (new QRegExpValidator {message_alphabet, this});
ui_->cq_message_line_edit->setValidator (new QRegExpValidator {message_alphabet, this});
ui_->udp_server_port_spin_box->setMinimum (1);
ui_->udp_server_port_spin_box->setMaximum (std::numeric_limits<port_type>::max ());
@@ -1221,40 +1290,6 @@ void Configuration::impl::initialize_models ()
pal.setColor (QPalette::Base, Qt::white);
}
QMap<int, int> dbm2mw = {
{0 , 1},
{3 , 2},
{7 , 5},
{10 , 10},
{13 , 20},
{17 , 50},
{20 , 100},
{23 , 200},
{27 , 500},
{30 , 1000}, // 1W
{33 , 2000}, // 2W
{37 , 5000}, // 5W
{40 , 10000}, // 10W
{43 , 20000}, // 20W
{47 , 50000}, // 50W
{50 , 100000}, // 100W
{53 , 200000}, // 200W
{57 , 500000}, // 500W
{60 , 1000000}, // 1000W
};
ui_->station_power_combo_box->clear();
ui_->station_power_combo_box->addItem(QString(""), -1);
foreach(auto dbm, dbm2mw.keys()){
ui_->station_power_combo_box->addItem(QString("%1 (%2 dBm)").arg(Varicode::formatPWR(dbm)).arg(dbm), dbm);
if(dbm == my_dBm_){
ui_->station_power_combo_box->setCurrentIndex(ui_->station_power_combo_box->count()-1);
}
}
ui_->callsign_line_edit->setPalette (pal);
ui_->grid_line_edit->setPalette (pal);
ui_->auto_switch_bands_check_box->setChecked(auto_switch_bands_);
@@ -1264,13 +1299,20 @@ void Configuration::impl::initialize_models ()
ui_->activity_aging_spin_box->setValue(activity_aging_);
ui_->station_message_line_edit->setText (my_station_.toUpper());
ui_->qth_message_line_edit->setText (my_qth_.toUpper());
ui_->cq_message_line_edit->setText(cq_.toUpper());
ui_->reply_message_line_edit->setText (reply_.toUpper());
ui_->use_dynamic_grid->setChecked(use_dynamic_info_);
ui_->labCQ->setStyleSheet(QString("background: %1").arg(color_CQ_.name()));
ui_->labMyCall->setStyleSheet(QString("background: %1").arg(color_MyCall_.name()));
ui_->labTx->setStyleSheet(QString("background: %1").arg(color_ReceivedMsg_.name()));
ui_->labDXCC->setStyleSheet(QString("background: %1").arg(color_DXCC_.name()));
ui_->labNewCall->setStyleSheet(QString("background: %1").arg(color_NewCall_.name()));
ui_->tableBackgroundLabel->setStyleSheet(QString("background: %1; color: %2").arg(next_color_table_background_.name()).arg(next_color_table_foreground_.name()));
ui_->tableSelectionBackgroundLabel->setStyleSheet(QString("background: %1; color: %2").arg(next_color_table_highlight_.name()).arg(next_color_table_foreground_.name()));
ui_->labCQ->setStyleSheet(QString("background: %1; color: %2").arg(next_color_cq_.name()).arg(next_color_table_foreground_.name()));
ui_->labMyCall->setStyleSheet(QString("background: %1; color: %2").arg(next_color_mycall_.name()).arg(next_color_table_foreground_.name()));
ui_->rxLabel->setStyleSheet(QString("background: %1; color: %2").arg(color_rx_background_.name()).arg(color_rx_foreground_.name()));
ui_->rxForegroundLabel->setStyleSheet(QString("background: %1; color: %2").arg(color_rx_background_.name()).arg(color_rx_foreground_.name()));
ui_->txForegroundLabel->setStyleSheet(QString("background: %1; color: %2").arg(color_rx_background_.name()).arg(color_tx_foreground_.name()));
ui_->composeLabel->setStyleSheet(QString("background: %1; color: %2").arg(color_compose_background_.name()).arg(color_compose_foreground_.name()));
ui_->CW_id_interval_spin_box->setValue (id_interval_);
ui_->sbNtrials->setValue (ntrials_);
ui_->sbTxDelay->setValue (txDelay_);
@@ -1280,11 +1322,14 @@ void Configuration::impl::initialize_models ()
ui_->PTT_method_button_group->button (rig_params_.ptt_type)->setChecked (true);
ui_->save_path_display_label->setText (save_directory_.absolutePath ());
ui_->azel_path_display_label->setText (azel_directory_.absolutePath ());
ui_->sound_dm_path_display_label->setText(sound_dm_path_);
ui_->sound_am_path_display_label->setText(sound_am_path_);
ui_->CW_id_after_73_check_box->setChecked (id_after_73_);
ui_->tx_QSY_check_box->setChecked (tx_QSY_allowed_);
ui_->tx_qsy_check_box->setChecked (tx_qsy_allowed_);
ui_->psk_reporter_check_box->setChecked (spot_to_reporting_networks_);
ui_->transmit_directed_check_box->setChecked(transmit_directed_);
ui_->autoreply_off_check_box->setChecked (autoreply_off_at_startup_);
ui_->relay_disabled_check_box->setChecked(relay_disabled_);
ui_->monitor_off_check_box->setChecked (monitor_off_at_startup_);
ui_->monitor_last_used_check_box->setChecked (monitor_last_used_);
ui_->log_as_RTTY_check_box->setChecked (log_as_DATA_);
@@ -1338,6 +1383,9 @@ void Configuration::impl::initialize_models ()
ui_->TX_audio_source_button_group->button (rig_params_.audio_source)->setChecked (true);
ui_->CAT_poll_interval_spin_box->setValue (rig_params_.poll_interval);
ui_->opCallEntry->setText (opCall_);
ui_->aprs_server_line_edit->setText (aprs_server_name_);
ui_->aprs_server_port_spin_box->setValue (aprs_server_port_);
ui_->aprs_passcode_line_edit->setText(aprs_passcode_);
ui_->udp_server_line_edit->setText (udp_server_name_);
ui_->udp_server_port_spin_box->setValue (udp_server_port_);
ui_->accept_udp_requests_check_box->setChecked (accept_udp_requests_);
@@ -1390,38 +1438,87 @@ void Configuration::impl::read_settings ()
my_callsign_ = settings_->value ("MyCall", QString {}).toString ();
my_grid_ = settings_->value ("MyGrid", QString {}).toString ();
my_station_ = settings_->value("MyStation", QString {}).toString();
my_dBm_ = settings_->value("MyPower", -1).toInt();
callsign_aging_ = settings_->value ("CallsignAging", 0).toInt ();
activity_aging_ = settings_->value ("ActivityAging", 2).toInt ();
my_qth_ = settings_->value("MyQTH", QString {}).toString();
cq_ = settings_->value("CQMessage", QString {"CQCQCQ"}).toString();
reply_ = settings_->value("Reply", QString {"HW CPY?"}).toString();
next_color_CQ_ = color_CQ_ = settings_->value("colorCQ","#66ff66").toString();
next_color_MyCall_ = color_MyCall_ = settings_->value("colorMyCall","#ff6666").toString();
next_color_ReceivedMsg_ = color_ReceivedMsg_ = settings_->value("colorReceivedMsg","#ffeaa7").toString();
next_color_cq_ = color_cq_ = settings_->value("colorCQ","#66ff66").toString();
next_color_mycall_ = color_mycall_ = settings_->value("colorMyCall","#ff6666").toString();
next_color_rx_background_ = color_rx_background_ = settings_->value("color_rx_background","#ffeaa7").toString();
next_color_rx_foreground_ = color_rx_foreground_ = settings_->value("color_rx_foreground","#000000").toString();
next_color_compose_background_ = color_compose_background_ = settings_->value("color_compose_background","#ffffff").toString();
next_color_compose_foreground_ = color_compose_foreground_ = settings_->value("color_compose_foreground","#000000").toString();
next_color_tx_foreground_ = color_tx_foreground_ = settings_->value("color_tx_foreground","#ff0000").toString();
next_color_DXCC_ = color_DXCC_ = settings_->value("colorDXCC","#ff00ff").toString();
next_color_NewCall_ = color_NewCall_ = settings_->value("colorNewCall","#ffaaff").toString();
next_color_table_background_ = color_table_background_ = settings_->value("colorTableBackground", "#ffffff").toString();
next_color_table_highlight_ = color_table_highlight_ = settings_->value("colorTableHighlight", "#3498db").toString();
next_color_table_foreground_ = color_table_foreground_ = settings_->value("colorTableForeground","#000000").toString();
if (next_font_.fromString (settings_->value ("Font", QGuiApplication::font ().toString ()).toString ())
&& next_font_ != font_)
{
font_ = next_font_;
Q_EMIT self_->text_font_changed (font_);
Q_EMIT self_->gui_text_font_changed (font_);
}
else
{
next_font_ = font_;
}
if (next_decoded_text_font_.fromString (settings_->value ("DecodedTextFont", "Courier, 10").toString ())
&& next_decoded_text_font_ != decoded_text_font_)
ui_->font_push_button->setText(QString("Application Font (%1 %2)").arg(next_font_.family()).arg(next_font_.pointSize()));
if (next_tx_text_font_.fromString (settings_->value ("TXTextFont", QGuiApplication::font ().toString ()).toString ())
&& next_tx_text_font_ != tx_text_font_)
{
decoded_text_font_ = next_decoded_text_font_;
Q_EMIT self_->decoded_text_font_changed (decoded_text_font_);
tx_text_font_ = next_tx_text_font_;
Q_EMIT self_->tx_text_font_changed (tx_text_font_);
}
else
{
next_decoded_text_font_ = decoded_text_font_;
next_tx_text_font_ = tx_text_font_;
}
ui_->txFontButton->setText(QString("Font (%1 %2)").arg(next_tx_text_font_.family()).arg(next_tx_text_font_.pointSize()));
if (next_rx_text_font_.fromString (settings_->value ("RXTextFont", QGuiApplication::font ().toString ()).toString ())
&& next_rx_text_font_ != rx_text_font_)
{
rx_text_font_ = next_rx_text_font_;
Q_EMIT self_->rx_text_font_changed (rx_text_font_);
}
else
{
next_rx_text_font_ = rx_text_font_;
}
ui_->rxFontButton->setText(QString("Font (%1 %2)").arg(next_rx_text_font_.family()).arg(next_rx_text_font_.pointSize()));
if (next_compose_text_font_.fromString (settings_->value ("composeTextFont", QGuiApplication::font ().toString ()).toString ())
&& next_compose_text_font_ != compose_text_font_)
{
compose_text_font_ = next_compose_text_font_;
Q_EMIT self_->compose_text_font_changed (compose_text_font_);
}
else
{
next_compose_text_font_ = compose_text_font_;
}
ui_->composeFontButton->setText(QString("Font (%1 %2)").arg(next_compose_text_font_.family()).arg(next_compose_text_font_.pointSize()));
if (next_table_font_.fromString (settings_->value ("tableFont", QGuiApplication::font ().toString ()).toString ())
&& next_table_font_ != table_font_)
{
table_font_ = next_table_font_;
Q_EMIT self_->table_font_changed (table_font_);
}
else
{
next_table_font_ = table_font_;
}
ui_->tableFontButton->setText(QString("Font (%1 %2)").arg(next_table_font_.family()).arg(next_table_font_.pointSize()));
id_interval_ = settings_->value ("IDint", 0).toInt ();
ntrials_ = settings_->value ("nTrials", 6).toInt ();
txDelay_ = settings_->value ("TxDelay",0.2).toDouble();
@@ -1429,6 +1526,8 @@ void Configuration::impl::read_settings ()
RxBandwidth_ = settings_->value ("RxBandwidth", 2500).toInt ();
save_directory_ = settings_->value ("SaveDir", default_save_directory_.absolutePath ()).toString ();
azel_directory_ = settings_->value ("AzElDir", default_azel_directory_.absolutePath ()).toString ();
sound_dm_path_ = settings_->value ("SoundDMPath", "").toString ();
sound_am_path_ = settings_->value ("SoundAMPath", "").toString ();
{
//
@@ -1490,11 +1589,12 @@ void Configuration::impl::read_settings ()
transmit_directed_ = settings_->value ("TransmitDirected", true).toBool();
autoreply_off_at_startup_ = settings_->value ("AutoreplyOFF", false).toBool ();
relay_disabled_ = settings_->value ("RelayOFF", false).toBool ();
monitor_off_at_startup_ = settings_->value ("MonitorOFF", false).toBool ();
monitor_last_used_ = settings_->value ("MonitorLastUsed", false).toBool ();
spot_to_reporting_networks_ = settings_->value ("PSKReporter", true).toBool ();
id_after_73_ = settings_->value ("After73", false).toBool ();
tx_QSY_allowed_ = settings_->value ("TxQSYAllowed", false).toBool ();
tx_qsy_allowed_ = settings_->value ("TxQSYAllowed", false).toBool ();
use_dynamic_info_ = settings_->value ("AutoGrid", false).toBool ();
auto loadedMacros = settings_->value ("Macros", QStringList {"TNX 73 GL"}).toStringList();
@@ -1551,6 +1651,9 @@ void Configuration::impl::read_settings ()
disable_TX_on_73_ = settings_->value ("73TxDisable", false).toBool ();
beacon_ = settings_->value ("TxBeacon", 30).toInt ();
watchdog_ = settings_->value ("TxWatchdog", 0).toInt ();
if(watchdog_){
watchdog_ = qMax(5, watchdog_);
}
TX_messages_ = settings_->value ("Tx2QSO", true).toBool ();
enable_VHF_features_ = settings_->value("VHFUHF",false).toBool ();
decode_at_52s_ = settings_->value("Decode52",false).toBool ();
@@ -1563,6 +1666,9 @@ void Configuration::impl::read_settings ()
rig_params_.poll_interval = settings_->value ("Polling", 0).toInt ();
rig_params_.split_mode = settings_->value ("SplitMode", QVariant::fromValue (TransceiverFactory::split_mode_none)).value<TransceiverFactory::SplitMode> ();
opCall_ = settings_->value ("OpCall", "").toString ();
aprs_server_name_ = settings_->value ("aprsServer", "rotate.aprs2.net").toString ();
aprs_server_port_ = settings_->value ("aprsServerPort", 14580).toUInt ();
aprs_passcode_ = settings_->value ("aprsPasscode", "").toString();
udp_server_name_ = settings_->value ("UDPServer", "127.0.0.1").toString ();
udp_server_port_ = settings_->value ("UDPServerPort", 2237).toUInt ();
n1mm_server_name_ = settings_->value ("N1MMServer", "127.0.0.1").toString ();
@@ -1586,18 +1692,32 @@ void Configuration::impl::write_settings ()
settings_->setValue ("MyCall", my_callsign_);
settings_->setValue ("MyGrid", my_grid_);
settings_->setValue ("MyStation", my_station_);
settings_->setValue ("MyPower", my_dBm_);
settings_->setValue ("MyQTH", my_qth_);
settings_->setValue ("CQMessage", cq_);
settings_->setValue ("Reply", reply_);
settings_->setValue ("CallsignAging", callsign_aging_);
settings_->setValue ("ActivityAging", activity_aging_);
settings_->setValue("colorCQ",color_CQ_);
settings_->setValue("colorMyCall",color_MyCall_);
settings_->setValue("colorReceivedMsg",color_ReceivedMsg_);
settings_->setValue("colorCQ",color_cq_);
settings_->setValue("colorMyCall",color_mycall_);
settings_->setValue("color_rx_background",color_rx_background_);
settings_->setValue("color_rx_foreground",color_rx_foreground_);
settings_->setValue("color_compose_background",color_compose_background_);
settings_->setValue("color_compose_foreground",color_compose_foreground_);
settings_->setValue("color_tx_foreground",color_tx_foreground_);
settings_->setValue("colorDXCC",color_DXCC_);
settings_->setValue("colorNewCall",color_NewCall_);
settings_->setValue("colorTableBackground",color_table_background_);
settings_->setValue("colorTableHighlight",color_table_highlight_);
settings_->setValue("colorTableForeground",color_table_foreground_);
settings_->setValue ("Font", font_.toString ());
settings_->setValue ("DecodedTextFont", decoded_text_font_.toString ());
settings_->setValue ("RXTextFont", rx_text_font_.toString ());
settings_->setValue ("TXTextFont", tx_text_font_.toString ());
settings_->setValue ("composeTextFont", compose_text_font_.toString ());
settings_->setValue ("tableFont", table_font_.toString());
settings_->setValue ("IDint", id_interval_);
settings_->setValue ("nTrials", ntrials_);
settings_->setValue ("TxDelay", txDelay_);
@@ -1607,6 +1727,8 @@ void Configuration::impl::write_settings ()
settings_->setValue ("PTTport", rig_params_.ptt_port);
settings_->setValue ("SaveDir", save_directory_.absolutePath ());
settings_->setValue ("AzElDir", azel_directory_.absolutePath ());
settings_->setValue ("SoundDMPath", sound_dm_path_);
settings_->setValue ("SoundAMPath", sound_am_path_);
if (default_audio_input_device_selected_)
{
@@ -1631,11 +1753,12 @@ void Configuration::impl::write_settings ()
settings_->setValue ("Type2MsgGen", QVariant::fromValue (type_2_msg_gen_));
settings_->setValue ("TransmitDirected", transmit_directed_);
settings_->setValue ("AutoreplyOFF", autoreply_off_at_startup_);
settings_->setValue ("RelayOFF", relay_disabled_);
settings_->setValue ("MonitorOFF", monitor_off_at_startup_);
settings_->setValue ("MonitorLastUsed", monitor_last_used_);
settings_->setValue ("PSKReporter", spot_to_reporting_networks_);
settings_->setValue ("After73", id_after_73_);
settings_->setValue ("TxQSYAllowed", tx_QSY_allowed_);
settings_->setValue ("TxQSYAllowed", tx_qsy_allowed_);
settings_->setValue ("Macros", macros_.stringList ());
settings_->setValue (versionedFrequenciesSettingsKey, QVariant::fromValue (frequencies_.frequency_list ()));
settings_->setValue ("stations", QVariant::fromValue (stations_.station_list ()));
@@ -1677,6 +1800,9 @@ void Configuration::impl::write_settings ()
settings_->setValue ("x2ToneSpacing", x2ToneSpacing_);
settings_->setValue ("x4ToneSpacing", x4ToneSpacing_);
settings_->setValue ("OpCall", opCall_);
settings_->setValue ("aprsServer", aprs_server_name_);
settings_->setValue ("aprsServerPort", aprs_server_port_);
settings_->setValue ("aprsPasscode", aprs_passcode_);
settings_->setValue ("UDPServer", udp_server_name_);
settings_->setValue ("UDPServerPort", udp_server_port_);
settings_->setValue ("N1MMServer", n1mm_server_name_);
@@ -1950,20 +2076,45 @@ void Configuration::impl::accept ()
if (next_font_ != font_)
{
font_ = next_font_;
Q_EMIT self_->text_font_changed (font_);
Q_EMIT self_->gui_text_font_changed (font_);
}
if (next_decoded_text_font_ != decoded_text_font_)
if (next_tx_text_font_ != tx_text_font_)
{
decoded_text_font_ = next_decoded_text_font_;
Q_EMIT self_->decoded_text_font_changed (decoded_text_font_);
tx_text_font_ = next_tx_text_font_;
Q_EMIT self_->tx_text_font_changed (tx_text_font_);
}
color_CQ_ = next_color_CQ_;
color_MyCall_ = next_color_MyCall_;
color_ReceivedMsg_ = next_color_ReceivedMsg_;
if (next_rx_text_font_ != rx_text_font_)
{
rx_text_font_ = next_rx_text_font_;
Q_EMIT self_->rx_text_font_changed (rx_text_font_);
}
if (next_compose_text_font_ != compose_text_font_)
{
compose_text_font_ = next_compose_text_font_;
Q_EMIT self_->compose_text_font_changed (compose_text_font_);
}
if (next_table_font_ != table_font_)
{
table_font_ = next_table_font_;
Q_EMIT self_->table_font_changed (table_font_);
}
color_cq_ = next_color_cq_;
color_mycall_ = next_color_mycall_;
color_rx_background_ = next_color_rx_background_;
color_rx_foreground_ = next_color_rx_foreground_;
color_compose_background_ = next_color_compose_background_;
color_compose_foreground_ = next_color_compose_foreground_;
color_tx_foreground_ = next_color_tx_foreground_;
color_DXCC_ = next_color_DXCC_;
color_NewCall_ = next_color_NewCall_;
color_table_background_ = next_color_table_background_;
color_table_highlight_ = next_color_table_highlight_;
color_table_foreground_ = next_color_table_foreground_;
Q_EMIT self_->colors_changed();
@@ -2049,8 +2200,8 @@ void Configuration::impl::accept ()
my_callsign_ = ui_->callsign_line_edit->text ();
my_grid_ = ui_->grid_line_edit->text ();
my_station_ = ui_->station_message_line_edit->text().toUpper();
cq_ = ui_->cq_message_line_edit->text().toUpper();
reply_ = ui_->reply_message_line_edit->text().toUpper();
my_dBm_ = ui_->station_power_combo_box->currentData().toInt();
my_qth_ = ui_->qth_message_line_edit->text().toUpper();
callsign_aging_ = ui_->callsign_aging_spin_box->value();
activity_aging_ = ui_->activity_aging_spin_box->value();
@@ -2062,9 +2213,10 @@ void Configuration::impl::accept ()
degrade_ = ui_->sbDegrade->value ();
RxBandwidth_ = ui_->sbBandwidth->value ();
id_after_73_ = ui_->CW_id_after_73_check_box->isChecked ();
tx_QSY_allowed_ = ui_->tx_QSY_check_box->isChecked ();
tx_qsy_allowed_ = ui_->tx_qsy_check_box->isChecked ();
transmit_directed_ = ui_->transmit_directed_check_box->isChecked();
autoreply_off_at_startup_ = ui_->autoreply_off_check_box->isChecked ();
relay_disabled_ = ui_->relay_disabled_check_box->isChecked();
monitor_off_at_startup_ = ui_->monitor_off_check_box->isChecked ();
monitor_last_used_ = ui_->monitor_last_used_check_box->isChecked ();
type_2_msg_gen_ = static_cast<Type2MsgGen> (ui_->type_2_msg_gen_combo_box->currentIndex ());
@@ -2084,6 +2236,8 @@ void Configuration::impl::accept ()
data_mode_ = static_cast<DataMode> (ui_->TX_mode_button_group->checkedId ());
save_directory_ = ui_->save_path_display_label->text ();
azel_directory_ = ui_->azel_path_display_label->text ();
sound_dm_path_ = ui_->sound_dm_path_display_label->text();
sound_am_path_ = ui_->sound_am_path_display_label->text();
enable_VHF_features_ = ui_->enable_VHF_features_check_box->isChecked ();
decode_at_52s_ = ui_->decode_at_52s_check_box->isChecked ();
single_decode_ = ui_->single_decode_check_box->isChecked ();
@@ -2098,6 +2252,10 @@ void Configuration::impl::accept ()
pwrBandTuneMemory_ = ui_->checkBoxPwrBandTuneMemory->isChecked ();
opCall_=ui_->opCallEntry->text();
aprs_server_name_ = ui_->aprs_server_line_edit->text();
aprs_server_port_ = ui_->aprs_server_port_spin_box->value();
aprs_passcode_ = ui_->aprs_passcode_line_edit->text();
auto newUdpEnabled = ui_->udpEnable->isChecked();
auto new_server = ui_->udp_server_line_edit->text ();
if (new_server != udp_server_name_ || newUdpEnabled != udpEnabled_)
@@ -2183,66 +2341,178 @@ void Configuration::impl::reject ()
void Configuration::impl::on_font_push_button_clicked ()
{
next_font_ = QFontDialog::getFont (0, next_font_, this);
ui_->font_push_button->setText(QString("Application Font (%1 %2)").arg(next_font_.family()).arg(next_font_.pointSize()));
}
void Configuration::impl::on_tableFontButton_clicked ()
{
next_table_font_ = QFontDialog::getFont (0, next_table_font_, this);
ui_->tableFontButton->setText(QString("Table Font (%1 %2)").arg(next_table_font_.family()).arg(next_table_font_.pointSize()));
}
QColor getColor(QColor initial, QWidget *parent, QString title){
QList<QColor> custom = {
QColor("#66FF66"),
QColor("#FF6666"),
QColor("#FFEAA7"),
QColor("#3498DB")
};
auto d = new QColorDialog(initial, parent);
d->setWindowTitle(title);
for(int i = 0; i < custom.length(); i++){
d->setCustomColor(i, custom.at(i));
}
if(d->exec() == QColorDialog::Accepted){
return d->selectedColor();
} else {
return initial;
}
}
void Configuration::impl::on_pbCQmsg_clicked()
{
auto new_color = QColorDialog::getColor(next_color_CQ_, this, "CQ and BEACON Messages Color");
auto new_color = getColor(next_color_cq_, this, "CQ Messages Color");
if (new_color.isValid ())
{
next_color_CQ_ = new_color;
ui_->labCQ->setStyleSheet(QString("background: %1").arg(next_color_CQ_.name()));
next_color_cq_ = new_color;
ui_->labCQ->setStyleSheet(QString("background: %1; color: %2").arg(next_color_cq_.name()).arg(next_color_table_foreground_.name()));
}
}
void Configuration::impl::on_pbMyCall_clicked()
{
auto new_color = QColorDialog::getColor(next_color_MyCall_, this, "Directed Messages Color");
auto new_color = getColor(next_color_mycall_, this, "Directed Messages Color");
if (new_color.isValid ())
{
next_color_MyCall_ = new_color;
ui_->labMyCall->setStyleSheet(QString("background: %1").arg(next_color_MyCall_.name()));
next_color_mycall_ = new_color;
ui_->labMyCall->setStyleSheet(QString("background: %1; color: %2").arg(next_color_mycall_.name()).arg(next_color_table_foreground_.name()));
}
}
void Configuration::impl::on_pbTxMsg_clicked()
void Configuration::impl::on_tableBackgroundButton_clicked()
{
auto new_color = QColorDialog::getColor(next_color_ReceivedMsg_, this, "Received Messages Textarea Color");
auto new_color = getColor(next_color_table_background_, this, "Table Background Color");
if (new_color.isValid ())
{
next_color_ReceivedMsg_ = new_color;
ui_->labTx->setStyleSheet(QString("background: %1").arg(next_color_ReceivedMsg_.name()));
next_color_table_background_ = new_color;
ui_->tableBackgroundLabel->setStyleSheet(QString("background: %1; color: %2").arg(next_color_table_background_.name()).arg(next_color_table_foreground_.name()));
}
}
void Configuration::impl::on_pbNewDXCC_clicked()
void Configuration::impl::on_tableSelectedRowBackgroundButton_clicked()
{
auto new_color = QColorDialog::getColor(next_color_DXCC_, this, "New DXCC Messages Color");
auto new_color = getColor(next_color_table_highlight_, this, "Table Selected Row Background Color");
if (new_color.isValid ())
{
next_color_DXCC_ = new_color;
ui_->labDXCC->setStyleSheet(QString("background: %1").arg(next_color_DXCC_.name()));
next_color_table_highlight_ = new_color;
ui_->tableSelectionBackgroundLabel->setStyleSheet(QString("background: %1; color: %2").arg(next_color_table_highlight_.name()).arg(next_color_table_foreground_.name()));
}
}
void Configuration::impl::on_pbNewCall_clicked()
void Configuration::impl::on_tableForegroundButton_clicked()
{
auto new_color = QColorDialog::getColor(next_color_NewCall_, this, "New Call Messages Color");
auto new_color = getColor(next_color_table_foreground_, this, "Table Foreground Color");
if (new_color.isValid ())
{
next_color_NewCall_ = new_color;
ui_->labNewCall->setStyleSheet(QString("background: %1").arg(next_color_NewCall_.name()));
next_color_table_foreground_ = new_color;
ui_->tableBackgroundLabel->setStyleSheet(QString("background: %1; color: %2").arg(next_color_table_background_.name()).arg(next_color_table_foreground_.name()));
ui_->tableSelectionBackgroundLabel->setStyleSheet(QString("background: %1; color: %2").arg(next_color_table_highlight_.name()).arg(next_color_table_foreground_.name()));
ui_->labCQ->setStyleSheet(QString("background: %1; color: %2").arg(next_color_cq_.name()).arg(next_color_table_foreground_.name()));
ui_->labMyCall->setStyleSheet(QString("background: %1; color: %2").arg(next_color_mycall_.name()).arg(next_color_table_foreground_.name()));
}
}
void Configuration::impl::on_decoded_text_font_push_button_clicked ()
void Configuration::impl::on_rxBackgroundButton_clicked()
{
next_decoded_text_font_ = QFontDialog::getFont (0, decoded_text_font_ , this
auto new_color = getColor(next_color_rx_background_, this, "Received Messages Background Color");
if (new_color.isValid ())
{
next_color_rx_background_ = new_color;
ui_->rxLabel->setStyleSheet(QString("background: %1; color: %2").arg(color_rx_background_.name()).arg(color_rx_foreground_.name()));
ui_->rxForegroundLabel->setStyleSheet(QString("background: %1; color: %2").arg(next_color_rx_background_.name()).arg(next_color_rx_foreground_.name()));
ui_->txForegroundLabel->setStyleSheet(QString("background: %1; color: %2").arg(next_color_rx_background_.name()).arg(next_color_tx_foreground_.name()));
}
}
void Configuration::impl::on_rxForegroundButton_clicked()
{
auto new_color = getColor(next_color_rx_foreground_, this, "Received Messages Foreground Color");
if (new_color.isValid ())
{
next_color_rx_foreground_ = new_color;
ui_->rxLabel->setStyleSheet(QString("background: %1; color: %2").arg(color_rx_background_.name()).arg(color_rx_foreground_.name()));
ui_->rxForegroundLabel->setStyleSheet(QString("background: %1; color: %2").arg(next_color_rx_background_.name()).arg(next_color_rx_foreground_.name()));
ui_->txForegroundLabel->setStyleSheet(QString("background: %1; color: %2").arg(next_color_rx_background_.name()).arg(next_color_tx_foreground_.name()));
}
}
void Configuration::impl::on_rxFontButton_clicked ()
{
next_rx_text_font_ = QFontDialog::getFont (0, next_rx_text_font_ , this
, tr ("Font Chooser")
#if QT_VERSION >= 0x050201
, QFontDialog::MonospacedFonts
, 0
#endif
);
ui_->rxFontButton->setText(QString("Font (%1 %2)").arg(next_rx_text_font_.family()).arg(next_rx_text_font_.pointSize()));
}
void Configuration::impl::on_composeBackgroundButton_clicked()
{
auto new_color = getColor(next_color_compose_background_, this, "Compose Messages Background Color");
if (new_color.isValid ())
{
next_color_compose_background_ = new_color;
ui_->composeLabel->setStyleSheet(QString("background: %1; color: %2").arg(next_color_compose_background_.name()).arg(next_color_compose_foreground_.name()));
}
}
void Configuration::impl::on_composeForegroundButton_clicked()
{
auto new_color = getColor(next_color_compose_foreground_, this, "Compose Messages Foreground Color");
if (new_color.isValid ())
{
next_color_compose_foreground_ = new_color;
ui_->composeLabel->setStyleSheet(QString("background: %1; color: %2").arg(next_color_compose_background_.name()).arg(next_color_compose_foreground_.name()));
}
}
void Configuration::impl::on_txForegroundButton_clicked()
{
auto new_color = getColor(next_color_tx_foreground_, this, "Transmitted Messages Foreground Color");
if (new_color.isValid ())
{
next_color_tx_foreground_ = new_color;
ui_->rxForegroundLabel->setStyleSheet(QString("background: %1; color: %2").arg(next_color_rx_background_.name()).arg(next_color_rx_foreground_.name()));
ui_->txForegroundLabel->setStyleSheet(QString("background: %1; color: %2").arg(next_color_rx_background_.name()).arg(next_color_tx_foreground_.name()));
}
}
void Configuration::impl::on_txFontButton_clicked ()
{
next_tx_text_font_ = QFontDialog::getFont (0, next_tx_text_font_ , this
, tr ("Font Chooser")
#if QT_VERSION >= 0x050201
, 0
#endif
);
ui_->txFontButton->setText(QString("Font (%1 %2)").arg(next_tx_text_font_.family()).arg(next_tx_text_font_.pointSize()));
}
void Configuration::impl::on_composeFontButton_clicked ()
{
next_compose_text_font_ = QFontDialog::getFont (0, next_compose_text_font_ , this
, tr ("Font Chooser")
#if QT_VERSION >= 0x050201
, 0
#endif
);
ui_->composeFontButton->setText(QString("Font (%1 %2)").arg(next_compose_text_font_.family()).arg(next_compose_text_font_.pointSize()));
}
void Configuration::impl::on_PTT_port_combo_box_activated (int /* index */)
@@ -2362,6 +2632,14 @@ void Configuration::impl::on_qth_message_line_edit_textChanged(QString const &te
}
}
void Configuration::impl::on_cq_message_line_edit_textChanged(QString const &text)
{
QString upper = text.toUpper();
if(text != upper){
ui_->cq_message_line_edit->setText (upper);
}
}
void Configuration::impl::on_reply_message_line_edit_textChanged(QString const &text)
{
QString upper = text.toUpper();
@@ -2608,6 +2886,68 @@ void Configuration::impl::on_azel_path_select_push_button_clicked (bool /* check
}
}
void Configuration::impl::on_sound_dm_path_select_push_button_clicked(){
QStringList filters;
filters << "Audio files (*.wav)"
<< "Any files (*)";
QFileDialog fd {this, tr ("Sound File"), ui_->sound_dm_path_display_label->text ()};
fd.setNameFilters(filters);
if (fd.exec ()) {
if (fd.selectedFiles ().size ()) {
if(rig_params_.ptt_type == TransceiverFactory::PTT_method_VOX){
QMessageBox::warning(this, "Notifications Sounds Warning", "You have enabled notification sounds while using VOX. To avoid transmitting these notification sounds, please make sure your rig is using a different sound card than your system.");
}
ui_->sound_dm_path_display_label->setText(fd.selectedFiles().at(0));
}
}
}
void Configuration::impl::on_sound_dm_path_test_push_button_clicked(){
auto path = ui_->sound_dm_path_display_label->text();
if(path.isEmpty()){
return;
}
QSound::play(path);
}
void Configuration::impl::on_sound_dm_path_reset_push_button_clicked(){
ui_->sound_dm_path_display_label->clear();
}
void Configuration::impl::on_sound_am_path_select_push_button_clicked(){
QStringList filters;
filters << "Audio files (*.wav)"
<< "Any files (*)";
QFileDialog fd {this, tr ("Sound File"), ui_->sound_am_path_display_label->text ()};
fd.setNameFilters(filters);
if (fd.exec ()) {
if (fd.selectedFiles ().size ()) {
if(rig_params_.ptt_type == TransceiverFactory::PTT_method_VOX){
QMessageBox::warning(this, "Notifications Sounds Warning", "You have enabled notification sounds while using VOX. To avoid transmitting these notification sounds, please make sure your rig is using a different sound card than your system.");
}
ui_->sound_am_path_display_label->setText(fd.selectedFiles().at(0));
}
}
}
void Configuration::impl::on_sound_am_path_test_push_button_clicked(){
auto path = ui_->sound_am_path_display_label->text();
if(path.isEmpty()){
return;
}
QSound::play(path);
}
void Configuration::impl::on_sound_am_path_reset_push_button_clicked(){
ui_->sound_am_path_display_label->clear();
}
void Configuration::impl::on_calibration_intercept_spin_box_valueChanged (double)
{
rig_active_ = false; // force reset
+26 -7
View File
@@ -98,13 +98,16 @@ public:
QString my_callsign () const;
QString my_grid () const;
QString my_station () const;
int my_dBm() const;
int activity_aging() const;
int callsign_aging() const;
QString my_qth () const;
QString reply () const;
QString cq_message () const;
QString reply_message () const;
QFont table_font() const;
QFont text_font () const;
QFont decoded_text_font () const;
QFont rx_text_font () const;
QFont tx_text_font () const;
QFont compose_text_font () const;
qint32 id_interval () const;
qint32 ntrials() const;
qint32 aggressive() const;
@@ -112,11 +115,12 @@ public:
double degrade() const;
double txDelay() const;
bool id_after_73 () const;
bool tx_QSY_allowed () const;
bool tx_qsy_allowed () const;
bool spot_to_reporting_networks () const;
void set_spot_to_reporting_networks (bool);
bool transmit_directed() const;
bool autoreply_off_at_startup () const;
bool relay_off() const;
bool monitor_off_at_startup () const;
bool monitor_last_used () const;
bool log_as_DATA () const;
@@ -149,6 +153,9 @@ public:
bool EMEonly() const;
bool post_decodes () const;
QString opCall() const;
QString aprs_server_name () const;
port_type aprs_server_port () const;
QString aprs_passcode () const;
QString udp_server_name () const;
port_type udp_server_port () const;
QString n1mm_server_name () const;
@@ -171,11 +178,20 @@ public:
QStringListModel const * macros () const;
QDir save_directory () const;
QDir azel_directory () const;
QString sound_dm_path() const;
QString sound_am_path() const;
QString rig_name () const;
Type2MsgGen type_2_msg_gen () const;
QColor color_table_background() const;
QColor color_table_highlight() const;
QColor color_table_foreground() const;
QColor color_CQ () const;
QColor color_MyCall () const;
QColor color_ReceivedMsg () const;
QColor color_rx_background () const;
QColor color_rx_foreground () const;
QColor color_tx_foreground () const;
QColor color_compose_background () const;
QColor color_compose_foreground () const;
QColor color_DXCC () const;
QColor color_NewCall () const;
bool pwrBandTxMemory () const;
@@ -268,8 +284,11 @@ public:
// These signals indicate a font has been selected and accepted for
// the application text and decoded text respectively.
//
Q_SIGNAL void text_font_changed (QFont);
Q_SIGNAL void decoded_text_font_changed (QFont);
Q_SIGNAL void gui_text_font_changed (QFont);
Q_SIGNAL void tx_text_font_changed (QFont);
Q_SIGNAL void rx_text_font_changed (QFont);
Q_SIGNAL void compose_text_font_changed (QFont);
Q_SIGNAL void table_font_changed (QFont);
Q_SIGNAL void colors_changed ();
//
+1068 -571
View File
File diff suppressed because it is too large Load Diff
@@ -1,7 +1,7 @@
#!/bin/sh
WSJTX_BUNDLE="`echo "$0" | sed -e 's/\/Contents\/MacOS\/.*//'`"
WSJTX_RESOURCES="$WSJTX_BUNDLE/Contents/Resources"
WSJTX_TEMP="/tmp/wsjtx/$UID"
WSJTX_TEMP="/tmp/ft8call/$UID"
echo "running $0"
echo "WSJTX_BUNDLE: $WSJTX_BUNDLE"
@@ -13,4 +13,4 @@ export "DYLD_LIBRARY_PATH=$WSJTX_RESOURCES/lib"
export "PATH=$WSJTX_RESOURCES/bin:$PATH"
#export
exec "$WSJTX_RESOURCES/bin/wsjtx"
exec "$WSJTX_RESOURCES/bin/ft8call"
+4
View File
@@ -1,3 +1,7 @@
Notes on FT8Call Installation for Mac OS X
(replace all instances of WSJT-X with FT8Call)
Notes on WSJT-X Installation for Mac OS X
-----------------------------------------
+1 -1
View File
@@ -1 +1 @@
IDI_ICON1 ICON DISCARDABLE "../icons/windows-icons/wsjtx.ico"
IDI_ICON1 ICON DISCARDABLE "../icons/windows-icons/ft8call.ico"
+1 -1
View File
@@ -1 +1 @@
IDI_ICON1 ICON DISCARDABLE "../icons/windows-icons/wsjtx.ico"
IDI_ICON1 ICON DISCARDABLE "../icons/windows-icons/ft8call.ico"
+2 -2
View File
@@ -1,6 +1,6 @@
# Version number components
set (WSJTX_VERSION_MAJOR 0)
set (WSJTX_VERSION_MINOR 5)
set (WSJTX_VERSION_PATCH 0)
set (WSJTX_VERSION_MINOR 6)
set (WSJTX_VERSION_PATCH 5)
set (WSJTX_RC 0) # release candidate number, comment out or zero for development versions
set (WSJTX_VERSION_IS_RELEASE 0) # set to 1 for final release build
+27 -15
View File
@@ -13,23 +13,35 @@ CAboutDlg::CAboutDlg(QWidget *parent) :
{
ui->setupUi(this);
ui->labelTxt->setText ("<h2>" + QString {"WSJT-X v"
ui->labelTxt->setText ("<h2>" + QString {"FT8Call v"
+ QCoreApplication::applicationVersion ()
+ " " + revision ()}.simplified () + "</h2><br />"
"WSJT-X implements a number of digital modes designed for <br />"
"weak-signal Amateur Radio communication. <br /><br />"
"&copy; 2001-2018 by Joe Taylor, K1JT, with grateful <br />"
"acknowledgment for contributions from AC6SL, AE4JY, <br />"
"DJ0OT, G3WDG, G4KLA, G4WJS, IV3NWV, IW3RAB, K3WYC, K9AN, <br />"
"KA6MAL, KA9Q, KB1ZMX, KD6EKQ, KI7MT, KK1D, ND0B, PY2SDR, <br />"
"VE1SKY, VK3ACF, VK4BDJ, VK7MO, W4TI, W4TV, and W9MDB.<br /><br />"
"WSJT-X is licensed under the terms of Version 3 <br />"
"of the GNU General Public License (GPL) <br />"
"<a href=" WSJTX_STRINGIZE (PROJECT_HOMEPAGE) ">"
"<img src=\":/icon_128x128.png\" /></a>"
"<a href=\"https://www.gnu.org/licenses/gpl-3.0.txt\">"
"<img src=\":/gpl-v3-logo.svg\" height=\"80\" /><br />"
"https://www.gnu.org/licenses/gpl-3.0.txt</a>");
"FT8Call is a derivative of the WSJT-X application, "
"restructured and redesigned for message passing. <br/>"
"It is not supported by nor endorsed by the WSJT-X "
"development group. <br/>FT8Call is "
"licensed under and in accordance with the terms "
"of the <a href=\"https://www.gnu.org/licenses/gpl-3.0.txt\">GPLv3 license</a>.<br/>"
"The source code modifications are public and can be found in <a href=\"https://bitbucket.org/widefido/wsjtx/\">this repository</a>.<br/><br/>"
"FT8Call is heavily inspired by WSJT-X, Fldigi, "
"and FSQCall <br/>and would not exist without the hard work and "
"dedication of the many <br/>developers in the amateur radio "
"community.<br /><br />"
"FT8Call stands on the shoulder of giants...the takeoff angle "
"is better up there.<br /><br />"
"A special thanks goes out to the FT8Call development team:<br/><br/><strong>"
"KC9QNE, "
"KI6SSI, "
"LB9YH, "
"M0IAX, "
"N0JDS, "
"OH8STN, "
"VA3OSO, "
"VK1MIC, "
"W0FW,</strong><br/><br/>and the many other amateur radio operators who have given "
"FT8Call a chance.");
}
CAboutDlg::~CAboutDlg()
+9 -1
View File
@@ -5,8 +5,16 @@
<property name="windowModality">
<enum>Qt::NonModal</enum>
</property>
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>192</width>
<height>116</height>
</rect>
</property>
<property name="windowTitle">
<string>About WSJT-X</string>
<string>About FT8Call</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
+1
View File
@@ -17,6 +17,7 @@ def do_hash(callsign):
return int(hash & 0x7fff)
HOST = 'rotate.aprs2.net'
#HOST = 'rotate.aprs.net'
PORT = 14580
print "Connecting..."
+7 -26
View File
@@ -12,8 +12,8 @@
sodipodi:version="0.32"
viewBox="0 0 640 480"
version="1.1"
sodipodi:docname="tasto_5_architetto_franc_01.svg"
inkscape:version="0.48.4 r9939"
sodipodi:docname="DragNDrop Background.svg"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
width="100%"
height="100%">
<defs
@@ -27,10 +27,10 @@
inkscape:zoom="1.89375"
inkscape:cx="227.06271"
inkscape:cy="240"
inkscape:window-width="1855"
inkscape:window-height="1056"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-width="1920"
inkscape:window-height="1053"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="g3" />
<g
@@ -72,25 +72,6 @@
d="m 299.44057,-268.80395 c -9.2,3.806 -5.476,22.395 -5.476,30.261 0,1.951 -23.229,0.93 -26.087,0.93 -8.576,0 -23.012,-2.757 -27.835,6.535 -3.627,6.99 -1.35,19.146 -1.35,26.616 0,8.4 -0.709,17.143 0,25.519 0,13.884 15.395,12.081 24.75,12.081 h 30.326 c 0.616,0 -0.196,23.651 0.363,26.81 1.344,7.601 11.873,10.134 17.171,4.83 1.235,-0.97 2.304,-2.297 3.414,-3.404 6.86,-6.837 13.72,-13.676 20.579,-20.514 7.706,-7.681 15.41,-15.36 23.116,-23.042 4.011,-3.997 10.436,-8.579 12.863,-13.906 3.874,-8.509 -2.996,-14.135 -8.281,-19.426 -7.462,-7.47 -14.926,-14.941 -22.389,-22.411 -7.348,-7.353 -14.693,-14.708 -22.041,-22.061 -5.328,-5.353 -10.368,-12.444 -19.115,-8.826 m -58.942,89.86 v -25.519 c 0,-7.083 -2.537,-20.456 1.757,-26.809 4.938,-7.304 19.854,-4.536 27.283,-4.536 h 17.136 c 1.448,0 7.955,0.999 9.096,0 1.124,-0.984 0,-9.795 0,-11.286 v -14.11 c 0,-6.577 10.11,-8.923 14.281,-4.749 1.512,1.514 3.024,3.027 4.536,4.539 l 46.438,46.479 c 5.123,5.13 13.199,11.335 7.847,19.468 -3.387,5.148 -9.155,9.432 -13.47,13.732 -14.601,14.553 -29.201,29.107 -43.802,43.659 -2.575,2.568 -5.353,4.298 -9.308,3.666 -6.041,-0.967 -6.522,-6.041 -6.522,-10.962 0,-3.029 1.173,-23.3 -1.004,-23.3 h -29.582 c -8.374,-0.01 -24.69,2.6 -24.69,-10.282"
inkscape:connector-curvature="0"
style="fill:#739b07" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ff7400;fill-opacity:0.77254902;stroke:none;font-family:Purisa;-inkscape-font-specification:Sans Bold"
x="316.39532"
y="-58.000538"
id="text6112"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan6114"
x="316.39532"
y="-58.000538">Drag the icon</tspan><tspan
sodipodi:role="line"
x="316.39532"
y="-8.0005379"
id="tspan6116">onto the link</tspan><tspan
sodipodi:role="line"
x="316.39532"
y="41.999462"
id="tspan6118">to install WSJT-X</tspan></text>
</g>
<metadata
id="metadata6108">
@@ -107,7 +88,7 @@
<dc:title>Openclipart</dc:title>
</cc:Agent>
</dc:publisher>
<dc:title></dc:title>
<dc:title />
<dc:date>2010-03-28T09:25:56</dc:date>
<dc:description>Drawing by Francesco 'Architetto' Rollandin. From OCAL 0.18 release.</dc:description>
<dc:source>http://openclipart.org/detail/34711/architetto----tasto-5-by-anonymous</dc:source>

Before

Width:  |  Height:  |  Size: 7.6 KiB

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

+95
View File
@@ -0,0 +1,95 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1024"
height="1024"
viewBox="0 0 270.93333 270.93334"
version="1.1"
id="svg16"
inkscape:export-filename="/home/jordan/bitmap.png"
inkscape:export-xdpi="300.06662"
inkscape:export-ydpi="300.06662"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
sodipodi:docname="icon_1024.svg">
<defs
id="defs10">
<linearGradient
id="linearGradient6001"
osb:paint="solid">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop5999" />
</linearGradient>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.48333333"
inkscape:cx="1350"
inkscape:cy="512"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1053"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
units="px"
inkscape:pagecheckerboard="true" />
<metadata
id="metadata13">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-26.06665)">
<g
id="g6030"
transform="matrix(1.5635065,0,0,1.5635065,-28.822499,6.8392367)">
<circle
inkscape:export-ydpi="300.06662"
inkscape:export-xdpi="300.06662"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:10;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
r="81.642853"
cy="98.940475"
cx="105.07738"
id="path18" />
<text
id="text24"
y="152.33945"
x="52.539673"
style="font-style:normal;font-weight:normal;font-size:7.09937859px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.17748445"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:176.3888855px;font-family:wasy10;-inkscape-font-specification:wasy10;fill:#000000;stroke-width:0.17748445"
y="152.33945"
x="52.539673"
id="tspan22"
sodipodi:role="line">⌁</tspan></text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

+95
View File
@@ -0,0 +1,95 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="128"
height="128"
viewBox="0 0 33.866666 33.866667"
version="1.1"
id="svg16"
inkscape:export-filename="/home/jordan/bitmap.png"
inkscape:export-xdpi="300.06662"
inkscape:export-ydpi="300.06662"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
sodipodi:docname="icon_1024.svg">
<defs
id="defs10">
<linearGradient
id="linearGradient6001"
osb:paint="solid">
<stop
style="stop-color:#000000;stop-opacity:1;"
offset="0"
id="stop5999" />
</linearGradient>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.48333333"
inkscape:cx="1350"
inkscape:cy="512"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1053"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
units="px"
inkscape:pagecheckerboard="true" />
<metadata
id="metadata13">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-263.13332)">
<g
id="g6030"
transform="matrix(0.19543832,0,0,0.19543832,-3.6028125,260.72988)">
<circle
inkscape:export-ydpi="300.06662"
inkscape:export-xdpi="300.06662"
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:10;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
r="81.642853"
cy="98.940475"
cx="105.07738"
id="path18" />
<text
id="text24"
y="152.33945"
x="52.539673"
style="font-style:normal;font-weight:normal;font-size:7.09937859px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.17748445"
xml:space="preserve"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:176.3888855px;font-family:wasy10;-inkscape-font-specification:wasy10;fill:#000000;stroke-width:0.17748445"
y="152.33945"
x="52.539673"
id="tspan22"
sodipodi:role="line">⌁</tspan></text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.1 KiB

+64 -1098
View File
File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

+31 -30
View File
@@ -3,8 +3,8 @@
#
# Windows
#
inkscape -z -e /tmp/image-0.png wsjt_globe_128x128.svg
inkscape -z -e /tmp/image-1.png wsjtx_globe_1024x1024.svg
inkscape -z -e /tmp/image-0.png icon_128.svg
inkscape -z -e /tmp/image-1.png icon_1024.svg
convert '/tmp/image-%d.png[0-1]' -background transparent \
\( -clone 0 -resize 16 -colors 256 -compress none \) \
\( -clone 0 -resize 20 -colors 256 -compress none \) \
@@ -25,41 +25,42 @@ convert '/tmp/image-%d.png[0-1]' -background transparent \
\( -clone 1 -resize 128 -compress none \) \
\( -clone 1 -resize 256 -compress Zip \) \
-delete 1 -delete 0 \
-alpha remove ../icons/windows-icons/wsjtx.ico
-alpha remove ../icons/windows-icons/ft8call.ico
rm /tmp/image-0.png /tmp/image-1.png
identify -format '%f %p/%n %m %C/%Q %r %G %A %z\n' ../icons/windows-icons/wsjtx.ico
identify -format '%f %p/%n %m %C/%Q %r %G %A %z\n' ../icons/windows-icons/ft8call.ico
#
inkscape -z -e /dev/stdout -w 150 -h 57 -b white installer_logo.svg | tail -n +4 | \
convert png:- -resize 150x57 +matte BMP3:../icons/windows-icons/installer_logo.bmp
#inkscape -z -e /dev/stdout -w 150 -h 57 -b white installer_logo.svg | tail -n +4 | \
# convert png:- -resize 150x57 +matte BMP3:../icons/windows-icons/installer_logo.bmp
convert png:installer_logo.svg.png -resize 150x57 +matte BMP3:../icons/windows-icons/installer_logo.bmp
identify -format '%f %p/%n %m %C/%Q %r %G %A %z\n' ../icons/windows-icons/installer_logo.bmp
#
# Mac
#
mkdir -p ../icons/Darwin/wsjtx.iconset
inkscape -z -e ../icons/Darwin/wsjtx.iconset/icon_16x16.png -w 16 -h 16 wsjt_globe_128x128.svg
inkscape -z -e ../icons/Darwin/wsjtx.iconset/icon_16x16@2x.png -w 32 -h 32 wsjt_globe_128x128.svg
inkscape -z -e ../icons/Darwin/wsjtx.iconset/icon_32x32.png -w 32 -h 32 wsjt_globe_128x128.svg
inkscape -z -e ../icons/Darwin/wsjtx.iconset/icon_32x32@2x.png -w 64 -h 64 wsjt_globe_128x128.svg
inkscape -z -e ../icons/Darwin/wsjtx.iconset/icon_128x128.png -w 128 -h 128 wsjtx_globe_1024x1024.svg
inkscape -z -e ../icons/Darwin/wsjtx.iconset/icon_128x128@2x.png -w 256 -h 256 wsjtx_globe_1024x1024.svg
inkscape -z -e ../icons/Darwin/wsjtx.iconset/icon_256x256.png -w 256 -h 256 wsjtx_globe_1024x1024.svg
inkscape -z -e ../icons/Darwin/wsjtx.iconset/icon_256x256@2x.png -w 512 -h 512 wsjtx_globe_1024x1024.svg
inkscape -z -e ../icons/Darwin/wsjtx.iconset/icon_512x512.png -w 512 -h 512 wsjtx_globe_1024x1024.svg
inkscape -z -e ../icons/Darwin/wsjtx.iconset/icon_512x512@2x.png -w 1024 -h 1024 wsjtx_globe_1024x1024.svg
identify -format '%f %p/%n %m %C/%Q %r %G %A %z\n' ../icons/Darwin/wsjtx.iconset/*
mkdir -p ../icons/Darwin/FT8Call.iconset
inkscape -z -e ../icons/Darwin/FT8Call.iconset/icon_16x16.png -w 16 -h 16 icon_128.svg
inkscape -z -e ../icons/Darwin/FT8Call.iconset/icon_16x16@2x.png -w 32 -h 32 icon_128.svg
inkscape -z -e ../icons/Darwin/FT8Call.iconset/icon_32x32.png -w 32 -h 32 icon_128.svg
inkscape -z -e ../icons/Darwin/FT8Call.iconset/icon_32x32@2x.png -w 64 -h 64 icon_128.svg
inkscape -z -e ../icons/Darwin/FT8Call.iconset/icon_128x128.png -w 128 -h 128 icon_1024.svg
inkscape -z -e ../icons/Darwin/FT8Call.iconset/icon_128x128@2x.png -w 256 -h 256 icon_1024.svg
inkscape -z -e ../icons/Darwin/FT8Call.iconset/icon_256x256.png -w 256 -h 256 icon_1024.svg
inkscape -z -e ../icons/Darwin/FT8Call.iconset/icon_256x256@2x.png -w 512 -h 512 icon_1024.svg
inkscape -z -e ../icons/Darwin/FT8Call.iconset/icon_512x512.png -w 512 -h 512 icon_1024.svg
inkscape -z -e ../icons/Darwin/FT8Call.iconset/icon_512x512@2x.png -w 1024 -h 1024 icon_1024.svg
identify -format '%f %p/%n %m %C/%Q %r %G %A %z\n' ../icons/Darwin/FT8Call.iconset/*
# generic globe iconset for utilities
mkdir -p ../icons/Darwin/wsjt.iconset
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_16x16.png -w 16 -h 16 wsjt_globe_128x128.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_16x16@2x.png -w 32 -h 32 wsjt_globe_128x128.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_32x32.png -w 32 -h 32 wsjt_globe_128x128.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_32x32@2x.png -w 64 -h 64 wsjt_globe_128x128.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_128x128.png -w 128 -h 128 wsjt_globe_1024x1024.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_128x128@2x.png -w 256 -h 256 wsjt_globe_1024x1024.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_256x256.png -w 256 -h 256 wsjt_globe_1024x1024.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_256x256@2x.png -w 512 -h 512 wsjt_globe_1024x1024.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_512x512.png -w 512 -h 512 wsjt_globe_1024x1024.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_512x512@2x.png -w 1024 -h 1024 wsjt_globe_1024x1024.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_16x16.png -w 16 -h 16 icon_128.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_16x16@2x.png -w 32 -h 32 icon_128.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_32x32.png -w 32 -h 32 icon_128.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_32x32@2x.png -w 64 -h 64 icon_128.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_128x128.png -w 128 -h 128 icon_1024.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_128x128@2x.png -w 256 -h 256 icon_1024.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_256x256.png -w 256 -h 256 icon_1024.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_256x256@2x.png -w 512 -h 512 icon_1024.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_512x512.png -w 512 -h 512 icon_1024.svg
inkscape -z -e ../icons/Darwin/wsjt.iconset/icon_512x512@2x.png -w 1024 -h 1024 icon_1024.svg
identify -format '%f %p/%n %m %C/%Q %r %G %A %z\n' ../icons/Darwin/wsjt.iconset/*
#
inkscape -z -e "../icons/Darwin/DragNDrop Background.png" -w 640 -h 480 -b white "DragNDrop Background.svg"
@@ -68,5 +69,5 @@ identify -format '%f %p/%n %m %C/%Q %r %G %A %z\n' "../icons/Darwin/DragNDrop Ba
#
# KDE & Gnome
#
inkscape -z -e ../icons/Unix/wsjtx_icon.png -w 128 -h 128 wsjtx_globe_1024x1024.svg
identify -format '%f %p/%n %m %C/%Q %r %G %A %z\n' ../icons/Unix/wsjtx_icon.png
inkscape -z -e ../icons/Unix/ft8call_icon.png -w 128 -h 128 icon_1024.svg
identify -format '%f %p/%n %m %C/%Q %r %G %A %z\n' ../icons/Unix/ft8call_icon.png
-577
View File
@@ -1,577 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/bill/Dropbox/src/wsjtx-dev/icons/windows-icons/icon_1024x1024.png"
version="1.1"
width="1024"
sodipodi:version="0.32"
sodipodi:docname="wsjtx_globe_1024x1024.svg"
inkscape:version="0.48.4 r9939"
id="svg1432"
height="1024">
<sodipodi:namedview
bordercolor="#666666"
borderopacity="1.0"
id="base"
inkscape:current-layer="svg1432"
inkscape:cx="512"
inkscape:cy="512"
inkscape:guide-bbox="true"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-height="858"
inkscape:window-width="1114"
inkscape:window-x="72"
inkscape:window-y="31"
inkscape:zoom="0.69433594"
pagecolor="#ffffff"
showborder="true"
showguides="true"
showgrid="false"
inkscape:window-maximized="0"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:showpageshadow="false" />
<metadata
id="metadata3060">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:title></dc:title>
<dc:description>Simple globe centered on North America</dc:description>
<dc:subject>
<rdf:Bag>
<rdf:li>earth globe northamerica</rdf:li>
</rdf:Bag>
</dc:subject>
<dc:publisher>
<cc:Agent
rdf:about="http://www.openclipart.org/">
<dc:title>Open Clip Art Library</dc:title>
</cc:Agent>
</dc:publisher>
<dc:creator>
<cc:Agent>
<dc:title>Dan Gerhrads</dc:title>
</cc:Agent>
</dc:creator>
<dc:rights>
<cc:Agent>
<dc:title>Dan Gerhrads</dc:title>
</cc:Agent>
</dc:rights>
<dc:date>May 1, 2005</dc:date>
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<cc:license
rdf:resource="http://web.resource.org/cc/PublicDomain" />
<dc:language>en</dc:language>
</cc:Work>
<cc:License
rdf:about="http://web.resource.org/cc/PublicDomain">
<cc:permits
rdf:resource="http://web.resource.org/cc/Reproduction" />
<cc:permits
rdf:resource="http://web.resource.org/cc/Distribution" />
<cc:permits
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<defs
id="defs1759">
<linearGradient
id="linearGradient37658">
<stop
style="stop-color:#2f7aff;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop37660" />
<stop
style="stop-color:#0000b3;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop37662" />
</linearGradient>
<linearGradient
id="linearGradient20137">
<stop
style="stop-color:#00bf00;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop20139" />
<stop
style="stop-color:#007500;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop20141" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient20143"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient37658"
r="112.3373"
inkscape:collect="always"
id="radialGradient37664"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.806632,1.239722)"
fy="270.08731"
fx="221.61394"
cy="270.08731"
cx="221.61394" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1902"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1904"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1906"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1908"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1910"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1912"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1914"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1916"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1918"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1920"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient37658-427"
r="112.3373"
inkscape:collect="always"
id="radialGradient37664-403"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.806632,1.239722)"
fy="270.08731"
fx="221.61394"
cy="270.08731"
cx="221.61394" />
<linearGradient
id="linearGradient37658-427">
<stop
style="stop-color:#488afe;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7178" />
<stop
style="stop-color:#0000cc;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7180" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-396"
r="188.61865"
inkscape:collect="always"
id="radialGradient1902-893"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-396">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7184" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7186" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-527"
r="188.61865"
inkscape:collect="always"
id="radialGradient1904-666"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-527">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7190" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7192" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-774"
r="188.61865"
inkscape:collect="always"
id="radialGradient1906-717"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-774">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7196" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7198" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-253"
r="188.61865"
inkscape:collect="always"
id="radialGradient1908-922"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-253">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7202" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7204" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-972"
r="188.61865"
inkscape:collect="always"
id="radialGradient1910-261"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-972">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7208" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7210" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-945"
r="188.61865"
inkscape:collect="always"
id="radialGradient1912-713"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-945">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7214" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7216" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-600"
r="188.61865"
inkscape:collect="always"
id="radialGradient1914-146"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-600">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7220" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7222" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-196"
r="188.61865"
inkscape:collect="always"
id="radialGradient1916-817"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-196">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7226" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7228" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-388"
r="188.61865"
inkscape:collect="always"
id="radialGradient1918-23"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-388">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7232" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7234" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-202"
r="188.61865"
inkscape:collect="always"
id="radialGradient1920-260"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-202">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7238" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7240" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-151"
r="188.61865"
inkscape:collect="always"
id="radialGradient20143-884"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-151">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7244" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7246" />
</linearGradient>
</defs>
<desc
id="desc1434">wmf2svg</desc>
<polyline
transform="matrix(2.2285926,-3.5745108,2.3232002,1.4484387,-677.00545,692.67468)"
style="fill:url(#radialGradient37664-403);fill-opacity:1;stroke:#0c0c0c;stroke-width:0.6875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4"
points="103.191467,409.292114 100.730545,403.134064 98.525299,396.927094 96.543777,390.573547 94.785973,384.171082 93.219925,377.622009 91.909569,371.072968 90.790962,364.426147 89.928040,357.779327 89.256882,351.083649 88.777481,344.387970 88.521805,337.692261 88.489838,330.947693 88.681602,324.300873 89.033165,317.605194 89.640404,311.007263 90.407448,304.458221 91.398209,298.006897 92.580727,291.604431 93.986977,285.299744 95.553017,279.092804 97.342781,272.983582 99.324303,267.069916 101.465622,261.253937 103.830666,255.584595 106.387474,250.110733 109.104080,244.783508 112.012444,239.700668 115.112572,234.764420 118.404449,230.072571 121.856140,225.625061 125.499588,221.373062 129.302826,217.414291 133.265884,213.748779 137.260895,210.425354 141.351776,207.444077 145.506577,204.804901 149.725311,202.556717 153.975983,200.601776 158.258652,198.988937 162.573242,197.718231 166.919815,196.789627 171.266373,196.154266 175.644897,195.909912 179.991470,195.909912 184.338043,196.300888 188.652649,196.985123 192.967270,197.962585 197.217941,199.233307 201.468628,200.846130 205.623444,202.801071 209.746277,205.000397 213.805222,207.541809 217.768265,210.376495 221.667389,213.504395 225.470627,216.876678 229.177994,220.591064 232.789490,224.598709 236.273132,228.850708 239.628937,233.444839 242.856903,238.283325 245.957031,243.366180 248.929321,248.791153 251.709839,254.411621 254.362534,260.374207 256.791504,266.483398 258.996704,272.739227 261.010223,279.043915 262.768005,285.495270 264.302094,291.995453 265.644409,298.593384 266.731079,305.191315 267.625946,311.838104 268.297119,318.533813 268.744537,325.278351 269.000244,331.974030 269.032166,338.669739 268.872375,345.365448 268.488861,352.012238 267.913574,358.610168 267.114594,365.159241 266.123840,371.659424 264.941284,378.061890 263.567017,384.366577 261.969025,390.573547 260.211212,396.633850 258.229706,402.596436 256.056396,408.412384 253.723328,414.032837 251.166504,419.555603 248.449905,424.833923 245.509598,429.965668 242.409470,434.853027 239.149536,439.593750 235.697845,444.041260 232.054413,448.244385 228.219193,452.252045 224.288116,455.917542 220.261139,459.240967 216.170258,462.173401 212.015442,464.812561 207.828674,467.109589 203.577988,469.064545 199.263397,470.628510 194.948776,471.899200 190.634186,472.876678 186.255646,473.463196 181.909073,473.756439 177.562500,473.707550 173.215942,473.365448 168.869370,472.681213 164.586731,471.703735 160.304077,470.384155 156.085358,468.771332 151.898590,466.865265 147.807709,464.617065 143.748779,462.124512 139.753769,459.289856 135.854645,456.161926 132.051392,452.740753 128.344025,449.026367 124.764503,445.067596 121.280853,440.766724 117.893089,436.221466 114.665123,431.382996 111.565002,426.251282 108.624680,420.875153 105.812187,415.205811 103.191467,409.292114 "
id="polyline1560" />
<g
transform="matrix(4.1610916,0,0,4.1610916,-268.34786,-716.6628)"
style="fill:url(#radialGradient1902-893);fill-opacity:1;fill-rule:evenodd"
inkscape:label="Continents"
id="Continents">
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1904-666);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="132.818436,384.610931 131.827682,384.953064 128.184235,388.227600 126.074867,388.667450 123.422180,385.441803 120.417938,385.832794 117.126053,389.107300 116.838409,393.896912 116.902328,400.641479 115.655891,409.292114 114.409447,415.352448 115.432167,418.235992 113.578484,420.386444 111.053642,420.924042 109.903076,422.732361 109.871117,423.172241 116.295090,433.728943 123.262383,443.161530 130.836914,451.421204 140.904327,460.071808 151.195465,466.425385 153.528549,464.470428 157.683365,463.248596 162.509323,463.688446 165.321808,463.835083 165.577484,459.387573 165.066132,457.628113 162.381485,454.793457 158.162750,448.244385 155.094604,442.526184 156.884354,433.680054 153.496597,425.664764 151.738800,419.017975 150.811951,410.220703 147.743790,405.479980 144.579727,397.953430 142.438416,395.851868 141.447662,389.058441 138.858887,386.419281 135.886597,384.855316 133.968994,384.219940 133.201950,380.994293 131.667877,376.351288 131.923553,370.926331 132.850403,369.069122 135.407196,368.140533 137.292847,366.625458 137.452652,362.911041 136.557755,358.316925 134.736038,353.967194 135.886597,352.158844 138.123810,351.914490 141.255890,349.812927 141.223938,346.245178 139.050644,343.557098 136.973236,343.654846 135.471115,341.602142 134.863876,337.643402 135.407196,330.947693 138.219681,327.575439 141.191971,325.571625 145.890106,326.158081 148.510818,330.361237 149.469635,333.635773 149.565506,336.421570 150.588226,338.327637 152.314072,339.891571 153.656403,344.045837 154.135788,348.737701 152.665634,353.771698 151.578995,357.730469 152.985229,359.587646 155.094604,356.557495 156.468872,353.234070 159.153519,351.572388 161.870132,351.474609 165.865143,353.967194 168.517807,355.237885 171.458130,352.696472 175.389221,351.425751 178.457397,351.621246 179.416199,352.940857 181.301834,352.403229 184.497833,352.452087 185.968002,353.918335 186.095840,356.704102 187.949539,357.143951 190.602203,359.392151 192.551788,361.004974 193.670380,358.610168 191.912582,355.482269 191.561020,353.576202 193.095093,351.767883 192.583740,349.030945 190.442413,347.906860 188.620697,346.147400 189.259888,345.169952 191.976501,346.049652 195.044662,348.835449 196.259140,351.230255 198.624191,353.771698 200.733551,353.282928 202.363510,350.057312 203.609955,343.996979 204.153275,334.710999 202.906830,330.752228 202.331558,328.406281 203.258408,324.594147 202.459396,316.676605 201.053146,314.819397 198.496353,317.311981 195.300339,320.781982 194.788971,323.567780 192.871368,323.518921 189.739288,325.669373 186.894852,327.477692 187.342285,323.470032 188.524796,319.755646 190.666138,317.311981 190.314575,313.450958 189.132050,308.123718 190.090851,304.898071 193.734299,301.965637 197.601471,302.063385 202.107834,303.773987 205.559525,305.875519 207.796722,306.217651 208.435928,302.698761 206.678116,300.548309 206.038925,296.980560 207.796722,294.585724 209.490601,292.581909 208.627686,290.529205 205.783249,292.386414 203.961517,291.555573 204.057388,289.258514 207.189484,286.130615 208.787491,282.953796 208.627686,279.532684 209.874130,275.427277 208.276123,272.152740 206.198730,271.273010 205.783249,275.231781 204.185242,277.479980 203.929565,281.927460 201.788239,283.393677 202.715073,269.513580 203.546036,261.938171 204.888351,257.050812 206.997711,254.998108 209.426682,251.283707 209.171005,248.595657 207.541046,244.734634 206.262650,243.708313 205.687363,241.362366 204.600723,239.211929 202.715073,239.798416 201.276871,239.896149 200.030426,234.959930 197.697342,233.395966 194.916824,233.884705 192.743546,234.715546 191.976501,231.929764 192.264130,228.068741 190.698090,230.903412 191.145538,235.986282 191.912582,241.362366 192.104340,246.347473 190.154770,250.208496 187.406204,253.238663 182.548279,255.780090 177.338791,257.979401 173.695343,260.911804 171.745789,262.866760 169.956009,265.603668 166.696106,264.919464 162.924805,265.066071 158.290604,266.092438 153.464630,269.220306 146.944778,274.352051 145.091095,277.479980 141.671371,283.442566 138.954773,288.036682 135.918564,293.950378 135.119568,298.593384 135.503082,301.476929 136.334045,297.420410 138.091858,294.048126 140.361008,290.871338 142.310577,287.987793 143.365265,289.502869 141.959015,292.190948 138.283615,298.055786 135.087601,306.071045 132.946274,309.492188 130.900833,310.176422 129.686356,314.330688 130.069870,319.755646 128.919312,329.628113 129.494598,334.515503 130.677109,341.797638 131.603958,350.546021 131.540024,355.482269 130.964752,360.565125 128.280106,366.772064 129.047150,373.125641 129.654404,377.084412 131.476105,380.456665 132.818436,384.610931 "
id="polyline1460" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1906-717);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="144.579727,355.237885 146.497345,357.241699 147.583984,362.324585 148.638672,368.384918 149.980988,372.539154 150.364502,377.035553 148.798477,377.279877 146.753021,373.467743 146.976746,368.433777 146.593216,362.959930 144.579727,355.237885 "
id="polyline1464" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1908-922);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="150.108826,378.892731 148.830429,379.870209 149.309830,383.584595 150.172745,386.614777 152.633667,390.964508 152.505829,386.565887 153.336792,386.077148 153.017197,383.780090 150.108826,378.892731 "
id="polyline1468" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1910-261);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="201.181000,353.820557 200.797470,356.459747 200.413956,361.053864 199.966507,365.990082 199.007706,368.238281 196.866379,363.204285 197.921066,357.681580 199.103592,354.895782 201.181000,353.820557 "
id="polyline1472" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1912-713);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="204.632675,320.342133 203.993469,316.774353 202.906830,312.668976 206.230682,314.575043 208.883362,312.277985 209.842163,309.052338 208.915314,303.822876 208.563766,299.961853 209.874130,294.487976 212.430923,295.514343 213.261887,299.570862 213.581497,305.386810 213.837173,310.958405 212.111328,314.917175 211.951538,317.018738 212.335052,321.466217 210.800964,325.913727 208.691605,325.376099 206.454407,326.646820 205.016205,324.203125 204.632675,320.342133 "
id="polyline1476" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1914-146);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="213.773254,334.955322 213.709335,340.820160 213.869125,343.263885 216.362015,346.636139 219.526062,350.594910 218.695099,344.632324 219.685867,341.406677 222.722061,339.060730 227.835663,334.662109 230.648163,335.786194 233.332809,333.147003 234.355515,326.011475 234.675125,319.218048 233.556534,312.522369 233.588486,306.071045 231.511078,300.646057 228.890350,297.420410 226.365509,296.980560 225.246902,294.830109 226.365509,293.461639 225.023193,290.235992 222.338547,287.401337 220.964264,289.698364 217.352783,290.675842 216.330063,294.292480 216.362015,299.375336 220.644653,297.469269 222.754028,297.958038 220.708588,301.623535 219.941544,306.852997 220.293106,310.714020 219.845657,317.654083 219.078629,323.909912 214.955765,329.237122 215.083618,333.000397 213.773254,334.955322 "
id="polyline1480" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1916-817);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="232.533813,338.767487 230.200729,341.748779 229.401718,344.436798 229.721313,347.662476 233.460648,348.542206 237.040161,346.929382 237.231934,342.872864 235.378250,340.478088 233.620453,340.282562 232.533813,338.767487 "
id="polyline1484" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1918-23);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="264.877380,375.813690 262.991730,379.919098 260.371002,382.167236 258.645172,385.148529 258.645172,389.693817 256.887360,391.062256 255.161514,388.911804 254.522308,386.956848 252.732559,385.197418 253.339798,391.697632 251.709839,392.332977 249.792236,387.738861 248.322067,389.840393 246.724060,393.017212 244.327072,395.412018 242.952774,399.664001 241.514587,403.329529 241.067139,407.337158 239.565018,407.190552 238.318573,407.777039 235.665894,409.096649 233.173004,407.679291 233.141052,401.570068 234.707092,399.712891 235.122574,395.705231 237.231934,393.652588 239.692856,394.434540 241.834183,392.039734 240.843414,387.152374 239.980499,385.099670 240.907349,382.265015 244.550781,379.332581 247.043671,372.685760 247.139542,368.384918 249.121078,365.110352 252.125320,361.151611 254.202728,353.967194 256.503845,350.399414 255.992477,346.684998 255.864655,342.335266 255.832672,339.744965 254.586243,339.353973 254.074875,342.139771 251.581985,340.722412 252.189240,343.654846 251.997467,347.760223 251.294357,352.647583 251.486115,357.632721 248.897354,354.993530 246.915833,355.335632 246.020950,351.670135 245.733307,346.489502 247.778748,340.233704 248.002472,336.763672 247.586990,329.774750 247.299347,324.545258 248.705597,319.315765 251.230438,321.319580 254.234680,326.451324 255.608963,324.154266 255.097595,321.417358 253.915070,321.612854 252.253159,317.702942 254.202728,316.774353 253.883118,313.548676 254.714081,310.469666 254.746033,303.969452 255.001724,293.999268 253.947052,293.070679 252.349030,292.777405 250.495346,290.382599 250.303589,287.938934 249.312836,284.077911 247.235428,279.679291 245.381744,278.261963 242.920822,273.912201 241.546539,269.122559 241.035172,265.408173 242.345535,263.502106 240.555771,258.761383 238.734055,257.979401 236.560776,253.336411 234.131805,249.573120 232.501846,251.185959 230.648163,249.768631 228.315079,245.272247 226.653152,244.343658 225.438675,246.494095 223.808701,245.174515 220.964264,239.896149 219.430176,240.775894 217.672379,242.193222 216.170258,241.069122 212.718582,239.945023 210.257645,239.114182 207.509079,237.647964 205.527557,234.422318 206.805954,234.471191 209.362778,234.520065 210.225693,233.004974 208.979248,230.072571 209.810211,226.993515 210.737045,224.109970 213.325806,224.794220 215.722824,225.967178 216.745544,227.873245 219.781738,227.531128 222.114822,224.549835 224.032425,226.553665 226.844925,229.241714 229.785248,226.700287 230.136795,223.425751 229.721313,220.933197 236.592728,229.290573 241.898102,236.768250 246.564270,244.490280 251.837677,254.704865 255.960541,264.332947 260.115326,276.258118 264.302094,291.995453 267.210449,308.514740 268.393005,320.537628 269.000244,333.538025 268.840424,345.169952 268.201202,356.557495 266.794983,367.358551 265.516571,374.933960 264.877380,375.813690 "
id="polyline1488" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1920-260);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="244.774506,357.779327 243.304337,356.313110 242.345535,358.512421 241.131058,362.666687 239.916580,364.817108 238.062897,367.945038 237.615448,372.930145 238.414459,375.324951 239.373245,373.125641 239.852661,368.727020 240.683624,367.602905 241.067139,371.121826 241.290848,375.129456 241.834183,378.452850 243.336304,376.986664 243.528061,376.937775 243.719818,376.888916 243.911591,376.791168 244.071396,376.644531 244.390976,376.351288 244.678635,376.009186 244.934311,375.618195 245.126068,375.324951 245.221939,375.129456 245.285858,375.031708 245.253906,372.490265 244.486862,365.159241 244.199219,361.884705 244.774506,357.779327 "
id="polyline1492" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient20143-884);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="262.192749,389.449432 260.115326,391.160004 258.261658,394.287933 256.663635,394.532288 255.992477,392.968323 255.065643,395.802979 253.851151,400.885864 250.783005,404.209290 250.175766,401.276855 249.344803,399.810638 245.573502,402.889679 242.537292,406.213104 240.747543,406.995056 238.126801,409.878601 236.049423,409.976349 233.748291,411.002716 231.606964,415.010315 228.986237,420.826294 226.333542,423.123352 220.996231,428.059601 216.617691,433.680054 213.485611,439.349396 210.385483,446.582703 209.171005,453.278381 210.353516,458.605591 214.220703,458.654480 216.777496,458.752228 218.535294,460.560547 223.648911,456.504028 228.187241,452.252045 232.693619,447.511292 237.775253,441.402100 243.400223,433.386810 247.906586,425.811401 251.677872,418.529236 255.161514,410.611694 258.069885,403.134064 260.690613,394.923279 262.192749,389.449432 "
id="polyline1496" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 32 KiB

-839
View File
@@ -1,839 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
height="128"
id="svg1432"
inkscape:version="0.48.4 r9939"
sodipodi:docname="wsjtx_globe_128x128.svg"
sodipodi:version="0.32"
width="128"
version="1.1">
<sodipodi:namedview
bordercolor="#666666"
borderopacity="1.0"
id="base"
inkscape:current-layer="svg1432"
inkscape:cx="64"
inkscape:cy="64"
inkscape:guide-bbox="true"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:window-height="1027"
inkscape:window-width="1846"
inkscape:window-x="72"
inkscape:window-y="24"
inkscape:zoom="6.875"
pagecolor="#ffffff"
showborder="false"
showguides="true"
showgrid="false"
inkscape:window-maximized="0"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:showpageshadow="false"
inkscape:snap-from-guide="true" />
<metadata
id="metadata3060">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:title />
<dc:description>Simple globe centered on North America</dc:description>
<dc:subject>
<rdf:Bag>
<rdf:li>earth globe northamerica</rdf:li>
</rdf:Bag>
</dc:subject>
<dc:publisher>
<cc:Agent
rdf:about="http://www.openclipart.org/">
<dc:title>Open Clip Art Library</dc:title>
</cc:Agent>
</dc:publisher>
<dc:creator>
<cc:Agent>
<dc:title>Dan Gerhrads</dc:title>
</cc:Agent>
</dc:creator>
<dc:rights>
<cc:Agent>
<dc:title>Dan Gerhrads</dc:title>
</cc:Agent>
</dc:rights>
<dc:date>May 1, 2005</dc:date>
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<cc:license
rdf:resource="http://web.resource.org/cc/PublicDomain" />
<dc:language>en</dc:language>
</cc:Work>
<cc:License
rdf:about="http://web.resource.org/cc/PublicDomain">
<cc:permits
rdf:resource="http://web.resource.org/cc/Reproduction" />
<cc:permits
rdf:resource="http://web.resource.org/cc/Distribution" />
<cc:permits
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<defs
id="defs1759">
<linearGradient
id="linearGradient37658">
<stop
id="stop37660"
offset="0.0000000"
style="stop-color:#619afe;stop-opacity:1.0000000;" />
<stop
id="stop37662"
offset="1.0000000"
style="stop-color:#0000e5;stop-opacity:1.0000000;" />
</linearGradient>
<linearGradient
id="linearGradient20137">
<stop
id="stop20139"
offset="0.0000000"
style="stop-color:#00f100;stop-opacity:1.0000000;" />
<stop
id="stop20141"
offset="1.0000000"
style="stop-color:#00a700;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient20143"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137" />
<radialGradient
cx="221.61394"
cy="270.08731"
fx="221.61394"
fy="270.08731"
gradientTransform="scale(0.806632,1.239722)"
gradientUnits="userSpaceOnUse"
id="radialGradient37664"
inkscape:collect="always"
r="112.3373"
xlink:href="#linearGradient37658" />
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1902"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137" />
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1904"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137" />
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1906"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137" />
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1908"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137" />
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1910"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137" />
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1912"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137" />
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1914"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137" />
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1916"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137" />
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1918"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137" />
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1920"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137" />
<radialGradient
cx="221.61394"
cy="270.08731"
fx="221.61394"
fy="270.08731"
gradientTransform="scale(0.806632,1.239722)"
gradientUnits="userSpaceOnUse"
id="radialGradient37664-284"
inkscape:collect="always"
r="112.3373"
xlink:href="#linearGradient37658-332" />
<linearGradient
id="linearGradient37658-332">
<stop
id="stop8375"
offset="0.0000000"
style="stop-color:#7aaafe;stop-opacity:1.0000000;" />
<stop
id="stop8377"
offset="1.0000000"
style="stop-color:#0000fe;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1902-108"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-970" />
<linearGradient
id="linearGradient20137-970">
<stop
id="stop8381"
offset="0.0000000"
style="stop-color:#0bfe0b;stop-opacity:1.0000000;" />
<stop
id="stop8383"
offset="1.0000000"
style="stop-color:#00c000;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1904-972"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-24" />
<linearGradient
id="linearGradient20137-24">
<stop
id="stop8387"
offset="0.0000000"
style="stop-color:#0bfe0b;stop-opacity:1.0000000;" />
<stop
id="stop8389"
offset="1.0000000"
style="stop-color:#00c000;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1906-828"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-376" />
<linearGradient
id="linearGradient20137-376">
<stop
id="stop8393"
offset="0.0000000"
style="stop-color:#0bfe0b;stop-opacity:1.0000000;" />
<stop
id="stop8395"
offset="1.0000000"
style="stop-color:#00c000;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1908-502"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-289" />
<linearGradient
id="linearGradient20137-289">
<stop
id="stop8399"
offset="0.0000000"
style="stop-color:#0bfe0b;stop-opacity:1.0000000;" />
<stop
id="stop8401"
offset="1.0000000"
style="stop-color:#00c000;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1910-187"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-879" />
<linearGradient
id="linearGradient20137-879">
<stop
id="stop8405"
offset="0.0000000"
style="stop-color:#0bfe0b;stop-opacity:1.0000000;" />
<stop
id="stop8407"
offset="1.0000000"
style="stop-color:#00c000;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1912-38"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-891" />
<linearGradient
id="linearGradient20137-891">
<stop
id="stop8411"
offset="0.0000000"
style="stop-color:#0bfe0b;stop-opacity:1.0000000;" />
<stop
id="stop8413"
offset="1.0000000"
style="stop-color:#00c000;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1914-119"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-529" />
<linearGradient
id="linearGradient20137-529">
<stop
id="stop8417"
offset="0.0000000"
style="stop-color:#0bfe0b;stop-opacity:1.0000000;" />
<stop
id="stop8419"
offset="1.0000000"
style="stop-color:#00c000;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1916-825"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-469" />
<linearGradient
id="linearGradient20137-469">
<stop
id="stop8423"
offset="0.0000000"
style="stop-color:#0bfe0b;stop-opacity:1.0000000;" />
<stop
id="stop8425"
offset="1.0000000"
style="stop-color:#00c000;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1918-387"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-981" />
<linearGradient
id="linearGradient20137-981">
<stop
id="stop8429"
offset="0.0000000"
style="stop-color:#0bfe0b;stop-opacity:1.0000000;" />
<stop
id="stop8431"
offset="1.0000000"
style="stop-color:#00c000;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1920-264"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-421" />
<linearGradient
id="linearGradient20137-421">
<stop
id="stop8435"
offset="0.0000000"
style="stop-color:#0bfe0b;stop-opacity:1.0000000;" />
<stop
id="stop8437"
offset="1.0000000"
style="stop-color:#00c000;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient20143-627"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-58" />
<linearGradient
id="linearGradient20137-58">
<stop
id="stop8441"
offset="0.0000000"
style="stop-color:#0bfe0b;stop-opacity:1.0000000;" />
<stop
id="stop8443"
offset="1.0000000"
style="stop-color:#00c000;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="221.61394"
cy="270.08731"
fx="221.61394"
fy="270.08731"
gradientTransform="scale(0.806632,1.239722)"
gradientUnits="userSpaceOnUse"
id="radialGradient37664-284-781"
inkscape:collect="always"
r="112.3373"
xlink:href="#linearGradient37658-332-354" />
<linearGradient
id="linearGradient37658-332-354">
<stop
id="stop8612"
offset="0.0000000"
style="stop-color:#93bafe;stop-opacity:1.0000000;" />
<stop
id="stop8614"
offset="1.0000000"
style="stop-color:#1818ff;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1902-108-124"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-970-892" />
<linearGradient
id="linearGradient20137-970-892">
<stop
id="stop8618"
offset="0.0000000"
style="stop-color:#24fe24;stop-opacity:1.0000000;" />
<stop
id="stop8620"
offset="1.0000000"
style="stop-color:#00d900;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1904-972-786"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-24-119" />
<linearGradient
id="linearGradient20137-24-119">
<stop
id="stop8624"
offset="0.0000000"
style="stop-color:#24fe24;stop-opacity:1.0000000;" />
<stop
id="stop8626"
offset="1.0000000"
style="stop-color:#00d900;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1906-828-861"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-376-597" />
<linearGradient
id="linearGradient20137-376-597">
<stop
id="stop8630"
offset="0.0000000"
style="stop-color:#24fe24;stop-opacity:1.0000000;" />
<stop
id="stop8632"
offset="1.0000000"
style="stop-color:#00d900;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1908-502-115"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-289-824" />
<linearGradient
id="linearGradient20137-289-824">
<stop
id="stop8636"
offset="0.0000000"
style="stop-color:#24fe24;stop-opacity:1.0000000;" />
<stop
id="stop8638"
offset="1.0000000"
style="stop-color:#00d900;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1910-187-480"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-879-315" />
<linearGradient
id="linearGradient20137-879-315">
<stop
id="stop8642"
offset="0.0000000"
style="stop-color:#24fe24;stop-opacity:1.0000000;" />
<stop
id="stop8644"
offset="1.0000000"
style="stop-color:#00d900;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1912-38-980"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-891-460" />
<linearGradient
id="linearGradient20137-891-460">
<stop
id="stop8648"
offset="0.0000000"
style="stop-color:#24fe24;stop-opacity:1.0000000;" />
<stop
id="stop8650"
offset="1.0000000"
style="stop-color:#00d900;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1914-119-179"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-529-932" />
<linearGradient
id="linearGradient20137-529-932">
<stop
id="stop8654"
offset="0.0000000"
style="stop-color:#24fe24;stop-opacity:1.0000000;" />
<stop
id="stop8656"
offset="1.0000000"
style="stop-color:#00d900;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1916-825-422"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-469-24" />
<linearGradient
id="linearGradient20137-469-24">
<stop
id="stop8660"
offset="0.0000000"
style="stop-color:#24fe24;stop-opacity:1.0000000;" />
<stop
id="stop8662"
offset="1.0000000"
style="stop-color:#00d900;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1918-387-755"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-981-521" />
<linearGradient
id="linearGradient20137-981-521">
<stop
id="stop8666"
offset="0.0000000"
style="stop-color:#24fe24;stop-opacity:1.0000000;" />
<stop
id="stop8668"
offset="1.0000000"
style="stop-color:#00d900;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient1920-264-381"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-421-297" />
<linearGradient
id="linearGradient20137-421-297">
<stop
id="stop8672"
offset="0.0000000"
style="stop-color:#24fe24;stop-opacity:1.0000000;" />
<stop
id="stop8674"
offset="1.0000000"
style="stop-color:#00d900;stop-opacity:1.0000000;" />
</linearGradient>
<radialGradient
cx="202.06305"
cy="297.1124"
fx="205.17723"
fy="298.37747"
gradientTransform="scale(0.893959,1.11862)"
gradientUnits="userSpaceOnUse"
id="radialGradient20143-627-23"
inkscape:collect="always"
r="188.61865"
xlink:href="#linearGradient20137-58-615" />
<linearGradient
id="linearGradient20137-58-615">
<stop
id="stop8678"
offset="0.0000000"
style="stop-color:#24fe24;stop-opacity:1.0000000;" />
<stop
id="stop8680"
offset="1.0000000"
style="stop-color:#00d900;stop-opacity:1.0000000;" />
</linearGradient>
</defs>
<desc
id="desc1434">wmf2svg</desc>
<polyline
id="polyline1560"
points="103.191467,409.292114 100.730545,403.134064 98.525299,396.927094 96.543777,390.573547 94.785973,384.171082 93.219925,377.622009 91.909569,371.072968 90.790962,364.426147 89.928040,357.779327 89.256882,351.083649 88.777481,344.387970 88.521805,337.692261 88.489838,330.947693 88.681602,324.300873 89.033165,317.605194 89.640404,311.007263 90.407448,304.458221 91.398209,298.006897 92.580727,291.604431 93.986977,285.299744 95.553017,279.092804 97.342781,272.983582 99.324303,267.069916 101.465622,261.253937 103.830666,255.584595 106.387474,250.110733 109.104080,244.783508 112.012444,239.700668 115.112572,234.764420 118.404449,230.072571 121.856140,225.625061 125.499588,221.373062 129.302826,217.414291 133.265884,213.748779 137.260895,210.425354 141.351776,207.444077 145.506577,204.804901 149.725311,202.556717 153.975983,200.601776 158.258652,198.988937 162.573242,197.718231 166.919815,196.789627 171.266373,196.154266 175.644897,195.909912 179.991470,195.909912 184.338043,196.300888 188.652649,196.985123 192.967270,197.962585 197.217941,199.233307 201.468628,200.846130 205.623444,202.801071 209.746277,205.000397 213.805222,207.541809 217.768265,210.376495 221.667389,213.504395 225.470627,216.876678 229.177994,220.591064 232.789490,224.598709 236.273132,228.850708 239.628937,233.444839 242.856903,238.283325 245.957031,243.366180 248.929321,248.791153 251.709839,254.411621 254.362534,260.374207 256.791504,266.483398 258.996704,272.739227 261.010223,279.043915 262.768005,285.495270 264.302094,291.995453 265.644409,298.593384 266.731079,305.191315 267.625946,311.838104 268.297119,318.533813 268.744537,325.278351 269.000244,331.974030 269.032166,338.669739 268.872375,345.365448 268.488861,352.012238 267.913574,358.610168 267.114594,365.159241 266.123840,371.659424 264.941284,378.061890 263.567017,384.366577 261.969025,390.573547 260.211212,396.633850 258.229706,402.596436 256.056396,408.412384 253.723328,414.032837 251.166504,419.555603 248.449905,424.833923 245.509598,429.965668 242.409470,434.853027 239.149536,439.593750 235.697845,444.041260 232.054413,448.244385 228.219193,452.252045 224.288116,455.917542 220.261139,459.240967 216.170258,462.173401 212.015442,464.812561 207.828674,467.109589 203.577988,469.064545 199.263397,470.628510 194.948776,471.899200 190.634186,472.876678 186.255646,473.463196 181.909073,473.756439 177.562500,473.707550 173.215942,473.365448 168.869370,472.681213 164.586731,471.703735 160.304077,470.384155 156.085358,468.771332 151.898590,466.865265 147.807709,464.617065 143.748779,462.124512 139.753769,459.289856 135.854645,456.161926 132.051392,452.740753 128.344025,449.026367 124.764503,445.067596 121.280853,440.766724 117.893089,436.221466 114.665123,431.382996 111.565002,426.251282 108.624680,420.875153 105.812187,415.205811 103.191467,409.292114 "
style="fill:url(#radialGradient37664-284-781);fill-opacity:1;stroke:#181818;stroke-width:0.6875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4"
transform="matrix(0.3640721,-0.58678257,0.3795276,0.23777199,-128.13162,89.336986)" />
<g
id="Continents"
inkscape:label="Continents"
style="fill:url(#radialGradient1902-108-124);fill-opacity:1;fill-rule:evenodd"
transform="matrix(0.67977314,0,0,0.68307417,-61.371653,-142.01634)">
<polyline
id="polyline1460"
points="132.818436,384.610931 131.827682,384.953064 128.184235,388.227600 126.074867,388.667450 123.422180,385.441803 120.417938,385.832794 117.126053,389.107300 116.838409,393.896912 116.902328,400.641479 115.655891,409.292114 114.409447,415.352448 115.432167,418.235992 113.578484,420.386444 111.053642,420.924042 109.903076,422.732361 109.871117,423.172241 116.295090,433.728943 123.262383,443.161530 130.836914,451.421204 140.904327,460.071808 151.195465,466.425385 153.528549,464.470428 157.683365,463.248596 162.509323,463.688446 165.321808,463.835083 165.577484,459.387573 165.066132,457.628113 162.381485,454.793457 158.162750,448.244385 155.094604,442.526184 156.884354,433.680054 153.496597,425.664764 151.738800,419.017975 150.811951,410.220703 147.743790,405.479980 144.579727,397.953430 142.438416,395.851868 141.447662,389.058441 138.858887,386.419281 135.886597,384.855316 133.968994,384.219940 133.201950,380.994293 131.667877,376.351288 131.923553,370.926331 132.850403,369.069122 135.407196,368.140533 137.292847,366.625458 137.452652,362.911041 136.557755,358.316925 134.736038,353.967194 135.886597,352.158844 138.123810,351.914490 141.255890,349.812927 141.223938,346.245178 139.050644,343.557098 136.973236,343.654846 135.471115,341.602142 134.863876,337.643402 135.407196,330.947693 138.219681,327.575439 141.191971,325.571625 145.890106,326.158081 148.510818,330.361237 149.469635,333.635773 149.565506,336.421570 150.588226,338.327637 152.314072,339.891571 153.656403,344.045837 154.135788,348.737701 152.665634,353.771698 151.578995,357.730469 152.985229,359.587646 155.094604,356.557495 156.468872,353.234070 159.153519,351.572388 161.870132,351.474609 165.865143,353.967194 168.517807,355.237885 171.458130,352.696472 175.389221,351.425751 178.457397,351.621246 179.416199,352.940857 181.301834,352.403229 184.497833,352.452087 185.968002,353.918335 186.095840,356.704102 187.949539,357.143951 190.602203,359.392151 192.551788,361.004974 193.670380,358.610168 191.912582,355.482269 191.561020,353.576202 193.095093,351.767883 192.583740,349.030945 190.442413,347.906860 188.620697,346.147400 189.259888,345.169952 191.976501,346.049652 195.044662,348.835449 196.259140,351.230255 198.624191,353.771698 200.733551,353.282928 202.363510,350.057312 203.609955,343.996979 204.153275,334.710999 202.906830,330.752228 202.331558,328.406281 203.258408,324.594147 202.459396,316.676605 201.053146,314.819397 198.496353,317.311981 195.300339,320.781982 194.788971,323.567780 192.871368,323.518921 189.739288,325.669373 186.894852,327.477692 187.342285,323.470032 188.524796,319.755646 190.666138,317.311981 190.314575,313.450958 189.132050,308.123718 190.090851,304.898071 193.734299,301.965637 197.601471,302.063385 202.107834,303.773987 205.559525,305.875519 207.796722,306.217651 208.435928,302.698761 206.678116,300.548309 206.038925,296.980560 207.796722,294.585724 209.490601,292.581909 208.627686,290.529205 205.783249,292.386414 203.961517,291.555573 204.057388,289.258514 207.189484,286.130615 208.787491,282.953796 208.627686,279.532684 209.874130,275.427277 208.276123,272.152740 206.198730,271.273010 205.783249,275.231781 204.185242,277.479980 203.929565,281.927460 201.788239,283.393677 202.715073,269.513580 203.546036,261.938171 204.888351,257.050812 206.997711,254.998108 209.426682,251.283707 209.171005,248.595657 207.541046,244.734634 206.262650,243.708313 205.687363,241.362366 204.600723,239.211929 202.715073,239.798416 201.276871,239.896149 200.030426,234.959930 197.697342,233.395966 194.916824,233.884705 192.743546,234.715546 191.976501,231.929764 192.264130,228.068741 190.698090,230.903412 191.145538,235.986282 191.912582,241.362366 192.104340,246.347473 190.154770,250.208496 187.406204,253.238663 182.548279,255.780090 177.338791,257.979401 173.695343,260.911804 171.745789,262.866760 169.956009,265.603668 166.696106,264.919464 162.924805,265.066071 158.290604,266.092438 153.464630,269.220306 146.944778,274.352051 145.091095,277.479980 141.671371,283.442566 138.954773,288.036682 135.918564,293.950378 135.119568,298.593384 135.503082,301.476929 136.334045,297.420410 138.091858,294.048126 140.361008,290.871338 142.310577,287.987793 143.365265,289.502869 141.959015,292.190948 138.283615,298.055786 135.087601,306.071045 132.946274,309.492188 130.900833,310.176422 129.686356,314.330688 130.069870,319.755646 128.919312,329.628113 129.494598,334.515503 130.677109,341.797638 131.603958,350.546021 131.540024,355.482269 130.964752,360.565125 128.280106,366.772064 129.047150,373.125641 129.654404,377.084412 131.476105,380.456665 132.818436,384.610931 "
style="fill:url(#radialGradient1904-972-786);stroke:#181818;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)" />
<polyline
id="polyline1464"
points="144.579727,355.237885 146.497345,357.241699 147.583984,362.324585 148.638672,368.384918 149.980988,372.539154 150.364502,377.035553 148.798477,377.279877 146.753021,373.467743 146.976746,368.433777 146.593216,362.959930 144.579727,355.237885 "
style="fill:url(#radialGradient1906-828-861);stroke:#181818;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)" />
<polyline
id="polyline1468"
points="150.108826,378.892731 148.830429,379.870209 149.309830,383.584595 150.172745,386.614777 152.633667,390.964508 152.505829,386.565887 153.336792,386.077148 153.017197,383.780090 150.108826,378.892731 "
style="fill:url(#radialGradient1908-502-115);stroke:#181818;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)" />
<polyline
id="polyline1472"
points="201.181000,353.820557 200.797470,356.459747 200.413956,361.053864 199.966507,365.990082 199.007706,368.238281 196.866379,363.204285 197.921066,357.681580 199.103592,354.895782 201.181000,353.820557 "
style="fill:url(#radialGradient1910-187-480);stroke:#181818;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)" />
<polyline
id="polyline1476"
points="204.632675,320.342133 203.993469,316.774353 202.906830,312.668976 206.230682,314.575043 208.883362,312.277985 209.842163,309.052338 208.915314,303.822876 208.563766,299.961853 209.874130,294.487976 212.430923,295.514343 213.261887,299.570862 213.581497,305.386810 213.837173,310.958405 212.111328,314.917175 211.951538,317.018738 212.335052,321.466217 210.800964,325.913727 208.691605,325.376099 206.454407,326.646820 205.016205,324.203125 204.632675,320.342133 "
style="fill:url(#radialGradient1912-38-980);stroke:#181818;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)" />
<polyline
id="polyline1480"
points="213.773254,334.955322 213.709335,340.820160 213.869125,343.263885 216.362015,346.636139 219.526062,350.594910 218.695099,344.632324 219.685867,341.406677 222.722061,339.060730 227.835663,334.662109 230.648163,335.786194 233.332809,333.147003 234.355515,326.011475 234.675125,319.218048 233.556534,312.522369 233.588486,306.071045 231.511078,300.646057 228.890350,297.420410 226.365509,296.980560 225.246902,294.830109 226.365509,293.461639 225.023193,290.235992 222.338547,287.401337 220.964264,289.698364 217.352783,290.675842 216.330063,294.292480 216.362015,299.375336 220.644653,297.469269 222.754028,297.958038 220.708588,301.623535 219.941544,306.852997 220.293106,310.714020 219.845657,317.654083 219.078629,323.909912 214.955765,329.237122 215.083618,333.000397 213.773254,334.955322 "
style="fill:url(#radialGradient1914-119-179);stroke:#181818;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)" />
<polyline
id="polyline1484"
points="232.533813,338.767487 230.200729,341.748779 229.401718,344.436798 229.721313,347.662476 233.460648,348.542206 237.040161,346.929382 237.231934,342.872864 235.378250,340.478088 233.620453,340.282562 232.533813,338.767487 "
style="fill:url(#radialGradient1916-825-422);stroke:#181818;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)" />
<polyline
id="polyline1488"
points="264.877380,375.813690 262.991730,379.919098 260.371002,382.167236 258.645172,385.148529 258.645172,389.693817 256.887360,391.062256 255.161514,388.911804 254.522308,386.956848 252.732559,385.197418 253.339798,391.697632 251.709839,392.332977 249.792236,387.738861 248.322067,389.840393 246.724060,393.017212 244.327072,395.412018 242.952774,399.664001 241.514587,403.329529 241.067139,407.337158 239.565018,407.190552 238.318573,407.777039 235.665894,409.096649 233.173004,407.679291 233.141052,401.570068 234.707092,399.712891 235.122574,395.705231 237.231934,393.652588 239.692856,394.434540 241.834183,392.039734 240.843414,387.152374 239.980499,385.099670 240.907349,382.265015 244.550781,379.332581 247.043671,372.685760 247.139542,368.384918 249.121078,365.110352 252.125320,361.151611 254.202728,353.967194 256.503845,350.399414 255.992477,346.684998 255.864655,342.335266 255.832672,339.744965 254.586243,339.353973 254.074875,342.139771 251.581985,340.722412 252.189240,343.654846 251.997467,347.760223 251.294357,352.647583 251.486115,357.632721 248.897354,354.993530 246.915833,355.335632 246.020950,351.670135 245.733307,346.489502 247.778748,340.233704 248.002472,336.763672 247.586990,329.774750 247.299347,324.545258 248.705597,319.315765 251.230438,321.319580 254.234680,326.451324 255.608963,324.154266 255.097595,321.417358 253.915070,321.612854 252.253159,317.702942 254.202728,316.774353 253.883118,313.548676 254.714081,310.469666 254.746033,303.969452 255.001724,293.999268 253.947052,293.070679 252.349030,292.777405 250.495346,290.382599 250.303589,287.938934 249.312836,284.077911 247.235428,279.679291 245.381744,278.261963 242.920822,273.912201 241.546539,269.122559 241.035172,265.408173 242.345535,263.502106 240.555771,258.761383 238.734055,257.979401 236.560776,253.336411 234.131805,249.573120 232.501846,251.185959 230.648163,249.768631 228.315079,245.272247 226.653152,244.343658 225.438675,246.494095 223.808701,245.174515 220.964264,239.896149 219.430176,240.775894 217.672379,242.193222 216.170258,241.069122 212.718582,239.945023 210.257645,239.114182 207.509079,237.647964 205.527557,234.422318 206.805954,234.471191 209.362778,234.520065 210.225693,233.004974 208.979248,230.072571 209.810211,226.993515 210.737045,224.109970 213.325806,224.794220 215.722824,225.967178 216.745544,227.873245 219.781738,227.531128 222.114822,224.549835 224.032425,226.553665 226.844925,229.241714 229.785248,226.700287 230.136795,223.425751 229.721313,220.933197 236.592728,229.290573 241.898102,236.768250 246.564270,244.490280 251.837677,254.704865 255.960541,264.332947 260.115326,276.258118 264.302094,291.995453 267.210449,308.514740 268.393005,320.537628 269.000244,333.538025 268.840424,345.169952 268.201202,356.557495 266.794983,367.358551 265.516571,374.933960 264.877380,375.813690 "
style="fill:url(#radialGradient1918-387-755);stroke:#181818;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)" />
<polyline
id="polyline1492"
points="244.774506,357.779327 243.304337,356.313110 242.345535,358.512421 241.131058,362.666687 239.916580,364.817108 238.062897,367.945038 237.615448,372.930145 238.414459,375.324951 239.373245,373.125641 239.852661,368.727020 240.683624,367.602905 241.067139,371.121826 241.290848,375.129456 241.834183,378.452850 243.336304,376.986664 243.528061,376.937775 243.719818,376.888916 243.911591,376.791168 244.071396,376.644531 244.390976,376.351288 244.678635,376.009186 244.934311,375.618195 245.126068,375.324951 245.221939,375.129456 245.285858,375.031708 245.253906,372.490265 244.486862,365.159241 244.199219,361.884705 244.774506,357.779327 "
style="fill:url(#radialGradient1920-264-381);stroke:#181818;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)" />
<polyline
id="polyline1496"
points="262.192749,389.449432 260.115326,391.160004 258.261658,394.287933 256.663635,394.532288 255.992477,392.968323 255.065643,395.802979 253.851151,400.885864 250.783005,404.209290 250.175766,401.276855 249.344803,399.810638 245.573502,402.889679 242.537292,406.213104 240.747543,406.995056 238.126801,409.878601 236.049423,409.976349 233.748291,411.002716 231.606964,415.010315 228.986237,420.826294 226.333542,423.123352 220.996231,428.059601 216.617691,433.680054 213.485611,439.349396 210.385483,446.582703 209.171005,453.278381 210.353516,458.605591 214.220703,458.654480 216.777496,458.752228 218.535294,460.560547 223.648911,456.504028 228.187241,452.252045 232.693619,447.511292 237.775253,441.402100 243.400223,433.386810 247.906586,425.811401 251.677872,418.529236 255.161514,410.611694 258.069885,403.134064 260.690613,394.923279 262.192749,389.449432 "
style="fill:url(#radialGradient20143-627-23);stroke:#181818;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 40 KiB

-602
View File
@@ -1,602 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
inkscape:export-ydpi="90"
inkscape:export-xdpi="90"
inkscape:export-filename="/home/bill/Dropbox/src/wsjtx-dev/icons/windows-icons/icon_1024x1024.png"
version="1.1"
width="1024"
sodipodi:version="0.32"
sodipodi:docname="wsjtx_globe_1024x1024.svg"
inkscape:version="0.48.4 r9939"
id="svg1432"
height="1024">
<sodipodi:namedview
bordercolor="#666666"
borderopacity="1.0"
id="base"
inkscape:current-layer="svg1432"
inkscape:cx="512"
inkscape:cy="512"
inkscape:guide-bbox="true"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-height="858"
inkscape:window-width="1114"
inkscape:window-x="72"
inkscape:window-y="31"
inkscape:zoom="0.69433594"
pagecolor="#ffffff"
showborder="true"
showguides="true"
showgrid="false"
inkscape:window-maximized="0"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:showpageshadow="false" />
<metadata
id="metadata3060">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:title />
<dc:description>Simple globe centered on North America</dc:description>
<dc:subject>
<rdf:Bag>
<rdf:li>earth globe northamerica</rdf:li>
</rdf:Bag>
</dc:subject>
<dc:publisher>
<cc:Agent
rdf:about="http://www.openclipart.org/">
<dc:title>Open Clip Art Library</dc:title>
</cc:Agent>
</dc:publisher>
<dc:creator>
<cc:Agent>
<dc:title>Dan Gerhrads</dc:title>
</cc:Agent>
</dc:creator>
<dc:rights>
<cc:Agent>
<dc:title>Dan Gerhrads</dc:title>
</cc:Agent>
</dc:rights>
<dc:date>May 1, 2005</dc:date>
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<cc:license
rdf:resource="http://web.resource.org/cc/PublicDomain" />
<dc:language>en</dc:language>
</cc:Work>
<cc:License
rdf:about="http://web.resource.org/cc/PublicDomain">
<cc:permits
rdf:resource="http://web.resource.org/cc/Reproduction" />
<cc:permits
rdf:resource="http://web.resource.org/cc/Distribution" />
<cc:permits
rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
</cc:License>
</rdf:RDF>
</metadata>
<defs
id="defs1759">
<linearGradient
id="linearGradient37658">
<stop
style="stop-color:#2f7aff;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop37660" />
<stop
style="stop-color:#0000b3;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop37662" />
</linearGradient>
<linearGradient
id="linearGradient20137">
<stop
style="stop-color:#00bf00;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop20139" />
<stop
style="stop-color:#007500;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop20141" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient20143"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient37658"
r="112.3373"
inkscape:collect="always"
id="radialGradient37664"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.806632,1.239722)"
fy="270.08731"
fx="221.61394"
cy="270.08731"
cx="221.61394" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1902"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1904"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1906"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1908"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1910"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1912"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1914"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1916"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1918"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient20137"
r="188.61865"
inkscape:collect="always"
id="radialGradient1920"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<radialGradient
xlink:href="#linearGradient37658-427"
r="112.3373"
inkscape:collect="always"
id="radialGradient37664-403"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.806632,1.239722)"
fy="270.08731"
fx="221.61394"
cy="270.08731"
cx="221.61394" />
<linearGradient
id="linearGradient37658-427">
<stop
style="stop-color:#488afe;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7178" />
<stop
style="stop-color:#0000cc;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7180" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-396"
r="188.61865"
inkscape:collect="always"
id="radialGradient1902-893"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-396">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7184" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7186" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-527"
r="188.61865"
inkscape:collect="always"
id="radialGradient1904-666"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-527">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7190" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7192" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-774"
r="188.61865"
inkscape:collect="always"
id="radialGradient1906-717"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-774">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7196" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7198" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-253"
r="188.61865"
inkscape:collect="always"
id="radialGradient1908-922"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-253">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7202" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7204" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-972"
r="188.61865"
inkscape:collect="always"
id="radialGradient1910-261"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-972">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7208" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7210" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-945"
r="188.61865"
inkscape:collect="always"
id="radialGradient1912-713"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-945">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7214" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7216" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-600"
r="188.61865"
inkscape:collect="always"
id="radialGradient1914-146"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-600">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7220" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7222" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-196"
r="188.61865"
inkscape:collect="always"
id="radialGradient1916-817"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-196">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7226" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7228" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-388"
r="188.61865"
inkscape:collect="always"
id="radialGradient1918-23"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-388">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7232" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7234" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-202"
r="188.61865"
inkscape:collect="always"
id="radialGradient1920-260"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-202">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7238" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7240" />
</linearGradient>
<radialGradient
xlink:href="#linearGradient20137-151"
r="188.61865"
inkscape:collect="always"
id="radialGradient20143-884"
gradientUnits="userSpaceOnUse"
gradientTransform="scale(0.893959,1.11862)"
fy="298.37747"
fx="205.17723"
cy="297.1124"
cx="202.06305" />
<linearGradient
id="linearGradient20137-151">
<stop
style="stop-color:#00d800;stop-opacity:1.0000000;"
offset="0.0000000"
id="stop7244" />
<stop
style="stop-color:#008e00;stop-opacity:1.0000000;"
offset="1.0000000"
id="stop7246" />
</linearGradient>
</defs>
<desc
id="desc1434">wmf2svg</desc>
<polyline
transform="matrix(2.2285926,-3.5745108,2.3232002,1.4484387,-677.00545,692.67468)"
style="fill:url(#radialGradient37664-403);fill-opacity:1;stroke:#0c0c0c;stroke-width:0.6875;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4"
points="103.191467,409.292114 100.730545,403.134064 98.525299,396.927094 96.543777,390.573547 94.785973,384.171082 93.219925,377.622009 91.909569,371.072968 90.790962,364.426147 89.928040,357.779327 89.256882,351.083649 88.777481,344.387970 88.521805,337.692261 88.489838,330.947693 88.681602,324.300873 89.033165,317.605194 89.640404,311.007263 90.407448,304.458221 91.398209,298.006897 92.580727,291.604431 93.986977,285.299744 95.553017,279.092804 97.342781,272.983582 99.324303,267.069916 101.465622,261.253937 103.830666,255.584595 106.387474,250.110733 109.104080,244.783508 112.012444,239.700668 115.112572,234.764420 118.404449,230.072571 121.856140,225.625061 125.499588,221.373062 129.302826,217.414291 133.265884,213.748779 137.260895,210.425354 141.351776,207.444077 145.506577,204.804901 149.725311,202.556717 153.975983,200.601776 158.258652,198.988937 162.573242,197.718231 166.919815,196.789627 171.266373,196.154266 175.644897,195.909912 179.991470,195.909912 184.338043,196.300888 188.652649,196.985123 192.967270,197.962585 197.217941,199.233307 201.468628,200.846130 205.623444,202.801071 209.746277,205.000397 213.805222,207.541809 217.768265,210.376495 221.667389,213.504395 225.470627,216.876678 229.177994,220.591064 232.789490,224.598709 236.273132,228.850708 239.628937,233.444839 242.856903,238.283325 245.957031,243.366180 248.929321,248.791153 251.709839,254.411621 254.362534,260.374207 256.791504,266.483398 258.996704,272.739227 261.010223,279.043915 262.768005,285.495270 264.302094,291.995453 265.644409,298.593384 266.731079,305.191315 267.625946,311.838104 268.297119,318.533813 268.744537,325.278351 269.000244,331.974030 269.032166,338.669739 268.872375,345.365448 268.488861,352.012238 267.913574,358.610168 267.114594,365.159241 266.123840,371.659424 264.941284,378.061890 263.567017,384.366577 261.969025,390.573547 260.211212,396.633850 258.229706,402.596436 256.056396,408.412384 253.723328,414.032837 251.166504,419.555603 248.449905,424.833923 245.509598,429.965668 242.409470,434.853027 239.149536,439.593750 235.697845,444.041260 232.054413,448.244385 228.219193,452.252045 224.288116,455.917542 220.261139,459.240967 216.170258,462.173401 212.015442,464.812561 207.828674,467.109589 203.577988,469.064545 199.263397,470.628510 194.948776,471.899200 190.634186,472.876678 186.255646,473.463196 181.909073,473.756439 177.562500,473.707550 173.215942,473.365448 168.869370,472.681213 164.586731,471.703735 160.304077,470.384155 156.085358,468.771332 151.898590,466.865265 147.807709,464.617065 143.748779,462.124512 139.753769,459.289856 135.854645,456.161926 132.051392,452.740753 128.344025,449.026367 124.764503,445.067596 121.280853,440.766724 117.893089,436.221466 114.665123,431.382996 111.565002,426.251282 108.624680,420.875153 105.812187,415.205811 103.191467,409.292114 "
id="polyline1560" />
<g
transform="matrix(4.1610916,0,0,4.1610916,-268.34786,-716.6628)"
style="fill:url(#radialGradient1902-893);fill-opacity:1;fill-rule:evenodd"
inkscape:label="Continents"
id="Continents">
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1904-666);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="132.818436,384.610931 131.827682,384.953064 128.184235,388.227600 126.074867,388.667450 123.422180,385.441803 120.417938,385.832794 117.126053,389.107300 116.838409,393.896912 116.902328,400.641479 115.655891,409.292114 114.409447,415.352448 115.432167,418.235992 113.578484,420.386444 111.053642,420.924042 109.903076,422.732361 109.871117,423.172241 116.295090,433.728943 123.262383,443.161530 130.836914,451.421204 140.904327,460.071808 151.195465,466.425385 153.528549,464.470428 157.683365,463.248596 162.509323,463.688446 165.321808,463.835083 165.577484,459.387573 165.066132,457.628113 162.381485,454.793457 158.162750,448.244385 155.094604,442.526184 156.884354,433.680054 153.496597,425.664764 151.738800,419.017975 150.811951,410.220703 147.743790,405.479980 144.579727,397.953430 142.438416,395.851868 141.447662,389.058441 138.858887,386.419281 135.886597,384.855316 133.968994,384.219940 133.201950,380.994293 131.667877,376.351288 131.923553,370.926331 132.850403,369.069122 135.407196,368.140533 137.292847,366.625458 137.452652,362.911041 136.557755,358.316925 134.736038,353.967194 135.886597,352.158844 138.123810,351.914490 141.255890,349.812927 141.223938,346.245178 139.050644,343.557098 136.973236,343.654846 135.471115,341.602142 134.863876,337.643402 135.407196,330.947693 138.219681,327.575439 141.191971,325.571625 145.890106,326.158081 148.510818,330.361237 149.469635,333.635773 149.565506,336.421570 150.588226,338.327637 152.314072,339.891571 153.656403,344.045837 154.135788,348.737701 152.665634,353.771698 151.578995,357.730469 152.985229,359.587646 155.094604,356.557495 156.468872,353.234070 159.153519,351.572388 161.870132,351.474609 165.865143,353.967194 168.517807,355.237885 171.458130,352.696472 175.389221,351.425751 178.457397,351.621246 179.416199,352.940857 181.301834,352.403229 184.497833,352.452087 185.968002,353.918335 186.095840,356.704102 187.949539,357.143951 190.602203,359.392151 192.551788,361.004974 193.670380,358.610168 191.912582,355.482269 191.561020,353.576202 193.095093,351.767883 192.583740,349.030945 190.442413,347.906860 188.620697,346.147400 189.259888,345.169952 191.976501,346.049652 195.044662,348.835449 196.259140,351.230255 198.624191,353.771698 200.733551,353.282928 202.363510,350.057312 203.609955,343.996979 204.153275,334.710999 202.906830,330.752228 202.331558,328.406281 203.258408,324.594147 202.459396,316.676605 201.053146,314.819397 198.496353,317.311981 195.300339,320.781982 194.788971,323.567780 192.871368,323.518921 189.739288,325.669373 186.894852,327.477692 187.342285,323.470032 188.524796,319.755646 190.666138,317.311981 190.314575,313.450958 189.132050,308.123718 190.090851,304.898071 193.734299,301.965637 197.601471,302.063385 202.107834,303.773987 205.559525,305.875519 207.796722,306.217651 208.435928,302.698761 206.678116,300.548309 206.038925,296.980560 207.796722,294.585724 209.490601,292.581909 208.627686,290.529205 205.783249,292.386414 203.961517,291.555573 204.057388,289.258514 207.189484,286.130615 208.787491,282.953796 208.627686,279.532684 209.874130,275.427277 208.276123,272.152740 206.198730,271.273010 205.783249,275.231781 204.185242,277.479980 203.929565,281.927460 201.788239,283.393677 202.715073,269.513580 203.546036,261.938171 204.888351,257.050812 206.997711,254.998108 209.426682,251.283707 209.171005,248.595657 207.541046,244.734634 206.262650,243.708313 205.687363,241.362366 204.600723,239.211929 202.715073,239.798416 201.276871,239.896149 200.030426,234.959930 197.697342,233.395966 194.916824,233.884705 192.743546,234.715546 191.976501,231.929764 192.264130,228.068741 190.698090,230.903412 191.145538,235.986282 191.912582,241.362366 192.104340,246.347473 190.154770,250.208496 187.406204,253.238663 182.548279,255.780090 177.338791,257.979401 173.695343,260.911804 171.745789,262.866760 169.956009,265.603668 166.696106,264.919464 162.924805,265.066071 158.290604,266.092438 153.464630,269.220306 146.944778,274.352051 145.091095,277.479980 141.671371,283.442566 138.954773,288.036682 135.918564,293.950378 135.119568,298.593384 135.503082,301.476929 136.334045,297.420410 138.091858,294.048126 140.361008,290.871338 142.310577,287.987793 143.365265,289.502869 141.959015,292.190948 138.283615,298.055786 135.087601,306.071045 132.946274,309.492188 130.900833,310.176422 129.686356,314.330688 130.069870,319.755646 128.919312,329.628113 129.494598,334.515503 130.677109,341.797638 131.603958,350.546021 131.540024,355.482269 130.964752,360.565125 128.280106,366.772064 129.047150,373.125641 129.654404,377.084412 131.476105,380.456665 132.818436,384.610931 "
id="polyline1460" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1906-717);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="144.579727,355.237885 146.497345,357.241699 147.583984,362.324585 148.638672,368.384918 149.980988,372.539154 150.364502,377.035553 148.798477,377.279877 146.753021,373.467743 146.976746,368.433777 146.593216,362.959930 144.579727,355.237885 "
id="polyline1464" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1908-922);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="150.108826,378.892731 148.830429,379.870209 149.309830,383.584595 150.172745,386.614777 152.633667,390.964508 152.505829,386.565887 153.336792,386.077148 153.017197,383.780090 150.108826,378.892731 "
id="polyline1468" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1910-261);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="201.181000,353.820557 200.797470,356.459747 200.413956,361.053864 199.966507,365.990082 199.007706,368.238281 196.866379,363.204285 197.921066,357.681580 199.103592,354.895782 201.181000,353.820557 "
id="polyline1472" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1912-713);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="204.632675,320.342133 203.993469,316.774353 202.906830,312.668976 206.230682,314.575043 208.883362,312.277985 209.842163,309.052338 208.915314,303.822876 208.563766,299.961853 209.874130,294.487976 212.430923,295.514343 213.261887,299.570862 213.581497,305.386810 213.837173,310.958405 212.111328,314.917175 211.951538,317.018738 212.335052,321.466217 210.800964,325.913727 208.691605,325.376099 206.454407,326.646820 205.016205,324.203125 204.632675,320.342133 "
id="polyline1476" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1914-146);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="213.773254,334.955322 213.709335,340.820160 213.869125,343.263885 216.362015,346.636139 219.526062,350.594910 218.695099,344.632324 219.685867,341.406677 222.722061,339.060730 227.835663,334.662109 230.648163,335.786194 233.332809,333.147003 234.355515,326.011475 234.675125,319.218048 233.556534,312.522369 233.588486,306.071045 231.511078,300.646057 228.890350,297.420410 226.365509,296.980560 225.246902,294.830109 226.365509,293.461639 225.023193,290.235992 222.338547,287.401337 220.964264,289.698364 217.352783,290.675842 216.330063,294.292480 216.362015,299.375336 220.644653,297.469269 222.754028,297.958038 220.708588,301.623535 219.941544,306.852997 220.293106,310.714020 219.845657,317.654083 219.078629,323.909912 214.955765,329.237122 215.083618,333.000397 213.773254,334.955322 "
id="polyline1480" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1916-817);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="232.533813,338.767487 230.200729,341.748779 229.401718,344.436798 229.721313,347.662476 233.460648,348.542206 237.040161,346.929382 237.231934,342.872864 235.378250,340.478088 233.620453,340.282562 232.533813,338.767487 "
id="polyline1484" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1918-23);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="264.877380,375.813690 262.991730,379.919098 260.371002,382.167236 258.645172,385.148529 258.645172,389.693817 256.887360,391.062256 255.161514,388.911804 254.522308,386.956848 252.732559,385.197418 253.339798,391.697632 251.709839,392.332977 249.792236,387.738861 248.322067,389.840393 246.724060,393.017212 244.327072,395.412018 242.952774,399.664001 241.514587,403.329529 241.067139,407.337158 239.565018,407.190552 238.318573,407.777039 235.665894,409.096649 233.173004,407.679291 233.141052,401.570068 234.707092,399.712891 235.122574,395.705231 237.231934,393.652588 239.692856,394.434540 241.834183,392.039734 240.843414,387.152374 239.980499,385.099670 240.907349,382.265015 244.550781,379.332581 247.043671,372.685760 247.139542,368.384918 249.121078,365.110352 252.125320,361.151611 254.202728,353.967194 256.503845,350.399414 255.992477,346.684998 255.864655,342.335266 255.832672,339.744965 254.586243,339.353973 254.074875,342.139771 251.581985,340.722412 252.189240,343.654846 251.997467,347.760223 251.294357,352.647583 251.486115,357.632721 248.897354,354.993530 246.915833,355.335632 246.020950,351.670135 245.733307,346.489502 247.778748,340.233704 248.002472,336.763672 247.586990,329.774750 247.299347,324.545258 248.705597,319.315765 251.230438,321.319580 254.234680,326.451324 255.608963,324.154266 255.097595,321.417358 253.915070,321.612854 252.253159,317.702942 254.202728,316.774353 253.883118,313.548676 254.714081,310.469666 254.746033,303.969452 255.001724,293.999268 253.947052,293.070679 252.349030,292.777405 250.495346,290.382599 250.303589,287.938934 249.312836,284.077911 247.235428,279.679291 245.381744,278.261963 242.920822,273.912201 241.546539,269.122559 241.035172,265.408173 242.345535,263.502106 240.555771,258.761383 238.734055,257.979401 236.560776,253.336411 234.131805,249.573120 232.501846,251.185959 230.648163,249.768631 228.315079,245.272247 226.653152,244.343658 225.438675,246.494095 223.808701,245.174515 220.964264,239.896149 219.430176,240.775894 217.672379,242.193222 216.170258,241.069122 212.718582,239.945023 210.257645,239.114182 207.509079,237.647964 205.527557,234.422318 206.805954,234.471191 209.362778,234.520065 210.225693,233.004974 208.979248,230.072571 209.810211,226.993515 210.737045,224.109970 213.325806,224.794220 215.722824,225.967178 216.745544,227.873245 219.781738,227.531128 222.114822,224.549835 224.032425,226.553665 226.844925,229.241714 229.785248,226.700287 230.136795,223.425751 229.721313,220.933197 236.592728,229.290573 241.898102,236.768250 246.564270,244.490280 251.837677,254.704865 255.960541,264.332947 260.115326,276.258118 264.302094,291.995453 267.210449,308.514740 268.393005,320.537628 269.000244,333.538025 268.840424,345.169952 268.201202,356.557495 266.794983,367.358551 265.516571,374.933960 264.877380,375.813690 "
id="polyline1488" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient1920-260);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="244.774506,357.779327 243.304337,356.313110 242.345535,358.512421 241.131058,362.666687 239.916580,364.817108 238.062897,367.945038 237.615448,372.930145 238.414459,375.324951 239.373245,373.125641 239.852661,368.727020 240.683624,367.602905 241.067139,371.121826 241.290848,375.129456 241.834183,378.452850 243.336304,376.986664 243.528061,376.937775 243.719818,376.888916 243.911591,376.791168 244.071396,376.644531 244.390976,376.351288 244.678635,376.009186 244.934311,375.618195 245.126068,375.324951 245.221939,375.129456 245.285858,375.031708 245.253906,372.490265 244.486862,365.159241 244.199219,361.884705 244.774506,357.779327 "
id="polyline1492" />
<polyline
transform="matrix(0.535579,-0.859032,0.558315,0.348091,-98.20917,338.6942)"
style="fill:url(#radialGradient20143-884);stroke:#0c0c0c;stroke-width:0.444585;stroke-linecap:round;stroke-linejoin:round"
points="262.192749,389.449432 260.115326,391.160004 258.261658,394.287933 256.663635,394.532288 255.992477,392.968323 255.065643,395.802979 253.851151,400.885864 250.783005,404.209290 250.175766,401.276855 249.344803,399.810638 245.573502,402.889679 242.537292,406.213104 240.747543,406.995056 238.126801,409.878601 236.049423,409.976349 233.748291,411.002716 231.606964,415.010315 228.986237,420.826294 226.333542,423.123352 220.996231,428.059601 216.617691,433.680054 213.485611,439.349396 210.385483,446.582703 209.171005,453.278381 210.353516,458.605591 214.220703,458.654480 216.777496,458.752228 218.535294,460.560547 223.648911,456.504028 228.187241,452.252045 232.693619,447.511292 237.775253,441.402100 243.400223,433.386810 247.906586,425.811401 251.677872,418.529236 255.161514,410.611694 258.069885,403.134064 260.690613,394.923279 262.192749,389.449432 "
id="polyline1496" />
</g>
<text
transform="matrix(0.98267844,-0.18531886,0.18531886,0.98267844,0,0)"
sodipodi:linespacing="125%"
id="text3096"
y="456.47293"
x="394.15689"
style="font-size:187.56237793000002512px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ff8119;fill-opacity:0.77168947;stroke:none;font-family:Purisa;-inkscape-font-specification:Purisa Bold"
xml:space="preserve"><tspan
dy="-109.78781"
dx="0 -9.8032694 -11.763925 -17.645885"
id="tspan3102"
y="456.47293"
x="394.15692"
sodipodi:role="line">WSJT-X</tspan><tspan
dx="0 -17.645885 -23.527849 -13.724579 29.30662 29.30662 -17.645885 -23.527849"
id="tspan3874"
y="690.92584"
x="394.15689"
sodipodi:role="line">JT65&amp;JT9</tspan><tspan
dy="91.489815"
dx="0 0 0 0 -17.645885 -5.8819623 -17.645885"
id="tspan3100"
y="925.37885"
x="394.15689"
sodipodi:role="line">by K1JT</tspan></text>
</svg>

Before

Width:  |  Height:  |  Size: 33 KiB

+5 -3
View File
@@ -108,7 +108,8 @@ bool DecodedText::tryUnpackBeacon(){
bool isAlt = false;
quint8 type = Varicode::FrameUnknown;
QStringList parts = Varicode::unpackBeaconMessage(m, &type, &isAlt);
quint8 bits3 = 0;
QStringList parts = Varicode::unpackBeaconMessage(m, &type, &isAlt, &bits3);
if(parts.isEmpty() || parts.length() < 2){
return false;
@@ -130,7 +131,7 @@ bool DecodedText::tryUnpackBeacon(){
cmp.append(parts.at(1));
}
compound_ = cmp.join("/");
message_ = QString("%1: %2 %3 ").arg(compound_).arg(isAlt ? "CQCQCQ" : "BEACON").arg(extra_);
message_ = QString("%1: %2 %3 ").arg(compound_).arg(isAlt ? Varicode::cqString(bits3) : "BEACON").arg(extra_);
frameType_ = type;
return true;
}
@@ -143,7 +144,8 @@ bool DecodedText::tryUnpackCompound(){
}
quint8 type = Varicode::FrameUnknown;
auto parts = Varicode::unpackCompoundMessage(m, &type);
quint8 bits3 = 0;
auto parts = Varicode::unpackCompoundMessage(m, &type, &bits3);
if(parts.isEmpty() || parts.length() < 2){
return false;
}
+1 -1
View File
@@ -3,7 +3,7 @@ Version=1.0
Name=ft8call
Comment=Amateur Radio Weak Signal Operating
Exec=ft8call
Icon=wsjtx_icon
Icon=ft8call_icon
Terminal=false
X-MultipleArgs=false
Type=Application
Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 571 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 571 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 KiB

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 246 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 282 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 538 KiB

+29
View File
@@ -0,0 +1,29 @@
#include "keyeater.h"
bool EscapeKeyPressEater::eventFilter(QObject *obj, QEvent *event){
if (event->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
if(keyEvent->key() == Qt::Key_Escape){
return true;
}
}
// standard event processing
return QObject::eventFilter(obj, event);
}
bool EnterKeyPressEater::eventFilter(QObject *obj, QEvent *event){
if (event->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
if(keyEvent->key() == Qt::Key_Enter || keyEvent->key() == Qt::Key_Return){
bool processed = false;
emit this->enterKeyPressed(obj, keyEvent, &processed);
if(processed){
return true;
}
}
}
// standard event processing
return QObject::eventFilter(obj, event);
}
+33
View File
@@ -0,0 +1,33 @@
#ifndef KEYEATER_H
#define KEYEATER_H
#include <QObject>
#include <QKeyEvent>
class EscapeKeyPressEater : public QObject
{
Q_OBJECT
public:
EscapeKeyPressEater(){}
virtual ~EscapeKeyPressEater(){}
protected:
bool eventFilter(QObject *obj, QEvent *event);
};
class EnterKeyPressEater : public QObject
{
Q_OBJECT
public:
EnterKeyPressEater(){}
virtual ~EnterKeyPressEater(){}
protected:
bool eventFilter(QObject *obj, QEvent *event);
public:
Q_SIGNAL void enterKeyPressed(QObject *obj, QKeyEvent *evt, bool *pProcessed);
};
#endif // KEYEATER_H
+1 -1
View File
@@ -16,7 +16,7 @@ subroutine chkcrc12a(decoded,nbadcrc)
i1Dec8BitBytes(10)=iand(i1Dec8BitBytes(10),128+64+32)
i1Dec8BitBytes(11)=0
icrc12=crc12(c_loc(i1Dec8BitBytes),11) !CRC12 computed from 75 msg bits
icrc12=xor(icrc12, 42)
icrc12=xor(icrc12, 41)
nbadcrc=1
if(ncrc12.eq.icrc12) nbadcrc=0
+1 -1
View File
@@ -22,7 +22,7 @@ subroutine extractmessage174(decoded,msgreceived,ncrcflag)
i1Dec8BitBytes(10)=iand(i1Dec8BitBytes(10),128+64+32)
i1Dec8BitBytes(11)=0
icrc12=crc12(c_loc(i1Dec8BitBytes),11) !CRC12 computed from 75 msg bits
icrc12=xor(icrc12, 42)
icrc12=xor(icrc12, 41)
if(ncrc12.eq.icrc12 .or. sum(decoded(57:87)).eq.0) then !### Kludge ###
! CRC12 checks out --- unpack 72-bit message
+1 -1
View File
@@ -73,7 +73,7 @@ subroutine foxgen()
read(cb88,1003) i1Msg8BitBytes(1:11)
1003 format(11b8)
icrc12=crc12(c_loc(i1Msg8BitBytes),11)
icrc12=xor(icrc12, 42)
icrc12=xor(icrc12, 41)
write(cbits,1001) msgbits(1:56),icrc10,nrpt,i3b,icrc12
read(cbits,1002) msgbits
+1 -1
View File
@@ -38,7 +38,7 @@ subroutine genft8(msg,mygrid,bcontest,i3bit,msgsent,msgbits,itone)
i1Msg8BitBytes(10)=iand(i1Msg8BitBytes(10),128+64+32)
i1Msg8BitBytes(11)=0
icrc12=crc12(c_loc(i1Msg8BitBytes),11)
icrc12=xor(icrc12, 42)
icrc12=xor(icrc12, 41)
! For reference, here's how to check the CRC
! i1Msg8BitBytes(10)=icrc12/256
+1 -1
View File
@@ -91,7 +91,7 @@ allocate ( rxdata(N), llr(N) )
i1Msg8BitBytes(10:11)=0
checksum = crc12 (c_loc (i1Msg8BitBytes), 11)
checksum = xor(checksum, 42)
checksum = xor(checksum, 41)
! For reference, the next 3 lines show how to check the CRC
i1Msg8BitBytes(10)=checksum/256
i1Msg8BitBytes(11)=iand (checksum,255)
+1012 -420
View File
File diff suppressed because it is too large Load Diff
+13 -42
View File
@@ -45,6 +45,7 @@
#include "varicode.h"
#include "MessageClient.hpp"
#include "APRSISClient.h"
#include "keyeater.h"
#define NUM_JT4_SYMBOLS 206 //(72+31)*2, embedded sync
#define NUM_JT65_SYMBOLS 126 //63 data + 63 sync
@@ -125,6 +126,7 @@ public slots:
void readFromStdout();
void p1ReadFromStdout();
void setXIT(int n, Frequency base = 0u);
void qsy(int hzDelta);
void setFreqOffsetForRestore(int freq, bool shouldRestore);
bool tryRestoreFreqOffset();
void setFreq4(int rxFreq, int txFreq);
@@ -140,11 +142,13 @@ public slots:
void writeNoticeTextToUI(QDateTime date, QString text);
int writeMessageTextToUI(QDateTime date, QString text, int freq, bool bold, int block=-1);
bool isMessageQueuedForTransmit();
void prependMessageText(QString text);
void addMessageText(QString text, bool clear=false, bool selectFirstPlaceholder=false);
void enqueueMessage(int priority, QString message, int freq, Callback c);
void resetMessage();
void resetMessageUI();
void restoreMessage();
void initializeDummyData();
bool ensureCallsignSet(bool alert=true);
void createMessage(QString const& text);
void createMessageTransmitQueue(QString const& text);
@@ -168,8 +172,10 @@ private slots:
void on_actionShow_Band_Activity_triggered(bool checked);
void on_actionShow_Call_Activity_triggered(bool checked);
void on_actionShow_Waterfall_triggered(bool checked);
void on_actionShow_Waterfall_Controls_triggered(bool checked);
void on_actionReset_Window_Sizes_triggered();
void on_actionSettings_triggered();
void openSettings(int tab=0);
void prepareSpotting();
void on_spotButton_clicked(bool checked);
void on_monitorButton_clicked (bool);
@@ -266,8 +272,12 @@ private slots:
void buildBandActivitySortByMenu(QMenu * menu);
void buildCallActivitySortByMenu(QMenu * menu);
void buildQueryMenu(QMenu *, QString callsign);
void buildRelayMenu(QMenu *menu);
QAction* buildRelayAction(QString call);
void buildEditMenu(QMenu *, QTextEdit *);
void on_queryButton_pressed();
void on_macrosMacroButton_pressed();
void on_deselectButton_pressed();
void on_tableWidgetRXAll_cellClicked(int row, int col);
void on_tableWidgetRXAll_cellDoubleClicked(int row, int col);
void on_tableWidgetRXAll_selectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
@@ -701,8 +711,8 @@ private:
};
struct MessageBuffer {
QQueue<CallDetail> compound;
CommandDetail cmd;
QQueue<CallDetail> compound;
QList<ActivityDetail> msgs;
};
@@ -858,6 +868,7 @@ private:
bool isMyCallIncluded(QString const &text);
bool isAllCallIncluded(QString const &text);
QString callsignSelected();
void clearCallsignSelected();
bool isRecentOffset(int offset);
void markOffsetRecent(int offset);
bool isDirectedOffset(int offset, bool *pIsAllCall);
@@ -867,6 +878,7 @@ private:
void processCompoundActivity();
void processBufferedActivity();
void processCommandActivity();
void processAlertReplyForCommand(CommandDetail d, QString from, QString cmd);
void processSpots();
void processTxQueue();
void displayActivity(bool force=false);
@@ -921,47 +933,6 @@ private:
void writeFoxQSO(QString msg);
};
class EscapeKeyPressEater : public QObject
{
Q_OBJECT
protected:
bool eventFilter(QObject *obj, QEvent *event){
if (event->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
if(keyEvent->key() == Qt::Key_Escape){
return true;
}
}
// standard event processing
return QObject::eventFilter(obj, event);
}
};
class EnterKeyPressEater : public QObject
{
Q_OBJECT
protected:
bool eventFilter(QObject *obj, QEvent *event){
if (event->type() == QEvent::KeyPress) {
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
if(keyEvent->key() == Qt::Key_Enter || keyEvent->key() == Qt::Key_Return){
bool processed = false;
emit this->enterKeyPressed(obj, keyEvent, &processed);
if(processed){
return true;
}
}
}
// standard event processing
return QObject::eventFilter(obj, event);
}
public:
Q_SIGNAL void enterKeyPressed(QObject *obj, QKeyEvent *evt, bool *pProcessed);
};
extern int killbyname(const char* progName);
extern void getDev(int* numDevices,char hostAPI_DeviceName[][50],
int minChan[], int maxChan[],
+138 -114
View File
@@ -139,7 +139,10 @@
<bool>false</bool>
</property>
<property name="styleSheet">
<string notr="true">color:white; background-color:rgb(0,0,0);</string>
<string notr="true">QFrame {
color:white;
background-color:rgb(0,0,0);
}</string>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
@@ -191,8 +194,7 @@
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Select operating band or enter frequency in MHz or enter kHz increment followed by k.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="styleSheet">
<string notr="true">background-color:white;
color:black;</string>
<string notr="true"/>
</property>
<property name="editable">
<bool>true</bool>
@@ -279,8 +281,7 @@ QPushButton[oob=&quot;true&quot;] {
<item>
<widget class="QFrame" name="frame_6">
<property name="styleSheet">
<string notr="true">background-color : black;
o</string>
<string notr="true">QFrame, QLabel { background-color : black; }</string>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
@@ -427,7 +428,10 @@ color : white;
</sizepolicy>
</property>
<property name="styleSheet">
<string notr="true">color:white; background-color:rgb(0,0,0);</string>
<string notr="true">QFrame {
color:white;
background-color:rgb(0,0,0);
}</string>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
@@ -1069,8 +1073,8 @@ background-color: #00ff00;
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
<italic>true</italic>
<pointsize>14</pointsize>
<italic>false</italic>
</font>
</property>
<property name="autoFillBackground">
@@ -1098,7 +1102,7 @@ background-color: #00ff00;
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
<pointsize>14</pointsize>
</font>
</property>
<property name="styleSheet">
@@ -1118,7 +1122,7 @@ QTextEdit[transmitting=&quot;true&quot;] {
<bool>false</bool>
</property>
<property name="placeholderText">
<string>Type your outgoing messages / commands here.</string>
<string>Type your outgoing messages here.</string>
</property>
</widget>
</widget>
@@ -1238,6 +1242,22 @@ QTextEdit[transmitting=&quot;true&quot;] {
<number>0</number>
</property>
<item row="1" column="10">
<widget class="QPushButton" name="queryButton">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Send a directed message to another station&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Directed</string>
</property>
</widget>
</item>
<item row="1" column="12">
<spacer name="horizontalSpacer_5">
<property name="orientation">
<enum>Qt::Horizontal</enum>
@@ -1253,93 +1273,7 @@ QTextEdit[transmitting=&quot;true&quot;] {
</property>
</spacer>
</item>
<item row="1" column="4">
<widget class="QPushButton" name="qthMacroButton">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="visible">
<bool>false</bool>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Send your station location message&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>QTH</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="cqMacroButton">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Send a CQ message&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>CQ</string>
</property>
<property name="flat">
<bool>false</bool>
</property>
</widget>
</item>
<item row="1" column="12">
<widget class="QPushButton" name="stopTxButton">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Stop transmitting&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Halt</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QPushButton" name="replyMacroButton">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Reply to a CQ&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Reply</string>
</property>
</widget>
</item>
<item row="1" column="8">
<widget class="QPushButton" name="macrosMacroButton">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Send a macro&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Macros</string>
</property>
</widget>
</item>
<item row="1" column="11">
<item row="1" column="13">
<widget class="QPushButton" name="startTxButton">
<property name="enabled">
<bool>false</bool>
@@ -1369,8 +1303,27 @@ background:yellow;
</property>
</widget>
</item>
<item row="1" column="9">
<widget class="QPushButton" name="queryButton">
<item row="1" column="4">
<widget class="QPushButton" name="qthMacroButton">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="visible">
<bool>false</bool>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Send your station location message&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>QTH</string>
</property>
</widget>
</item>
<item row="1" column="14">
<widget class="QPushButton" name="stopTxButton">
<property name="minimumSize">
<size>
<width>0</width>
@@ -1378,10 +1331,74 @@ background:yellow;
</size>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Send a directed message to another station&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Stop transmitting&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Directed</string>
<string>Halt</string>
</property>
</widget>
</item>
<item row="1" column="8">
<widget class="QPushButton" name="macrosMacroButton">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Send a macro&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Macros</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QPushButton" name="replyMacroButton">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Reply to a CQ&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Reply</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="cqMacroButton">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Send a CQ message&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>CQ</string>
</property>
<property name="flat">
<bool>false</bool>
</property>
</widget>
</item>
<item row="1" column="11">
<widget class="QPushButton" name="deselectButton">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="text">
<string>Deselect</string>
</property>
</widget>
</item>
@@ -1477,6 +1494,10 @@ background:yellow;
<height>0</height>
</size>
</property>
<property name="styleSheet">
<string notr="true">QFrame { background-color:black; }
</string>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
@@ -1580,7 +1601,7 @@ background-color: #00ff00;
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;30dB recommended when only noise present&lt;br/&gt;Green when good&lt;br/&gt;Red when clipping may occur&lt;br/&gt;Yellow when too low&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="styleSheet">
<string notr="true">background-color:black;</string>
<string notr="true"/>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
@@ -4364,6 +4385,7 @@ list. The list can be maintained in Settings (F2).</string>
<addaction name="actionShow_Band_Activity"/>
<addaction name="actionShow_Call_Activity"/>
<addaction name="actionShow_Waterfall"/>
<addaction name="actionShow_Waterfall_Controls"/>
<addaction name="separator"/>
<addaction name="actionReset_Window_Sizes"/>
</widget>
@@ -4399,14 +4421,11 @@ list. The list can be maintained in Settings (F2).</string>
</action>
<action name="actionAbout">
<property name="enabled">
<bool>false</bool>
<bool>true</bool>
</property>
<property name="text">
<string>About FT8Call</string>
</property>
<property name="shortcut">
<string>Ctrl+F1</string>
</property>
</action>
<action name="actionWide_Waterfall">
<property name="text">
@@ -4451,10 +4470,10 @@ list. The list can be maintained in Settings (F2).</string>
</action>
<action name="actionDelete_all_wav_files_in_SaveDir">
<property name="enabled">
<bool>false</bool>
<bool>true</bool>
</property>
<property name="text">
<string>Delete all *.wav &amp;&amp; *.c2 files in SaveDir</string>
<string>Delete all *.wav files in SaveDir</string>
</property>
</action>
<action name="actionQuickDecode">
@@ -4481,9 +4500,6 @@ list. The list can be maintained in Settings (F2).</string>
<property name="text">
<string>None</string>
</property>
<property name="visible">
<bool>false</bool>
</property>
</action>
<action name="actionSave_all">
<property name="checkable">
@@ -4978,9 +4994,6 @@ list. The list can be maintained in Settings (F2).</string>
<property name="text">
<string>Copyright notice</string>
</property>
<property name="shortcut">
<string>Shift+F1</string>
</property>
</action>
<action name="actionFox_Log">
<property name="text">
@@ -5066,6 +5079,17 @@ list. The list can be maintained in Settings (F2).</string>
<string>Sort Call Activity...</string>
</property>
</action>
<action name="actionShow_Waterfall_Controls">
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="text">
<string>Show Waterfall Controls</string>
</property>
</action>
</widget>
<layoutdefault spacing="6" margin="11"/>
<customwidgets>
+66
View File
@@ -0,0 +1,66 @@
#include "messagereplydialog.h"
#include "ui_messagereplydialog.h"
#include "varicode.h"
#include <QSet>
MessageReplyDialog::MessageReplyDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::MessageReplyDialog)
{
ui->setupUi(this);
auto enterFilter = new EnterKeyPressEater();
connect(enterFilter, &EnterKeyPressEater::enterKeyPressed, this, [this](QObject *, QKeyEvent *, bool *pProcessed){
if(QApplication::keyboardModifiers() & Qt::ShiftModifier){
if(pProcessed) *pProcessed = false;
return;
}
if(pProcessed) *pProcessed = true;
this->accept();
});
ui->textEdit->installEventFilter(enterFilter);
}
MessageReplyDialog::~MessageReplyDialog()
{
delete ui;
}
void MessageReplyDialog::setLabel(QString value){
ui->label->setText(value);
}
void MessageReplyDialog::setTextValue(QString text){
ui->textEdit->setPlainText(text);
}
QString MessageReplyDialog::textValue() const {
return ui->textEdit->toPlainText();
}
void MessageReplyDialog::on_textEdit_textChanged(){
auto text = ui->textEdit->toPlainText();
QString x;
QString::const_iterator i;
QSet<QString> validChars = Varicode::huffValidChars();
for(i = text.constBegin(); i != text.constEnd(); i++){
auto ch = (*i).toUpper();
if(validChars.contains(ch)){
x += ch;
}
}
if(x != text){
int pos = ui->textEdit->textCursor().position();
int maxpos = x.size();
ui->textEdit->setPlainText(x);
QTextCursor c = ui->textEdit->textCursor();
c.setPosition(pos < maxpos ? pos : maxpos, QTextCursor::MoveAnchor);
ui->textEdit->setTextCursor(c);
}
}
+35
View File
@@ -0,0 +1,35 @@
#ifndef MESSAGEREPLYDIALOG_H
#define MESSAGEREPLYDIALOG_H
#include <QDialog>
#include "keyeater.h"
namespace Ui {
class MessageReplyDialog;
}
class QTextEdit;
class MessageReplyDialog : public QDialog
{
Q_OBJECT
public:
explicit MessageReplyDialog(QWidget *parent = 0);
~MessageReplyDialog();
void setLabel(QString);
void setTextValue(QString);
QString textValue() const;
QTextEdit * textEdit();
private slots:
void on_textEdit_textChanged();
private:
Ui::MessageReplyDialog *ui;
};
#endif // MESSAGEREPLAYDIALOG_H
+74
View File
@@ -0,0 +1,74 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MessageReplyDialog</class>
<widget class="QDialog" name="MessageReplyDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>520</width>
<height>260</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item>
<widget class="QTextEdit" name="textEdit"/>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>MessageReplyDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>MessageReplyDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>
+3 -14
View File
@@ -40,7 +40,9 @@ CPlotter::CPlotter(QWidget *parent) : //CPlotter Constructor
m_Percent2DScreen0 {0},
m_rxFreq {1020},
m_txFreq {0},
m_startFreq {0}
m_startFreq {0},
m_lastMouseX {-1},
m_menuOpen {false}
{
setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
setFocusPolicy(Qt::StrongFocus);
@@ -51,19 +53,6 @@ CPlotter::CPlotter(QWidget *parent) : //CPlotter Constructor
m_bReplot=false;
setMouseTracking(true);
// contextual pop up menu
setContextMenuPolicy (Qt::CustomContextMenu);
connect (this, &QWidget::customContextMenuRequested, [this] (QPoint const& pos) {
QMenu menu {this};
menu.addAction (m_set_freq_action);
auto const& connection = connect (m_set_freq_action, &QAction::triggered, [this, pos] () {
int newFreq = FreqfromX (pos.x ()) + .5;
emit setFreq1 (newFreq, newFreq);
});
menu.exec (mapToGlobal (pos));
disconnect (connection);
});
}
CPlotter::~CPlotter() { } // Destructor
+2
View File
@@ -90,6 +90,7 @@ public:
signals:
void freezeDecode1(int n);
void setFreq1(int rxFreq, int txFreq);
void qsy(int hzDelta);
protected:
//re-implemented widget event handlers
@@ -179,6 +180,7 @@ private:
qint32 m_tol;
qint32 m_j;
qint32 m_lastMouseX;
bool m_menuOpen;
char m_sutc[6];
};
+69 -104
View File
@@ -45,9 +45,9 @@ QMap<QString, int> directed_cmds = {
{"&", 2 }, // query station message
{"$", 3 }, // query station(s) heard
{"^", 4 }, // query grid
{"%", 5 }, // query pwr
{"|", 6 }, // retransmit message
{"!", 7 }, // alert message
{">", 5 }, // relay message
//{"|", 6 }, // retransmit message
//{"!", 7 }, // alert message
{"#", 8 }, // all or nothing message
// {"=", 9 }, // unused
@@ -68,7 +68,7 @@ QMap<QString, int> directed_cmds = {
{" RR", 21 }, // roger roger
{" QSL?", 22 }, // do you copy?
{" QSL", 23 }, // i copy
{" PWR", 24 }, // power level
// {"", 24 }, // unused
{" SNR", 25 }, // seen a station at the provided snr
{" NO", 26 }, // negative confirm
{" YES", 27 }, // confirm
@@ -78,13 +78,14 @@ QMap<QString, int> directed_cmds = {
{" ", 31 }, // send freetext
};
QSet<int> allowed_cmds = {0, 1, 2, 3, 4, 5, 6, 7, 8, /*...*/ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31};
QSet<int> allowed_cmds = {0, 1, 2, 3, 4, 5, /*6,*/ /*7,*/ 8, /*...*/ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, /*24,*/ 25, 26, 27, 28, 29, 30, 31};
QSet<int> buffered_cmds = {6, 7, 8, 13, 14, 15};
QSet<int> buffered_cmds = {5, /*6,*/ /*7,*/ 8, 13, 14, 15};
QMap<int, int> checksum_cmds = {
{ 6, 16 },
{ 7, 16 },
{ 5, 16 },
/*{ 6, 16 },*/
/*{ 7, 16 },*/
{ 8, 32 },
{ 13, 16 },
{ 14, 16 },
@@ -92,26 +93,23 @@ QMap<int, int> checksum_cmds = {
};
QString callsign_pattern = QString("(?<callsign>[A-Z0-9/]+)");
QString optional_cmd_pattern = QString("(?<cmd>\\s?(?:AGN[?]|ACK|73|YES|NO|SNR|PWR|QSL[?]?|RR|HEARING|HW CPY[?]|FB|QTH|QTC|GRID|APRS[:]|QSO|[?@&$%|!#^ ]))?");
QString optional_cmd_pattern = QString("(?<cmd>\\s?(?:AGN[?]|ACK|73|YES|NO|SNR|QSL[?]?|RR|HEARING|HW CPY[?]|FB|QTH|QTC|GRID|APRS[:]|QSO|[?@&$%#^> ]))?");
QString optional_grid_pattern = QString("(?<grid>\\s?[A-R]{2}[0-9]{2})?");
QString optional_extended_grid_pattern = QString("^(?<grid>\\s?(?:[A-R]{2}[0-9]{2}(?:[A-X]{2}(?:[0-9]{2})?)*))?");
QString optional_pwr_pattern = QString("(?<pwr>(?<=PWR)\\s?\\d+\\s?[KM]?W)?");
QString optional_num_pattern = QString("(?<num>(?<=SNR|HEARING)\\s?[-+]?(?:3[01]|[0-2]?[0-9]))?");
QRegularExpression directed_re("^" +
callsign_pattern +
optional_cmd_pattern +
optional_pwr_pattern +
optional_num_pattern);
QRegularExpression beacon_re(R"(^\s*(?<type>CQCQCQ|BEACON)(?:\s(?<grid>[A-R]{2}[0-9]{2}))?\b)");
QRegularExpression beacon_re(R"(^\s*(?<type>CQCQCQ|CQ QRP|CQ DX|CQ TEST|BEACON)(?:\s(?<grid>[A-R]{2}[0-9]{2}))?\b)");
QRegularExpression compound_re("^\\s*[<]" +
callsign_pattern +
"(?<extra>" +
optional_grid_pattern +
optional_cmd_pattern +
optional_pwr_pattern +
optional_num_pattern +
")[>]");
@@ -263,9 +261,7 @@ needed: ^,&@#$%'"()<>|*[]{}=;_~`
QMap<QString, QString> huffescapes = {
// 10 bits
#if 0
{ "\\ ", "" },
#endif
{ "\\ ", " DE " }, // 14 bits - 4 bit savings
{ "\\E", "," },
// 11 bits
@@ -349,6 +345,13 @@ QMap<QString, quint32> basecalls = {
{ "ALLCALL", nbasecall + 2 },
};
QMap<quint32, QString> cqs = {
{ 0, "CQCQCQ" },
{ 1, "CQ DX" },
{ 2, "CQ QRP" },
{ 3, "CQ TEST" },
};
QMap<int, int> dbm2mw = {
{0 , 1}, // 1mW
{3 , 2}, // 2mW
@@ -432,6 +435,13 @@ int dbmTomwatts(int dbm){
* VARICODE
*/
QString Varicode::cqString(int number){
if(!cqs.contains(number)){
return QString{};
}
return cqs[number];
}
QString Varicode::formatSNR(int snr){
if(snr < -60 || snr > 60){
return QString();
@@ -440,19 +450,6 @@ QString Varicode::formatSNR(int snr){
return QString("%1%2").arg(snr >= 0 ? "+" : "").arg(snr, snr < 0 ? 3 : 2, 10, QChar('0'));
}
QString Varicode::formatPWR(int dbm){
if(dbm < 0 || dbm > 60){
return QString();
}
int mwatts = dbmTomwatts(dbm);
if(mwatts < 1000){
return QString("%1mW").arg(mwatts);
}
return QString("%1W").arg(mwatts/1000);
}
QString Varicode::checksum16(QString const &input){
auto fromBytes = input.toLocal8Bit();
auto crc = CRC::Calculate(fromBytes.data(), fromBytes.length(), CRC::CRC_16_KERMIT());
@@ -1061,43 +1058,18 @@ quint8 Varicode::packNum(QString const &num, bool *ok){
return inum + 30 + 1;
}
// pack pwr string into a dbm between 0 and 62
quint8 Varicode::packPwr(QString const &pwr, bool *ok){
int ipwr = 0;
if(pwr.isEmpty()){
if(ok) *ok = false;
return ipwr;
}
int factor = 1000;
if(pwr.endsWith("KW")){
factor = 1000000;
}
else if(pwr.endsWith("MW")){
factor = 1;
}
ipwr = QString(pwr).replace(QRegExp("[KM]?W", Qt::CaseInsensitive), "").toInt() * factor;
ipwr = mwattsToDbm(ipwr);
if(ok) *ok = true;
return ipwr + 1;
}
// pack a reduced fidelity command and a number into the extra bits provided between nbasegrid and nmaxgrid
quint8 Varicode::packCmd(quint8 cmd, quint8 num, bool *pPackedNum){
//quint8 allowed = nmaxgrid - nbasegrid - 1;
// if cmd == pwr || cmd == snr
// if cmd == snr
quint8 value = 0;
if(cmd == directed_cmds[" PWR"] || cmd == directed_cmds[" SNR"]){
if(cmd == directed_cmds[" SNR"]){
// 8 bits - 1 bit flag + 1 bit type + 6 bit number
// [1][X][6]
// X = 0 == SNR
// X = 1 == PWR
value = ((1 << 1) + ((int)cmd == directed_cmds[" PWR"])) << 6;
value = value + num;
value = (1 << 1) << 6;
value = value + (num & ((1<<6)-1));
if(pPackedNum) *pPackedNum = true;
} else {
value = cmd & ((1<<7)-1);
@@ -1108,18 +1080,10 @@ quint8 Varicode::packCmd(quint8 cmd, quint8 num, bool *pPackedNum){
}
quint8 Varicode::unpackCmd(quint8 value, quint8 *pNum){
// if the first bit is 1, the second bit will indicate if its pwr or snr...
// if the first bit is 1, this is an SNR with a number encoded in the lower 6 bits
if(value & (1<<7)){
// either pwr or snr...
bool pwr = value & (1<<6);
if(pNum) *pNum = value & ((1<<6)-1);
if(pwr){
return directed_cmds[" PWR"];
} else {
return directed_cmds[" SNR"];
}
return directed_cmds[" SNR"];
} else {
if(pNum) *pNum = 0;
return value & ((1<<7)-1);
@@ -1143,6 +1107,8 @@ int Varicode::isCommandChecksumed(const QString &cmd){
}
// CQCQCQ EM73
// CQ DX EM73
// CQ QRP EM73
// BEACON EM73
QString Varicode::packBeaconMessage(QString const &text, const QString &callsign, int *n){
QString frame;
@@ -1190,8 +1156,9 @@ QString Varicode::packBeaconMessage(QString const &text, const QString &callsign
packed_extra |= (1<<15);
}
quint8 cqNumber = cqs.key(type, 0);
frame = packCompoundFrame(base, fix, isPrefix, FrameBeacon, packed_extra);
frame = packCompoundFrame(base, fix, isPrefix, FrameBeacon, packed_extra, cqNumber);
if(frame.isEmpty()){
if(n) *n = 0;
return frame;
@@ -1201,11 +1168,12 @@ QString Varicode::packBeaconMessage(QString const &text, const QString &callsign
return frame;
}
QStringList Varicode::unpackBeaconMessage(const QString &text, quint8 *pType, bool * isAlt){
QStringList Varicode::unpackBeaconMessage(const QString &text, quint8 *pType, bool * isAlt, quint8 * pBits3){
quint8 type = FrameBeacon;
quint16 num = nmaxgrid;
quint8 bits3 = 0;
QStringList unpacked = unpackCompoundFrame(text, &type, &num);
QStringList unpacked = unpackCompoundFrame(text, &type, &num, &bits3);
if(unpacked.isEmpty() || type != FrameBeacon){
return QStringList{};
}
@@ -1214,6 +1182,7 @@ QStringList Varicode::unpackBeaconMessage(const QString &text, quint8 *pType, bo
if(isAlt) *isAlt = (num & (1<<15));
if(pType) *pType = type;
if(pBits3) *pBits3 = bits3;
return unpacked;
}
@@ -1238,7 +1207,6 @@ QString Varicode::packCompoundMessage(QString const &text, int *n){
QString grid = parsedText.captured("grid");
QString cmd = parsedText.captured("cmd");
QString num = parsedText.captured("num").trimmed();
QString pwr = parsedText.captured("pwr").trimmed().toUpper();
QString base;
QString fix;
@@ -1272,9 +1240,6 @@ QString Varicode::packCompoundMessage(QString const &text, int *n){
if (!cmd.isEmpty() && directed_cmds.contains(cmd) && Varicode::isCommandAllowed(cmd)){
bool packedNum = false;
qint8 inum = Varicode::packNum(num, nullptr);
if(cmd == " PWR"){
inum = Varicode::packPwr(pwr, nullptr);
}
extra = nusergrid + Varicode::packCmd(directed_cmds[cmd], inum, &packedNum);
type = FrameCompoundDirected;
@@ -1282,17 +1247,18 @@ QString Varicode::packCompoundMessage(QString const &text, int *n){
extra = Varicode::packGrid(grid);
}
frame = Varicode::packCompoundFrame(base, fix, isPrefix, type, extra);
frame = Varicode::packCompoundFrame(base, fix, isPrefix, type, extra, 0);
if(n) *n = parsedText.captured(0).length();
return frame;
}
QStringList Varicode::unpackCompoundMessage(const QString &text, quint8 *pType){
QStringList Varicode::unpackCompoundMessage(const QString &text, quint8 *pType, quint8 *pBits3){
quint8 type = FrameCompound;
quint16 extra = nmaxgrid;
quint8 bits3 = 0;
QStringList unpacked = unpackCompoundFrame(text, &type, &extra);
QStringList unpacked = unpackCompoundFrame(text, &type, &extra, &bits3);
if(unpacked.isEmpty() || (type != FrameCompound && type != FrameCompoundDirected)){
return QStringList {};
}
@@ -1305,19 +1271,18 @@ QStringList Varicode::unpackCompoundMessage(const QString &text, quint8 *pType){
unpacked.append(directed_cmds.key(cmd));
if(cmd == directed_cmds[" PWR"]){
unpacked.append(Varicode::formatPWR(num - 1));
} else if(cmd == directed_cmds[" SNR"]){
if(cmd == directed_cmds[" SNR"]){
unpacked.append(Varicode::formatSNR(num - 31));
}
}
if(pType) *pType = type;
if(pBits3) *pBits3 = bits3;
return unpacked;
}
QString Varicode::packCompoundFrame(const QString &baseCallsign, const QString &fix, bool isPrefix, quint8 type, quint16 num){
QString Varicode::packCompoundFrame(const QString &baseCallsign, const QString &fix, bool isPrefix, quint8 type, quint16 num, quint8 bits3){
QString frame;
// needs to be a compound type...
@@ -1338,8 +1303,9 @@ QString Varicode::packCompoundFrame(const QString &baseCallsign, const QString &
quint16 packed_11 = (num & mask11) >> 5;
quint8 packed_5 = num & mask5;
quint8 packed_8 = (packed_5 << 3) | bits3;
// [3][28][22][11],[3][5] = 72
// [3][28][22][11],[5][3] = 72
auto bits = (
Varicode::intToBits(packed_flag, 3) +
Varicode::intToBits(packed_base, 28) +
@@ -1347,19 +1313,22 @@ QString Varicode::packCompoundFrame(const QString &baseCallsign, const QString &
Varicode::intToBits(packed_11, 11)
);
return Varicode::pack72bits(Varicode::bitsToInt(bits), packed_5 % 32);
return Varicode::pack72bits(Varicode::bitsToInt(bits), packed_8);
}
QStringList Varicode::unpackCompoundFrame(const QString &text, quint8 *pType, quint16 *pNum){
QStringList Varicode::unpackCompoundFrame(const QString &text, quint8 *pType, quint16 *pNum, quint8 *pBits3){
QStringList unpacked;
if(text.length() < 12 || text.contains(" ")){
return unpacked;
}
// [3][28][22][11],[3][5] = 72
quint8 packed_5 = 0;
auto bits = Varicode::intToBits(Varicode::unpack72bits(text, &packed_5), 64);
// [3][28][22][11],[5][3] = 72
quint8 packed_8 = 0;
auto bits = Varicode::intToBits(Varicode::unpack72bits(text, &packed_8), 64);
quint8 packed_5 = packed_8 >> 3;
quint8 packed_3 = packed_8 & ((1<<3)-1);
quint8 packed_flag = Varicode::bitsToInt(bits.mid(0, 3));
@@ -1381,6 +1350,7 @@ QStringList Varicode::unpackCompoundFrame(const QString &text, quint8 *pType, qu
if(pType) *pType = packed_flag;
if(pNum) *pNum = num;
if(pBits3) *pBits3 = packed_3;
if(isPrefix){
unpacked.append(fix);
@@ -1412,7 +1382,6 @@ QString Varicode::packDirectedMessage(const QString &text, const QString &callsi
QString to = match.captured("callsign");
QString cmd = match.captured("cmd");
QString num = match.captured("num").trimmed();
QString pwr = match.captured("pwr").trimmed().toUpper();
// ensure we have a directed command
if(cmd.isEmpty()){
@@ -1439,23 +1408,15 @@ QString Varicode::packDirectedMessage(const QString &text, const QString &callsi
}
}
// validate command
if(!Varicode::isCommandAllowed(cmd)){
if(!Varicode::isCommandAllowed(cmd) && !Varicode::isCommandAllowed(cmd.trimmed())){
if(n) *n = 0;
return frame;
}
// packing general number...
quint8 inum = 0;
if(cmd.trimmed() == "PWR"){
inum = Varicode::packPwr(pwr, nullptr);
if(pNum) *pNum = pwr;
} else {
inum = Varicode::packNum(num, nullptr);
if(pNum) *pNum = num;
}
quint8 inum = Varicode::packNum(num, nullptr);
if(pNum) *pNum = num;
quint32 packed_from = Varicode::packCallsign(from);
quint32 packed_to = Varicode::packCallsign(to);
@@ -1465,7 +1426,13 @@ QString Varicode::packDirectedMessage(const QString &text, const QString &callsi
return frame;
}
quint8 packed_cmd = directed_cmds[cmd];
quint8 packed_cmd = 0;
if(directed_cmds.contains(cmd)){
packed_cmd = directed_cmds[cmd];
}
if(directed_cmds.contains(cmd.trimmed())){
packed_cmd = directed_cmds[cmd.trimmed()];
}
quint8 packed_flag = FrameDirected;
quint8 packed_extra = inum;
@@ -1512,9 +1479,7 @@ QStringList Varicode::unpackDirectedMessage(const QString &text, quint8 *pType){
if(extra != 0){
// TODO: jsherer - should we decide which format to use on the command, or something else?
if(packed_cmd == directed_cmds[" PWR"]){
unpacked.append(Varicode::formatPWR(extra-1));
} else if(packed_cmd == directed_cmds[" SNR"]) {
if(packed_cmd == directed_cmds[" SNR"]) {
unpacked.append(Varicode::formatSNR((int)extra-31));
} else {
unpacked.append(QString("%1").arg(extra-31));
+5 -4
View File
@@ -56,6 +56,7 @@ public:
//Varicode();
static QString cqString(int number);
static QString formatSNR(int snr);
static QString formatPWR(int dbm);
@@ -124,13 +125,13 @@ public:
static int isCommandChecksumed(const QString &cmd);
static QString packBeaconMessage(QString const &text, QString const&callsign, int *n);
static QStringList unpackBeaconMessage(const QString &text, quint8 *pType, bool *isAlt);
static QStringList unpackBeaconMessage(const QString &text, quint8 *pType, bool *isAlt, quint8 *pBits3);
static QString packCompoundMessage(QString const &text, int *n);
static QStringList unpackCompoundMessage(const QString &text, quint8 *pType);
static QStringList unpackCompoundMessage(const QString &text, quint8 *pType, quint8 *pBits3);
static QString packCompoundFrame(const QString &baseCallsign, const QString &fix, bool isPrefix, quint8 type, quint16 num);
static QStringList unpackCompoundFrame(const QString &text, quint8 *pType, quint16 *pNum);
static QString packCompoundFrame(const QString &baseCallsign, const QString &fix, bool isPrefix, quint8 type, quint16 num, quint8 bits3);
static QStringList unpackCompoundFrame(const QString &text, quint8 *pType, quint16 *pNum, quint8 *pBits3);
static QString packDirectedMessage(QString const& text, QString const& callsign, QString *pTo, QString * pCmd, QString *pNum, int *n);
static QStringList unpackDirectedMessage(QString const& text, quint8 *pType);
+26
View File
@@ -42,7 +42,12 @@ WideGraph::WideGraph(QSettings * settings, QWidget *parent) :
connect(ui->widePlot, SIGNAL(setFreq1(int,int)),this,
SLOT(setFreq2(int,int)));
connect(ui->widePlot, &CPlotter::qsy, this, [this](int hzDelta){
emit qsy(hzDelta);
});
{
//Restore user's settings
SettingsGroup g {m_settings, "WideGraph"};
restoreGeometry (m_settings->value ("geometry", saveGeometry ()).toByteArray ());
@@ -81,6 +86,7 @@ WideGraph::WideGraph(QSettings * settings, QWidget *parent) :
ui->sbPercent2dPlot->setValue(m_Percent2DScreen);
ui->widePlot->SetPercent2DScreen(m_Percent2DScreen);
ui->widePlot->setStartFreq(m_settings->value("StartFreq", 500).toInt());
ui->centerSpinBox->setValue(m_settings->value("CenterOffset", 1500).toInt());
ui->fStartSpinBox->setValue(ui->widePlot->startFreq());
m_waterfallPalette=m_settings->value("WaterfallPalette","Default").toString();
m_userPalette = WFPalette {m_settings->value("UserPalette").value<WFPalette::Colours> ()};
@@ -141,6 +147,7 @@ void WideGraph::saveSettings() //saveS
m_settings->setValue("UseRef",m_bRef);
m_settings->setValue ("HideControls", ui->controls_widget->isHidden ());
m_settings->setValue ("FminPerBand", m_fMinPerBand);
m_settings->setValue ("CenterOffset", ui->centerSpinBox->value());
}
void WideGraph::drawRed(int ia, int ib)
@@ -207,6 +214,11 @@ void WideGraph::on_bppSpinBox_valueChanged(int n) //b
ui->widePlot->setBinsPerPixel(n);
}
void WideGraph::on_qsyPushButton_clicked(){
int hzDelta = rxFreq() - centerFreq();
emit qsy(hzDelta);
}
void WideGraph::on_offsetSpinBox_valueChanged(int n){
if(n == rxFreq()){
return;
@@ -257,6 +269,11 @@ int WideGraph::rxFreq() //rxFr
return ui->widePlot->rxFreq();
}
int WideGraph::centerFreq()
{
return ui->centerSpinBox->value();
}
int WideGraph::nStartFreq() //nStartFreq
{
return ui->widePlot->startFreq();
@@ -363,6 +380,15 @@ void WideGraph::setDialFreq(double d) //setDialFreq
ui->widePlot->setDialFreq(d);
}
void WideGraph::setControlsVisible(bool visible)
{
ui->cbControls->setChecked(visible);
}
bool WideGraph::controlsVisible(){
return ui->cbControls->isChecked();
}
void WideGraph::setRxBand (QString const& band)
{
m_rxBand = band;
+5
View File
@@ -29,6 +29,7 @@ public:
void dataSink2(float s[], float df3, int ihsym, int ndiskdata);
void setRxFreq(int n);
int rxFreq();
int centerFreq();
int nStartFreq();
int Fmin();
int Fmax();
@@ -55,17 +56,21 @@ signals:
void f11f12(int n);
void setXIT2(int n);
void setFreq3(int rxFreq, int txFreq);
void qsy(int hzDelta);
public slots:
void wideFreezeDecode(int n);
void setFreq2(int rxFreq, int txFreq);
void setDialFreq(double d);
void setControlsVisible(bool visible);
bool controlsVisible();
protected:
void keyPressEvent (QKeyEvent *e) override;
void closeEvent (QCloseEvent *) override;
private slots:
void on_qsyPushButton_clicked();
void on_offsetSpinBox_valueChanged(int n);
void on_waterfallAvgSpinBox_valueChanged(int arg1);
void on_bppSpinBox_valueChanged(int arg1);
+287 -258
View File
@@ -64,6 +64,9 @@
<height>17</height>
</rect>
</property>
<property name="visible">
<bool>false</bool>
</property>
<property name="text">
<string>Controls</string>
</property>
@@ -100,127 +103,7 @@
<property name="verticalSpacing">
<number>0</number>
</property>
<item row="1" column="7">
<widget class="QComboBox" name="spec2dComboBox">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Select data for spectral display&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<item>
<property name="text">
<string>Current</string>
</property>
</item>
<item>
<property name="text">
<string>Cumulative</string>
</property>
</item>
<item>
<property name="text">
<string>Linear Avg</string>
</property>
</item>
<item>
<property name="text">
<string>Reference</string>
</property>
</item>
</widget>
</item>
<item row="1" column="3">
<widget class="QSpinBox" name="waterfallAvgSpinBox">
<property name="toolTip">
<string>Number of FFTs averaged (controls waterfall scrolling rate)</string>
</property>
<property name="prefix">
<string>N Avg </string>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>50</number>
</property>
</widget>
</item>
<item row="0" column="6" rowspan="2">
<widget class="Line" name="line_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item row="0" column="4" rowspan="2">
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item row="0" column="3">
<widget class="QSpinBox" name="fStartSpinBox">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Frequency at left edge of waterfall&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="suffix">
<string> Hz</string>
</property>
<property name="prefix">
<string>Start </string>
</property>
<property name="maximum">
<number>5000</number>
</property>
<property name="singleStep">
<number>100</number>
</property>
<property name="value">
<number>500</number>
</property>
</widget>
</item>
<item row="1" column="12">
<widget class="QSpinBox" name="smoSpinBox">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Smoothing of Linear Average spectrum</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="suffix">
<string/>
</property>
<property name="prefix">
<string>Smooth </string>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>7</number>
</property>
</widget>
</item>
<item row="0" column="13" rowspan="2">
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="11">
<item row="0" column="12">
<widget class="QSlider" name="zeroSlider">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
@@ -257,14 +140,62 @@
</property>
</widget>
</item>
<item row="1" column="5">
<widget class="QComboBox" name="paletteComboBox">
<item row="0" column="13">
<widget class="QSpinBox" name="sbPercent2dPlot">
<property name="toolTip">
<string>Select waterfall palette</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Set fractional size of spectrum in this window.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="suffix">
<string> %</string>
</property>
<property name="prefix">
<string>Spec </string>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="singleStep">
<number>5</number>
</property>
<property name="value">
<number>0</number>
</property>
</widget>
</item>
<item row="0" column="7">
<item row="1" column="8">
<widget class="QComboBox" name="spec2dComboBox">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Select data for spectral display&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<item>
<property name="text">
<string>Current</string>
</property>
</item>
<item>
<property name="text">
<string>Cumulative</string>
</property>
</item>
<item>
<property name="text">
<string>Linear Avg</string>
</property>
</item>
<item>
<property name="text">
<string>Reference</string>
</property>
</item>
</widget>
</item>
<item row="0" column="8">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QCheckBox" name="cbFlatten">
@@ -288,81 +219,32 @@
</item>
</layout>
</item>
<item row="1" column="9">
<widget class="QSlider" name="gain2dSlider">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>200</width>
<height>16777215</height>
</size>
</property>
<item row="0" column="2">
<widget class="QSpinBox" name="bppSpinBox">
<property name="toolTip">
<string>Spectrum gain</string>
<string>Compression factor for frequency scale</string>
</property>
<property name="suffix">
<string/>
</property>
<property name="prefix">
<string>Bins/Pixel </string>
</property>
<property name="minimum">
<number>-50</number>
<number>1</number>
</property>
<property name="maximum">
<number>50</number>
<number>1000</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
<property name="singleStep">
<number>1</number>
</property>
<property name="tickPosition">
<enum>QSlider::TicksAbove</enum>
<property name="value">
<number>5</number>
</property>
</widget>
</item>
<item row="0" column="9">
<widget class="QSlider" name="gainSlider">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>200</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>Waterfall gain</string>
</property>
<property name="minimum">
<number>-50</number>
</property>
<property name="maximum">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="tickPosition">
<enum>QSlider::TicksAbove</enum>
</property>
</widget>
</item>
<item row="1" column="11">
<item row="1" column="12">
<widget class="QSlider" name="zero2dSlider">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
@@ -399,8 +281,111 @@
</property>
</widget>
</item>
<item row="0" column="0" rowspan="2">
<spacer name="horizontalSpacer">
<item row="0" column="4">
<widget class="QSpinBox" name="fStartSpinBox">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Frequency at left edge of waterfall&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="suffix">
<string> Hz</string>
</property>
<property name="prefix">
<string>Start </string>
</property>
<property name="maximum">
<number>5000</number>
</property>
<property name="singleStep">
<number>100</number>
</property>
<property name="value">
<number>500</number>
</property>
</widget>
</item>
<item row="1" column="6">
<widget class="QComboBox" name="paletteComboBox">
<property name="toolTip">
<string>Select waterfall palette</string>
</property>
</widget>
</item>
<item row="0" column="10">
<widget class="QSlider" name="gainSlider">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>200</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>Waterfall gain</string>
</property>
<property name="minimum">
<number>-50</number>
</property>
<property name="maximum">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="tickPosition">
<enum>QSlider::TicksAbove</enum>
</property>
</widget>
</item>
<item row="1" column="10">
<widget class="QSlider" name="gain2dSlider">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>100</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>200</width>
<height>16777215</height>
</size>
</property>
<property name="toolTip">
<string>Spectrum gain</string>
</property>
<property name="minimum">
<number>-50</number>
</property>
<property name="maximum">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="tickPosition">
<enum>QSlider::TicksAbove</enum>
</property>
</widget>
</item>
<item row="0" column="14" rowspan="2">
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
@@ -412,56 +397,81 @@
</property>
</spacer>
</item>
<item row="0" column="12">
<widget class="QSpinBox" name="sbPercent2dPlot">
<item row="1" column="4">
<widget class="QSpinBox" name="waterfallAvgSpinBox">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Set fractional size of spectrum in this window.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string>Number of FFTs averaged (controls waterfall scrolling rate)</string>
</property>
<property name="prefix">
<string>N Avg </string>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>50</number>
</property>
</widget>
</item>
<item row="1" column="13">
<widget class="QSpinBox" name="smoSpinBox">
<property name="enabled">
<bool>false</bool>
</property>
<property name="toolTip">
<string>Smoothing of Linear Average spectrum</string>
</property>
<property name="alignment">
<set>Qt::AlignCenter</set>
</property>
<property name="suffix">
<string> %</string>
<string/>
</property>
<property name="prefix">
<string>Spec </string>
<string>Smooth </string>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="singleStep">
<number>5</number>
</property>
<property name="value">
<number>0</number>
<number>7</number>
</property>
</widget>
</item>
<item row="0" column="5">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="labPalette">
<property name="text">
<string> Palette </string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="adjust_palette_push_button">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Enter definition for a new color palette.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Adjust...</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="2">
<widget class="QSpinBox" name="offsetSpinBox">
<property name="suffix">
<string> Hz</string>
</property>
<property name="prefix">
<string>Offset </string>
</property>
<property name="maximum">
<number>5000</number>
</property>
<property name="singleStep">
<number>1</number>
</property>
<property name="value">
<number>1500</number>
</property>
</widget>
</item>
<item row="0" column="7" rowspan="2">
<widget class="Line" name="line_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item row="0" column="5" rowspan="2">
<widget class="Line" name="line">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QSpinBox" name="fSplitSpinBox">
<property name="visible">
<bool>false</bool>
@@ -489,50 +499,69 @@
</property>
</widget>
</item>
<item row="0" column="0" rowspan="2">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="6">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="labPalette">
<property name="text">
<string> Palette </string>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="adjust_palette_push_button">
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Enter definition for a new color palette.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>Adjust...</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="0" column="1">
<widget class="QPushButton" name="qsyPushButton">
<property name="text">
<string>QSY</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QSpinBox" name="offsetSpinBox">
<widget class="QSpinBox" name="centerSpinBox">
<property name="suffix">
<string> Hz</string>
</property>
<property name="prefix">
<string>Offset </string>
<string>Center </string>
</property>
<property name="minimum">
<number>500</number>
</property>
<property name="maximum">
<number>5000</number>
</property>
<property name="singleStep">
<number>1</number>
</property>
<property name="value">
<number>1500</number>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QSpinBox" name="bppSpinBox">
<property name="toolTip">
<string>Compression factor for frequency scale</string>
</property>
<property name="suffix">
<string/>
</property>
<property name="prefix">
<string>Bins/Pixel </string>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>1000</number>
</property>
<property name="singleStep">
<number>1</number>
</property>
<property name="value">
<number>5</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>
+8 -3
View File
@@ -72,7 +72,9 @@ SOURCES += \
NetworkMessage.cpp \
MessageClient.cpp \
SelfDestructMessageBox.cpp \
APRSISClient.cpp
APRSISClient.cpp \
messagereplydialog.cpp \
keyeater.cpp
HEADERS += qt_helpers.hpp \
pimpl_h.hpp pimpl_impl.hpp \
@@ -96,7 +98,9 @@ HEADERS += qt_helpers.hpp \
NetworkMessage.hpp \
MessageClient.hpp \
SelfDestructMessageBox.h \
APRSISClient.h
APRSISClient.h \
messagereplydialog.h \
keyeater.h
INCLUDEPATH += qmake_only
@@ -108,7 +112,8 @@ HEADERS += OmniRigTransceiver.hpp
FORMS += mainwindow.ui about.ui Configuration.ui widegraph.ui astro.ui \
logqso.ui wf_palette_design_dialog.ui messageaveraging.ui echograph.ui \
fastgraph.ui
fastgraph.ui \
messagereplydialog.ui
RC_FILE = wsjtx.rc
RESOURCES = wsjtx.qrc
+1 -1
View File
@@ -1 +1 @@
IDI_ICON1 ICON DISCARDABLE "icons/windows-icons/wsjtx.ico"
IDI_ICON1 ICON DISCARDABLE "icons/windows-icons/ft8call.ico"