Make keybinds UI-accessible

This commit is contained in:
Matt Nadareski
2021-06-30 17:22:37 -07:00
parent 7c940e1576
commit 565b289a45
2 changed files with 222 additions and 36 deletions

View File

@@ -1,40 +1,140 @@
<Window xmlns="https://github.com/avaloniaui" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" d:DesignWidth="800"
d:DesignHeight="450" x:Class="RedBookPlayer.GUI.SettingsWindow" Title="Settings" Width="450" Height="600">
<DockPanel Margin="16">
<TextBlock DockPanel.Dock="Top" Margin="0,0,0,4">Themes</TextBlock>
<StackPanel DockPanel.Dock="Bottom">
<WrapPanel Margin="0,0,0,16">
<CheckBox IsChecked="{Binding AutoPlay}" Margin="0,0,8,0" />
<TextBlock VerticalAlignment="Center">Auto-play CD on load</TextBlock>
</WrapPanel>
<WrapPanel Margin="0,0,0,16">
<CheckBox IsChecked="{Binding IndexButtonChangeTrack}" Margin="0,0,8,0" />
<TextBlock VerticalAlignment="Center">Index navigation can change track</TextBlock>
</WrapPanel>
<WrapPanel Margin="0,0,0,16">
<CheckBox IsChecked="{Binding AllowSkipHiddenTrack}" Margin="0,0,8,0" />
<TextBlock VerticalAlignment="Center">Treat index 0 of track 1 as track 0 (hidden track)</TextBlock>
</WrapPanel>
<WrapPanel Margin="0,0,0,16">
<CheckBox IsChecked="{Binding PlayDataTracks}" Margin="0,0,8,0"/>
<TextBlock VerticalAlignment="Center">Play data tracks like old, non-compliant players</TextBlock>
</WrapPanel>
<WrapPanel Margin="0,0,0,16">
<CheckBox IsChecked="{Binding GenerateMissingTOC}" Margin="0,0,8,0"/>
<TextBlock VerticalAlignment="Center">Generate a TOC if the disc is missing one</TextBlock>
</WrapPanel>
<DockPanel Margin="0,0,0,16">
<TextBlock VerticalAlignment="Center" Margin="0,0,8,0" DockPanel.Dock="Left">Volume</TextBlock>
<TextBlock VerticalAlignment="Center" DockPanel.Dock="Right" Text="%" />
<TextBlock VerticalAlignment="Center" Margin="8,0,0,0" DockPanel.Dock="Right" Text="{Binding Volume}"
Name="VolumeLabel" />
<Slider Minimum="0" Maximum="100" SmallChange="1" LargeChange="10" Value="{Binding Volume}"
Name="VolumeSlider" />
</DockPanel>
<Button Name="ApplyButton">Apply</Button>
</StackPanel>
<ListBox Name="ThemeList" SelectionMode="Single" Margin="0,0,0,16" />
</DockPanel>
d:DesignHeight="450" x:Class="RedBookPlayer.GUI.SettingsWindow" Title="Settings" SizeToContent="WidthAndHeight">
<StackPanel>
<TabControl>
<TabItem Header="UI Settings">
<DockPanel Margin="16">
<TextBlock DockPanel.Dock="Top" Margin="0,0,0,4">Themes</TextBlock>
<StackPanel DockPanel.Dock="Bottom">
<WrapPanel Margin="0,0,0,16">
<CheckBox IsChecked="{Binding AutoPlay}" Margin="0,0,8,0" />
<TextBlock VerticalAlignment="Center">Auto-play CD on load</TextBlock>
</WrapPanel>
<WrapPanel Margin="0,0,0,16">
<CheckBox IsChecked="{Binding IndexButtonChangeTrack}" Margin="0,0,8,0" />
<TextBlock VerticalAlignment="Center">Index navigation can change track</TextBlock>
</WrapPanel>
<WrapPanel Margin="0,0,0,16">
<CheckBox IsChecked="{Binding AllowSkipHiddenTrack}" Margin="0,0,8,0" />
<TextBlock VerticalAlignment="Center">Treat index 0 of track 1 as track 0 (hidden track)</TextBlock>
</WrapPanel>
<WrapPanel Margin="0,0,0,16">
<CheckBox IsChecked="{Binding PlayDataTracks}" Margin="0,0,8,0"/>
<TextBlock VerticalAlignment="Center">Play data tracks like old, non-compliant players</TextBlock>
</WrapPanel>
<WrapPanel Margin="0,0,0,16">
<CheckBox IsChecked="{Binding GenerateMissingTOC}" Margin="0,0,8,0"/>
<TextBlock VerticalAlignment="Center">Generate a TOC if the disc is missing one</TextBlock>
</WrapPanel>
<DockPanel Margin="0,0,0,16">
<TextBlock VerticalAlignment="Center" Margin="0,0,8,0" DockPanel.Dock="Left">Volume</TextBlock>
<TextBlock VerticalAlignment="Center" DockPanel.Dock="Right" Text="%" />
<TextBlock VerticalAlignment="Center" Margin="8,0,0,0" DockPanel.Dock="Right" Text="{Binding Volume}"
Name="VolumeLabel" />
<Slider Minimum="0" Maximum="100" SmallChange="1" LargeChange="10" Value="{Binding Volume}"
Name="VolumeSlider" />
</DockPanel>
</StackPanel>
<ListBox Name="ThemeList" SelectionMode="Single" Margin="0,0,0,16" />
</DockPanel>
</TabItem>
<TabItem Header="Keyboard Bindings">
<StackPanel Margin="16">
<Grid Margin="0,0,0,16">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Width="120">Load Image</TextBlock>
<ComboBox Grid.Column="1" HorizontalAlignment="Right" Name="LoadImageKeyBind" Margin="8,0,0,0" Width="120"/>
</Grid>
<Grid Margin="0,0,0,16">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Width="120">Toggle Play/Pause</TextBlock>
<ComboBox Grid.Column="1" HorizontalAlignment="Right" Name="TogglePlaybackKeyBind" Margin="8,0,0,0" Width="120"/>
</Grid>
<Grid Margin="0,0,0,16">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Width="120">Stop Playback</TextBlock>
<ComboBox Grid.Column="1" HorizontalAlignment="Right" Name="StopPlaybackKeyBind" Margin="8,0,0,0" Width="120"/>
</Grid>
<Grid Margin="0,0,0,16">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Width="120">Next Track</TextBlock>
<ComboBox Grid.Column="1" HorizontalAlignment="Right" Name="NextTrackKeyBind" Margin="8,0,0,0" Width="120"/>
</Grid>
<Grid Margin="0,0,0,16">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Width="120">Previous Track</TextBlock>
<ComboBox Grid.Column="1" HorizontalAlignment="Right" Name="PreviousTrackKeyBind" Margin="8,0,0,0" Width="120"/>
</Grid>
<Grid Margin="0,0,0,16">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Width="120">Next Index</TextBlock>
<ComboBox Grid.Column="1" HorizontalAlignment="Right" Name="NextIndexKeyBind" Margin="8,0,0,0" Width="120"/>
</Grid>
<Grid Margin="0,0,0,16">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Width="120">Previous Index</TextBlock>
<ComboBox Grid.Column="1" HorizontalAlignment="Right" Name="PreviousIndexKeyBind" Margin="8,0,0,0" Width="120"/>
</Grid>
<Grid Margin="0,0,0,16">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Width="120">Fast-Forward</TextBlock>
<ComboBox Grid.Column="1" HorizontalAlignment="Right" Name="FastForwardPlaybackKeyBind" Margin="8,0,0,0" Width="120"/>
</Grid>
<Grid Margin="0,0,0,16">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Width="120">Rewind</TextBlock>
<ComboBox Grid.Column="1" HorizontalAlignment="Right" Name="RewindPlaybackKeyBind" Margin="8,0,0,0" Width="120"/>
</Grid>
<Grid Margin="0,0,0,16">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Width="120">Toggle De-Emphasis</TextBlock>
<ComboBox Grid.Column="1" HorizontalAlignment="Right" Name="ToggleDeEmphasisKeyBind" Margin="8,0,0,0" Width="120"/>
</Grid>
</StackPanel>
</TabItem>
</TabControl>
<Button Name="ApplyButton">Apply</Button>
</StackPanel>
</Window>

