diff options
| -rw-r--r-- | src/yuzu/configuration/config.cpp | 448 | ||||
| -rw-r--r-- | src/yuzu/configuration/config.h | 5 |
2 files changed, 250 insertions, 203 deletions
diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp index 74dc6bb28..4650f96a3 100644 --- a/src/yuzu/configuration/config.cpp +++ b/src/yuzu/configuration/config.cpp | |||
| @@ -209,7 +209,7 @@ void Config::ReadPlayerValues() { | |||
| 209 | for (std::size_t p = 0; p < Settings::values.players.size(); ++p) { | 209 | for (std::size_t p = 0; p < Settings::values.players.size(); ++p) { |
| 210 | auto& player = Settings::values.players[p]; | 210 | auto& player = Settings::values.players[p]; |
| 211 | 211 | ||
| 212 | player.connected = qt_config->value(QString("player_%1_connected").arg(p), false).toBool(); | 212 | player.connected = ReadSetting(QString("player_%1_connected").arg(p), false).toBool(); |
| 213 | 213 | ||
| 214 | player.type = static_cast<Settings::ControllerType>( | 214 | player.type = static_cast<Settings::ControllerType>( |
| 215 | qt_config | 215 | qt_config |
| @@ -269,7 +269,7 @@ void Config::ReadPlayerValues() { | |||
| 269 | } | 269 | } |
| 270 | 270 | ||
| 271 | void Config::ReadDebugValues() { | 271 | void Config::ReadDebugValues() { |
| 272 | Settings::values.debug_pad_enabled = qt_config->value("debug_pad_enabled", false).toBool(); | 272 | Settings::values.debug_pad_enabled = ReadSetting("debug_pad_enabled", false).toBool(); |
| 273 | for (int i = 0; i < Settings::NativeButton::NumButtons; ++i) { | 273 | for (int i = 0; i < Settings::NativeButton::NumButtons; ++i) { |
| 274 | std::string default_param = InputCommon::GenerateKeyboardParam(default_buttons[i]); | 274 | std::string default_param = InputCommon::GenerateKeyboardParam(default_buttons[i]); |
| 275 | Settings::values.debug_pad_buttons[i] = | 275 | Settings::values.debug_pad_buttons[i] = |
| @@ -298,7 +298,7 @@ void Config::ReadDebugValues() { | |||
| 298 | } | 298 | } |
| 299 | 299 | ||
| 300 | void Config::ReadKeyboardValues() { | 300 | void Config::ReadKeyboardValues() { |
| 301 | Settings::values.keyboard_enabled = qt_config->value("keyboard_enabled", false).toBool(); | 301 | Settings::values.keyboard_enabled = ReadSetting("keyboard_enabled", false).toBool(); |
| 302 | 302 | ||
| 303 | std::transform(default_keyboard_keys.begin(), default_keyboard_keys.end(), | 303 | std::transform(default_keyboard_keys.begin(), default_keyboard_keys.end(), |
| 304 | Settings::values.keyboard_keys.begin(), InputCommon::GenerateKeyboardParam); | 304 | Settings::values.keyboard_keys.begin(), InputCommon::GenerateKeyboardParam); |
| @@ -311,7 +311,7 @@ void Config::ReadKeyboardValues() { | |||
| 311 | } | 311 | } |
| 312 | 312 | ||
| 313 | void Config::ReadMouseValues() { | 313 | void Config::ReadMouseValues() { |
| 314 | Settings::values.mouse_enabled = qt_config->value("mouse_enabled", false).toBool(); | 314 | Settings::values.mouse_enabled = ReadSetting("mouse_enabled", false).toBool(); |
| 315 | 315 | ||
| 316 | for (int i = 0; i < Settings::NativeMouseButton::NumMouseButtons; ++i) { | 316 | for (int i = 0; i < Settings::NativeMouseButton::NumMouseButtons; ++i) { |
| 317 | std::string default_param = InputCommon::GenerateKeyboardParam(default_mouse_buttons[i]); | 317 | std::string default_param = InputCommon::GenerateKeyboardParam(default_mouse_buttons[i]); |
| @@ -327,16 +327,14 @@ void Config::ReadMouseValues() { | |||
| 327 | } | 327 | } |
| 328 | 328 | ||
| 329 | void Config::ReadTouchscreenValues() { | 329 | void Config::ReadTouchscreenValues() { |
| 330 | Settings::values.touchscreen.enabled = qt_config->value("touchscreen_enabled", true).toBool(); | 330 | Settings::values.touchscreen.enabled = ReadSetting("touchscreen_enabled", true).toBool(); |
| 331 | Settings::values.touchscreen.device = | 331 | Settings::values.touchscreen.device = |
| 332 | qt_config->value("touchscreen_device", "engine:emu_window").toString().toStdString(); | 332 | ReadSetting("touchscreen_device", "engine:emu_window").toString().toStdString(); |
| 333 | 333 | ||
| 334 | Settings::values.touchscreen.finger = qt_config->value("touchscreen_finger", 0).toUInt(); | 334 | Settings::values.touchscreen.finger = ReadSetting("touchscreen_finger", 0).toUInt(); |
| 335 | Settings::values.touchscreen.rotation_angle = qt_config->value("touchscreen_angle", 0).toUInt(); | 335 | Settings::values.touchscreen.rotation_angle = ReadSetting("touchscreen_angle", 0).toUInt(); |
| 336 | Settings::values.touchscreen.diameter_x = | 336 | Settings::values.touchscreen.diameter_x = ReadSetting("touchscreen_diameter_x", 15).toUInt(); |
| 337 | qt_config->value("touchscreen_diameter_x", 15).toUInt(); | 337 | Settings::values.touchscreen.diameter_y = ReadSetting("touchscreen_diameter_y", 15).toUInt(); |
| 338 | Settings::values.touchscreen.diameter_y = | ||
| 339 | qt_config->value("touchscreen_diameter_y", 15).toUInt(); | ||
| 340 | qt_config->endGroup(); | 338 | qt_config->endGroup(); |
| 341 | } | 339 | } |
| 342 | 340 | ||
| @@ -357,42 +355,41 @@ void Config::ReadValues() { | |||
| 357 | ReadTouchscreenValues(); | 355 | ReadTouchscreenValues(); |
| 358 | 356 | ||
| 359 | Settings::values.motion_device = | 357 | Settings::values.motion_device = |
| 360 | qt_config->value("motion_device", "engine:motion_emu,update_period:100,sensitivity:0.01") | 358 | ReadSetting("motion_device", "engine:motion_emu,update_period:100,sensitivity:0.01") |
| 361 | .toString() | 359 | .toString() |
| 362 | .toStdString(); | 360 | .toStdString(); |
| 363 | 361 | ||
| 364 | qt_config->beginGroup("Core"); | 362 | qt_config->beginGroup("Core"); |
| 365 | Settings::values.use_cpu_jit = qt_config->value("use_cpu_jit", true).toBool(); | 363 | Settings::values.use_cpu_jit = ReadSetting("use_cpu_jit", true).toBool(); |
| 366 | Settings::values.use_multi_core = qt_config->value("use_multi_core", false).toBool(); | 364 | Settings::values.use_multi_core = ReadSetting("use_multi_core", false).toBool(); |
| 367 | qt_config->endGroup(); | 365 | qt_config->endGroup(); |
| 368 | 366 | ||
| 369 | qt_config->beginGroup("Renderer"); | 367 | qt_config->beginGroup("Renderer"); |
| 370 | Settings::values.resolution_factor = qt_config->value("resolution_factor", 1.0).toFloat(); | 368 | Settings::values.resolution_factor = ReadSetting("resolution_factor", 1.0).toFloat(); |
| 371 | Settings::values.use_frame_limit = qt_config->value("use_frame_limit", true).toBool(); | 369 | Settings::values.use_frame_limit = ReadSetting("use_frame_limit", true).toBool(); |
| 372 | Settings::values.frame_limit = qt_config->value("frame_limit", 100).toInt(); | 370 | Settings::values.frame_limit = ReadSetting("frame_limit", 100).toInt(); |
| 373 | Settings::values.use_disk_shader_cache = | 371 | Settings::values.use_disk_shader_cache = ReadSetting("use_disk_shader_cache", true).toBool(); |
| 374 | qt_config->value("use_disk_shader_cache", false).toBool(); | ||
| 375 | Settings::values.use_accurate_gpu_emulation = | 372 | Settings::values.use_accurate_gpu_emulation = |
| 376 | qt_config->value("use_accurate_gpu_emulation", false).toBool(); | 373 | ReadSetting("use_accurate_gpu_emulation", false).toBool(); |
| 377 | Settings::values.use_asynchronous_gpu_emulation = | 374 | Settings::values.use_asynchronous_gpu_emulation = |
| 378 | qt_config->value("use_asynchronous_gpu_emulation", false).toBool(); | 375 | ReadSetting("use_asynchronous_gpu_emulation", false).toBool(); |
| 379 | 376 | ||
| 380 | Settings::values.bg_red = qt_config->value("bg_red", 0.0).toFloat(); | 377 | Settings::values.bg_red = ReadSetting("bg_red", 0.0).toFloat(); |
| 381 | Settings::values.bg_green = qt_config->value("bg_green", 0.0).toFloat(); | 378 | Settings::values.bg_green = ReadSetting("bg_green", 0.0).toFloat(); |
| 382 | Settings::values.bg_blue = qt_config->value("bg_blue", 0.0).toFloat(); | 379 | Settings::values.bg_blue = ReadSetting("bg_blue", 0.0).toFloat(); |
| 383 | qt_config->endGroup(); | 380 | qt_config->endGroup(); |
| 384 | 381 | ||
| 385 | qt_config->beginGroup("Audio"); | 382 | qt_config->beginGroup("Audio"); |
| 386 | Settings::values.sink_id = qt_config->value("output_engine", "auto").toString().toStdString(); | 383 | Settings::values.sink_id = ReadSetting("output_engine", "auto").toString().toStdString(); |
| 387 | Settings::values.enable_audio_stretching = | 384 | Settings::values.enable_audio_stretching = |
| 388 | qt_config->value("enable_audio_stretching", true).toBool(); | 385 | ReadSetting("enable_audio_stretching", true).toBool(); |
| 389 | Settings::values.audio_device_id = | 386 | Settings::values.audio_device_id = |
| 390 | qt_config->value("output_device", "auto").toString().toStdString(); | 387 | ReadSetting("output_device", "auto").toString().toStdString(); |
| 391 | Settings::values.volume = qt_config->value("volume", 1).toFloat(); | 388 | Settings::values.volume = ReadSetting("volume", 1).toFloat(); |
| 392 | qt_config->endGroup(); | 389 | qt_config->endGroup(); |
| 393 | 390 | ||
| 394 | qt_config->beginGroup("Data Storage"); | 391 | qt_config->beginGroup("Data Storage"); |
| 395 | Settings::values.use_virtual_sd = qt_config->value("use_virtual_sd", true).toBool(); | 392 | Settings::values.use_virtual_sd = ReadSetting("use_virtual_sd", true).toBool(); |
| 396 | FileUtil::GetUserPath( | 393 | FileUtil::GetUserPath( |
| 397 | FileUtil::UserPath::NANDDir, | 394 | FileUtil::UserPath::NANDDir, |
| 398 | qt_config | 395 | qt_config |
| @@ -410,30 +407,30 @@ void Config::ReadValues() { | |||
| 410 | qt_config->endGroup(); | 407 | qt_config->endGroup(); |
| 411 | 408 | ||
| 412 | qt_config->beginGroup("Core"); | 409 | qt_config->beginGroup("Core"); |
| 413 | Settings::values.use_cpu_jit = qt_config->value("use_cpu_jit", true).toBool(); | 410 | Settings::values.use_cpu_jit = ReadSetting("use_cpu_jit", true).toBool(); |
| 414 | Settings::values.use_multi_core = qt_config->value("use_multi_core", false).toBool(); | 411 | Settings::values.use_multi_core = ReadSetting("use_multi_core", false).toBool(); |
| 415 | qt_config->endGroup(); | 412 | qt_config->endGroup(); |
| 416 | 413 | ||
| 417 | qt_config->beginGroup("System"); | 414 | qt_config->beginGroup("System"); |
| 418 | Settings::values.use_docked_mode = qt_config->value("use_docked_mode", false).toBool(); | 415 | Settings::values.use_docked_mode = ReadSetting("use_docked_mode", false).toBool(); |
| 419 | Settings::values.enable_nfc = qt_config->value("enable_nfc", true).toBool(); | 416 | Settings::values.enable_nfc = ReadSetting("enable_nfc", true).toBool(); |
| 420 | 417 | ||
| 421 | Settings::values.current_user = std::clamp<int>(qt_config->value("current_user", 0).toInt(), 0, | 418 | Settings::values.current_user = |
| 422 | Service::Account::MAX_USERS - 1); | 419 | std::clamp<int>(ReadSetting("current_user", 0).toInt(), 0, Service::Account::MAX_USERS - 1); |
| 423 | 420 | ||
| 424 | Settings::values.language_index = qt_config->value("language_index", 1).toInt(); | 421 | Settings::values.language_index = ReadSetting("language_index", 1).toInt(); |
| 425 | 422 | ||
| 426 | const auto rng_seed_enabled = qt_config->value("rng_seed_enabled", false).toBool(); | 423 | const auto rng_seed_enabled = ReadSetting("rng_seed_enabled", false).toBool(); |
| 427 | if (rng_seed_enabled) { | 424 | if (rng_seed_enabled) { |
| 428 | Settings::values.rng_seed = qt_config->value("rng_seed", 0).toULongLong(); | 425 | Settings::values.rng_seed = ReadSetting("rng_seed", 0).toULongLong(); |
| 429 | } else { | 426 | } else { |
| 430 | Settings::values.rng_seed = std::nullopt; | 427 | Settings::values.rng_seed = std::nullopt; |
| 431 | } | 428 | } |
| 432 | 429 | ||
| 433 | const auto custom_rtc_enabled = qt_config->value("custom_rtc_enabled", false).toBool(); | 430 | const auto custom_rtc_enabled = ReadSetting("custom_rtc_enabled", false).toBool(); |
| 434 | if (custom_rtc_enabled) { | 431 | if (custom_rtc_enabled) { |
| 435 | Settings::values.custom_rtc = | 432 | Settings::values.custom_rtc = |
| 436 | std::chrono::seconds(qt_config->value("custom_rtc", 0).toULongLong()); | 433 | std::chrono::seconds(ReadSetting("custom_rtc", 0).toULongLong()); |
| 437 | } else { | 434 | } else { |
| 438 | Settings::values.custom_rtc = std::nullopt; | 435 | Settings::values.custom_rtc = std::nullopt; |
| 439 | } | 436 | } |
| @@ -441,35 +438,35 @@ void Config::ReadValues() { | |||
| 441 | qt_config->endGroup(); | 438 | qt_config->endGroup(); |
| 442 | 439 | ||
| 443 | qt_config->beginGroup("Miscellaneous"); | 440 | qt_config->beginGroup("Miscellaneous"); |
| 444 | Settings::values.log_filter = qt_config->value("log_filter", "*:Info").toString().toStdString(); | 441 | Settings::values.log_filter = ReadSetting("log_filter", "*:Info").toString().toStdString(); |
| 445 | Settings::values.use_dev_keys = qt_config->value("use_dev_keys", false).toBool(); | 442 | Settings::values.use_dev_keys = ReadSetting("use_dev_keys", false).toBool(); |
| 446 | qt_config->endGroup(); | 443 | qt_config->endGroup(); |
| 447 | 444 | ||
| 448 | qt_config->beginGroup("Debugging"); | 445 | qt_config->beginGroup("Debugging"); |
| 449 | Settings::values.use_gdbstub = qt_config->value("use_gdbstub", false).toBool(); | 446 | Settings::values.use_gdbstub = ReadSetting("use_gdbstub", false).toBool(); |
| 450 | Settings::values.gdbstub_port = qt_config->value("gdbstub_port", 24689).toInt(); | 447 | Settings::values.gdbstub_port = ReadSetting("gdbstub_port", 24689).toInt(); |
| 451 | Settings::values.program_args = qt_config->value("program_args", "").toString().toStdString(); | 448 | Settings::values.program_args = ReadSetting("program_args", "").toString().toStdString(); |
| 452 | Settings::values.dump_exefs = qt_config->value("dump_exefs", false).toBool(); | 449 | Settings::values.dump_exefs = ReadSetting("dump_exefs", false).toBool(); |
| 453 | Settings::values.dump_nso = qt_config->value("dump_nso", false).toBool(); | 450 | Settings::values.dump_nso = ReadSetting("dump_nso", false).toBool(); |
| 454 | qt_config->endGroup(); | 451 | qt_config->endGroup(); |
| 455 | 452 | ||
| 456 | qt_config->beginGroup("WebService"); | 453 | qt_config->beginGroup("WebService"); |
| 457 | Settings::values.enable_telemetry = qt_config->value("enable_telemetry", true).toBool(); | 454 | Settings::values.enable_telemetry = ReadSetting("enable_telemetry", true).toBool(); |
| 458 | Settings::values.web_api_url = | 455 | Settings::values.web_api_url = |
| 459 | qt_config->value("web_api_url", "https://api.yuzu-emu.org").toString().toStdString(); | 456 | ReadSetting("web_api_url", "https://api.yuzu-emu.org").toString().toStdString(); |
| 460 | Settings::values.yuzu_username = qt_config->value("yuzu_username").toString().toStdString(); | 457 | Settings::values.yuzu_username = ReadSetting("yuzu_username").toString().toStdString(); |
| 461 | Settings::values.yuzu_token = qt_config->value("yuzu_token").toString().toStdString(); | 458 | Settings::values.yuzu_token = ReadSetting("yuzu_token").toString().toStdString(); |
| 462 | qt_config->endGroup(); | 459 | qt_config->endGroup(); |
| 463 | 460 | ||
| 464 | const auto size = qt_config->beginReadArray("DisabledAddOns"); | 461 | const auto size = qt_config->beginReadArray("DisabledAddOns"); |
| 465 | for (int i = 0; i < size; ++i) { | 462 | for (int i = 0; i < size; ++i) { |
| 466 | qt_config->setArrayIndex(i); | 463 | qt_config->setArrayIndex(i); |
| 467 | const auto title_id = qt_config->value("title_id", 0).toULongLong(); | 464 | const auto title_id = ReadSetting("title_id", 0).toULongLong(); |
| 468 | std::vector<std::string> out; | 465 | std::vector<std::string> out; |
| 469 | const auto d_size = qt_config->beginReadArray("disabled"); | 466 | const auto d_size = qt_config->beginReadArray("disabled"); |
| 470 | for (int j = 0; j < d_size; ++j) { | 467 | for (int j = 0; j < d_size; ++j) { |
| 471 | qt_config->setArrayIndex(j); | 468 | qt_config->setArrayIndex(j); |
| 472 | out.push_back(qt_config->value("d", "").toString().toStdString()); | 469 | out.push_back(ReadSetting("d", "").toString().toStdString()); |
| 473 | } | 470 | } |
| 474 | qt_config->endArray(); | 471 | qt_config->endArray(); |
| 475 | Settings::values.disabled_addons.insert_or_assign(title_id, out); | 472 | Settings::values.disabled_addons.insert_or_assign(title_id, out); |
| @@ -477,41 +474,38 @@ void Config::ReadValues() { | |||
| 477 | qt_config->endArray(); | 474 | qt_config->endArray(); |
| 478 | 475 | ||
| 479 | qt_config->beginGroup("UI"); | 476 | qt_config->beginGroup("UI"); |
| 480 | UISettings::values.theme = qt_config->value("theme", UISettings::themes[0].second).toString(); | 477 | UISettings::values.theme = ReadSetting("theme", UISettings::themes[0].second).toString(); |
| 481 | UISettings::values.enable_discord_presence = | 478 | UISettings::values.enable_discord_presence = |
| 482 | qt_config->value("enable_discord_presence", true).toBool(); | 479 | ReadSetting("enable_discord_presence", true).toBool(); |
| 483 | UISettings::values.screenshot_resolution_factor = | 480 | UISettings::values.screenshot_resolution_factor = |
| 484 | static_cast<u16>(qt_config->value("screenshot_resolution_factor", 0).toUInt()); | 481 | static_cast<u16>(ReadSetting("screenshot_resolution_factor", 0).toUInt()); |
| 485 | UISettings::values.select_user_on_boot = | 482 | UISettings::values.select_user_on_boot = ReadSetting("select_user_on_boot", false).toBool(); |
| 486 | qt_config->value("select_user_on_boot", false).toBool(); | ||
| 487 | 483 | ||
| 488 | qt_config->beginGroup("UIGameList"); | 484 | qt_config->beginGroup("UIGameList"); |
| 489 | UISettings::values.show_unknown = qt_config->value("show_unknown", true).toBool(); | 485 | UISettings::values.show_unknown = ReadSetting("show_unknown", true).toBool(); |
| 490 | UISettings::values.show_add_ons = qt_config->value("show_add_ons", true).toBool(); | 486 | UISettings::values.show_add_ons = ReadSetting("show_add_ons", true).toBool(); |
| 491 | UISettings::values.icon_size = qt_config->value("icon_size", 64).toUInt(); | 487 | UISettings::values.icon_size = ReadSetting("icon_size", 64).toUInt(); |
| 492 | UISettings::values.row_1_text_id = qt_config->value("row_1_text_id", 3).toUInt(); | 488 | UISettings::values.row_1_text_id = ReadSetting("row_1_text_id", 3).toUInt(); |
| 493 | UISettings::values.row_2_text_id = qt_config->value("row_2_text_id", 2).toUInt(); | 489 | UISettings::values.row_2_text_id = ReadSetting("row_2_text_id", 2).toUInt(); |
| 494 | qt_config->endGroup(); | 490 | qt_config->endGroup(); |
| 495 | 491 | ||
| 496 | qt_config->beginGroup("UILayout"); | 492 | qt_config->beginGroup("UILayout"); |
| 497 | UISettings::values.geometry = qt_config->value("geometry").toByteArray(); | 493 | UISettings::values.geometry = ReadSetting("geometry").toByteArray(); |
| 498 | UISettings::values.state = qt_config->value("state").toByteArray(); | 494 | UISettings::values.state = ReadSetting("state").toByteArray(); |
| 499 | UISettings::values.renderwindow_geometry = | 495 | UISettings::values.renderwindow_geometry = ReadSetting("geometryRenderWindow").toByteArray(); |
| 500 | qt_config->value("geometryRenderWindow").toByteArray(); | 496 | UISettings::values.gamelist_header_state = ReadSetting("gameListHeaderState").toByteArray(); |
| 501 | UISettings::values.gamelist_header_state = | ||
| 502 | qt_config->value("gameListHeaderState").toByteArray(); | ||
| 503 | UISettings::values.microprofile_geometry = | 497 | UISettings::values.microprofile_geometry = |
| 504 | qt_config->value("microProfileDialogGeometry").toByteArray(); | 498 | ReadSetting("microProfileDialogGeometry").toByteArray(); |
| 505 | UISettings::values.microprofile_visible = | 499 | UISettings::values.microprofile_visible = |
| 506 | qt_config->value("microProfileDialogVisible", false).toBool(); | 500 | ReadSetting("microProfileDialogVisible", false).toBool(); |
| 507 | qt_config->endGroup(); | 501 | qt_config->endGroup(); |
| 508 | 502 | ||
| 509 | qt_config->beginGroup("Paths"); | 503 | qt_config->beginGroup("Paths"); |
| 510 | UISettings::values.roms_path = qt_config->value("romsPath").toString(); | 504 | UISettings::values.roms_path = ReadSetting("romsPath").toString(); |
| 511 | UISettings::values.symbols_path = qt_config->value("symbolsPath").toString(); | 505 | UISettings::values.symbols_path = ReadSetting("symbolsPath").toString(); |
| 512 | UISettings::values.gamedir = qt_config->value("gameListRootDir", ".").toString(); | 506 | UISettings::values.gamedir = ReadSetting("gameListRootDir", ".").toString(); |
| 513 | UISettings::values.gamedir_deepscan = qt_config->value("gameListDeepScan", false).toBool(); | 507 | UISettings::values.gamedir_deepscan = ReadSetting("gameListDeepScan", false).toBool(); |
| 514 | UISettings::values.recent_files = qt_config->value("recentFiles").toStringList(); | 508 | UISettings::values.recent_files = ReadSetting("recentFiles").toStringList(); |
| 515 | qt_config->endGroup(); | 509 | qt_config->endGroup(); |
| 516 | 510 | ||
| 517 | qt_config->beginGroup("Shortcuts"); | 511 | qt_config->beginGroup("Shortcuts"); |
| @@ -524,8 +518,8 @@ void Config::ReadValues() { | |||
| 524 | qt_config->beginGroup(hotkey); | 518 | qt_config->beginGroup(hotkey); |
| 525 | UISettings::values.shortcuts.emplace_back(UISettings::Shortcut( | 519 | UISettings::values.shortcuts.emplace_back(UISettings::Shortcut( |
| 526 | group + "/" + hotkey, | 520 | group + "/" + hotkey, |
| 527 | UISettings::ContextualShortcut(qt_config->value("KeySeq").toString(), | 521 | UISettings::ContextualShortcut(ReadSetting("KeySeq").toString(), |
| 528 | qt_config->value("Context").toInt()))); | 522 | ReadSetting("Context").toInt()))); |
| 529 | qt_config->endGroup(); | 523 | qt_config->endGroup(); |
| 530 | } | 524 | } |
| 531 | 525 | ||
| @@ -533,16 +527,16 @@ void Config::ReadValues() { | |||
| 533 | } | 527 | } |
| 534 | qt_config->endGroup(); | 528 | qt_config->endGroup(); |
| 535 | 529 | ||
| 536 | UISettings::values.single_window_mode = qt_config->value("singleWindowMode", true).toBool(); | 530 | UISettings::values.single_window_mode = ReadSetting("singleWindowMode", true).toBool(); |
| 537 | UISettings::values.fullscreen = qt_config->value("fullscreen", false).toBool(); | 531 | UISettings::values.fullscreen = ReadSetting("fullscreen", false).toBool(); |
| 538 | UISettings::values.display_titlebar = qt_config->value("displayTitleBars", true).toBool(); | 532 | UISettings::values.display_titlebar = ReadSetting("displayTitleBars", true).toBool(); |
| 539 | UISettings::values.show_filter_bar = qt_config->value("showFilterBar", true).toBool(); | 533 | UISettings::values.show_filter_bar = ReadSetting("showFilterBar", true).toBool(); |
| 540 | UISettings::values.show_status_bar = qt_config->value("showStatusBar", true).toBool(); | 534 | UISettings::values.show_status_bar = ReadSetting("showStatusBar", true).toBool(); |
| 541 | UISettings::values.confirm_before_closing = qt_config->value("confirmClose", true).toBool(); | 535 | UISettings::values.confirm_before_closing = ReadSetting("confirmClose", true).toBool(); |
| 542 | UISettings::values.first_start = qt_config->value("firstStart", true).toBool(); | 536 | UISettings::values.first_start = ReadSetting("firstStart", true).toBool(); |
| 543 | UISettings::values.callout_flags = qt_config->value("calloutFlags", 0).toUInt(); | 537 | UISettings::values.callout_flags = ReadSetting("calloutFlags", 0).toUInt(); |
| 544 | UISettings::values.show_console = qt_config->value("showConsole", false).toBool(); | 538 | UISettings::values.show_console = ReadSetting("showConsole", false).toBool(); |
| 545 | UISettings::values.profile_index = qt_config->value("profileIndex", 0).toUInt(); | 539 | UISettings::values.profile_index = ReadSetting("profileIndex", 0).toUInt(); |
| 546 | 540 | ||
| 547 | ApplyDefaultProfileIfInputInvalid(); | 541 | ApplyDefaultProfileIfInputInvalid(); |
| 548 | 542 | ||
| @@ -553,62 +547,79 @@ void Config::SavePlayerValues() { | |||
| 553 | for (std::size_t p = 0; p < Settings::values.players.size(); ++p) { | 547 | for (std::size_t p = 0; p < Settings::values.players.size(); ++p) { |
| 554 | const auto& player = Settings::values.players[p]; | 548 | const auto& player = Settings::values.players[p]; |
| 555 | 549 | ||
| 556 | qt_config->setValue(QString("player_%1_connected").arg(p), player.connected); | 550 | WriteSetting(QString("player_%1_connected").arg(p), player.connected, false); |
| 557 | qt_config->setValue(QString("player_%1_type").arg(p), static_cast<u8>(player.type)); | 551 | WriteSetting(QString("player_%1_type").arg(p), static_cast<u8>(player.type), |
| 552 | static_cast<u8>(Settings::ControllerType::DualJoycon)); | ||
| 558 | 553 | ||
| 559 | qt_config->setValue(QString("player_%1_body_color_left").arg(p), player.body_color_left); | 554 | WriteSetting(QString("player_%1_body_color_left").arg(p), player.body_color_left, |
| 560 | qt_config->setValue(QString("player_%1_body_color_right").arg(p), player.body_color_right); | 555 | Settings::JOYCON_BODY_NEON_BLUE); |
| 561 | qt_config->setValue(QString("player_%1_button_color_left").arg(p), | 556 | WriteSetting(QString("player_%1_body_color_right").arg(p), player.body_color_right, |
| 562 | player.button_color_left); | 557 | Settings::JOYCON_BODY_NEON_RED); |
| 563 | qt_config->setValue(QString("player_%1_button_color_right").arg(p), | 558 | WriteSetting(QString("player_%1_button_color_left").arg(p), player.button_color_left, |
| 564 | player.button_color_right); | 559 | Settings::JOYCON_BUTTONS_NEON_BLUE); |
| 560 | WriteSetting(QString("player_%1_button_color_right").arg(p), player.button_color_right, | ||
| 561 | Settings::JOYCON_BUTTONS_NEON_RED); | ||
| 565 | 562 | ||
| 566 | for (int i = 0; i < Settings::NativeButton::NumButtons; ++i) { | 563 | for (int i = 0; i < Settings::NativeButton::NumButtons; ++i) { |
| 567 | qt_config->setValue(QString("player_%1_").arg(p) + | 564 | std::string default_param = InputCommon::GenerateKeyboardParam(default_buttons[i]); |
| 568 | QString::fromStdString(Settings::NativeButton::mapping[i]), | 565 | WriteSetting(QString("player_%1_").arg(p) + |
| 569 | QString::fromStdString(player.buttons[i])); | 566 | QString::fromStdString(Settings::NativeButton::mapping[i]), |
| 567 | QString::fromStdString(player.buttons[i]), | ||
| 568 | QString::fromStdString(default_param)); | ||
| 570 | } | 569 | } |
| 571 | for (int i = 0; i < Settings::NativeAnalog::NumAnalogs; ++i) { | 570 | for (int i = 0; i < Settings::NativeAnalog::NumAnalogs; ++i) { |
| 572 | qt_config->setValue(QString("player_%1_").arg(p) + | 571 | std::string default_param = InputCommon::GenerateAnalogParamFromKeys( |
| 573 | QString::fromStdString(Settings::NativeAnalog::mapping[i]), | 572 | default_analogs[i][0], default_analogs[i][1], default_analogs[i][2], |
| 574 | QString::fromStdString(player.analogs[i])); | 573 | default_analogs[i][3], default_analogs[i][4], 0.5f); |
| 574 | WriteSetting(QString("player_%1_").arg(p) + | ||
| 575 | QString::fromStdString(Settings::NativeAnalog::mapping[i]), | ||
| 576 | QString::fromStdString(player.analogs[i]), | ||
| 577 | QString::fromStdString(default_param)); | ||
| 575 | } | 578 | } |
| 576 | } | 579 | } |
| 577 | } | 580 | } |
| 578 | 581 | ||
| 579 | void Config::SaveDebugValues() { | 582 | void Config::SaveDebugValues() { |
| 580 | qt_config->setValue("debug_pad_enabled", Settings::values.debug_pad_enabled); | 583 | WriteSetting("debug_pad_enabled", Settings::values.debug_pad_enabled, false); |
| 581 | for (int i = 0; i < Settings::NativeButton::NumButtons; ++i) { | 584 | for (int i = 0; i < Settings::NativeButton::NumButtons; ++i) { |
| 582 | qt_config->setValue(QString("debug_pad_") + | 585 | std::string default_param = InputCommon::GenerateKeyboardParam(default_buttons[i]); |
| 583 | QString::fromStdString(Settings::NativeButton::mapping[i]), | 586 | WriteSetting(QString("debug_pad_") + |
| 584 | QString::fromStdString(Settings::values.debug_pad_buttons[i])); | 587 | QString::fromStdString(Settings::NativeButton::mapping[i]), |
| 588 | QString::fromStdString(Settings::values.debug_pad_buttons[i]), | ||
| 589 | QString::fromStdString(default_param)); | ||
| 585 | } | 590 | } |
| 586 | for (int i = 0; i < Settings::NativeAnalog::NumAnalogs; ++i) { | 591 | for (int i = 0; i < Settings::NativeAnalog::NumAnalogs; ++i) { |
| 587 | qt_config->setValue(QString("debug_pad_") + | 592 | std::string default_param = InputCommon::GenerateAnalogParamFromKeys( |
| 588 | QString::fromStdString(Settings::NativeAnalog::mapping[i]), | 593 | default_analogs[i][0], default_analogs[i][1], default_analogs[i][2], |
| 589 | QString::fromStdString(Settings::values.debug_pad_analogs[i])); | 594 | default_analogs[i][3], default_analogs[i][4], 0.5f); |
| 595 | WriteSetting(QString("debug_pad_") + | ||
| 596 | QString::fromStdString(Settings::NativeAnalog::mapping[i]), | ||
| 597 | QString::fromStdString(Settings::values.debug_pad_analogs[i]), | ||
| 598 | QString::fromStdString(default_param)); | ||
| 590 | } | 599 | } |
| 591 | } | 600 | } |
| 592 | 601 | ||
| 593 | void Config::SaveMouseValues() { | 602 | void Config::SaveMouseValues() { |
| 594 | qt_config->setValue("mouse_enabled", Settings::values.mouse_enabled); | 603 | WriteSetting("mouse_enabled", Settings::values.mouse_enabled, false); |
| 595 | 604 | ||
| 596 | for (int i = 0; i < Settings::NativeMouseButton::NumMouseButtons; ++i) { | 605 | for (int i = 0; i < Settings::NativeMouseButton::NumMouseButtons; ++i) { |
| 597 | qt_config->setValue(QString("mouse_") + | 606 | std::string default_param = InputCommon::GenerateKeyboardParam(default_mouse_buttons[i]); |
| 598 | QString::fromStdString(Settings::NativeMouseButton::mapping[i]), | 607 | WriteSetting(QString("mouse_") + |
| 599 | QString::fromStdString(Settings::values.mouse_buttons[i])); | 608 | QString::fromStdString(Settings::NativeMouseButton::mapping[i]), |
| 609 | QString::fromStdString(Settings::values.mouse_buttons[i]), | ||
| 610 | QString::fromStdString(default_param)); | ||
| 600 | } | 611 | } |
| 601 | } | 612 | } |
| 602 | 613 | ||
| 603 | void Config::SaveTouchscreenValues() { | 614 | void Config::SaveTouchscreenValues() { |
| 604 | qt_config->setValue("touchscreen_enabled", Settings::values.touchscreen.enabled); | 615 | WriteSetting("touchscreen_enabled", Settings::values.touchscreen.enabled, true); |
| 605 | qt_config->setValue("touchscreen_device", | 616 | WriteSetting("touchscreen_device", QString::fromStdString(Settings::values.touchscreen.device), |
| 606 | QString::fromStdString(Settings::values.touchscreen.device)); | 617 | "engine:emu_window"); |
| 607 | 618 | ||
| 608 | qt_config->setValue("touchscreen_finger", Settings::values.touchscreen.finger); | 619 | WriteSetting("touchscreen_finger", Settings::values.touchscreen.finger, 0); |
| 609 | qt_config->setValue("touchscreen_angle", Settings::values.touchscreen.rotation_angle); | 620 | WriteSetting("touchscreen_angle", Settings::values.touchscreen.rotation_angle, 0); |
| 610 | qt_config->setValue("touchscreen_diameter_x", Settings::values.touchscreen.diameter_x); | 621 | WriteSetting("touchscreen_diameter_x", Settings::values.touchscreen.diameter_x, 15); |
| 611 | qt_config->setValue("touchscreen_diameter_y", Settings::values.touchscreen.diameter_y); | 622 | WriteSetting("touchscreen_diameter_y", Settings::values.touchscreen.diameter_y, 15); |
| 612 | } | 623 | } |
| 613 | 624 | ||
| 614 | void Config::SaveValues() { | 625 | void Config::SaveValues() { |
| @@ -619,91 +630,96 @@ void Config::SaveValues() { | |||
| 619 | SaveMouseValues(); | 630 | SaveMouseValues(); |
| 620 | SaveTouchscreenValues(); | 631 | SaveTouchscreenValues(); |
| 621 | 632 | ||
| 622 | qt_config->setValue("motion_device", QString::fromStdString(Settings::values.motion_device)); | 633 | WriteSetting("motion_device", QString::fromStdString(Settings::values.motion_device), |
| 623 | qt_config->setValue("keyboard_enabled", Settings::values.keyboard_enabled); | 634 | "engine:motion_emu,update_period:100,sensitivity:0.01"); |
| 635 | WriteSetting("keyboard_enabled", Settings::values.keyboard_enabled, false); | ||
| 624 | 636 | ||
| 625 | qt_config->endGroup(); | 637 | qt_config->endGroup(); |
| 626 | 638 | ||
| 627 | qt_config->beginGroup("Core"); | 639 | qt_config->beginGroup("Core"); |
| 628 | qt_config->setValue("use_cpu_jit", Settings::values.use_cpu_jit); | 640 | WriteSetting("use_cpu_jit", Settings::values.use_cpu_jit, true); |
| 629 | qt_config->setValue("use_multi_core", Settings::values.use_multi_core); | 641 | WriteSetting("use_multi_core", Settings::values.use_multi_core, false); |
| 630 | qt_config->endGroup(); | 642 | qt_config->endGroup(); |
| 631 | 643 | ||
| 632 | qt_config->beginGroup("Renderer"); | 644 | qt_config->beginGroup("Renderer"); |
| 633 | qt_config->setValue("resolution_factor", (double)Settings::values.resolution_factor); | 645 | WriteSetting("resolution_factor", (double)Settings::values.resolution_factor, 1.0); |
| 634 | qt_config->setValue("use_frame_limit", Settings::values.use_frame_limit); | 646 | WriteSetting("use_frame_limit", Settings::values.use_frame_limit, true); |
| 635 | qt_config->setValue("frame_limit", Settings::values.frame_limit); | 647 | WriteSetting("frame_limit", Settings::values.frame_limit, 100); |
| 636 | qt_config->setValue("use_disk_shader_cache", Settings::values.use_disk_shader_cache); | 648 | WriteSetting("use_disk_shader_cache", Settings::values.use_disk_shader_cache, true); |
| 637 | qt_config->setValue("use_accurate_gpu_emulation", Settings::values.use_accurate_gpu_emulation); | 649 | WriteSetting("use_accurate_gpu_emulation", Settings::values.use_accurate_gpu_emulation, false); |
| 638 | qt_config->setValue("use_asynchronous_gpu_emulation", | 650 | WriteSetting("use_asynchronous_gpu_emulation", Settings::values.use_asynchronous_gpu_emulation, |
| 639 | Settings::values.use_asynchronous_gpu_emulation); | 651 | false); |
| 640 | 652 | ||
| 641 | // Cast to double because Qt's written float values are not human-readable | 653 | // Cast to double because Qt's written float values are not human-readable |
| 642 | qt_config->setValue("bg_red", (double)Settings::values.bg_red); | 654 | WriteSetting("bg_red", (double)Settings::values.bg_red, 0.0); |
| 643 | qt_config->setValue("bg_green", (double)Settings::values.bg_green); | 655 | WriteSetting("bg_green", (double)Settings::values.bg_green, 0.0); |
| 644 | qt_config->setValue("bg_blue", (double)Settings::values.bg_blue); | 656 | WriteSetting("bg_blue", (double)Settings::values.bg_blue, 0.0); |
| 645 | qt_config->endGroup(); | 657 | qt_config->endGroup(); |
| 646 | 658 | ||
| 647 | qt_config->beginGroup("Audio"); | 659 | qt_config->beginGroup("Audio"); |
| 648 | qt_config->setValue("output_engine", QString::fromStdString(Settings::values.sink_id)); | 660 | WriteSetting("output_engine", QString::fromStdString(Settings::values.sink_id), "auto"); |
| 649 | qt_config->setValue("enable_audio_stretching", Settings::values.enable_audio_stretching); | 661 | WriteSetting("enable_audio_stretching", Settings::values.enable_audio_stretching, true); |
| 650 | qt_config->setValue("output_device", QString::fromStdString(Settings::values.audio_device_id)); | 662 | WriteSetting("output_device", QString::fromStdString(Settings::values.audio_device_id), "auto"); |
| 651 | qt_config->setValue("volume", Settings::values.volume); | 663 | WriteSetting("volume", Settings::values.volume, 1.0f); |
| 652 | qt_config->endGroup(); | 664 | qt_config->endGroup(); |
| 653 | 665 | ||
| 654 | qt_config->beginGroup("Data Storage"); | 666 | qt_config->beginGroup("Data Storage"); |
| 655 | qt_config->setValue("use_virtual_sd", Settings::values.use_virtual_sd); | 667 | WriteSetting("use_virtual_sd", Settings::values.use_virtual_sd, true); |
| 656 | qt_config->setValue("nand_directory", | 668 | WriteSetting("nand_directory", |
| 657 | QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::NANDDir))); | 669 | QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::NANDDir)), |
| 658 | qt_config->setValue("sdmc_directory", | 670 | QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::NANDDir))); |
| 659 | QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::SDMCDir))); | 671 | WriteSetting("sdmc_directory", |
| 672 | QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::SDMCDir)), | ||
| 673 | QString::fromStdString(FileUtil::GetUserPath(FileUtil::UserPath::SDMCDir))); | ||
| 660 | qt_config->endGroup(); | 674 | qt_config->endGroup(); |
| 661 | 675 | ||
| 662 | qt_config->beginGroup("System"); | 676 | qt_config->beginGroup("System"); |
| 663 | qt_config->setValue("use_docked_mode", Settings::values.use_docked_mode); | 677 | WriteSetting("use_docked_mode", Settings::values.use_docked_mode, false); |
| 664 | qt_config->setValue("enable_nfc", Settings::values.enable_nfc); | 678 | WriteSetting("enable_nfc", Settings::values.enable_nfc, true); |
| 665 | qt_config->setValue("current_user", Settings::values.current_user); | 679 | WriteSetting("current_user", Settings::values.current_user, 0); |
| 666 | qt_config->setValue("language_index", Settings::values.language_index); | 680 | WriteSetting("language_index", Settings::values.language_index, 1); |
| 667 | 681 | ||
| 668 | qt_config->setValue("rng_seed_enabled", Settings::values.rng_seed.has_value()); | 682 | WriteSetting("rng_seed_enabled", Settings::values.rng_seed.has_value(), false); |
| 669 | qt_config->setValue("rng_seed", Settings::values.rng_seed.value_or(0)); | 683 | WriteSetting("rng_seed", Settings::values.rng_seed.value_or(0), 0); |
| 670 | 684 | ||
| 671 | qt_config->setValue("custom_rtc_enabled", Settings::values.custom_rtc.has_value()); | 685 | WriteSetting("custom_rtc_enabled", Settings::values.custom_rtc.has_value(), false); |
| 672 | qt_config->setValue("custom_rtc", | 686 | WriteSetting("custom_rtc", |
| 673 | QVariant::fromValue<long long>( | 687 | QVariant::fromValue<long long>( |
| 674 | Settings::values.custom_rtc.value_or(std::chrono::seconds{}).count())); | 688 | Settings::values.custom_rtc.value_or(std::chrono::seconds{}).count()), |
| 689 | 0); | ||
| 675 | 690 | ||
| 676 | qt_config->endGroup(); | 691 | qt_config->endGroup(); |
| 677 | 692 | ||
| 678 | qt_config->beginGroup("Miscellaneous"); | 693 | qt_config->beginGroup("Miscellaneous"); |
| 679 | qt_config->setValue("log_filter", QString::fromStdString(Settings::values.log_filter)); | 694 | WriteSetting("log_filter", QString::fromStdString(Settings::values.log_filter), "*:Info"); |
| 680 | qt_config->setValue("use_dev_keys", Settings::values.use_dev_keys); | 695 | WriteSetting("use_dev_keys", Settings::values.use_dev_keys, false); |
| 681 | qt_config->endGroup(); | 696 | qt_config->endGroup(); |
| 682 | 697 | ||
| 683 | qt_config->beginGroup("Debugging"); | 698 | qt_config->beginGroup("Debugging"); |
| 684 | qt_config->setValue("use_gdbstub", Settings::values.use_gdbstub); | 699 | WriteSetting("use_gdbstub", Settings::values.use_gdbstub, false); |
| 685 | qt_config->setValue("gdbstub_port", Settings::values.gdbstub_port); | 700 | WriteSetting("gdbstub_port", Settings::values.gdbstub_port, 24689); |
| 686 | qt_config->setValue("program_args", QString::fromStdString(Settings::values.program_args)); | 701 | WriteSetting("program_args", QString::fromStdString(Settings::values.program_args), ""); |
| 687 | qt_config->setValue("dump_exefs", Settings::values.dump_exefs); | 702 | WriteSetting("dump_exefs", Settings::values.dump_exefs, false); |
| 688 | qt_config->setValue("dump_nso", Settings::values.dump_nso); | 703 | WriteSetting("dump_nso", Settings::values.dump_nso, false); |
| 689 | qt_config->endGroup(); | 704 | qt_config->endGroup(); |
| 690 | 705 | ||
| 691 | qt_config->beginGroup("WebService"); | 706 | qt_config->beginGroup("WebService"); |
| 692 | qt_config->setValue("enable_telemetry", Settings::values.enable_telemetry); | 707 | WriteSetting("enable_telemetry", Settings::values.enable_telemetry, true); |
| 693 | qt_config->setValue("web_api_url", QString::fromStdString(Settings::values.web_api_url)); | 708 | WriteSetting("web_api_url", QString::fromStdString(Settings::values.web_api_url), |
| 694 | qt_config->setValue("yuzu_username", QString::fromStdString(Settings::values.yuzu_username)); | 709 | "https://api.yuzu-emu.org"); |
| 695 | qt_config->setValue("yuzu_token", QString::fromStdString(Settings::values.yuzu_token)); | 710 | WriteSetting("yuzu_username", QString::fromStdString(Settings::values.yuzu_username)); |
| 711 | WriteSetting("yuzu_token", QString::fromStdString(Settings::values.yuzu_token)); | ||
| 696 | qt_config->endGroup(); | 712 | qt_config->endGroup(); |
| 697 | 713 | ||
| 698 | qt_config->beginWriteArray("DisabledAddOns"); | 714 | qt_config->beginWriteArray("DisabledAddOns"); |
| 699 | int i = 0; | 715 | int i = 0; |
| 700 | for (const auto& elem : Settings::values.disabled_addons) { | 716 | for (const auto& elem : Settings::values.disabled_addons) { |
| 701 | qt_config->setArrayIndex(i); | 717 | qt_config->setArrayIndex(i); |
| 702 | qt_config->setValue("title_id", QVariant::fromValue<u64>(elem.first)); | 718 | WriteSetting("title_id", QVariant::fromValue<u64>(elem.first), 0); |
| 703 | qt_config->beginWriteArray("disabled"); | 719 | qt_config->beginWriteArray("disabled"); |
| 704 | for (std::size_t j = 0; j < elem.second.size(); ++j) { | 720 | for (std::size_t j = 0; j < elem.second.size(); ++j) { |
| 705 | qt_config->setArrayIndex(static_cast<int>(j)); | 721 | qt_config->setArrayIndex(static_cast<int>(j)); |
| 706 | qt_config->setValue("d", QString::fromStdString(elem.second[j])); | 722 | WriteSetting("d", QString::fromStdString(elem.second[j]), ""); |
| 707 | } | 723 | } |
| 708 | qt_config->endArray(); | 724 | qt_config->endArray(); |
| 709 | ++i; | 725 | ++i; |
| @@ -711,60 +727,86 @@ void Config::SaveValues() { | |||
| 711 | qt_config->endArray(); | 727 | qt_config->endArray(); |
| 712 | 728 | ||
| 713 | qt_config->beginGroup("UI"); | 729 | qt_config->beginGroup("UI"); |
| 714 | qt_config->setValue("theme", UISettings::values.theme); | 730 | WriteSetting("theme", UISettings::values.theme, UISettings::themes[0].second); |
| 715 | qt_config->setValue("enable_discord_presence", UISettings::values.enable_discord_presence); | 731 | WriteSetting("enable_discord_presence", UISettings::values.enable_discord_presence, true); |
| 716 | qt_config->setValue("screenshot_resolution_factor", | 732 | WriteSetting("screenshot_resolution_factor", UISettings::values.screenshot_resolution_factor, |
| 717 | UISettings::values.screenshot_resolution_factor); | 733 | 0); |
| 718 | qt_config->setValue("select_user_on_boot", UISettings::values.select_user_on_boot); | 734 | WriteSetting("select_user_on_boot", UISettings::values.select_user_on_boot, false); |
| 719 | 735 | ||
| 720 | qt_config->beginGroup("UIGameList"); | 736 | qt_config->beginGroup("UIGameList"); |
| 721 | qt_config->setValue("show_unknown", UISettings::values.show_unknown); | 737 | WriteSetting("show_unknown", UISettings::values.show_unknown, true); |
| 722 | qt_config->setValue("show_add_ons", UISettings::values.show_add_ons); | 738 | WriteSetting("show_add_ons", UISettings::values.show_add_ons, true); |
| 723 | qt_config->setValue("icon_size", UISettings::values.icon_size); | 739 | WriteSetting("icon_size", UISettings::values.icon_size, 64); |
| 724 | qt_config->setValue("row_1_text_id", UISettings::values.row_1_text_id); | 740 | WriteSetting("row_1_text_id", UISettings::values.row_1_text_id, 3); |
| 725 | qt_config->setValue("row_2_text_id", UISettings::values.row_2_text_id); | 741 | WriteSetting("row_2_text_id", UISettings::values.row_2_text_id, 2); |
| 726 | qt_config->endGroup(); | 742 | qt_config->endGroup(); |
| 727 | 743 | ||
| 728 | qt_config->beginGroup("UILayout"); | 744 | qt_config->beginGroup("UILayout"); |
| 729 | qt_config->setValue("geometry", UISettings::values.geometry); | 745 | WriteSetting("geometry", UISettings::values.geometry); |
| 730 | qt_config->setValue("state", UISettings::values.state); | 746 | WriteSetting("state", UISettings::values.state); |
| 731 | qt_config->setValue("geometryRenderWindow", UISettings::values.renderwindow_geometry); | 747 | WriteSetting("geometryRenderWindow", UISettings::values.renderwindow_geometry); |
| 732 | qt_config->setValue("gameListHeaderState", UISettings::values.gamelist_header_state); | 748 | WriteSetting("gameListHeaderState", UISettings::values.gamelist_header_state); |
| 733 | qt_config->setValue("microProfileDialogGeometry", UISettings::values.microprofile_geometry); | 749 | WriteSetting("microProfileDialogGeometry", UISettings::values.microprofile_geometry); |
| 734 | qt_config->setValue("microProfileDialogVisible", UISettings::values.microprofile_visible); | 750 | WriteSetting("microProfileDialogVisible", UISettings::values.microprofile_visible, false); |
| 735 | qt_config->endGroup(); | 751 | qt_config->endGroup(); |
| 736 | 752 | ||
| 737 | qt_config->beginGroup("Paths"); | 753 | qt_config->beginGroup("Paths"); |
| 738 | qt_config->setValue("romsPath", UISettings::values.roms_path); | 754 | WriteSetting("romsPath", UISettings::values.roms_path); |
| 739 | qt_config->setValue("symbolsPath", UISettings::values.symbols_path); | 755 | WriteSetting("symbolsPath", UISettings::values.symbols_path); |
| 740 | qt_config->setValue("screenshotPath", UISettings::values.screenshot_path); | 756 | WriteSetting("screenshotPath", UISettings::values.screenshot_path); |
| 741 | qt_config->setValue("gameListRootDir", UISettings::values.gamedir); | 757 | WriteSetting("gameListRootDir", UISettings::values.gamedir, "."); |
| 742 | qt_config->setValue("gameListDeepScan", UISettings::values.gamedir_deepscan); | 758 | WriteSetting("gameListDeepScan", UISettings::values.gamedir_deepscan, false); |
| 743 | qt_config->setValue("recentFiles", UISettings::values.recent_files); | 759 | WriteSetting("recentFiles", UISettings::values.recent_files); |
| 744 | qt_config->endGroup(); | 760 | qt_config->endGroup(); |
| 745 | 761 | ||
| 746 | qt_config->beginGroup("Shortcuts"); | 762 | qt_config->beginGroup("Shortcuts"); |
| 747 | for (auto shortcut : UISettings::values.shortcuts) { | 763 | for (auto shortcut : UISettings::values.shortcuts) { |
| 748 | qt_config->setValue(shortcut.first + "/KeySeq", shortcut.second.first); | 764 | WriteSetting(shortcut.first + "/KeySeq", shortcut.second.first); |
| 749 | qt_config->setValue(shortcut.first + "/Context", shortcut.second.second); | 765 | WriteSetting(shortcut.first + "/Context", shortcut.second.second); |
| 750 | } | 766 | } |
| 751 | qt_config->endGroup(); | 767 | qt_config->endGroup(); |
| 752 | 768 | ||
| 753 | qt_config->setValue("singleWindowMode", UISettings::values.single_window_mode); | 769 | WriteSetting("singleWindowMode", UISettings::values.single_window_mode, true); |
| 754 | qt_config->setValue("fullscreen", UISettings::values.fullscreen); | 770 | WriteSetting("fullscreen", UISettings::values.fullscreen, false); |
| 755 | qt_config->setValue("displayTitleBars", UISettings::values.display_titlebar); | 771 | WriteSetting("displayTitleBars", UISettings::values.display_titlebar, true); |
| 756 | qt_config->setValue("showFilterBar", UISettings::values.show_filter_bar); | 772 | WriteSetting("showFilterBar", UISettings::values.show_filter_bar, true); |
| 757 | qt_config->setValue("showStatusBar", UISettings::values.show_status_bar); | 773 | WriteSetting("showStatusBar", UISettings::values.show_status_bar, true); |
| 758 | qt_config->setValue("confirmClose", UISettings::values.confirm_before_closing); | 774 | WriteSetting("confirmClose", UISettings::values.confirm_before_closing, true); |
| 759 | qt_config->setValue("firstStart", UISettings::values.first_start); | 775 | WriteSetting("firstStart", UISettings::values.first_start, true); |
| 760 | qt_config->setValue("calloutFlags", UISettings::values.callout_flags); | 776 | WriteSetting("calloutFlags", UISettings::values.callout_flags, 0); |
| 761 | qt_config->setValue("showConsole", UISettings::values.show_console); | 777 | WriteSetting("showConsole", UISettings::values.show_console, false); |
| 762 | qt_config->setValue("profileIndex", UISettings::values.profile_index); | 778 | WriteSetting("profileIndex", UISettings::values.profile_index, 0); |
| 763 | qt_config->endGroup(); | 779 | qt_config->endGroup(); |
| 764 | } | 780 | } |
| 765 | 781 | ||
| 782 | QVariant Config::ReadSetting(const QString& name) const { | ||
| 783 | return qt_config->value(name); | ||
| 784 | } | ||
| 785 | |||
| 786 | QVariant Config::ReadSetting(const QString& name, const QVariant& default_value) const { | ||
| 787 | QVariant result; | ||
| 788 | if (qt_config->value(name + "/default", false).toBool()) { | ||
| 789 | result = default_value; | ||
| 790 | } else { | ||
| 791 | result = qt_config->value(name, default_value); | ||
| 792 | } | ||
| 793 | return result; | ||
| 794 | } | ||
| 795 | |||
| 796 | void Config::WriteSetting(const QString& name, const QVariant& value) { | ||
| 797 | qt_config->setValue(name, value); | ||
| 798 | } | ||
| 799 | |||
| 800 | void Config::WriteSetting(const QString& name, const QVariant& value, | ||
| 801 | const QVariant& default_value) { | ||
| 802 | qt_config->setValue(name + "/default", value == default_value); | ||
| 803 | qt_config->setValue(name, value); | ||
| 804 | } | ||
| 805 | |||
| 766 | void Config::Reload() { | 806 | void Config::Reload() { |
| 767 | ReadValues(); | 807 | ReadValues(); |
| 808 | // To apply default value changes | ||
| 809 | SaveValues(); | ||
| 768 | Settings::Apply(); | 810 | Settings::Apply(); |
| 769 | } | 811 | } |
| 770 | 812 | ||
diff --git a/src/yuzu/configuration/config.h b/src/yuzu/configuration/config.h index e73ad19bb..f4185db18 100644 --- a/src/yuzu/configuration/config.h +++ b/src/yuzu/configuration/config.h | |||
| @@ -42,6 +42,11 @@ private: | |||
| 42 | void SaveMouseValues(); | 42 | void SaveMouseValues(); |
| 43 | void SaveTouchscreenValues(); | 43 | void SaveTouchscreenValues(); |
| 44 | 44 | ||
| 45 | QVariant ReadSetting(const QString& name) const; | ||
| 46 | QVariant ReadSetting(const QString& name, const QVariant& default_value) const; | ||
| 47 | void WriteSetting(const QString& name, const QVariant& value); | ||
| 48 | void WriteSetting(const QString& name, const QVariant& value, const QVariant& default_value); | ||
| 49 | |||
| 45 | std::unique_ptr<QSettings> qt_config; | 50 | std::unique_ptr<QSettings> qt_config; |
| 46 | std::string qt_config_loc; | 51 | std::string qt_config_loc; |
| 47 | }; | 52 | }; |