nicer gui

This commit is contained in:
SimoneN64
2023-10-23 14:42:11 +02:00
parent 7358fa3fe7
commit 51f7868272
5 changed files with 120 additions and 100 deletions

View File

@@ -1,7 +1,7 @@
#include <Language.hpp> #include <Language.hpp>
namespace Language { namespace Language {
void SetLanguage(std::array<std::string, STRING_COUNT>& lang, int selectedLang) { void SetLanguage(std::map<StringID, const char*>& lang, int selectedLang) {
switch (selectedLang) { switch (selectedLang) {
case AvailableLangs::ENGLISH: lang = english; break; case AvailableLangs::ENGLISH: lang = english; break;
case AvailableLangs::ITALIAN: lang = italian; break; case AvailableLangs::ITALIAN: lang = italian; break;

View File

@@ -1,5 +1,6 @@
#pragma once #pragma once
#include <log.hpp> #include <log.hpp>
#include <map>
#include <array> #include <array>
namespace Language { namespace Language {
@@ -23,49 +24,52 @@ enum StringID {
SETTINGS_OPTION_LOCK_CHANNELS, SETTINGS_OPTION_LOCK_CHANNELS,
SETTINGS_OPTION_ENABLE_JIT, SETTINGS_OPTION_ENABLE_JIT,
SETTINGS_OPTION_LANGUAGE, SETTINGS_OPTION_LANGUAGE,
SETTINGS_CLOSE,
STRING_COUNT STRING_COUNT
}; };
static const std::array<std::string, STRING_COUNT> english = { static const std::map <StringID, const char*> english = {
"File", {MENU_FILE, "File"},
"Open", {FILE_ITEM_OPEN, "Open"},
"Exit", {FILE_ITEM_EXIT, "Exit"},
"Emulation", {MENU_EMULATION, "Emulation"},
"Reset", {EMULATION_ITEM_RESET, "Reset"},
"Stop", {EMULATION_ITEM_STOP, "Stop"},
"Pause", {EMULATION_ITEM_PAUSE, "Pause"},
"Resume", {EMULATION_ITEM_RESUME, "Resume"},
"Settings", {EMULATION_ITEM_SETTINGS, "Settings"},
"CPU", {SETTINGS_CATEGORY_CPU, "CPU"},
"Audio", {SETTINGS_CATEGORY_AUDIO, "Audio"},
"Interface", {SETTINGS_CATEGORY_INTERFACE, "Interface"},
"Mute", {SETTINGS_OPTION_MUTE, "Mute"},
"Volume L", {SETTINGS_OPTION_VOLUME_L, "Volume L"},
"Volume R", {SETTINGS_OPTION_VOLUME_R, "Volume R"},
"Lock channels", {SETTINGS_OPTION_LOCK_CHANNELS, "Lock channels"},
"Enable JIT", {SETTINGS_OPTION_ENABLE_JIT, "Enable JIT"},
"Language" {SETTINGS_OPTION_LANGUAGE, "Language"},
{SETTINGS_CLOSE, "Close"}
}; };
static const std::array<std::string, STRING_COUNT> italian = { static const std::map <StringID, const char*> italian = {
"File", {MENU_FILE, "File"},
"Apri", {FILE_ITEM_OPEN, "Apri"},
"Esci", {FILE_ITEM_EXIT, "Esci"},
"Emulazione", {MENU_EMULATION, "Emulazione"},
"Reset", {EMULATION_ITEM_RESET, "Reset"},
"Stop", {EMULATION_ITEM_STOP, "Stop"},
"Pausa", {EMULATION_ITEM_PAUSE, "Pausa"},
"Riprendi", {EMULATION_ITEM_RESUME, "Riprendi"},
"Impostazioni", {EMULATION_ITEM_SETTINGS, "Opzioni"},
"CPU", {SETTINGS_CATEGORY_CPU, "CPU"},
"Audio", {SETTINGS_CATEGORY_AUDIO, "Audio"},
"Interfaccia", {SETTINGS_CATEGORY_INTERFACE, "Interfaccia"},
"Muto", {SETTINGS_OPTION_MUTE, "Muta"},
"Volume L", {SETTINGS_OPTION_VOLUME_L, "Volume L"},
"Volume R", {SETTINGS_OPTION_VOLUME_R, "Volume R"},
"Blocca canali", {SETTINGS_OPTION_LOCK_CHANNELS, "Blocca canali"},
"Abilita JIT", {SETTINGS_OPTION_ENABLE_JIT, "Abilita JIT"},
"Lingua" {SETTINGS_OPTION_LANGUAGE, "Lingua"},
{SETTINGS_CLOSE, "Chiudi"}
}; };
enum AvailableLangs { enum AvailableLangs {
@@ -74,10 +78,10 @@ enum AvailableLangs {
AVAILABLE_LANGS_COUNT AVAILABLE_LANGS_COUNT
}; };
static const std::array<std::string, AVAILABLE_LANGS_COUNT> languages = { static const std::array<const char*, AVAILABLE_LANGS_COUNT> languages = {
"English", "English",
"Italiano" "Italiano"
}; };
void SetLanguage(std::array<std::string, STRING_COUNT>& lang, int selectedLang); void SetLanguage(std::map<StringID, const char*>& lang, int selectedLang);
} }

View File

@@ -5,7 +5,7 @@
#include <Core.hpp> #include <Core.hpp>
namespace fs = std::filesystem; namespace fs = std::filesystem;
#define GET_TRANSLATED_STRING(x) languageStrings[(x)].c_str() #define GET_TRANSLATED_STRING(x) languageStrings[(x)]
#define checknestedjsonentry(name, type, param1, param2, defaultVal) \ #define checknestedjsonentry(name, type, param1, param2, defaultVal) \
do { \ do { \
@@ -99,24 +99,24 @@ Settings::~Settings() {
settingsFile.close(); settingsFile.close();
} }
void Settings::RenderWidget(bool& show) { void Settings::RenderWidget(const int& mWw, const int& mWh, bool& show) {
if(show) { if(show) {
ImGui::OpenPopup(GET_TRANSLATED_STRING(Language::EMULATION_ITEM_SETTINGS)); ImGui::OpenPopup("##settings");
if(ImGui::BeginPopupModal(GET_TRANSLATED_STRING(Language::EMULATION_ITEM_SETTINGS), &show)) { const float posX = (float)mWw * (1.f / 32.f), posY = (float)mWh * (1.f / 32.f) + 20;
enum class SelectedSetting { CPU, Audio, Interface, COUNT }; const float sizeX = (float)mWw * (30.f / 32.f), sizeY = (float)mWh * (30.f / 32.f) - 20;
static SelectedSetting selectedSetting = SelectedSetting::CPU; ImGui::SetNextWindowPos({ posX, posY });
const char *categories[(int)SelectedSetting::COUNT] = { ImGui::SetNextWindowSize({ sizeX, sizeY });
GET_TRANSLATED_STRING(Language::SETTINGS_CATEGORY_CPU), if(ImGui::BeginPopupModal("##settings", &show, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove)) {
GET_TRANSLATED_STRING(Language::SETTINGS_CATEGORY_AUDIO), if (ImGui::BeginTabBar("##categories")) {
GET_TRANSLATED_STRING(Language::SETTINGS_CATEGORY_INTERFACE)}; if (ImGui::BeginTabItem(GET_TRANSLATED_STRING(Language::SETTINGS_CATEGORY_CPU))) {
ImGui::Checkbox(GET_TRANSLATED_STRING(Language::SETTINGS_OPTION_ENABLE_JIT), &jit);
ImGui::EndTabItem();
}
CreateComboList("##categories", (int*)&selectedSetting, categories, (int)SelectedSetting::COUNT); if (ImGui::BeginTabItem(GET_TRANSLATED_STRING(Language::SETTINGS_CATEGORY_AUDIO))) {
ImGui::Separator();
switch (selectedSetting) {
case SelectedSetting::Audio:
ImGui::Checkbox(GET_TRANSLATED_STRING(Language::SETTINGS_OPTION_LOCK_CHANNELS), &lockChannels); ImGui::Checkbox(GET_TRANSLATED_STRING(Language::SETTINGS_OPTION_LOCK_CHANNELS), &lockChannels);
ImGui::Checkbox(GET_TRANSLATED_STRING(Language::SETTINGS_OPTION_MUTE), &mute); ImGui::Checkbox(GET_TRANSLATED_STRING(Language::SETTINGS_OPTION_MUTE), &mute);
if(mute) { if (mute) {
volumeL = 0; volumeL = 0;
volumeR = 0; volumeR = 0;
@@ -147,23 +147,36 @@ void Settings::RenderWidget(bool& show) {
oldVolumeR = volumeR; oldVolumeR = volumeR;
} }
break; ImGui::EndTabItem();
case SelectedSetting::CPU: }
ImGui::Checkbox(GET_TRANSLATED_STRING(Language::SETTINGS_OPTION_ENABLE_JIT), &jit);
break; if (ImGui::BeginTabItem(GET_TRANSLATED_STRING(Language::SETTINGS_CATEGORY_INTERFACE))) {
case SelectedSetting::Interface: { static auto currentLang = selectedLanguage;
const char* languages[Language::AVAILABLE_LANGS_COUNT] = { const char* languages[Language::AVAILABLE_LANGS_COUNT] = {
Language::languages[Language::ENGLISH].c_str(), Language::languages[Language::ENGLISH],
Language::languages[Language::ITALIAN].c_str() Language::languages[Language::ITALIAN]
}; };
ImGui::Text("%s:", GET_TRANSLATED_STRING(Language::SETTINGS_OPTION_LANGUAGE)); ImGui::Text("%s:", GET_TRANSLATED_STRING(Language::SETTINGS_OPTION_LANGUAGE));
CreateComboList("##language", (int*)&selectedLanguage, languages, (int)Language::AVAILABLE_LANGS_COUNT); CreateComboList("##language", (int*)&selectedLanguage, languages, (int)Language::AVAILABLE_LANGS_COUNT);
ImGui::Separator(); ImGui::Separator();
} break;
case SelectedSetting::COUNT: if (currentLang != selectedLanguage) {
Util::panic("BRUH"); currentLang = selectedLanguage;
Language::SetLanguage(languageStrings, selectedLanguage);
} }
ImGui::EndTabItem();
}
ImGui::EndTabBar();
}
const auto style = ImGui::GetStyle();
ImGui::SetCursorPos({
ImGui::GetWindowWidth() - ImGui::CalcTextSize(GET_TRANSLATED_STRING(Language::SETTINGS_CLOSE)).x - style.FramePadding.x * 5,
ImGui::GetWindowHeight() - ImGui::CalcTextSize(GET_TRANSLATED_STRING(Language::SETTINGS_CLOSE)).y - style.FramePadding.y * 5,
});
if (ImGui::Button(GET_TRANSLATED_STRING(Language::SETTINGS_CLOSE))) show = false;
ImGui::EndPopup(); ImGui::EndPopup();
} }
} }

View File

@@ -12,8 +12,8 @@ struct Settings {
[[nodiscard]] FORCE_INLINE float GetVolumeL() const { return volumeL; }; [[nodiscard]] FORCE_INLINE float GetVolumeL() const { return volumeL; };
[[nodiscard]] FORCE_INLINE float GetVolumeR() const { return volumeR; }; [[nodiscard]] FORCE_INLINE float GetVolumeR() const { return volumeR; };
void RenderWidget(bool& show); void RenderWidget(const int& mWw, const int& mWh, bool& show);
std::array<std::string, Language::STRING_COUNT> languageStrings{}; std::map<Language::StringID, const char*> languageStrings{};
private: private:
bool jit = false; bool jit = false;
float volumeL, volumeR; float volumeL, volumeR;

View File

@@ -7,7 +7,7 @@
VkInstance instance{}; VkInstance instance{};
namespace fs = std::filesystem; namespace fs = std::filesystem;
#define GET_TRANSLATED_STRING(x) settings.languageStrings[(x)].c_str() #define GET_TRANSLATED_STRING(x) settings.languageStrings[(x)]
Window::Window(n64::Core& core) : settings(core) { Window::Window(n64::Core& core) : settings(core) {
InitSDL(); InitSDL();
@@ -17,11 +17,11 @@ Window::Window(n64::Core& core) : settings(core) {
} }
void Window::handleEvents(SDL_Event event, n64::Core& core) { void Window::handleEvents(SDL_Event event, n64::Core& core) {
done = event.window.event == SDL_WINDOWEVENT_CLOSE done = event.window.event == (u8)SDL_WINDOWEVENT_CLOSE
&& event.window.windowID == SDL_GetWindowID(window); && event.window.windowID == SDL_GetWindowID(window);
bool minimized = SDL_GetWindowFlags(window) & SDL_WINDOW_MINIMIZED; bool minimized = SDL_GetWindowFlags(window) & SDL_WINDOW_MINIMIZED;
core.pause = event.window.event == SDL_WINDOWEVENT_FOCUS_LOST || minimized; core.pause = event.window.event == (u8)SDL_WINDOWEVENT_FOCUS_LOST || minimized;
core.render = !minimized; core.render = !minimized;
} }
@@ -244,7 +244,10 @@ void Window::Render(n64::Core& core) {
RenderMainMenuBar(core); RenderMainMenuBar(core);
} }
settings.RenderWidget(showSettings); int w, h;
SDL_GetWindowSize(window, &w, &h);
settings.RenderWidget(w, h, showSettings);
ImGui::PopFont(); ImGui::PopFont();
} }