using System.ComponentModel; using System.Windows; using SpdUp.ViewModels; using SpdUp.Views; namespace SpdUp; /// /// Interaction logic for MainWindow.xaml /// 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(); } }