satdump/src-interface/settings.cpp
2022-04-21 16:10:00 +02:00

70 lines
No EOL
2.9 KiB
C++

#include "settings.h"
#include "imgui/imgui.h"
#include <string>
#include "core/params.h"
#include "core/config.h"
#include "main_ui.h"
namespace satdump
{
namespace settings
{
std::vector<std::pair<std::string, satdump::params::EditableParameter>> settings_user_interface;
std::vector<std::pair<std::string, satdump::params::EditableParameter>> settings_general;
void setup()
{
nlohmann::ordered_json params = satdump::config::main_cfg["user_interface"];
for (nlohmann::detail::iteration_proxy_value<nlohmann::detail::iter_impl<nlohmann::ordered_json>> cfg : params.items())
{
// Check setting type, and create an EditableParameter if possible
if (cfg.value().contains("type") && cfg.value().contains("value") && cfg.value().contains("name"))
settings_user_interface.push_back({cfg.key(), params::EditableParameter(nlohmann::json(cfg.value()))});
}
params = satdump::config::main_cfg["satdump_general"];
for (nlohmann::detail::iteration_proxy_value<nlohmann::detail::iter_impl<nlohmann::ordered_json>> cfg : params.items())
{
// Check setting type, and create an EditableParameter if possible
if (cfg.value().contains("type") && cfg.value().contains("value") && cfg.value().contains("name"))
settings_general.push_back({cfg.key(), params::EditableParameter(nlohmann::json(cfg.value()))});
}
}
void render()
{
if (ImGui::CollapsingHeader("User Interface"))
{
if (ImGui::BeginTable("##satdumpuisettings", 2, ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg))
{
for (std::pair<std::string, satdump::params::EditableParameter> &p : settings_user_interface)
p.second.draw();
ImGui::EndTable();
}
}
if (ImGui::CollapsingHeader("General SatDump"))
{
if (ImGui::BeginTable("##satdumpgeneralsettings", 2, ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg))
{
for (std::pair<std::string, satdump::params::EditableParameter> &p : settings_general)
p.second.draw();
ImGui::EndTable();
}
}
if (ImGui::Button("Save"))
{
for (std::pair<std::string, satdump::params::EditableParameter> &p : settings_user_interface)
satdump::config::main_cfg["user_interface"][p.first]["value"] = p.second.getValue();
for (std::pair<std::string, satdump::params::EditableParameter> &p : settings_general)
satdump::config::main_cfg["satdump_general"][p.first]["value"] = p.second.getValue();
config::saveUserConfig();
}
}
}
}