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

Last change on this file since 494 was 489, checked in by gumby, 15 years ago

Fixes for WIN32

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