using System.ComponentModel; using System.Windows; using System.Windows.Controls; using Wpf.Ui.Controls.Interfaces; using Wpf.Ui.Mvvm.Contracts; using Bloxstrap.UI.ViewModels.Settings; namespace Bloxstrap.UI.Elements.Settings { /// /// Interaction logic for MainWindow.xaml /// public partial class MainWindow : INavigationWindow { private Models.Persistable.WindowState _state => App.State.Prop.SettingsWindow; public MainWindow(bool showAlreadyRunningWarning) { var viewModel = new MainWindowViewModel(); viewModel.RequestSaveNoticeEvent += (_, _) => SettingsSavedSnackbar.Show(); viewModel.RequestCloseWindowEvent += (_, _) => Close(); DataContext = viewModel; InitializeComponent(); App.Logger.WriteLine("MainWindow::MainWindow", "Initializing menu"); #if DEBUG // easier access EditorWarningNavItem.Visibility = Visibility.Visible; #endif if (showAlreadyRunningWarning) ShowAlreadyRunningSnackbar(); LoadState(); } public void LoadState() { if (_state.Left > SystemParameters.VirtualScreenWidth) _state.Left = 0; if (_state.Top > SystemParameters.VirtualScreenHeight) _state.Top = 0; if (_state.Width > 0) this.Width = _state.Width; if (_state.Height > 0) this.Height = _state.Height; if (_state.Left > 0 && _state.Top > 0) { this.WindowStartupLocation = WindowStartupLocation.Manual; this.Left = _state.Left; this.Top = _state.Top; } } private async void ShowAlreadyRunningSnackbar() { await Task.Delay(500); // wait for everything to finish loading AlreadyRunningSnackbar.Show(); } #region INavigationWindow methods public Frame GetFrame() => RootFrame; public INavigation GetNavigation() => RootNavigation; public bool Navigate(Type pageType) => RootNavigation.Navigate(pageType); public void SetPageService(IPageService pageService) => RootNavigation.PageService = pageService; public void ShowWindow() => Show(); public void CloseWindow() => Close(); #endregion INavigationWindow methods private void WpfUiWindow_Closing(object sender, CancelEventArgs e) { if (App.FastFlags.Changed || App.PendingSettingTasks.Any()) { var result = Frontend.ShowMessageBox(Strings.Menu_UnsavedChanges, MessageBoxImage.Warning, MessageBoxButton.YesNo); if (result != MessageBoxResult.Yes) e.Cancel = true; } _state.Width = this.Width; _state.Height = this.Height; _state.Top = this.Top; _state.Left = this.Left; App.State.Save(); if (!e.Cancel) App.Terminate(); } } }