New features

This commit is contained in:
Xpl0itR 2019-07-09 16:51:22 +01:00
commit e42b68977f
No known key found for this signature in database
GPG key ID: 91798184109676AD
11 changed files with 735 additions and 319 deletions

View file

@ -33,6 +33,7 @@ namespace Ryujinx
public string Version; public string Version;
public string TimePlayed; public string TimePlayed;
public string LastPlayed; public string LastPlayed;
public string FileExt;
public string FileSize; public string FileSize;
public string Path; public string Path;
} }
@ -105,54 +106,45 @@ namespace Ryujinx
{ {
if ((Path.GetExtension(applicationPath) == ".nsp") || (Path.GetExtension(applicationPath) == ".pfs0") || (Path.GetExtension(applicationPath) == ".xci")) if ((Path.GetExtension(applicationPath) == ".nsp") || (Path.GetExtension(applicationPath) == ".pfs0") || (Path.GetExtension(applicationPath) == ".xci"))
{ {
IFileSystem controlFs = null;
// Store the ControlFS in variable called controlFs
if (Path.GetExtension(applicationPath) == ".xci")
{
Xci xci = new Xci(KeySet, file.AsStorage());
controlFs = GetControlFs(xci.OpenPartition(XciPartitionType.Secure));
}
else { controlFs = GetControlFs(new PartitionFileSystem(file.AsStorage())); }
// Creates NACP class from the NACP file
IFile controlFile = controlFs.OpenFile("/control.nacp", OpenMode.Read);
Nacp controlData = new Nacp(controlFile.AsStream());
// Get the title name, title ID, developer name and version number from the NACP
version = controlData.DisplayVersion;
titleName = controlData.Descriptions[(int)DesiredTitleLanguage].Title;
if (string.IsNullOrWhiteSpace(titleName))
{
titleName = controlData.Descriptions.ToList().Find(x => !string.IsNullOrWhiteSpace(x.Title)).Title;
}
titleId = controlData.PresenceGroupId.ToString("x16");
if (string.IsNullOrWhiteSpace(titleId)) { titleId = controlData.SaveDataOwnerId.ToString("x16"); }
if (string.IsNullOrWhiteSpace(titleId)) { titleId = (controlData.AddOnContentBaseId - 0x1000).ToString("x16"); }
developer = controlData.Descriptions[(int)DesiredTitleLanguage].Developer;
if (string.IsNullOrWhiteSpace(developer))
{
developer = controlData.Descriptions.ToList().Find(x => !string.IsNullOrWhiteSpace(x.Developer)).Developer;
}
// Read the icon from the ControlFS and store it as a byte array
try try
{ {
IFile icon = controlFs.OpenFile($"/icon_{DesiredTitleLanguage}.dat", OpenMode.Read); IFileSystem controlFs = null;
using (MemoryStream ms = new MemoryStream())
// Store the ControlFS in variable called controlFs
if (Path.GetExtension(applicationPath) == ".xci")
{ {
icon.AsStream().CopyTo(ms); Xci xci = new Xci(KeySet, file.AsStorage());
applicationIcon = ms.ToArray(); controlFs = GetControlFs(xci.OpenPartition(XciPartitionType.Secure));
} }
} else { controlFs = GetControlFs(new PartitionFileSystem(file.AsStorage())); }
catch (FileNotFoundException)
{ // Creates NACP class from the NACP file
IFile controlNacp = controlFs.OpenFile("/control.nacp", OpenMode.Read);
Nacp controlData = new Nacp(controlNacp.AsStream());
// Get the title name, title ID, developer name and version number from the NACP
version = controlData.DisplayVersion;
titleName = controlData.Descriptions[(int)DesiredTitleLanguage].Title;
if (string.IsNullOrWhiteSpace(titleName))
{
titleName = controlData.Descriptions.ToList().Find(x => !string.IsNullOrWhiteSpace(x.Title)).Title;
}
titleId = controlData.PresenceGroupId.ToString("x16");
if (string.IsNullOrWhiteSpace(titleId)) { titleId = controlData.SaveDataOwnerId.ToString("x16"); }
if (string.IsNullOrWhiteSpace(titleId)) { titleId = (controlData.AddOnContentBaseId - 0x1000).ToString("x16"); }
developer = controlData.Descriptions[(int)DesiredTitleLanguage].Developer;
if (string.IsNullOrWhiteSpace(developer))
{
developer = controlData.Descriptions.ToList().Find(x => !string.IsNullOrWhiteSpace(x.Developer)).Developer;
}
// Read the icon from the ControlFS and store it as a byte array
try try
{ {
IFile icon = controlFs.OpenFile($"/icon_AmericanEnglish.dat", OpenMode.Read); IFile icon = controlFs.OpenFile($"/icon_{DesiredTitleLanguage}.dat", OpenMode.Read);
using (MemoryStream ms = new MemoryStream()) using (MemoryStream ms = new MemoryStream())
{ {
icon.AsStream().CopyTo(ms); icon.AsStream().CopyTo(ms);
@ -161,10 +153,52 @@ namespace Ryujinx
} }
catch (FileNotFoundException) catch (FileNotFoundException)
{ {
if (Path.GetExtension(applicationPath) == ".xci") { applicationIcon = RyujinxXciIcon; } IDirectory controlDir = controlFs.OpenDirectory("./", OpenDirectoryMode.All);
else { applicationIcon = RyujinxNspIcon; } foreach (DirectoryEntry entry in controlDir.Read())
{
if (entry.Name == "control.nacp") { continue; }
IFile icon = controlFs.OpenFile(entry.FullPath, OpenMode.Read);
using (MemoryStream ms = new MemoryStream())
{
icon.AsStream().CopyTo(ms);
applicationIcon = ms.ToArray();
}
if (applicationIcon != null) { break; }
}
if (applicationIcon == null)
{
if (Path.GetExtension(applicationPath) == ".xci") { applicationIcon = RyujinxXciIcon; }
else { applicationIcon = RyujinxNspIcon; }
}
} }
} }
catch (MissingKeyException exception)
{
titleName = "Unknown";
titleId = "Unknown";
developer = "Unknown";
version = "?";
if (Path.GetExtension(applicationPath) == ".xci") { applicationIcon = RyujinxXciIcon; }
else { applicationIcon = RyujinxNspIcon; }
Logger.PrintError(LogClass.Application, $"Your key set is missing a key with the name: {exception.Name}");
}
catch (InvalidDataException)
{
titleName = "Unknown";
titleId = "Unknown";
developer = "Unknown";
version = "?";
if (Path.GetExtension(applicationPath) == ".xci") { applicationIcon = RyujinxXciIcon; }
else { applicationIcon = RyujinxNspIcon; }
Logger.PrintError(LogClass.Application, $"Unable to decrypt NCA header. The header key must be incorrect. File: {applicationPath}");
}
} }
else if (Path.GetExtension(applicationPath) == ".nro") else if (Path.GetExtension(applicationPath) == ".nro")
@ -250,6 +284,7 @@ namespace Ryujinx
Version = version, Version = version,
TimePlayed = playedData[0], TimePlayed = playedData[0],
LastPlayed = playedData[1], LastPlayed = playedData[1],
FileExt = Path.GetExtension(applicationPath).ToUpper().Remove(0 ,1),
FileSize = (filesize < 1) ? (filesize * 1024).ToString("0.##") + "MB" : filesize.ToString("0.##") + "GB", FileSize = (filesize < 1) ? (filesize * 1024).ToString("0.##") + "MB" : filesize.ToString("0.##") + "GB",
Path = applicationPath, Path = applicationPath,
}; };
@ -289,42 +324,46 @@ namespace Ryujinx
private static string[] GetPlayedData(string TitleId, string UserId) private static string[] GetPlayedData(string TitleId, string UserId)
{ {
string[] playedData = new string[2]; try
string appdataPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); {
string savePath = Path.Combine(appdataPath, "RyuFs", "nand", "user", "save", "0000000000000000", UserId, TitleId); string[] playedData = new string[2];
string appdataPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
string savePath = Path.Combine(appdataPath, "RyuFs", "nand", "user", "save", "0000000000000000", UserId, TitleId);
if (File.Exists(Path.Combine(savePath, "TimePlayed.dat")) == false) if (File.Exists(Path.Combine(savePath, "TimePlayed.dat")) == false)
{
Directory.CreateDirectory(savePath);
using (FileStream file = File.OpenWrite(Path.Combine(savePath, "TimePlayed.dat"))) { file.Write(Encoding.ASCII.GetBytes("0")); }
}
using (FileStream fs = File.OpenRead(Path.Combine(savePath, "TimePlayed.dat")))
{
using (StreamReader sr = new StreamReader(fs))
{ {
float timePlayed = float.Parse(sr.ReadLine()); Directory.CreateDirectory(savePath);
using (FileStream file = File.OpenWrite(Path.Combine(savePath, "TimePlayed.dat"))) { file.Write(Encoding.ASCII.GetBytes("0")); }
if (timePlayed <= 60.0) { playedData[0] = $"{timePlayed}s"; }
else if(timePlayed <= 3600.0) { playedData[0] = $"{Math.Round(timePlayed / 60 , 2, MidpointRounding.AwayFromZero)} mins"; }
else if(timePlayed <= 86400.0) { playedData[0] = $"{Math.Round(timePlayed / 3600 , 2, MidpointRounding.AwayFromZero)} hrs"; }
else { playedData[0] = $"{Math.Round(timePlayed / 86400, 2, MidpointRounding.AwayFromZero)} days"; }
} }
} using (FileStream fs = File.OpenRead(Path.Combine(savePath, "TimePlayed.dat")))
if (File.Exists(Path.Combine(savePath, "LastPlayed.dat")) == false)
{
Directory.CreateDirectory(savePath);
using (FileStream file = File.OpenWrite(Path.Combine(savePath, "LastPlayed.dat"))) { file.Write(Encoding.ASCII.GetBytes("Never")); }
}
using (FileStream fs = File.OpenRead(Path.Combine(savePath, "LastPlayed.dat")))
{
using (StreamReader sr = new StreamReader(fs))
{ {
playedData[1] = sr.ReadLine(); using (StreamReader sr = new StreamReader(fs))
} {
} float timePlayed = float.Parse(sr.ReadLine());
return playedData; if (timePlayed <= 60.0) { playedData[0] = $"{timePlayed}s"; }
else if (timePlayed <= 3600.0) { playedData[0] = $"{Math.Round(timePlayed / 60 , 2, MidpointRounding.AwayFromZero)} mins"; }
else if (timePlayed <= 86400.0) { playedData[0] = $"{Math.Round(timePlayed / 3600 , 2, MidpointRounding.AwayFromZero)} hrs"; }
else { playedData[0] = $"{Math.Round(timePlayed / 86400, 2, MidpointRounding.AwayFromZero)} days"; }
}
}
if (File.Exists(Path.Combine(savePath, "LastPlayed.dat")) == false)
{
Directory.CreateDirectory(savePath);
using (FileStream file = File.OpenWrite(Path.Combine(savePath, "LastPlayed.dat"))) { file.Write(Encoding.ASCII.GetBytes("Never")); }
}
using (FileStream fs = File.OpenRead(Path.Combine(savePath, "LastPlayed.dat")))
{
using (StreamReader sr = new StreamReader(fs))
{
playedData[1] = sr.ReadLine();
}
}
return playedData;
}
catch { return new string[] { "Unknown", "Unknown" }; }
} }
} }
} }

