#pragma once #include "Preset.h" #include #include class ParameterInput; class SettingsView { static constexpr size_t MAX_RADIOS = 32; static constexpr Modulation FIRST_MODULATION = MODULATION_NONE; static constexpr Modulation LAST_MODULATION = MODULATION_LRFHSS; static constexpr size_t MAX_MODEMS = LAST_MODULATION + 1; static constexpr size_t MAX_PARAMS = RADIO_NARROWGRID + 1; RadioHandle radios[MAX_RADIOS] = {0}; size_t radioCount = 0; RadioHandle radioSelected = nullptr; RadioStateSubscriptionId radioStateSubId = -1; Modulation modemsAvailable[MAX_MODEMS] = {}; size_t modemsAvailableCount = 0; RadioParameter paramsAvailable[MAX_PARAMS] = {}; ParameterInput* paramInputs[MAX_PARAMS] = {0}; size_t paramsAvailableCount = 0; LinkedList presets; LinkedList presetsByModulation[MAX_MODEMS]; lv_obj_t* mainPanel = nullptr; lv_obj_t* deviceForm = nullptr; lv_obj_t* radioDropdown = nullptr; lv_obj_t* radioSwitch = nullptr; lv_obj_t* radioStateLabel = nullptr; lv_obj_t* modemDropdown = nullptr; lv_obj_t* modemPresetDropdown = nullptr; lv_obj_t *propertiesForm = nullptr; public: void addPreset(Preset* preset); void queryRadios(); void getRadioNames(Str &names, const char* const separator); int getModemAvailableIndex(Modulation m); lv_obj_t* initParameterFormGeneric(lv_obj_t *parent, const Modulation modem); void selectModulation(int modemIndex); void selectPreset(int presetIndex); void onParameterInput(); void updatePresets(); void selectRadio(int index); lv_obj_t *initDeviceForm(lv_obj_t *parent); void updateSelectedRadioState(RadioState state); bool enableSelectedRadio(bool enable); void activateConfig(); void deactivateConfig(); void initUi(lv_obj_t *parent); explicit SettingsView(lv_obj_t *parent) { queryRadios(); initUi(parent); } };