Files
kaizen/src/frontend/SettingsWindow.cpp
2025-07-22 12:46:50 +02:00

77 lines
1.8 KiB
C++

#include <SettingsWindow.hpp>
#include <nfd.hpp>
#include <log.hpp>
#include <Options.hpp>
#include <imgui.h>
SettingsWindow::SettingsWindow(gui::NativeWindow& window) : window(window) {
savesPath = Options::GetInstance().GetValue<std::string>("general", "savePath");
}
bool SettingsWindow::render() {
ImVec2 center = ImGui::GetMainViewport()->GetCenter();
ImGui::SetNextWindowPos(center, ImGuiCond_Appearing, ImVec2(0.5f, 0.5f));
if(!ImGui::BeginPopupModal("Settings", &isOpen))
return false;
if(!ImGui::BeginTabBar("SettingsTabBar"))
return false;
if(ImGui::BeginTabItem("General")) {
if(ImGui::Button("Pick...")) {
NFD::Guard guard;
NFD::UniquePath outPath;
auto result = NFD::PickFolder(outPath);
if(result == NFD_ERROR)
panic("Error: {}", NFD::GetError());
if(result != NFD_CANCEL) {
savesPath = outPath.get();
Options::GetInstance().SetValue<std::string>("general", "savePath", savesPath);
applyEnabled = true;
}
}
ImGui::SameLine();
ImGui::BeginDisabled();
ImGui::InputText("Save Path", (char*)savesPath.c_str(), savesPath.length());
ImGui::EndDisabled();
ImGui::EndTabItem();
}
if(ImGui::BeginTabItem("Core")) {
if(cpuSettings.render()) {
if(cpuSettings.getModified())
applyEnabled = true;
}
ImGui::EndTabItem();
}
if(ImGui::BeginTabItem("Audio")) {
if(audioSettings.render()) {
if(audioSettings.getModified())
applyEnabled = true;
}
ImGui::EndTabItem();
}
ImGui::EndTabBar();
ImGui::BeginDisabled(!applyEnabled);
if(ImGui::Button("Apply")) {
applyEnabled = false;
Options::GetInstance().Apply();
}
ImGui::EndDisabled();
ImGui::SameLine();
if(ImGui::Button("Cancel")) {
isOpen = false;
ImGui::CloseCurrentPopup();
}
ImGui::EndPopup();
return true;
}