BizHawk/BizHawk.Client.ApiHawk/Classes/BizHawkSystemIdToCoreSystem...

142 lines
5.7 KiB
C#

using System;
using System.Globalization;
using BizHawk.Client.Common;
namespace BizHawk.Client.ApiHawk
{
/// <summary>
/// This class holds a converter for BizHawk SystemId (which is a simple <see cref="string"/>
/// It allows you to convert it to a <see cref="CoreSystem"/> value and vice versa
/// </summary>
/// <remarks>I made it this way just in case one day we need it for WPF (DependencyProperty binding). Just uncomment :IValueConverter implementation
/// I didn't implemented it because of mono compatibility
/// </remarks>
public sealed class BizHawkSystemIdToEnumConverter //:IValueConverter
{
/// <summary>
/// Convert BizHawk SystemId <see cref="string"/> to <see cref="CoreSystem"/> value
/// </summary>
/// <param name="value"><see cref="string"/> you want to convert</param>
/// <param name="targetType">The type of the binding target property</param>
/// <param name="parameter">The converter parameter to use; null in our case</param>
/// <param name="cultureInfo">The culture to use in the converter</param>
/// <returns>A <see cref="CoreSystem"/> that is equivalent to BizHawk SystemId <see cref="string"/></returns>
/// <exception cref="IndexOutOfRangeException">Thrown when SystemId hasn't been found</exception>
public object Convert(object value, Type targetType, object parameter, CultureInfo cultureInfo)
{
return (string) value switch
{
"AppleII" => CoreSystem.AppleII,
"A26" => CoreSystem.Atari2600,
"A78" => CoreSystem.Atari7800,
"Coleco" => CoreSystem.ColecoVision,
"C64" => CoreSystem.Commodore64,
"DGB" => CoreSystem.DualGameBoy,
"GB" => CoreSystem.GameBoy,
"GBA" => CoreSystem.GameBoyAdvance,
"GEN" => CoreSystem.Genesis,
"INTV" => CoreSystem.Intellivision,
"Libretro" => CoreSystem.Libretro,
"Lynx" => CoreSystem.Lynx,
"SMS" => CoreSystem.MasterSystem,
"NES" => CoreSystem.NES,
"N64" => CoreSystem.Nintendo64,
"NULL" => CoreSystem.Null,
"PCE" => CoreSystem.PCEngine,
"PCECD" => CoreSystem.PCEngine,
"SGX" => CoreSystem.PCEngine,
"PSX" => CoreSystem.Playstation,
"SAT" => CoreSystem.Saturn,
"SNES" => CoreSystem.SNES,
"TI83" => CoreSystem.TI83,
"VEC" => CoreSystem.Vectrex,
"WSWAN" => CoreSystem.WonderSwan,
"ZXSpectrum" => CoreSystem.ZXSpectrum,
"AmstradCPC" => CoreSystem.AmstradCPC,
"GGL" => CoreSystem.GGL,
"ChannelF" => CoreSystem.ChannelF,
"GB3x" => CoreSystem.GB3x,
"GB4x" => CoreSystem.GB4x,
"MAME" => CoreSystem.MAME,
"O2" => CoreSystem.Odyssey2,
"MSX" => CoreSystem.MSX,
"VB" => CoreSystem.VirtualBoy,
"NGP" => CoreSystem.NeoGeoPocket,
"DNGP" => CoreSystem.NeoGeoPocket,
"SGB" => CoreSystem.SuperGameBoy,
"UZE" => CoreSystem.UzeBox,
"PCFX" => CoreSystem.PcFx,
_ => throw new IndexOutOfRangeException($"{value} is missing in convert list")
};
}
/// <summary>
/// Convert BizHawk SystemId <see cref="string"/> to <see cref="CoreSystem"/> value
/// </summary>
/// <param name="value"><see cref="string"/> you want to convert</param>
/// <returns>A <see cref="CoreSystem"/> that is equivalent to BizHawk SystemId <see cref="string"/></returns>
/// <exception cref="IndexOutOfRangeException">Thrown when SystemId hasn't been found</exception>
public CoreSystem Convert(string value)
{
return (CoreSystem)Convert(value, null, null, CultureInfo.CurrentCulture);
}
/// <summary>
/// Convert a <see cref="CoreSystem"/> value to BizHawk SystemId <see cref="string"/>
/// </summary>
/// <param name="value"><see cref="CoreSystem"/> you want to convert</param>
/// <param name="targetType">The type of the binding target property</param>
/// <param name="parameter">The converter parameter to use; null in our case</param>
/// <param name="cultureInfo">The culture to use in the converter</param>
/// <returns>A <see cref="string"/> that is used by BizHawk SystemId</returns>
/// <exception cref="IndexOutOfRangeException">Thrown when <see cref="CoreSystem"/> hasn't been found</exception>
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo cultureInfo)
{
return (CoreSystem) value switch
{
CoreSystem.AppleII => "AppleII",
CoreSystem.Atari2600 => "A26",
CoreSystem.Atari7800 => "A78",
CoreSystem.ColecoVision => "Coleco",
CoreSystem.Commodore64 => "C64",
CoreSystem.DualGameBoy => "DGB",
CoreSystem.GameBoy => "GB",
CoreSystem.GameBoyAdvance => "GBA",
CoreSystem.Genesis => "GEN",
CoreSystem.Intellivision => "INTV",
CoreSystem.Libretro => "Libretro",
CoreSystem.Lynx => "Lynx",
CoreSystem.MasterSystem => "SMS",
CoreSystem.NES => "NES",
CoreSystem.Nintendo64 => "N64",
CoreSystem.Null => "NULL",
CoreSystem.PCEngine => "PCE",
CoreSystem.Playstation => "PSX",
CoreSystem.Saturn => "SAT",
CoreSystem.SNES => "SNES",
CoreSystem.TI83 => "TI83",
CoreSystem.WonderSwan => "WSWAN",
CoreSystem.ZXSpectrum => "ZXSpectrum",
CoreSystem.AmstradCPC => "AmstradCPC",
CoreSystem.Odyssey2 => "O2",
_ => throw new IndexOutOfRangeException($"{value} is missing in convert list")
};
}
/// <summary>
/// Convert a <see cref="CoreSystem"/> value to BizHawk SystemId <see cref="string"/>
/// </summary>
/// <param name="value"><see cref="CoreSystem"/> you want to convert</param>
/// <returns>A <see cref="string"/> that is used by BizHawk SystemId</returns>
/// <exception cref="IndexOutOfRangeException">Thrown when <see cref="CoreSystem"/> hasn't been found</exception>
public string ConvertBack(CoreSystem value)
{
return (string)ConvertBack(value, null, null, CultureInfo.CurrentCulture);
}
}
}