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

Last change on this file since 516 was 516, checked in by iritscen, 9 years ago

Removed TODO lines for things we've done; small fix to package update msg text.

  • Property svn:executable set to *
File size: 24.9 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        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" + (string)INSTALLER_VERSION;
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.