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

Last change on this file since 452 was 423, checked in by gumby, 15 years ago

Fixed windows bug with window during globalization
Fixed bug with improper install order.

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
160
161#ifdef WIN32
162 boost::thread thrd3(globalize2);
163 //globalizeData();
164 //boost::thread::create_thread(&globalizeData);
165 // boost::thread_group Tg;
166 // Tg.create_thread( &globalizeData(), this );
167#else
168 TheWindow->InstallButton->Disable();
169 TheWindow->ReglobalizeButton->Disable();
170 globalizeData();
171 TheWindow->InstallButton->Enable();
172 TheWindow->ReglobalizeButton->Enable();
173#endif
174
175
176 }
177 }
178
179 return true;
180}
181
182
183void setStatusArea( string s ) {
184 wxString wxs(s.c_str(), wxConvUTF8);
185
186 TheWindow->StatusArea->SetStatusText( wxs );
187 //TheWindow->StatusArea->SetStatusText(s.c_str());
188 //StatusArea->SetStatusText(_(s.c_str()));
189 //(*TheStatusBar)->SetStatusText(_(s.c_str()));
190 //AEInstallerApp::
191 // TheWindow->StatusArea->SetStatusText("hi");
192 //mainWindow
193 //itemFrame1->StatusArea->SetStatusText(_"lol");
194 //MainWindow.StatusArea->SetStatusText("hi");
195 // class AbstractStatusNotifier { public: virtual void NotifyStatus(const wxString &statusString) = 0; };
196 //class StatusBarStatusNotifier : public AbstractStatusNotifier { wxStatusBar *statusbar; StatusBarStatusNotifier(wxStatusBar *bar) : statusbar(bar) { } ;
197 //void NotifyStatus(const wxString &status) { statusbar->SetStatus(status); } }
198
199
200 //MainWindow::StatusArea->
201 //MainWindow::MainWindow().SetSize(MainWindow::MainWindow().GetRect().GetWidth(), MainWindow::MainWindow().GetRect().GetHeight()+1);
202
203 //MainWindow::StatusBar->SetLabel("Importing Files...");
204 //StatusBar->SetLabel(s);
205 //->SetLabel(s);
206
207}
208
209
210/*
211 * Cleanup for AEInstallerApp
212 */
213
214int AEInstallerApp::OnExit()
215{
216 ////@begin AEInstallerApp cleanup
217 return wxApp::OnExit();
218 ////@end AEInstallerApp cleanup
219}
220void doglobalizeData() {
221 //TheWindow->Disable();
222 globalizeData();
223#ifdef WIN32
224 while(1) Sleep(-1);
225#endif
226 //TheWindow->Enable();
227 //setStatusArea((string)"Test1");
228}
Note: See TracBrowser for help on using the repository browser.