Spring – Blame information for rev 2

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 using System;
2 using System.ComponentModel;
3 using System.IO;
4 using System.Threading.Tasks;
5 using System.Windows.Forms;
6 using Spring.Properties;
7 using Spring.Serialization;
8 using Spring.Serialization.Combos;
9 using Spring.Utilities;
10 using Spring.Utilities.Collections;
11 using SpringCombos;
12  
13 namespace Spring.Editing
14 {
15 public partial class EditorForm : Form
16 {
17 #region Public Events & Delegates
18  
19 public event EventHandler<EditEventArgs> Edited;
20  
21 #endregion
22  
23 #region Public Enums, Properties and Fields
24  
25 public static Random Random { get; set; }
26  
27 public Configuration.Configuration Configuration { get; }
28  
29 public IndexedList<Combos> History { get; set; }
30  
31 #endregion
32  
33 #region Private Delegates, Events, Enums, Properties, Indexers and Fields
34  
35 private Combos Combos { get; set; }
36  
37 #endregion
38  
39 #region Constructors, Destructors and Finalizers
40  
41 public EditorForm()
42 {
43 InitializeComponent();
44  
45 Random = new Random();
46 History = new IndexedList<Combos>();
47  
48 Edited += EditorForm_Edited;
49 }
50  
51 public EditorForm(Combos chargeCombos) : this()
52 {
53 if (chargeCombos == null)
54 {
55 Combos = new Combos();
56  
57 return;
58 }
59  
60 Combos = chargeCombos;
61 }
62  
63 public EditorForm(Configuration.Configuration springConfiguration, Combos chargeCombos) : this(
64 chargeCombos) =>
65 Configuration = springConfiguration;
66  
67 /// <summary>
68 /// Clean up any resources being used.
69 /// </summary>
70 /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
71 protected override void Dispose(bool disposing)
72 {
73 if (disposing && components != null)
74 {
75 // Dispose event handlers.
76 Edited -= EditorForm_Edited;
77  
78 components.Dispose();
79 }
80  
81 base.Dispose(disposing);
82 }
83  
2 office 84 #endregion
1 office 85  
2 office 86 #region Event Handlers
87 private void EditorForm_Load(object sender, EventArgs e)
88 {
89 Utilities.WindowState.FormTracker.Track(this);
90 }
1 office 91 private async void InfinityToolStripMenuItem_Click(object sender, EventArgs e)
92 {
93 Combos.ComboRepeat = 0;
94  
95 await UpdateCombos(EditType.Transform);
96 }
97  
98 private async void RedoToolStripMenuItem_Click(object sender, EventArgs e)
99 {
100 editorBox.TextChanged -= EditorBox_TextChanged;
101  
102 Combos = History.Forward;
103  
104 await UpdateCombos(EditType.History);
105  
106 editorBox.TextChanged += EditorBox_TextChanged;
107 }
108  
109 private async void UndoToolStripMenuItem_Click(object sender, EventArgs e)
110 {
111 editorBox.TextChanged -= EditorBox_TextChanged;
112  
113 Combos = History.Back;
114  
115 await UpdateCombos(EditType.History);
116  
117 editorBox.TextChanged += EditorBox_TextChanged;
118 }
119  
120 private async void RepeatsToolStripTextBox_TextChanged(object sender, EventArgs e)
121 {
122 var toolStripTextBox = (ToolStripTextBox) sender;
123  
124 if (!int.TryParse(toolStripTextBox.Text, out var repeatCounts) ||
125 repeatCounts < 0)
126 {
127 return;
128 }
129  
130 Combos.ComboRepeat = repeatCounts;
131  
132 await UpdateCombos(EditType.Transform);
133 }
134  
135 private void EditorBox_MouseUp(object sender, MouseEventArgs e)
136 {
137 var textBox = (TextBox) sender;
138  
139 textBox.Focus();
140 }
141  
142 private void EditorBox_MouseDown(object sender, MouseEventArgs e)
143 {
144 var textBox = (TextBox) sender;
145  
146 textBox.Focus();
147 }
148  
149 private async void EditorBox_KeyUp(object sender, KeyEventArgs e)
150 {
151 if (e.KeyCode != Keys.Back)
152 {
153 return;
154 }
155  
156 var textBox = (TextBox) sender;
157  
158 if (string.IsNullOrEmpty(textBox.SelectedText))
159 {
160 return;
161 }
162  
163 textBox.SelectedText = string.Empty;
164  
165 await UpdateCombos(EditType.Edited);
166 }
167  
168 private async void FuzzToolStripMenuItem_TextChanged(object sender, EventArgs e)
169 {
170 var fuzzAdjustToolStripTextBox = (ToolStripTextBox) sender;
171  
172 if (!int.TryParse(fuzzAdjustToolStripTextBox.Text, out var adjustFuzz) ||
173 adjustFuzz < 0)
174 {
175 return;
176 }
177  
178 foreach (var combo in Combos.Combo)
179 {
180 switch (combo)
181 {
182 case PauseCombo pauseCombo:
183 pauseCombo.Fuzz = Random.Next(0, adjustFuzz);
184  
185 break;
186 }
187 }
188  
189 await UpdateCombos(EditType.Transform);
190 }
191  
192 private async void MouseRemoveToolStripMenuItem_Click(object sender, EventArgs e)
193 {
194 RemoveCombo<MouseCombo>(sender, e);
195 await UpdateCombos(EditType.Transform);
196 }
197  
198 private void RemoveCombo<T>(object sender, EventArgs e)
199 {
200 var localSpringCombos = new Combo[Combos.Combo.Count];
201  
202 Combos.Combo.CopyTo(localSpringCombos);
203  
204 foreach (var combo in localSpringCombos)
205 {
206 switch (combo)
207 {
208 case T _:
209 Combos.Combo.Remove(combo);
210  
211 break;
212 }
213 }
214 }
215  
216 private async void KeyRemoveToolStripMenuItem_Click(object sender, EventArgs e)
217 {
218 RemoveCombo<KeyboardCombo>(sender, e);
219 await UpdateCombos(EditType.Transform);
220 }
221  
222 private async void PauseRemoveToolStripMenuItem_Click(object sender, EventArgs e)
223 {
224 RemoveCombo<PauseCombo>(sender, e);
225 await UpdateCombos(EditType.Transform);
226 }
227  
228 private async void EquateToolStripTextBox_TextChanged(object sender, EventArgs e)
229 {
230 if (!int.TryParse(equateToolStripTextBox.Text, out var pauseValue))
231 {
232 return;
233 }
234  
235 foreach (var combo in Combos.Combo)
236 {
237 switch (combo)
238 {
239 case PauseCombo pauseCombo:
240 pauseCombo.TimeSpan = TimeSpan.FromMilliseconds(pauseValue);
241  
242 break;
243 }
244 }
245  
246 await UpdateCombos(EditType.Transform);
247 }
248  
249 private async void ReverseToolStripMenuItem_Click(object sender, EventArgs e)
250 {
251 Combos.Combo.Reverse();
252  
253 await UpdateCombos(EditType.Transform);
254 }
255  
256 private void EditorForm_Edited(object sender, EditEventArgs e)
257 {
258 switch (e)
259 {
260 case EditSuccessEventArgs editSuccessEventArgs:
261  
262 // Do not update the text box, instead just update the object or print out any errors.
263 this.InvokeIfRequired(form => { form.editorBox.Text = editSuccessEventArgs.Text; });
264 Combos = editSuccessEventArgs.Combos;
265  
266 switch (editSuccessEventArgs.Type)
267 {
268 case EditType.History:
269 case EditType.Load:
270 case EditType.Save:
271 break;
272  
273 case EditType.Edited:
274 case EditType.Transform:
275 History.Add(Combos);
276  
277 break;
278  
279 default:
280 throw new ArgumentOutOfRangeException();
281 }
282  
283 $"History Count: {History.Count}".ToDebugConsole();
284  
285 break;
286  
287 case EditFailureEventArgs editFailureEventArgs:
288 break;
289 }
290 }
291  
292 private async void SaveFileDialog1_FileOk(object sender, CancelEventArgs e)
293 {
294 switch (await Combos.Serialize(saveFileDialog1.FileName))
295 {
296 case SerializationSuccess<Combos> serializationSuccess:
297 toolStripStatusLabel1.Text = $"{Strings.Combos_wrote_successfully}";
298  
299 Edited?.Invoke(this,
300 new EditSuccessEventArgs(EditType.Save, saveFileDialog1.FileName, serializationSuccess));
301  
302 break;
303  
304 case SerializationFailure serializationFailed:
305 toolStripStatusLabel1.Text =
306 $"{Strings.Failed_to_write_combos}: {serializationFailed.Exception.Message}";
307  
308 Edited?.Invoke(this, new EditFailureEventArgs(serializationFailed));
309 ;
310  
311 break;
312 }
313 }
314  
315 private async void OpenFileDialog1_FileOk(object sender, CancelEventArgs e)
316 {
317 var file = new FileInfo(openFileDialog1.FileName);
318  
319 switch (await ComboSerialization.Deserialize(file, 0))
320 {
321 case SerializationSuccess<Combos> serializationSuccess:
322 toolStripStatusLabel1.Text = $"{Strings.Combos_read_successfully}";
323  
324 Edited?.Invoke(this,
325 new EditSuccessEventArgs(EditType.Load, openFileDialog1.FileName, serializationSuccess));
326  
327 break;
328  
329 case SerializationFailure deserializationFailure:
330 toolStripStatusLabel1.Text =
331 $"{Strings.Failed_to_read_combos}: {deserializationFailure.Exception.Message}";
332  
333 Edited?.Invoke(this, new EditFailureEventArgs(deserializationFailure));
334  
335 break;
336 }
337 }
338  
339 private void ImportToolStripMenuItem_Click(object sender, EventArgs e)
340 {
341 openFileDialog1.ShowDialog();
342 }
343  
344 private void ExportToolStripMenuItem_Click(object sender, EventArgs e)
345 {
346 saveFileDialog1.ShowDialog();
347 }
348  
349 private async void EditorBox_TextChanged(object sender, EventArgs e)
350 {
351 var textBox = (TextBox) sender;
352  
353 switch (await ComboSerialization.Deserialize(textBox.Text))
354 {
355 case SerializationSuccess<Combos> serializationSuccess:
356 toolStripStatusLabel1.Text = $"{Strings.Combos_wrote_successfully}";
357  
358 Edited?.Invoke(this, new EditSuccessEventArgs(EditType.Edited, serializationSuccess));
359 Combos = serializationSuccess.Result;
360  
361 break;
362  
363 case SerializationFailure deserializationFailure:
364 toolStripStatusLabel1.Text =
365 $"{Strings.Failed_to_write_combos}: {deserializationFailure.Exception.Message}";
366  
367 Edited?.Invoke(this, new EditFailureEventArgs(deserializationFailure));
368  
369 break;
370 }
371 }
372  
373 private async void EditorForm_Shown(object sender, EventArgs e)
374 {
375 switch (await Combos.Serialize())
376 {
377 case SerializationSuccess<Combos> serializationSuccess:
378 // Set editor text.
379 this.InvokeIfRequired(form =>
380 {
381 form.editorBox.Text = serializationSuccess.Text;
382  
383 form.repeatsToolStripTextBox.Text = $"{serializationSuccess.Result.ComboRepeat}";
384  
385 form.fuzzToolStripTextBox.Text = $"{Configuration.Spring.Fuzz}";
386  
387 form.toolStripStatusLabel1.Text = $"{Strings.Combos_read_successfully}";
388 });
389  
390 break;
391  
392 case SerializationFailure serializationFailed:
393 this.InvokeIfRequired(form =>
394 {
395 form.toolStripStatusLabel1.Text =
396 $"{Strings.Failed_to_read_combos}: {serializationFailed.Exception.Message}";
397 });
398  
399 break;
400 }
401  
402 this.InvokeIfRequired(form =>
403 {
404 form.fuzzToolStripTextBox.TextChanged += FuzzToolStripMenuItem_TextChanged;
405 form.repeatsToolStripTextBox.TextChanged += RepeatsToolStripTextBox_TextChanged;
406 });
407 }
408  
409 private void EditorForm_Closing(object sender, FormClosingEventArgs e)
410 {
411 fuzzToolStripTextBox.TextChanged -= FuzzToolStripMenuItem_TextChanged;
412 repeatsToolStripTextBox.TextChanged -= RepeatsToolStripTextBox_TextChanged;
413 }
414  
415 #endregion
416  
417 #region Private Methods
418  
419 private async Task UpdateCombos(EditType editType)
420 {
421 switch (await Combos.Serialize())
422 {
423 case SerializationSuccess<Combos> serializationSuccess:
424 editorBox.Text = serializationSuccess.Text;
425 Edited?.Invoke(this, new EditSuccessEventArgs(editType, serializationSuccess));
426 Combos = serializationSuccess.Result;
427  
428 break;
429  
430 case SerializationFailure serializationFailure:
431 toolStripStatusLabel1.Text = $"{Strings.Could_not_modify_combos}";
432  
433 break;
434 }
435 }
436  
2 office 437 #endregion
438  
439  
1 office 440 }
441 }