- .NET 8 WPF app with full MVVM architecture - One-click boost: CPU, RAM, GPU, network, services, timer resolution - Real-time system monitor (LibreHardwareMonitor) - Auto game detection (30+ games) - RAM optimizer with kernel-level cleanup - Network optimizer (TCP registry tweaks) - Service manager, process manager, shader cache cleaner - Desktop widget overlay - Debug log viewer - Custom dark gaming theme with trans pride colors - 84 unit tests (xUnit) - Inno Setup installer script - Landing page website
81 lines
2.2 KiB
C#
81 lines
2.2 KiB
C#
using System.ComponentModel;
|
|
using System.Windows;
|
|
using SpdUp.ViewModels;
|
|
using SpdUp.Views;
|
|
|
|
namespace SpdUp;
|
|
|
|
/// <summary>
|
|
/// Interaction logic for MainWindow.xaml
|
|
/// </summary>
|
|
public partial class MainWindow : Window
|
|
{
|
|
private readonly MainViewModel _vm;
|
|
private WidgetWindow? _widgetWindow;
|
|
|
|
public MainWindow()
|
|
{
|
|
InitializeComponent();
|
|
_vm = new MainViewModel();
|
|
DataContext = _vm;
|
|
|
|
_vm.PropertyChanged += OnVmPropertyChanged;
|
|
StateChanged += MainWindow_StateChanged;
|
|
|
|
if (_vm.IsWidgetVisible)
|
|
ShowWidget();
|
|
}
|
|
|
|
// ── Custom title-bar handlers ─────────────────────────────
|
|
private void Minimize_Click(object sender, RoutedEventArgs e)
|
|
=> WindowState = WindowState.Minimized;
|
|
|
|
private void MaximizeRestore_Click(object sender, RoutedEventArgs e)
|
|
=> WindowState = WindowState == WindowState.Maximized
|
|
? WindowState.Normal
|
|
: WindowState.Maximized;
|
|
|
|
private void Close_Click(object sender, RoutedEventArgs e)
|
|
=> Close();
|
|
|
|
private void MainWindow_StateChanged(object? sender, System.EventArgs e)
|
|
{
|
|
// Update the maximize/restore glyph
|
|
if (MaxRestoreBtn is not null)
|
|
MaxRestoreBtn.Content = WindowState == WindowState.Maximized ? "❐" : "☐";
|
|
}
|
|
|
|
private void OnVmPropertyChanged(object? sender, PropertyChangedEventArgs e)
|
|
{
|
|
if (e.PropertyName == nameof(MainViewModel.IsWidgetVisible))
|
|
{
|
|
if (_vm.IsWidgetVisible)
|
|
ShowWidget();
|
|
else
|
|
HideWidget();
|
|
}
|
|
}
|
|
|
|
private void ShowWidget()
|
|
{
|
|
if (_widgetWindow is null || !_widgetWindow.IsLoaded)
|
|
{
|
|
_widgetWindow = new WidgetWindow(_vm);
|
|
_widgetWindow.Closed += (_, _) => _vm.IsWidgetVisible = false;
|
|
_widgetWindow.Show();
|
|
}
|
|
}
|
|
|
|
private void HideWidget()
|
|
{
|
|
_widgetWindow?.Close();
|
|
_widgetWindow = null;
|
|
}
|
|
|
|
private void Window_Closing(object sender, CancelEventArgs e)
|
|
{
|
|
HideWidget();
|
|
_vm.SaveSettings();
|
|
_vm.Dispose();
|
|
}
|
|
} |