Widow – Blame information for rev 23

Subversion Repositories:
Rev:
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 }