Files
kaizen/src/frontend/SettingsWindow.cpp

91 lines
2.0 KiB
C++

#include <SettingsWindow.hpp>
#include <fmt/core.h>
#include <nfd.hpp>
#include <log.hpp>
#include <JSONUtils.hpp>
std::string savePath;
SettingsWindow::SettingsWindow() : settings{JSONOpenOrCreate("resources/settings.json")} {
keyMap = inputSettings.GetMappedKeys();
savesFolder.setName(fmt::format("Save path: {}",
JSONGetField<std::string>(settings, "general", "savePath")));
tabs.addTab({"General", [&]() {
if(savesFolder.render()) {
NFD::Guard guard;
NFD::UniquePath outPath;
auto result = NFD::PickFolder(outPath);
if(result == NFD_CANCEL)
return;
if(result == NFD_ERROR)
Util::panic("Error: {}", NFD::GetError());
savesFolder.setName(fmt::format("Save path: {}", outPath.get()));
JSONSetField(settings, "general", "savePath", outPath.get());
apply.setEnabled(true);
}
}});
tabs.addTab({"CPU", [&]() {
if(cpuSettings.render()) {
if(cpuSettings.getModified())
apply.setEnabled(true);
}
}});
tabs.addTab({"Audio", [&]() {
if(audioSettings.render()) {
if(audioSettings.getModified())
apply.setEnabled(true);
}
}});
tabs.addTab({"Input", [&]() {
if(inputSettings.render()) {
if(inputSettings.getModified())
apply.setEnabled(true);
}
}});
apply.setEnabled(false);
popup.setOnOpen([&]() {
inputSettings.RegisterEventWatchers();
});
popup.setOnClose([&]() {
inputSettings.UnregisterEventWatchers();
});
popup.setFunc([&]() {
tabs.render();
if(apply.render()) {
auto newMap = inputSettings.GetMappedKeys();
if (keyMap != newMap)
keyMap = newMap;
apply.setEnabled(false);
std::ofstream file("resources/settings.json");
file << settings;
file.close();
}
ImGui::SameLine();
if(ImGui::Button("Cancel")) {
popup.setOpened(false);
ImGui::CloseCurrentPopup();
}
});
}
bool SettingsWindow::render() {
if(popup.render())
return true;
return false;
}