namespace VideoBrowser.Views { using Dragablz; using System.Windows; using VideoBrowser.Common; using VideoBrowser.Controls.CefSharpBrowser; using VideoBrowser.Extensions; using VideoBrowser.Helpers; using VideoBrowser.Models; using VideoBrowser.ViewModels; /// /// Interaction logic for MainWindow.xaml. /// public partial class MainWindow { #region Constructors /// /// Initializes a new instance of the class. /// public MainWindow() : this(new GlobalBrowserData()) { // This constructor is called once per application instance. var addIns = this.GlobalBrowserData.AddInButtons; addIns.Add(new DownloadQueueButton(this.GlobalBrowserData.DownloadItemModels)); addIns.Add(new OpenOutputFolderButton(this.GlobalBrowserData.Settings)); addIns.Add(new SettingsButton(this.GlobalBrowserData.Settings)); addIns.Add(new AboutButton()); if (DebugHelper.IsDebug) { addIns.Add(new TestButton()); } // Register create browser tab. this.GlobalBrowserData.InterTabClient.CreateWindow = this.CreateWindow; // Add the first browser tab. var browserTabModel = this.MainWindowViewModel.WebBrowserTabControlViewModel; browserTabModel.TabItems.Add(this.MainWindowViewModel.CreateBrowser()); } /// /// Initializes a new instance of the class. /// /// The globalBrowserData. internal MainWindow(GlobalBrowserData globalBrowserData) { // This constructor is intended to create new window after dragging the browser tab. Logger.Info($"Start {nameof(VideoBrowser)}"); this.GlobalBrowserData = globalBrowserData; this.MainWindowViewModel = new MainWindowViewModel(globalBrowserData); this.MainWindowViewModel.CefWindowData.PropertyChanged += this.CefWindowData_PropertyChanged; this.GlobalBrowserData.WindowViewModels.Add(this.MainWindowViewModel); this.DataContext = this.MainWindowViewModel; this.InitializeComponent(); } #endregion Constructors #region Properties /// /// Gets the GlobalBrowserData. /// internal GlobalBrowserData GlobalBrowserData { get; } /// /// Gets or sets the LastWindowState. /// private WindowState LastWindowState { get; set; } /// /// Gets or sets the LastWindowStyle. /// private WindowStyle LastWindowStyle { get; set; } /// /// Gets or sets the MainWindowViewModel. /// private MainWindowViewModel MainWindowViewModel { get; set; } #endregion Properties #region Methods /// /// The OnGlobalData_PropertyChanged. /// /// The sender. /// The e. private void CefWindowData_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { var cefWindowData = this.MainWindowViewModel.CefWindowData; if (e.IsMatch(nameof(cefWindowData.IsFullScreen))) { if (cefWindowData.IsFullScreen) { this.LastWindowState = this.WindowState; this.LastWindowStyle = this.WindowStyle; this.WindowState = WindowState.Maximized; this.WindowStyle = WindowStyle.None; this.ShowTitleBar = false; } else { this.WindowState = this.LastWindowState; this.WindowStyle = this.LastWindowStyle; this.ShowTitleBar = true; } } } /// /// The CreateWindow. /// /// The . private (Window, TabablzControl) CreateWindow() { var viewModel = new MainWindowViewModel(this.GlobalBrowserData); var window = new MainWindow(this.GlobalBrowserData) { DataContext = viewModel }; var initialTabablzControl = window.WebBrowserTabControlView.InitialTabablzControl; return (window, initialTabablzControl); } #endregion Methods } }