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

Last change on this file since 565 was 565, checked in by iritscen, 11 years ago

Fixing (hopefully) update bug stemming from extra return characters (\r) messing up string comparisons.
Converting #defined installer version global to static string just to be safe (what was I thinking?).

  • Property svn:executable set to *
File size: 24.8 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 = false;
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        EVT_BUTTON( Dir_Button, MainWindow::OnDirButtonClick )
108////@end MainWindow event table entries
109
110END_EVENT_TABLE()
111
112
113/*
114* MainWindow constructors
115*/
116
117MainWindow::MainWindow()
118{ 
119        Init();
120}
121
122MainWindow::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
133bool 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
149MainWindow::~MainWindow()
150{
151        ////@begin MainWindow destruction
152        ////@end MainWindow destruction
153}
154
155/*
156* Member initialisation
157*/
158
159void 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*/
186wxStatusBar **TheStatusBar;
187wxButton* TheInstallButton;
188wxGauge* TheProgressBar;
189void 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" + gInstallerVersion;
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
401void 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
420void MainWindow::ModList_OnCreate( wxWindowCreateEvent& event )
421{
422
423}
424
425
426/*
427* Should we show tooltips?
428*/
429
430bool MainWindow::ShowToolTips()
431{
432        return true;
433}
434
435/*
436* Get bitmap resources
437*/
438
439wxBitmap 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
472wxIcon 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
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/*
498* wxEVT_COMMAND_CHECKLISTBOX_TOGGLED event handler for Mods_CheckboxList1
499*/
500
501void 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
523void 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
543void MainWindow::OnExitClick( wxCommandEvent& event )
544{
545        exit(0);
546}
547
548/*
549* wxEVT_COMMAND_BUTTON_CLICKED event handler for Install_Button
550*/
551
552struct 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
565void globalize2(void) {
566                TheInstallButton->Disable();
567                globalizeData();
568                TheInstallButton->Enable();
569}
570
571void 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
592void setProgressBar( int i )
593{
594#ifdef WIN32
595if (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
611void 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
623void 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    About* window = new About(this);
628        window->ShowModal();
629    window->Destroy();
630        ////@end wxEVT_COMMAND_MENU_SELECTED event handler for wxID_ABOUT in MainWindow.
631}
632
633/*
634* wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for NoSep_RadioButton
635*/
636 
637void MainWindow::OnNoSepRadioButtonSelected( wxCommandEvent& event )
638{
639        static_cast<string>("-import:nosep");
640}
641
642/*
643* wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for Sep_RadioButton
644*/
645
646void MainWindow::OnSepRadioButtonSelected( wxCommandEvent& event )
647{
648        static_cast<string>("-import:sep");
649}
650
651/*
652* wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for Separated_RadioButton
653*/
654
655/*
656* wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for Complete_RadioButton
657*/
658
659void MainWindow::OnCompleteRadioButtonSelected( wxCommandEvent& event )
660{
661        splitInstances = false;
662}
663
664/*
665* wxEVT_COMMAND_BUTTON_CLICKED event handler for ID_BITMAPBUTTON
666*/
667
668void MainWindow::OnRefreshButtonClick( wxCommandEvent& event )
669{
670        globalPackages = getPackages();
671        refreshMods(globalInstalledMods);
672}
673
674/*
675* wxEVT_COMMAND_MENU_SELECTED event handler for wxID_LOAD
676*/
677
678void MainWindow::refreshMods (vector<string> s)
679{
680        Mods_CheckboxList->Clear();
681        for (unsigned int i = 0; i < globalPackages.size(); i++) {
682                Mods_CheckboxList->Append(globalPackages[i].name.c_str());
683                if( binary_search(s.begin(), s.end(), globalPackages[i].modStringName ) )
684                        Mods_CheckboxList->Check(i);
685        }
686}
687
688void MainWindow::OnLoadClick( wxCommandEvent& event )
689{
690        if (busy == 1) return;
691        static const wxChar *FILETYPES = _T(
692                "Mod Loadouts (*.cfg)|*.cfg|"
693                "All files (*.*)|*.*"
694                );
695
696        wxFileDialog* openFileDialog =
697                new wxFileDialog( this, _("Open Mod Loadout"), "", "", FILETYPES,
698                wxOPEN, wxDefaultPosition);
699
700        if ( openFileDialog->ShowModal() == wxID_OK )
701        {
702                refreshMods(getInstallString( string(openFileDialog->GetPath()) ));
703        }
704}
705
706/*
707* wxEVT_COMMAND_MENU_SELECTED event handler for wxID_SAVE
708*/
709
710void MainWindow::OnSaveClick( wxCommandEvent& event )
711{
712        if (busy == 1) return;
713        static const wxChar *FILETYPES = _T(
714                "Mod Loadouts (*.cfg)|*.cfg|"
715                "All files (*.*)|*.*"
716                );
717
718        wxFileDialog* openFileDialog =
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() ) )
725                {
726                        remove( openFileDialog->GetPath().c_str() );
727                }
728
729                ofstream file(openFileDialog->GetPath().c_str());
730
731                vector<string>list;
732                for(unsigned int i = 0; i < globalPackages.size(); i++) if(Mods_CheckboxList->IsChecked(i)) list.push_back( globalPackages[i].modStringName );
733                vector<string>::iterator begin_iter = list.begin(); 
734                vector<string>::iterator end_iter = list.end();
735
736                sort( list.begin(), list.end() );
737
738                for( ; begin_iter != end_iter; ++begin_iter) {
739                        file << *begin_iter << " ";
740                }
741
742                file.close();
743                file.clear();
744        }
745}
746
747/*
748* wxEVT_COMMAND_BUTTON_CLICKED event handler for ReGlobalize_Button
749*/
750
751void MainWindow::OnReGlobalizeButtonClick( wxCommandEvent& event )
752{
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);
756
757        if (YesNoDialog->ShowModal() == wxID_NO)
758        {
759                //if the user said no...
760        }
761        else
762        {
763                this->InstallButton->Disable();
764                this->ReglobalizeButton->Disable();
765#ifdef WIN32
766                boost::thread thrd2(globalizeData);
767                //globalizeData();
768                //boost::thread::create_thread(&globalizeData);
769                //       boost::thread_group Tg;
770                // Tg.create_thread( &globalizeData(), this );
771#else
772                globalizeData();
773#endif
774                this->InstallButton->Enable();
775                this->ReglobalizeButton->Enable();
776        }
777}
778/*
779* wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for Separated_RadioButton
780*/
781
782/*
783 * wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for Seperated_RadioButton
784 */
785
786void MainWindow::OnSeperatedRadioButtonSelected( wxCommandEvent& event )
787{
788        splitInstances = true;
789}
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.