-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMainWindow.xaml.cs
More file actions
89 lines (75 loc) · 2.84 KB
/
Copy pathMainWindow.xaml.cs
File metadata and controls
89 lines (75 loc) · 2.84 KB
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
85
86
87
88
using System.Diagnostics;
using System.Reflection;
namespace OneColumnEncoder;
/// <summary>
/// Main app window:
/// - builds title from git metadata,
/// - throttles NUMA/CPU refresh on mouse/key input,
/// - coordinates child-window closing,
/// - coordinates ViewModel disposal during shutdown.
/// </summary>
public partial class MainWindow : AdaptiveWindow
{
private DateTime _lastNumaCpuTrigger = DateTime.MinValue;
private static readonly TimeSpan NumaCpuTriggerInterval = TimeSpan.FromMilliseconds(500);
public MainWindow()
{
InitializeComponent();
Title = $"{Models.Lang.UILangProvider.MainWindowTitle} · PID {Process.GetCurrentProcess().Id} · Commit {GetGitCommitCount()} {GetGitCommitShortHash()}";
Closing += OnClosing;
Closed += OnClosed;
PreviewMouseDown += OnPreviewMouseDown;
PreviewKeyDown += OnPreviewKeyDown;
}
// 2 Pieces of Get info needed
private static string GetGitCommitCount()
{
return Assembly.GetExecutingAssembly()
.GetCustomAttributes<AssemblyMetadataAttribute>()
.FirstOrDefault(attribute => attribute.Key == "GitCommitCount")
?.Value ?? "0";
}
private static string GetGitCommitShortHash()
{
return Assembly.GetExecutingAssembly()
.GetCustomAttributes<AssemblyMetadataAttribute>()
.FirstOrDefault(attribute => attribute.Key == "GitCommitShortHash")
?.Value ?? "unknown";
}
private void OnPreviewMouseDown(object sender, MouseButtonEventArgs e)
{
if (e.ChangedButton == MouseButton.Left)
TriggerNumaCpuCheck();
}
private void OnPreviewKeyDown(object sender, KeyEventArgs e) => TriggerNumaCpuCheck();
private void TriggerNumaCpuCheck()
{
if (DateTime.UtcNow - _lastNumaCpuTrigger < NumaCpuTriggerInterval)
return;
_lastNumaCpuTrigger = DateTime.UtcNow;
if (DataContext is ViewModels.MainVM vm)
vm.RefreshNumaCpuCheck();
}
private void OnClosing(object? sender, CancelEventArgs e)
{
// Close all child windows before the main window closes
foreach (Window? window in Application.Current.Windows.OfType<Window>().Except([this]).ToArray())
window.Close();
if (Application.Current.Windows.OfType<Window>().Any(window => window != this))
{
e.Cancel = true;
return;
}
// Clear modal nav state
if (Application.Current is App app) app._modalNavM.CloseAll();
}
private void OnClosed(object? sender, EventArgs e)
{
if (DataContext is IDisposable disposable) disposable.Dispose();
DataContext = null;
Closing -= OnClosing;
Closed -= OnClosed;
PreviewMouseDown -= OnPreviewMouseDown;
PreviewKeyDown -= OnPreviewKeyDown;
}
}