View File

@@ -1,6 +1,8 @@
using System;
using System.Collections.Generic;
using System.IO;
using Avalonia.Controls;
using Avalonia.Input;
using Avalonia.Interactivity;
using Avalonia.Markup.Xaml;
@@ -36,6 +38,7 @@ namespace RedBookPlayer.GUI
MainWindow.ApplyTheme(_selectedTheme);
}
SaveKeyboardList();
_settings.Save();
}
@@ -46,6 +49,7 @@ namespace RedBookPlayer.GUI
AvaloniaXamlLoader.Load(this);
PopulateThemes();
PopulateKeyboardList();
this.FindControl<Button>("ApplyButton").Click += ApplySettings;
this.FindControl<Slider>("VolumeSlider").PropertyChanged += (s, e) => UpdateView();
@@ -81,5 +85,87 @@ namespace RedBookPlayer.GUI
_themeList.Items = items;
}
/// <summary>
/// Populate all of the keyboard bindings
/// </summary>
private void PopulateKeyboardList()
{
// Access all of the combo boxes
ComboBox LoadImageKeyBind = this.FindControl<ComboBox>("LoadImageKeyBind");
ComboBox TogglePlaybackKeyBind = this.FindControl<ComboBox>("TogglePlaybackKeyBind");
ComboBox StopPlaybackKeyBind = this.FindControl<ComboBox>("StopPlaybackKeyBind");
ComboBox NextTrackKeyBind = this.FindControl<ComboBox>("NextTrackKeyBind");
ComboBox PreviousTrackKeyBind = this.FindControl<ComboBox>("PreviousTrackKeyBind");
ComboBox NextIndexKeyBind = this.FindControl<ComboBox>("NextIndexKeyBind");
ComboBox PreviousIndexKeyBind = this.FindControl<ComboBox>("PreviousIndexKeyBind");
ComboBox FastForwardPlaybackKeyBind = this.FindControl<ComboBox>("FastForwardPlaybackKeyBind");
ComboBox RewindPlaybackKeyBind = this.FindControl<ComboBox>("RewindPlaybackKeyBind");
ComboBox ToggleDeEmphasisKeyBind = this.FindControl<ComboBox>("ToggleDeEmphasisKeyBind");
// Assign the list of values to all of them
Array keyboardList = GenerateKeyboardList();
LoadImageKeyBind.Items = keyboardList;
TogglePlaybackKeyBind.Items = keyboardList;
StopPlaybackKeyBind.Items = keyboardList;
NextTrackKeyBind.Items = keyboardList;
PreviousTrackKeyBind.Items = keyboardList;
NextIndexKeyBind.Items = keyboardList;
PreviousIndexKeyBind.Items = keyboardList;
FastForwardPlaybackKeyBind.Items = keyboardList;
RewindPlaybackKeyBind.Items = keyboardList;
ToggleDeEmphasisKeyBind.Items = keyboardList;
// Set all of the currently selected items
LoadImageKeyBind.SelectedItem = _settings.LoadImageKey;
TogglePlaybackKeyBind.SelectedItem = _settings.TogglePlaybackKey;
StopPlaybackKeyBind.SelectedItem = _settings.StopPlaybackKey;
NextTrackKeyBind.SelectedItem = _settings.NextTrackKey;
PreviousTrackKeyBind.SelectedItem = _settings.PreviousTrackKey;
NextIndexKeyBind.SelectedItem = _settings.NextIndexKey;
PreviousIndexKeyBind.SelectedItem = _settings.PreviousIndexKey;
FastForwardPlaybackKeyBind.SelectedItem = _settings.FastForwardPlaybackKey;
RewindPlaybackKeyBind.SelectedItem = _settings.RewindPlaybackKey;
ToggleDeEmphasisKeyBind.SelectedItem = _settings.ToggleDeEmphasisKey;
}
/// <summary>
/// Save back all values from keyboard bindings
/// </summary>
private void SaveKeyboardList()
{
// Access all of the combo boxes
ComboBox LoadImageKeyBind = this.FindControl<ComboBox>("LoadImageKeyBind");
ComboBox TogglePlaybackKeyBind = this.FindControl<ComboBox>("TogglePlaybackKeyBind");
ComboBox StopPlaybackKeyBind = this.FindControl<ComboBox>("StopPlaybackKeyBind");
ComboBox NextTrackKeyBind = this.FindControl<ComboBox>("NextTrackKeyBind");
ComboBox PreviousTrackKeyBind = this.FindControl<ComboBox>("PreviousTrackKeyBind");
ComboBox NextIndexKeyBind = this.FindControl<ComboBox>("NextIndexKeyBind");
ComboBox PreviousIndexKeyBind = this.FindControl<ComboBox>("PreviousIndexKeyBind");
ComboBox FastForwardPlaybackKeyBind = this.FindControl<ComboBox>("FastForwardPlaybackKeyBind");
ComboBox RewindPlaybackKeyBind = this.FindControl<ComboBox>("RewindPlaybackKeyBind");
ComboBox ToggleDeEmphasisKeyBind = this.FindControl<ComboBox>("ToggleDeEmphasisKeyBind");
// Set all of the currently selected items
_settings.LoadImageKey = (Key)LoadImageKeyBind.SelectedItem;
_settings.TogglePlaybackKey = (Key)TogglePlaybackKeyBind.SelectedItem;
_settings.StopPlaybackKey = (Key)StopPlaybackKeyBind.SelectedItem;
_settings.NextTrackKey = (Key)NextTrackKeyBind.SelectedItem;
_settings.PreviousTrackKey = (Key)PreviousTrackKeyBind.SelectedItem;
_settings.NextIndexKey = (Key)NextIndexKeyBind.SelectedItem;
_settings.PreviousIndexKey = (Key)PreviousIndexKeyBind.SelectedItem;
_settings.FastForwardPlaybackKey = (Key)FastForwardPlaybackKeyBind.SelectedItem;
_settings.RewindPlaybackKey = (Key)RewindPlaybackKeyBind.SelectedItem;
_settings.ToggleDeEmphasisKey = (Key)ToggleDeEmphasisKeyBind.SelectedItem;
}
/// <summary>
/// Generate a list of keyboard keys for mapping
/// </summary>
/// <returns></returns>
private Array GenerateKeyboardList()
{
return Enum.GetValues(typeof(Key));
}
}
}