ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/AE/Installer/trunk/source/main_window.cpp
Revision: 503
Committed: Wed Mar 24 07:12:25 2010 UTC (15 years, 6 months ago) by gumby
Content type: text/x-c++src
File size: 25655 byte(s)
Log Message:
Added button to change the current directory
Fixed about window by adding a ->ShowModal (how did it get deleted?)
Fixed refresh button
Cleaned up replace_installer.bat (i think...)

File Contents

# Content
1 /***************************************************************************\
2 | Project: AE Installer |
3 | By: Gumby & Iritscen |
4 | File: Main_Window.cpp |
5 | Function: Handles the GUI. |
6 | Created: 07/05/2009 20:38:25 |
7 \***************************************************************************/
8
9 #ifndef NTDDI_VERSION
10 #define NTDDI_VERSION NTDDI_WIN7
11 #endif
12 #ifdef WIN32
13 #include <windows.h>
14 #include <shobjidl.h>
15 HWND Handle;
16 ITaskbarList *pTaskbarList;
17 ITaskbarList3 *pTaskbarList3;
18 #endif
19
20 #include <boost/thread/mutex.hpp>
21 // For compilers that support precompilation, includes "wx/wx.h".
22 #include "wx/wxprec.h"
23
24 #ifdef __BORLANDC__
25 #pragma hdrstop
26 #endif
27
28 #ifndef WX_PRECOMP
29 #include "wx/wx.h"
30 #endif
31
32 ////@begin includes
33 #include "about.h"
34 #include "main_window.h"
35 #include "installer.h"
36 ////@end includes
37
38 ////@begin XPM images
39 #include "aelogosmall.xpm"
40 #include "undo.xpm"
41 #include "fileopen.xpm"
42 #include "filesaveas.xpm"
43 #include "quit.xpm"
44 ////@end XPM images
45
46 bool busy = false;
47 int updateStatus;
48 bool installerJustUpdated = false;
49 vector<string> globalInstalledMods;
50 vector<ModPackage> globalPackages;
51 // Variable declarations
52 #ifdef WIN32
53 bool splitInstances = true;
54 string strImportOption = "-import:nosep";
55 string strOniSplit = "Onisplit.exe";
56 #else
57 bool splitInstances = false;
58 string strImportOption = "-import:sep";
59 string strOniSplit = "mono Onisplit.exe";
60 #endif
61
62 /*
63 * MainWindow type definition
64 */
65
66 IMPLEMENT_CLASS( MainWindow, wxFrame )
67
68
69 /*
70 * MainWindow event table definition
71 */
72
73 BEGIN_EVENT_TABLE( MainWindow, wxFrame )
74
75 ////@begin MainWindow event table entries
76 EVT_CHECKBOX( SelectAll_Checkbox, MainWindow::OnSelectAllCheckboxClick )
77
78 EVT_BUTTON( Refresh_Button, MainWindow::OnRefreshButtonClick )
79
80 EVT_LISTBOX( Mods_CheckboxList1, MainWindow::OnModsCheckboxList1Selected )
81 EVT_CHECKLISTBOX( Mods_CheckboxList1, MainWindow::OnModsCheckboxList1Toggled )
82
83 EVT_UPDATE_UI( ID_STATUSBAR, MainWindow::OnStatusbarUpdate )
84
85 EVT_BUTTON( Install_Button, MainWindow::OnInstallButtonClick )
86
87 EVT_RADIOBUTTON( Sep_RadioButton, MainWindow::OnSepRadioButtonSelected )
88
89 EVT_RADIOBUTTON( NoSep_RadioButton, MainWindow::OnNoSepRadioButtonSelected )
90
91 EVT_RADIOBUTTON( Seperated_RadioButton, MainWindow::OnSeperatedRadioButtonSelected )
92
93 EVT_RADIOBUTTON( Complete_RadioButton, MainWindow::OnCompleteRadioButtonSelected )
94
95 EVT_BUTTON( ReGlobalize_Button, MainWindow::OnReGlobalizeButtonClick )
96
97 EVT_MENU( wxID_LOAD, MainWindow::OnLoadClick )
98
99 EVT_MENU( wxID_SAVE, MainWindow::OnSaveClick )
100
101 EVT_MENU( wxID_EXIT, MainWindow::OnExitClick )
102
103 EVT_MENU( wxID_OPTIONS, MainWindow::OnOptionsClick )
104
105 EVT_MENU( wxID_ABOUT, MainWindow::OnAboutClick )
106
107 EVT_BUTTON( Dir_Button, MainWindow::OnDirButtonClick )
108 ////@end MainWindow event table entries
109
110 END_EVENT_TABLE()
111
112
113 /*
114 * MainWindow constructors
115 */
116
117 MainWindow::MainWindow()
118 {
119 Init();
120 }
121
122 MainWindow::MainWindow( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
123 {
124 Init();
125 Create( parent, id, caption, pos, size, style );
126 }
127
128
129 /*
130 * MainWindow creator
131 */
132
133 bool MainWindow::Create( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
134 {
135 ////@begin MainWindow creation
136 wxFrame::Create( parent, id, caption, pos, size, style );
137
138 CreateControls();
139 SetIcon(GetIconResource(wxT("aelogosmall.png")));
140 Centre();
141 ////@end MainWindow creation
142 return true;
143 }
144
145 /*
146 * MainWindow destructor
147 */
148
149 MainWindow::~MainWindow()
150 {
151 ////@begin MainWindow destruction
152 ////@end MainWindow destruction
153 }
154
155 /*
156 * Member initialisation
157 */
158
159 void MainWindow::Init()
160 {
161 ////@begin MainWindow member initialisation
162 MainSplitter = NULL;
163 SelectAll = NULL;
164 RefreshButton = NULL;
165 Mods_CheckboxList = NULL;
166 titleText = NULL;
167 creatorText = NULL;
168 descriptionText = NULL;
169 StatusArea = NULL;
170 ProgressBar = NULL;
171 InstallButton = NULL;
172 OptionsPanel = NULL;
173 SepRadio = NULL;
174 NoSepRadio = NULL;
175 SeperatedRadio = NULL;
176 CompleteRadio = NULL;
177 ReglobalizeButton = NULL;
178
179 ChangeDirectoryButton = NULL;
180 ////@end MainWindow member initialisation
181 }
182
183 /*
184 * Control creation for MainWindow
185 */
186 wxStatusBar **TheStatusBar;
187 wxButton* TheInstallButton;
188 wxGauge* TheProgressBar;
189 void MainWindow::CreateControls()
190 {
191 ////@begin MainWindow content construction
192 MainWindow* itemFrame1 = this;
193
194 wxMenuBar* menuBar = new wxMenuBar;
195 wxMenu* itemMenu37 = new wxMenu;
196 {
197 wxMenuItem* menuItem = new wxMenuItem(itemMenu37, wxID_LOAD, _("&Load Configuration..."), wxEmptyString, wxITEM_NORMAL);
198 wxBitmap bitmap(itemFrame1->GetBitmapResource(wxT("fileopen.xpm")));
199 menuItem->SetBitmap(bitmap);
200 itemMenu37->Append(menuItem);
201 }
202 {
203 wxMenuItem* menuItem = new wxMenuItem(itemMenu37, wxID_SAVE, _("&Save Configuration..."), wxEmptyString, wxITEM_NORMAL);
204 wxBitmap bitmap(itemFrame1->GetBitmapResource(wxT("filesaveas.xpm")));
205 menuItem->SetBitmap(bitmap);
206 itemMenu37->Append(menuItem);
207 }
208 itemMenu37->AppendSeparator();
209 {
210 wxMenuItem* menuItem = new wxMenuItem(itemMenu37, wxID_EXIT, _("Exit"), wxEmptyString, wxITEM_NORMAL);
211 wxBitmap bitmap(itemFrame1->GetBitmapResource(wxT("quit.xpm")));
212 menuItem->SetBitmap(bitmap);
213 itemMenu37->Append(menuItem);
214 }
215 menuBar->Append(itemMenu37, _("&File"));
216 wxMenu* itemMenu42 = new wxMenu;
217 itemMenu42->Append(wxID_OPTIONS, _("Show Advanced Options..."), wxEmptyString, wxITEM_CHECK);
218 menuBar->Append(itemMenu42, _("Options"));
219 //#ifdef WIN32
220 // itemMenu44->Append(wxID_ABOUT, _("About"), wxEmptyString, wxITEM_NORMAL);
221 // menuBar->Append(itemMenu44, _("Help"));
222 //#else
223 itemMenu37->Append(wxID_ABOUT, _("About"), wxEmptyString, wxITEM_NORMAL);
224 //#endif
225
226 itemFrame1->SetMenuBar(menuBar);
227
228 wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL);
229 itemFrame1->SetSizer(itemBoxSizer2);
230
231 MainSplitter = new wxSplitterWindow( itemFrame1, ID_SPLITTERWINDOW, wxDefaultPosition, wxSize(100, 100), wxSP_LIVE_UPDATE|wxNO_BORDER );
232 MainSplitter->SetMinimumPaneSize(1);
233 MainSplitter->SetName(_T("MainSplitter"));
234
235 wxPanel* itemPanel4 = new wxPanel( MainSplitter, ID_PANEL, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL );
236 wxBoxSizer* itemBoxSizer5 = new wxBoxSizer(wxVERTICAL);
237 itemPanel4->SetSizer(itemBoxSizer5);
238
239 wxBoxSizer* itemBoxSizer6 = new wxBoxSizer(wxHORIZONTAL);
240 itemBoxSizer5->Add(itemBoxSizer6, 0, wxGROW|wxALL, 0);
241 SelectAll = new wxCheckBox( itemPanel4, SelectAll_Checkbox, _("Select All/None"), wxDefaultPosition, wxDefaultSize, wxCHK_3STATE );
242 SelectAll->SetValue(false);
243 SelectAll->SetName(_T("SelectAll_Checkbox"));
244 itemBoxSizer6->Add(SelectAll, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
245
246 RefreshButton = new wxBitmapButton( itemPanel4, Refresh_Button, itemFrame1->GetBitmapResource(wxT("undo.xpm")), wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW );
247 RefreshButton->SetName(_T("RefreshButton"));
248 itemBoxSizer6->Add(RefreshButton, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxTOP|wxBOTTOM, 5);
249
250 wxArrayString Mods_CheckboxListStrings;
251 Mods_CheckboxList = new wxCheckListBox( itemPanel4, Mods_CheckboxList1, wxDefaultPosition, wxDefaultSize, Mods_CheckboxListStrings, wxLB_HSCROLL );
252 Mods_CheckboxList->SetName(_T("Mods_CheckboxList"));
253 itemBoxSizer5->Add(Mods_CheckboxList, 1, wxGROW|wxALL, 0);
254
255 wxPanel* itemPanel10 = new wxPanel( MainSplitter, DescriptionHolder_Panel, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL );
256 itemPanel10->SetName(_T("DescriptionHolder_Panel"));
257 wxBoxSizer* itemBoxSizer11 = new wxBoxSizer(wxVERTICAL);
258 itemPanel10->SetSizer(itemBoxSizer11);
259
260 wxBoxSizer* itemBoxSizer12 = new wxBoxSizer(wxHORIZONTAL);
261 itemBoxSizer11->Add(itemBoxSizer12, 0, wxGROW|wxALL, 0);
262 wxBoxSizer* itemBoxSizer13 = new wxBoxSizer(wxVERTICAL);
263 itemBoxSizer12->Add(itemBoxSizer13, 1, wxALIGN_CENTER_VERTICAL|wxALL, 0);
264 titleText = new wxTextCtrl( itemPanel10, Title_Text, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY );
265 titleText->SetName(_T("Title_Text"));
266 titleText->SetBackgroundColour(wxColour(240, 240, 240));
267 itemBoxSizer13->Add(titleText, 1, wxGROW|wxLEFT, 5);
268
269 wxBoxSizer* itemBoxSizer15 = new wxBoxSizer(wxVERTICAL);
270 itemBoxSizer12->Add(itemBoxSizer15, 1, wxGROW|wxALL, 0);
271 creatorText = new wxTextCtrl( itemPanel10, Author_Text, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY|wxTE_RIGHT );
272 creatorText->SetName(_T("Author_Text"));
273 creatorText->SetBackgroundColour(wxColour(240, 240, 240));
274 itemBoxSizer15->Add(creatorText, 1, wxGROW|wxRIGHT, 5);
275
276 wxStaticLine* itemStaticLine17 = new wxStaticLine( itemPanel10, wxID_STATIC, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
277 itemStaticLine17->Show(false);
278 itemBoxSizer11->Add(itemStaticLine17, 0, wxGROW|wxALL, 5);
279
280 descriptionText = new wxTextCtrl( itemPanel10, Description_Text, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_READONLY|wxTE_RICH|wxTE_RICH2 );
281 descriptionText->SetName(_T("DescriptionName"));
282 descriptionText->SetBackgroundColour(wxColour(240, 240, 240));
283 itemBoxSizer11->Add(descriptionText, 1, wxGROW|wxLEFT|wxRIGHT, 5);
284
285 MainSplitter->SplitVertically(itemPanel4, itemPanel10, 200);
286 itemBoxSizer2->Add(MainSplitter, 1, wxGROW|wxALL, 0);
287
288 StatusArea = new wxStatusBar( itemFrame1, ID_STATUSBAR, 0 );
289 StatusArea->SetName(_T("StatusArea"));
290 StatusArea->SetFieldsCount(1);
291 string versionText = "AE Installer v" + (string)INSTALLER_VERSION;
292 StatusArea->SetStatusText(versionText.c_str(), 0);
293 itemBoxSizer2->Add(StatusArea, 0, wxGROW|wxALL, 0);
294
295 wxBoxSizer* itemBoxSizer20 = new wxBoxSizer(wxHORIZONTAL);
296 itemBoxSizer2->Add(itemBoxSizer20, 0, wxGROW|wxALL, 0);
297
298 ProgressBar = new wxGauge( itemFrame1, ProgressBar_Gauge, 1000, wxDefaultPosition, wxDefaultSize, wxGA_SMOOTH );
299 ProgressBar->SetValue(0);
300 itemBoxSizer20->Add(ProgressBar, 1, wxGROW|wxALL, 0);
301
302 InstallButton = new wxButton( itemFrame1, Install_Button, _("Install!"), wxDefaultPosition, wxDefaultSize, 0 );
303 itemBoxSizer20->Add(InstallButton, 0, wxGROW|wxALL, 0);
304
305 wxBoxSizer* itemBoxSizer23 = new wxBoxSizer(wxVERTICAL);
306 itemBoxSizer2->Add(itemBoxSizer23, 0, wxGROW|wxALL, 0);
307
308 OptionsPanel = new wxPanel( itemFrame1, ID_PANEL1, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL );
309 itemBoxSizer2->Add(OptionsPanel, 0, wxGROW, 0);
310
311 wxBoxSizer* itemBoxSizer25 = new wxBoxSizer(wxHORIZONTAL);
312 OptionsPanel->SetSizer(itemBoxSizer25);
313
314 wxBoxSizer* itemBoxSizer26 = new wxBoxSizer(wxVERTICAL);
315 itemBoxSizer25->Add(itemBoxSizer26, 0, wxGROW|wxALL, 5);
316
317 SepRadio = new wxRadioButton( OptionsPanel, Sep_RadioButton, _("Sep"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
318 SepRadio->SetValue(false);
319 if (MainWindow::ShowToolTips())
320 SepRadio->SetToolTip(_("For PC Demo and Mac"));
321 itemBoxSizer26->Add(SepRadio, 0, wxALIGN_LEFT|wxALL, 5);
322
323 NoSepRadio = new wxRadioButton( OptionsPanel, NoSep_RadioButton, _("NoSep"), wxDefaultPosition, wxDefaultSize, 0 );
324 NoSepRadio->SetValue(false);
325 if (MainWindow::ShowToolTips())
326 NoSepRadio->SetToolTip(_("For PC Retail"));
327 itemBoxSizer26->Add(NoSepRadio, 0, wxALIGN_LEFT|wxALL, 5);
328
329 wxStaticLine* itemStaticLine29 = new wxStaticLine( OptionsPanel, wxID_STATIC, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
330 itemBoxSizer25->Add(itemStaticLine29, 0, wxGROW|wxALL, 5);
331
332 wxBoxSizer* itemBoxSizer30 = new wxBoxSizer(wxVERTICAL);
333 itemBoxSizer25->Add(itemBoxSizer30, 0, wxGROW|wxALL, 5);
334
335 SeperatedRadio = new wxRadioButton( OptionsPanel, Seperated_RadioButton, _("Separated Level0"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP );
336 SeperatedRadio->SetValue(false);
337 SeperatedRadio->SetName(_T("Seperated_RadioButton"));
338 itemBoxSizer30->Add(SeperatedRadio, 0, wxALIGN_LEFT|wxALL, 5);
339
340 CompleteRadio = new wxRadioButton( OptionsPanel, Complete_RadioButton, _("Complete Level0"), wxDefaultPosition, wxDefaultSize, 0 );
341 CompleteRadio->SetValue(false);
342 CompleteRadio->SetName(_T("Complete_RadioButton"));
343 itemBoxSizer30->Add(CompleteRadio, 0, wxALIGN_LEFT|wxALL, 5);
344
345 wxStaticLine* itemStaticLine33 = new wxStaticLine( OptionsPanel, wxID_STATIC, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
346 itemBoxSizer25->Add(itemStaticLine33, 0, wxGROW|wxALL, 5);
347
348 wxBoxSizer* itemBoxSizer34 = new wxBoxSizer(wxVERTICAL);
349 itemBoxSizer25->Add(itemBoxSizer34, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
350
351 ReglobalizeButton = new wxButton( OptionsPanel, ReGlobalize_Button, _("Reglobalize"), wxDefaultPosition, wxDefaultSize, 0 );
352 ReglobalizeButton->SetName(_T("Reglobalize_Button"));
353 itemBoxSizer34->Add(ReglobalizeButton, 0, wxGROW|wxALL, 5);
354
355 wxStaticLine* itemStaticLine100 = new wxStaticLine( OptionsPanel, wxID_STATIC, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
356 itemBoxSizer25->Add(itemStaticLine100, 0, wxGROW|wxALL, 5);
357
358 ChangeDirectoryButton = new wxButton( OptionsPanel, Dir_Button, _("Change Dir"), wxDefaultPosition, wxDefaultSize, 0 );
359 ChangeDirectoryButton->SetName(_T("Dir_Button"));
360 itemBoxSizer34->Add(ChangeDirectoryButton, 0, wxGROW|wxALL, 5);
361
362 // Connect events and objects
363 Mods_CheckboxList->Connect(Mods_CheckboxList1, wxEVT_CREATE, wxWindowCreateEventHandler(MainWindow::ModList_OnCreate), NULL, this);
364 ////@end MainWindow content construction
365 #ifdef WIN32
366 Handle = (HWND)GetHWND();
367 ::CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, IID_ITaskbarList, (void **)&pTaskbarList);
368 #endif
369
370 updateStatus = GetUpdateStatus(&currentAE, &updateAE, &installerJustUpdated);
371
372 globalPackages = getPackages();
373 globalInstalledMods = getInstallString();
374 for (unsigned int i = 0; i < globalPackages.size(); i++)
375 {
376 Mods_CheckboxList->Append(globalPackages[i].name.c_str());
377 if (binary_search(globalInstalledMods.begin(), globalInstalledMods.end(), globalPackages[i].modStringName)) Mods_CheckboxList->Check(i);
378 }
379
380 TheStatusBar = &StatusArea;
381 TheInstallButton = InstallButton;
382 TheProgressBar = ProgressBar;
383 OptionsPanel->Hide();
384
385 if(splitInstances) SeperatedRadio->SetValue(true);
386 else CompleteRadio->SetValue(true);
387 if(strImportOption == "-import:nosep") NoSepRadio->SetValue(true);
388 else SepRadio->SetValue(true);
389
390 #ifdef WIN32
391 RedirectIOToConsole();
392 HWND hWnd = GetConsoleWindow();
393 ShowWindow( hWnd, SW_HIDE );
394 #endif
395 }
396
397 /*
398 * wxEVT_COMMAND_CHECKBOX_CLICKED event handler for SelectAll_Checkbox
399 */
400
401 void MainWindow::OnSelectAllCheckboxClick( wxCommandEvent& event )
402 {
403 switch(SelectAll->Get3StateValue()) {
404 case wxCHK_UNCHECKED:
405 for(unsigned int i = 0; i < globalPackages.size(); i++) Mods_CheckboxList->Check(i, false);
406 break;
407 case wxCHK_CHECKED:
408 for(unsigned int i = 0; i < globalPackages.size(); i++) Mods_CheckboxList->Check(i, true);
409 break;
410 case wxCHK_UNDETERMINED:
411 for(unsigned int i = 0; i < globalPackages.size(); i++) Mods_CheckboxList->Check(i, false);
412 break;
413 }
414 }
415
416 /*
417 * wxEVT_CREATE event handler for Mods_CheckboxList
418 */
419
420 void MainWindow::ModList_OnCreate( wxWindowCreateEvent& event )
421 {
422
423 }
424
425
426 /*
427 * Should we show tooltips?
428 */
429
430 bool MainWindow::ShowToolTips()
431 {
432 return true;
433 }
434
435 /*
436 * Get bitmap resources
437 */
438
439 wxBitmap MainWindow::GetBitmapResource( const wxString& name )
440 {
441 // Bitmap retrieval
442 ////@begin MainWindow bitmap retrieval
443 wxUnusedVar(name);
444 if (name == _T("undo.xpm"))
445 {
446 wxBitmap bitmap( undo_xpm);
447 return bitmap;
448 }
449 else if (name == _T("fileopen.xpm"))
450 {
451 wxBitmap bitmap( fileopen_xpm);
452 return bitmap;
453 }
454 else if (name == _T("filesaveas.xpm"))
455 {
456 wxBitmap bitmap( filesaveas_xpm);
457 return bitmap;
458 }
459 else if (name == _T("quit.xpm"))
460 {
461 wxBitmap bitmap( quit_xpm);
462 return bitmap;
463 }
464 return wxNullBitmap;
465 ////@end MainWindow bitmap retrieval
466 }
467
468 /*
469 * Get icon resources
470 */
471
472 wxIcon MainWindow::GetIconResource( const wxString& name )
473 {
474 // Icon retrieval
475 ////@begin MainWindow icon retrieval
476 wxUnusedVar(name);
477 if (name == _T("aelogosmall.png"))
478 {
479 wxIcon icon(aelogosmall_xpm);
480 return icon;
481 }
482 return wxNullIcon;
483 ////@end MainWindow icon retrieval
484 }
485
486 /*
487 * wxEVT_COMMAND_LISTBOX_SELECTED event handler for Mods_CheckboxList1
488 */
489
490 void MainWindow::OnModsCheckboxList1Selected( wxCommandEvent& event )
491 {
492 titleText->SetValue(globalPackages[event.GetSelection()].name.c_str());
493 creatorText->SetValue(globalPackages[event.GetSelection()].creator.c_str());
494 descriptionText->SetValue(globalPackages[event.GetSelection()].readme.c_str());
495 }
496
497 /*
498 * wxEVT_COMMAND_CHECKLISTBOX_TOGGLED event handler for Mods_CheckboxList1
499 */
500
501 void MainWindow::OnModsCheckboxList1Toggled( wxCommandEvent& event )
502 {
503 SelectAll->Set3StateValue(wxCHK_UNDETERMINED);
504 if(event.GetInt()) {
505 /*
506 switch(SelectAll->Get3StateValue()) {
507 case wxCHK_UNCHECKED:
508 break;
509 case wxCHK_CHECKED:
510 break;
511 case wxCHK_UNDETERMINED :
512 break;
513 }
514 */
515 }
516 }
517
518
519 /*
520 * wxEVT_COMMAND_MENU_SELECTED event handler for wxID_OPTIONS
521 */
522
523 void MainWindow::OnOptionsClick( wxCommandEvent& event )
524 {
525 if (!event.GetInt() ) {
526 OptionsPanel->Hide();
527
528 this->SetSize(this->GetRect().GetWidth(), this->GetRect().GetHeight()-OptionsPanel->GetRect().GetHeight());}
529 else {
530 wxMessageDialog* YesNoDialog = new wxMessageDialog(this, "WARNING: These options are for advanced users only, use with caution.",
531 "AE Installer Alert", wxOK | wxICON_EXCLAMATION , wxDefaultPosition);
532 YesNoDialog->ShowModal();
533 OptionsPanel->Show();
534 this->SetSize(this->GetRect().GetWidth(), this->GetRect().GetHeight()+OptionsPanel->GetRect().GetHeight()+1);
535 this->SetSize(this->GetRect().GetWidth(), this->GetRect().GetHeight()-1);
536 }
537 }
538
539 /*
540 * wxEVT_COMMAND_MENU_SELECTED event handler for wxID_EXIT
541 */
542
543 void MainWindow::OnExitClick( wxCommandEvent& event )
544 {
545 exit(0);
546 }
547
548 /*
549 * wxEVT_COMMAND_BUTTON_CLICKED event handler for Install_Button
550 */
551
552 struct recompile
553 {
554 recompile(vector<string> localPackages) : thePackages(localPackages) { }
555 void operator()()
556 {
557 TheInstallButton->Disable();
558 recompileAll(thePackages);
559 TheInstallButton->Enable();
560
561 }
562 vector<string> thePackages;
563 };
564
565 void globalize2(void) {
566 TheInstallButton->Disable();
567 globalizeData();
568 TheInstallButton->Enable();
569 }
570
571 void MainWindow::OnInstallButtonClick( wxCommandEvent& event )
572 {
573 vector<string> localPackages;
574 localPackages.push_back("00000Globalize");
575 for(unsigned int i = 0; i < globalPackages.size(); i++) if(Mods_CheckboxList->IsChecked(i)) localPackages.push_back( globalPackages[i].modStringName );
576 if ( !localPackages.empty() ) {
577 sort(localPackages.begin(), localPackages.end());
578 localPackages[0] = "Globalize";
579 this->InstallButton->Disable();
580 this->ReglobalizeButton->Disable();
581 #ifdef WIN32
582 recompile packages(localPackages);
583 boost::thread thrd(packages);
584 #else
585 recompileAll(localPackages);
586 #endif
587 this->InstallButton->Enable();
588 this->ReglobalizeButton->Enable();
589 }
590 }
591
592 void setProgressBar( int i )
593 {
594 #ifdef WIN32
595 if (SUCCEEDED(pTaskbarList->QueryInterface(IID_ITaskbarList3, (void **)&pTaskbarList3)))
596 {
597 pTaskbarList3->SetProgressValue(Handle,i, 1000);
598 if ( i == 0 )
599 {
600 pTaskbarList3->SetProgressState(Handle,TBPF_NOPROGRESS);
601 }
602 }
603 #endif
604 TheProgressBar->SetValue(i);
605 }
606
607 /*
608 * wxEVT_UPDATE_UI event handler for ID_STATUSBAR
609 */
610
611 void MainWindow::OnStatusbarUpdate( wxUpdateUIEvent& event )
612 {
613 ////@begin wxEVT_UPDATE_UI event handler for ID_STATUSBAR in MainWindow.
614 // Before editing this code, remove the block markers.
615 event.Skip();
616 ////@end wxEVT_UPDATE_UI event handler for ID_STATUSBAR in MainWindow.
617 }
618
619 /*
620 * wxEVT_COMMAND_MENU_SELECTED event handler for wxID_ABOUT
621 */
622
623 void MainWindow::OnAboutClick( wxCommandEvent& event )
624 {
625 ////@begin wxEVT_COMMAND_MENU_SELECTED event handler for wxID_ABOUT in MainWindow.
626 // Before editing this code, remove the block markers.
627 // TODO: Make About window work again!
628 About* window = new About(this);
629 window->ShowModal();
630 window->Destroy();
631 ////@end wxEVT_COMMAND_MENU_SELECTED event handler for wxID_ABOUT in MainWindow.
632 }
633
634 /*
635 * wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for NoSep_RadioButton
636 */
637
638 void MainWindow::OnNoSepRadioButtonSelected( wxCommandEvent& event )
639 {
640 static_cast<string>("-import:nosep");
641 }
642
643 /*
644 * wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for Sep_RadioButton
645 */
646
647 void MainWindow::OnSepRadioButtonSelected( wxCommandEvent& event )
648 {
649 static_cast<string>("-import:sep");
650 }
651
652 /*
653 * wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for Separated_RadioButton
654 */
655
656 /*
657 * wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for Complete_RadioButton
658 */
659
660 void MainWindow::OnCompleteRadioButtonSelected( wxCommandEvent& event )
661 {
662 splitInstances = false;
663 }
664
665 /*
666 * wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_BITMAPBUTTON
667 */
668
669 void MainWindow::OnRefreshButtonClick( wxCommandEvent& event )
670 {
671 globalPackages = getPackages();
672 refreshMods(globalInstalledMods);
673 }
674
675 /*
676 * wxEVT_COMMAND_MENU_SELECTED event handler for wxID_LOAD
677 */
678
679 // TODO: Make refreshMods actually refresh the list in the window of available mods so we can see any new package info and deleted mods are removed from the list
680 void MainWindow::refreshMods (vector<string> s)
681 {
682 Mods_CheckboxList->Clear();
683 for (unsigned int i = 0; i < globalPackages.size(); i++) {
684 Mods_CheckboxList->Append(globalPackages[i].name.c_str());
685 if( binary_search(s.begin(), s.end(), globalPackages[i].modStringName ) )
686 Mods_CheckboxList->Check(i);
687 }
688 }
689
690 void MainWindow::OnLoadClick( wxCommandEvent& event )
691 {
692 if (busy == 1) return;
693 static const wxChar *FILETYPES = _T(
694 "Mod Loadouts (*.cfg)|*.cfg|"
695 "All files (*.*)|*.*"
696 );
697
698 wxFileDialog* openFileDialog =
699 new wxFileDialog( this, _("Open Mod Loadout"), "", "", FILETYPES,
700 wxOPEN, wxDefaultPosition);
701
702 if ( openFileDialog->ShowModal() == wxID_OK )
703 {
704 refreshMods(getInstallString( string(openFileDialog->GetPath()) ));
705 }
706 }
707
708 /*
709 * wxEVT_COMMAND_MENU_SELECTED event handler for wxID_SAVE
710 */
711
712 void MainWindow::OnSaveClick( wxCommandEvent& event )
713 {
714 if (busy == 1) return;
715 static const wxChar *FILETYPES = _T(
716 "Mod Loadouts (*.cfg)|*.cfg|"
717 "All files (*.*)|*.*"
718 );
719
720 wxFileDialog* openFileDialog =
721 new wxFileDialog( this, _("Open file"), "", "", FILETYPES,
722 wxSAVE, wxDefaultPosition);
723
724 if ( openFileDialog->ShowModal() == wxID_OK )
725 {
726 if ( exists( openFileDialog->GetPath().c_str() ) )
727 {
728 remove( openFileDialog->GetPath().c_str() );
729 }
730
731 ofstream file(openFileDialog->GetPath().c_str());
732
733 vector<string>list;
734 for(unsigned int i = 0; i < globalPackages.size(); i++) if(Mods_CheckboxList->IsChecked(i)) list.push_back( globalPackages[i].modStringName );
735 vector<string>::iterator begin_iter = list.begin();
736 vector<string>::iterator end_iter = list.end();
737
738 sort( list.begin(), list.end() );
739
740 for( ; begin_iter != end_iter; ++begin_iter) {
741 file << *begin_iter << " ";
742 }
743
744 file.close();
745 file.clear();
746 }
747 }
748
749 /*
750 * wxEVT_COMMAND_BUTTON_CLICKED event handler for ReGlobalize_Button
751 */
752
753 void MainWindow::OnReGlobalizeButtonClick( wxCommandEvent& event )
754 {
755 string YesNoMsg = "WARNING: This will DELETE the Edition's GameDataFolder and recreate it from the vanilla Oni game data.\n";
756 YesNoMsg = YesNoMsg + "Are you SURE you want to do this?";
757 wxMessageDialog* YesNoDialog = new wxMessageDialog(this, YesNoMsg.c_str(), "AE Installer Alert", wxYES_NO | wxICON_EXCLAMATION , wxDefaultPosition);
758
759 if (YesNoDialog->ShowModal() == wxID_NO)
760 {
761 //if the user said no...
762 }
763 else
764 {
765 this->InstallButton->Disable();
766 this->ReglobalizeButton->Disable();
767 #ifdef WIN32
768 boost::thread thrd2(globalizeData);
769 //globalizeData();
770 //boost::thread::create_thread(&globalizeData);
771 // boost::thread_group Tg;
772 // Tg.create_thread( &globalizeData(), this );
773 #else
774 globalizeData();
775 #endif
776 this->InstallButton->Enable();
777 this->ReglobalizeButton->Enable();
778 }
779 }
780 /*
781 * wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for Separated_RadioButton
782 */
783
784 /*
785 * wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for Seperated_RadioButton
786 */
787
788 void MainWindow::OnSeperatedRadioButtonSelected( wxCommandEvent& event )
789 {
790 splitInstances = true;
791 }
792
793 void MainWindow::OnDirButtonClick( wxCommandEvent& event )
794 {
795 wxDirDialog* newDir = new wxDirDialog(this, "Set current directory", "", wxDD_DEFAULT_STYLE,
796 wxDefaultPosition, wxDefaultSize, "wxDirCtrl");
797 newDir->ShowModal();
798 if(newDir->GetPath()[0]) current_path( (path)newDir->GetPath() );
799 OnRefreshButtonClick(event);
800 }

Properties

Name Value
svn:executable *