SystemStateMgr.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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. };
  26. internal long DesiredKeyboardLayout { get; private set; }
  27. internal SystemLanguage DesiredSystemLanguage { get; private set; }
  28. internal long DesiredLanguageCode { get; private set; }
  29. internal uint DesiredRegionCode { get; private set; }
  30. public TitleLanguage DesiredTitleLanguage { get; private set; }
  31. public bool DockedMode { get; set; }
  32. public ColorSet ThemeColor { get; set; }
  33. public string DeviceNickName { get; set; }
  34. public SystemStateMgr()
  35. {
  36. // TODO: Let user specify fields.
  37. DesiredKeyboardLayout = (long)KeyboardLayout.Default;
  38. DeviceNickName = "Ryujinx's Switch";
  39. }
  40. public void SetLanguage(SystemLanguage language)
  41. {
  42. DesiredSystemLanguage = language;
  43. DesiredLanguageCode = GetLanguageCode((int)DesiredSystemLanguage);
  44. DesiredTitleLanguage = language switch
  45. {
  46. SystemLanguage.Taiwanese => TitleLanguage.Taiwanese,
  47. SystemLanguage.TraditionalChinese or
  48. SystemLanguage.Chinese or
  49. SystemLanguage.SimplifiedChinese => TitleLanguage.Chinese,
  50. _ => Enum.Parse<TitleLanguage>(Enum.GetName(typeof(SystemLanguage), language)),
  51. };
  52. }
  53. public void SetRegion(RegionCode region)
  54. {
  55. DesiredRegionCode = (uint)region;
  56. }
  57. internal static long GetLanguageCode(int index)
  58. {
  59. if ((uint)index >= LanguageCodes.Length)
  60. {
  61. throw new ArgumentOutOfRangeException(nameof(index));
  62. }
  63. long code = 0;
  64. int shift = 0;
  65. foreach (char chr in LanguageCodes[index])
  66. {
  67. code |= (long)(byte)chr << shift++ * 8;
  68. }
  69. return code;
  70. }
  71. }
  72. }