-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMainWindow.cs
More file actions
484 lines (423 loc) · 17.9 KB
/
MainWindow.cs
File metadata and controls
484 lines (423 loc) · 17.9 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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Printing;
using System.Drawing.Text;
using Fast_Script.PresenterFolder.Searching;
using System.Runtime.InteropServices;
using Fast_Script.PresenterFolder;
namespace Fast_Script
{
public partial class MainWindow : Form, IMainWindow
{
// give credit to http://dryicons.com for icons
private List<FontFamily> _avalibleFonts = null;
private Presenter _presenter;
private VerseSelecter _selectVerse;
public MainWindow()
{
InitializeComponent();
_presenter = new Presenter(this);
_selectVerse = new VerseSelecter(_presenter);
// verse Selecter
Controls.Add(_selectVerse);
_selectVerse.Visible = false;
_selectVerse.BringToFront();
if (_presenter.Settings.VerseSelecterEnabled)
{
_selectVerse.ResetForm();
}
//disable search bar while index is building
if (_presenter.Settings.CurrentBible.IndexBuilderWorker.IsBusy)
{
searchBox.Enabled = false;
//add event to re-enable searchBox
_presenter.Settings.CurrentBible.IndexBuilderWorker.RunWorkerCompleted +=
new RunWorkerCompletedEventHandler(indexBuilderWorker_RunWorkerCompleted);
}
}
// the index of the current bible has been built so re-enable search box
private void indexBuilderWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
searchBox.Enabled = true;
}
//public CheckedListBox VerseListBox
//{ get { return _selectedVersesControl.SelectedVersesCheckedListBox; } }
public void AddReference(ReferenceItemWrapper item)
{
_selectedVersesControl.AddReference(item);
}
public void ClearReferences()
{
_selectedVersesControl.ClearReferences();
}
private void webResualts_Navigating(object sender, WebBrowserNavigatingEventArgs e)
{
string pageURL = e.Url.ToString();
if (!pageURL.Contains("res://ieframe.dll/unknownprotocol.htm"))
{
if (pageURL.Contains("addReference"))
{
string[] link = e.Url.ToString().Split('=');
_selectedVersesControl.AddReference(new PresenterFolder.ReferenceItemWrapper(
_presenter.ItemstInWebView[Convert.ToInt32(link[1])]));
//reload webview with last displayed verses
_presenter.displayVersesToWebView();
}
}
else
{
//webResults.Load(_presenter.Settings.DefaultWebPage);
}
}
public bool verseListContains(string item)
{
return _selectedVersesControl.ContainsReference(item);
}
public void loadWebPage(string link)
{
//webResults.Load(link);
}
private void searchBox_Enter(object sender, EventArgs e)
{
_presenter.searchString(searchBox.Text);
}
private void searchBox_KeyUp(object sender, KeyEventArgs e)
{
if (e.KeyValue == 32) // space pressed
{
// TODO make current selected value be picked
//searchBox.Text = searchBox.
}
else if (e.KeyValue != 8) //don't do anything for backspace(8)
{
_presenter.searchString(searchBox.Text);
}
}
public void SearchBoxSuggestions(object list, string currentText)
{
searchBox.DataSource = list;
searchBox.Text=currentText;
searchBox.DroppedDown = true;
searchBox.SelectionStart = currentText.Length;
}
private void SelectVersesButton_Click(object sender, EventArgs e)
{
_selectVerse.ResetForm();
_presenter.Settings.VerseSelecterEnabled = true;
}
private void SendToWebViewtoolStripButton_Click(object sender, EventArgs e)
{
PresenterFolder.ReferenceList refList = _selectedVersesControl.GetReferenceList();
_presenter.DisplayVersesToWebView(refList, "");
}
private void checkedVerses_SelectedIndexChanged(object sender, EventArgs e)
{
CheckedListBox clb = (CheckedListBox)sender;
int index = clb.SelectedIndex;
// When you remove an item from the Items collection, it fires the SelectedIndexChanged
// event again, with SelectedIndex = -1. Hence the check for index != -1 first,
// to prevent an invalid selectedindex error
if (index != -1 && clb.GetItemCheckState(index) == CheckState.Unchecked)
{
clb.Items.RemoveAt(index);
}
}
private void buttonCopySelectedVersesToClipboard_Click(object sender, EventArgs e)
{
sendAllVersesToClipBoard();
}
private void sendAllVersesToClipBoard()
{
PresenterFolder.ReferenceList refList = _selectedVersesControl.GetReferenceList();
if (refList.Items.Count > 0)
{
_presenter.putVersesToClipBoard(refList);
}
}
private void bibleToolStripMenuItem_DropDownOpening(object sender, EventArgs e)
{
ToolStripMenuItem[] menuItems = new ToolStripMenuItem[_presenter.Settings.Bibles.Count];
for (int i = 0; i < menuItems.Length; i++)
{
menuItems[i] = new ToolStripMenuItem();
menuItems[i].Name = "Bible:"+i.ToString();
menuItems[i].Tag = _presenter.Settings.Bibles[i];
menuItems[i].Text = _presenter.Settings.Bibles[i].BibleVersion;
menuItems[i].Click += new EventHandler(BibleMenuItemClickHandler);
if (_presenter.Settings.CurrentBible.BibleVersion ==
_presenter.Settings.Bibles[i].BibleVersion)
{
menuItems[i].Checked = true;
}
}
bibleToolStripMenuItem.DropDownItems.Clear();
bibleToolStripMenuItem.DropDownItems.AddRange(menuItems);
ToolStripMenuItem AddBibleToolStripItem = new ToolStripMenuItem("Add Bible");
AddBibleToolStripItem.Click += new EventHandler(BibleMenuItemClickHandler);
bibleToolStripMenuItem.DropDownItems.Add(AddBibleToolStripItem);
}
private void BibleMenuItemClickHandler(object sender, EventArgs e)
{
ToolStripMenuItem clickedItem = (ToolStripMenuItem)sender;
if(clickedItem.Name.Contains("Bible:")) // check for a bible item
{
_presenter.Settings.CurrentBible.IndexBuilderWorker.RunWorkerCompleted -= indexBuilderWorker_RunWorkerCompleted; // remove old event handler for re-enableing search box
_presenter.Settings.CurrentBible = (bible_data.Bible)clickedItem.Tag; // set bible a current bible
//check to see if bible index is still being built
if (_presenter.Settings.CurrentBible.IndexBuilderWorker.IsBusy)
{
searchBox.Enabled = false;
//add event to re-enable searchBox
_presenter.Settings.CurrentBible.IndexBuilderWorker.RunWorkerCompleted +=
new RunWorkerCompletedEventHandler(indexBuilderWorker_RunWorkerCompleted);
}
}
else if (clickedItem.Text == "Add Bible")
{
if (openFileDialog.ShowDialog() != DialogResult.Cancel)
{
_presenter.Settings.AddBible(openFileDialog.FileName);
}
}
}
private void menuFontSize_TextChanged(object sender, EventArgs e)
{
ToolStripTextBox textBox = (ToolStripTextBox)sender;
try
{
_presenter.Settings.PrinterFont = new Font(
_presenter.Settings.PrinterFont.FontFamily.Name,
Convert.ToInt16(textBox.Text));
}
catch
{
if (textBox.Text != "")
{
textBox.Text = Convert.ToString(_presenter.Backend._settings.PrinterFont.Size);
}
}
}
private List<FontFamily> getAvalibleFonts()
{
if (_avalibleFonts == null)
{
FontFamily[] allFonts = new InstalledFontCollection().Families;
//weed out all the weird fonts that don't work with normal settings
List<FontFamily> normalFonts = new List<FontFamily>();
foreach (FontFamily font in allFonts)
{
try
{
new Font(font, 12);
normalFonts.Add(font);
}
catch { }
}
_avalibleFonts = normalFonts;
}
return _avalibleFonts;
}
private void fontFamilyToolStripMenuItem_DropDownOpening(object sender, EventArgs e)
{
List<FontFamily> allFonts = getAvalibleFonts();
ToolStripMenuItem[] menuItems = new ToolStripMenuItem[allFonts.Count];
for (int i = 0; i < menuItems.Length; i++)
{
menuItems[i] = new ToolStripMenuItem();
menuItems[i].Name = "Font:" + i.ToString();
menuItems[i].Tag = allFonts[i];
menuItems[i].Text = allFonts[i].Name;
menuItems[i].Font = new Font(allFonts[i], 12);
menuItems[i].Click += new EventHandler(fontFamilyToolStripMenuItem_ClickHandler);
if (_presenter.Settings.PrinterFont.Name == allFonts[i].Name)
{
menuItems[i].Checked = true;
}
}
fontFamilyToolStripMenuItem.DropDownItems.Clear();
fontFamilyToolStripMenuItem.DropDownItems.AddRange(menuItems);
}
private void fontFamilyToolStripMenuItem_ClickHandler(object sender, EventArgs e)
{
ToolStripMenuItem clickedItem = (ToolStripMenuItem)sender;
FontFamily clickedFont = (FontFamily)clickedItem.Tag;
_presenter.Settings.PrinterFont = new Font(clickedFont.Name,
_presenter.Settings.PrinterFont.Size);
}
private void printToolStripMenuItem_Click(object sender, EventArgs e)
{
PresenterFolder.ReferenceList refList = _selectedVersesControl.GetReferenceList();
if (refList.Items.Count > 0)
{
_presenter.Backend.PrintText(_presenter.putVersesForPlainText(refList));
}
}
private void printPreviewToolStripMenuItem_Click(object sender, EventArgs e)
{
PresenterFolder.ReferenceList refList = _selectedVersesControl.GetReferenceList();
if (refList.Items.Count > 0)
{
_presenter.Backend.PrintPreview(_presenter.putVersesForPlainText(refList));
}
}
private PresenterFolder.ReferenceList getCurrentVerseList()
{
return _selectedVersesControl.GetReferenceList();
}
private void printSetupToolStripMenuItem_Click(object sender, EventArgs e)
{
_presenter.Backend.PrintSetup(sender, e);
}
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void MainWindow_FormClosing(object sender, FormClosingEventArgs eventArguments)
{
_presenter.Backend.SaveSettings();
checkIfAudioFileIsBeingWritten(eventArguments);
showPendingChangesMessage(_selectedVersesControl.IsDirty, eventArguments);
}
private void showPendingChangesMessage(bool isDirty, FormClosingEventArgs eventArguments)
{
if (isDirty
&& MessageBox.Show("There are pending changes are you sure you want to quit?",
"Pending Changes", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
{
eventArguments.Cancel = true;
}
}
private void checkIfAudioFileIsBeingWritten(FormClosingEventArgs e)
{
if (MakeMP3backgroundWorker.IsBusy)
{
DialogResult StopMP3_Generating = MessageBox.Show("A MP3 File is currently being generated. Do you want to cancel the generation and exit?",
"Still Generating MP3 File!",
MessageBoxButtons.YesNo);
switch (StopMP3_Generating)
{
case DialogResult.No:
{
MakeMP3backgroundWorker.CancelAsync();
e.Cancel = true;
break;
}
case DialogResult.Yes:
{
break;
}
}
}
}
private void fontSizeToolStripMenuItem_DropDownOpening(object sender, EventArgs e)
{
menuFontSize.Text = Convert.ToString(_presenter.Settings.PrinterFont.Size);
}
private void SavetoolStripButton_Click(object sender, EventArgs e)
{
if (saveFileDialog.ShowDialog() != DialogResult.Cancel)
{
_presenter.saveVerseListToFile(getCurrentVerseList(),
saveFileDialog.FileName);
}
}
private void saveVerseListToolStripMenuItem_Click(object sender, EventArgs e)
{
if (saveFileDialog.ShowDialog() != DialogResult.Cancel)
{
_presenter.saveVerseListToFile(getCurrentVerseList(),
saveFileDialog.FileName);
_selectedVersesControl.IsDirty = false;
}
}
private void loadVerseListToolStripMenuItem_Click(object sender, EventArgs e)
{
if (openFileDialog.ShowDialog() != DialogResult.Cancel)
{
_presenter.setNewVerseList( _presenter.getSavedVerseListFromFile(
openFileDialog.FileName));
_selectedVersesControl.IsDirty = false;
}
}
private void saveListToMP3ToolStripMenuItem_Click(object sender, EventArgs e)
{
if (saveToMP3Dialog.ShowDialog() != DialogResult.Cancel)
{
MakeMP3backgroundWorker.RunWorkerAsync(saveToMP3Dialog.FileName);
}
}
private void MakeMP3backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
if (MainprogressBar.InvokeRequired)
{
MainprogressBar.Invoke(new MethodInvoker(delegate
{
MainprogressBar.Value = e.ProgressPercentage;
}));
}
else
{
MainprogressBar.Value = e.ProgressPercentage;
}
}
private void MakeMP3backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
if (MainprogressBar.InvokeRequired)
{
MainprogressBar.Invoke(new MethodInvoker(delegate
{
MainprogressBar.Visible = true;
MainprogressBar.Value = 0;
saveListToMP3ToolStripMenuItem.Enabled = false;
}));
}
string fileName = (string) e.Argument;
PresenterFolder.ReferenceList tempRefList = getCurrentVerseList();
IAudioGenerator generator = new VoiceRssAudioFileMaker();
generator.MakeFileFromText(fileName, _presenter.putVersesToStringForTTS(tempRefList),
string.Empty, -1, (BackgroundWorker)sender);
/*
AudioFileMaker.MakeFileFromText(fileName, _presenter.putVersesToStringForTTS( tempRefList),
_presenter.Settings.CurrentTTSVoice.VoiceInfo.Name, _presenter.Settings.TTS_Rate, (BackgroundWorker) sender);
*/
}
private void MakeMP3backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MainprogressBar.Visible = false;
MainprogressBar.Value = 0;
saveListToMP3ToolStripMenuItem.Enabled = true;
}
private void saveToMP3OptionsToolStripMenuItem_Click(object sender, EventArgs e)
{
To_MP3_Options mp3Options = new To_MP3_Options(_presenter);
mp3Options.ShowDialog();
}
private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
{
AboutBox about = new AboutBox();
about.ShowDialog();
}
private void pasteToProgramToolStripButton_Click(object sender, EventArgs e)
{
sendAllVersesToClipBoard();
BringWindowToTop(ProcessWatcher.LastHandle);
SendKeys.Send("^V");
}
private void copyReferencesToolStripButton_Click(object sender, EventArgs e)
{
var refList = _selectedVersesControl.GetReferenceList();
if (refList == null || refList.Items == null) return;
var referencesText = refList.Items.GetReferences();
if (String.IsNullOrWhiteSpace(referencesText)) return;
Clipboard.SetText(referencesText);
}
[DllImport("user32.dll", SetLastError = true)]
private static extern bool BringWindowToTop(IntPtr hWnd);
}
}