From e6594f9f53df456db42ab2091a7b1397070ff9c8 Mon Sep 17 00:00:00 2001 From: archshift Date: Fri, 12 Sep 2014 17:06:13 -0700 Subject: Added configuration file system. Uses QSettings on citra-qt, and inih on citra-cli. --- src/citra/config.cpp | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 src/citra/config.cpp (limited to 'src/citra/config.cpp') diff --git a/src/citra/config.cpp b/src/citra/config.cpp new file mode 100644 index 00000000..1d5e9c71 --- /dev/null +++ b/src/citra/config.cpp @@ -0,0 +1,65 @@ +// Copyright 2014 Citra Emulator Project +// Licensed under GPLv2 +// Refer to the license.txt file included. + +#include + +#include "citra/default_ini.h" +#include "common/file_util.h" +#include "core/settings.h" + +#include "config.h" + +Config::Config() { + // TODO: Don't hardcode the path; let the frontend decide where to put the config files. + glfw_config_loc = FileUtil::GetUserPath(D_CONFIG_IDX) + "glfw-config.ini"; + glfw_config = new INIReader(glfw_config_loc); + + Reload(); +} + +bool Config::LoadINI(INIReader* config, const char* location, const std::string& default_contents, bool retry) { + if (config->ParseError() < 0) { + if (retry) { + ERROR_LOG(CONFIG, "Failed to load %s. Creating file from defaults...", location); + FileUtil::CreateFullPath(location); + FileUtil::WriteStringToFile(true, default_contents, location); + *config = INIReader(location); // Reopen file + + return LoadINI(config, location, default_contents, false); + } + ERROR_LOG(CONFIG, "Failed."); + return false; + } + INFO_LOG(CONFIG, "Successfully loaded %s", location); + return true; +} + +void Config::ReadControls() { + Settings::values.pad_a_key = glfw_config->GetInteger("Controls", "pad_a", GLFW_KEY_A); + Settings::values.pad_b_key = glfw_config->GetInteger("Controls", "pad_b", GLFW_KEY_S); + Settings::values.pad_x_key = glfw_config->GetInteger("Controls", "pad_x", GLFW_KEY_Z); + Settings::values.pad_y_key = glfw_config->GetInteger("Controls", "pad_y", GLFW_KEY_X); + Settings::values.pad_l_key = glfw_config->GetInteger("Controls", "pad_l", GLFW_KEY_Q); + Settings::values.pad_r_key = glfw_config->GetInteger("Controls", "pad_r", GLFW_KEY_W); + Settings::values.pad_start_key = glfw_config->GetInteger("Controls", "pad_start", GLFW_KEY_M); + Settings::values.pad_select_key = glfw_config->GetInteger("Controls", "pad_select", GLFW_KEY_N); + Settings::values.pad_home_key = glfw_config->GetInteger("Controls", "pad_home", GLFW_KEY_B); + Settings::values.pad_dup_key = glfw_config->GetInteger("Controls", "pad_dup", GLFW_KEY_T); + Settings::values.pad_ddown_key = glfw_config->GetInteger("Controls", "pad_ddown", GLFW_KEY_G); + Settings::values.pad_dleft_key = glfw_config->GetInteger("Controls", "pad_dleft", GLFW_KEY_F); + Settings::values.pad_dright_key = glfw_config->GetInteger("Controls", "pad_dright", GLFW_KEY_H); + Settings::values.pad_sup_key = glfw_config->GetInteger("Controls", "pad_sup", GLFW_KEY_UP); + Settings::values.pad_sdown_key = glfw_config->GetInteger("Controls", "pad_sdown", GLFW_KEY_DOWN); + Settings::values.pad_sleft_key = glfw_config->GetInteger("Controls", "pad_sleft", GLFW_KEY_LEFT); + Settings::values.pad_sright_key = glfw_config->GetInteger("Controls", "pad_sright", GLFW_KEY_RIGHT); +} + +void Config::Reload() { + LoadINI(glfw_config, glfw_config_loc.c_str(), DefaultINI::glfw_config_file); + ReadControls(); +} + +Config::~Config() { + delete glfw_config; +} -- cgit v1.2.3