View file

@ -591,11 +591,11 @@ namespace Ryujinx.HLE.HOS
staticObject = new NxStaticObject(input); staticObject = new NxStaticObject(input);
} }
ContentManager.LoadEntries();
TitleName = CurrentTitle = metaData.TitleName; TitleName = CurrentTitle = metaData.TitleName;
TitleID = metaData.Aci0.TitleId.ToString("x16"); TitleID = metaData.Aci0.TitleId.ToString("x16");
ContentManager.LoadEntries();
ProgramLoader.LoadStaticObjects(this, metaData, new IExecutable[] { staticObject }); ProgramLoader.LoadStaticObjects(this, metaData, new IExecutable[] { staticObject });
} }

View file

@ -4,8 +4,8 @@ using System.Text;
namespace Ryujinx.HLE.Loaders.Npdm namespace Ryujinx.HLE.Loaders.Npdm
{ {
// https://github.com/SciresM/hactool/blob/master/npdm.c // https://github.com/SciresM/hactool/blob/master/npdm.c
// https://github.com/SciresM/hactool/blob/master/npdm.h // https://github.com/SciresM/hactool/blob/master/npdm.h
// http://switchbrew.org/index.php?title=NPDM // http://switchbrew.org/index.php?title=NPDM
class Npdm class Npdm
{ {
@ -18,7 +18,7 @@ namespace Ryujinx.HLE.Loaders.Npdm
public int PersonalMmHeapSize { get; private set; } public int PersonalMmHeapSize { get; private set; }
public int ProcessCategory { get; private set; } public int ProcessCategory { get; private set; }
public int MainThreadStackSize { get; private set; } public int MainThreadStackSize { get; private set; }
public string TitleName { get; set; } public string TitleName { get; set; }
public byte[] ProductCode { get; private set; } public byte[] ProductCode { get; private set; }
public Aci0 Aci0 { get; private set; } public Aci0 Aci0 { get; private set; }

View file

@ -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",
"gui_columns": [ true, true, true, true, true, true, true, true, true ],
"game_dirs": [], "game_dirs": [],
"enable_custom_theme": false, "enable_custom_theme": false,
"custom_theme_path": "", "custom_theme_path": "",
@ -55,7 +56,7 @@
} }
}, },
"joystick_controls": { "joystick_controls": {
"enabled": false, "enabled": true,
"index": 0, "index": 0,
"deadzone": 0.05, "deadzone": 0.05,
"trigger_threshold": 0.5, "trigger_threshold": 0.5,

View file

@ -60,17 +60,17 @@ namespace Ryujinx
/// <summary> /// <summary>
/// Enables printing guest log messages /// Enables printing guest log messages
/// </summary> /// </summary>
public bool LoggingEnableGuest { get; private set; } public bool LoggingEnableGuest { get; set; }
/// <summary> /// <summary>
/// Enables printing FS access log messages /// Enables printing FS access log messages
/// </summary> /// </summary>
public bool LoggingEnableFsAccessLog { get; private set; } public bool LoggingEnableFsAccessLog { get; set; }
/// <summary> /// <summary>
/// Controls which log messages are written to the log targets /// Controls which log messages are written to the log targets
/// </summary> /// </summary>
public LogClass[] LoggingFilteredClasses { get; private set; } public LogClass[] LoggingFilteredClasses { get; set; }
/// <summary> /// <summary>
/// Enables or disables logging to a file on disk /// Enables or disables logging to a file on disk
@ -125,7 +125,12 @@ namespace Ryujinx
/// <summary> /// <summary>
/// The primary controller's type /// The primary controller's type
/// </summary> /// </summary>
public ControllerStatus ControllerType { get; private set; } public ControllerStatus ControllerType { get; set; }
/// <summary>
/// Used to toggle columns in the GUI
/// </summary>
public List<bool> GuiColumns { get; set; }
/// <summary> /// <summary>
/// A list of directories containing games to be used to load games into the games list /// A list of directories containing games to be used to load games into the games list

View file

@ -11,6 +11,7 @@ namespace Ryujinx.UI
{ {
#pragma warning disable 649 #pragma warning disable 649
[GUI] Window AboutWin; [GUI] Window AboutWin;
[GUI] Label VersionText;
[GUI] Image RyujinxLogo; [GUI] Image RyujinxLogo;
[GUI] Image PatreonLogo; [GUI] Image PatreonLogo;
[GUI] Image GitHubLogo; [GUI] Image GitHubLogo;
@ -23,12 +24,15 @@ namespace Ryujinx.UI
private AboutWindow(Builder builder) : base(builder.GetObject("AboutWin").Handle) private AboutWindow(Builder builder) : base(builder.GetObject("AboutWin").Handle)
{ {
builder.Autoconnect(this); builder.Autoconnect(this);
AboutWin.Icon = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.Ui.assets.ryujinxIcon.png"); AboutWin.Icon = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.Ui.assets.ryujinxIcon.png");
RyujinxLogo.Pixbuf = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.Ui.assets.ryujinxIcon.png", 220, 220); RyujinxLogo.Pixbuf = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.Ui.assets.ryujinxIcon.png", 100, 100);
PatreonLogo.Pixbuf = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.Ui.assets.PatreonLogo.png", 30 , 30 ); PatreonLogo.Pixbuf = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.Ui.assets.PatreonLogo.png", 30 , 30 );
GitHubLogo.Pixbuf = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.Ui.assets.GitHubLogo.png" , 30 , 30 ); GitHubLogo.Pixbuf = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.Ui.assets.GitHubLogo.png" , 30 , 30 );
DiscordLogo.Pixbuf = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.Ui.assets.DiscordLogo.png", 30 , 30 ); DiscordLogo.Pixbuf = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.Ui.assets.DiscordLogo.png", 30 , 30 );
TwitterLogo.Pixbuf = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.Ui.assets.TwitterLogo.png", 30 , 30 ); TwitterLogo.Pixbuf = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.Ui.assets.TwitterLogo.png", 30 , 30 );
VersionText.Text = "Version x.x.x (Commit Number)";
} }
public void OpenUrl(string url) public void OpenUrl(string url)

