SystemStateMgr.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using System;
  2. namespace Ryujinx.HLE.HOS.SystemState
  3. {
  4. public class SystemStateMgr
  5. {
  6. internal static string[] LanguageCodes = new string[]
  7. {
  8. "ja",
  9. "en-US",
  10. "fr",
  11. "de",
  12. "it",
  13. "es",
  14. "zh-CN",
  15. "ko",
  16. "nl",
  17. "pt",
  18. "ru",
  19. "zh-TW",
  20. "en-GB",
  21. "fr-CA",
  22. "es-419",
  23. "zh-Hans",
  24. "zh-Hant",
  25. "pt-BR"
  26. };
  27. internal long DesiredKeyboardLayout { get; private set; }
  28. internal SystemLanguage DesiredSystemLanguage { get; private set; }
  29. internal long DesiredLanguageCode { get; private set; }
  30. internal uint DesiredRegionCode { get; private set; }
  31. public TitleLanguage DesiredTitleLanguage { get; private set; }
  32. public bool DockedMode { get; set; }
  33. public ColorSet ThemeColor { get; set; }
  34. public string DeviceNickName { get; set; }
  35. public SystemStateMgr()
  36. {
  37. // TODO: Let user specify fields.
  38. DesiredKeyboardLayout = (long)KeyboardLayout.Default;
  39. DeviceNickName = "Ryujinx's Switch";
  40. }
  41. public void SetLanguage(SystemLanguage language)
  42. {
  43. DesiredSystemLanguage = language;
  44. DesiredLanguageCode = GetLanguageCode((int)DesiredSystemLanguage);
  45. DesiredTitleLanguage = language switch
  46. {
  47. SystemLanguage.Taiwanese or
  48. SystemLanguage.TraditionalChinese => TitleLanguage.TraditionalChinese,
  49. SystemLanguage.Chinese or
  50. SystemLanguage.SimplifiedChinese => TitleLanguage.SimplifiedChinese,
  51. _ => Enum.Parse<TitleLanguage>(Enum.GetName<SystemLanguage>(language)),
  52. };
  53. }
  54. public void SetRegion(RegionCode region)
  55. {
  56. DesiredRegionCode = (uint)region;
  57. }
  58. internal static long GetLanguageCode(int index)
  59. {
  60. if ((uint)index >= LanguageCodes.Length)
  61. {
  62. throw new ArgumentOutOfRangeException(nameof(index));
  63. }
  64. long code = 0;
  65. int shift = 0;
  66. foreach (char chr in LanguageCodes[index])
  67. {
  68. code |= (long)(byte)chr << shift++ * 8;
  69. }
  70. return code;
  71. }
  72. }
  73. }