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
}
}