HeadMeld 0.0.0.1
- Working MVVM implementation - Refactored code
This commit is contained in:
@@ -7,12 +7,12 @@
|
|||||||
</ApplicationDefinition>
|
</ApplicationDefinition>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Update="MainWindow.xaml.cs">
|
<Compile Update="Views\MainWindowView.xaml.cs">
|
||||||
<SubType>Code</SubType>
|
<SubType>Code</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Page Update="MainWindow.xaml">
|
<Page Update="Views\MainWindowView.xaml">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</Page>
|
</Page>
|
||||||
<Page Update="Startup.xaml">
|
<Page Update="Startup.xaml">
|
||||||
|
|||||||
@@ -1,22 +0,0 @@
|
|||||||
<Window x:Class="HeadMeld.MainWindow"
|
|
||||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
|
||||||
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"
|
|
||||||
xmlns:ui="http://schemas.modernwpf.com/2019"
|
|
||||||
ui:WindowHelper.UseModernWindowStyle="True"
|
|
||||||
mc:Ignorable="d" Height="450" Width="300"
|
|
||||||
Loaded="Window_Loaded" ResizeMode="NoResize" ShowInTaskbar="False" Activated="Window_Activated" Closing="Window_Closing">
|
|
||||||
<Grid>
|
|
||||||
<ui:SimpleStackPanel Margin="12" Spacing="24" ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.CanContentScroll="True">
|
|
||||||
<TextBlock Text="🎧HeadMeld" Style="{StaticResource HeaderTextBlockStyle}" />
|
|
||||||
|
|
||||||
<ui:NavigationViewItemHeader Content="Equalizer APO Status"/>
|
|
||||||
<ui:ToggleSwitch Margin="15,-15,0,0" x:Name="toggleAPOEnabled" HorizontalAlignment="Stretch" OffContent="Disabled" OnContent="Enabled" Toggled="toggleAPOEnabled_Toggled"/>
|
|
||||||
|
|
||||||
<ui:NavigationViewItemHeader Content="Selected Profile"/>
|
|
||||||
<ui:RadioButtons x:Name="btnRadioProfiles" Margin="15,-15,0,0" d:ItemsSource="{d:SampleData ItemCount=2}" SelectedIndex="0" HorizontalAlignment="Stretch" />
|
|
||||||
<Button x:Name="btnExit" Content="Exit" HorizontalAlignment="Stretch" Click="btnExit_Click" />
|
|
||||||
</ui:SimpleStackPanel>
|
|
||||||
</Grid>
|
|
||||||
</Window>
|
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
using System.Collections.Generic;
|
|
||||||
using System.Windows;
|
|
||||||
|
|
||||||
namespace HeadMeld
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Interaction logic for MainWindow.xaml
|
|
||||||
/// </summary>
|
|
||||||
public partial class MainWindow : Window
|
|
||||||
{
|
|
||||||
ConfigManager configManager = new();
|
|
||||||
public MainWindow()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Window_Loaded(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
foreach (var item in configManager.configFile)
|
|
||||||
{
|
|
||||||
btnRadioProfiles.Items.Add(item);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void btnExit_Click(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
Application.Current.Shutdown();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Window_Activated(object sender, System.EventArgs e)
|
|
||||||
{
|
|
||||||
// Set window position based on taskbar location
|
|
||||||
var desktopWorkArea = SystemParameters.WorkArea;
|
|
||||||
Left = desktopWorkArea.Right - Width - 15;
|
|
||||||
Top = desktopWorkArea.Bottom - Height - 15;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void toggleAPOEnabled_Toggled(object sender, RoutedEventArgs e)
|
|
||||||
{
|
|
||||||
configManager.ToggleProfiles(new List<string>
|
|
||||||
{
|
|
||||||
"# Include: ATH-M50x.txt",
|
|
||||||
"Include: 900ProX.txt"
|
|
||||||
},
|
|
||||||
toggleAPOEnabled.IsOn);
|
|
||||||
configManager.Write();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
|
|
||||||
{
|
|
||||||
Visibility = Visibility.Collapsed;
|
|
||||||
e.Cancel = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace HeadMeld.Models
|
||||||
|
{
|
||||||
|
sealed class MainWindowModel
|
||||||
|
{
|
||||||
|
public bool ToggleAPOEnabled { get; set; }
|
||||||
|
public List<string> Profiles { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
using System.Collections.Generic;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using HeadMeld.Models;
|
||||||
|
|
||||||
|
namespace HeadMeld.ViewModels
|
||||||
|
{
|
||||||
|
sealed class MainWindowViewModel : INotifyPropertyChanged
|
||||||
|
{
|
||||||
|
public event PropertyChangedEventHandler? PropertyChanged;
|
||||||
|
protected void OnPropertyChange(string propertyName) => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
|
||||||
|
|
||||||
|
private MainWindowModel _model = new();
|
||||||
|
|
||||||
|
public bool ToggleAPOEnabled
|
||||||
|
{
|
||||||
|
get { return _model.ToggleAPOEnabled; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (_model.ToggleAPOEnabled != value)
|
||||||
|
{
|
||||||
|
_model.ToggleAPOEnabled = value;
|
||||||
|
OnPropertyChange(nameof(ToggleAPOEnabled));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<string> Profiles
|
||||||
|
{
|
||||||
|
get { return _model.Profiles; }
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (_model.Profiles != value)
|
||||||
|
{
|
||||||
|
_model.Profiles = value;
|
||||||
|
OnPropertyChange(nameof(Profiles));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public MainWindowViewModel()
|
||||||
|
{
|
||||||
|
_model = new()
|
||||||
|
{
|
||||||
|
ToggleAPOEnabled = true,
|
||||||
|
Profiles = new List<string>() { "1", "2"}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
<Window x:Class="HeadMeld.MainWindow"
|
||||||
|
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||||
|
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"
|
||||||
|
xmlns:ui="http://schemas.modernwpf.com/2019"
|
||||||
|
ui:WindowHelper.UseModernWindowStyle="True"
|
||||||
|
mc:Ignorable="d" Height="450" Width="300"
|
||||||
|
ResizeMode="NoResize" ShowInTaskbar="False">
|
||||||
|
<Grid>
|
||||||
|
<!-- Window Stack Panel-->
|
||||||
|
<ui:SimpleStackPanel
|
||||||
|
Margin="12" Spacing="20"
|
||||||
|
ScrollViewer.VerticalScrollBarVisibility="Auto" >
|
||||||
|
|
||||||
|
<!-- Window Header-->
|
||||||
|
<TextBlock Text="🎧HeadMeld"
|
||||||
|
Style="{StaticResource HeaderTextBlockStyle}" />
|
||||||
|
|
||||||
|
<!-- Equalizer APO Status -->
|
||||||
|
<ui:NavigationViewItemHeader Content="Equalizer APO Status"/>
|
||||||
|
<ui:ToggleSwitch x:Name="ToggleAPOEnabled"
|
||||||
|
Margin="15,-15,0,0"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
OffContent="Disabled" OnContent="Enabled"
|
||||||
|
IsOn="{Binding ToggleAPOEnabled,
|
||||||
|
UpdateSourceTrigger=PropertyChanged}"/>
|
||||||
|
|
||||||
|
<!-- Selected Profile-->
|
||||||
|
<ui:NavigationViewItemHeader Content="Selected Profile"/>
|
||||||
|
<ui:RadioButtons x:Name="btnRadioProfiles"
|
||||||
|
Margin="15,-15,0,0"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
ItemsSource="{Binding Profiles,
|
||||||
|
UpdateSourceTrigger=PropertyChanged}" />
|
||||||
|
|
||||||
|
<!-- Window Controls -->
|
||||||
|
<Button x:Name="btnExit"
|
||||||
|
Margin="15,0,15,0"
|
||||||
|
HorizontalAlignment="Stretch"
|
||||||
|
Content="Exit" />
|
||||||
|
</ui:SimpleStackPanel>
|
||||||
|
</Grid>
|
||||||
|
</Window>
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
using System.Windows;
|
||||||
|
using HeadMeld.ViewModels;
|
||||||
|
|
||||||
|
namespace HeadMeld
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Interaction logic for MainWindow.xaml
|
||||||
|
/// </summary>
|
||||||
|
public partial class MainWindow : Window
|
||||||
|
{
|
||||||
|
private readonly MainWindowViewModel viewModel;
|
||||||
|
|
||||||
|
public MainWindow()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
|
||||||
|
viewModel = new MainWindowViewModel();
|
||||||
|
DataContext = viewModel;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user