1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-11-15 21:01:45 -05:00
sdrangel/sdrbase/settings/mainsettings.cpp

430 lines
11 KiB
C++
Raw Normal View History

#include <QSettings>
#include <QStringList>
#include <QDebug>
#include <algorithm>
#include "settings/mainsettings.h"
2018-01-04 05:11:53 -05:00
#include "commands/command.h"
2019-07-20 17:25:00 -04:00
#include "audio/audiodevicemanager.h"
#include "ambe/ambeengine.h"
2019-07-20 17:25:00 -04:00
MainSettings::MainSettings() :
m_audioDeviceManager(nullptr),
m_ambeEngine(nullptr)
{
resetToDefaults();
qInfo("MainSettings::MainSettings: settings file: format: %d location: %s", getFileFormat(), qPrintable(getFileLocation()));
}
MainSettings::~MainSettings()
{
2020-09-23 23:38:05 -04:00
for (int i = 0; i < m_presets.count(); ++i)
{
delete m_presets[i];
}
2018-01-04 05:11:53 -05:00
2020-09-23 23:38:05 -04:00
for (int i = 0; i < m_commands.count(); ++i)
2018-01-04 05:11:53 -05:00
{
delete m_commands[i];
}
2020-09-23 23:38:05 -04:00
for (int i = 0; i < m_featureSetPresets.count(); ++i)
{
delete m_featureSetPresets[i];
}
}
2019-01-17 05:22:38 -05:00
QString MainSettings::getFileLocation() const
{
QSettings s;
return s.fileName();
}
int MainSettings::getFileFormat() const
{
QSettings s;
return (int) s.format();
}
2020-09-23 23:38:05 -04:00
void MainSettings::load()
{
QSettings s;
m_preferences.deserialize(qUncompress(QByteArray::fromBase64(s.value("preferences").toByteArray())));
m_workingPreset.deserialize(qUncompress(QByteArray::fromBase64(s.value("current").toByteArray())));
2020-09-23 23:38:05 -04:00
m_workingFeatureSetPreset.deserialize(qUncompress(QByteArray::fromBase64(s.value("current-featureset").toByteArray())));
2019-07-20 17:25:00 -04:00
if (m_audioDeviceManager) {
m_audioDeviceManager->deserialize(qUncompress(QByteArray::fromBase64(s.value("audio").toByteArray())));
}
2019-07-20 17:25:00 -04:00
if (m_ambeEngine) {
m_ambeEngine->deserialize(qUncompress(QByteArray::fromBase64(s.value("ambe").toByteArray())));
}
QStringList groups = s.childGroups();
2020-09-23 23:38:05 -04:00
for (int i = 0; i < groups.size(); ++i)
{
2018-01-04 05:11:53 -05:00
if (groups[i].startsWith("preset"))
{
s.beginGroup(groups[i]);
Preset* preset = new Preset;
2020-09-23 23:38:05 -04:00
if (preset->deserialize(qUncompress(QByteArray::fromBase64(s.value("data").toByteArray()))))
{
m_presets.append(preset);
}
else
{
delete preset;
}
s.endGroup();
}
2018-01-04 05:11:53 -05:00
else if (groups[i].startsWith("command"))
{
s.beginGroup(groups[i]);
Command* command = new Command;
2020-09-23 23:38:05 -04:00
if (command->deserialize(qUncompress(QByteArray::fromBase64(s.value("data").toByteArray()))))
2018-01-04 05:11:53 -05:00
{
m_commands.append(command);
}
else
{
delete command;
}
2020-09-23 23:38:05 -04:00
s.endGroup();
}
else if (groups[i].startsWith("featureset"))
{
s.beginGroup(groups[i]);
FeatureSetPreset* featureSetPreset = new FeatureSetPreset;
if (featureSetPreset->deserialize(qUncompress(QByteArray::fromBase64(s.value("data").toByteArray()))))
{
m_featureSetPresets.append(featureSetPreset);
}
else
{
delete featureSetPreset;
}
2018-01-04 05:11:53 -05:00
s.endGroup();
}
}
2019-06-12 12:50:53 -04:00
m_hardwareDeviceUserArgs.deserialize(qUncompress(QByteArray::fromBase64(s.value("hwDeviceUserArgs").toByteArray())));
m_limeRFEUSBCalib.deserialize(qUncompress(QByteArray::fromBase64(s.value("limeRFEUSBCalib").toByteArray())));
}
2020-09-23 23:38:05 -04:00
void MainSettings::save() const
{
QSettings s;
s.setValue("preferences", qCompress(m_preferences.serialize()).toBase64());
s.setValue("current", qCompress(m_workingPreset.serialize()).toBase64());
2020-09-23 23:38:05 -04:00
s.setValue("current-featureset", qCompress(m_workingFeatureSetPreset.serialize()).toBase64());
2019-07-20 17:25:00 -04:00
if (m_audioDeviceManager) {
s.setValue("audio", qCompress(m_audioDeviceManager->serialize()).toBase64());
}
2019-07-20 17:25:00 -04:00
if (m_ambeEngine) {
s.setValue("ambe", qCompress(m_ambeEngine->serialize()).toBase64());
}
QStringList groups = s.childGroups();
for(int i = 0; i < groups.size(); ++i)
{
2018-01-04 05:11:53 -05:00
if ((groups[i].startsWith("preset")) || (groups[i].startsWith("command")))
{
s.remove(groups[i]);
}
}
2018-01-04 05:11:53 -05:00
for (int i = 0; i < m_presets.count(); ++i)
{
QString group = QString("preset-%1").arg(i + 1);
s.beginGroup(group);
s.setValue("data", qCompress(m_presets[i]->serialize()).toBase64());
s.endGroup();
}
2018-01-04 05:11:53 -05:00
for (int i = 0; i < m_commands.count(); ++i)
{
QString group = QString("command-%1").arg(i + 1);
s.beginGroup(group);
s.setValue("data", qCompress(m_commands[i]->serialize()).toBase64());
s.endGroup();
}
2019-06-12 12:50:53 -04:00
2020-09-23 23:38:05 -04:00
for (int i = 0; i < m_featureSetPresets.count(); ++i)
{
QString group = QString("featureset-%1").arg(i + 1);
s.beginGroup(group);
s.setValue("data", qCompress(m_featureSetPresets[i]->serialize()).toBase64());
s.endGroup();
}
2019-06-12 12:50:53 -04:00
s.setValue("hwDeviceUserArgs", qCompress(m_hardwareDeviceUserArgs.serialize()).toBase64());
s.setValue("limeRFEUSBCalib", qCompress(m_limeRFEUSBCalib.serialize()).toBase64());
}
2019-08-06 02:48:14 -04:00
void MainSettings::initialize()
{
resetToDefaults();
clearCommands();
clearPresets();
2020-09-23 23:38:05 -04:00
clearFeatureSetPresets();
2019-08-06 02:48:14 -04:00
}
void MainSettings::resetToDefaults()
{
m_preferences.resetToDefaults();
m_workingPreset.resetToDefaults();
2020-09-23 23:38:05 -04:00
m_workingFeatureSetPreset.resetToDefaults();
}
2020-09-23 23:38:05 -04:00
// DeviceSet presets
Preset* MainSettings::newPreset(const QString& group, const QString& description)
{
Preset* preset = new Preset();
preset->setGroup(group);
preset->setDescription(description);
2019-08-06 02:48:14 -04:00
addPreset(preset);
return preset;
}
2019-08-06 02:48:14 -04:00
void MainSettings::addPreset(Preset *preset)
{
m_presets.append(preset);
}
void MainSettings::deletePreset(const Preset* preset)
{
m_presets.removeAll((Preset*)preset);
delete (Preset*)preset;
}
void MainSettings::deletePresetGroup(const QString& groupName)
{
Presets::iterator it = m_presets.begin();
while (it != m_presets.end())
{
if ((*it)->getGroup() == groupName) {
it = m_presets.erase(it);
} else {
++it;
}
}
}
void MainSettings::sortPresets()
{
std::sort(m_presets.begin(), m_presets.end(), Preset::presetCompare);
}
void MainSettings::renamePresetGroup(const QString& oldGroupName, const QString& newGroupName)
{
int nbPresets = getPresetCount();
for (int i = 0; i < nbPresets; i++)
{
if (getPreset(i)->getGroup() == oldGroupName)
{
Preset *preset_mod = const_cast<Preset*>(getPreset(i));
preset_mod->setGroup(newGroupName);
}
}
}
2019-05-08 19:12:40 -04:00
const Preset* MainSettings::getPreset(const QString& groupName, quint64 centerFrequency, const QString& description, const QString& type) const
{
int nbPresets = getPresetCount();
for (int i = 0; i < nbPresets; i++)
{
if ((getPreset(i)->getGroup() == groupName) &&
(getPreset(i)->getCenterFrequency() == centerFrequency) &&
(getPreset(i)->getDescription() == description))
{
2019-05-08 19:12:40 -04:00
if (type == "R" && getPreset(i)->isSourcePreset()) {
return getPreset(i);
2019-09-13 07:40:31 -04:00
} else if (type == "T" && getPreset(i)->isSinkPreset()) {
return getPreset(i);
} else if (type == "M" && getPreset(i)->isMIMOPreset()) {
2019-05-08 19:12:40 -04:00
return getPreset(i);
}
}
}
2020-09-23 23:38:05 -04:00
return nullptr;
}
2018-01-04 05:11:53 -05:00
2019-08-06 02:48:14 -04:00
void MainSettings::clearPresets()
{
foreach (Preset *preset, m_presets) {
delete preset;
}
m_presets.clear();
}
2020-09-23 23:38:05 -04:00
// Commands
2018-01-04 05:11:53 -05:00
void MainSettings::addCommand(Command *command)
{
m_commands.append(command);
}
void MainSettings::deleteCommand(const Command* command)
{
m_commands.removeAll((Command*)command);
delete (Command*)command;
}
void MainSettings::deleteCommandGroup(const QString& groupName)
{
Commands::iterator it = m_commands.begin();
while (it != m_commands.end())
{
if ((*it)->getGroup() == groupName) {
it = m_commands.erase(it);
} else {
++it;
}
}
}
2018-01-04 05:11:53 -05:00
void MainSettings::sortCommands()
{
std::sort(m_commands.begin(), m_commands.end(), Command::commandCompare);
2018-01-04 05:11:53 -05:00
}
void MainSettings::renameCommandGroup(const QString& oldGroupName, const QString& newGroupName)
{
int nbCommands = getCommandCount();
for (int i = 0; i < nbCommands; i++)
{
if (getCommand(i)->getGroup() == oldGroupName)
{
Command *command_mod = const_cast<Command*>(getCommand(i));
command_mod->setGroup(newGroupName);
}
}
}
2018-01-04 05:11:53 -05:00
const Command* MainSettings::getCommand(const QString& groupName, const QString& description) const
{
int nbCommands = getCommandCount();
for (int i = 0; i < nbCommands; i++)
{
if ((getCommand(i)->getGroup() == groupName) &&
(getCommand(i)->getDescription() == description))
{
return getCommand(i);
}
}
2020-09-23 23:38:05 -04:00
return nullptr;
2018-01-04 05:11:53 -05:00
}
2019-08-06 02:48:14 -04:00
void MainSettings::clearCommands()
{
foreach (Command *command, m_commands) {
delete command;
}
m_commands.clear();
}
2020-09-23 23:38:05 -04:00
// FeatureSet presets
FeatureSetPreset* MainSettings::newFeatureSetPreset(const QString& group, const QString& description)
{
FeatureSetPreset* preset = new FeatureSetPreset();
preset->setGroup(group);
preset->setDescription(description);
addFeatureSetPreset(preset);
return preset;
}
void MainSettings::addFeatureSetPreset(FeatureSetPreset *preset)
{
m_featureSetPresets.append(preset);
}
void MainSettings::deleteFeatureSetPreset(const FeatureSetPreset* preset)
{
m_featureSetPresets.removeAll((FeatureSetPreset*) preset);
delete (FeatureSetPreset*) preset;
}
void MainSettings::deleteFeatureSetPresetGroup(const QString& groupName)
{
FeatureSetPresets::iterator it = m_featureSetPresets.begin();
while (it != m_featureSetPresets.end())
{
if ((*it)->getGroup() == groupName) {
it = m_featureSetPresets.erase(it);
} else {
++it;
}
}
}
void MainSettings::sortFeatureSetPresets()
{
std::sort(m_featureSetPresets.begin(), m_featureSetPresets.end(), FeatureSetPreset::presetCompare);
}
void MainSettings::renameFeatureSetPresetGroup(const QString& oldGroupName, const QString& newGroupName)
{
int nbPresets = getFeatureSetPresetCount();
for (int i = 0; i < nbPresets; i++)
{
if (getPreset(i)->getGroup() == oldGroupName)
{
FeatureSetPreset *preset_mod = const_cast<FeatureSetPreset*>(getFeatureSetPreset(i));
preset_mod->setGroup(newGroupName);
}
}
}
const FeatureSetPreset* MainSettings::getFeatureSetPreset(const QString& groupName, const QString& description) const
{
int nbPresets = getFeatureSetPresetCount();
for (int i = 0; i < nbPresets; i++)
{
if ((getFeatureSetPreset(i)->getGroup() == groupName) &&
(getFeatureSetPreset(i)->getDescription() == description))
{
return getFeatureSetPreset(i);
}
}
return nullptr;
}
void MainSettings::clearFeatureSetPresets()
{
foreach (FeatureSetPreset *preset, m_featureSetPresets) {
delete preset;
}
m_featureSetPresets.clear();
}