using System.Collections.Generic; using System.ComponentModel; using MPF.Frontend.ComboBoxItems; using RedumperDriveType = MPF.ExecutionContexts.Redumper.DriveType; using RedumperReadMethod = MPF.ExecutionContexts.Redumper.ReadMethod; using RedumperSectorOrder = MPF.ExecutionContexts.Redumper.SectorOrder; namespace MPF.Frontend.ViewModels { /// /// Constructor /// public class OptionsViewModel : INotifyPropertyChanged { #region Fields /// /// Title for the window /// public string? Title { get => _title; set { _title = value; TriggerPropertyChanged(nameof(Title)); } } private string? _title; /// /// Current set of options /// public Options Options { get; } /// /// Flag for if settings were saved or not /// public bool SavedSettings { get; set; } /// public event PropertyChangedEventHandler? PropertyChanged; #endregion #region Lists /// /// List of available internal programs /// public static List> InternalPrograms => PopulateInternalPrograms(); /// /// Current list of supported Redumper read methods /// public static List> RedumperReadMethods => PopulateRedumperReadMethods(); /// /// Current list of supported Redumper sector orders /// public static List> RedumperSectorOrders => PopulateRedumperSectorOrders(); /// /// Current list of supported Redumper drive types /// public static List> RedumperDriveTypes => PopulateRedumperDriveTypes(); /// /// Current list of supported system profiles /// public static List Systems => RedumpSystemComboBoxItem.GenerateElements(); #endregion /// /// Constructor for pure view model /// public OptionsViewModel() { Options = new Options(); } /// /// Constructor for in-code /// public OptionsViewModel(Options baseOptions) { Options = new Options(baseOptions); } #region Population /// /// Get a complete list of supported internal programs /// private static List> PopulateInternalPrograms() { var internalPrograms = new List { InternalProgram.Redumper, InternalProgram.DiscImageCreator, InternalProgram.Aaru }; return internalPrograms.ConvertAll(ip => new Element(ip)); } /// /// Get a complete list of supported redumper drive read methods /// private static List> PopulateRedumperReadMethods() { var readMethods = new List { RedumperReadMethod.NONE, RedumperReadMethod.D8, RedumperReadMethod.BE }; return readMethods.ConvertAll(rm => new Element(rm)); } /// /// Get a complete list of supported redumper drive sector orders /// private static List> PopulateRedumperSectorOrders() { var sectorOrders = new List { RedumperSectorOrder.NONE, RedumperSectorOrder.DATA_C2_SUB, RedumperSectorOrder.DATA_SUB_C2, RedumperSectorOrder.DATA_SUB, RedumperSectorOrder.DATA_C2 }; return sectorOrders.ConvertAll(so => new Element(so)); } /// /// Get a complete list of supported redumper drive types /// private static List> PopulateRedumperDriveTypes() { var driveTypes = new List { RedumperDriveType.NONE, RedumperDriveType.GENERIC, RedumperDriveType.PLEXTOR, RedumperDriveType.LG_ASU8A, RedumperDriveType.LG_ASU8B, RedumperDriveType.LG_ASU8C, RedumperDriveType.LG_ASU3, RedumperDriveType.LG_ASU2 }; return driveTypes.ConvertAll(dt => new Element(dt)); } #endregion #region UI Commands /// /// Get the human-readable result for a Redump login result /// public static string GetRedumpLoginResult(bool? success) { return success switch { true => "Redump username and password accepted!", false => "Redump username and password denied!", null => "An error occurred validating your credentials!", }; } /// /// Reset Redumper non-redump options (Read Method, Sector Order, Drive Type) /// public void NonRedumpModeUnChecked() { Options.RedumperReadMethod = RedumperReadMethod.NONE; Options.RedumperSectorOrder = RedumperSectorOrder.NONE; Options.RedumperDriveType = RedumperDriveType.NONE; TriggerPropertyChanged(nameof(Options)); } #endregion #region Property Updates /// /// Trigger a property changed event /// private void TriggerPropertyChanged(string propertyName) { // If the property change event is initialized PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } #endregion } }