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

Last change on this file since 536 was 526, checked in by gumby, 15 years ago

Fixed bug with BSL
PCs now use complete dats instead of seperated

  • Property svn:executable set to *
File size: 24.9 KB
RevLine 
[487]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
[394]9#ifndef NTDDI_VERSION
10#define NTDDI_VERSION NTDDI_WIN7
11#endif
12#ifdef WIN32
[487]13#include <windows.h>
[394]14#include <shobjidl.h>
15HWND Handle;
16ITaskbarList *pTaskbarList;
17ITaskbarList3 *pTaskbarList3;
18#endif
19
[328]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
[385]33#include "about.h"
[487]34#include "main_window.h"
35#include "installer.h"
[328]36////@end includes
37
38////@begin XPM images
[385]39#include "aelogosmall.xpm"
40#include "undo.xpm"
[328]41#include "fileopen.xpm"
42#include "filesaveas.xpm"
43#include "quit.xpm"
44////@end XPM images
45
[487]46bool busy = false;
[500]47int updateStatus;
48bool installerJustUpdated = false;
[487]49vector<string> globalInstalledMods;
50vector<ModPackage> globalPackages;
51// Variable declarations
52#ifdef WIN32
[526]53bool splitInstances = false;
[487]54string strImportOption = "-import:nosep";
55string strOniSplit = "Onisplit.exe";
56#else
57bool splitInstances = false;
58string strImportOption = "-import:sep";
59string strOniSplit = "mono Onisplit.exe";
60#endif
[328]61
62/*
[355]63* MainWindow type definition
64*/
[328]65
66IMPLEMENT_CLASS( MainWindow, wxFrame )
67
68
69/*
[355]70* MainWindow event table definition
71*/
[328]72
73BEGIN_EVENT_TABLE( MainWindow, wxFrame )
74
75////@begin MainWindow event table entries
[385]76 EVT_CHECKBOX( SelectAll_Checkbox, MainWindow::OnSelectAllCheckboxClick )
[328]77
[385]78 EVT_BUTTON( Refresh_Button, MainWindow::OnRefreshButtonClick )
[328]79
[385]80 EVT_LISTBOX( Mods_CheckboxList1, MainWindow::OnModsCheckboxList1Selected )
81 EVT_CHECKLISTBOX( Mods_CheckboxList1, MainWindow::OnModsCheckboxList1Toggled )
[328]82
[385]83 EVT_UPDATE_UI( ID_STATUSBAR, MainWindow::OnStatusbarUpdate )
[328]84
[385]85 EVT_BUTTON( Install_Button, MainWindow::OnInstallButtonClick )
[328]86
[385]87 EVT_RADIOBUTTON( Sep_RadioButton, MainWindow::OnSepRadioButtonSelected )
[328]88
[385]89 EVT_RADIOBUTTON( NoSep_RadioButton, MainWindow::OnNoSepRadioButtonSelected )
[328]90
[385]91 EVT_RADIOBUTTON( Seperated_RadioButton, MainWindow::OnSeperatedRadioButtonSelected )
[328]92
[385]93 EVT_RADIOBUTTON( Complete_RadioButton, MainWindow::OnCompleteRadioButtonSelected )
[328]94
[385]95 EVT_BUTTON( ReGlobalize_Button, MainWindow::OnReGlobalizeButtonClick )
[328]96
[385]97 EVT_MENU( wxID_LOAD, MainWindow::OnLoadClick )
[328]98
[385]99 EVT_MENU( wxID_SAVE, MainWindow::OnSaveClick )
[328]100
[385]101 EVT_MENU( wxID_EXIT, MainWindow::OnExitClick )
[328]102
[385]103 EVT_MENU( wxID_OPTIONS, MainWindow::OnOptionsClick )
[328]104
[385]105 EVT_MENU( wxID_ABOUT, MainWindow::OnAboutClick )
[328]106
[503]107 EVT_BUTTON( Dir_Button, MainWindow::OnDirButtonClick )
[328]108////@end MainWindow event table entries
109
110END_EVENT_TABLE()
111
112
113/*
[355]114* MainWindow constructors
115*/
[328]116
117MainWindow::MainWindow()
[503]118{
[355]119 Init();
[328]120}
121
122MainWindow::MainWindow( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
123{
[355]124 Init();
125 Create( parent, id, caption, pos, size, style );
[328]126}
127
128
129/*
[355]130* MainWindow creator
131*/
[328]132
133bool MainWindow::Create( wxWindow* parent, wxWindowID id, const wxString& caption, const wxPoint& pos, const wxSize& size, long style )
134{
[355]135 ////@begin MainWindow creation
[385]136 wxFrame::Create( parent, id, caption, pos, size, style );
[328]137
[385]138 CreateControls();
139 SetIcon(GetIconResource(wxT("aelogosmall.png")));
140 Centre();
[355]141 ////@end MainWindow creation
142 return true;
[328]143}
144
145/*
[355]146* MainWindow destructor
147*/
[328]148
149MainWindow::~MainWindow()
150{
[355]151 ////@begin MainWindow destruction
152 ////@end MainWindow destruction
[328]153}
154
155/*
[355]156* Member initialisation
157*/
[328]158
159void MainWindow::Init()
160{
[355]161 ////@begin MainWindow member initialisation
[385]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;
[503]178
179 ChangeDirectoryButton = NULL;
[355]180 ////@end MainWindow member initialisation
[328]181}
182
183/*
[355]184* Control creation for MainWindow
185*/
[353]186wxStatusBar **TheStatusBar;
[328]187wxButton* TheInstallButton;
188wxGauge* TheProgressBar;
189void MainWindow::CreateControls()
190{
[355]191 ////@begin MainWindow content construction
[385]192 MainWindow* itemFrame1 = this;
[328]193
[385]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"));
[489]219//#ifdef WIN32
220// itemMenu44->Append(wxID_ABOUT, _("About"), wxEmptyString, wxITEM_NORMAL);
221// menuBar->Append(itemMenu44, _("Help"));
222//#else
[390]223 itemMenu37->Append(wxID_ABOUT, _("About"), wxEmptyString, wxITEM_NORMAL);
[489]224//#endif
[390]225
[385]226 itemFrame1->SetMenuBar(menuBar);
[328]227
[385]228 wxBoxSizer* itemBoxSizer2 = new wxBoxSizer(wxVERTICAL);
229 itemFrame1->SetSizer(itemBoxSizer2);
[328]230
[385]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"));
[328]234
[385]235 wxPanel* itemPanel4 = new wxPanel( MainSplitter, ID_PANEL, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL );
236 wxBoxSizer* itemBoxSizer5 = new wxBoxSizer(wxVERTICAL);
237 itemPanel4->SetSizer(itemBoxSizer5);
[328]238
[385]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);
[328]245
[385]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);
[328]249
[385]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);
[328]254
[385]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);
[328]259
[385]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);
[328]268
[385]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);
[328]275
[385]276 wxStaticLine* itemStaticLine17 = new wxStaticLine( itemPanel10, wxID_STATIC, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
277 itemStaticLine17->Show(false);
278 itemBoxSizer11->Add(itemStaticLine17, 0, wxGROW|wxALL, 5);
[328]279
[385]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);
[328]284
[385]285 MainSplitter->SplitVertically(itemPanel4, itemPanel10, 200);
286 itemBoxSizer2->Add(MainSplitter, 1, wxGROW|wxALL, 0);
[328]287
[385]288 StatusArea = new wxStatusBar( itemFrame1, ID_STATUSBAR, 0 );
289 StatusArea->SetName(_T("StatusArea"));
290 StatusArea->SetFieldsCount(1);
[487]291 string versionText = "AE Installer v" + (string)INSTALLER_VERSION;
292 StatusArea->SetStatusText(versionText.c_str(), 0);
[385]293 itemBoxSizer2->Add(StatusArea, 0, wxGROW|wxALL, 0);
[328]294
[385]295 wxBoxSizer* itemBoxSizer20 = new wxBoxSizer(wxHORIZONTAL);
296 itemBoxSizer2->Add(itemBoxSizer20, 0, wxGROW|wxALL, 0);
[328]297
[385]298 ProgressBar = new wxGauge( itemFrame1, ProgressBar_Gauge, 1000, wxDefaultPosition, wxDefaultSize, wxGA_SMOOTH );
299 ProgressBar->SetValue(0);
300 itemBoxSizer20->Add(ProgressBar, 1, wxGROW|wxALL, 0);
[328]301
[385]302 InstallButton = new wxButton( itemFrame1, Install_Button, _("Install!"), wxDefaultPosition, wxDefaultSize, 0 );
303 itemBoxSizer20->Add(InstallButton, 0, wxGROW|wxALL, 0);
[328]304
[385]305 wxBoxSizer* itemBoxSizer23 = new wxBoxSizer(wxVERTICAL);
306 itemBoxSizer2->Add(itemBoxSizer23, 0, wxGROW|wxALL, 0);
[328]307
[385]308 OptionsPanel = new wxPanel( itemFrame1, ID_PANEL1, wxDefaultPosition, wxDefaultSize, wxSUNKEN_BORDER|wxTAB_TRAVERSAL );
309 itemBoxSizer2->Add(OptionsPanel, 0, wxGROW, 0);
[328]310
[385]311 wxBoxSizer* itemBoxSizer25 = new wxBoxSizer(wxHORIZONTAL);
312 OptionsPanel->SetSizer(itemBoxSizer25);
[328]313
[385]314 wxBoxSizer* itemBoxSizer26 = new wxBoxSizer(wxVERTICAL);
315 itemBoxSizer25->Add(itemBoxSizer26, 0, wxGROW|wxALL, 5);
[328]316
[385]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);
[328]322
[385]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]328
[385]329 wxStaticLine* itemStaticLine29 = new wxStaticLine( OptionsPanel, wxID_STATIC, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
330 itemBoxSizer25->Add(itemStaticLine29, 0, wxGROW|wxALL, 5);
[328]331
[385]332 wxBoxSizer* itemBoxSizer30 = new wxBoxSizer(wxVERTICAL);
333 itemBoxSizer25->Add(itemBoxSizer30, 0, wxGROW|wxALL, 5);
[328]334
[385]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);
[328]339
[385]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);
[328]344
[385]345 wxStaticLine* itemStaticLine33 = new wxStaticLine( OptionsPanel, wxID_STATIC, wxDefaultPosition, wxDefaultSize, wxLI_VERTICAL );
346 itemBoxSizer25->Add(itemStaticLine33, 0, wxGROW|wxALL, 5);
[328]347
[385]348 wxBoxSizer* itemBoxSizer34 = new wxBoxSizer(wxVERTICAL);
349 itemBoxSizer25->Add(itemBoxSizer34, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5);
[328]350
[385]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);
[328]354
[503]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
[385]363 Mods_CheckboxList->Connect(Mods_CheckboxList1, wxEVT_CREATE, wxWindowCreateEventHandler(MainWindow::ModList_OnCreate), NULL, this);
[355]364 ////@end MainWindow content construction
[403]365#ifdef WIN32
[394]366 Handle = (HWND)GetHWND();
367 ::CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, IID_ITaskbarList, (void **)&pTaskbarList);
[403]368#endif
[500]369
370 updateStatus = GetUpdateStatus(&currentAE, &updateAE, &installerJustUpdated);
[390]371
[328]372 globalPackages = getPackages();
373 globalInstalledMods = getInstallString();
[500]374 for (unsigned int i = 0; i < globalPackages.size(); i++)
375 {
[355]376 Mods_CheckboxList->Append(globalPackages[i].name.c_str());
[500]377 if (binary_search(globalInstalledMods.begin(), globalInstalledMods.end(), globalPackages[i].modStringName)) Mods_CheckboxList->Check(i);
[328]378 }
379
[355]380 TheStatusBar = &StatusArea;
381 TheInstallButton = InstallButton;
382 TheProgressBar = ProgressBar;
383 OptionsPanel->Hide();
[390]384
[487]385 if(splitInstances) SeperatedRadio->SetValue(true);
[355]386 else CompleteRadio->SetValue(true);
387 if(strImportOption == "-import:nosep") NoSepRadio->SetValue(true);
388 else SepRadio->SetValue(true);
[357]389
[355]390#ifdef WIN32
391 RedirectIOToConsole();
392 HWND hWnd = GetConsoleWindow();
393 ShowWindow( hWnd, SW_HIDE );
394#endif
[328]395}
396
397/*
[355]398* wxEVT_COMMAND_CHECKBOX_CLICKED event handler for SelectAll_Checkbox
399*/
[328]400
401void MainWindow::OnSelectAllCheckboxClick( wxCommandEvent& event )
402{
[355]403 switch(SelectAll->Get3StateValue()) {
[328]404 case wxCHK_UNCHECKED:
[461]405 for(unsigned int i = 0; i < globalPackages.size(); i++) Mods_CheckboxList->Check(i, false);
[328]406 break;
407 case wxCHK_CHECKED:
[461]408 for(unsigned int i = 0; i < globalPackages.size(); i++) Mods_CheckboxList->Check(i, true);
[328]409 break;
410 case wxCHK_UNDETERMINED:
[461]411 for(unsigned int i = 0; i < globalPackages.size(); i++) Mods_CheckboxList->Check(i, false);
[328]412 break;
413 }
414}
415
416/*
[355]417* wxEVT_CREATE event handler for Mods_CheckboxList
418*/
[328]419
420void MainWindow::ModList_OnCreate( wxWindowCreateEvent& event )
421{
422
423}
424
425
426/*
[355]427* Should we show tooltips?
428*/
[328]429
430bool MainWindow::ShowToolTips()
431{
[355]432 return true;
[328]433}
434
435/*
[355]436* Get bitmap resources
437*/
[328]438
439wxBitmap MainWindow::GetBitmapResource( const wxString& name )
440{
[355]441 // Bitmap retrieval
442 ////@begin MainWindow bitmap retrieval
[385]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;
[355]465 ////@end MainWindow bitmap retrieval
[328]466}
467
468/*
[355]469* Get icon resources
470*/
[328]471
472wxIcon MainWindow::GetIconResource( const wxString& name )
473{
[355]474 // Icon retrieval
475 ////@begin MainWindow icon retrieval
[385]476 wxUnusedVar(name);
477 if (name == _T("aelogosmall.png"))
478 {
479 wxIcon icon(aelogosmall_xpm);
480 return icon;
481 }
482 return wxNullIcon;
[355]483 ////@end MainWindow icon retrieval
[328]484}
485
486/*
[355]487* wxEVT_COMMAND_LISTBOX_SELECTED event handler for Mods_CheckboxList1
488*/
[328]489
490void 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/*
[355]498* wxEVT_COMMAND_CHECKLISTBOX_TOGGLED event handler for Mods_CheckboxList1
499*/
[328]500
501void MainWindow::OnModsCheckboxList1Toggled( wxCommandEvent& event )
502{
503 SelectAll->Set3StateValue(wxCHK_UNDETERMINED);
504 if(event.GetInt()) {
[355]505 /*
[328]506 switch(SelectAll->Get3StateValue()) {
[355]507 case wxCHK_UNCHECKED:
[328]508 break;
[355]509 case wxCHK_CHECKED:
[328]510 break;
[355]511 case wxCHK_UNDETERMINED :
[328]512 break;
[355]513 }
514 */
[328]515 }
516}
517
518
519/*
[355]520* wxEVT_COMMAND_MENU_SELECTED event handler for wxID_OPTIONS
521*/
[328]522
523void MainWindow::OnOptionsClick( wxCommandEvent& event )
524{
525 if (!event.GetInt() ) {
526 OptionsPanel->Hide();
[385]527
[358]528 this->SetSize(this->GetRect().GetWidth(), this->GetRect().GetHeight()-OptionsPanel->GetRect().GetHeight());}
[328]529 else {
[487]530 wxMessageDialog* YesNoDialog = new wxMessageDialog(this, "WARNING: These options are for advanced users only, use with caution.",
[373]531 "AE Installer Alert", wxOK | wxICON_EXCLAMATION , wxDefaultPosition);
[358]532 YesNoDialog->ShowModal();
[328]533 OptionsPanel->Show();
[379]534 this->SetSize(this->GetRect().GetWidth(), this->GetRect().GetHeight()+OptionsPanel->GetRect().GetHeight()+1);
535 this->SetSize(this->GetRect().GetWidth(), this->GetRect().GetHeight()-1);
[328]536 }
537}
538
539/*
[355]540* wxEVT_COMMAND_MENU_SELECTED event handler for wxID_EXIT
541*/
[328]542
543void MainWindow::OnExitClick( wxCommandEvent& event )
544{
[355]545 exit(0);
[328]546}
547
548/*
[355]549* wxEVT_COMMAND_BUTTON_CLICKED event handler for Install_Button
550*/
[328]551
552struct recompile
553{
[355]554 recompile(vector<string> localPackages) : thePackages(localPackages) { }
555 void operator()()
556 {
[328]557 TheInstallButton->Disable();
[355]558 recompileAll(thePackages);
559 TheInstallButton->Enable();
[423]560
[355]561 }
562 vector<string> thePackages;
[328]563};
564
[423]565void globalize2(void) {
566 TheInstallButton->Disable();
567 globalizeData();
568 TheInstallButton->Enable();
569}
570
[328]571void MainWindow::OnInstallButtonClick( wxCommandEvent& event )
572{
573 vector<string> localPackages;
[423]574 localPackages.push_back("00000Globalize");
[461]575 for(unsigned int i = 0; i < globalPackages.size(); i++) if(Mods_CheckboxList->IsChecked(i)) localPackages.push_back( globalPackages[i].modStringName );
[328]576 if ( !localPackages.empty() ) {
[423]577 sort(localPackages.begin(), localPackages.end());
578 localPackages[0] = "Globalize";
[357]579 this->InstallButton->Disable();
580 this->ReglobalizeButton->Disable();
[353]581#ifdef WIN32
582 recompile packages(localPackages);
583 boost::thread thrd(packages);
584#else
585 recompileAll(localPackages);
586#endif
[357]587 this->InstallButton->Enable();
588 this->ReglobalizeButton->Enable();
[328]589 }
590}
591
[487]592void setProgressBar( int i )
593{
[394]594#ifdef WIN32
595if (SUCCEEDED(pTaskbarList->QueryInterface(IID_ITaskbarList3, (void **)&pTaskbarList3)))
596{
597 pTaskbarList3->SetProgressValue(Handle,i, 1000);
[487]598 if ( i == 0 )
599 {
600 pTaskbarList3->SetProgressState(Handle,TBPF_NOPROGRESS);
[394]601 }
602}
603#endif
[328]604 TheProgressBar->SetValue(i);
605}
606
607/*
[355]608* wxEVT_UPDATE_UI event handler for ID_STATUSBAR
609*/
[328]610
611void MainWindow::OnStatusbarUpdate( wxUpdateUIEvent& event )
612{
[355]613 ////@begin wxEVT_UPDATE_UI event handler for ID_STATUSBAR in MainWindow.
[385]614 // Before editing this code, remove the block markers.
615 event.Skip();
[355]616 ////@end wxEVT_UPDATE_UI event handler for ID_STATUSBAR in MainWindow.
[328]617}
618
619/*
[355]620* wxEVT_COMMAND_MENU_SELECTED event handler for wxID_ABOUT
621*/
[328]622
623void MainWindow::OnAboutClick( wxCommandEvent& event )
624{
[355]625 ////@begin wxEVT_COMMAND_MENU_SELECTED event handler for wxID_ABOUT in MainWindow.
[385]626 // Before editing this code, remove the block markers.
627 About* window = new About(this);
[503]628 window->ShowModal();
[385]629 window->Destroy();
[355]630 ////@end wxEVT_COMMAND_MENU_SELECTED event handler for wxID_ABOUT in MainWindow.
[328]631}
632
633/*
[355]634* wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for NoSep_RadioButton
635*/
[503]636
[328]637void MainWindow::OnNoSepRadioButtonSelected( wxCommandEvent& event )
638{
639 static_cast<string>("-import:nosep");
640}
641
642/*
[355]643* wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for Sep_RadioButton
644*/
[328]645
646void MainWindow::OnSepRadioButtonSelected( wxCommandEvent& event )
647{
648 static_cast<string>("-import:sep");
649}
650
651/*
[355]652* wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for Separated_RadioButton
653*/
[328]654
655/*
[355]656* wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for Complete_RadioButton
657*/
[328]658
659void MainWindow::OnCompleteRadioButtonSelected( wxCommandEvent& event )
660{
[487]661 splitInstances = false;
[328]662}
663
664/*
[355]665* wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_BITMAPBUTTON
666*/
[328]667
668void MainWindow::OnRefreshButtonClick( wxCommandEvent& event )
669{
[503]670 globalPackages = getPackages();
[328]671 refreshMods(globalInstalledMods);
672}
673
674/*
[355]675* wxEVT_COMMAND_MENU_SELECTED event handler for wxID_LOAD
676*/
[328]677
[487]678void MainWindow::refreshMods (vector<string> s)
679{
[328]680 Mods_CheckboxList->Clear();
[461]681 for (unsigned int i = 0; i < globalPackages.size(); i++) {
[355]682 Mods_CheckboxList->Append(globalPackages[i].name.c_str());
[487]683 if( binary_search(s.begin(), s.end(), globalPackages[i].modStringName ) )
684 Mods_CheckboxList->Check(i);
[355]685 }
[328]686}
687
688void MainWindow::OnLoadClick( wxCommandEvent& event )
689{
[357]690 if (busy == 1) return;
[328]691 static const wxChar *FILETYPES = _T(
692 "Mod Loadouts (*.cfg)|*.cfg|"
693 "All files (*.*)|*.*"
[355]694 );
695
[328]696 wxFileDialog* openFileDialog =
697 new wxFileDialog( this, _("Open Mod Loadout"), "", "", FILETYPES,
[355]698 wxOPEN, wxDefaultPosition);
699
[328]700 if ( openFileDialog->ShowModal() == wxID_OK )
701 {
702 refreshMods(getInstallString( string(openFileDialog->GetPath()) ));
703 }
704}
705
706/*
[355]707* wxEVT_COMMAND_MENU_SELECTED event handler for wxID_SAVE
708*/
[328]709
710void MainWindow::OnSaveClick( wxCommandEvent& event )
711{
[357]712 if (busy == 1) return;
[328]713 static const wxChar *FILETYPES = _T(
714 "Mod Loadouts (*.cfg)|*.cfg|"
715 "All files (*.*)|*.*"
[355]716 );
[328]717
[355]718 wxFileDialog* openFileDialog =
[328]719 new wxFileDialog( this, _("Open file"), "", "", FILETYPES,
720 wxSAVE, wxDefaultPosition);
721
722 if ( openFileDialog->ShowModal() == wxID_OK )
723 {
724 if ( exists( openFileDialog->GetPath().c_str() ) )
[355]725 {
726 remove( openFileDialog->GetPath().c_str() );
727 }
[328]728
[355]729 ofstream file(openFileDialog->GetPath().c_str());
[328]730
[355]731 vector<string>list;
[461]732 for(unsigned int i = 0; i < globalPackages.size(); i++) if(Mods_CheckboxList->IsChecked(i)) list.push_back( globalPackages[i].modStringName );
[355]733 vector<string>::iterator begin_iter = list.begin();
734 vector<string>::iterator end_iter = list.end();
[328]735
[355]736 sort( list.begin(), list.end() );
[328]737
[355]738 for( ; begin_iter != end_iter; ++begin_iter) {
739 file << *begin_iter << " ";
740 }
741
742 file.close();
743 file.clear();
[328]744 }
745}
746
747/*
[355]748* wxEVT_COMMAND_BUTTON_CLICKED event handler for ReGlobalize_Button
749*/
[328]750
751void MainWindow::OnReGlobalizeButtonClick( wxCommandEvent& event )
752{
[487]753 string YesNoMsg = "WARNING: This will DELETE the Edition's GameDataFolder and recreate it from the vanilla Oni game data.\n";
754 YesNoMsg = YesNoMsg + "Are you SURE you want to do this?";
755 wxMessageDialog* YesNoDialog = new wxMessageDialog(this, YesNoMsg.c_str(), "AE Installer Alert", wxYES_NO | wxICON_EXCLAMATION , wxDefaultPosition);
[355]756
[487]757 if (YesNoDialog->ShowModal() == wxID_NO)
758 {
759 //if the user said no...
[355]760 }
[487]761 else
762 {
[357]763 this->InstallButton->Disable();
764 this->ReglobalizeButton->Disable();
[355]765#ifdef WIN32
[357]766 boost::thread thrd2(globalizeData);
767 //globalizeData();
768 //boost::thread::create_thread(&globalizeData);
769 // boost::thread_group Tg;
770 // Tg.create_thread( &globalizeData(), this );
[355]771#else
[357]772 globalizeData();
[355]773#endif
[357]774 this->InstallButton->Enable();
775 this->ReglobalizeButton->Enable();
776 }
[355]777}
[328]778/*
[355]779* wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for Separated_RadioButton
780*/
[328]781
[385]782/*
783 * wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for Seperated_RadioButton
784 */
785
786void MainWindow::OnSeperatedRadioButtonSelected( wxCommandEvent& event )
787{
[487]788 splitInstances = true;
[385]789}
[503]790
791void MainWindow::OnDirButtonClick( wxCommandEvent& event )
792{
793 wxDirDialog* newDir = new wxDirDialog(this, "Set current directory", "", wxDD_DEFAULT_STYLE,
794 wxDefaultPosition, wxDefaultSize, "wxDirCtrl");
795 newDir->ShowModal();
796 if(newDir->GetPath()[0]) current_path( (path)newDir->GetPath() );
797 OnRefreshButtonClick(event);
798}
Note: See TracBrowser for help on using the repository browser.