2020-09-12 05:07:15 +08:00
# include "preferences.h"
# include "ui_preferencesdialog.h"
# include <QSettings>
# include <QPushButton>
# include <QMessageBox>
# include <map>
2020-11-12 02:13:53 +08:00
# include <QDebug>
2020-12-18 22:03:01 +08:00
# include "CustomWidgets/informationbox.h"
2020-09-12 05:07:15 +08:00
using namespace std ;
2020-10-23 03:12:33 +08:00
Preferences Preferences : : instance ;
2020-09-12 05:07:15 +08:00
PreferencesDialog : : PreferencesDialog ( Preferences * pref , QWidget * parent ) :
QDialog ( parent ) ,
ui ( new Ui : : PreferencesDialog ) ,
p ( pref )
{
ui - > setupUi ( this ) ;
// Setup GUI connections and adjustments
// Startup page
connect ( ui - > StartupSweepLastUsed , & QPushButton : : clicked , [ = ] ( ) {
ui - > StartupSweepStart - > setEnabled ( false ) ;
ui - > StartupSweepStop - > setEnabled ( false ) ;
ui - > StartupSweepPoints - > setEnabled ( false ) ;
ui - > StartupSweepLevel - > setEnabled ( false ) ;
ui - > StartupSweepBandwidth - > setEnabled ( false ) ;
2020-10-23 17:39:07 +08:00
ui - > StartupSweepAveraging - > setEnabled ( false ) ;
2020-10-22 23:13:36 +08:00
ui - > StartupGeneratorFrequency - > setEnabled ( false ) ;
ui - > StartupGeneratorLevel - > setEnabled ( false ) ;
ui - > StartupSAStart - > setEnabled ( false ) ;
ui - > StartupSAStop - > setEnabled ( false ) ;
ui - > StartupSARBW - > setEnabled ( false ) ;
ui - > StartupSAWindow - > setEnabled ( false ) ;
ui - > StartupSADetector - > setEnabled ( false ) ;
2020-10-23 17:39:07 +08:00
ui - > StartupSAAveraging - > setEnabled ( false ) ;
2020-10-22 23:13:36 +08:00
ui - > StartupSASignalID - > setEnabled ( false ) ;
2020-09-12 05:07:15 +08:00
} ) ;
connect ( ui - > StartupSweepDefault , & QPushButton : : clicked , [ = ] ( ) {
ui - > StartupSweepStart - > setEnabled ( true ) ;
ui - > StartupSweepStop - > setEnabled ( true ) ;
ui - > StartupSweepPoints - > setEnabled ( true ) ;
ui - > StartupSweepLevel - > setEnabled ( true ) ;
ui - > StartupSweepBandwidth - > setEnabled ( true ) ;
2020-10-23 17:39:07 +08:00
ui - > StartupSweepAveraging - > setEnabled ( true ) ;
2020-10-22 23:13:36 +08:00
ui - > StartupGeneratorFrequency - > setEnabled ( true ) ;
ui - > StartupGeneratorLevel - > setEnabled ( true ) ;
ui - > StartupSAStart - > setEnabled ( true ) ;
ui - > StartupSAStop - > setEnabled ( true ) ;
ui - > StartupSARBW - > setEnabled ( true ) ;
ui - > StartupSAWindow - > setEnabled ( true ) ;
ui - > StartupSADetector - > setEnabled ( true ) ;
2020-10-23 17:39:07 +08:00
ui - > StartupSAAveraging - > setEnabled ( true ) ;
2020-10-22 23:13:36 +08:00
ui - > StartupSASignalID - > setEnabled ( true ) ;
2020-09-12 05:07:15 +08:00
} ) ;
ui - > StartupSweepStart - > setUnit ( " Hz " ) ;
ui - > StartupSweepStart - > setPrefixes ( " kMG " ) ;
ui - > StartupSweepStop - > setUnit ( " Hz " ) ;
ui - > StartupSweepStop - > setPrefixes ( " kMG " ) ;
ui - > StartupSweepBandwidth - > setUnit ( " Hz " ) ;
ui - > StartupSweepBandwidth - > setPrefixes ( " k " ) ;
2020-10-22 23:13:36 +08:00
ui - > StartupGeneratorFrequency - > setUnit ( " Hz " ) ;
ui - > StartupGeneratorFrequency - > setPrefixes ( " kMG " ) ;
ui - > StartupSAStart - > setUnit ( " Hz " ) ;
ui - > StartupSAStart - > setPrefixes ( " kMG " ) ;
ui - > StartupSAStop - > setUnit ( " Hz " ) ;
ui - > StartupSAStop - > setPrefixes ( " kMG " ) ;
ui - > StartupSARBW - > setUnit ( " Hz " ) ;
ui - > StartupSARBW - > setPrefixes ( " k " ) ;
2020-09-12 05:07:15 +08:00
2020-11-07 20:22:10 +08:00
// Acquisition page
ui - > AcquisitionDFTlimitRBW - > setUnit ( " Hz " ) ;
ui - > AcquisitionDFTlimitRBW - > setPrefixes ( " k " ) ;
connect ( ui - > AcquisitionUseDFT , & QCheckBox : : toggled , [ = ] ( bool enabled ) {
ui - > AcquisitionDFTlimitRBW - > setEnabled ( enabled ) ;
} ) ;
2021-04-11 18:33:37 +08:00
// General page
if ( p - > TCPoverride ) {
ui - > GeneralSCPIPort - > setEnabled ( false ) ;
ui - > GeneralSCPIEnabled - > setEnabled ( false ) ;
}
2021-05-15 02:34:23 +08:00
connect ( ui - > GeneralMarkerDataGraph , & QCheckBox : : toggled , [ = ] ( bool enabled ) {
ui - > GeneralMarkerDataGraphAll - > setEnabled ( enabled ) ;
} ) ;
2020-09-12 05:07:15 +08:00
// Page selection
connect ( ui - > treeWidget , & QTreeWidget : : currentItemChanged , [ = ] ( QTreeWidgetItem * current , QTreeWidgetItem * ) {
auto name = current - > text ( 0 ) ;
for ( int i = 0 ; i < ui - > pageWidget - > count ( ) ; i + + ) {
auto w = ui - > pageWidget - > widget ( i ) ;
if ( name = = w - > objectName ( ) ) {
// found the correct page, set to front
ui - > pageWidget - > setCurrentWidget ( w ) ;
break ;
}
}
} ) ;
// Reset and OK action
connect ( ui - > buttonBox - > button ( QDialogButtonBox : : RestoreDefaults ) , & QPushButton : : clicked , [ = ] ( ) {
if ( QMessageBox : : question ( this , " Restore defaults? " , " Do you really want to set all preferences to their default values? " ) = = QMessageBox : : StandardButton : : Yes ) {
p - > setDefault ( ) ;
setInitialGUIState ( ) ;
}
} ) ;
connect ( ui - > buttonBox - > button ( QDialogButtonBox : : Ok ) , & QPushButton : : clicked , [ = ] ( ) {
// apply GUI state to settings
p - > Startup . ConnectToFirstDevice = ui - > StartupAutoconnect - > isChecked ( ) ;
p - > Startup . RememberSweepSettings = ui - > StartupSweepLastUsed - > isChecked ( ) ;
p - > Startup . DefaultSweep . start = ui - > StartupSweepStart - > value ( ) ;
p - > Startup . DefaultSweep . stop = ui - > StartupSweepStop - > value ( ) ;
p - > Startup . DefaultSweep . bandwidth = ui - > StartupSweepBandwidth - > value ( ) ;
p - > Startup . DefaultSweep . points = ui - > StartupSweepPoints - > value ( ) ;
p - > Startup . DefaultSweep . excitation = ui - > StartupSweepLevel - > value ( ) ;
2020-10-23 17:39:07 +08:00
p - > Startup . DefaultSweep . averaging = ui - > StartupSweepAveraging - > value ( ) ;
2020-10-22 23:13:36 +08:00
p - > Startup . Generator . frequency = ui - > StartupGeneratorFrequency - > value ( ) ;
p - > Startup . Generator . level = ui - > StartupGeneratorLevel - > value ( ) ;
p - > Startup . SA . start = ui - > StartupSAStart - > value ( ) ;
p - > Startup . SA . stop = ui - > StartupSAStop - > value ( ) ;
p - > Startup . SA . RBW = ui - > StartupSARBW - > value ( ) ;
p - > Startup . SA . window = ui - > StartupSAWindow - > currentIndex ( ) ;
p - > Startup . SA . detector = ui - > StartupSADetector - > currentIndex ( ) ;
p - > Startup . SA . signalID = ui - > StartupSASignalID - > isChecked ( ) ;
2020-09-16 05:22:08 +08:00
p - > Acquisition . alwaysExciteBothPorts = ui - > AcquisitionAlwaysExciteBoth - > isChecked ( ) ;
2020-09-20 16:13:06 +08:00
p - > Acquisition . suppressPeaks = ui - > AcquisitionSuppressPeaks - > isChecked ( ) ;
2020-12-18 22:03:01 +08:00
p - > Acquisition . harmonicMixing = ui - > AcquisitionUseHarmonic - > isChecked ( ) ;
2020-11-07 20:22:10 +08:00
p - > Acquisition . useDFTinSAmode = ui - > AcquisitionUseDFT - > isChecked ( ) ;
p - > Acquisition . RBWLimitForDFT = ui - > AcquisitionDFTlimitRBW - > value ( ) ;
2020-10-23 03:12:33 +08:00
p - > General . graphColors . background = ui - > GeneralGraphBackground - > getColor ( ) ;
p - > General . graphColors . axis = ui - > GeneralGraphAxis - > getColor ( ) ;
p - > General . graphColors . divisions = ui - > GeneralGraphDivisions - > getColor ( ) ;
2021-05-15 02:34:23 +08:00
p - > General . markerDefault . showDataOnGraphs = ui - > GeneralMarkerDataGraph - > isChecked ( ) ;
p - > General . markerDefault . showAllData = ui - > GeneralMarkerDataGraphAll - > isChecked ( ) ;
2021-04-11 18:33:37 +08:00
p - > General . SCPI . enabled = ui - > GeneralSCPIEnabled - > isChecked ( ) ;
p - > General . SCPI . port = ui - > GeneralSCPIPort - > value ( ) ;
2020-09-12 05:07:15 +08:00
accept ( ) ;
} ) ;
setInitialGUIState ( ) ;
2020-12-18 22:03:01 +08:00
connect ( ui - > AcquisitionUseHarmonic , & QCheckBox : : toggled , [ = ] ( bool enabled ) {
if ( enabled ) {
2020-12-19 01:52:38 +08:00
InformationBox : : ShowMessage ( " Harmonic Mixing " , " When harmonic mixing is enabled, the frequency range of the VNA is (theoretically) extended up to 18GHz "
2020-12-18 22:03:01 +08:00
" by using higher harmonics of the source signal as well as the 1.LO. The fundamental frequency is still present "
" in the output signal and might disturb the measurement if the DUT is not linear. Performance above 6GHz is not "
2020-12-19 01:52:38 +08:00
" specified and generally not very good. However, this mode might be useful if the signal of interest is just above "
" 6GHz (typically useful values up to 7-8GHz). Performance below 6GHz is not affected by this setting " ) ;
2020-12-18 22:03:01 +08:00
}
} ) ;
2020-09-12 05:07:15 +08:00
}
PreferencesDialog : : ~ PreferencesDialog ( )
{
delete ui ;
}
void PreferencesDialog : : setInitialGUIState ( )
{
ui - > StartupAutoconnect - > setChecked ( p - > Startup . ConnectToFirstDevice ) ;
if ( p - > Startup . RememberSweepSettings ) {
ui - > StartupSweepLastUsed - > click ( ) ;
} else {
ui - > StartupSweepDefault - > click ( ) ;
}
ui - > StartupSweepStart - > setValueQuiet ( p - > Startup . DefaultSweep . start ) ;
ui - > StartupSweepStop - > setValueQuiet ( p - > Startup . DefaultSweep . stop ) ;
ui - > StartupSweepBandwidth - > setValueQuiet ( p - > Startup . DefaultSweep . bandwidth ) ;
ui - > StartupSweepPoints - > setValue ( p - > Startup . DefaultSweep . points ) ;
ui - > StartupSweepLevel - > setValue ( p - > Startup . DefaultSweep . excitation ) ;
2020-10-22 23:13:36 +08:00
ui - > StartupGeneratorFrequency - > setValue ( p - > Startup . Generator . frequency ) ;
ui - > StartupGeneratorLevel - > setValue ( p - > Startup . Generator . level ) ;
2020-10-23 17:39:07 +08:00
ui - > StartupSweepAveraging - > setValue ( p - > Startup . DefaultSweep . averaging ) ;
2020-10-22 23:13:36 +08:00
ui - > StartupSAStart - > setValue ( p - > Startup . SA . start ) ;
ui - > StartupSAStop - > setValue ( p - > Startup . SA . stop ) ;
ui - > StartupSARBW - > setValue ( p - > Startup . SA . RBW ) ;
ui - > StartupSAWindow - > setCurrentIndex ( p - > Startup . SA . window ) ;
ui - > StartupSADetector - > setCurrentIndex ( p - > Startup . SA . detector ) ;
2020-10-23 17:39:07 +08:00
ui - > StartupSAAveraging - > setValue ( p - > Startup . SA . averaging ) ;
2020-10-22 23:13:36 +08:00
ui - > StartupSASignalID - > setChecked ( p - > Startup . SA . signalID ) ;
2020-09-16 05:22:08 +08:00
ui - > AcquisitionAlwaysExciteBoth - > setChecked ( p - > Acquisition . alwaysExciteBothPorts ) ;
2020-09-20 16:13:06 +08:00
ui - > AcquisitionSuppressPeaks - > setChecked ( p - > Acquisition . suppressPeaks ) ;
2020-12-18 22:03:01 +08:00
ui - > AcquisitionUseHarmonic - > setChecked ( p - > Acquisition . harmonicMixing ) ;
2020-11-07 20:22:10 +08:00
ui - > AcquisitionUseDFT - > setChecked ( p - > Acquisition . useDFTinSAmode ) ;
ui - > AcquisitionDFTlimitRBW - > setValue ( p - > Acquisition . RBWLimitForDFT ) ;
2020-10-23 03:12:33 +08:00
ui - > GeneralGraphBackground - > setColor ( p - > General . graphColors . background ) ;
ui - > GeneralGraphAxis - > setColor ( p - > General . graphColors . axis ) ;
ui - > GeneralGraphDivisions - > setColor ( p - > General . graphColors . divisions ) ;
2021-05-15 02:34:23 +08:00
ui - > GeneralMarkerDataGraph - > setChecked ( p - > General . markerDefault . showDataOnGraphs ) ;
ui - > GeneralMarkerDataGraphAll - > setChecked ( p - > General . markerDefault . showAllData ) ;
2021-04-11 18:33:37 +08:00
ui - > GeneralSCPIEnabled - > setChecked ( p - > General . SCPI . enabled ) ;
ui - > GeneralSCPIPort - > setValue ( p - > General . SCPI . port ) ;
2020-12-01 05:27:38 +08:00
QTreeWidgetItem * item = ui - > treeWidget - > topLevelItem ( 0 ) ;
if ( item ! = nullptr ) {
ui - > treeWidget - > setCurrentItem ( item ) ; // visually select first item
}
2020-09-12 05:07:15 +08:00
}
void Preferences : : load ( )
{
QSettings settings ;
// load settings, using default values if not present
2020-11-12 02:13:53 +08:00
qInfo ( ) < < " Loading preferences " ;
2020-09-12 05:07:15 +08:00
for ( auto d : descr ) {
try {
d . var . setValue ( settings . value ( d . name , d . def ) ) ;
2020-11-12 02:13:53 +08:00
qDebug ( ) < < " Setting " < < d . name < < " is set to " < < d . var . value ( ) ;
2020-09-12 05:07:15 +08:00
} catch ( const exception & e ) {
d . var . setValue ( d . def ) ;
2020-11-12 02:13:53 +08:00
qDebug ( ) < < " Setting " < < d . name < < " reset to default: " < < d . def ;
2020-09-12 05:07:15 +08:00
}
}
}
void Preferences : : store ( )
{
QSettings settings ;
// store settings
for ( auto d : descr ) {
settings . setValue ( d . name , d . var . value ( ) ) ;
}
}
void Preferences : : edit ( )
{
auto dialog = new PreferencesDialog ( this ) ;
dialog - > exec ( ) ;
}
void Preferences : : setDefault ( )
{
for ( auto d : descr ) {
d . var . setValue ( d . def ) ;
}
}