source: AE/Installer/trunk/source/aeinstallerapp.cpp @ 401

Last change on this file since 401 was 401, checked in by gumby, 11 years ago
File size: 6.5 KB
Line 
1/////////////////////////////////////////////////////////////////////////////
2// Name:        aeinstallerapp.cpp
3// Purpose:     
4// Author:     
5// Modified by:
6// Created:     07/05/2009 17:23:39
7// RCS-ID:     
8// Copyright:   
9// Licence:     
10/////////////////////////////////////////////////////////////////////////////
11#include "boost/thread.hpp"
12#include <boost/thread/mutex.hpp>
13#include <fstream>
14#include "boost/filesystem.hpp" // includes all needed Boost.Filesystem declarations
15#include "boost/lexical_cast.hpp" //int -> string
16using namespace boost::filesystem; 
17// For compilers that support precompilation, includes "wx/wx.h".
18#include "wx/wxprec.h"
19
20#ifdef __BORLANDC__
21#pragma hdrstop
22#endif
23
24#ifndef WX_PRECOMP
25#include "wx/wx.h"
26#endif
27
28////@begin includes
29////@end includes
30
31#include "aeinstallerapp.h"
32#include <string>
33
34////@begin XPM images
35////@end XPM images
36
37
38/*
39 * Application instance implementation
40 */
41
42////@begin implement app
43IMPLEMENT_APP( AEInstallerApp )
44////@end implement app
45
46
47/*
48 * AEInstallerApp type definition
49 */
50
51IMPLEMENT_CLASS( AEInstallerApp, wxApp )
52
53
54/*
55 * AEInstallerApp event table definition
56 */
57
58BEGIN_EVENT_TABLE( AEInstallerApp, wxApp )
59
60////@begin AEInstallerApp event table entries
61////@end AEInstallerApp event table entries
62
63END_EVENT_TABLE()
64
65
66/*
67 * Constructor for AEInstallerApp
68 */
69
70AEInstallerApp::AEInstallerApp()
71{
72    Init();
73}
74
75
76/*
77 * Member initialisation
78 */
79
80void AEInstallerApp::Init()
81{
82        ////@begin AEInstallerApp member initialisation
83        ////@end AEInstallerApp member initialisation
84}
85
86/*
87 * Initialisation for AEInstallerApp
88 */
89
90bool AEInstallerApp::OnInit()
91{   
92        ////@begin AEInstallerApp initialisation
93        // Remove the comment markers above and below this block
94        // to make permanent changes to the code.
95       
96#if wxUSE_XPM
97        wxImage::AddHandler(new wxXPMHandler);
98#endif
99#if wxUSE_LIBPNG
100        wxImage::AddHandler(new wxPNGHandler);
101#endif
102#if wxUSE_LIBJPEG
103        wxImage::AddHandler(new wxJPEGHandler);
104#endif
105#if wxUSE_GIF
106        wxImage::AddHandler(new wxGIFHandler);
107#endif
108        MainWindow* mainWindow = new MainWindow( NULL );
109        mainWindow->Show(true);
110        ////@end AEInstallerApp initialisation
111        TheWindow = mainWindow;
112       
113#ifdef WIN32
114         HKEY hKey;
115         if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\.NETFramework\\policy\\v2.0", 0L, KEY_READ , &hKey) == ERROR_SUCCESS) {
116                 wxMessageDialog* MonoDialogOfDeath = new wxMessageDialog(TheWindow, "You don't have .NET 2.0 installed! .NET is a framework required by the Edition. You can download it from:\nhttp://gumby.oni2.net/dotnet\nPlease install .NET 2.0, then open this Installer again. \n\nWould you like to open the download webpage?",  "AE Installer Alert",  wxYES_NO | wxICON_EXCLAMATION        , wxDefaultPosition);
117                 if(MonoDialogOfDeath->ShowModal() == wxID_YES) {
118                        system("start http://www.microsoft.com/downloads/details.aspx?familyid=0856eacb-4362-4b0d-8edd-aab15c5e04f5");
119                 }
120                RegCloseKey(hKey);
121                TheWindow->Close();
122         }
123#else
124        // test for the third-party mono framework, because without it, on Mac, we are up a creek
125        char monoCommand[300] = "which mono >> ";
126        strcat(monoCommand, escapePath(system_complete("mono_check.log").string()).c_str());
127        system(monoCommand);
128        fstream file;
129        file.open("mono_check.log");
130        string line;
131        int line_count = 0;
132        while (!file.eof())
133        {
134                line_count++;
135                getline(file, line);
136        }
137        file.close();
138        remove("mono_check.log");
139       
140        if (line_count <= 1) // this means that "which mono" returned nothing -- abort! abort! abort!
141        {
142                wxMessageDialog* MonoDialogOfDeath = new wxMessageDialog(TheWindow, "You don't have 'mono' installed! 'mono' is a command-line tool required by the Edition. You can download it from:\nhttp://www.go-mono.com/mono-downloads/download.html (OS X 10.4+) or\nhttp://edt.oni2.net/AE/MonoFramework10.3.dmg (OS X 10.3)\n\nPlease install 'mono', then open this Installer again.",  "AE Installer Alert",  wxOK | wxICON_EXCLAMATION     , wxDefaultPosition);
143                MonoDialogOfDeath->ShowModal();
144                TheWindow->Close();
145                return true; // it's quittin' time, Joe
146        }
147#endif
148
149        //anything after this is done after the window appears...
150
151        if ( !exists("../GameDataFolder") )
152        {
153                wxMessageDialog* YesNoDialog = new wxMessageDialog(TheWindow,           "You haven't globalized yet! \nYou must globalize to use the Anniversary Edition framework. \nWould you like to globalize now? (This could take a while...)\n(Selecting \"No\" will exit this program...)",  "AE Installer Alert",  wxYES_NO | wxICON_EXCLAMATION       , wxDefaultPosition);
154
155                if (YesNoDialog->ShowModal() == wxID_NO) // if the user said no...
156                        TheWindow->Close();
157                else
158                {
159                        TheWindow->InstallButton->Disable();
160                        TheWindow->ReglobalizeButton->Disable();
161
162#ifdef WIN32
163                        boost::thread thrd3(globalizeData);
164                //globalizeData();
165                //boost::thread::create_thread(&globalizeData);
166                //       boost::thread_group Tg;
167                // Tg.create_thread( &globalizeData(), this );
168#else
169                        globalizeData();
170#endif
171               
172                        TheWindow->InstallButton->Enable();
173                        TheWindow->ReglobalizeButton->Enable();
174                }
175        }
176
177        return true;
178}
179
180
181void setStatusArea( string s ) {
182        wxString wxs(s.c_str(), wxConvUTF8);
183       
184        TheWindow->StatusArea->SetStatusText(  wxs );
185        //TheWindow->StatusArea->SetStatusText(s.c_str());
186        //StatusArea->SetStatusText(_(s.c_str()));
187        //(*TheStatusBar)->SetStatusText(_(s.c_str()));
188        //AEInstallerApp::
189        //      TheWindow->StatusArea->SetStatusText("hi");
190        //mainWindow
191        //itemFrame1->StatusArea->SetStatusText(_"lol");
192        //MainWindow.StatusArea->SetStatusText("hi");
193        // class AbstractStatusNotifier { public: virtual void NotifyStatus(const wxString &statusString) = 0; };
194        //class StatusBarStatusNotifier : public AbstractStatusNotifier { wxStatusBar *statusbar; StatusBarStatusNotifier(wxStatusBar *bar) : statusbar(bar) { } ;
195        //void NotifyStatus(const wxString &status) { statusbar->SetStatus(status); } }
196       
197       
198        //MainWindow::StatusArea->
199        //MainWindow::MainWindow().SetSize(MainWindow::MainWindow().GetRect().GetWidth(), MainWindow::MainWindow().GetRect().GetHeight()+1);
200       
201        //MainWindow::StatusBar->SetLabel("Importing Files...");
202        //StatusBar->SetLabel(s);
203        //->SetLabel(s);
204       
205}
206
207
208/*
209 * Cleanup for AEInstallerApp
210 */
211
212int AEInstallerApp::OnExit()
213{   
214        ////@begin AEInstallerApp cleanup
215        return wxApp::OnExit();
216        ////@end AEInstallerApp cleanup
217}
218void doglobalizeData() {
219        //TheWindow->Disable();
220        globalizeData();
221#ifdef WIN32
222        while(1) Sleep(-1);
223#endif
224        //TheWindow->Enable();
225        //setStatusArea((string)"Test1");
226}
Note: See TracBrowser for help on using the repository browser.