Mesen-X/GUI.NET/Config/Configuration.cs

112 lines
2.9 KiB
C#
Raw Normal View History

2015-07-03 00:12:02 -04:00
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
namespace Mesen.GUI.Config
{
public class Configuration
{
private const int MaxRecentFiles = 10;
2016-06-12 22:41:41 -04:00
public string MesenVersion = "0.2.2";
2016-01-17 14:21:31 -05:00
public PreferenceInfo PreferenceInfo;
2015-07-17 20:58:57 -04:00
public AudioInfo AudioInfo;
public VideoInfo VideoInfo;
public InputInfo InputInfo;
public EmulationInfo EmulationInfo;
2015-07-03 00:12:02 -04:00
public List<string> RecentFiles;
public List<VsConfigInfo> VsConfig;
2015-07-03 00:12:02 -04:00
public List<CheatInfo> Cheats;
public bool ShowOnlyCheatsForCurrentGame;
2015-07-21 23:05:27 -04:00
public NesModel Region;
2016-01-17 14:21:31 -05:00
public ClientConnectionInfo ClientConnectionInfo;
public ServerInfo ServerInfo;
public PlayerProfile Profile;
public DebugInfo DebugInfo;
2015-07-03 00:12:02 -04:00
public Configuration()
{
Profile = new PlayerProfile();
ClientConnectionInfo = new ClientConnectionInfo();
ServerInfo = new ServerInfo();
2015-07-17 20:58:57 -04:00
AudioInfo = new AudioInfo();
VideoInfo = new VideoInfo();
PreferenceInfo = new PreferenceInfo();
EmulationInfo = new EmulationInfo();
2015-07-03 00:12:02 -04:00
RecentFiles = new List<string>();
InputInfo = new InputInfo();
Cheats = new List<CheatInfo>();
VsConfig = new List<VsConfigInfo>();
DebugInfo = new DebugInfo();
2015-07-03 00:12:02 -04:00
}
2015-07-21 23:05:27 -04:00
public void ApplyConfig()
{
InputInfo.ApplyConfig();
2015-07-21 23:05:27 -04:00
VideoInfo.ApplyConfig();
AudioInfo.ApplyConfig();
PreferenceInfo.ApplyConfig();
EmulationInfo.ApplyConfig();
2015-07-21 23:05:27 -04:00
InteropEmu.SetNesModel(Region);
}
public void InitializeDefaults()
{
InputInfo.InitializeDefaults();
}
2015-07-03 00:12:02 -04:00
public void AddRecentFile(string filepath)
{
if(RecentFiles.Contains(filepath)) {
RecentFiles.Remove(filepath);
}
RecentFiles.Insert(0, filepath);
if(RecentFiles.Count > Configuration.MaxRecentFiles) {
RecentFiles.RemoveAt(Configuration.MaxRecentFiles);
}
ConfigManager.ApplyChanges();
}
public static Configuration Deserialize(string configFile)
{
Configuration config;
try {
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Configuration));
using(TextReader textReader = new StreamReader(configFile)) {
config = (Configuration)xmlSerializer.Deserialize(textReader);
}
} catch {
config = new Configuration();
2015-07-03 00:12:02 -04:00
}
config.InitializeDefaults();
return config;
2015-07-03 00:12:02 -04:00
}
public void Serialize(string configFile)
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Configuration));
using(TextWriter textWriter = new StreamWriter(configFile)) {
xmlSerializer.Serialize(textWriter, this);
}
}
public Configuration Clone()
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Configuration));
StringWriter stringWriter = new StringWriter();
xmlSerializer.Serialize(stringWriter, this);
StringReader stringReader = new StringReader(stringWriter.ToString());
return (Configuration)xmlSerializer.Deserialize(stringReader);
}
}
}