Widow – Blame information for rev 23
?pathlinks?
Rev | Author | Line No. | Line |
---|---|---|---|
1 | office | 1 | using System; |
2 | using System.ComponentModel; |
||
3 | using System.Configuration; |
||
8 | office | 4 | using System.Globalization; |
1 | office | 5 | using System.Threading.Tasks; |
6 | using System.Windows.Forms; |
||
15 | office | 7 | using AutoUpdaterDotNET; |
1 | office | 8 | using Widow.Properties; |
9 | using Widow.Serialization; |
||
10 | |||
11 | namespace Widow |
||
12 | { |
||
6 | office | 13 | public partial class MainForm : Form |
1 | office | 14 | { |
15 | #region Public Events & Delegates |
||
16 | |||
17 | public event EventHandler<WindowCreatedEventArgs> WindowCreated; |
||
18 | |||
19 | public event EventHandler<WindowDestroyedEventArgs> WindowDestroyed; |
||
20 | |||
21 | #endregion |
||
22 | |||
23 | #region Public Enums, Properties and Fields |
||
24 | |||
25 | public Windows.Windows Windows { get; set; } |
||
26 | |||
27 | public RuleEditForm RuleEditForm { get; set; } |
||
28 | |||
9 | office | 29 | public WindowManipulation WindowManipulation { get; set; } |
1 | office | 30 | |
5 | office | 31 | public AboutForm AboutForm { get; set; } |
22 | office | 32 | |
21 | office | 33 | public LogForm LogForm { get; private set; } |
5 | office | 34 | |
1 | office | 35 | #endregion |
36 | |||
37 | #region Constructors, Destructors and Finalizers |
||
38 | |||
6 | office | 39 | public MainForm() |
1 | office | 40 | { |
41 | InitializeComponent(); |
||
15 | office | 42 | AutoUpdater.Start("http://widow.grimore.org/update/update.xml"); |
6 | office | 43 | |
23 | office | 44 | // Upgrade settings if required. |
45 | if (!ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).HasFile) |
||
46 | { |
||
47 | Settings.Default.Upgrade(); |
||
48 | } |
||
49 | |||
1 | office | 50 | // Bind to settings changed event. |
51 | Settings.Default.SettingsLoaded += Default_SettingsLoaded; |
||
52 | Settings.Default.SettingsSaving += Default_SettingsSaving; |
||
53 | Settings.Default.PropertyChanged += Default_PropertyChanged; |
||
54 | |||
55 | Natives.RegisterShellHookWindow(Handle); |
||
56 | |||
18 | office | 57 | WindowManipulation = new WindowManipulation(Settings.Default, this); |
58 | |||
22 | office | 59 | LoadWindows().ContinueWith(task => { WindowManipulation.AddWindows(Windows); }); |
1 | office | 60 | } |
61 | |||
62 | /// <summary> |
||
63 | /// Clean up any resources being used. |
||
64 | /// </summary> |
||
65 | /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> |
||
66 | protected override void Dispose(bool disposing) |
||
67 | { |
||
68 | if (disposing && components != null) |
||
69 | { |
||
70 | Settings.Default.SettingsLoaded -= Default_SettingsLoaded; |
||
71 | Settings.Default.SettingsSaving -= Default_SettingsSaving; |
||
72 | Settings.Default.PropertyChanged -= Default_PropertyChanged; |
||
73 | |||
74 | components.Dispose(); |
||
75 | } |
||
76 | |||
77 | base.Dispose(disposing); |
||
78 | } |
||
79 | |||
80 | #endregion |
||
81 | |||
82 | #region Private Overrides |
||
83 | |||
84 | protected override void WndProc(ref Message m) |
||
85 | { |
||
86 | var handle = m.LParam; |
||
87 | var windowName = Helpers.GetWindowTitle(handle); |
||
88 | |||
89 | switch (m.WParam.ToInt32()) |
||
90 | { |
||
91 | case (int) Natives.WM.HSHELL_WINDOWCREATED: |
||
92 | WindowCreated?.Invoke(this, new WindowCreatedEventArgs(windowName, handle)); |
||
93 | break; |
||
94 | case (int) Natives.WM.HSHELL_WINDOWDESTROYED: |
||
95 | WindowDestroyed?.Invoke(this, new WindowDestroyedEventArgs(windowName, handle)); |
||
96 | break; |
||
97 | } |
||
98 | |||
99 | base.WndProc(ref m); |
||
100 | } |
||
101 | |||
102 | #endregion |
||
103 | |||
104 | #region Event Handlers |
||
105 | |||
8 | office | 106 | private static void Default_PropertyChanged(object sender, PropertyChangedEventArgs e) |
1 | office | 107 | { |
108 | Settings.Default.Save(); |
||
109 | } |
||
110 | |||
8 | office | 111 | private static void Default_SettingsSaving(object sender, CancelEventArgs e) |
1 | office | 112 | { |
113 | } |
||
114 | |||
8 | office | 115 | private static void Default_SettingsLoaded(object sender, SettingsLoadedEventArgs e) |
1 | office | 116 | { |
117 | } |
||
118 | |||
119 | private void NewToolStripMenuItem_Click(object sender, EventArgs e) |
||
120 | { |
||
11 | office | 121 | if (RuleEditForm != null) |
122 | { |
||
123 | return; |
||
124 | } |
||
125 | |||
1 | office | 126 | RuleEditForm = new RuleEditForm(this, Windows); |
127 | RuleEditForm.Closed += RuleEditForm_Closed; |
||
128 | RuleEditForm.Show(); |
||
129 | } |
||
130 | |||
131 | private async void RuleEditForm_Closed(object sender, EventArgs e) |
||
132 | { |
||
133 | RuleEditForm.Closed -= RuleEditForm_Closed; |
||
134 | RuleEditForm.Dispose(); |
||
135 | RuleEditForm = null; |
||
136 | |||
23 | office | 137 | switch (await WindowsSerialization.Serialize(Windows, Constants.WindowsSettingsFile)) |
1 | office | 138 | { |
139 | case SerializationSuccess serializationSuccess: |
||
21 | office | 140 | if (LogForm != null) |
141 | { |
||
142 | LogForm.InvokeIfRequired(form => |
||
143 | { |
||
144 | form.logTextBox.Text += "Windows saved." + Environment.NewLine; |
||
145 | }); |
||
146 | } |
||
22 | office | 147 | |
1 | office | 148 | break; |
149 | case SerializationFailure serializationFailure: |
||
21 | office | 150 | if (LogForm != null) |
151 | { |
||
152 | LogForm.InvokeIfRequired(form => |
||
153 | { |
||
22 | office | 154 | form.logTextBox.Text += "Failed to save windows: " + |
155 | serializationFailure.Exception.Message + Environment.NewLine; |
||
21 | office | 156 | }); |
157 | } |
||
22 | office | 158 | |
1 | office | 159 | break; |
160 | } |
||
161 | } |
||
162 | |||
163 | private void ExitToolStripMenuItem_Click(object sender, EventArgs e) |
||
164 | { |
||
165 | Application.Exit(); |
||
166 | } |
||
167 | |||
168 | private void LaunchOnBootToolStripMenuItem_CheckedChanged(object sender, EventArgs e) |
||
169 | { |
||
170 | Settings.Default.LaunchOnBoot = ((ToolStripMenuItem) sender).Checked; |
||
171 | |||
172 | LaunchOnBoot.Set(Settings.Default.LaunchOnBoot); |
||
173 | } |
||
174 | |||
5 | office | 175 | private void OnWindowCreateToolStripMenuItem_CheckedChanged(object sender, EventArgs e) |
176 | { |
||
177 | Settings.Default.OnWindowCreate = ((ToolStripMenuItem) sender).Checked; |
||
178 | |||
9 | office | 179 | WindowManipulation.OnWindowCreate = Settings.Default.OnWindowCreate; |
5 | office | 180 | } |
181 | |||
182 | private void AboutToolStripMenuItem_Click(object sender, EventArgs e) |
||
183 | { |
||
184 | // Show the about form. |
||
185 | AboutForm = new AboutForm(); |
||
186 | AboutForm.Show(); |
||
187 | } |
||
188 | |||
11 | office | 189 | private async void ApplyNowToolStripMenuItem_Click(object sender, EventArgs e) |
7 | office | 190 | { |
11 | office | 191 | await WindowManipulation.Apply(); |
7 | office | 192 | } |
193 | |||
8 | office | 194 | private void OnEveryToolStripMenuItem_CheckedChanged(object sender, EventArgs e) |
195 | { |
||
196 | var toolStripMenuItem = (ToolStripMenuItem) sender; |
||
197 | |||
198 | if (!int.TryParse(toolStripTextBox1.Text, out var time)) |
||
199 | { |
||
200 | return; |
||
201 | } |
||
202 | |||
203 | Settings.Default.ApplyEveryTimeEnabled = toolStripMenuItem.Checked; |
||
204 | Settings.Default.ApplyEveryTime = time.ToString(CultureInfo.InvariantCulture); |
||
205 | |||
9 | office | 206 | WindowManipulation.ApplyEveryTime = time; |
207 | WindowManipulation.ApplyEveryTimeEnabled = toolStripMenuItem.Checked; |
||
8 | office | 208 | } |
209 | |||
13 | office | 210 | private void NotifyIcon1_DoubleClick(object sender, EventArgs e) |
211 | { |
||
212 | if (RuleEditForm != null) |
||
213 | { |
||
214 | return; |
||
215 | } |
||
216 | |||
217 | RuleEditForm = new RuleEditForm(this, Windows); |
||
218 | RuleEditForm.Closed += RuleEditForm_Closed; |
||
219 | RuleEditForm.Show(); |
||
220 | } |
||
221 | |||
222 | private async void NotifyIcon1_Click(object sender, EventArgs e) |
||
223 | { |
||
224 | await WindowManipulation.Apply(); |
||
225 | } |
||
226 | |||
22 | office | 227 | private void ShowLogToolStripMenuItem_Click(object sender, EventArgs e) |
228 | { |
||
229 | if (LogForm != null) |
||
230 | { |
||
231 | return; |
||
232 | } |
||
233 | |||
234 | LogForm = new LogForm(); |
||
235 | LogForm.Closed += LogForm_Closed; |
||
236 | LogForm.Show(); |
||
237 | } |
||
238 | |||
239 | private void LogForm_Closed(object sender, EventArgs e) |
||
240 | { |
||
241 | LogForm.Closed -= LogForm_Closed; |
||
242 | LogForm.Dispose(); |
||
243 | LogForm = null; |
||
244 | } |
||
245 | |||
1 | office | 246 | #endregion |
247 | |||
248 | #region Private Methods |
||
249 | |||
250 | private async Task LoadWindows() |
||
251 | { |
||
23 | office | 252 | switch (await WindowsSerialization.Deserialize(Constants.WindowsSettingsFile)) |
1 | office | 253 | { |
254 | case SerializationSuccess serializationSuccess: |
||
255 | Windows = serializationSuccess.Windows; |
||
21 | office | 256 | if (LogForm != null) |
257 | { |
||
258 | LogForm.InvokeIfRequired(form => |
||
259 | { |
||
260 | form.logTextBox.Text += "Windows loaded." + Environment.NewLine; |
||
261 | }); |
||
262 | } |
||
22 | office | 263 | |
1 | office | 264 | break; |
265 | case SerializationFailure serializationFailure: |
||
266 | Windows = new Windows.Windows(); |
||
21 | office | 267 | if (LogForm != null) |
268 | { |
||
269 | LogForm.InvokeIfRequired(form => |
||
270 | { |
||
22 | office | 271 | form.logTextBox.Text += "Failed to load windows: " + |
272 | serializationFailure.Exception.Message + Environment.NewLine; |
||
21 | office | 273 | }); |
274 | } |
||
22 | office | 275 | |
1 | office | 276 | break; |
277 | } |
||
278 | } |
||
279 | |||
280 | #endregion |
||
281 | } |
||
282 | } |