using BackupEssentials.Backup; using BackupEssentials.Backup.Data; using BackupEssentials.Controls; using BackupEssentials.Pages; using System; using System.Diagnostics; using System.Windows; using System.Windows.Controls; using System.Windows.Input; using System.Windows.Media; using System.Windows.Threading; namespace BackupEssentials{ public partial class MainWindow : Window{ public static MainWindow Instance { get; private set; } /// <summary> /// Use this to not call OnShow(data) when changing the page. Only use when showing 'overlay' windows that do not modify any data. /// </summary> public static readonly object IgnoreShowData = new object(); private new Rect RestoreBounds = new Rect(); private bool IsMaximized = false; private string[] DropData = null; public MainWindow() : this(null){} public MainWindow(SplashScreen splashScreen){ InitializeComponent(); Instance = this; ContentFrame.Navigated += (sender2, args2) => { ContentFrame.NavigationService.RemoveBackEntry(); }; Loaded += (sender, args) => { if (splashScreen != null)splashScreen.Close(new TimeSpan()); Dispatcher.BeginInvoke(DispatcherPriority.Loaded,new Action(() => { ShowPage(typeof(Home)); DataStorage.SetupForSaving(true); DataStorage.Load(); })); }; Closing += (sender, args) => { IPageSwitchHandler switchHandler = ContentFrame.Content as IPageSwitchHandler; if (switchHandler != null && switchHandler.OnSwitch())args.Cancel = true; }; Closed += (sender, args) => { DataStorage.Save(true); ExplorerIntegration.Refresh(true); }; } private void ButtonWindowCloseClick(object sender, RoutedEventArgs e){ Close(); } private void ButtonWindowToggleClick(object sender, RoutedEventArgs e){ if (IsMaximized){ Left = RestoreBounds.X; Top = RestoreBounds.Y; Width = RestoreBounds.Width; Height = RestoreBounds.Height; ResizeMode = ResizeMode.CanResizeWithGrip; IsMaximized = false; ButtonWindowToggle.CXPathData = (string)FindResource("PathButtonMaximized"); } else{ RestoreBounds.X = Left; RestoreBounds.Y = Top; RestoreBounds.Width = Width; RestoreBounds.Height = Height; System.Windows.Forms.Screen screen = System.Windows.Forms.Screen.FromPoint(new System.Drawing.Point((int)Math.Round(Left+Width/2),(int)Math.Round(Top+Height/2))); Left = screen.WorkingArea.X; Top = screen.WorkingArea.Y; Width = screen.WorkingArea.Width; Height = screen.WorkingArea.Height; ResizeMode = ResizeMode.CanResize; IsMaximized = true; ButtonWindowToggle.CXPathData = (string)FindResource("PathButtonWindowed"); } VisualStateManager.GoToState(ButtonWindowToggle,"Normal",false); } private void ButtonWindowMinimizeClick(object sender, RoutedEventArgs e){ WindowState = WindowState.Minimized; } private void TitleBarLeftButtonDown(object sender, MouseButtonEventArgs e){ if (e.ClickCount == 2)ButtonWindowToggleClick(sender,e); else if (!IsMaximized)DragMove(); } private void ButtonMainMenuClick(object sender, RoutedEventArgs e){ ButtonMainMenu btn = (ButtonMainMenu)sender; if (!ShowPage(GetType().Assembly.GetType("BackupEssentials."+btn.ClickPage,false)))return; for(int child = 0; child < VisualTreeHelper.GetChildrenCount(btn.Parent); child++){ ButtonMainMenu childBtn = VisualTreeHelper.GetChild(btn.Parent,child) as ButtonMainMenu; if (childBtn != null && childBtn != btn)childBtn.IsChecked = false; } btn.IsChecked = true; } private void OnDragEnter(object sender, DragEventArgs e){ if (DropData == null && e.Data.GetDataPresent(DataFormats.FileDrop)){ DropData = e.Data.GetData(DataFormats.FileDrop) as string[]; DropOverlayLabel.Visibility = Visibility.Visible; App.SetForegroundWindow(Process.GetCurrentProcess().MainWindowHandle); } else e.Effects = DragDropEffects.None; e.Handled = true; } private void OnDragLeave(object sender, DragEventArgs e){ DropData = null; DropOverlayLabel.Visibility = Visibility.Hidden; } private void OnDragDrop(object sender, DragEventArgs e){ if (DropData != null){ DropOverlayLabel.Visibility = Visibility.Hidden; ShowPage(typeof(BackupDrop),new object[]{ DropData, ContentFrame.Content == null ? null : (ContentFrame.Content as Page).GetType() }); DropData = null; } } public bool ShowPage(Type pageType){ return ShowPage(pageType,null); } public bool ShowPage(Type pageType, object data){ IPageSwitchHandler switchHandler = ContentFrame.Content as IPageSwitchHandler; if (switchHandler != null && switchHandler.OnSwitch())return false; Page page = null; ContentFrame.Content = pageType == null ? null : page = AppPageManager.GetPage(pageType); IPageShowData pageDataHandler = page as IPageShowData; if (pageDataHandler != null && data != IgnoreShowData)pageDataHandler.OnShow(data); if (page != null && !page.AllowDrop){ page.AllowDrop = true; page.DragEnter += new DragEventHandler(OnDragEnter); page.DragLeave += new DragEventHandler(OnDragLeave); page.Drop += new DragEventHandler(OnDragDrop); } return true; } } }