using System.Collections.Generic; using System.ComponentModel; using MPF.Frontend.ComboBoxItems; using LogCompression = MPF.Processors.LogCompression; 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(); /// /// List of available interface languages /// public static List> InterfaceLanguages => Element.GenerateElements(); /// /// List of available log compression methods /// public static List> LogCompressions => Element.GenerateElements(); /// /// Current list of supported Redumper read methods /// public static List> RedumperReadMethods => Element.GenerateElements(); /// /// Current list of supported Redumper sector orders /// public static List> RedumperSectorOrders => Element.GenerateElements(); /// /// Current list of supported Redumper drive types /// public static List> RedumperDriveTypes => Element.GenerateElements(); /// /// 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, // InternalProgram.Dreamdump, }; return internalPrograms.ConvertAll(ip => new Element(ip)); } #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 } }