From 6e74662518a9f43baa8cd41a2bd26091ae7e75fd Mon Sep 17 00:00:00 2001 From: "Charles J. Cliffe" Date: Mon, 23 Nov 2015 22:39:39 -0500 Subject: [PATCH] Modem property grid settings now applying/working - Still some races with initializing the grid on new demodulators --- src/ModemProperties.cpp | 43 +++++++++++++++++++++++-- src/ModemProperties.h | 6 ++-- src/modules/modem/digital/ModemAPSK.cpp | 11 +------ 3 files changed, 45 insertions(+), 15 deletions(-) diff --git a/src/ModemProperties.cpp b/src/ModemProperties.cpp index ec46160..7dc579b 100644 --- a/src/ModemProperties.cpp +++ b/src/ModemProperties.cpp @@ -1,4 +1,5 @@ #include "ModemProperties.h" +#include "CubicSDR.h" ModemProperties::ModemProperties(wxWindow *parent, wxWindowID winid, const wxPoint& pos, const wxSize& size, long style, const wxString& name) : wxPanel(parent, winid, pos, size, style, name) { @@ -12,6 +13,8 @@ ModemProperties::ModemProperties(wxWindow *parent, wxWindowID winid, bSizer->Add(m_propertyGrid, 1, wxEXPAND | wxALL, 5); this->SetSizer(bSizer); + + m_propertyGrid->Connect( wxEVT_PG_CHANGED, wxPropertyGridEventHandler( ModemProperties::OnChange ), NULL, this ); } ModemProperties::~ModemProperties() { @@ -21,8 +24,6 @@ ModemProperties::~ModemProperties() { void ModemProperties::initProperties(ModemArgInfoList newArgs) { args = newArgs; -// props.erase(props.begin(), props.end()); - m_propertyGrid->Clear(); m_propertyGrid->Append(new wxPropertyCategory("Modem Settings")); @@ -30,7 +31,7 @@ void ModemProperties::initProperties(ModemArgInfoList newArgs) { for (args_i = args.begin(); args_i != args.end(); args_i++) { ModemArgInfo arg = (*args_i); - props.push_back(addArgInfoProperty(m_propertyGrid, arg)); + props[arg.key] = addArgInfoProperty(m_propertyGrid, arg); } } @@ -106,3 +107,39 @@ wxPGProperty *ModemProperties::addArgInfoProperty(wxPropertyGrid *pg, ModemArgIn return prop; } +std::string ModemProperties::readProperty(std::string key) { + int i = 0; + ModemArgInfoList::const_iterator args_i; + + for (args_i = args.begin(); args_i != args.end(); args_i++) { + ModemArgInfo arg = (*args_i); + if (arg.key == key) { + wxPGProperty *prop = props[key]; + + std::string result = ""; + if (arg.type == ModemArgInfo::STRING && arg.options.size()) { + return arg.options[prop->GetChoiceSelection()]; + } else if (arg.type == ModemArgInfo::BOOL) { + return (prop->GetValueAsString()=="True")?"true":"false"; + } else { + return prop->GetValueAsString().ToStdString(); + } + } + i++; + } + return ""; +} + +void ModemProperties::OnChange(wxPropertyGridEvent &event) { + DemodulatorInstance *inst = wxGetApp().getDemodMgr().getLastActiveDemodulator(); + + std::map::const_iterator prop_i; + for (prop_i = props.begin(); prop_i != props.end(); prop_i++) { + if (prop_i->second == event.m_property) { + std::string key = prop_i->first; + std::string value = readProperty(prop_i->first); + inst->writeModemSetting(key, value); + return; + } + } +} diff --git a/src/ModemProperties.h b/src/ModemProperties.h index a2dd775..453a102 100644 --- a/src/ModemProperties.h +++ b/src/ModemProperties.h @@ -20,11 +20,13 @@ public: ~ModemProperties(); void initProperties(ModemArgInfoList newArgs); - + private: wxPGProperty *addArgInfoProperty(wxPropertyGrid *pg, ModemArgInfo arg); + std::string readProperty(std::string); + void OnChange(wxPropertyGridEvent &event); wxPropertyGrid* m_propertyGrid; ModemArgInfoList args; - std::vector props; + std::map props; }; \ No newline at end of file diff --git a/src/modules/modem/digital/ModemAPSK.cpp b/src/modules/modem/digital/ModemAPSK.cpp index f7d72d5..febd4fe 100644 --- a/src/modules/modem/digital/ModemAPSK.cpp +++ b/src/modules/modem/digital/ModemAPSK.cpp @@ -68,37 +68,28 @@ std::string ModemAPSK::readSetting(std::string setting) { } void ModemAPSK::updateDemodulatorCons(int cons) { + this->cons = cons; switch (cons) { case 4: demodAPSK = demodAPSK4; - updateDemodulatorCons(4); break; case 8: demodAPSK = demodAPSK8; - updateDemodulatorCons(8); break; case 16: demodAPSK = demodAPSK16; - updateDemodulatorCons(16); break; case 32: demodAPSK = demodAPSK32; - updateDemodulatorCons(32); break; case 64: demodAPSK = demodAPSK64; - updateDemodulatorCons(64); break; case 128: demodAPSK = demodAPSK128; - updateDemodulatorCons(128); break; case 256: demodAPSK = demodAPSK256; - updateDemodulatorCons(256); - break; - default: - demodAPSK = demodAPSK4; break; } }