2nd wave of changes
This commit is contained in:
parent
8b2781c578
commit
86191d78bb
10 changed files with 175 additions and 41 deletions
|
@ -39,12 +39,9 @@ namespace Ryujinx
|
||||||
RyujinxNSOIcon = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.GUI.assets.ryujinxNSOIcon.png", 75, 75);
|
RyujinxNSOIcon = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.GUI.assets.ryujinxNSOIcon.png", 75, 75);
|
||||||
RyujinxROMIcon = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.GUI.assets.ryujinxROMIcon.png", 75, 75);
|
RyujinxROMIcon = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.GUI.assets.ryujinxROMIcon.png", 75, 75);
|
||||||
|
|
||||||
string dat = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "GameDirs.dat");
|
|
||||||
if (File.Exists(dat) == false) { File.Create(dat).Close(); }
|
|
||||||
string[] GameDirs = File.ReadAllLines(dat);
|
|
||||||
List<string> Games = new List<string>();
|
List<string> Games = new List<string>();
|
||||||
|
|
||||||
foreach (string GameDir in GameDirs)
|
foreach (string GameDir in SwitchSettings.SwitchConfig.GameDirs)
|
||||||
{
|
{
|
||||||
if (Directory.Exists(GameDir) == false) { Logger.PrintError(LogClass.Application, $"\"GameDirs.dat\" contains an invalid directory: \"{GameDir}\""); continue; }
|
if (Directory.Exists(GameDir) == false) { Logger.PrintError(LogClass.Application, $"\"GameDirs.dat\" contains an invalid directory: \"{GameDir}\""); continue; }
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
"enable_legacy_jit": false,
|
"enable_legacy_jit": false,
|
||||||
"ignore_missing_services": false,
|
"ignore_missing_services": false,
|
||||||
"controller_type": "Handheld",
|
"controller_type": "Handheld",
|
||||||
|
"game_dirs": [],
|
||||||
"enable_custom_theme": false,
|
"enable_custom_theme": false,
|
||||||
"custom_theme_path": "",
|
"custom_theme_path": "",
|
||||||
"keyboard_controls": {
|
"keyboard_controls": {
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
using ARMeilleure;
|
using ARMeilleure;
|
||||||
|
using JsonPrettyPrinterPlus;
|
||||||
using LibHac.Fs;
|
using LibHac.Fs;
|
||||||
using OpenTK.Input;
|
using OpenTK.Input;
|
||||||
using Ryujinx.Common;
|
using Ryujinx.Common;
|
||||||
|
@ -9,12 +10,12 @@ using Ryujinx.HLE.HOS.Services;
|
||||||
using Ryujinx.HLE.Input;
|
using Ryujinx.HLE.Input;
|
||||||
using Ryujinx.UI.Input;
|
using Ryujinx.UI.Input;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Utf8Json;
|
using Utf8Json;
|
||||||
using Utf8Json.Resolvers;
|
using Utf8Json.Resolvers;
|
||||||
using JsonPrettyPrinterPlus;
|
|
||||||
|
|
||||||
namespace Ryujinx
|
namespace Ryujinx
|
||||||
{
|
{
|
||||||
|
@ -125,6 +126,11 @@ namespace Ryujinx
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public ControllerStatus ControllerType { get; private set; }
|
public ControllerStatus ControllerType { get; private set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// A list of directories containing games to be used to load games into the games list
|
||||||
|
/// </summary>
|
||||||
|
public List<string> GameDirs { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Enable or disable custom themes in the GUI
|
/// Enable or disable custom themes in the GUI
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -32,6 +32,7 @@ namespace Ryujinx
|
||||||
private static ListStore TableStore { get; set; }
|
private static ListStore TableStore { get; set; }
|
||||||
|
|
||||||
[GUI] Window MainWin;
|
[GUI] Window MainWin;
|
||||||
|
[GUI] CheckMenuItem FullScreen;
|
||||||
[GUI] MenuItem NFC;
|
[GUI] MenuItem NFC;
|
||||||
[GUI] TreeView GameTable;
|
[GUI] TreeView GameTable;
|
||||||
[GUI] ScrolledWindow GameTableWindow;
|
[GUI] ScrolledWindow GameTableWindow;
|
||||||
|
@ -50,6 +51,8 @@ namespace Ryujinx
|
||||||
Configuration.Load(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Config.json"));
|
Configuration.Load(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Config.json"));
|
||||||
Configuration.InitialConfigure(device);
|
Configuration.InitialConfigure(device);
|
||||||
|
|
||||||
|
ApplicationLibrary.Init();
|
||||||
|
|
||||||
gtkapp = _gtkapp;
|
gtkapp = _gtkapp;
|
||||||
|
|
||||||
ApplyTheme();
|
ApplyTheme();
|
||||||
|
@ -111,14 +114,21 @@ namespace Ryujinx
|
||||||
GameTable.AppendColumn("Path", new CellRendererText(), "text", 7);
|
GameTable.AppendColumn("Path", new CellRendererText(), "text", 7);
|
||||||
|
|
||||||
TableStore = new ListStore(typeof(Gdk.Pixbuf), typeof(string), typeof(string), typeof(string), typeof(string), typeof(string), typeof(string), typeof(string));
|
TableStore = new ListStore(typeof(Gdk.Pixbuf), typeof(string), typeof(string), typeof(string), typeof(string), typeof(string), typeof(string), typeof(string));
|
||||||
|
GameTable.Model = TableStore;
|
||||||
|
|
||||||
|
UpdateGameTable();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void UpdateGameTable()
|
||||||
|
{
|
||||||
|
TableStore.Clear();
|
||||||
|
ApplicationLibrary.Init();
|
||||||
|
|
||||||
foreach (ApplicationLibrary.ApplicationData AppData in ApplicationLibrary.ApplicationLibraryData)
|
foreach (ApplicationLibrary.ApplicationData AppData in ApplicationLibrary.ApplicationLibraryData)
|
||||||
{
|
{
|
||||||
TableStore.AppendValues(AppData.Icon, AppData.Game, AppData.Version, AppData.DLC, AppData.TP, AppData.LP, AppData.FileSize, AppData.Path);
|
TableStore.AppendValues(AppData.Icon, AppData.Game, AppData.Version, AppData.DLC, AppData.TP, AppData.LP, AppData.FileSize, AppData.Path);
|
||||||
}
|
}
|
||||||
|
|
||||||
GameTable.Model = TableStore;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void ApplyTheme()
|
public static void ApplyTheme()
|
||||||
|
@ -317,6 +327,19 @@ namespace Ryujinx
|
||||||
Environment.Exit(0);
|
Environment.Exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ReturnMain_Pressed(object o, EventArgs args)
|
||||||
|
{
|
||||||
|
GameTableWindow.Show();
|
||||||
|
GLScreen.Hide();
|
||||||
|
//will also have to write logic to kill running game
|
||||||
|
}
|
||||||
|
|
||||||
|
private void FullScreen_Toggled(object o, EventArgs args)
|
||||||
|
{
|
||||||
|
if (FullScreen.Active == true) { Fullscreen(); }
|
||||||
|
else { Unfullscreen(); }
|
||||||
|
}
|
||||||
|
|
||||||
private void Settings_Pressed(object o, EventArgs args)
|
private void Settings_Pressed(object o, EventArgs args)
|
||||||
{
|
{
|
||||||
var SettingsWin = new SwitchSettings(device);
|
var SettingsWin = new SwitchSettings(device);
|
||||||
|
@ -325,6 +348,11 @@ namespace Ryujinx
|
||||||
SettingsWin.Show();
|
SettingsWin.Show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void Profiler_Pressed(object o, EventArgs args)
|
||||||
|
{
|
||||||
|
//Soon™
|
||||||
|
}
|
||||||
|
|
||||||
private void NFC_Pressed(object o, EventArgs args)
|
private void NFC_Pressed(object o, EventArgs args)
|
||||||
{
|
{
|
||||||
FileChooserDialog fc = new FileChooserDialog("Choose the file to open", this, FileChooserAction.Open, "Cancel", ResponseType.Cancel, "Open", ResponseType.Accept);
|
FileChooserDialog fc = new FileChooserDialog("Choose the file to open", this, FileChooserAction.Open, "Cancel", ResponseType.Cancel, "Open", ResponseType.Accept);
|
||||||
|
@ -333,7 +361,7 @@ namespace Ryujinx
|
||||||
|
|
||||||
if (fc.Run() == (int)ResponseType.Accept)
|
if (fc.Run() == (int)ResponseType.Accept)
|
||||||
{
|
{
|
||||||
Console.WriteLine(fc.Filename); //temp
|
//Soon™
|
||||||
}
|
}
|
||||||
fc.Destroy();
|
fc.Destroy();
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,7 +48,7 @@
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkSeparatorMenuItem" id="sep">
|
<object class="GtkSeparatorMenuItem">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
</object>
|
</object>
|
||||||
|
@ -76,6 +76,30 @@
|
||||||
<object class="GtkMenu">
|
<object class="GtkMenu">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkCheckMenuItem" id="FullScreen">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="label" translatable="yes">Fullscreen</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<signal name="toggled" handler="FullScreen_Toggled" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkMenuItem" id="ReturnMain">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="label" translatable="yes">Return to Main Menu</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<signal name="activate" handler="ReturnMain_Pressed" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkSeparatorMenuItem">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkMenuItem" id="SettingsMenu">
|
<object class="GtkMenuItem" id="SettingsMenu">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
@ -99,6 +123,15 @@
|
||||||
<object class="GtkMenu">
|
<object class="GtkMenu">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">False</property>
|
<property name="can_focus">False</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkMenuItem" id="Profiler">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="label" translatable="yes">Profiler</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<signal name="activate" handler="Profiler_Pressed" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkMenuItem" id="NFC">
|
<object class="GtkMenuItem" id="NFC">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
|
|
@ -5,7 +5,6 @@ using Ryujinx.HLE.Input;
|
||||||
using Ryujinx.UI.Input;
|
using Ryujinx.UI.Input;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
|
@ -37,9 +36,9 @@ namespace Ryujinx
|
||||||
[GUI] Entry CustThemeDir;
|
[GUI] Entry CustThemeDir;
|
||||||
[GUI] Label CustThemeDirLabel;
|
[GUI] Label CustThemeDirLabel;
|
||||||
[GUI] TextView GameDirsBox;
|
[GUI] TextView GameDirsBox;
|
||||||
|
[GUI] Entry LogPath;
|
||||||
[GUI] Image ControllerImage;
|
[GUI] Image ControllerImage;
|
||||||
|
|
||||||
|
|
||||||
[GUI] ComboBoxText Controller1Type;
|
[GUI] ComboBoxText Controller1Type;
|
||||||
[GUI] ToggleButton LStickUp1;
|
[GUI] ToggleButton LStickUp1;
|
||||||
[GUI] ToggleButton LStickDown1;
|
[GUI] ToggleButton LStickDown1;
|
||||||
|
@ -68,7 +67,7 @@ namespace Ryujinx
|
||||||
|
|
||||||
public static void ConfigureSettings(Configuration Instance) { SwitchConfig = Instance; }
|
public static void ConfigureSettings(Configuration Instance) { SwitchConfig = Instance; }
|
||||||
|
|
||||||
public SwitchSettings(HLE.Switch _device) : this(new Builder("Ryujinx.GUI.Settings.glade"), _device) { }
|
public SwitchSettings(HLE.Switch _device) : this(new Builder("Ryujinx.GUI.SwitchSettings.glade"), _device) { }
|
||||||
|
|
||||||
private SwitchSettings(Builder builder, HLE.Switch _device) : base(builder.GetObject("SettingsWin").Handle)
|
private SwitchSettings(Builder builder, HLE.Switch _device) : base(builder.GetObject("SettingsWin").Handle)
|
||||||
{
|
{
|
||||||
|
@ -151,9 +150,11 @@ namespace Ryujinx
|
||||||
ZR1.Label = SwitchConfig.KeyboardControls.RightJoycon.ButtonZr.ToString();
|
ZR1.Label = SwitchConfig.KeyboardControls.RightJoycon.ButtonZr.ToString();
|
||||||
|
|
||||||
CustThemeDir.Buffer.Text = SwitchConfig.CustomThemePath;
|
CustThemeDir.Buffer.Text = SwitchConfig.CustomThemePath;
|
||||||
GameDirsBox.Buffer.Text = File.ReadAllText("./GameDirs.dat");
|
GameDirsBox.Buffer.Text = String.Join("\r\n", SwitchConfig.GameDirs);
|
||||||
|
|
||||||
if (CustThemeToggle.Active == false) { CustThemeDir.Sensitive = false; CustThemeDirLabel.Sensitive = false; }
|
if (CustThemeToggle.Active == false) { CustThemeDir.Sensitive = false; CustThemeDirLabel.Sensitive = false; }
|
||||||
|
|
||||||
|
LogPath.Buffer.Text = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Ryujinx.log");
|
||||||
}
|
}
|
||||||
|
|
||||||
//Events
|
//Events
|
||||||
|
@ -181,6 +182,12 @@ namespace Ryujinx
|
||||||
|
|
||||||
private void SaveToggle_Activated(object obj, EventArgs args)
|
private void SaveToggle_Activated(object obj, EventArgs args)
|
||||||
{
|
{
|
||||||
|
List<string> gameDirs = new List<string>();
|
||||||
|
foreach (string line in GameDirsBox.Buffer.Text.Split("\n"))
|
||||||
|
{
|
||||||
|
gameDirs.Add(line);
|
||||||
|
}
|
||||||
|
|
||||||
if (ErrorLogToggle.Active) { SwitchConfig.LoggingEnableError = true; }
|
if (ErrorLogToggle.Active) { SwitchConfig.LoggingEnableError = true; }
|
||||||
if (WarningLogToggle.Active) { SwitchConfig.LoggingEnableWarn = true; }
|
if (WarningLogToggle.Active) { SwitchConfig.LoggingEnableWarn = true; }
|
||||||
if (InfoLogToggle.Active) { SwitchConfig.LoggingEnableInfo = true; }
|
if (InfoLogToggle.Active) { SwitchConfig.LoggingEnableInfo = true; }
|
||||||
|
@ -232,12 +239,14 @@ namespace Ryujinx
|
||||||
SwitchConfig.SystemLanguage = (SystemLanguage)Enum.Parse(typeof(SystemLanguage), SystemLanguageSelect.ActiveId);
|
SwitchConfig.SystemLanguage = (SystemLanguage)Enum.Parse(typeof(SystemLanguage), SystemLanguageSelect.ActiveId);
|
||||||
SwitchConfig.ControllerType = (HidControllerType)Enum.Parse(typeof(HidControllerType), Controller1Type.ActiveId);
|
SwitchConfig.ControllerType = (HidControllerType)Enum.Parse(typeof(HidControllerType), Controller1Type.ActiveId);
|
||||||
SwitchConfig.CustomThemePath = CustThemeDir.Buffer.Text;
|
SwitchConfig.CustomThemePath = CustThemeDir.Buffer.Text;
|
||||||
|
SwitchConfig.GameDirs = gameDirs;
|
||||||
|
|
||||||
|
|
||||||
Configuration.SaveConfig(SwitchConfig, System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Config.json"));
|
Configuration.SaveConfig(SwitchConfig, System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Config.json"));
|
||||||
File.WriteAllText("./GameDirs.dat", GameDirsBox.Buffer.Text);
|
|
||||||
|
|
||||||
Configuration.Configure(device, SwitchConfig);
|
Configuration.Configure(device, SwitchConfig);
|
||||||
|
|
||||||
|
MainMenu.UpdateGameTable();
|
||||||
|
|
||||||
Destroy();
|
Destroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -128,6 +128,7 @@
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">False</property>
|
<property name="receives_default">False</property>
|
||||||
|
<property name="halign">start</property>
|
||||||
<property name="margin_left">5</property>
|
<property name="margin_left">5</property>
|
||||||
<property name="draw_indicator">True</property>
|
<property name="draw_indicator">True</property>
|
||||||
</object>
|
</object>
|
||||||
|
@ -251,6 +252,56 @@
|
||||||
<property name="position">7</property>
|
<property name="position">7</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkSeparator">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">8</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="margin_left">2</property>
|
||||||
|
<property name="margin_right">8</property>
|
||||||
|
<property name="label" translatable="yes">Log File Location:</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="padding">5</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkEntry" id="LogPath">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="valign">center</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="padding">5</property>
|
||||||
|
<property name="position">9</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child type="tab">
|
<child type="tab">
|
|
@ -22,6 +22,8 @@ namespace Ryujinx
|
||||||
|
|
||||||
ApplicationLibrary.Init();
|
ApplicationLibrary.Init();
|
||||||
|
|
||||||
|
Gtk.Application.Init();
|
||||||
|
|
||||||
var gtkapp = new Gtk.Application("Ryujinx.Ryujinx", GLib.ApplicationFlags.None);
|
var gtkapp = new Gtk.Application("Ryujinx.Ryujinx", GLib.ApplicationFlags.None);
|
||||||
var win = new MainMenu(args, gtkapp);
|
var win = new MainMenu(args, gtkapp);
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@
|
||||||
<EmbeddedResource Include="GUI\assets\ryujinxROMIcon.png" />
|
<EmbeddedResource Include="GUI\assets\ryujinxROMIcon.png" />
|
||||||
<EmbeddedResource Include="GUI\assets\ryujinxXCIIcon.png" />
|
<EmbeddedResource Include="GUI\assets\ryujinxXCIIcon.png" />
|
||||||
<EmbeddedResource Include="GUI\MainMenu.glade" />
|
<EmbeddedResource Include="GUI\MainMenu.glade" />
|
||||||
<EmbeddedResource Include="GUI\Settings.glade" />
|
<EmbeddedResource Include="GUI\SwitchSettings.glade" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|
|
@ -494,6 +494,13 @@
|
||||||
false
|
false
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"game_dirs": {
|
||||||
|
"$id": "#/properties/game_dirs",
|
||||||
|
"type": "string list",
|
||||||
|
"title": "List of Game Directories",
|
||||||
|
"description": "A list of directories containing games to be used to load games into the games list",
|
||||||
|
"default": []
|
||||||
|
},
|
||||||
"enable_custom_theme": {
|
"enable_custom_theme": {
|
||||||
"$id": "#/properties/enable_custom_theme",
|
"$id": "#/properties/enable_custom_theme",
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue