source: AE/Installer/trunk/source/main_window.cpp@ 501

Last change on this file since 501 was 500, checked in by iritscen, 15 years ago

Changed 'Installer replacement failed' message so user can choose not to quit.
Fixed BSL mod package-detecting bug and other dubious flag-detecting code.
Added check for required Installer version when scanning package info files.

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