ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/AE/Installer/trunk/source/aeinstallerapp.cpp
Revision: 402
Committed: Tue Jul 7 00:34:54 2009 UTC (16 years, 3 months ago) by gumby
Content type: text/x-c++src
File size: 6653 byte(s)
Log Message:
Added .Net check.

File Contents

# Content
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
16 using 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
43 IMPLEMENT_APP( AEInstallerApp )
44 ////@end implement app
45
46
47 /*
48 * AEInstallerApp type definition
49 */
50
51 IMPLEMENT_CLASS( AEInstallerApp, wxApp )
52
53
54 /*
55 * AEInstallerApp event table definition
56 */
57
58 BEGIN_EVENT_TABLE( AEInstallerApp, wxApp )
59
60 ////@begin AEInstallerApp event table entries
61 ////@end AEInstallerApp event table entries
62
63 END_EVENT_TABLE()
64
65
66 /*
67 * Constructor for AEInstallerApp
68 */
69
70 AEInstallerApp::AEInstallerApp()
71 {
72 Init();
73 }
74
75
76 /*
77 * Member initialisation
78 */
79
80 void AEInstallerApp::Init()
81 {
82 ////@begin AEInstallerApp member initialisation
83 ////@end AEInstallerApp member initialisation
84 }
85
86 /*
87 * Initialisation for AEInstallerApp
88 */
89
90 bool 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
181 void 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
212 int AEInstallerApp::OnExit()
213 {
214 ////@begin AEInstallerApp cleanup
215 return wxApp::OnExit();
216 ////@end AEInstallerApp cleanup
217 }
218 void doglobalizeData() {
219 //TheWindow->Disable();
220 globalizeData();
221 #ifdef WIN32
222 while(1) Sleep(-1);
223 #endif
224 //TheWindow->Enable();
225 //setStatusArea((string)"Test1");
226 }