91 lines
2.0 KiB
C++
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;
|
|
} |