ConfigurationState.Model.cs 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700
  1. using ARMeilleure;
  2. using Ryujinx.Common;
  3. using Ryujinx.Common.Configuration;
  4. using Ryujinx.Common.Configuration.Hid;
  5. using Ryujinx.Common.Configuration.Multiplayer;
  6. using Ryujinx.Common.Logging;
  7. using Ryujinx.HLE;
  8. using Ryujinx.UI.Common.Configuration.System;
  9. using Ryujinx.UI.Common.Helper;
  10. using System.Collections.Generic;
  11. namespace Ryujinx.UI.Common.Configuration
  12. {
  13. public partial class ConfigurationState
  14. {
  15. /// <summary>
  16. /// UI configuration section
  17. /// </summary>
  18. public class UISection
  19. {
  20. public class Columns
  21. {
  22. public ReactiveObject<bool> FavColumn { get; private set; }
  23. public ReactiveObject<bool> IconColumn { get; private set; }
  24. public ReactiveObject<bool> AppColumn { get; private set; }
  25. public ReactiveObject<bool> DevColumn { get; private set; }
  26. public ReactiveObject<bool> VersionColumn { get; private set; }
  27. public ReactiveObject<bool> LdnInfoColumn { get; private set; }
  28. public ReactiveObject<bool> TimePlayedColumn { get; private set; }
  29. public ReactiveObject<bool> LastPlayedColumn { get; private set; }
  30. public ReactiveObject<bool> FileExtColumn { get; private set; }
  31. public ReactiveObject<bool> FileSizeColumn { get; private set; }
  32. public ReactiveObject<bool> PathColumn { get; private set; }
  33. public Columns()
  34. {
  35. FavColumn = new ReactiveObject<bool>();
  36. IconColumn = new ReactiveObject<bool>();
  37. AppColumn = new ReactiveObject<bool>();
  38. DevColumn = new ReactiveObject<bool>();
  39. VersionColumn = new ReactiveObject<bool>();
  40. LdnInfoColumn = new ReactiveObject<bool>();
  41. TimePlayedColumn = new ReactiveObject<bool>();
  42. LastPlayedColumn = new ReactiveObject<bool>();
  43. FileExtColumn = new ReactiveObject<bool>();
  44. FileSizeColumn = new ReactiveObject<bool>();
  45. PathColumn = new ReactiveObject<bool>();
  46. }
  47. }
  48. public class ColumnSortSettings
  49. {
  50. public ReactiveObject<int> SortColumnId { get; private set; }
  51. public ReactiveObject<bool> SortAscending { get; private set; }
  52. public ColumnSortSettings()
  53. {
  54. SortColumnId = new ReactiveObject<int>();
  55. SortAscending = new ReactiveObject<bool>();
  56. }
  57. }
  58. /// <summary>
  59. /// Used to toggle which file types are shown in the UI
  60. /// </summary>
  61. public class ShownFileTypeSettings
  62. {
  63. public ReactiveObject<bool> NSP { get; private set; }
  64. public ReactiveObject<bool> PFS0 { get; private set; }
  65. public ReactiveObject<bool> XCI { get; private set; }
  66. public ReactiveObject<bool> NCA { get; private set; }
  67. public ReactiveObject<bool> NRO { get; private set; }
  68. public ReactiveObject<bool> NSO { get; private set; }
  69. public ShownFileTypeSettings()
  70. {
  71. NSP = new ReactiveObject<bool>();
  72. PFS0 = new ReactiveObject<bool>();
  73. XCI = new ReactiveObject<bool>();
  74. NCA = new ReactiveObject<bool>();
  75. NRO = new ReactiveObject<bool>();
  76. NSO = new ReactiveObject<bool>();
  77. }
  78. }
  79. // <summary>
  80. /// Determines main window start-up position, size and state
  81. ///<summary>
  82. public class WindowStartupSettings
  83. {
  84. public ReactiveObject<int> WindowSizeWidth { get; private set; }
  85. public ReactiveObject<int> WindowSizeHeight { get; private set; }
  86. public ReactiveObject<int> WindowPositionX { get; private set; }
  87. public ReactiveObject<int> WindowPositionY { get; private set; }
  88. public ReactiveObject<bool> WindowMaximized { get; private set; }
  89. public WindowStartupSettings()
  90. {
  91. WindowSizeWidth = new ReactiveObject<int>();
  92. WindowSizeHeight = new ReactiveObject<int>();
  93. WindowPositionX = new ReactiveObject<int>();
  94. WindowPositionY = new ReactiveObject<int>();
  95. WindowMaximized = new ReactiveObject<bool>();
  96. }
  97. }
  98. /// <summary>
  99. /// Used to toggle columns in the GUI
  100. /// </summary>
  101. public Columns GuiColumns { get; private set; }
  102. /// <summary>
  103. /// Used to configure column sort settings in the GUI
  104. /// </summary>
  105. public ColumnSortSettings ColumnSort { get; private set; }
  106. /// <summary>
  107. /// A list of directories containing games to be used to load games into the games list
  108. /// </summary>
  109. public ReactiveObject<List<string>> GameDirs { get; private set; }
  110. /// <summary>
  111. /// A list of directories containing DLC/updates the user wants to autoload during library refreshes
  112. /// </summary>
  113. public ReactiveObject<List<string>> AutoloadDirs { get; private set; }
  114. /// <summary>
  115. /// A list of file types to be hidden in the games List
  116. /// </summary>
  117. public ShownFileTypeSettings ShownFileTypes { get; private set; }
  118. /// <summary>
  119. /// Determines main window start-up position, size and state
  120. /// </summary>
  121. public WindowStartupSettings WindowStartup { get; private set; }
  122. /// <summary>
  123. /// Language Code for the UI
  124. /// </summary>
  125. public ReactiveObject<string> LanguageCode { get; private set; }
  126. /// <summary>
  127. /// Selects the base style
  128. /// </summary>
  129. public ReactiveObject<string> BaseStyle { get; private set; }
  130. /// <summary>
  131. /// Start games in fullscreen mode
  132. /// </summary>
  133. public ReactiveObject<bool> StartFullscreen { get; private set; }
  134. /// <summary>
  135. /// Hide / Show Console Window
  136. /// </summary>
  137. public ReactiveObject<bool> ShowConsole { get; private set; }
  138. /// <summary>
  139. /// View Mode of the Game list
  140. /// </summary>
  141. public ReactiveObject<int> GameListViewMode { get; private set; }
  142. /// <summary>
  143. /// Show application name in Grid Mode
  144. /// </summary>
  145. public ReactiveObject<bool> ShowNames { get; private set; }
  146. /// <summary>
  147. /// Sets App Icon Size in Grid Mode
  148. /// </summary>
  149. public ReactiveObject<int> GridSize { get; private set; }
  150. /// <summary>
  151. /// Sorts Apps in Grid Mode
  152. /// </summary>
  153. public ReactiveObject<int> ApplicationSort { get; private set; }
  154. /// <summary>
  155. /// Sets if Grid is ordered in Ascending Order
  156. /// </summary>
  157. public ReactiveObject<bool> IsAscendingOrder { get; private set; }
  158. public UISection()
  159. {
  160. GuiColumns = new Columns();
  161. ColumnSort = new ColumnSortSettings();
  162. GameDirs = new ReactiveObject<List<string>>();
  163. AutoloadDirs = new ReactiveObject<List<string>>();
  164. ShownFileTypes = new ShownFileTypeSettings();
  165. WindowStartup = new WindowStartupSettings();
  166. BaseStyle = new ReactiveObject<string>();
  167. StartFullscreen = new ReactiveObject<bool>();
  168. GameListViewMode = new ReactiveObject<int>();
  169. ShowNames = new ReactiveObject<bool>();
  170. GridSize = new ReactiveObject<int>();
  171. ApplicationSort = new ReactiveObject<int>();
  172. IsAscendingOrder = new ReactiveObject<bool>();
  173. LanguageCode = new ReactiveObject<string>();
  174. ShowConsole = new ReactiveObject<bool>();
  175. ShowConsole.Event += static (_, e) => ConsoleHelper.SetConsoleWindowState(e.NewValue);
  176. }
  177. }
  178. /// <summary>
  179. /// Logger configuration section
  180. /// </summary>
  181. public class LoggerSection
  182. {
  183. /// <summary>
  184. /// Enables printing debug log messages
  185. /// </summary>
  186. public ReactiveObject<bool> EnableDebug { get; private set; }
  187. /// <summary>
  188. /// Enables printing stub log messages
  189. /// </summary>
  190. public ReactiveObject<bool> EnableStub { get; private set; }
  191. /// <summary>
  192. /// Enables printing info log messages
  193. /// </summary>
  194. public ReactiveObject<bool> EnableInfo { get; private set; }
  195. /// <summary>
  196. /// Enables printing warning log messages
  197. /// </summary>
  198. public ReactiveObject<bool> EnableWarn { get; private set; }
  199. /// <summary>
  200. /// Enables printing error log messages
  201. /// </summary>
  202. public ReactiveObject<bool> EnableError { get; private set; }
  203. /// <summary>
  204. /// Enables printing trace log messages
  205. /// </summary>
  206. public ReactiveObject<bool> EnableTrace { get; private set; }
  207. /// <summary>
  208. /// Enables printing guest log messages
  209. /// </summary>
  210. public ReactiveObject<bool> EnableGuest { get; private set; }
  211. /// <summary>
  212. /// Enables printing FS access log messages
  213. /// </summary>
  214. public ReactiveObject<bool> EnableFsAccessLog { get; private set; }
  215. /// <summary>
  216. /// Controls which log messages are written to the log targets
  217. /// </summary>
  218. public ReactiveObject<LogClass[]> FilteredClasses { get; private set; }
  219. /// <summary>
  220. /// Enables or disables logging to a file on disk
  221. /// </summary>
  222. public ReactiveObject<bool> EnableFileLog { get; private set; }
  223. /// <summary>
  224. /// Controls which OpenGL log messages are recorded in the log
  225. /// </summary>
  226. public ReactiveObject<GraphicsDebugLevel> GraphicsDebugLevel { get; private set; }
  227. public LoggerSection()
  228. {
  229. EnableDebug = new ReactiveObject<bool>();
  230. EnableDebug.LogChangesToValue(nameof(EnableDebug));
  231. EnableStub = new ReactiveObject<bool>();
  232. EnableInfo = new ReactiveObject<bool>();
  233. EnableWarn = new ReactiveObject<bool>();
  234. EnableError = new ReactiveObject<bool>();
  235. EnableTrace = new ReactiveObject<bool>();
  236. EnableGuest = new ReactiveObject<bool>();
  237. EnableFsAccessLog = new ReactiveObject<bool>();
  238. FilteredClasses = new ReactiveObject<LogClass[]>();
  239. EnableFileLog = new ReactiveObject<bool>();
  240. EnableFileLog.LogChangesToValue(nameof(EnableFileLog));
  241. GraphicsDebugLevel = new ReactiveObject<GraphicsDebugLevel>();
  242. }
  243. }
  244. /// <summary>
  245. /// System configuration section
  246. /// </summary>
  247. public class SystemSection
  248. {
  249. /// <summary>
  250. /// Change System Language
  251. /// </summary>
  252. public ReactiveObject<Language> Language { get; private set; }
  253. /// <summary>
  254. /// Change System Region
  255. /// </summary>
  256. public ReactiveObject<Region> Region { get; private set; }
  257. /// <summary>
  258. /// Change System TimeZone
  259. /// </summary>
  260. public ReactiveObject<string> TimeZone { get; private set; }
  261. /// <summary>
  262. /// System Time Offset in Seconds
  263. /// </summary>
  264. public ReactiveObject<long> SystemTimeOffset { get; private set; }
  265. /// <summary>
  266. /// Enables or disables Docked Mode
  267. /// </summary>
  268. public ReactiveObject<bool> EnableDockedMode { get; private set; }
  269. /// <summary>
  270. /// Enables or disables persistent profiled translation cache
  271. /// </summary>
  272. public ReactiveObject<bool> EnablePtc { get; private set; }
  273. /// <summary>
  274. /// Enables or disables low-power persistent profiled translation cache loading
  275. /// </summary>
  276. public ReactiveObject<bool> EnableLowPowerPtc { get; private set; }
  277. /// <summary>
  278. /// Enables or disables guest Internet access
  279. /// </summary>
  280. public ReactiveObject<bool> EnableInternetAccess { get; private set; }
  281. /// <summary>
  282. /// Enables integrity checks on Game content files
  283. /// </summary>
  284. public ReactiveObject<bool> EnableFsIntegrityChecks { get; private set; }
  285. /// <summary>
  286. /// Enables FS access log output to the console. Possible modes are 0-3
  287. /// </summary>
  288. public ReactiveObject<int> FsGlobalAccessLogMode { get; private set; }
  289. /// <summary>
  290. /// The selected audio backend
  291. /// </summary>
  292. public ReactiveObject<AudioBackend> AudioBackend { get; private set; }
  293. /// <summary>
  294. /// The audio backend volume
  295. /// </summary>
  296. public ReactiveObject<float> AudioVolume { get; private set; }
  297. /// <summary>
  298. /// The selected memory manager mode
  299. /// </summary>
  300. public ReactiveObject<MemoryManagerMode> MemoryManagerMode { get; private set; }
  301. /// <summary>
  302. /// Defines the amount of RAM available on the emulated system, and how it is distributed
  303. /// </summary>
  304. public ReactiveObject<MemoryConfiguration> DramSize { get; private set; }
  305. /// <summary>
  306. /// Enable or disable ignoring missing services
  307. /// </summary>
  308. public ReactiveObject<bool> IgnoreMissingServices { get; private set; }
  309. /// <summary>
  310. /// Uses Hypervisor over JIT if available
  311. /// </summary>
  312. public ReactiveObject<bool> UseHypervisor { get; private set; }
  313. public SystemSection()
  314. {
  315. Language = new ReactiveObject<Language>();
  316. Language.LogChangesToValue(nameof(Language));
  317. Region = new ReactiveObject<Region>();
  318. Region.LogChangesToValue(nameof(Region));
  319. TimeZone = new ReactiveObject<string>();
  320. TimeZone.LogChangesToValue(nameof(TimeZone));
  321. SystemTimeOffset = new ReactiveObject<long>();
  322. SystemTimeOffset.LogChangesToValue(nameof(SystemTimeOffset));
  323. EnableDockedMode = new ReactiveObject<bool>();
  324. EnableDockedMode.LogChangesToValue(nameof(EnableDockedMode));
  325. EnablePtc = new ReactiveObject<bool>();
  326. EnablePtc.LogChangesToValue(nameof(EnablePtc));
  327. EnableLowPowerPtc = new ReactiveObject<bool>();
  328. EnableLowPowerPtc.LogChangesToValue(nameof(EnableLowPowerPtc));
  329. EnableLowPowerPtc.Event += (_, evnt)
  330. => Optimizations.LowPower = evnt.NewValue;
  331. EnableInternetAccess = new ReactiveObject<bool>();
  332. EnableInternetAccess.LogChangesToValue(nameof(EnableInternetAccess));
  333. EnableFsIntegrityChecks = new ReactiveObject<bool>();
  334. EnableFsIntegrityChecks.LogChangesToValue(nameof(EnableFsIntegrityChecks));
  335. FsGlobalAccessLogMode = new ReactiveObject<int>();
  336. FsGlobalAccessLogMode.LogChangesToValue(nameof(FsGlobalAccessLogMode));
  337. AudioBackend = new ReactiveObject<AudioBackend>();
  338. AudioBackend.LogChangesToValue(nameof(AudioBackend));
  339. MemoryManagerMode = new ReactiveObject<MemoryManagerMode>();
  340. MemoryManagerMode.LogChangesToValue(nameof(MemoryManagerMode));
  341. DramSize = new ReactiveObject<MemoryConfiguration>();
  342. DramSize.LogChangesToValue(nameof(DramSize));
  343. IgnoreMissingServices = new ReactiveObject<bool>();
  344. IgnoreMissingServices.LogChangesToValue(nameof(IgnoreMissingServices));
  345. AudioVolume = new ReactiveObject<float>();
  346. AudioVolume.LogChangesToValue(nameof(AudioVolume));
  347. UseHypervisor = new ReactiveObject<bool>();
  348. UseHypervisor.LogChangesToValue(nameof(UseHypervisor));
  349. }
  350. }
  351. /// <summary>
  352. /// Hid configuration section
  353. /// </summary>
  354. public class HidSection
  355. {
  356. /// <summary>
  357. /// Enable or disable keyboard support (Independent from controllers binding)
  358. /// </summary>
  359. public ReactiveObject<bool> EnableKeyboard { get; private set; }
  360. /// <summary>
  361. /// Enable or disable mouse support (Independent from controllers binding)
  362. /// </summary>
  363. public ReactiveObject<bool> EnableMouse { get; private set; }
  364. /// <summary>
  365. /// Hotkey Keyboard Bindings
  366. /// </summary>
  367. public ReactiveObject<KeyboardHotkeys> Hotkeys { get; private set; }
  368. /// <summary>
  369. /// Input device configuration.
  370. /// NOTE: This ReactiveObject won't issue an event when the List has elements added or removed.
  371. /// TODO: Implement a ReactiveList class.
  372. /// </summary>
  373. public ReactiveObject<List<InputConfig>> InputConfig { get; private set; }
  374. public HidSection()
  375. {
  376. EnableKeyboard = new ReactiveObject<bool>();
  377. EnableMouse = new ReactiveObject<bool>();
  378. Hotkeys = new ReactiveObject<KeyboardHotkeys>();
  379. InputConfig = new ReactiveObject<List<InputConfig>>();
  380. }
  381. }
  382. /// <summary>
  383. /// Graphics configuration section
  384. /// </summary>
  385. public class GraphicsSection
  386. {
  387. /// <summary>
  388. /// Whether or not backend threading is enabled. The "Auto" setting will determine whether threading should be enabled at runtime.
  389. /// </summary>
  390. public ReactiveObject<BackendThreading> BackendThreading { get; private set; }
  391. /// <summary>
  392. /// Max Anisotropy. Values range from 0 - 16. Set to -1 to let the game decide.
  393. /// </summary>
  394. public ReactiveObject<float> MaxAnisotropy { get; private set; }
  395. /// <summary>
  396. /// Aspect Ratio applied to the renderer window.
  397. /// </summary>
  398. public ReactiveObject<AspectRatio> AspectRatio { get; private set; }
  399. /// <summary>
  400. /// Resolution Scale. An integer scale applied to applicable render targets. Values 1-4, or -1 to use a custom floating point scale instead.
  401. /// </summary>
  402. public ReactiveObject<int> ResScale { get; private set; }
  403. /// <summary>
  404. /// Custom Resolution Scale. A custom floating point scale applied to applicable render targets. Only active when Resolution Scale is -1.
  405. /// </summary>
  406. public ReactiveObject<float> ResScaleCustom { get; private set; }
  407. /// <summary>
  408. /// Dumps shaders in this local directory
  409. /// </summary>
  410. public ReactiveObject<string> ShadersDumpPath { get; private set; }
  411. /// <summary>
  412. /// Enables or disables Vertical Sync
  413. /// </summary>
  414. public ReactiveObject<bool> EnableVsync { get; private set; }
  415. /// <summary>
  416. /// Enables or disables Shader cache
  417. /// </summary>
  418. public ReactiveObject<bool> EnableShaderCache { get; private set; }
  419. /// <summary>
  420. /// Enables or disables texture recompression
  421. /// </summary>
  422. public ReactiveObject<bool> EnableTextureRecompression { get; private set; }
  423. /// <summary>
  424. /// Enables or disables Macro high-level emulation
  425. /// </summary>
  426. public ReactiveObject<bool> EnableMacroHLE { get; private set; }
  427. /// <summary>
  428. /// Enables or disables color space passthrough, if available.
  429. /// </summary>
  430. public ReactiveObject<bool> EnableColorSpacePassthrough { get; private set; }
  431. /// <summary>
  432. /// Graphics backend
  433. /// </summary>
  434. public ReactiveObject<GraphicsBackend> GraphicsBackend { get; private set; }
  435. /// <summary>
  436. /// Applies anti-aliasing to the renderer.
  437. /// </summary>
  438. public ReactiveObject<AntiAliasing> AntiAliasing { get; private set; }
  439. /// <summary>
  440. /// Sets the framebuffer upscaling type.
  441. /// </summary>
  442. public ReactiveObject<ScalingFilter> ScalingFilter { get; private set; }
  443. /// <summary>
  444. /// Sets the framebuffer upscaling level.
  445. /// </summary>
  446. public ReactiveObject<int> ScalingFilterLevel { get; private set; }
  447. /// <summary>
  448. /// Preferred GPU
  449. /// </summary>
  450. public ReactiveObject<string> PreferredGpu { get; private set; }
  451. public GraphicsSection()
  452. {
  453. BackendThreading = new ReactiveObject<BackendThreading>();
  454. BackendThreading.LogChangesToValue(nameof(BackendThreading));
  455. ResScale = new ReactiveObject<int>();
  456. ResScale.LogChangesToValue(nameof(ResScale));
  457. ResScaleCustom = new ReactiveObject<float>();
  458. ResScaleCustom.LogChangesToValue(nameof(ResScaleCustom));
  459. MaxAnisotropy = new ReactiveObject<float>();
  460. MaxAnisotropy.LogChangesToValue(nameof(MaxAnisotropy));
  461. AspectRatio = new ReactiveObject<AspectRatio>();
  462. AspectRatio.LogChangesToValue(nameof(AspectRatio));
  463. ShadersDumpPath = new ReactiveObject<string>();
  464. EnableVsync = new ReactiveObject<bool>();
  465. EnableVsync.LogChangesToValue(nameof(EnableVsync));
  466. EnableShaderCache = new ReactiveObject<bool>();
  467. EnableShaderCache.LogChangesToValue(nameof(EnableShaderCache));
  468. EnableTextureRecompression = new ReactiveObject<bool>();
  469. EnableTextureRecompression.LogChangesToValue(nameof(EnableTextureRecompression));
  470. GraphicsBackend = new ReactiveObject<GraphicsBackend>();
  471. GraphicsBackend.LogChangesToValue(nameof(GraphicsBackend));
  472. PreferredGpu = new ReactiveObject<string>();
  473. PreferredGpu.LogChangesToValue(nameof(PreferredGpu));
  474. EnableMacroHLE = new ReactiveObject<bool>();
  475. EnableMacroHLE.LogChangesToValue(nameof(EnableMacroHLE));
  476. EnableColorSpacePassthrough = new ReactiveObject<bool>();
  477. EnableColorSpacePassthrough.LogChangesToValue(nameof(EnableColorSpacePassthrough));
  478. AntiAliasing = new ReactiveObject<AntiAliasing>();
  479. AntiAliasing.LogChangesToValue(nameof(AntiAliasing));
  480. ScalingFilter = new ReactiveObject<ScalingFilter>();
  481. ScalingFilter.LogChangesToValue(nameof(ScalingFilter));
  482. ScalingFilterLevel = new ReactiveObject<int>();
  483. ScalingFilterLevel.LogChangesToValue(nameof(ScalingFilterLevel));
  484. }
  485. }
  486. /// <summary>
  487. /// Multiplayer configuration section
  488. /// </summary>
  489. public class MultiplayerSection
  490. {
  491. /// <summary>
  492. /// GUID for the network interface used by LAN (or 0 for default)
  493. /// </summary>
  494. public ReactiveObject<string> LanInterfaceId { get; private set; }
  495. /// <summary>
  496. /// Multiplayer Mode
  497. /// </summary>
  498. public ReactiveObject<MultiplayerMode> Mode { get; private set; }
  499. /// <summary>
  500. /// Disable P2P
  501. /// </summary>
  502. public ReactiveObject<bool> DisableP2p { get; private set; }
  503. /// <summary>
  504. /// LDN PassPhrase
  505. /// </summary>
  506. public ReactiveObject<string> LdnPassphrase { get; private set; }
  507. /// <summary>
  508. /// LDN Server
  509. /// </summary>
  510. public ReactiveObject<string> LdnServer { get; private set; }
  511. public MultiplayerSection()
  512. {
  513. LanInterfaceId = new ReactiveObject<string>();
  514. Mode = new ReactiveObject<MultiplayerMode>();
  515. Mode.LogChangesToValue(nameof(MultiplayerMode));
  516. DisableP2p = new ReactiveObject<bool>();
  517. DisableP2p.LogChangesToValue(nameof(DisableP2p));
  518. LdnPassphrase = new ReactiveObject<string>();
  519. LdnPassphrase.LogChangesToValue(nameof(LdnPassphrase));
  520. LdnServer = new ReactiveObject<string>();
  521. LdnServer.LogChangesToValue(nameof(LdnServer));
  522. }
  523. }
  524. /// <summary>
  525. /// The default configuration instance
  526. /// </summary>
  527. public static ConfigurationState Instance { get; private set; }
  528. /// <summary>
  529. /// The UI section
  530. /// </summary>
  531. public UISection UI { get; private set; }
  532. /// <summary>
  533. /// The Logger section
  534. /// </summary>
  535. public LoggerSection Logger { get; private set; }
  536. /// <summary>
  537. /// The System section
  538. /// </summary>
  539. public SystemSection System { get; private set; }
  540. /// <summary>
  541. /// The Graphics section
  542. /// </summary>
  543. public GraphicsSection Graphics { get; private set; }
  544. /// <summary>
  545. /// The Hid section
  546. /// </summary>
  547. public HidSection Hid { get; private set; }
  548. /// <summary>
  549. /// The Multiplayer section
  550. /// </summary>
  551. public MultiplayerSection Multiplayer { get; private set; }
  552. /// <summary>
  553. /// Enables or disables Discord Rich Presence
  554. /// </summary>
  555. public ReactiveObject<bool> EnableDiscordIntegration { get; private set; }
  556. /// <summary>
  557. /// Checks for updates when Ryujinx starts when enabled
  558. /// </summary>
  559. public ReactiveObject<bool> CheckUpdatesOnStart { get; private set; }
  560. /// <summary>
  561. /// Show "Confirm Exit" Dialog
  562. /// </summary>
  563. public ReactiveObject<bool> ShowConfirmExit { get; private set; }
  564. /// <summary>
  565. /// Ignore Applet
  566. /// </summary>
  567. public ReactiveObject<bool> IgnoreApplet { get; private set; }
  568. /// <summary>
  569. /// Enables or disables save window size, position and state on close.
  570. /// </summary>
  571. public ReactiveObject<bool> RememberWindowState { get; private set; }
  572. /// <summary>
  573. /// Enables or disables the redesigned title bar
  574. /// </summary>
  575. public ReactiveObject<bool> ShowTitleBar { get; private set; }
  576. /// <summary>
  577. /// Enables hardware-accelerated rendering for Avalonia
  578. /// </summary>
  579. public ReactiveObject<bool> EnableHardwareAcceleration { get; private set; }
  580. /// <summary>
  581. /// Hide Cursor on Idle
  582. /// </summary>
  583. public ReactiveObject<HideCursorMode> HideCursor { get; private set; }
  584. private ConfigurationState()
  585. {
  586. UI = new UISection();
  587. Logger = new LoggerSection();
  588. System = new SystemSection();
  589. Graphics = new GraphicsSection();
  590. Hid = new HidSection();
  591. Multiplayer = new MultiplayerSection();
  592. EnableDiscordIntegration = new ReactiveObject<bool>();
  593. CheckUpdatesOnStart = new ReactiveObject<bool>();
  594. ShowConfirmExit = new ReactiveObject<bool>();
  595. IgnoreApplet = new ReactiveObject<bool>();
  596. IgnoreApplet.LogChangesToValue(nameof(IgnoreApplet));
  597. RememberWindowState = new ReactiveObject<bool>();
  598. ShowTitleBar = new ReactiveObject<bool>();
  599. EnableHardwareAcceleration = new ReactiveObject<bool>();
  600. HideCursor = new ReactiveObject<HideCursorMode>();
  601. }
  602. }
  603. }