-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMainWindow.xaml.cs
More file actions
85 lines (72 loc) · 2.86 KB
/
Copy pathMainWindow.xaml.cs
File metadata and controls
85 lines (72 loc) · 2.86 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
using OneColumnEncoder.UI;
using System.ComponentModel;
using System.Reflection;
using System.Windows;
using System.Windows.Input;
namespace OneColumnEncoder
{
public partial class MainWindow : AdaptiveWindow
{
private DateTime _lastNumaCpuTrigger = DateTime.MinValue;
private static readonly TimeSpan NumaCpuTriggerInterval = TimeSpan.FromMilliseconds(500);
public MainWindow()
{
InitializeComponent();
Title = $"1cenc (Beta—Commit {GetGitCommitCount()} {GetGitCommitShortHash()})";
Closing += OnClosing;
Closed += OnClosed;
PreviewMouseDown += OnPreviewMouseDown;
PreviewKeyDown += OnPreviewKeyDown;
}
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 navigation state so no stale VM lingers
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;
}
}
}