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

Last change on this file since 500 was 500, checked in by iritscen, 10 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.