Add --settings option for settings file

merge-requests/4/head
Phil Taylor 2021-05-20 19:24:40 +01:00
rodzic b5d6063269
commit 3af7b61d01
3 zmienionych plików z 221 dodań i 191 usunięć

Wyświetl plik

@ -33,11 +33,11 @@ int main(int argc, char *argv[])
#else #else
QString logFilename= QStandardPaths::standardLocations(QStandardPaths::TempLocation)[0] + "/wfview.log"; QString logFilename= QStandardPaths::standardLocations(QStandardPaths::TempLocation)[0] + "/wfview.log";
#endif #endif
QString settingsFile = NULL;
QString currentArg; QString currentArg;
const QString helpText = QString("\nUsage: -p --port /dev/port, -h --host remotehostname, -c --civ 0xAddr, -l --logfile filename.log, -d --debug\n"); // TODO... const QString helpText = QString("\nUsage: -p --port /dev/port, -h --host remotehostname, -c --civ 0xAddr, -l --logfile filename.log, -s --settings filename.ini, -d --debug\n"); // TODO...
for(int c=1; c<argc; c++) for(int c=1; c<argc; c++)
{ {
@ -52,7 +52,7 @@ int main(int argc, char *argv[])
c += 1; c += 1;
} }
} }
else if((currentArg == "-d") || (currentArg == "--debug")) else if ((currentArg == "-d") || (currentArg == "--debug"))
{ {
debugMode = true; debugMode = true;
} }
@ -79,7 +79,16 @@ int main(int argc, char *argv[])
logFilename = argv[c + 1]; logFilename = argv[c + 1];
c += 1; c += 1;
} }
} else if ((currentArg == "--help")) }
else if ((currentArg == "-s") || (currentArg == "--settings"))
{
if (argc > c)
{
settingsFile = argv[c + 1];
c += 1;
}
}
else if ((currentArg == "--help"))
{ {
std::cout << helpText.toStdString(); std::cout << helpText.toStdString();
return 0; return 0;
@ -106,7 +115,7 @@ int main(int argc, char *argv[])
qDebug(logSystem()) << "remote host as set by parser: " << hostCL; qDebug(logSystem()) << "remote host as set by parser: " << hostCL;
qDebug(logSystem()) << "CIV as set by parser: " << civCL; qDebug(logSystem()) << "CIV as set by parser: " << civCL;
a.setWheelScrollLines(1); // one line per wheel click a.setWheelScrollLines(1); // one line per wheel click
wfmain w( serialPortCL, hostCL); wfmain w( serialPortCL, hostCL, settingsFile);
w.show(); w.show();

Wyświetl plik

@ -8,7 +8,7 @@
// This code is copyright 2017-2020 Elliott H. Liggett // This code is copyright 2017-2020 Elliott H. Liggett
// All rights reserved // All rights reserved
wfmain::wfmain(const QString serialPortCL, const QString hostCL, QWidget *parent ) : wfmain::wfmain(const QString serialPortCL, const QString hostCL, const QString settingsFile, QWidget *parent ) :
QMainWindow(parent), QMainWindow(parent),
ui(new Ui::wfmain) ui(new Ui::wfmain)
{ {
@ -228,6 +228,26 @@ wfmain::wfmain(const QString serialPortCL, const QString hostCL, QWidget *parent
setDefaultColors(); // set of UI colors with defaults populated setDefaultColors(); // set of UI colors with defaults populated
setDefPrefs(); // other default options setDefPrefs(); // other default options
if (settingsFile.isNull()) {
settings = new QSettings();
}
else
{
QString file = settingsFile;
QFile info(settingsFile);
auto path = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
if (!QFileInfo(info).isAbsolute())
{
if (path.isEmpty())
{
path = QDir::homePath();
}
path = path + "/";
file = info.fileName();
}
settings = new QSettings(path + file, QSettings::Format::IniFormat);
}
loadSettings(); // Look for saved preferences loadSettings(); // Look for saved preferences
setTuningSteps(); // TODO: Combine into preferences setTuningSteps(); // TODO: Combine into preferences
@ -633,6 +653,7 @@ wfmain::~wfmain()
} }
delete rpt; delete rpt;
delete ui; delete ui;
delete settings;
} }
void wfmain::closeEvent(QCloseEvent *event) void wfmain::closeEvent(QCloseEvent *event)
@ -890,60 +911,60 @@ void wfmain::setDefPrefs()
void wfmain::loadSettings() void wfmain::loadSettings()
{ {
qInfo(logSystem()) << "Loading settings from " << settings.fileName(); qInfo(logSystem()) << "Loading settings from " << settings->fileName();
// Basic things to load: // Basic things to load:
// UI: (full screen, dark theme, draw peaks, colors, etc) // UI: (full screen, dark theme, draw peaks, colors, etc)
settings.beginGroup("Interface"); settings->beginGroup("Interface");
prefs.useFullScreen = settings.value("UseFullScreen", defPrefs.useFullScreen).toBool(); prefs.useFullScreen = settings->value("UseFullScreen", defPrefs.useFullScreen).toBool();
prefs.useDarkMode = settings.value("UseDarkMode", defPrefs.useDarkMode).toBool(); prefs.useDarkMode = settings->value("UseDarkMode", defPrefs.useDarkMode).toBool();
prefs.useSystemTheme = settings.value("UseSystemTheme", defPrefs.useSystemTheme).toBool(); prefs.useSystemTheme = settings->value("UseSystemTheme", defPrefs.useSystemTheme).toBool();
prefs.drawPeaks = settings.value("DrawPeaks", defPrefs.drawPeaks).toBool(); prefs.drawPeaks = settings->value("DrawPeaks", defPrefs.drawPeaks).toBool();
prefs.stylesheetPath = settings.value("StylesheetPath", defPrefs.stylesheetPath).toString(); prefs.stylesheetPath = settings->value("StylesheetPath", defPrefs.stylesheetPath).toString();
ui->splitter->restoreState(settings.value("splitter").toByteArray()); ui->splitter->restoreState(settings->value("splitter").toByteArray());
restoreGeometry(settings.value("windowGeometry").toByteArray()); restoreGeometry(settings->value("windowGeometry").toByteArray());
restoreState(settings.value("windowState").toByteArray()); restoreState(settings->value("windowState").toByteArray());
setWindowState(Qt::WindowActive); // Works around QT bug to returns window+keyboard focus. setWindowState(Qt::WindowActive); // Works around QT bug to returns window+keyboard focus.
settings.endGroup(); settings->endGroup();
// Load color schemes: // Load color schemes:
// Per this bug: https://forum.qt.io/topic/24725/solved-qvariant-will-drop-alpha-value-when-save-qcolor/5 // Per this bug: https://forum.qt.io/topic/24725/solved-qvariant-will-drop-alpha-value-when-save-qcolor/5
// the alpha channel is dropped when converting raw qvariant of QColor. Therefore, we are storing as unsigned int and converting back. // the alpha channel is dropped when converting raw qvariant of QColor. Therefore, we are storing as unsigned int and converting back.
settings.beginGroup("DarkColors"); settings->beginGroup("DarkColors");
prefs.colorScheme.Dark_PlotBackground = QColor::fromRgba(settings.value("Dark_PlotBackground", defaultColors.Dark_PlotBackground.rgba()).toUInt()); prefs.colorScheme.Dark_PlotBackground = QColor::fromRgba(settings->value("Dark_PlotBackground", defaultColors.Dark_PlotBackground.rgba()).toUInt());
prefs.colorScheme.Dark_PlotAxisPen = QColor::fromRgba(settings.value("Dark_PlotAxisPen", defaultColors.Dark_PlotAxisPen.rgba()).toUInt()); prefs.colorScheme.Dark_PlotAxisPen = QColor::fromRgba(settings->value("Dark_PlotAxisPen", defaultColors.Dark_PlotAxisPen.rgba()).toUInt());
prefs.colorScheme.Dark_PlotLegendTextColor = QColor::fromRgba(settings.value("Dark_PlotLegendTextColor", defaultColors.Dark_PlotLegendTextColor.rgba()).toUInt()); prefs.colorScheme.Dark_PlotLegendTextColor = QColor::fromRgba(settings->value("Dark_PlotLegendTextColor", defaultColors.Dark_PlotLegendTextColor.rgba()).toUInt());
prefs.colorScheme.Dark_PlotLegendBorderPen = QColor::fromRgba(settings.value("Dark_PlotLegendBorderPen", defaultColors.Dark_PlotLegendBorderPen.rgba()).toUInt()); prefs.colorScheme.Dark_PlotLegendBorderPen = QColor::fromRgba(settings->value("Dark_PlotLegendBorderPen", defaultColors.Dark_PlotLegendBorderPen.rgba()).toUInt());
prefs.colorScheme.Dark_PlotLegendBrush = QColor::fromRgba(settings.value("Dark_PlotLegendBrush", defaultColors.Dark_PlotLegendBrush.rgba()).toUInt()); prefs.colorScheme.Dark_PlotLegendBrush = QColor::fromRgba(settings->value("Dark_PlotLegendBrush", defaultColors.Dark_PlotLegendBrush.rgba()).toUInt());
prefs.colorScheme.Dark_PlotTickLabel = QColor::fromRgba(settings.value("Dark_PlotTickLabel", defaultColors.Dark_PlotTickLabel.rgba()).toUInt()); prefs.colorScheme.Dark_PlotTickLabel = QColor::fromRgba(settings->value("Dark_PlotTickLabel", defaultColors.Dark_PlotTickLabel.rgba()).toUInt());
prefs.colorScheme.Dark_PlotBasePen = QColor::fromRgba(settings.value("Dark_PlotBasePen", defaultColors.Dark_PlotBasePen.rgba()).toUInt()); prefs.colorScheme.Dark_PlotBasePen = QColor::fromRgba(settings->value("Dark_PlotBasePen", defaultColors.Dark_PlotBasePen.rgba()).toUInt());
prefs.colorScheme.Dark_PlotTickPen = QColor::fromRgba(settings.value("Dark_PlotTickPen", defaultColors.Dark_PlotTickPen.rgba()).toUInt()); prefs.colorScheme.Dark_PlotTickPen = QColor::fromRgba(settings->value("Dark_PlotTickPen", defaultColors.Dark_PlotTickPen.rgba()).toUInt());
prefs.colorScheme.Dark_PeakPlotLine = QColor::fromRgba(settings.value("Dark_PeakPlotLine", defaultColors.Dark_PeakPlotLine.rgba()).toUInt()); prefs.colorScheme.Dark_PeakPlotLine = QColor::fromRgba(settings->value("Dark_PeakPlotLine", defaultColors.Dark_PeakPlotLine.rgba()).toUInt());
prefs.colorScheme.Dark_TuningLine = QColor::fromRgba(settings.value("Dark_TuningLine", defaultColors.Dark_TuningLine.rgba()).toUInt()); prefs.colorScheme.Dark_TuningLine = QColor::fromRgba(settings->value("Dark_TuningLine", defaultColors.Dark_TuningLine.rgba()).toUInt());
settings.endGroup(); settings->endGroup();
settings.beginGroup("LightColors"); settings->beginGroup("LightColors");
prefs.colorScheme.Light_PlotBackground = QColor::fromRgba(settings.value("Light_PlotBackground", defaultColors.Light_PlotBackground.rgba()).toUInt()); prefs.colorScheme.Light_PlotBackground = QColor::fromRgba(settings->value("Light_PlotBackground", defaultColors.Light_PlotBackground.rgba()).toUInt());
prefs.colorScheme.Light_PlotAxisPen = QColor::fromRgba(settings.value("Light_PlotAxisPen", defaultColors.Light_PlotAxisPen.rgba()).toUInt()); prefs.colorScheme.Light_PlotAxisPen = QColor::fromRgba(settings->value("Light_PlotAxisPen", defaultColors.Light_PlotAxisPen.rgba()).toUInt());
prefs.colorScheme.Light_PlotLegendTextColor = QColor::fromRgba(settings.value("Light_PlotLegendTextColo", defaultColors.Light_PlotLegendTextColor.rgba()).toUInt()); prefs.colorScheme.Light_PlotLegendTextColor = QColor::fromRgba(settings->value("Light_PlotLegendTextColo", defaultColors.Light_PlotLegendTextColor.rgba()).toUInt());
prefs.colorScheme.Light_PlotLegendBorderPen = QColor::fromRgba(settings.value("Light_PlotLegendBorderPen", defaultColors.Light_PlotLegendBorderPen.rgba()).toUInt()); prefs.colorScheme.Light_PlotLegendBorderPen = QColor::fromRgba(settings->value("Light_PlotLegendBorderPen", defaultColors.Light_PlotLegendBorderPen.rgba()).toUInt());
prefs.colorScheme.Light_PlotLegendBrush = QColor::fromRgba(settings.value("Light_PlotLegendBrush", defaultColors.Light_PlotLegendBrush.rgba()).toUInt()); prefs.colorScheme.Light_PlotLegendBrush = QColor::fromRgba(settings->value("Light_PlotLegendBrush", defaultColors.Light_PlotLegendBrush.rgba()).toUInt());
prefs.colorScheme.Light_PlotTickLabel = QColor::fromRgba(settings.value("Light_PlotTickLabel", defaultColors.Light_PlotTickLabel.rgba()).toUInt()); prefs.colorScheme.Light_PlotTickLabel = QColor::fromRgba(settings->value("Light_PlotTickLabel", defaultColors.Light_PlotTickLabel.rgba()).toUInt());
prefs.colorScheme.Light_PlotBasePen = QColor::fromRgba(settings.value("Light_PlotBasePen", defaultColors.Light_PlotBasePen.rgba()).toUInt()); prefs.colorScheme.Light_PlotBasePen = QColor::fromRgba(settings->value("Light_PlotBasePen", defaultColors.Light_PlotBasePen.rgba()).toUInt());
prefs.colorScheme.Light_PlotTickPen = QColor::fromRgba(settings.value("Light_PlotTickPen", defaultColors.Light_PlotTickPen.rgba()).toUInt()); prefs.colorScheme.Light_PlotTickPen = QColor::fromRgba(settings->value("Light_PlotTickPen", defaultColors.Light_PlotTickPen.rgba()).toUInt());
prefs.colorScheme.Light_PeakPlotLine = QColor::fromRgba(settings.value("Light_PeakPlotLine", defaultColors.Light_PeakPlotLine.rgba()).toUInt()); prefs.colorScheme.Light_PeakPlotLine = QColor::fromRgba(settings->value("Light_PeakPlotLine", defaultColors.Light_PeakPlotLine.rgba()).toUInt());
prefs.colorScheme.Light_TuningLine = QColor::fromRgba(settings.value("Light_TuningLine", defaultColors.Light_TuningLine.rgba()).toUInt()); prefs.colorScheme.Light_TuningLine = QColor::fromRgba(settings->value("Light_TuningLine", defaultColors.Light_TuningLine.rgba()).toUInt());
settings.endGroup(); settings->endGroup();
// Radio and Comms: C-IV addr, port to use // Radio and Comms: C-IV addr, port to use
settings.beginGroup("Radio"); settings->beginGroup("Radio");
prefs.radioCIVAddr = (unsigned char) settings.value("RigCIVuInt", defPrefs.radioCIVAddr).toInt(); prefs.radioCIVAddr = (unsigned char) settings->value("RigCIVuInt", defPrefs.radioCIVAddr).toInt();
if(prefs.radioCIVAddr!=0) if(prefs.radioCIVAddr!=0)
{ {
ui->rigCIVManualAddrChk->setChecked(true); ui->rigCIVManualAddrChk->setChecked(true);
@ -955,19 +976,19 @@ void wfmain::loadSettings()
ui->rigCIVManualAddrChk->setChecked(false); ui->rigCIVManualAddrChk->setChecked(false);
ui->rigCIVaddrHexLine->setEnabled(false); ui->rigCIVaddrHexLine->setEnabled(false);
} }
prefs.serialPortRadio = settings.value("SerialPortRadio", defPrefs.serialPortRadio).toString(); prefs.serialPortRadio = settings->value("SerialPortRadio", defPrefs.serialPortRadio).toString();
int serialIndex = ui->serialDeviceListCombo->findText(prefs.serialPortRadio); int serialIndex = ui->serialDeviceListCombo->findText(prefs.serialPortRadio);
if (serialIndex != -1) { if (serialIndex != -1) {
ui->serialDeviceListCombo->setCurrentIndex(serialIndex); ui->serialDeviceListCombo->setCurrentIndex(serialIndex);
} }
prefs.serialPortBaud = (quint32) settings.value("SerialPortBaud", defPrefs.serialPortBaud).toInt(); prefs.serialPortBaud = (quint32) settings->value("SerialPortBaud", defPrefs.serialPortBaud).toInt();
ui->baudRateCombo->blockSignals(true); ui->baudRateCombo->blockSignals(true);
ui->baudRateCombo->setCurrentIndex( ui->baudRateCombo->findData(prefs.serialPortBaud) ); ui->baudRateCombo->setCurrentIndex( ui->baudRateCombo->findData(prefs.serialPortBaud) );
ui->baudRateCombo->blockSignals(false); ui->baudRateCombo->blockSignals(false);
prefs.virtualSerialPort = settings.value("VirtualSerialPort", defPrefs.virtualSerialPort).toString(); prefs.virtualSerialPort = settings->value("VirtualSerialPort", defPrefs.virtualSerialPort).toString();
int vspIndex = ui->vspCombo->findText(prefs.virtualSerialPort); int vspIndex = ui->vspCombo->findText(prefs.virtualSerialPort);
if (vspIndex != -1) { if (vspIndex != -1) {
ui->vspCombo->setCurrentIndex(vspIndex); ui->vspCombo->setCurrentIndex(vspIndex);
@ -979,18 +1000,18 @@ void wfmain::loadSettings()
} }
settings.endGroup(); settings->endGroup();
// Misc. user settings (enable PTT, draw peaks, etc) // Misc. user settings (enable PTT, draw peaks, etc)
settings.beginGroup("Controls"); settings->beginGroup("Controls");
prefs.enablePTT = settings.value("EnablePTT", defPrefs.enablePTT).toBool(); prefs.enablePTT = settings->value("EnablePTT", defPrefs.enablePTT).toBool();
ui->pttEnableChk->setChecked(prefs.enablePTT); ui->pttEnableChk->setChecked(prefs.enablePTT);
prefs.niceTS = settings.value("NiceTS", defPrefs.niceTS).toBool(); prefs.niceTS = settings->value("NiceTS", defPrefs.niceTS).toBool();
settings.endGroup(); settings->endGroup();
settings.beginGroup("LAN"); settings->beginGroup("LAN");
prefs.enableLAN = settings.value("EnableLAN", defPrefs.enableLAN).toBool(); prefs.enableLAN = settings->value("EnableLAN", defPrefs.enableLAN).toBool();
if(prefs.enableLAN) if(prefs.enableLAN)
{ {
ui->baudRateCombo->setEnabled(false); ui->baudRateCombo->setEnabled(false);
@ -1005,38 +1026,38 @@ void wfmain::loadSettings()
ui->lanEnableBtn->setChecked(prefs.enableLAN); ui->lanEnableBtn->setChecked(prefs.enableLAN);
ui->connectBtn->setEnabled(prefs.enableLAN); ui->connectBtn->setEnabled(prefs.enableLAN);
prefs.enableRigCtlD = settings.value("EnableRigCtlD", defPrefs.enableRigCtlD).toBool(); prefs.enableRigCtlD = settings->value("EnableRigCtlD", defPrefs.enableRigCtlD).toBool();
prefs.rigCtlPort = settings.value("RigCtlPort", defPrefs.rigCtlPort).toInt(); prefs.rigCtlPort = settings->value("RigCtlPort", defPrefs.rigCtlPort).toInt();
udpPrefs.ipAddress = settings.value("IPAddress", udpDefPrefs.ipAddress).toString(); udpPrefs.ipAddress = settings->value("IPAddress", udpDefPrefs.ipAddress).toString();
ui->ipAddressTxt->setEnabled(ui->lanEnableBtn->isChecked()); ui->ipAddressTxt->setEnabled(ui->lanEnableBtn->isChecked());
ui->ipAddressTxt->setText(udpPrefs.ipAddress); ui->ipAddressTxt->setText(udpPrefs.ipAddress);
udpPrefs.controlLANPort = settings.value("ControlLANPort", udpDefPrefs.controlLANPort).toInt(); udpPrefs.controlLANPort = settings->value("ControlLANPort", udpDefPrefs.controlLANPort).toInt();
ui->controlPortTxt->setEnabled(ui->lanEnableBtn->isChecked()); ui->controlPortTxt->setEnabled(ui->lanEnableBtn->isChecked());
ui->controlPortTxt->setText(QString("%1").arg(udpPrefs.controlLANPort)); ui->controlPortTxt->setText(QString("%1").arg(udpPrefs.controlLANPort));
udpPrefs.username = settings.value("Username", udpDefPrefs.username).toString(); udpPrefs.username = settings->value("Username", udpDefPrefs.username).toString();
ui->usernameTxt->setEnabled(ui->lanEnableBtn->isChecked()); ui->usernameTxt->setEnabled(ui->lanEnableBtn->isChecked());
ui->usernameTxt->setText(QString("%1").arg(udpPrefs.username)); ui->usernameTxt->setText(QString("%1").arg(udpPrefs.username));
udpPrefs.password = settings.value("Password", udpDefPrefs.password).toString(); udpPrefs.password = settings->value("Password", udpDefPrefs.password).toString();
ui->passwordTxt->setEnabled(ui->lanEnableBtn->isChecked()); ui->passwordTxt->setEnabled(ui->lanEnableBtn->isChecked());
ui->passwordTxt->setText(QString("%1").arg(udpPrefs.password)); ui->passwordTxt->setText(QString("%1").arg(udpPrefs.password));
udpPrefs.audioRXLatency = settings.value("AudioRXLatency", udpDefPrefs.audioRXLatency).toInt(); udpPrefs.audioRXLatency = settings->value("AudioRXLatency", udpDefPrefs.audioRXLatency).toInt();
ui->rxLatencySlider->setEnabled(ui->lanEnableBtn->isChecked()); ui->rxLatencySlider->setEnabled(ui->lanEnableBtn->isChecked());
ui->rxLatencySlider->setValue(udpPrefs.audioRXLatency); ui->rxLatencySlider->setValue(udpPrefs.audioRXLatency);
ui->rxLatencySlider->setTracking(false); // Stop it sending value on every change. ui->rxLatencySlider->setTracking(false); // Stop it sending value on every change.
udpPrefs.audioTXLatency = settings.value("AudioTXLatency", udpDefPrefs.audioTXLatency).toInt(); udpPrefs.audioTXLatency = settings->value("AudioTXLatency", udpDefPrefs.audioTXLatency).toInt();
ui->txLatencySlider->setEnabled(ui->lanEnableBtn->isChecked()); ui->txLatencySlider->setEnabled(ui->lanEnableBtn->isChecked());
ui->txLatencySlider->setValue(udpPrefs.audioTXLatency); ui->txLatencySlider->setValue(udpPrefs.audioTXLatency);
ui->txLatencySlider->setTracking(false); // Stop it sending value on every change. ui->txLatencySlider->setTracking(false); // Stop it sending value on every change.
udpPrefs.audioRXSampleRate = settings.value("AudioRXSampleRate", udpDefPrefs.audioRXSampleRate).toInt(); udpPrefs.audioRXSampleRate = settings->value("AudioRXSampleRate", udpDefPrefs.audioRXSampleRate).toInt();
udpPrefs.audioTXSampleRate = settings.value("AudioTXSampleRate",udpDefPrefs.audioTXSampleRate).toInt(); udpPrefs.audioTXSampleRate = settings->value("AudioTXSampleRate",udpDefPrefs.audioTXSampleRate).toInt();
ui->audioSampleRateCombo->setEnabled(ui->lanEnableBtn->isChecked()); ui->audioSampleRateCombo->setEnabled(ui->lanEnableBtn->isChecked());
int audioSampleRateIndex = ui->audioSampleRateCombo->findText(QString::number(udpDefPrefs.audioRXSampleRate)); int audioSampleRateIndex = ui->audioSampleRateCombo->findText(QString::number(udpDefPrefs.audioRXSampleRate));
if (audioSampleRateIndex != -1) { if (audioSampleRateIndex != -1) {
@ -1051,7 +1072,7 @@ void wfmain::loadSettings()
ui->audioRXCodecCombo->addItem("uLaw 2ch 8bit", 32); ui->audioRXCodecCombo->addItem("uLaw 2ch 8bit", 32);
ui->audioRXCodecCombo->addItem("PCM 2ch 8bit", 8); ui->audioRXCodecCombo->addItem("PCM 2ch 8bit", 8);
udpPrefs.audioRXCodec = settings.value("AudioRXCodec", udpDefPrefs.audioRXCodec).toInt(); udpPrefs.audioRXCodec = settings->value("AudioRXCodec", udpDefPrefs.audioRXCodec).toInt();
ui->audioRXCodecCombo->setEnabled(ui->lanEnableBtn->isChecked()); ui->audioRXCodecCombo->setEnabled(ui->lanEnableBtn->isChecked());
for (int f = 0; f < ui->audioRXCodecCombo->count(); f++) for (int f = 0; f < ui->audioRXCodecCombo->count(); f++)
if (ui->audioRXCodecCombo->itemData(f).toInt() == udpPrefs.audioRXCodec) if (ui->audioRXCodecCombo->itemData(f).toInt() == udpPrefs.audioRXCodec)
@ -1061,13 +1082,13 @@ void wfmain::loadSettings()
ui->audioTXCodecCombo->addItem("LPCM 1ch 8bit", 2); ui->audioTXCodecCombo->addItem("LPCM 1ch 8bit", 2);
ui->audioTXCodecCombo->addItem("uLaw 1ch 8bit", 1); ui->audioTXCodecCombo->addItem("uLaw 1ch 8bit", 1);
udpPrefs.audioTXCodec = settings.value("AudioTXCodec", udpDefPrefs.audioTXCodec).toInt(); udpPrefs.audioTXCodec = settings->value("AudioTXCodec", udpDefPrefs.audioTXCodec).toInt();
ui->audioTXCodecCombo->setEnabled(ui->lanEnableBtn->isChecked()); ui->audioTXCodecCombo->setEnabled(ui->lanEnableBtn->isChecked());
for (int f = 0; f < ui->audioTXCodecCombo->count(); f++) for (int f = 0; f < ui->audioTXCodecCombo->count(); f++)
if (ui->audioTXCodecCombo->itemData(f).toInt() == udpPrefs.audioTXCodec) if (ui->audioTXCodecCombo->itemData(f).toInt() == udpPrefs.audioTXCodec)
ui->audioTXCodecCombo->setCurrentIndex(f); ui->audioTXCodecCombo->setCurrentIndex(f);
udpPrefs.audioOutput = settings.value("AudioOutput", udpDefPrefs.audioOutput).toString(); udpPrefs.audioOutput = settings->value("AudioOutput", udpDefPrefs.audioOutput).toString();
qInfo(logGui()) << "Got Audio Output: " << udpPrefs.audioOutput; qInfo(logGui()) << "Got Audio Output: " << udpPrefs.audioOutput;
//ui->audioOutputCombo->setEnabled(ui->lanEnableBtn->isChecked()); //ui->audioOutputCombo->setEnabled(ui->lanEnableBtn->isChecked());
int audioOutputIndex = ui->audioOutputCombo->findText(udpPrefs.audioOutput); int audioOutputIndex = ui->audioOutputCombo->findText(udpPrefs.audioOutput);
@ -1075,7 +1096,7 @@ void wfmain::loadSettings()
ui->audioOutputCombo->setCurrentIndex(audioOutputIndex); ui->audioOutputCombo->setCurrentIndex(audioOutputIndex);
} }
udpPrefs.audioInput = settings.value("AudioInput", udpDefPrefs.audioInput).toString(); udpPrefs.audioInput = settings->value("AudioInput", udpDefPrefs.audioInput).toString();
qInfo(logGui()) << "Got Audio Input: " << udpPrefs.audioInput; qInfo(logGui()) << "Got Audio Input: " << udpPrefs.audioInput;
//ui->audioInputCombo->setEnabled(ui->lanEnableBtn->isChecked()); //ui->audioInputCombo->setEnabled(ui->lanEnableBtn->isChecked());
int audioInputIndex = ui->audioInputCombo->findText(udpPrefs.audioInput); int audioInputIndex = ui->audioInputCombo->findText(udpPrefs.audioInput);
@ -1083,34 +1104,34 @@ void wfmain::loadSettings()
ui->audioInputCombo->setCurrentIndex(audioInputIndex); ui->audioInputCombo->setCurrentIndex(audioInputIndex);
} }
udpPrefs.resampleQuality = settings.value("ResampleQuality", udpDefPrefs.resampleQuality).toInt(); udpPrefs.resampleQuality = settings->value("ResampleQuality", udpDefPrefs.resampleQuality).toInt();
udpPrefs.clientName = settings.value("ClientName", udpDefPrefs.clientName).toString(); udpPrefs.clientName = settings->value("ClientName", udpDefPrefs.clientName).toString();
settings.endGroup(); settings->endGroup();
settings.beginGroup("Server"); settings->beginGroup("Server");
serverConfig.enabled = settings.value("ServerEnabled", false).toBool(); serverConfig.enabled = settings->value("ServerEnabled", false).toBool();
serverConfig.controlPort = settings.value("ServerControlPort", 50001).toInt(); serverConfig.controlPort = settings->value("ServerControlPort", 50001).toInt();
serverConfig.civPort = settings.value("ServerCivPort", 50002).toInt(); serverConfig.civPort = settings->value("ServerCivPort", 50002).toInt();
serverConfig.audioPort = settings.value("ServerAudioPort", 50003).toInt(); serverConfig.audioPort = settings->value("ServerAudioPort", 50003).toInt();
int numUsers = settings.value("ServerNumUsers", 2).toInt(); int numUsers = settings->value("ServerNumUsers", 2).toInt();
serverConfig.users.clear(); serverConfig.users.clear();
for (int f = 0; f < numUsers; f++) for (int f = 0; f < numUsers; f++)
{ {
SERVERUSER user; SERVERUSER user;
user.username = settings.value("ServerUsername_" + QString::number(f), "").toString(); user.username = settings->value("ServerUsername_" + QString::number(f), "").toString();
user.password = settings.value("ServerPassword_" + QString::number(f), "").toString(); user.password = settings->value("ServerPassword_" + QString::number(f), "").toString();
user.userType = settings.value("ServerUserType_" + QString::number(f), 0).toInt(); user.userType = settings->value("ServerUserType_" + QString::number(f), 0).toInt();
serverConfig.users.append(user); serverConfig.users.append(user);
} }
settings.endGroup(); settings->endGroup();
// Memory channels // Memory channels
settings.beginGroup("Memory"); settings->beginGroup("Memory");
int size = settings.beginReadArray("Channel"); int size = settings->beginReadArray("Channel");
int chan = 0; int chan = 0;
double freq; double freq;
unsigned char mode; unsigned char mode;
@ -1126,11 +1147,11 @@ void wfmain::loadSettings()
for(int i=0; i < size; i++) for(int i=0; i < size; i++)
{ {
settings.setArrayIndex(i); settings->setArrayIndex(i);
chan = settings.value("chan", 0).toInt(); chan = settings->value("chan", 0).toInt();
freq = settings.value("freq", 12.345).toDouble(); freq = settings->value("freq", 12.345).toDouble();
mode = settings.value("mode", 0).toInt(); mode = settings->value("mode", 0).toInt();
isSet = settings.value("isSet", false).toBool(); isSet = settings->value("isSet", false).toBool();
if(isSet) if(isSet)
{ {
@ -1138,8 +1159,8 @@ void wfmain::loadSettings()
} }
} }
settings.endArray(); settings->endArray();
settings.endGroup(); settings->endGroup();
emit sendServerConfig(serverConfig); emit sendServerConfig(serverConfig);
@ -1149,140 +1170,140 @@ void wfmain::loadSettings()
void wfmain::saveSettings() void wfmain::saveSettings()
{ {
qInfo(logSystem()) << "Saving settings to " << settings.fileName(); qInfo(logSystem()) << "Saving settings to " << settings->fileName();
// Basic things to load: // Basic things to load:
// UI: (full screen, dark theme, draw peaks, colors, etc) // UI: (full screen, dark theme, draw peaks, colors, etc)
settings.beginGroup("Interface"); settings->beginGroup("Interface");
settings.setValue("UseFullScreen", prefs.useFullScreen); settings->setValue("UseFullScreen", prefs.useFullScreen);
settings.setValue("UseSystemTheme", prefs.useSystemTheme); settings->setValue("UseSystemTheme", prefs.useSystemTheme);
settings.setValue("UseDarkMode", prefs.useDarkMode); settings->setValue("UseDarkMode", prefs.useDarkMode);
settings.setValue("DrawPeaks", prefs.drawPeaks); settings->setValue("DrawPeaks", prefs.drawPeaks);
settings.setValue("StylesheetPath", prefs.stylesheetPath); settings->setValue("StylesheetPath", prefs.stylesheetPath);
settings.setValue("splitter", ui->splitter->saveState()); settings->setValue("splitter", ui->splitter->saveState());
settings.setValue("windowGeometry", saveGeometry()); settings->setValue("windowGeometry", saveGeometry());
settings.setValue("windowState", saveState()); settings->setValue("windowState", saveState());
settings.endGroup(); settings->endGroup();
// Radio and Comms: C-IV addr, port to use // Radio and Comms: C-IV addr, port to use
settings.beginGroup("Radio"); settings->beginGroup("Radio");
settings.setValue("RigCIVuInt", prefs.radioCIVAddr); settings->setValue("RigCIVuInt", prefs.radioCIVAddr);
settings.setValue("SerialPortRadio", prefs.serialPortRadio); settings->setValue("SerialPortRadio", prefs.serialPortRadio);
settings.setValue("SerialPortBaud", prefs.serialPortBaud); settings->setValue("SerialPortBaud", prefs.serialPortBaud);
settings.setValue("VirtualSerialPort", prefs.virtualSerialPort); settings->setValue("VirtualSerialPort", prefs.virtualSerialPort);
settings.endGroup(); settings->endGroup();
// Misc. user settings (enable PTT, draw peaks, etc) // Misc. user settings (enable PTT, draw peaks, etc)
settings.beginGroup("Controls"); settings->beginGroup("Controls");
settings.setValue("EnablePTT", prefs.enablePTT); settings->setValue("EnablePTT", prefs.enablePTT);
settings.setValue("NiceTS", prefs.niceTS); settings->setValue("NiceTS", prefs.niceTS);
settings.endGroup(); settings->endGroup();
settings.beginGroup("LAN"); settings->beginGroup("LAN");
settings.setValue("EnableLAN", prefs.enableLAN); settings->setValue("EnableLAN", prefs.enableLAN);
settings.setValue("EnableRigCtlD", prefs.enableRigCtlD); settings->setValue("EnableRigCtlD", prefs.enableRigCtlD);
settings.setValue("RigCtlPort", prefs.rigCtlPort); settings->setValue("RigCtlPort", prefs.rigCtlPort);
settings.setValue("IPAddress", udpPrefs.ipAddress); settings->setValue("IPAddress", udpPrefs.ipAddress);
settings.setValue("ControlLANPort", udpPrefs.controlLANPort); settings->setValue("ControlLANPort", udpPrefs.controlLANPort);
settings.setValue("SerialLANPort", udpPrefs.serialLANPort); settings->setValue("SerialLANPort", udpPrefs.serialLANPort);
settings.setValue("AudioLANPort", udpPrefs.audioLANPort); settings->setValue("AudioLANPort", udpPrefs.audioLANPort);
settings.setValue("Username", udpPrefs.username); settings->setValue("Username", udpPrefs.username);
settings.setValue("Password", udpPrefs.password); settings->setValue("Password", udpPrefs.password);
settings.setValue("AudioRXLatency", udpPrefs.audioRXLatency); settings->setValue("AudioRXLatency", udpPrefs.audioRXLatency);
settings.setValue("AudioTXLatency", udpPrefs.audioTXLatency); settings->setValue("AudioTXLatency", udpPrefs.audioTXLatency);
settings.setValue("AudioRXSampleRate", udpPrefs.audioRXSampleRate); settings->setValue("AudioRXSampleRate", udpPrefs.audioRXSampleRate);
settings.setValue("AudioRXCodec", udpPrefs.audioRXCodec); settings->setValue("AudioRXCodec", udpPrefs.audioRXCodec);
settings.setValue("AudioTXSampleRate", udpPrefs.audioRXSampleRate); settings->setValue("AudioTXSampleRate", udpPrefs.audioRXSampleRate);
settings.setValue("AudioTXCodec", udpPrefs.audioTXCodec); settings->setValue("AudioTXCodec", udpPrefs.audioTXCodec);
settings.setValue("AudioOutput", udpPrefs.audioOutput); settings->setValue("AudioOutput", udpPrefs.audioOutput);
settings.setValue("AudioInput", udpPrefs.audioInput); settings->setValue("AudioInput", udpPrefs.audioInput);
settings.setValue("ResampleQuality", udpPrefs.resampleQuality); settings->setValue("ResampleQuality", udpPrefs.resampleQuality);
settings.setValue("ClientName", udpPrefs.clientName); settings->setValue("ClientName", udpPrefs.clientName);
settings.endGroup(); settings->endGroup();
// Memory channels // Memory channels
settings.beginGroup("Memory"); settings->beginGroup("Memory");
settings.beginWriteArray("Channel", (int)mem.getNumPresets()); settings->beginWriteArray("Channel", (int)mem.getNumPresets());
preset_kind temp; preset_kind temp;
for(int i=0; i < (int)mem.getNumPresets(); i++) for(int i=0; i < (int)mem.getNumPresets(); i++)
{ {
temp = mem.getPreset((int)i); temp = mem.getPreset((int)i);
settings.setArrayIndex(i); settings->setArrayIndex(i);
settings.setValue("chan", i); settings->setValue("chan", i);
settings.setValue("freq", temp.frequency); settings->setValue("freq", temp.frequency);
settings.setValue("mode", temp.mode); settings->setValue("mode", temp.mode);
settings.setValue("isSet", temp.isSet); settings->setValue("isSet", temp.isSet);
} }
settings.endArray(); settings->endArray();
settings.endGroup(); settings->endGroup();
// Note: X and Y get the same colors. See setPlotTheme() function // Note: X and Y get the same colors. See setPlotTheme() function
settings.beginGroup("DarkColors"); settings->beginGroup("DarkColors");
settings.setValue("Dark_PlotBackground", prefs.colorScheme.Dark_PlotBackground.rgba()); settings->setValue("Dark_PlotBackground", prefs.colorScheme.Dark_PlotBackground.rgba());
settings.setValue("Dark_PlotAxisPen", prefs.colorScheme.Dark_PlotAxisPen.rgba()); settings->setValue("Dark_PlotAxisPen", prefs.colorScheme.Dark_PlotAxisPen.rgba());
settings.setValue("Dark_PlotLegendTextColor", prefs.colorScheme.Dark_PlotLegendTextColor.rgba()); settings->setValue("Dark_PlotLegendTextColor", prefs.colorScheme.Dark_PlotLegendTextColor.rgba());
settings.setValue("Dark_PlotLegendBorderPen", prefs.colorScheme.Dark_PlotLegendBorderPen.rgba()); settings->setValue("Dark_PlotLegendBorderPen", prefs.colorScheme.Dark_PlotLegendBorderPen.rgba());
settings.setValue("Dark_PlotLegendBrush", prefs.colorScheme.Dark_PlotLegendBrush.rgba()); settings->setValue("Dark_PlotLegendBrush", prefs.colorScheme.Dark_PlotLegendBrush.rgba());
settings.setValue("Dark_PlotTickLabel", prefs.colorScheme.Dark_PlotTickLabel.rgba()); settings->setValue("Dark_PlotTickLabel", prefs.colorScheme.Dark_PlotTickLabel.rgba());
settings.setValue("Dark_PlotBasePen", prefs.colorScheme.Dark_PlotBasePen.rgba()); settings->setValue("Dark_PlotBasePen", prefs.colorScheme.Dark_PlotBasePen.rgba());
settings.setValue("Dark_PlotTickPen", prefs.colorScheme.Dark_PlotTickPen.rgba()); settings->setValue("Dark_PlotTickPen", prefs.colorScheme.Dark_PlotTickPen.rgba());
settings.setValue("Dark_PeakPlotLine", prefs.colorScheme.Dark_PeakPlotLine.rgba()); settings->setValue("Dark_PeakPlotLine", prefs.colorScheme.Dark_PeakPlotLine.rgba());
settings.setValue("Dark_TuningLine", prefs.colorScheme.Dark_TuningLine.rgba()); settings->setValue("Dark_TuningLine", prefs.colorScheme.Dark_TuningLine.rgba());
settings.endGroup(); settings->endGroup();
settings.beginGroup("LightColors"); settings->beginGroup("LightColors");
settings.setValue("Light_PlotBackground", prefs.colorScheme.Light_PlotBackground.rgba()); settings->setValue("Light_PlotBackground", prefs.colorScheme.Light_PlotBackground.rgba());
settings.setValue("Light_PlotAxisPen", prefs.colorScheme.Light_PlotAxisPen.rgba()); settings->setValue("Light_PlotAxisPen", prefs.colorScheme.Light_PlotAxisPen.rgba());
settings.setValue("Light_PlotLegendTextColor", prefs.colorScheme.Light_PlotLegendTextColor.rgba()); settings->setValue("Light_PlotLegendTextColor", prefs.colorScheme.Light_PlotLegendTextColor.rgba());
settings.setValue("Light_PlotLegendBorderPen", prefs.colorScheme.Light_PlotLegendBorderPen.rgba()); settings->setValue("Light_PlotLegendBorderPen", prefs.colorScheme.Light_PlotLegendBorderPen.rgba());
settings.setValue("Light_PlotLegendBrush", prefs.colorScheme.Light_PlotLegendBrush.rgba()); settings->setValue("Light_PlotLegendBrush", prefs.colorScheme.Light_PlotLegendBrush.rgba());
settings.setValue("Light_PlotTickLabel", prefs.colorScheme.Light_PlotTickLabel.rgba()); settings->setValue("Light_PlotTickLabel", prefs.colorScheme.Light_PlotTickLabel.rgba());
settings.setValue("Light_PlotBasePen", prefs.colorScheme.Light_PlotBasePen.rgba()); settings->setValue("Light_PlotBasePen", prefs.colorScheme.Light_PlotBasePen.rgba());
settings.setValue("Light_PlotTickPen", prefs.colorScheme.Light_PlotTickPen.rgba()); settings->setValue("Light_PlotTickPen", prefs.colorScheme.Light_PlotTickPen.rgba());
settings.setValue("Light_PeakPlotLine", prefs.colorScheme.Light_PeakPlotLine.rgba()); settings->setValue("Light_PeakPlotLine", prefs.colorScheme.Light_PeakPlotLine.rgba());
settings.setValue("Light_TuningLine", prefs.colorScheme.Light_TuningLine.rgba()); settings->setValue("Light_TuningLine", prefs.colorScheme.Light_TuningLine.rgba());
settings.endGroup(); settings->endGroup();
// This is a reference to see how the preference file is encoded. // This is a reference to see how the preference file is encoded.
settings.beginGroup("StandardColors"); settings->beginGroup("StandardColors");
settings.setValue("white", QColor(Qt::white).rgba()); settings->setValue("white", QColor(Qt::white).rgba());
settings.setValue("black", QColor(Qt::black).rgba()); settings->setValue("black", QColor(Qt::black).rgba());
settings.setValue("red_opaque", QColor(Qt::red).rgba()); settings->setValue("red_opaque", QColor(Qt::red).rgba());
settings.setValue("red_translucent", QColor(255,0,0,128).rgba()); settings->setValue("red_translucent", QColor(255,0,0,128).rgba());
settings.setValue("green_opaque", QColor(Qt::green).rgba()); settings->setValue("green_opaque", QColor(Qt::green).rgba());
settings.setValue("green_translucent", QColor(0,255,0,128).rgba()); settings->setValue("green_translucent", QColor(0,255,0,128).rgba());
settings.setValue("blue_opaque", QColor(Qt::blue).rgba()); settings->setValue("blue_opaque", QColor(Qt::blue).rgba());
settings.setValue("blue_translucent", QColor(0,0,255,128).rgba()); settings->setValue("blue_translucent", QColor(0,0,255,128).rgba());
settings.setValue("cyan", QColor(Qt::cyan).rgba()); settings->setValue("cyan", QColor(Qt::cyan).rgba());
settings.setValue("magenta", QColor(Qt::magenta).rgba()); settings->setValue("magenta", QColor(Qt::magenta).rgba());
settings.setValue("yellow", QColor(Qt::yellow).rgba()); settings->setValue("yellow", QColor(Qt::yellow).rgba());
settings.endGroup(); settings->endGroup();
settings.beginGroup("Server"); settings->beginGroup("Server");
settings.setValue("ServerEnabled", serverConfig.enabled); settings->setValue("ServerEnabled", serverConfig.enabled);
settings.setValue("ServerControlPort", serverConfig.controlPort); settings->setValue("ServerControlPort", serverConfig.controlPort);
settings.setValue("ServerCivPort", serverConfig.civPort); settings->setValue("ServerCivPort", serverConfig.civPort);
settings.setValue("ServerAudioPort", serverConfig.audioPort); settings->setValue("ServerAudioPort", serverConfig.audioPort);
settings.setValue("ServerNumUsers", serverConfig.users.count()); settings->setValue("ServerNumUsers", serverConfig.users.count());
for (int f = 0; f < serverConfig.users.count(); f++) for (int f = 0; f < serverConfig.users.count(); f++)
{ {
settings.setValue("ServerUsername_" + QString::number(f), serverConfig.users[f].username); settings->setValue("ServerUsername_" + QString::number(f), serverConfig.users[f].username);
settings.setValue("ServerPassword_" + QString::number(f), serverConfig.users[f].password); settings->setValue("ServerPassword_" + QString::number(f), serverConfig.users[f].password);
settings.setValue("ServerUserType_" + QString::number(f), serverConfig.users[f].userType); settings->setValue("ServerUserType_" + QString::number(f), serverConfig.users[f].userType);
} }
settings.endGroup(); settings->endGroup();
settings.sync(); // Automatic, not needed (supposedly) settings->sync(); // Automatic, not needed (supposedly)
} }
void wfmain::prepareWf() void wfmain::prepareWf()
@ -2842,7 +2863,7 @@ void wfmain::on_fEnterBtn_clicked()
{ {
// TODO: do not jump to main tab on enter, only on return // TODO: do not jump to main tab on enter, only on return
// or something. // or something.
// Maybe this should be an option in settings. // Maybe this should be an option in settings->
on_goFreqBtn_clicked(); on_goFreqBtn_clicked();
} }

Wyświetl plik

@ -38,7 +38,7 @@ class wfmain : public QMainWindow
Q_OBJECT Q_OBJECT
public: public:
explicit wfmain(const QString serialPortCL, const QString hostCL, QWidget *parent = 0); explicit wfmain(const QString serialPortCL, const QString hostCL, const QString settingsFile, QWidget *parent = 0);
QString serialPortCL; QString serialPortCL;
QString hostCL; QString hostCL;
~wfmain(); ~wfmain();
@ -445,7 +445,7 @@ private slots:
private: private:
Ui::wfmain *ui; Ui::wfmain *ui;
void closeEvent(QCloseEvent *event); void closeEvent(QCloseEvent *event);
QSettings settings; QSettings *settings=Q_NULLPTR;
void loadSettings(); void loadSettings();
void saveSettings(); void saveSettings();
QCustomPlot *plot; // line plot QCustomPlot *plot; // line plot