View file

@ -7,47 +7,18 @@
<property name="resizable">False</property> <property name="resizable">False</property>
<property name="modal">True</property> <property name="modal">True</property>
<property name="default_width">800</property> <property name="default_width">800</property>
<property name="default_height">400</property> <property name="default_height">350</property>
<property name="type_hint">dialog</property> <property name="type_hint">dialog</property>
<child> <child type="titlebar">
<placeholder/> <placeholder/>
</child> </child>
<child internal-child="vbox"> <child internal-child="vbox">
<object class="GtkBox"> <object class="GtkBox">
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<property name="spacing">2</property>
<child internal-child="action_area"> <child internal-child="action_area">
<object class="GtkButtonBox"> <object class="GtkButtonBox">
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="layout_style">end</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes"> </property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkToggleButton" id="CloseToggle">
<property name="label" translatable="yes">Close</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<signal name="toggled" handler="CloseToggle_Activated" swapped="no"/>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="padding">5</property>
<property name="position">1</property>
</packing>
</child>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@ -63,98 +34,159 @@
<object class="GtkBox" id="leftBox"> <object class="GtkBox" id="leftBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="margin_left">10</property>
<property name="margin_right">15</property>
<property name="margin_top">10</property>
<property name="margin_bottom">15</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<child> <child>
<object class="GtkBox"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="valign">start</property>
<property name="orientation">vertical</property>
<child> <child>
<object class="GtkImage" id="RyujinxLogo"> <object class="GtkBox">
<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="GtkImage" id="RyujinxLogo">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">10</property>
<property name="margin_right">10</property>
<property name="margin_top">10</property>
<property name="margin_bottom">10</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">center</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Ryujinx</property>
<property name="justify">center</property>
<attributes>
<attribute name="scale" value="2.7000000000000002"/>
</attributes>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">(REE-YOU-JI-NX)</property>
<property name="justify">center</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkEventBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<signal name="button-press-event" handler="RyujinxButton_Pressed" swapped="no"/>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">www.ryujinx.org</property>
<property name="justify">center</property>
<attributes>
<attribute name="underline" value="True"/>
</attributes>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="padding">5</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">0</property> <property name="position">0</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkBox"> <object class="GtkLabel" id="VersionText">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="orientation">vertical</property> <property name="label" translatable="yes">Version x.x.x (Commit Number)</property>
<child> <property name="justify">center</property>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Ryujinx</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="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">(REE-YOU-JI-NX)</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="padding">5</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Version x.x.x
Unlicenced</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="padding">5</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkEventBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<signal name="button-press-event" handler="RyujinxButton_Pressed" swapped="no"/>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">https://ryujinx.org</property>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="padding">5</property>
<property name="position">3</property>
</packing>
</child>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="padding">2</property>
<property name="position">1</property> <property name="position">1</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Unlicenced</property>
<property name="justify">center</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="padding">5</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Ryujinx is not affiliated with Nintendo,
or any of its partners, in any way</property>
<property name="justify">center</property>
<attributes>
<attribute name="scale" value="0.80000000000000004"/>
</attributes>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="padding">5</property>
<property name="position">3</property>
</packing>
</child>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">False</property>
<property name="position">0</property> <property name="position">0</property>
</packing> </packing>
</child> </child>
@ -162,6 +194,7 @@ Unlicenced</property>
<object class="GtkBox"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="margin_top">25</property>
<child> <child>
<object class="GtkEventBox" id="PatreonButton"> <object class="GtkEventBox" id="PatreonButton">
<property name="visible">True</property> <property name="visible">True</property>
@ -331,47 +364,51 @@ Unlicenced</property>
</packing> </packing>
</child> </child>
</object> </object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Ryujinx is not affiliated with Nintendo
or any of its partners in any way</property>
</object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">False</property>
<property name="padding">5</property> <property name="pack_type">end</property>
<property name="position">2</property> <property name="position">2</property>
</packing> </packing>
</child> </child>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">False</property>
<property name="position">0</property> <property name="position">0</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkSeparator">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_top">10</property>
<property name="margin_bottom">10</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child> <child>
<object class="GtkBox" id="rightBox"> <object class="GtkBox" id="rightBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="margin_left">15</property>
<property name="margin_right">10</property>
<property name="margin_top">40</property>
<property name="margin_bottom">15</property>
<property name="orientation">vertical</property> <property name="orientation">vertical</property>
<child> <child>
<object class="GtkLabel"> <object class="GtkLabel">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="halign">start</property> <property name="halign">start</property>
<property name="label" translatable="yes">Ryujinx is an emulator for the Nintendo Switch. <property name="label" translatable="yes">About</property>
Please support us on Patreon. <attributes>
Get all the latest news on Twitter. <attribute name="weight" value="bold"/>
Developers interested in contributing can find out more on our discord.</property> </attributes>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@ -381,77 +418,148 @@ Developers interested in contributing can find out more on our discord.</propert
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkBox"> <object class="GtkLabel">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="orientation">vertical</property> <property name="halign">start</property>
<child> <property name="margin_left">10</property>
<object class="GtkLabel"> <property name="label" translatable="yes">Ryujinx is an emulator for the Nintendo Switch.
<property name="visible">True</property> Please support us on Patreon.
<property name="can_focus">False</property> Get all the latest news on our Twitter or Discord.
<property name="halign">start</property> Developers interested in contributing can find out more on our Discord.</property>
<property name="label" translatable="yes">Created By:</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="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">[Devs go here]</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="padding">5</property>
<property name="position">1</property>
</packing>
</child>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="padding">5</property>
<property name="position">1</property> <property name="position">1</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkEventBox" id="ContributersButton"> <object class="GtkLabel">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<signal name="button-press-event" handler="ContributersButton_Pressed" swapped="no"/> <property name="halign">start</property>
<child> <property name="label" translatable="yes">Created By:</property>
<object class="GtkLabel"> <attributes>
<property name="visible">True</property> <attribute name="weight" value="bold"/>
<property name="can_focus">False</property> </attributes>
<property name="halign">end</property>
<property name="margin_right">5</property>
<property name="label" translatable="yes">All Contributers</property>
</object>
</child>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="padding">5</property>
<property name="position">2</property> <property name="position">2</property>
</packing> </packing>
</child> </child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="margin_left">10</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkScrolledWindow">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="shadow_type">in</property>
<child>
<object class="GtkViewport">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="baseline_position">top</property>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes">gdkchan
LDj3SNuD
Ac_K
Thog</property>
<property name="yalign">0</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">start</property>
<property name="label" translatable="yes">»jD«
emmaus
Thealexbarney
Andy A (BaronKiko)</property>
<property name="yalign">0</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkEventBox" id="ContributersButton">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="valign">start</property>
<signal name="button-press-event" handler="ContributersButton_Pressed" swapped="no"/>
<child>
<object class="GtkLabel">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="halign">end</property>
<property name="margin_right">5</property>
<property name="label" translatable="yes">All Contributors...</property>
<attributes>
<attribute name="underline" value="True"/>
</attributes>
</object>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">1</property> <property name="position">2</property>
</packing> </packing>
</child> </child>
</object> </object>
<packing> <packing>
<property name="expand">True</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="padding">10</property>
<property name="position">1</property> <property name="position">1</property>
</packing> </packing>
</child> </child>

