Mesen-X/GUI.NET/Config/Configuration.cs
2016-06-06 23:10:03 -04:00

108 lines
2.8 KiB
C#

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;
public string MesenVersion = "0.2.1";
public PreferenceInfo PreferenceInfo;
public AudioInfo AudioInfo;
public VideoInfo VideoInfo;
public InputInfo InputInfo;
public List<string> RecentFiles;
public List<VsConfigInfo> VsConfig;
public List<CheatInfo> Cheats;
public bool ShowOnlyCheatsForCurrentGame;
public NesModel Region;
public ClientConnectionInfo ClientConnectionInfo;
public ServerInfo ServerInfo;
public PlayerProfile Profile;
public DebugInfo DebugInfo;
public Configuration()
{
Profile = new PlayerProfile();
ClientConnectionInfo = new ClientConnectionInfo();
ServerInfo = new ServerInfo();
AudioInfo = new AudioInfo();
VideoInfo = new VideoInfo();
PreferenceInfo = new PreferenceInfo();
RecentFiles = new List<string>();
InputInfo = new InputInfo();
Cheats = new List<CheatInfo>();
VsConfig = new List<VsConfigInfo>();
DebugInfo = new DebugInfo();
}
public void ApplyConfig()
{
InputInfo.ApplyConfig();
VideoInfo.ApplyConfig();
AudioInfo.ApplyConfig();
PreferenceInfo.ApplyConfig();
InteropEmu.SetNesModel(Region);
}
public void InitializeDefaults()
{
InputInfo.InitializeDefaults();
}
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();
}
config.InitializeDefaults();
return config;
}
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);
}
}
}