-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRuntimeData.cs
More file actions
109 lines (82 loc) · 4.63 KB
/
RuntimeData.cs
File metadata and controls
109 lines (82 loc) · 4.63 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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
using ProcessManager.Profiling.Models.Process;
using ProcessManager.Windows.ProcessContext;
using System.Collections.ObjectModel;
using System.Windows.Controls;
using ProcessManager.Actions;
using System.Windows;
namespace ProcessManager
{
public static class RuntimeData
{
//
// ---------------------------------- RUNTIME ----------------------------------
//
public static ObservableCollection<ProcessInfo> Processes = new ObservableCollection<ProcessInfo>();
public static HashSet<uint> Running = new HashSet<uint>();
public static ProcessInfo? SelectedProcess { get; set; }
public static uint SelectedProcessPID => SelectedProcess == null ? uint.MaxValue : SelectedProcess.PID;
//
// ---------------------------------- UI ----------------------------------
//
public static ContextMenu? ProcessContextMenu { get; set; }
public static ContextMenu? ProcessPriorityContextMenu { get; set; }
// ---------------------------------- PROCESS CONTEXT MENU ----------------------------------
public static void CreateProcessContextMenu()
{
if (ProcessContextMenu == null)
{
Separator separator = new Separator();
MenuItem killProcessButton = new MenuItem() { Header = "Kill Process", Foreground = AppDefinition.LightTextColor };
killProcessButton.Click += (s, a) => ProcessActions.KillProcess(SelectedProcessPID);
MenuItem suspendProcessButton = new MenuItem() { Header = "Suspend Process", Foreground = AppDefinition.LightTextColor };
suspendProcessButton.Click += (s, a) => ProcessActions.SuspendProcess(SelectedProcessPID);
MenuItem resumeProcessButton = new MenuItem() { Header = "Resume Process", Foreground = AppDefinition.LightTextColor };
resumeProcessButton.Click += (s, a) => ProcessActions.ResumeProcess(SelectedProcessPID);
MenuItem setAffinityButton = new MenuItem() { Header = "Set Affinity", Foreground = AppDefinition.LightTextColor };
setAffinityButton.Click += (s, a) => AffinityButtonClick();
MenuItem setPriorityButton = new MenuItem() { Header = "Set Priority", Foreground = AppDefinition.LightTextColor};
setPriorityButton.Click += (s, a) => PriorityButtonClick();
object[] buttons = [killProcessButton, suspendProcessButton, resumeProcessButton, setAffinityButton, setPriorityButton];
ProcessContextMenu = new();
ProcessContextMenu.Style = ContextMenuStyle();
ProcessContextMenu.ItemsPanel = ContextItemMenuStyle();
foreach (object b in buttons)
ProcessContextMenu.Items.Add(b);
}
}
private static Style ContextMenuStyle()
{
Style style = new Style(typeof(ContextMenu));
ControlTemplate template = new ControlTemplate(typeof(ContextMenu));
FrameworkElementFactory border = new FrameworkElementFactory(typeof(Border));
FrameworkElementFactory itemPres = new FrameworkElementFactory(typeof(ItemsPresenter));
border.SetValue(Border.CornerRadiusProperty, new CornerRadius(2));
border.SetValue(Border.BorderThicknessProperty, new Thickness(2));
border.SetValue(Border.BorderBrushProperty, AppDefinition.DarkTextColor);
border.SetValue(Border.BackgroundProperty, AppDefinition.DefaultColor);
itemPres.SetValue(ItemsPresenter.MarginProperty, new Thickness(2));
border.AppendChild(itemPres);
template.VisualTree = border;
style.Setters.Add(new Setter(Control.TemplateProperty, template));
return style;
}
private static ItemsPanelTemplate ContextItemMenuStyle()
{
FrameworkElementFactory panelFactory = new(typeof(StackPanel));
panelFactory.SetValue(StackPanel.BackgroundProperty, AppDefinition.DefaultColor);
ItemsPanelTemplate template = new();
template.VisualTree = panelFactory;
return template;
}
private static void AffinityButtonClick()
{
ProcessAffinityWindow affinityWindow = new ProcessAffinityWindow(SelectedProcess ?? throw new Exception());
affinityWindow.Show();
}
private static void PriorityButtonClick()
{
ProcessPriorityWindow priorityWindow = new ProcessPriorityWindow(SelectedProcess ?? throw new Exception());
priorityWindow.ShowDialog();
}
}
}