1. Diasble any irrelevant widgets on Configuration screen.

2. Rationalize tab-order on main window.
3. Tweak the GUI appearance around DxCall, DxGrid.  (Hope it's still OK 
   in Linux!
4. Add helpful displays of Keyboard Shortcuts (F3) and Special Mouse
   Commands (F4).
5. Bump version number to 0.95.
6. Update the Windows packaging script.
7. Update ChangeLog in preparation for possible release of v0.95 r3226.



git-svn-id: svn+ssh://svn.code.sf.net/p/wsjt/wsjt/branches/wsjtx@3226 ab8295b8-cf94-4d9e-aec4-7959e3be5d79
This commit is contained in:
Joe Taylor 2013-04-26 16:23:18 +00:00
parent 3f55232ce9
commit a75f2e0f10
6 changed files with 179 additions and 60 deletions

View File

@ -155,6 +155,12 @@ void DevSetup::initDlg()
ui.dataBitsComboBox->setEnabled(m_catEnabled); ui.dataBitsComboBox->setEnabled(m_catEnabled);
ui.stopBitsComboBox->setEnabled(m_catEnabled); ui.stopBitsComboBox->setEnabled(m_catEnabled);
ui.handshakeComboBox->setEnabled(m_catEnabled); ui.handshakeComboBox->setEnabled(m_catEnabled);
ui.testCATButton->setEnabled(m_catEnabled);
ui.cbDTRoff->setEnabled(m_catEnabled);
ui.rbData->setEnabled(m_catEnabled);
ui.rbMic->setEnabled(m_catEnabled);
bool b=m_pttMethodIndex==1 or m_pttMethodIndex==2 or m_catEnabled;
ui.testPTTButton->setEnabled(b);
ui.rigComboBox->setCurrentIndex(m_rigIndex); ui.rigComboBox->setCurrentIndex(m_rigIndex);
ui.catPortComboBox->setCurrentIndex(m_catPortIndex); ui.catPortComboBox->setCurrentIndex(m_catPortIndex);
ui.serialRateComboBox->setCurrentIndex(m_serialRateIndex); ui.serialRateComboBox->setCurrentIndex(m_serialRateIndex);
@ -332,6 +338,9 @@ void DevSetup::on_cbPSKReporter_clicked(bool b)
void DevSetup::on_pttMethodComboBox_activated(int index) void DevSetup::on_pttMethodComboBox_activated(int index)
{ {
m_pttMethodIndex=index; m_pttMethodIndex=index;
bool b=m_pttMethodIndex==1 or m_pttMethodIndex==2 or
(m_catEnabled and m_pttMethodIndex==0);
ui.testPTTButton->setEnabled(b);
} }
void DevSetup::on_catPortComboBox_activated(int index) void DevSetup::on_catPortComboBox_activated(int index)
@ -349,6 +358,13 @@ void DevSetup::on_cbEnableCAT_toggled(bool b)
ui.dataBitsComboBox->setEnabled(b); ui.dataBitsComboBox->setEnabled(b);
ui.stopBitsComboBox->setEnabled(b); ui.stopBitsComboBox->setEnabled(b);
ui.handshakeComboBox->setEnabled(b); ui.handshakeComboBox->setEnabled(b);
ui.testCATButton->setEnabled(b);
ui.cbDTRoff->setEnabled(b);
ui.rbData->setEnabled(b);
ui.rbMic->setEnabled(b);
bool b2=(m_pttMethodIndex==1 or m_pttMethodIndex==2 or m_catEnabled) and
!(m_pttMethodIndex==3);
ui.testPTTButton->setEnabled(b2);
} }
void DevSetup::on_serialRateComboBox_activated(int index) void DevSetup::on_serialRateComboBox_activated(int index)

View File

