gui: set/get reference type and output regardless combobox index

This commit is contained in:
Kiara Navarro 2022-06-19 12:15:50 -05:00
parent aec12f7b0b
commit e0143e9caf
No known key found for this signature in database
GPG Key ID: CBA9F2172CE33FBA

View File

@ -66,6 +66,99 @@ static const QString APP_GIT_HASH = QString(GITHASH);
static bool noGUIset = false; static bool noGUIset = false;
class Reference
{
public:
enum class TypeIn {
Internal,
External,
Auto,
None
};
enum class OutFreq {
MHZ10,
MHZ100,
Off,
None
};
static QString OutFreqToLabel(Reference::OutFreq t)
{
switch(t) {
case OutFreq::MHZ10: return "10 MHz";
case OutFreq::MHZ100: return "100 MHz";
case OutFreq::Off: return "Off";
default: return "Invalid";
}
}
static QString OutFreqToKey(Reference::OutFreq f)
{
switch(f) {
case OutFreq::MHZ10: return "10 MHz";
case OutFreq::MHZ100: return "100 MHz";
case OutFreq::Off: return "Off";
default: return "Invalid";
}
}
static Reference::OutFreq KeyToOutFreq(QString key)
{
for (auto r: Reference::getOutFrequencies()) {
if(OutFreqToKey((Reference::OutFreq) r) == key) {
return (Reference::OutFreq) r;
}
}
// not found
return Reference::OutFreq::None;
}
static QString TypeToLabel(TypeIn t)
{
switch(t) {
case TypeIn::Internal: return "Internal";
case TypeIn::External: return "External";
case TypeIn::Auto: return "Auto";
default: return "Invalid";
}
}
static const QString TypeToKey(TypeIn t)
{
switch(t) {
case TypeIn::Internal: return "Int";
case TypeIn::External: return "Ext";
case TypeIn::Auto: return "Auto";
default: return "Invalid";
}
}
static TypeIn KeyToType(QString key)
{
for (auto r: Reference::getReferencesIn()) {
if(TypeToKey((TypeIn) r) == key) {
return (TypeIn) r;
}
}
// not found
return TypeIn::None;
}
static std::vector<Reference::TypeIn> getReferencesIn()
{
return {TypeIn::Internal, TypeIn::External, TypeIn::Auto};
}
static std::vector<Reference::OutFreq> getOutFrequencies()
{
return {OutFreq::Off, OutFreq::MHZ10, OutFreq::MHZ100};
}
};
AppWindow::AppWindow(QWidget *parent) AppWindow::AppWindow(QWidget *parent)
: QMainWindow(parent) : QMainWindow(parent)
, deviceActionGroup(new QActionGroup(this)) , deviceActionGroup(new QActionGroup(this))
@ -368,16 +461,17 @@ void AppWindow::CreateToolbars()
auto tb_reference = new QToolBar("Reference", this); auto tb_reference = new QToolBar("Reference", this);
tb_reference->addWidget(new QLabel("Ref in:")); tb_reference->addWidget(new QLabel("Ref in:"));
toolbars.reference.type = new QComboBox(); toolbars.reference.type = new QComboBox();
toolbars.reference.type->addItem("Int"); for (auto r: Reference::getReferencesIn()) {
toolbars.reference.type->addItem("Ext"); toolbars.reference.type->addItem(Reference::TypeToLabel(r), (int)r);
toolbars.reference.type->addItem("Auto"); }
tb_reference->addWidget(toolbars.reference.type); tb_reference->addWidget(toolbars.reference.type);
tb_reference->addSeparator(); tb_reference->addSeparator();
tb_reference->addWidget(new QLabel("Ref out:")); tb_reference->addWidget(new QLabel("Ref out:"));
toolbars.reference.outFreq = new QComboBox(); toolbars.reference.outFreq = new QComboBox();
toolbars.reference.outFreq->addItem("Off"); for (auto f: Reference::getOutFrequencies()) {
toolbars.reference.outFreq->addItem("10 MHz");
toolbars.reference.outFreq->addItem("100 MHz"); toolbars.reference.outFreq->addItem(Reference::OutFreqToLabel(f), (int)f);
}
tb_reference->addWidget(toolbars.reference.outFreq); tb_reference->addWidget(toolbars.reference.outFreq);
connect(toolbars.reference.type, qOverload<int>(&QComboBox::currentIndexChanged), this, &AppWindow::UpdateReference); connect(toolbars.reference.type, qOverload<int>(&QComboBox::currentIndexChanged), this, &AppWindow::UpdateReference);
connect(toolbars.reference.outFreq, qOverload<int>(&QComboBox::currentIndexChanged), this, &AppWindow::UpdateReference); connect(toolbars.reference.outFreq, qOverload<int>(&QComboBox::currentIndexChanged), this, &AppWindow::UpdateReference);
@ -429,20 +523,24 @@ void AppWindow::SetupSCPI()
if(params.size() != 1) { if(params.size() != 1) {
return "ERROR"; return "ERROR";
} else if(params[0] == "0" || params[0] == "OFF") { } else if(params[0] == "0" || params[0] == "OFF") {
toolbars.reference.outFreq->setCurrentIndex(0); int index = toolbars.reference.outFreq->findData((int)Reference::OutFreq::Off);
toolbars.reference.outFreq->setCurrentIndex(index);
} else if(params[0] == "10") { } else if(params[0] == "10") {
toolbars.reference.outFreq->setCurrentIndex(1); int index = toolbars.reference.outFreq->findData((int)Reference::OutFreq::MHZ10);
toolbars.reference.outFreq->setCurrentIndex(index);
} else if(params[0] == "100") { } else if(params[0] == "100") {
toolbars.reference.outFreq->setCurrentIndex(2); int index = toolbars.reference.outFreq->findData((int)Reference::OutFreq::MHZ100);
toolbars.reference.outFreq->setCurrentIndex(index);
} else { } else {
return "ERROR"; return "ERROR";
} }
return ""; return "";
}, [=](QStringList) -> QString { }, [=](QStringList) -> QString {
switch(toolbars.reference.outFreq->currentIndex()) { Reference::OutFreq f = static_cast<Reference::OutFreq>(toolbars.reference.outFreq->currentData().toInt());
case 0: return "OFF"; switch(f) {
case 1: return "10"; case Reference::OutFreq::Off: return "OFF";
case 2: return "100"; case Reference::OutFreq::MHZ10: return "10";
case Reference::OutFreq::MHZ100: return "100";
default: return "ERROR"; default: return "ERROR";
} }
})); }));
@ -450,11 +548,14 @@ void AppWindow::SetupSCPI()
if(params.size() != 1) { if(params.size() != 1) {
return "ERROR"; return "ERROR";
} else if(params[0] == "INT") { } else if(params[0] == "INT") {
toolbars.reference.type->setCurrentIndex(0); int index = toolbars.reference.type->findData((int)Reference::TypeIn::Internal);
toolbars.reference.type->setCurrentIndex(index);
} else if(params[0] == "EXT") { } else if(params[0] == "EXT") {
toolbars.reference.type->setCurrentIndex(1); int index = toolbars.reference.type->findData((int)Reference::TypeIn::External);
toolbars.reference.type->setCurrentIndex(index);
} else if(params[0] == "AUTO") { } else if(params[0] == "AUTO") {
toolbars.reference.type->setCurrentIndex(2); int index = toolbars.reference.type->findData((int)Reference::TypeIn::Auto);
toolbars.reference.type->setCurrentIndex(index);
} else { } else {
return "ERROR"; return "ERROR";
} }
@ -860,20 +961,18 @@ void AppWindow::UpdateReference()
} }
Protocol::ReferenceSettings s = {}; Protocol::ReferenceSettings s = {};
QString txt1 = toolbars.reference.type->currentText(); Reference::TypeIn t = static_cast<Reference::TypeIn>(toolbars.reference.type->currentData().toInt());
if( (txt1=="Ext") || (txt1=="External") ) { switch (t) {
s.UseExternalRef = 1; case Reference::TypeIn::External: s.UseExternalRef = 1; break;
} case Reference::TypeIn::Auto: s.AutomaticSwitch = 1; break;
if( (txt1=="Auto") || (txt1=="Automatic") ) { default: break;
s.AutomaticSwitch = 1;
} }
QString txt2 = toolbars.reference.outFreq->currentText(); Reference::OutFreq f = static_cast<Reference::OutFreq>(toolbars.reference.outFreq->currentData().toInt());
if(txt2=="10 MHz"){ switch(f) {
s.ExtRefOuputFreq = 10000000; case Reference::OutFreq::MHZ10: s.ExtRefOuputFreq = 10000000; break;
} case Reference::OutFreq::MHZ100: s.ExtRefOuputFreq = 100000000; break;
if(txt2=="100 MHz"){ default: break;
s.ExtRefOuputFreq = 100000000;
} }
Protocol::PacketInfo p; Protocol::PacketInfo p;
@ -977,8 +1076,11 @@ nlohmann::json AppWindow::SaveSetup()
j["activeMode"] = Mode::getActiveMode()->getName().toStdString(); j["activeMode"] = Mode::getActiveMode()->getName().toStdString();
} }
nlohmann::json ref; nlohmann::json ref;
ref["Mode"] = toolbars.reference.type->currentText().toStdString();
ref["Output"] = toolbars.reference.outFreq->currentText().toStdString(); Reference::TypeIn t = static_cast<Reference::TypeIn>(toolbars.reference.type->currentData().toInt());
ref["Mode"] = Reference::TypeToKey(t).toStdString();
Reference::OutFreq f = static_cast<Reference::OutFreq>(toolbars.reference.outFreq->currentData().toInt());
ref["Output"] = Reference::OutFreqToKey(f).toStdString();
j["Reference"] = ref; j["Reference"] = ref;
return j; return j;
} }
@ -1009,7 +1111,10 @@ void AppWindow::LoadSetup(nlohmann::json j)
// auto d = new JSONPickerDialog(j); // auto d = new JSONPickerDialog(j);
// d->exec(); // d->exec();
if(j.contains("Reference")) { if(j.contains("Reference")) {
toolbars.reference.type->setCurrentText(QString::fromStdString(j["Reference"].value("Mode", "Int"))); QString fallback = Reference::TypeToKey(Reference::TypeIn::Internal);
auto mode = QString::fromStdString(j["Reference"].value("Mode",fallback.toStdString()));
auto index = toolbars.reference.type->findData((int)Reference::KeyToType(mode));
toolbars.reference.type->setCurrentIndex(index);
toolbars.reference.outFreq->setCurrentText(QString::fromStdString(j["Reference"].value("Output", "Off"))); toolbars.reference.outFreq->setCurrentText(QString::fromStdString(j["Reference"].value("Output", "Off")));
} }
while(Mode::getModes().size() > 0) { while(Mode::getModes().size() > 0) {