mirror of
https://github.com/bloxstraplabs/bloxstrap.git
synced 2025-04-13 16:51:29 -07:00
109 lines
3.1 KiB
C#
109 lines
3.1 KiB
C#
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
|
|
{
|
|
/// <summary>
|
|
/// Interaction logic for MainWindow.xaml
|
|
/// </summary>
|
|
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();
|
|
}
|
|
}
|
|
}
|