///////////////////////////////////////////////////////////////////////////// // Name: aeinstallerapp.cpp // Purpose: // Author: // Modified by: // Created: 07/05/2009 17:23:39 // RCS-ID: // Copyright: // Licence: ///////////////////////////////////////////////////////////////////////////// #include "boost/thread.hpp" #include #include #include "boost/filesystem.hpp" // includes all needed Boost.Filesystem declarations #include "boost/lexical_cast.hpp" //int -> string using namespace boost::filesystem; // For compilers that support precompilation, includes "wx/wx.h". #include "wx/wxprec.h" #ifdef __BORLANDC__ #pragma hdrstop #endif #ifndef WX_PRECOMP #include "wx/wx.h" #endif ////@begin includes ////@end includes #include "aeinstallerapp.h" #include ////@begin XPM images ////@end XPM images /* * Application instance implementation */ ////@begin implement app IMPLEMENT_APP( AEInstallerApp ) ////@end implement app /* * AEInstallerApp type definition */ IMPLEMENT_CLASS( AEInstallerApp, wxApp ) /* * AEInstallerApp event table definition */ BEGIN_EVENT_TABLE( AEInstallerApp, wxApp ) ////@begin AEInstallerApp event table entries ////@end AEInstallerApp event table entries END_EVENT_TABLE() /* * Constructor for AEInstallerApp */ AEInstallerApp::AEInstallerApp() { Init(); } /* * Member initialisation */ void AEInstallerApp::Init() { ////@begin AEInstallerApp member initialisation ////@end AEInstallerApp member initialisation } /* * Initialisation for AEInstallerApp */ bool AEInstallerApp::OnInit() { ////@begin AEInstallerApp initialisation // Remove the comment markers above and below this block // to make permanent changes to the code. #if wxUSE_XPM wxImage::AddHandler(new wxXPMHandler); #endif #if wxUSE_LIBPNG wxImage::AddHandler(new wxPNGHandler); #endif #if wxUSE_LIBJPEG wxImage::AddHandler(new wxJPEGHandler); #endif #if wxUSE_GIF wxImage::AddHandler(new wxGIFHandler); #endif MainWindow* mainWindow = new MainWindow( NULL ); mainWindow->Show(true); ////@end AEInstallerApp initialisation TheWindow = mainWindow; #ifdef WIN32 HKEY hKey; if(!RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\.NETFramework\\policy\\v2.0", 0L, KEY_READ , &hKey) == ERROR_SUCCESS) { 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); if(MonoDialogOfDeath->ShowModal() == wxID_YES) { system("start http://www.microsoft.com/downloads/details.aspx?familyid=0856eacb-4362-4b0d-8edd-aab15c5e04f5"); } RegCloseKey(hKey); TheWindow->Close(); } #else // test for the third-party mono framework, because without it, on Mac, we are up a creek char monoCommand[300] = "which mono >> "; strcat(monoCommand, escapePath(system_complete("mono_check.log").string()).c_str()); system(monoCommand); fstream file; file.open("mono_check.log"); string line; int line_count = 0; while (!file.eof()) { line_count++; getline(file, line); } file.close(); remove("mono_check.log"); if (line_count <= 1) // this means that "which mono" returned nothing -- abort! abort! abort! { 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); MonoDialogOfDeath->ShowModal(); TheWindow->Close(); return true; // it's quittin' time, Joe } #endif //anything after this is done after the window appears... if ( !exists("../GameDataFolder") ) { 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); if (YesNoDialog->ShowModal() == wxID_NO) // if the user said no... TheWindow->Close(); else { TheWindow->InstallButton->Disable(); TheWindow->ReglobalizeButton->Disable(); #ifdef WIN32 boost::thread thrd3(globalizeData); //globalizeData(); //boost::thread::create_thread(&globalizeData); // boost::thread_group Tg; // Tg.create_thread( &globalizeData(), this ); #else globalizeData(); #endif TheWindow->InstallButton->Enable(); TheWindow->ReglobalizeButton->Enable(); } } return true; } void setStatusArea( string s ) { wxString wxs(s.c_str(), wxConvUTF8); TheWindow->StatusArea->SetStatusText( wxs ); //TheWindow->StatusArea->SetStatusText(s.c_str()); //StatusArea->SetStatusText(_(s.c_str())); //(*TheStatusBar)->SetStatusText(_(s.c_str())); //AEInstallerApp:: // TheWindow->StatusArea->SetStatusText("hi"); //mainWindow //itemFrame1->StatusArea->SetStatusText(_"lol"); //MainWindow.StatusArea->SetStatusText("hi"); // class AbstractStatusNotifier { public: virtual void NotifyStatus(const wxString &statusString) = 0; }; //class StatusBarStatusNotifier : public AbstractStatusNotifier { wxStatusBar *statusbar; StatusBarStatusNotifier(wxStatusBar *bar) : statusbar(bar) { } ; //void NotifyStatus(const wxString &status) { statusbar->SetStatus(status); } } //MainWindow::StatusArea-> //MainWindow::MainWindow().SetSize(MainWindow::MainWindow().GetRect().GetWidth(), MainWindow::MainWindow().GetRect().GetHeight()+1); //MainWindow::StatusBar->SetLabel("Importing Files..."); //StatusBar->SetLabel(s); //->SetLabel(s); } /* * Cleanup for AEInstallerApp */ int AEInstallerApp::OnExit() { ////@begin AEInstallerApp cleanup return wxApp::OnExit(); ////@end AEInstallerApp cleanup } void doglobalizeData() { //TheWindow->Disable(); globalizeData(); #ifdef WIN32 while(1) Sleep(-1); #endif //TheWindow->Enable(); //setStatusArea((string)"Test1"); }