Add first-run Options title, fix saving bug

This commit is contained in:
Matt Nadareski
2023-10-18 02:59:41 -04:00
parent e37f12705d
commit e04bdad16c
6 changed files with 92 additions and 17 deletions

View File

@@ -6,6 +6,7 @@
- Create skeleton for first-run
- Show options window on first run
- Fix drive letter issue in UI
- Add first-run Options title, fix saving bug
### 2.7.2 (2023-10-17)

View File

@@ -988,11 +988,17 @@ namespace MPF.Core.UI.ViewModels
public void UpdateOptions(bool savedSettings, Data.Options? newOptions)
#endif
{
// Get which options to save
var optionsToSave = savedSettings ? newOptions : Options;
// Ensure the first run flag is unset
var continuingOptions = new Data.Options(optionsToSave);
continuingOptions.FirstRun = false;
this.Options = continuingOptions;
// If settings were changed, reinitialize the UI
if (savedSettings)
{
this.Options = new Data.Options(newOptions);
InitializeUIValues(removeEventHandlers: true, rescanDrives: true);
}
}
#endregion

View File

@@ -1,4 +1,5 @@
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Threading.Tasks;
using MPF.Core.Data;
@@ -7,10 +8,32 @@ using SabreTools.RedumpLib.Web;
namespace MPF.Core.UI.ViewModels
{
public class OptionsViewModel
public class OptionsViewModel : INotifyPropertyChanged
{
#region Fields
/// <summary>
/// Title for the window
/// </summary>
#if NET48
public string Title
#else
public string? Title
#endif
{
get => _title;
set
{
_title = value;
TriggerPropertyChanged(nameof(Title));
}
}
#if NET48
private string _title;
#else
private string? _title;
#endif
/// <summary>
/// Current set of options
/// </summary>
@@ -21,7 +44,14 @@ namespace MPF.Core.UI.ViewModels
/// </summary>
public bool SavedSettings { get; set; }
#endregion
/// <inheritdoc/>
#if NET48
public event PropertyChangedEventHandler PropertyChanged;
#else
public event PropertyChangedEventHandler? PropertyChanged;
#endif
#endregion
#region Lists
@@ -77,5 +107,18 @@ namespace MPF.Core.UI.ViewModels
}
#endregion
#region Property Updates
/// <summary>
/// Trigger a property changed event
/// </summary>
private void TriggerPropertyChanged(string propertyName)
{
// If the property change event is initialized
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
}

View File

@@ -58,12 +58,7 @@ namespace MPF.UI.Core.Windows
if (MainViewModel.Options.FirstRun)
{
// Show the options window
ShowOptionsWindow();
// Ensure the first run flag is unset
var continuingOptions = new MPF.Core.Data.Options(MainViewModel.Options);
continuingOptions.FirstRun = false;
MainViewModel.Options = continuingOptions;
ShowOptionsWindow("Welcome to MPF, Explore the Options");
}
}
@@ -255,7 +250,11 @@ namespace MPF.UI.Core.Windows
/// <summary>
/// Show the Options window
/// </summary>
public void ShowOptionsWindow()
#if NET48
public void ShowOptionsWindow(string title = null)
#else
public void ShowOptionsWindow(string? title = null)
#endif
{
var optionsWindow = new OptionsWindow(MainViewModel.Options)
{
@@ -263,8 +262,10 @@ namespace MPF.UI.Core.Windows
Owner = this,
ShowActivated = true,
ShowInTaskbar = true,
Title = title ?? "Options",
WindowStartupLocation = WindowStartupLocation.CenterOwner,
};
optionsWindow.Closed += OnOptionsUpdated;
optionsWindow.Show();
}
@@ -287,7 +288,7 @@ namespace MPF.UI.Core.Windows
theme.Apply();
}
#endregion
#endregion
#region Event Handlers
@@ -300,9 +301,17 @@ namespace MPF.UI.Core.Windows
public void OnOptionsUpdated(object? sender, EventArgs e)
#endif
{
bool savedSettings = (sender as OptionsWindow)?.OptionsViewModel?.SavedSettings ?? false;
var options = (sender as OptionsWindow)?.OptionsViewModel?.Options;
// Get the options window
var optionsWindow = (sender as OptionsWindow);
if (optionsWindow?.OptionsViewModel == null)
return;
bool savedSettings = optionsWindow.OptionsViewModel.SavedSettings;
var options = optionsWindow.OptionsViewModel.Options;
MainViewModel.UpdateOptions(savedSettings, options);
// Force the UI to rerender
OnContentRendered(new EventArgs());
}
#region Menu Bar

View File

@@ -6,7 +6,7 @@
xmlns:core="clr-namespace:MPF.UI.Core"
xmlns:coreWindows="clr-namespace:MPF.UI.Core.Windows"
mc:Ignorable="d"
Title="Options" Width="515.132" WindowStyle="None"
Width="515.132" WindowStyle="None"
WindowStartupLocation="CenterOwner" ResizeMode="CanMinimize" SizeToContent="Height"
BorderBrush="DarkGray" BorderThickness="2">
@@ -32,7 +32,12 @@
<Image Grid.Column="0" Source="/Images/Icon.ico" Height="20" Width="20" Margin="1" />
<Label Grid.Column="1" Grid.ColumnSpan="4" HorizontalAlignment="Stretch" HorizontalContentAlignment="Center" MouseDown="TitleMouseDown">
<Label.Content>
<TextBlock TextAlignment="Center"><Bold>Options</Bold></TextBlock>
<TextBlock>
<TextBlock.Inlines>
<Run FontWeight="Bold" Text="{Binding Title, Mode=OneWay}"/>
</TextBlock.Inlines>
</TextBlock>
<!-- <TextBlock TextAlignment="Center"><Bold>Options</Bold></TextBlock> -->
</Label.Content>
<Label.ContextMenu>
<ContextMenu Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}"

View File

@@ -41,6 +41,17 @@ namespace MPF.UI.Core.Windows
RedumpLoginTestButton.Click += OnRedumpTestClick;
}
/// <summary>
/// Handler for OptionsWindow OnContentRendered event
/// </summary>
protected override void OnContentRendered(EventArgs e)
{
base.OnContentRendered(e);
// Set the window title
OptionsViewModel.Title = this.Title;
}
#region UI Commands
/// <summary>