Widow – Blame information for rev 9

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 using System;
2 using System.Collections.Generic;
3 using System.Windows.Forms;
4 using Windows;
5  
6 namespace Widow
7 {
8 public partial class RuleEditForm : Form
9 {
10 #region Public Enums, Properties and Fields
11  
12 public Windows.Windows Windows { get; }
13  
6 office 14 public MainForm Form { get; set; }
1 office 15  
16 #endregion
17  
18 #region Constructors, Destructors and Finalizers
19  
6 office 20 public RuleEditForm(MainForm mainForm, Windows.Windows windows) : this(windows)
1 office 21 {
6 office 22 Form = mainForm;
1 office 23  
24 Form.WindowCreated += Form_WindowCreated;
25 Form.WindowDestroyed += Form_WindowDestroyed;
26 }
27  
28 public RuleEditForm(Windows.Windows windows) : this()
29 {
30 Windows = windows;
31  
32 foreach (var window in windows.Window)
33 {
34 windowRulesListBox.Items.Add(window);
35 }
36 }
37  
38 private RuleEditForm()
39 {
40 InitializeComponent();
41  
42 desktopWindowsListBox.DisplayMember = "Name";
43 windowRulesListBox.DisplayMember = "Name";
44  
45 RefreshWindows();
46 }
47  
48 /// <summary>
49 /// Clean up any resources being used.
50 /// </summary>
51 /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
52 protected override void Dispose(bool disposing)
53 {
54 if (disposing && components != null)
55 {
56 Form.WindowCreated -= Form_WindowCreated;
57 Form.WindowDestroyed -= Form_WindowDestroyed;
58  
59 components.Dispose();
60 }
61  
62 base.Dispose(disposing);
63 }
64  
65 #endregion
66  
67 #region Event Handlers
68  
69 private void Form_WindowDestroyed(object sender, WindowDestroyedEventArgs e)
70 {
71 if (string.IsNullOrEmpty(e.Name))
72 {
73 return;
74 }
75  
76 var indices = new List<int>();
77 for (var i = 0; i < desktopWindowsListBox.Items.Count; ++i)
78 {
79 if (((Window) desktopWindowsListBox.Items[i]).Name == e.Name)
80 {
81 indices.Add(i);
82 }
83 }
84  
85 foreach (var index in indices)
86 {
87 desktopWindowsListBox.Items.RemoveAt(index);
88 }
89 }
90  
91 private void Form_WindowCreated(object sender, WindowCreatedEventArgs e)
92 {
93 if (string.IsNullOrEmpty(e.Name))
94 {
95 return;
96 }
97  
98 var found = false;
99 foreach (var window in desktopWindowsListBox.Items)
100 {
101 if (((Window) window).Name == e.Name)
102 {
103 found = true;
104 break;
105 }
106 }
107  
108 if (found)
109 {
110 return;
111 }
112  
113 if (Natives.GetWindowRect(e.Handle, out var rect))
114 {
115 var window = new Window(e.Name, rect.Top, rect.Left, rect.Right - rect.Left,
116 rect.Bottom - rect.Top);
117  
118 desktopWindowsListBox.Items.Add(window);
119 }
120 }
121  
122 private void WindowRulesListBox_SelectedIndexChanged(object sender, EventArgs e)
123 {
124 var listBox = (ListBox) sender;
125  
126 if (listBox.SelectedIndex == -1)
127 {
128 WindowName.Text = string.Empty;
9 office 129 ignoreLeftCheckBox.Checked = false;
1 office 130 WindowLeft.Text = string.Empty;
9 office 131 ignoreTopCheckBox.Checked = false;
1 office 132 WindowTop.Text = string.Empty;
9 office 133 ignoreWidthCheckBox.Checked = false;
1 office 134 WindowWidth.Text = string.Empty;
9 office 135 ignoreHeightCheckBox.Checked = false;
1 office 136 WindowHeight.Text = string.Empty;
137 return;
138 }
139  
140 var window = (Window) listBox.SelectedItem;
141  
142 if (window == null)
143 {
144 return;
145 }
146  
147 WindowName.Text = window.Name;
9 office 148 ignoreLeftCheckBox.Checked = window.IgnoreLeft;
1 office 149 WindowLeft.Text = window.Left.ToString();
9 office 150 ignoreTopCheckBox.Checked = window.IgnoreTop;
1 office 151 WindowTop.Text = window.Top.ToString();
9 office 152 ignoreWidthCheckBox.Checked = window.IgnoreWidth;
1 office 153 WindowWidth.Text = window.Width.ToString();
9 office 154 ignoreHeightCheckBox.Checked = window.IgnoreHeight;
1 office 155 WindowHeight.Text = window.Height.ToString();
156 }
157  
158 private void RefreshButton_Click(object sender, EventArgs e)
159 {
160 RefreshWindows();
161 }
162  
163 private void RemoveButton_Click(object sender, EventArgs e)
164 {
165 var window = (Window) windowRulesListBox.SelectedItem;
166 if (window == null)
167 {
168 return;
169 }
170  
171 var index = -1;
172 for (var i = 0; i < windowRulesListBox.Items.Count; ++i)
173 {
174 if (((Window) windowRulesListBox.Items[i]).Name == window.Name)
175 {
176 index = i;
177 break;
178 }
179 }
180  
181 if (index == -1)
182 {
183 return;
184 }
185  
186 windowRulesListBox.Items.RemoveAt(index);
187 Windows.Window.Remove(window);
188 }
189  
190 private void AddButton_Click(object sender, EventArgs e)
191 {
192 var window = (Window) desktopWindowsListBox.SelectedItem;
193 if (window == null)
194 {
195 return;
196 }
197  
198 var found = false;
199 foreach (var windowRule in windowRulesListBox.Items)
200 {
201 if (((Window) windowRule).Name == window.Name)
202 {
203 found = true;
204 break;
205 }
206 }
207  
208 if (found)
209 {
210 return;
211 }
212  
213 windowRulesListBox.Items.Add(window);
214 Windows.Window.Add(window);
215 }
216  
217 private void OnWindowSettings_TextChanged(object sender, EventArgs e)
218 {
219 var selectedWindow = (Window) windowRulesListBox.SelectedItem;
220  
221 if (selectedWindow == null)
222 {
223 WindowName.Text = string.Empty;
224 WindowLeft.Text = string.Empty;
225 WindowTop.Text = string.Empty;
226 WindowWidth.Text = string.Empty;
227 WindowHeight.Text = string.Empty;
228  
229 return;
230 }
231  
232 var textBox = (TextBox) sender;
233 switch (textBox.Name)
234 {
235 case nameof(WindowName):
236 selectedWindow.Name = textBox.Text;
237 break;
238 case nameof(WindowLeft):
239 if (int.TryParse(textBox.Text, out var left))
240 {
241 selectedWindow.Left = left;
242 }
243  
244 break;
245 case nameof(WindowTop):
246 if (int.TryParse(textBox.Text, out var top))
247 {
248 selectedWindow.Top = top;
249 }
250  
251 break;
252 case nameof(WindowWidth):
253 if (int.TryParse(textBox.Text, out var width))
254 {
255 selectedWindow.Width = width;
256 }
257  
258 break;
259 case nameof(WindowHeight):
260 if (int.TryParse(textBox.Text, out var height))
261 {
262 selectedWindow.Height = height;
263 }
264  
265 break;
266 }
267 }
268  
9 office 269 private void OnIgnoreWindowSettings_CheckedChanged(object sender, EventArgs e)
270 {
271 var selectedWindow = (Window) windowRulesListBox.SelectedItem;
272  
273 if (selectedWindow == null)
274 {
275 ignoreLeftCheckBox.Checked = false;
276 ignoreTopCheckBox.Checked = false;
277 ignoreWidthCheckBox.Checked = false;
278 ignoreHeightCheckBox.Checked = false;
279  
280 return;
281 }
282  
283 var checkBox = (CheckBox) sender;
284 switch (checkBox.Name)
285 {
286 case nameof(ignoreHeightCheckBox):
287 selectedWindow.IgnoreHeight = checkBox.Checked;
288 break;
289 case nameof(ignoreWidthCheckBox):
290 selectedWindow.IgnoreWidth = checkBox.Checked;
291 break;
292 case nameof(ignoreTopCheckBox):
293 selectedWindow.IgnoreTop = checkBox.Checked;
294 break;
295 case nameof(ignoreLeftCheckBox):
296 selectedWindow.IgnoreLeft = checkBox.Checked;
297 break;
298 }
299 }
300  
1 office 301 #endregion
302  
303 #region Private Methods
304  
305 private void RefreshWindows()
306 {
307 foreach (var desktopWindow in Helpers.GetDesktopWindows())
308 {
309 if (string.IsNullOrEmpty(desktopWindow.Title))
310 {
311 continue;
312 }
313  
314 if (Natives.GetWindowRect(desktopWindow.Handle, out var rect))
315 {
316 var window = new Window(desktopWindow.Title, rect.Top, rect.Left, rect.Right - rect.Left,
317 rect.Bottom - rect.Top);
318  
319 var found = false;
320 foreach (var item in desktopWindowsListBox.Items)
321 {
322 if (((Window) item).Name == window.Name)
323 {
324 found = true;
325 break;
326 }
327 }
328  
329 if (!found)
330 {
331 desktopWindowsListBox.Items.Add(window);
332 }
333 }
334 }
335 }
336  
337 #endregion
338 }
339 }