-
-
Notifications
You must be signed in to change notification settings - Fork 157
/
Copy pathBrowserWindow.xaml.cs
84 lines (72 loc) · 2.42 KB
/
BrowserWindow.xaml.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
using System;
using System.Reactive.Concurrency;
using System.Reactive.Disposables;
using System.Reactive.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using MahApps.Metro.Controls;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Web.WebView2.Wpf;
using ReactiveUI;
using Wabbajack.Common;
namespace Wabbajack;
public partial class BrowserWindow : MetroWindow
{
private readonly CompositeDisposable _disposable;
private readonly IServiceProvider _serviceProvider;
public WebView2 Browser { get; set; }
public BrowserWindow(IServiceProvider serviceProvider)
{
InitializeComponent();
_disposable = new CompositeDisposable();
_serviceProvider = serviceProvider;
Browser = _serviceProvider.GetRequiredService<WebView2>();
RxApp.MainThreadScheduler.Schedule(() =>
{
if(Browser.Parent != null)
{
((Panel)Browser.Parent).Children.Remove(Browser);
}
MainGrid.Children.Add(Browser);
Grid.SetRow(Browser, 3);
Grid.SetColumnSpan(Browser, 3);
});
}
private void UIElement_OnMouseDown(object sender, MouseButtonEventArgs e)
{
if (e.LeftButton == MouseButtonState.Pressed)
{
base.DragMove();
}
}
private void BrowserWindow_OnActivated(object sender, EventArgs e)
{
var vm = ((BrowserWindowViewModel) DataContext);
vm.Browser = this;
vm.WhenAnyValue(vm => vm.HeaderText)
.BindToStrict(this, view => view.Header.Text)
.DisposeWith(_disposable);
vm.WhenAnyValue(vm => vm.Instructions)
.BindToStrict(this, view => view.Instructions.Text)
.DisposeWith(_disposable);
vm.WhenAnyValue(vm => vm.Address)
.BindToStrict(this, view => view.AddressBar.Text)
.DisposeWith(_disposable);
this.CopyButton.Command = ReactiveCommand.Create(() =>
{
Clipboard.SetText(vm.Address.ToString());
});
this.BackButton.Command = ReactiveCommand.Create(() =>
{
Browser.GoBack();
});
vm.RunWrapper(CancellationToken.None)
.ContinueWith(_ => Dispatcher.Invoke(() =>
{
Close();
}));
}
}