config.cpp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. // Copyright 2014 Citra Emulator Project
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #include <QSettings>
  5. #include <QString>
  6. #include <QStringList>
  7. #include "citra_qt/config.h"
  8. #include "common/file_util.h"
  9. #include "core/settings.h"
  10. Config::Config() {
  11. // TODO: Don't hardcode the path; let the frontend decide where to put the config files.
  12. qt_config_loc = FileUtil::GetUserPath(D_CONFIG_IDX) + "qt-config.ini";
  13. FileUtil::CreateFullPath(qt_config_loc);
  14. qt_config = new QSettings(QString::fromStdString(qt_config_loc), QSettings::IniFormat);
  15. Reload();
  16. }
  17. static const std::array<QVariant, Settings::NativeInput::NUM_INPUTS> defaults = {
  18. Qt::Key_A, Qt::Key_S, Qt::Key_Z, Qt::Key_X,
  19. Qt::Key_Q, Qt::Key_W, Qt::Key_1, Qt::Key_2,
  20. Qt::Key_M, Qt::Key_N, Qt::Key_B,
  21. Qt::Key_T, Qt::Key_G, Qt::Key_F, Qt::Key_H,
  22. Qt::Key_Up, Qt::Key_Down, Qt::Key_Left, Qt::Key_Right,
  23. Qt::Key_I, Qt::Key_K, Qt::Key_J, Qt::Key_L
  24. };
  25. void Config::ReadValues() {
  26. qt_config->beginGroup("Controls");
  27. for (int i = 0; i < Settings::NativeInput::NUM_INPUTS; ++i) {
  28. Settings::values.input_mappings[Settings::NativeInput::All[i]] =
  29. qt_config->value(QString::fromStdString(Settings::NativeInput::Mapping[i]), defaults[i]).toInt();
  30. }
  31. qt_config->endGroup();
  32. qt_config->beginGroup("Core");
  33. Settings::values.frame_skip = qt_config->value("frame_skip", 0).toInt();
  34. qt_config->endGroup();
  35. qt_config->beginGroup("Renderer");
  36. Settings::values.use_hw_renderer = qt_config->value("use_hw_renderer", false).toBool();
  37. Settings::values.use_shader_jit = qt_config->value("use_shader_jit", true).toBool();
  38. Settings::values.bg_red = qt_config->value("bg_red", 1.0).toFloat();
  39. Settings::values.bg_green = qt_config->value("bg_green", 1.0).toFloat();
  40. Settings::values.bg_blue = qt_config->value("bg_blue", 1.0).toFloat();
  41. qt_config->endGroup();
  42. qt_config->beginGroup("Data Storage");
  43. Settings::values.use_virtual_sd = qt_config->value("use_virtual_sd", true).toBool();
  44. qt_config->endGroup();
  45. qt_config->beginGroup("System Region");
  46. Settings::values.region_value = qt_config->value("region_value", 1).toInt();
  47. qt_config->endGroup();
  48. qt_config->beginGroup("Miscellaneous");
  49. Settings::values.log_filter = qt_config->value("log_filter", "*:Info").toString().toStdString();
  50. qt_config->endGroup();
  51. qt_config->beginGroup("Debugging");
  52. Settings::values.use_gdbstub = qt_config->value("use_gdbstub", false).toBool();
  53. Settings::values.gdbstub_port = qt_config->value("gdbstub_port", 24689).toInt();
  54. qt_config->endGroup();
  55. }
  56. void Config::SaveValues() {
  57. qt_config->beginGroup("Controls");
  58. for (int i = 0; i < Settings::NativeInput::NUM_INPUTS; ++i) {
  59. qt_config->setValue(QString::fromStdString(Settings::NativeInput::Mapping[i]),
  60. Settings::values.input_mappings[Settings::NativeInput::All[i]]);
  61. }
  62. qt_config->endGroup();
  63. qt_config->beginGroup("Core");
  64. qt_config->setValue("frame_skip", Settings::values.frame_skip);
  65. qt_config->endGroup();
  66. qt_config->beginGroup("Renderer");
  67. qt_config->setValue("use_hw_renderer", Settings::values.use_hw_renderer);
  68. qt_config->setValue("use_shader_jit", Settings::values.use_shader_jit);
  69. // Cast to double because Qt's written float values are not human-readable
  70. qt_config->setValue("bg_red", (double)Settings::values.bg_red);
  71. qt_config->setValue("bg_green", (double)Settings::values.bg_green);
  72. qt_config->setValue("bg_blue", (double)Settings::values.bg_blue);
  73. qt_config->endGroup();
  74. qt_config->beginGroup("Data Storage");
  75. qt_config->setValue("use_virtual_sd", Settings::values.use_virtual_sd);
  76. qt_config->endGroup();
  77. qt_config->beginGroup("System Region");
  78. qt_config->setValue("region_value", Settings::values.region_value);
  79. qt_config->endGroup();
  80. qt_config->beginGroup("Miscellaneous");
  81. qt_config->setValue("log_filter", QString::fromStdString(Settings::values.log_filter));
  82. qt_config->endGroup();
  83. qt_config->beginGroup("Debugging");
  84. qt_config->setValue("use_gdbstub", Settings::values.use_gdbstub);
  85. qt_config->setValue("gdbstub_port", Settings::values.gdbstub_port);
  86. qt_config->endGroup();
  87. }
  88. void Config::Reload() {
  89. ReadValues();
  90. }
  91. void Config::Save() {
  92. SaveValues();
  93. }
  94. Config::~Config() {
  95. Save();
  96. delete qt_config;
  97. }