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
}
}