View file

@ -96,17 +96,18 @@ namespace Ryujinx.UI
//Temporary code section start, remove this section and uncomment above line when game is rendered to the glarea in the gui //Temporary code section start, remove this section and uncomment above line when game is rendered to the glarea in the gui
Box.Remove(GlScreen); Box.Remove(GlScreen);
Nfc.Sensitive = false; Nfc.Sensitive = false;
ReturnMain.Sensitive = false; ReturnMain.Sensitive = false;
GameTable.AppendColumn("Icon", new CellRendererPixbuf(), "pixbuf", 0); if (SwitchSettings.SwitchConfig.GuiColumns[0]) { GameTable.AppendColumn("Icon" , new CellRendererPixbuf(), "pixbuf", 0); }
GameTable.AppendColumn("Application", new CellRendererText(), "text", 1); if (SwitchSettings.SwitchConfig.GuiColumns[1]) { GameTable.AppendColumn("Application", new CellRendererText() , "text" , 1); }
GameTable.AppendColumn("Developer", new CellRendererText(), "text", 2); if (SwitchSettings.SwitchConfig.GuiColumns[2]) { GameTable.AppendColumn("Developer" , new CellRendererText() , "text" , 2); }
GameTable.AppendColumn("Version", new CellRendererText(), "text", 3); if (SwitchSettings.SwitchConfig.GuiColumns[3]) { GameTable.AppendColumn("Version" , new CellRendererText() , "text" , 3); }
GameTable.AppendColumn("Time Played", new CellRendererText(), "text", 4); if (SwitchSettings.SwitchConfig.GuiColumns[4]) { GameTable.AppendColumn("Time Played", new CellRendererText() , "text" , 4); }
GameTable.AppendColumn("Last Played", new CellRendererText(), "text", 5); if (SwitchSettings.SwitchConfig.GuiColumns[5]) { GameTable.AppendColumn("Last Played", new CellRendererText() , "text" , 5); }
GameTable.AppendColumn("File Size", new CellRendererText(), "text", 6); if (SwitchSettings.SwitchConfig.GuiColumns[6]) { GameTable.AppendColumn("File Ext" , new CellRendererText() , "text" , 6); }
GameTable.AppendColumn("Path", new CellRendererText(), "text", 7); if (SwitchSettings.SwitchConfig.GuiColumns[7]) { GameTable.AppendColumn("File Size" , new CellRendererText() , "text" , 7); }
_TableStore = new ListStore(typeof(Gdk.Pixbuf), typeof(string), typeof(string), typeof(string), typeof(string), typeof(string), typeof(string), typeof(string)); if (SwitchSettings.SwitchConfig.GuiColumns[8]) { GameTable.AppendColumn("Path" , new CellRendererText() , "text" , 8); }
_TableStore = new ListStore(typeof(Gdk.Pixbuf), typeof(string), typeof(string), typeof(string), typeof(string), typeof(string), typeof(string), typeof(string), typeof(string));
GameTable.Model = _TableStore; GameTable.Model = _TableStore;
UpdateGameTable(); UpdateGameTable();
//Temporary code section end //Temporary code section end
@ -120,16 +121,17 @@ namespace Ryujinx.UI
Nfc.Sensitive = false; Nfc.Sensitive = false;
ReturnMain.Sensitive = false; ReturnMain.Sensitive = false;
GameTable.AppendColumn("Icon" , new CellRendererPixbuf(), "pixbuf", 0); if (SwitchSettings.SwitchConfig.GuiColumns[0]) { GameTable.AppendColumn("Icon" , new CellRendererPixbuf(), "pixbuf", 0); }
GameTable.AppendColumn("Application", new CellRendererText() , "text" , 1); if (SwitchSettings.SwitchConfig.GuiColumns[1]) { GameTable.AppendColumn("Application", new CellRendererText() , "text" , 1); }
GameTable.AppendColumn("Developer" , new CellRendererText() , "text" , 2); if (SwitchSettings.SwitchConfig.GuiColumns[2]) { GameTable.AppendColumn("Developer" , new CellRendererText() , "text" , 2); }
GameTable.AppendColumn("Version" , new CellRendererText() , "text" , 3); if (SwitchSettings.SwitchConfig.GuiColumns[3]) { GameTable.AppendColumn("Version" , new CellRendererText() , "text" , 3); }
GameTable.AppendColumn("Time Played", new CellRendererText() , "text" , 4); if (SwitchSettings.SwitchConfig.GuiColumns[4]) { GameTable.AppendColumn("Time Played", new CellRendererText() , "text" , 4); }
GameTable.AppendColumn("Last Played", new CellRendererText() , "text" , 5); if (SwitchSettings.SwitchConfig.GuiColumns[5]) { GameTable.AppendColumn("Last Played", new CellRendererText() , "text" , 5); }
GameTable.AppendColumn("File Size" , new CellRendererText() , "text" , 6); if (SwitchSettings.SwitchConfig.GuiColumns[6]) { GameTable.AppendColumn("File Ext" , new CellRendererText() , "text" , 6); }
GameTable.AppendColumn("Path" , new CellRendererText() , "text" , 7); if (SwitchSettings.SwitchConfig.GuiColumns[7]) { GameTable.AppendColumn("File Size" , new CellRendererText() , "text" , 7); }
if (SwitchSettings.SwitchConfig.GuiColumns[8]) { GameTable.AppendColumn("Path" , new CellRendererText() , "text" , 8); }
_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), typeof(string));
GameTable.Model = _TableStore; GameTable.Model = _TableStore;
UpdateGameTable(); UpdateGameTable();
@ -143,7 +145,7 @@ namespace Ryujinx.UI
foreach (ApplicationLibrary.ApplicationData AppData in ApplicationLibrary.ApplicationLibraryData) foreach (ApplicationLibrary.ApplicationData AppData in ApplicationLibrary.ApplicationLibraryData)
{ {
_TableStore.AppendValues(new Gdk.Pixbuf(AppData.Icon, 75, 75), $"{AppData.TitleName}\n{AppData.TitleId.ToUpper()}", AppData.Developer, AppData.Version, AppData.TimePlayed, AppData.LastPlayed, AppData.FileSize, AppData.Path); _TableStore.AppendValues(new Gdk.Pixbuf(AppData.Icon, 75, 75), $"{AppData.TitleName}\n{AppData.TitleId.ToUpper()}", AppData.Developer, AppData.Version, AppData.TimePlayed, AppData.LastPlayed, AppData.FileExt, AppData.FileSize, AppData.Path);
} }
} }
@ -180,7 +182,7 @@ namespace Ryujinx.UI
{ {
if (_GameLoaded) if (_GameLoaded)
{ {
MessageDialog eRrOr = new MessageDialog(null, DialogFlags.Modal, MessageType.Error, ButtonsType.Ok, "A game has already been loaded, please unload the game and try again"); MessageDialog eRrOr = new MessageDialog(null, DialogFlags.Modal, MessageType.Error, ButtonsType.Ok, "A game has already been loaded. Please close the emulator and try again");
eRrOr.SetSizeRequest(100, 20); eRrOr.SetSizeRequest(100, 20);
eRrOr.Title = "Ryujinx - Error"; eRrOr.Title = "Ryujinx - Error";
eRrOr.Icon = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.Ui.assets.ryujinxIcon.png"); eRrOr.Icon = new Gdk.Pixbuf(Assembly.GetExecutingAssembly(), "Ryujinx.Ui.assets.ryujinxIcon.png");
@ -352,7 +354,7 @@ namespace Ryujinx.UI
private void Row_Activated(object o, RowActivatedArgs args) private void Row_Activated(object o, RowActivatedArgs args)
{ {
_TableStore.GetIter(out TreeIter treeiter, new TreePath(args.Path.ToString())); _TableStore.GetIter(out TreeIter treeiter, new TreePath(args.Path.ToString()));
string path = (string)_TableStore.GetValue(treeiter, 7); string path = (string)_TableStore.GetValue(treeiter, 8);
LoadApplication(path); LoadApplication(path);

View file

@ -23,6 +23,15 @@ namespace Ryujinx.UI
#pragma warning disable 649 #pragma warning disable 649
[GUI] Window SettingsWin; [GUI] Window SettingsWin;
[GUI] CheckButton IconToggle;
[GUI] CheckButton TitleToggle;
[GUI] CheckButton DeveloperToggle;
[GUI] CheckButton VersionToggle;
[GUI] CheckButton TimePlayedToggle;
[GUI] CheckButton LastPlayedToggle;
[GUI] CheckButton FileExtToggle;
[GUI] CheckButton FileSizeToggle;
[GUI] CheckButton PathToggle;
[GUI] CheckButton ErrorLogToggle; [GUI] CheckButton ErrorLogToggle;
[GUI] CheckButton WarningLogToggle; [GUI] CheckButton WarningLogToggle;
[GUI] CheckButton InfoLogToggle; [GUI] CheckButton InfoLogToggle;
@ -120,6 +129,16 @@ namespace Ryujinx.UI
ZR1.Clicked += (o, args) => Button_Pressed(o, args, ZR1); ZR1.Clicked += (o, args) => Button_Pressed(o, args, ZR1);
//Setup Currents //Setup Currents
if (SwitchConfig.GuiColumns[0]) { IconToggle.Click(); }
if (SwitchConfig.GuiColumns[1]) { TitleToggle.Click(); }
if (SwitchConfig.GuiColumns[2]) { DeveloperToggle.Click(); }
if (SwitchConfig.GuiColumns[3]) { VersionToggle.Click(); }
if (SwitchConfig.GuiColumns[4]) { TimePlayedToggle.Click(); }
if (SwitchConfig.GuiColumns[5]) { LastPlayedToggle.Click(); }
if (SwitchConfig.GuiColumns[6]) { FileExtToggle.Click(); }
if (SwitchConfig.GuiColumns[7]) { FileSizeToggle.Click(); }
if (SwitchConfig.GuiColumns[8]) { PathToggle.Click(); }
if (SwitchConfig.EnableFileLog) { FileLogToggle.Click(); }
if (SwitchConfig.LoggingEnableError) { ErrorLogToggle.Click(); } if (SwitchConfig.LoggingEnableError) { ErrorLogToggle.Click(); }
if (SwitchConfig.LoggingEnableWarn) { WarningLogToggle.Click(); } if (SwitchConfig.LoggingEnableWarn) { WarningLogToggle.Click(); }
if (SwitchConfig.LoggingEnableInfo) { InfoLogToggle.Click(); } if (SwitchConfig.LoggingEnableInfo) { InfoLogToggle.Click(); }
@ -127,7 +146,7 @@ namespace Ryujinx.UI
if (SwitchConfig.LoggingEnableDebug) { DebugLogToggle.Click(); } if (SwitchConfig.LoggingEnableDebug) { DebugLogToggle.Click(); }
if (SwitchConfig.EnableFileLog) { FileLogToggle.Click(); } if (SwitchConfig.EnableFileLog) { FileLogToggle.Click(); }
if (SwitchConfig.DockedMode) { DockedModeToggle.Click(); } if (SwitchConfig.DockedMode) { DockedModeToggle.Click(); }
if (SwitchConfig.EnableDiscordIntergration) { DiscordToggle.Click(); } if (SwitchConfig.EnableDiscordIntegration) { DiscordToggle.Click(); }
if (SwitchConfig.EnableVsync) { VSyncToggle.Click(); } if (SwitchConfig.EnableVsync) { VSyncToggle.Click(); }
if (SwitchConfig.EnableMulticoreScheduling) { MultiSchedToggle.Click(); } if (SwitchConfig.EnableMulticoreScheduling) { MultiSchedToggle.Click(); }
if (SwitchConfig.EnableFsIntegrityChecks) { FSICToggle.Click(); } if (SwitchConfig.EnableFsIntegrityChecks) { FSICToggle.Click(); }
@ -272,19 +291,25 @@ namespace Ryujinx.UI
_GameDirsBoxStore.IterNext(ref iter); _GameDirsBoxStore.IterNext(ref iter);
} }
if (IconToggle.Active) { SwitchConfig.GuiColumns[0] = true; }
if (TitleToggle.Active) { SwitchConfig.GuiColumns[1] = true; }
if (DeveloperToggle.Active) { SwitchConfig.GuiColumns[2] = true; }
if (VersionToggle.Active) { SwitchConfig.GuiColumns[3] = true; }
if (TimePlayedToggle.Active) { SwitchConfig.GuiColumns[4] = true; }
if (LastPlayedToggle.Active) { SwitchConfig.GuiColumns[5] = true; }
if (FileExtToggle.Active) { SwitchConfig.GuiColumns[6] = true; }
if (FileSizeToggle.Active) { SwitchConfig.GuiColumns[7] = true; }
if (PathToggle.Active) { SwitchConfig.GuiColumns[8] = true; }
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; }
if (StubLogToggle.Active) { SwitchConfig.LoggingEnableStub = true; } if (StubLogToggle.Active) { SwitchConfig.LoggingEnableStub = true; }
if (DebugLogToggle.Active) { SwitchConfig.LoggingEnableDebug = true; } if (DebugLogToggle.Active) { SwitchConfig.LoggingEnableDebug = true; }
<<<<<<< HEAD
=======
if (GuestLogToggle.Active) { SwitchConfig.LoggingEnableGuest = true; } if (GuestLogToggle.Active) { SwitchConfig.LoggingEnableGuest = true; }
if (FsAccessLogToggle.Active) { SwitchConfig.LoggingEnableFsAccessLog = true; } if (FsAccessLogToggle.Active) { SwitchConfig.LoggingEnableFsAccessLog = true; }
>>>>>>> added spin button for new option and tooltips to settings
if (FileLogToggle.Active) { SwitchConfig.EnableFileLog = true; } if (FileLogToggle.Active) { SwitchConfig.EnableFileLog = true; }
if (DockedModeToggle.Active) { SwitchConfig.DockedMode = true; } if (DockedModeToggle.Active) { SwitchConfig.DockedMode = true; }
if (DiscordToggle.Active) { SwitchConfig.EnableDiscordIntergration = true; } if (DiscordToggle.Active) { SwitchConfig.EnableDiscordIntegration = true; }
if (VSyncToggle.Active) { SwitchConfig.EnableVsync = true; } if (VSyncToggle.Active) { SwitchConfig.EnableVsync = true; }
if (MultiSchedToggle.Active) { SwitchConfig.EnableMulticoreScheduling = true; } if (MultiSchedToggle.Active) { SwitchConfig.EnableMulticoreScheduling = true; }
if (FSICToggle.Active) { SwitchConfig.EnableFsIntegrityChecks = true; } if (FSICToggle.Active) { SwitchConfig.EnableFsIntegrityChecks = true; }
@ -293,6 +318,15 @@ namespace Ryujinx.UI
if (DirectKeyboardAccess.Active) { SwitchConfig.EnableKeyboard = true; } if (DirectKeyboardAccess.Active) { SwitchConfig.EnableKeyboard = true; }
if (CustThemeToggle.Active) { SwitchConfig.EnableCustomTheme = true; } if (CustThemeToggle.Active) { SwitchConfig.EnableCustomTheme = true; }
if (IconToggle.Active == false) { SwitchConfig.GuiColumns[0] = false; }
if (TitleToggle.Active == false) { SwitchConfig.GuiColumns[1] = false; }
if (DeveloperToggle.Active == false) { SwitchConfig.GuiColumns[2] = false; }
if (VersionToggle.Active == false) { SwitchConfig.GuiColumns[3] = false; }
if (TimePlayedToggle.Active == false) { SwitchConfig.GuiColumns[4] = false; }
if (LastPlayedToggle.Active == false) { SwitchConfig.GuiColumns[5] = false; }
if (FileExtToggle.Active == false) { SwitchConfig.GuiColumns[6] = false; }
if (FileSizeToggle.Active == false) { SwitchConfig.GuiColumns[7] = false; }
if (PathToggle.Active == false) { SwitchConfig.GuiColumns[8] = false; }
if (ErrorLogToggle.Active == false) { SwitchConfig.LoggingEnableError = false; } if (ErrorLogToggle.Active == false) { SwitchConfig.LoggingEnableError = false; }
if (WarningLogToggle.Active == false) { SwitchConfig.LoggingEnableWarn = false; } if (WarningLogToggle.Active == false) { SwitchConfig.LoggingEnableWarn = false; }
if (InfoLogToggle.Active == false) { SwitchConfig.LoggingEnableInfo = false; } if (InfoLogToggle.Active == false) { SwitchConfig.LoggingEnableInfo = false; }
@ -300,7 +334,7 @@ namespace Ryujinx.UI
if (DebugLogToggle.Active == false) { SwitchConfig.LoggingEnableDebug = false; } if (DebugLogToggle.Active == false) { SwitchConfig.LoggingEnableDebug = false; }
if (FileLogToggle.Active == false) { SwitchConfig.EnableFileLog = false; } if (FileLogToggle.Active == false) { SwitchConfig.EnableFileLog = false; }
if (DockedModeToggle.Active == false) { SwitchConfig.DockedMode = false; } if (DockedModeToggle.Active == false) { SwitchConfig.DockedMode = false; }
if (DiscordToggle.Active == false) { SwitchConfig.EnableDiscordIntergration = false; } if (DiscordToggle.Active == false) { SwitchConfig.EnableDiscordIntegration = false; }
if (VSyncToggle.Active == false) { SwitchConfig.EnableVsync = false; } if (VSyncToggle.Active == false) { SwitchConfig.EnableVsync = false; }
if (MultiSchedToggle.Active == false) { SwitchConfig.EnableMulticoreScheduling = false; } if (MultiSchedToggle.Active == false) { SwitchConfig.EnableMulticoreScheduling = false; }
if (FSICToggle.Active == false) { SwitchConfig.EnableFsIntegrityChecks = false; } if (FSICToggle.Active == false) { SwitchConfig.EnableFsIntegrityChecks = false; }
@ -342,7 +376,7 @@ namespace Ryujinx.UI
}; };
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 = (ControllerStatus)Enum.Parse(typeof(ControllerStatus), Controller1Type.ActiveId);
SwitchConfig.CustomThemePath = CustThemeDir.Buffer.Text; SwitchConfig.CustomThemePath = CustThemeDir.Buffer.Text;
SwitchConfig.GameDirs = gameDirs; SwitchConfig.GameDirs = gameDirs;
SwitchConfig.FsGlobalAccessLogMode = (int)FGALMSpinAdjustment.Value; SwitchConfig.FsGlobalAccessLogMode = (int)FGALMSpinAdjustment.Value;

View file

@ -103,24 +103,64 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkBox" id="box1"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="margin_left">10</property>
<property name="margin_right">5</property>
<property name="orientation">vertical</property>
<child> <child>
<object class="GtkBox"> <object class="GtkBox" id="box1">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="margin_left">5</property> <property name="orientation">vertical</property>
<child> <child>
<object class="GtkLabel"> <object class="GtkBox">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Change System Language</property> <child>
<property name="halign">end</property> <object class="GtkLabel">
<property name="label" translatable="yes">System Language:</property> <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Change System Language</property>
<property name="halign">end</property>
<property name="label" translatable="yes">System Language:</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkComboBoxText" id="SystemLanguageSelect">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Change System Language</property>
<property name="margin_left">10</property>
<items>
<item id="AmericanEnglish" translatable="yes">American English</item>
<item id="BritishEnglish" translatable="yes">British English</item>
<item id="CanadianFrench" translatable="yes">Canadian French</item>
<item id="Chinese" translatable="yes">Chinese</item>
<item id="Dutch" translatable="yes">Dutch</item>
<item id="French" translatable="yes">French</item>
<item id="German" translatable="yes">German</item>
<item id="Italian" translatable="yes">Italian</item>
<item id="Japanese" translatable="yes">Japanese</item>
<item id="Korean" translatable="yes">Korean</item>
<item id="LatinAmericanSpanish" translatable="yes">Latin American Spanish</item>
<item id="Portuguese" translatable="yes">Portuguese</item>
<item id="Russian" translatable="yes">Russian</item>
<item id="SimplifiedChinese" translatable="yes">Simplified Chinese</item>
<item id="Spanish" translatable="yes">Spanish</item>
<item id="Taiwanese" translatable="yes">Taiwanese</item>
<item id="TraditionalChinese" translatable="yes">Traditional Chinese</item>
</items>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
@ -129,65 +169,241 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkComboBoxText" id="SystemLanguageSelect"> <object class="GtkCheckButton" id="DiscordToggle">
<property name="label" translatable="yes">Enable Discord Integration</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">True</property>
<property name="tooltip_text" translatable="yes">Change System Language</property> <property name="receives_default">False</property>
<property name="margin_left">5</property> <property name="tooltip_text" translatable="yes">Enables or disables Discord Rich Presense</property>
<items> <property name="halign">start</property>
<item id="AmericanEnglish" translatable="yes">American English</item> <property name="draw_indicator">True</property>
<item id="BritishEnglish" translatable="yes">British English</item>
<item id="CanadianFrench" translatable="yes">Canadian French</item>
<item id="Chinese" translatable="yes">Chinese</item>
<item id="Dutch" translatable="yes">Dutch</item>
<item id="French" translatable="yes">French</item>
<item id="German" translatable="yes">German</item>
<item id="Italian" translatable="yes">Italian</item>
<item id="Japanese" translatable="yes">Japanese</item>
<item id="Korean" translatable="yes">Korean</item>
<item id="LatinAmericanSpanish" translatable="yes">Latin American Spanish</item>
<item id="Portuguese" translatable="yes">Portuguese</item>
<item id="Russian" translatable="yes">Russian</item>
<item id="SimplifiedChinese" translatable="yes">Simplified Chinese</item>
<item id="Spanish" translatable="yes">Spanish</item>
<item id="Taiwanese" translatable="yes">Taiwanese</item>
<item id="TraditionalChinese" translatable="yes">Traditional Chinese</item>
</items>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="padding">5</property>
<property name="position">1</property> <property name="position">1</property>
</packing> </packing>
</child> </child>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">0</property> <property name="position">0</property>
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkCheckButton" id="DiscordToggle"> <object class="GtkBox">
<property name="label" translatable="yes">Enable Discord Integration</property>
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">True</property> <property name="can_focus">False</property>
<property name="receives_default">False</property> <child>
<property name="tooltip_text" translatable="yes">Enables or disables Discord Rich Presense</property> <object class="GtkBox">
<property name="halign">start</property> <property name="visible">True</property>
<property name="margin_left">5</property> <property name="can_focus">False</property>
<property name="draw_indicator">True</property> <property name="orientation">vertical</property>
<child>
<object class="GtkCheckButton" id="IconToggle">
<property name="label" translatable="yes">Enable Icon Column</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="tooltip_text" translatable="yes">Enable or Disable aggressive CPU optimizations</property>
<property name="halign">start</property>
<property name="margin_top">5</property>
<property name="margin_bottom">5</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="DeveloperToggle">
<property name="label" translatable="yes">Enable Developer Column</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="tooltip_text" translatable="yes">Enable or Disable aggressive CPU optimizations</property>
<property name="halign">start</property>
<property name="margin_top">5</property>
<property name="margin_bottom">5</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="TimePlayedToggle">
<property name="label" translatable="yes">Enable Time Played Column</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="tooltip_text" translatable="yes">Enable or Disable aggressive CPU optimizations</property>
<property name="halign">start</property>
<property name="margin_top">5</property>
<property name="margin_bottom">5</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkCheckButton" id="TitleToggle">
<property name="label" translatable="yes">Enable Title Name/ID Column</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="tooltip_text" translatable="yes">Enable or Disable aggressive CPU optimizations</property>
<property name="halign">start</property>
<property name="margin_top">5</property>
<property name="margin_bottom">5</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="VersionToggle">
<property name="label" translatable="yes">Enable Version Column</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="tooltip_text" translatable="yes">Enable or Disable aggressive CPU optimizations</property>
<property name="halign">start</property>
<property name="margin_top">5</property>
<property name="margin_bottom">5</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="LastPlayedToggle">
<property name="label" translatable="yes">Enable Last Played Column</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="tooltip_text" translatable="yes">Enable or Disable aggressive CPU optimizations</property>
<property name="halign">start</property>
<property name="margin_top">5</property>
<property name="margin_bottom">5</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkCheckButton" id="FileExtToggle">
<property name="label" translatable="yes">Enable File Ext Column</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="tooltip_text" translatable="yes">Enable or Disable aggressive CPU optimizations</property>
<property name="halign">start</property>
<property name="margin_top">5</property>
<property name="margin_bottom">5</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="FileSizeToggle">
<property name="label" translatable="yes">Enable File Size Column</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="tooltip_text" translatable="yes">Enable or Disable aggressive CPU optimizations</property>
<property name="halign">start</property>
<property name="margin_top">5</property>
<property name="margin_bottom">5</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="PathToggle">
<property name="label" translatable="yes">Enable Path Column</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="tooltip_text" translatable="yes">Enable or Disable aggressive CPU optimizations</property>
<property name="halign">start</property>
<property name="margin_top">5</property>
<property name="margin_bottom">5</property>
<property name="draw_indicator">True</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="padding">5</property>
<property name="position">1</property> <property name="position">1</property>
</packing> </packing>
</child> </child>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">True</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">1</property> <property name="position">1</property>
</packing> </packing>

View file

@ -501,6 +501,13 @@
"description": "A list of directories containing games to be used to load games into the games list", "description": "A list of directories containing games to be used to load games into the games list",
"default": [] "default": []
}, },
"gui_columns": {
"$id": "#/properties/gui_columns",
"type": "bool list",
"title": "Used to toggle columns in the GUI",
"description": "Used to toggle columns in the GUI",
"default": [ true, true, true, true, true, true, true, true, true ]
},
"enable_custom_theme": { "enable_custom_theme": {
"$id": "#/properties/enable_custom_theme", "$id": "#/properties/enable_custom_theme",
"type": "boolean", "type": "boolean",