@ -25,7 +25,7 @@ WideGraph* g_pWideGraph = NULL;
Rig* rig = NULL; Rig* rig = NULL;
QString rev="$Rev$"; QString rev="$Rev$";
QString Program_Title_Version=" WSJT-X v0.9, r" + rev.mid(6,4) + QString Program_Title_Version=" WSJT-X v0.95, r" + rev.mid(6,4) +
" by K1JT"; " by K1JT";
//-------------------------------------------------- MainWindow constructor //-------------------------------------------------- MainWindow constructor
@ -233,7 +233,6 @@ MainWindow::MainWindow(QSharedMemory *shdmem, QWidget *parent) :
if(m_mode=="JT9-5") on_actionJT9_5_triggered(); if(m_mode=="JT9-5") on_actionJT9_5_triggered();
if(m_mode=="JT9-10") on_actionJT9_10_triggered(); if(m_mode=="JT9-10") on_actionJT9_10_triggered();
if(m_mode=="JT9-30") on_actionJT9_30_triggered(); if(m_mode=="JT9-30") on_actionJT9_30_triggered();
//g_pWideGraph->setRxRange(m_fMin,m_fMax);
future1 = new QFuture<void>; future1 = new QFuture<void>;
watcher1 = new QFutureWatcher<void>; watcher1 = new QFutureWatcher<void>;
connect(watcher1, SIGNAL(finished()),this,SLOT(diskDat())); connect(watcher1, SIGNAL(finished()),this,SLOT(diskDat()));
@ -957,11 +956,6 @@ void MainWindow::msgBox(QString t) //msgBox
msgBox0.exec(); msgBox0.exec();
} }
void MainWindow::stub() //stub()
{
msgBox("Not yet implemented.");
}
void MainWindow::on_actionOnline_Users_Guide_triggered() //Display manual void MainWindow::on_actionOnline_Users_Guide_triggered() //Display manual
{ {
QDesktopServices::openUrl(QUrl( QDesktopServices::openUrl(QUrl(
@ -1087,11 +1081,6 @@ void MainWindow::on_actionF4_sets_Tx6_triggered() //F4 sets Tx6
m_kb8rq = !m_kb8rq; m_kb8rq = !m_kb8rq;
} }
void MainWindow::on_actionNo_shorthands_if_Tx1_triggered()
{
stub();
}
void MainWindow::on_actionNone_triggered() //Save None void MainWindow::on_actionNone_triggered() //Save None
{ {
m_saveSynced=false; m_saveSynced=false;
@ -1126,16 +1115,57 @@ void MainWindow::on_actionSave_all_triggered() //Save All
void MainWindow::on_actionKeyboard_shortcuts_triggered() void MainWindow::on_actionKeyboard_shortcuts_triggered()
{ {
stub(); //Display list of keyboard shortcuts QTextEdit* pShortcuts;
pShortcuts = new QTextEdit(0);
pShortcuts->setReadOnly(true);
pShortcuts->setFontPointSize(10);
pShortcuts->setWindowTitle("Keyboard Shortcuts");
// pShortcuts->setGeometry(m_wideGraphGeom);
pShortcuts->setGeometry(QRect(45,50,430,420));
Qt::WindowFlags flags = Qt::WindowCloseButtonHint |
Qt::WindowMinimizeButtonHint;
pShortcuts->setWindowFlags(flags);
QString shortcuts = m_appDir + "/shortcuts.txt";
QFile f(shortcuts);
if(!f.open(QIODevice::ReadOnly | QIODevice::Text)) {
msgBox("Cannot open " + shortcuts);
return;
}
QTextStream s(&f);
QString t;
for(int i=0; i<100; i++) {
t=s.readLine();
pShortcuts->append(t);
if(s.atEnd()) break;
}
pShortcuts->show();
} }
void MainWindow::on_actionSpecial_mouse_commands_triggered() void MainWindow::on_actionSpecial_mouse_commands_triggered()
{ {
stub(); //Display list of mouse commands QTextEdit* pMouseCmnds;
} pMouseCmnds = new QTextEdit(0);
void MainWindow::on_actionAvailable_suffixes_and_add_on_prefixes_triggered() pMouseCmnds->setReadOnly(true);
{ pMouseCmnds->setFontPointSize(10);
stub(); //Display list of Add-On pfx/sfx pMouseCmnds->setWindowTitle("Special Mouse Commands");
pMouseCmnds->setGeometry(QRect(45,50,440,300));
Qt::WindowFlags flags = Qt::WindowCloseButtonHint |
Qt::WindowMinimizeButtonHint;
pMouseCmnds->setWindowFlags(flags);
QString mouseCmnds = m_appDir + "/mouse_commands.txt";
QFile f(mouseCmnds);
if(!f.open(QIODevice::ReadOnly | QIODevice::Text)) {
msgBox("Cannot open " + mouseCmnds);
return;
}
QTextStream s(&f);
QString t;
for(int i=0; i<100; i++) {
t=s.readLine();
pMouseCmnds->append(t);
if(s.atEnd()) break;
}
pMouseCmnds->show();
} }
void MainWindow::on_DecodeButton_clicked() //Decode request void MainWindow::on_DecodeButton_clicked() //Decode request

View File

@ -69,12 +69,10 @@ private slots:
void on_actionDecode_remaining_files_in_directory_triggered(); void on_actionDecode_remaining_files_in_directory_triggered();
void on_actionDelete_all_wav_files_in_SaveDir_triggered(); void on_actionDelete_all_wav_files_in_SaveDir_triggered();
void on_actionF4_sets_Tx6_triggered(); void on_actionF4_sets_Tx6_triggered();
void on_actionNo_shorthands_if_Tx1_triggered();
void on_actionNone_triggered(); void on_actionNone_triggered();
void on_actionSave_all_triggered(); void on_actionSave_all_triggered();
void on_actionKeyboard_shortcuts_triggered(); void on_actionKeyboard_shortcuts_triggered();
void on_actionSpecial_mouse_commands_triggered(); void on_actionSpecial_mouse_commands_triggered();
void on_actionAvailable_suffixes_and_add_on_prefixes_triggered();
void on_DecodeButton_clicked(); void on_DecodeButton_clicked();
void decode(); void decode();
void decodeBusy(bool b); void decodeBusy(bool b);

View File

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>711</width> <width>711</width>
<height>702</height> <height>475</height>
</rect> </rect>
</property> </property>
<property name="sizePolicy"> <property name="sizePolicy">
@ -613,7 +613,7 @@ p, li { white-space: pre-wrap; }
</font> </font>
</property> </property>
<property name="text"> <property name="text">
<string>Dial Frequency</string> <string>14.078</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignCenter</set> <set>Qt::AlignCenter</set>
@ -654,7 +654,7 @@ p, li { white-space: pre-wrap; }
<enum>QTabWidget::Triangular</enum> <enum>QTabWidget::Triangular</enum>
</property> </property>
<property name="currentIndex"> <property name="currentIndex">
<number>1</number> <number>0</number>
</property> </property>
<widget class="QWidget" name="tab"> <widget class="QWidget" name="tab">
<attribute name="title"> <attribute name="title">
@ -724,7 +724,7 @@ p, li { white-space: pre-wrap; }
<string/> <string/>
</property> </property>
<attribute name="buttonGroup"> <attribute name="buttonGroup">
<string notr="true">buttonGroup</string> <string>buttonGroup</string>
</attribute> </attribute>
</widget> </widget>
</item> </item>
@ -755,7 +755,7 @@ p, li { white-space: pre-wrap; }
<bool>true</bool> <bool>true</bool>
</property> </property>
<attribute name="buttonGroup"> <attribute name="buttonGroup">
<string notr="true">buttonGroup</string> <string>buttonGroup</string>
</attribute> </attribute>
</widget> </widget>
</item> </item>
@ -783,7 +783,7 @@ p, li { white-space: pre-wrap; }
<string/> <string/>
</property> </property>
<attribute name="buttonGroup"> <attribute name="buttonGroup">
<string notr="true">buttonGroup</string> <string>buttonGroup</string>
</attribute> </attribute>
</widget> </widget>
</item> </item>
@ -933,7 +933,7 @@ p, li { white-space: pre-wrap; }
<string/> <string/>
</property> </property>
<attribute name="buttonGroup"> <attribute name="buttonGroup">
<string notr="true">buttonGroup</string> <string>buttonGroup</string>
</attribute> </attribute>
</widget> </widget>
</item> </item>
@ -1066,7 +1066,7 @@ p, li { white-space: pre-wrap; }
<string/> <string/>
</property> </property>
<attribute name="buttonGroup"> <attribute name="buttonGroup">
<string notr="true">buttonGroup</string> <string>buttonGroup</string>
</attribute> </attribute>
</widget> </widget>
</item> </item>
@ -1094,7 +1094,7 @@ p, li { white-space: pre-wrap; }
<string/> <string/>
</property> </property>
<attribute name="buttonGroup"> <attribute name="buttonGroup">
<string notr="true">buttonGroup</string> <string>buttonGroup</string>
</attribute> </attribute>
</widget> </widget>
</item> </item>
@ -1330,7 +1330,7 @@ p, li { white-space: pre-wrap; }
</widget> </widget>
</item> </item>
<item row="1" column="1" rowspan="5"> <item row="1" column="1" rowspan="5">
<widget class="QwtThermo" name="xThermo"> <widget class="QwtThermo" name="xThermo" native="true">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Fixed"> <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
<horstretch>0</horstretch> <horstretch>0</horstretch>
@ -1343,19 +1343,19 @@ p, li { white-space: pre-wrap; }
<height>180</height> <height>180</height>
</size> </size>
</property> </property>
<property name="borderWidth"> <property name="borderWidth" stdset="0">
<number>1</number> <number>1</number>
</property> </property>
<property name="maxValue"> <property name="maxValue" stdset="0">
<double>60.000000000000000</double> <double>60.000000000000000</double>
</property> </property>
<property name="minValue"> <property name="minValue" stdset="0">
<double>0.000000000000000</double> <double>0.000000000000000</double>
</property> </property>
<property name="pipeWidth"> <property name="pipeWidth" stdset="0">
<number>8</number> <number>8</number>
</property> </property>
<property name="value"> <property name="value" stdset="0">
<double>0.000000000000000</double> <double>0.000000000000000</double>
</property> </property>
</widget> </widget>
@ -1775,11 +1775,14 @@ p, li { white-space: pre-wrap; }
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="frameShape"> <property name="frameShape">
<enum>QFrame::NoFrame</enum> <enum>QFrame::HLine</enum>
</property> </property>
<property name="frameShadow"> <property name="frameShadow">
<enum>QFrame::Raised</enum> <enum>QFrame::Raised</enum>
</property> </property>
<property name="lineWidth">
<number>2</number>
</property>
<layout class="QVBoxLayout" name="verticalLayout_6"> <layout class="QVBoxLayout" name="verticalLayout_6">
<property name="spacing"> <property name="spacing">
<number>0</number> <number>0</number>
@ -1821,7 +1824,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>0</width> <width>70</width>
<height>27</height> <height>27</height>
</size> </size>
</property> </property>
@ -1932,11 +1935,14 @@ p, li { white-space: pre-wrap; }
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="frameShape"> <property name="frameShape">
<enum>QFrame::NoFrame</enum> <enum>QFrame::HLine</enum>
</property> </property>
<property name="frameShadow"> <property name="frameShadow">
<enum>QFrame::Raised</enum> <enum>QFrame::Raised</enum>
</property> </property>
<property name="lineWidth">
<number>2</number>
</property>
<layout class="QVBoxLayout" name="verticalLayout_10"> <layout class="QVBoxLayout" name="verticalLayout_10">
<property name="spacing"> <property name="spacing">
<number>0</number> <number>0</number>
@ -1984,7 +1990,7 @@ p, li { white-space: pre-wrap; }
</property> </property>
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>0</width> <width>70</width>
<height>27</height> <height>27</height>
</size> </size>
</property> </property>
@ -2155,7 +2161,7 @@ p, li { white-space: pre-wrap; }
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>711</width> <width>711</width>
<height>25</height> <height>21</height>
</rect> </rect>
</property> </property>
<widget class="QMenu" name="menuFile"> <widget class="QMenu" name="menuFile">
@ -2477,11 +2483,17 @@ p, li { white-space: pre-wrap; }
<property name="text"> <property name="text">
<string>Keyboard shortcuts</string> <string>Keyboard shortcuts</string>
</property> </property>
<property name="shortcut">
<string>F3</string>
</property>
</action> </action>
<action name="actionSpecial_mouse_commands"> <action name="actionSpecial_mouse_commands">
<property name="text"> <property name="text">
<string>Special mouse commands</string> <string>Special mouse commands</string>
</property> </property>
<property name="shortcut">
<string>F4</string>
</property>
</action> </action>
<action name="actionAvailable_suffixes_and_add_on_prefixes"> <action name="actionAvailable_suffixes_and_add_on_prefixes">
<property name="text"> <property name="text">
@ -2779,6 +2791,61 @@ p, li { white-space: pre-wrap; }
<header>displaytext.h</header> <header>displaytext.h</header>
</customwidget> </customwidget>
</customwidgets> </customwidgets>
<tabstops>
<tabstop>logQSOButton</tabstop>
<tabstop>stopButton</tabstop>
<tabstop>monitorButton</tabstop>
<tabstop>DecodeButton</tabstop>
<tabstop>EraseButton</tabstop>
<tabstop>tuneButton</tabstop>
<tabstop>autoButton</tabstop>
<tabstop>stopTxButton</tabstop>
<tabstop>bandComboBox</tabstop>
<tabstop>dxCallEntry</tabstop>
<tabstop>dxGridEntry</tabstop>
<tabstop>lookupButton</tabstop>
<tabstop>addButton</tabstop>
<tabstop>txFirstCheckBox</tabstop>
<tabstop>TxFreqSpinBox</tabstop>
<tabstop>pbR2T</tabstop>
<tabstop>pbT2R</tabstop>
<tabstop>rptSpinBox</tabstop>
<tabstop>pbCallCQ</tabstop>
<tabstop>pbAnswerCaller</tabstop>
<tabstop>pbSendRRR</tabstop>
<tabstop>pbSend73</tabstop>
<tabstop>genMsg</tabstop>
<tabstop>freeTextMsg</tabstop>
<tabstop>pbAnswerCQ</tabstop>
<tabstop>pbSendReport</tabstop>
<tabstop>rbGenMsg</tabstop>
<tabstop>rbFreeText</tabstop>
<tabstop>genStdMsgsPushButton</tabstop>
<tabstop>tx1</tabstop>
<tabstop>tx2</tabstop>
<tabstop>tx3</tabstop>
<tabstop>tx4</tabstop>
<tabstop>tx5</tabstop>
<tabstop>tx6</tabstop>
<tabstop>txrb1</tabstop>
<tabstop>txrb2</tabstop>
<tabstop>txrb3</tabstop>
<tabstop>txrb4</tabstop>
<tabstop>txrb5</tabstop>
<tabstop>txrb6</tabstop>
<tabstop>txb1</tabstop>
<tabstop>txb2</tabstop>
<tabstop>txb3</tabstop>
<tabstop>txb4</tabstop>
<tabstop>txb5</tabstop>
<tabstop>txb6</tabstop>
<tabstop>tabWidget</tabstop>
<tabstop>inGain</tabstop>
<tabstop>decodedTextBrowser2</tabstop>
<tabstop>decodedTextBrowser</tabstop>
<tabstop>NBcheckBox</tabstop>
<tabstop>NBslider</tabstop>
</tabstops>
<resources/> <resources/>
<connections> <connections>
<connection> <connection>

View File

@ -1,6 +1,6 @@
[Setup] [Setup]
AppName=wsjtx AppName=wsjtx
AppVerName=wsjtx Version 0.9 r3195 AppVerName=wsjtx Version 0.95 r3226
AppCopyright=Copyright (C) 2001-2013 by Joe Taylor, K1JT AppCopyright=Copyright (C) 2001-2013 by Joe Taylor, K1JT
DefaultDirName=c:\wsjtx DefaultDirName=c:\wsjtx
DefaultGroupName=wsjtx DefaultGroupName=wsjtx
@ -14,6 +14,9 @@ Source: "c:\Users\joe\wsjt\wsjtx_install\afmhot.dat"; DestDir: "{app}";
Source: "c:\Users\joe\wsjt\wsjtx_install\blue.dat"; DestDir: "{app}"; Source: "c:\Users\joe\wsjt\wsjtx_install\blue.dat"; DestDir: "{app}";
Source: "c:\Users\joe\wsjt\wsjtx_install\CALL3.TXT"; DestDir: "{app}"; Flags: onlyifdoesntexist Source: "c:\Users\joe\wsjt\wsjtx_install\CALL3.TXT"; DestDir: "{app}"; Flags: onlyifdoesntexist
Source: "c:\Users\joe\wsjt\QtSupport\*.dll"; DestDir: "{app}"; Flags: onlyifdoesntexist Source: "c:\Users\joe\wsjt\QtSupport\*.dll"; DestDir: "{app}"; Flags: onlyifdoesntexist
Source: "c:\Users\joe\wsjt\wsjtx_install\shortcuts.txt"; DestDir: "{app}"
Source: "c:\Users\joe\wsjt\wsjtx_install\mouse_commands.txt"; DestDir: "{app}"
Source: "c:\Users\joe\wsjt\wsjtx_install\save\Samples\130228_2158.wav"; DestDir: "{app}\save\Samples"; Source: "c:\Users\joe\wsjt\wsjtx_install\save\Samples\130228_2158.wav"; DestDir: "{app}\save\Samples";
[Icons] [Icons]

View File

@ -1,46 +1,51 @@
WSJT-X ChangeLog WSJT-X ChangeLog
------------------------------------------------------------------ ------------------------------------------------------------------
WSJT-X is in an active stage of development. It's likely that in We are getting close to a stable "Version 1.0" release of WSJT-X. At
coming weeks there will be frequent updates with new features as well that point program features will be frozen temporarily while we
as bug fixes. User input is greatly appreciated. The best place for concentrate on any necessary bug fixes. If you have bug reports on
suggestions, bug reports, and requests for help is version 0.95 r3226, or very important feature requests, send them to
wsjtgroup@yahoogroups.com, which you are welcome to join. wsjtgroup@yahoogroups.com now!
April 25, 2013: v0.9, r3219 April 25, 2013: v0.95, r3226
--------------------------- ----------------------------
1. Bi-directionsl CAT control re-established using calls to hamlib 1. Bi-directionsl CAT control re-established using calls to hamlib
functions. Display dial frequency highlighted with red background if functions. Display dial frequency highlighted with red background if
frequency differs from nominal for the selected band by more than 10 frequency differs from nominal for the selected band by more than 10
kHz. (Is there a more useful or logical condition to flag?) CAT kHz. (Is there a more useful or logical condition to flag?) Mode is
control diagnostics are presently rather rudimentary, we're still set to USB when rig is opened in main window. (Note: CAT control
working on this. diagnostics are presently rather rudimentary, we're still working on
this. Feedback is welcome!)
2. Three new controls on Setup | Configuration screen: 2. New controls on Setup | Configuration screen:
- RTS/DTR OFF -- needed by K2 and maybe other radios - RTS/DTR OFF -- needed by K2 and maybe other radios
- Data / Mic -- select CAT-control PTT type
- Test CAT Control -- try settings before returning to main screen - Test CAT Control -- try settings before returning to main screen
- Test PTT -- try settings for toggling PTT On/Off - Test PTT -- try settings for toggling PTT On/Off
3. Option "Setup | Advanced | Allow multiple instances" enables the 3. Help menu now provides displays of Keyboard Shortcuts (quick access
via F3) and Special Mouse Commands (F4).
4. Option "Setup | Advanced | Allow multiple instances" enables the
use of more than one instance of WSJT-X. (The program must be use of more than one instance of WSJT-X. (The program must be
copied and run from different directories.) copied and run from different directories.)
4. Posts to PSK Reporter are suppressed if band was changed during the 5. Posts to PSK Reporter are suppressed if band was changed during the
reception period. reception period.
5. Tune button On/Off action was improved. 6. Tune button On/Off action was improved.
6. Improved inter-process communication between WSJT-X and JT-Alert-X. 7. Improved inter-process communication between WSJT-X and JT-Alert-X.
7. Better interaction between "Report" spinner control and Tx messages. 8. Better interaction between "Report" spinner control and Tx messages.
8. Removed the NB checkbox and slider. (Has anyone found these useful?) 9. Removed the NB checkbox and slider. (Has anyone found these useful?)
9. New buttons on main window: "Tx=Rx" sets Tx frequency to current Rx 10. New buttons on main window: "Tx=Rx" sets Tx frequency to current Rx
frequency; "Rx=Tx" does the opposite. frequency; "Rx=Tx" does the opposite.
10. Finally: a bug causing occasional, seemingly unpredictable program 11. Finally: a bug causing occasional, seemingly unpredictable program
crashes has been fixed. crashes has been fixed.
April 17, 2013: v0.9, r3195 April 17, 2013: v0.9, r3195