Changeset 487 for AE/Installer/trunk/source/main_window.cpp
- Timestamp:
- Dec 30, 2009, 2:51:38 AM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
AE/Installer/trunk/source/main_window.cpp
r469 r487 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 1 9 #ifndef NTDDI_VERSION 2 10 #define NTDDI_VERSION NTDDI_WIN7 3 11 #endif 4 12 #ifdef WIN32 5 13 #include <windows.h> 6 14 #include <shobjidl.h> 7 15 HWND Handle; 8 9 16 ITaskbarList *pTaskbarList; 10 17 ITaskbarList3 *pTaskbarList3; 11 18 #endif 12 19 13 /*14 AE/Mod Installer15 by Gumby and Iritscen16 */17 18 // To-do: - Load credits from text resource file19 // - Institute lots of checks into file-handling20 // - Clear mod info fields when mod is de-selected21 22 #define DEBUG23 #include <stdio.h>24 //#include <conio.h>25 //#include <process.h>26 #include <string>27 #include <iostream>28 #include <cctype>29 #include <vector>30 #include <fstream>31 #include <errno.h>32 #include <sstream>33 34 #include "boost/filesystem.hpp" // includes all needed Boost.Filesystem declarations35 #include "boost/lexical_cast.hpp" //int -> string36 #include "boost/algorithm/string.hpp"37 #include "installer.h"38 39 #ifdef WIN3240 #include <windows.h>41 #else // assume we're on Mac42 #include <stdlib.h>43 #include <dirent.h>44 #endif45 46 47 const bool SPLIT = 1;48 const bool NOT_SPLIT = 0;49 bool splitInstances = SPLIT;50 bool busy = 0;51 #ifdef WIN3252 const string strOniSplit = "Onisplit.exe";53 string strImportOption = "-import:nosep";54 const char* strClsCmd = "cls";55 const char* strPauseCmd = "PAUSE";56 #else // set up Mac equivalents since we're in Mac OS57 const string strOniSplit = "mono Onisplit.exe";58 string strImportOption = "-import:sep";59 const char* strClsCmd = "clear";60 const char* strPauseCmd = "read -n 1 -p \"Press any key to continue\"";61 void Sleep(int ms) { sleep( ms / 1000 ); }62 #endif63 64 using namespace boost::filesystem;65 using namespace std;66 67 68 vector<string> globalInstalledMods;69 vector<ModPackage> globalPackages;70 71 72 #include "boost/date_time/gregorian/gregorian.hpp"73 #include "boost/date_time/date_parsing.hpp"74 #include "boost/date_time/posix_time/posix_time.hpp"75 76 string escapePath(string input) {77 78 string output;79 string escape_me = "& ;()|<>\"'\\#*?$";80 for(unsigned int i = 0; i < input.size(); i++) {81 for(unsigned int j = 0; j < escape_me.size(); j++) if (input[i] == escape_me[j]) output += '\\';82 output += input[i];83 }84 return output;85 }86 87 int globalizeData(void)88 {89 busy = 1;90 using boost::lexical_cast;91 using boost::bad_lexical_cast;92 // using namespace boost::posix_time;93 using namespace boost::gregorian;94 using namespace boost::posix_time;95 ptime start_time(second_clock::local_time());96 97 setStatusArea("Globalizing!");98 int err = 0;99 int parts_done = 0;100 char Step_x_x[300];101 //char levels[i][5];102 remove("Globalize.log");103 ofstream logfile("Globalize.log");104 logfile << "Globalization started " << to_simple_string(start_time) << endl;105 try {106 107 char levels_cstr[15][3] = {"0", "1", "2", "3", "4", "6", "8", "9", "10", "11", "12", "13", "14", "18", "19"}; // the levels Oni has...probably should have made a string array. Oops.108 //const vector<double> ck(cv, &cv[CvSize]);109 vector<string> levels;110 for (int f = 0; f < 15; f++) {111 levels.push_back(levels_cstr[f]);112 }113 char choice = 0;114 115 //SetCurrentDirectory("C:/Program Files/Oni/edition/install");116 ///char levels[i][3];117 path Characters = "../GameDataFolder/level0_Characters";118 path Particles = "../GameDataFolder/level0_Particles";119 path Archive = "../GameDataFolder/Archive";120 path Textures = "../GameDataFolder/level0_Textures";121 path Sounds = "../GameDataFolder/level0_Sounds";122 path Animations = "../GameDataFolder/level0_Animations";123 path TRAC = Animations / "level0_TRAC";124 path TRAM = Animations / "level0_TRAM";125 126 vector<path> GDFPaths;127 //GDFPaths.push_back(Characters);128 GDFPaths.push_back(Particles);129 GDFPaths.push_back(Textures);130 GDFPaths.push_back(Sounds);131 GDFPaths.push_back(TRAC);132 GDFPaths.push_back(TRAM);133 134 135 path VanillaCharacters = "VanillaDats/level0_Final/level0_Characters/level0_Characters.oni";136 path VanillaParticles = "VanillaDats/level0_Final/level0_Particles/level0_Particles.oni";137 path VanillaTextures = "VanillaDats/level0_Final/level0_Textures/level0_Textures.oni";138 path VanillaSounds = "VanillaDats/level0_Final/level0_Sounds/level0_Sounds.oni";139 path VanillaAnimations = "VanillaDats/level0_Final/level0_Animations/level0_Animations.oni";140 path VanillaTRAC = "VanillaDats/level0_Final/level0_Animations/level0_TRAC.oni";141 path VanillaTRAM = "VanillaDats/level0_Final/level0_Animations/level0_TRAM.oni";142 143 vector<path> VanillaPaths;144 145 //VanillaPaths.push_back(VanillaCharacters);146 VanillaPaths.push_back(VanillaParticles);147 VanillaPaths.push_back(VanillaTextures);148 VanillaPaths.push_back(VanillaSounds);149 VanillaPaths.push_back(VanillaTRAC);150 VanillaPaths.push_back(VanillaTRAM);151 152 /*153 if (exists("../GameDataFolder/"))154 {155 //cout << "\nIt looks like you've already globalized Oni's data.\nDo you want to re-globalize?\n(This will erase existing mods installed to the AE's game data.)"156 // << "\n1. Re-globalize"157 // << "\n2. Return to main menu\n";158 //choice = cin.get();159 cin.ignore(128, '\n');160 if (choice == '1')161 remove_all("../GameDataFolder"); // remove AE GDF162 if (choice == '2')163 return 0;164 }165 */166 setStatusArea("Removing old GameDataFolder...\n");167 logfile << "Removing old GameDataFolder...\n";168 remove_all( "../GameDataFolder/" );169 setStatusArea("Creating needed directories...");170 logfile << "Creating needed directories...\n";171 create_directory( "../GameDataFolder/" );172 173 create_directory( "packages" );174 175 if (exists("VanillaDats")) remove_all("VanillaDats");176 create_directory( "VanillaDats" );177 create_directory( "VanillaDats/level0_Final/" );178 //blah blah finish this.179 //logfile << "VanillaDats/level0_Final/ created";180 create_directory( Characters );181 create_directory( Particles );182 create_directory( Archive );183 create_directory( Textures );184 create_directory( Sounds );185 create_directory( Animations );186 create_directory( TRAC );187 create_directory( TRAM );188 int num_levels = 0;189 for(int i = 1; i < 15; i++)190 {191 if (exists("../../GameDataFolder/level" + levels[i] + "_Final.dat")) {192 num_levels++;193 194 }195 }196 logfile << "Exporting and moving...\n\n";197 int total_steps = 8 + 2 * num_levels;198 199 for(int i = 0; i < 15; i++)200 {201 202 //printf(levels[i],"%d",levels[i]); // int to char array203 204 if (exists("../../GameDataFolder/level" + levels[i] + "_Final.dat")) {205 logfile << "level" << levels[i] << "_Final\n";206 logfile << "\tExporting level" << levels[i] << "_Final.dat\n";207 //printf(Step_x_x,"Step %d/%d: exporting level%d_final.dat", parts_done + 1,, levels[i]); setStatusArea((string)Step_x_x);208 setStatusArea("Step " + lexical_cast<std::string>(parts_done + 1) + "/" + lexical_cast<std::string>(total_steps) + " exporting level" + levels[i]+"_Final.dat");209 create_directory( "../GameDataFolder/level" + levels[i] + "_Final" );210 // setStatusArea(strOniSplit + " -export ../GameDataFolder/level" + levels[i] + "_Final ../../GameDataFolder/level" + levels[i] + "_Final.dat");211 system((strOniSplit + " -export ../GameDataFolder/level" + levels[i] + "_Final ../../GameDataFolder/level" + levels[i] + "_Final.dat").c_str());212 create_directory( "VanillaDats/level" + levels[i] + "_Final" );213 create_directory( "VanillaDats/level" + levels[i] + "_Final/level" + levels[i] + "_Final" );214 215 //Moves the AKEV and other files into a safe directory so that level specific textures are not globalized...216 if ( strcmp(levels[i].c_str(), "0") ){217 create_directory( "../GameDataFolder/level" + levels[i] + "_Final/AKEV" );218 system((strOniSplit + " -move:overwrite ../GameDataFolder/level" + levels[i] + "_Final/AKEV ../GameDataFolder/level" + levels[i] + "_Final/AKEV*.oni").c_str());219 220 }221 222 directory_iterator end_iter;223 for ( directory_iterator dir_itr( "../GameDataFolder/level" + levels[i] + "_Final" ); dir_itr != end_iter; ++dir_itr )224 {225 //cout << dir_itr->path().filename();226 if ( is_regular_file( dir_itr->status() ) )227 {228 if ( dir_itr->path().filename().substr(0,8) == "TXMPfail" ||229 dir_itr->path().filename().substr(0,9) == "TXMPlevel" ||230 ( dir_itr->path().filename().substr(0,4) == "TXMP" && dir_itr->path().filename().find("intro")!=string::npos) ||231 dir_itr->path().filename().substr(0,4) == "TXMB" ||232 dir_itr->path().filename() == "M3GMpowerup_lsi.oni" ||233 dir_itr->path().filename() == "TXMPlsi_icon.oni" ||234 ( dir_itr->path().filename().substr(0,4) == "TXMB" && dir_itr->path().filename().find("splash_screen.oni")!=string::npos) )235 {236 cout <<dir_itr->path().filename() << "\n";237 create_directory( dir_itr->path().parent_path() / "NoGlobal");238 if(!exists( dir_itr->path().parent_path() / "NoGlobal" / dir_itr->filename())) rename(dir_itr->path(), dir_itr->path().parent_path() / "NoGlobal" /239 dir_itr->filename());240 else remove(dir_itr->path());241 }242 else if (dir_itr->path().filename().substr(0,4) == "TRAC"243 ) {244 cout <<dir_itr->path().filename() << "\n";245 if(!exists( TRAC / dir_itr->filename())) rename(dir_itr->path(), TRAC / dir_itr->filename());246 else remove(dir_itr->path());247 }248 else if (dir_itr->path().filename().substr(0,4) == "TRAM") {249 cout <<dir_itr->path().filename() << "\n";250 if(!exists( TRAM / dir_itr->filename())) rename(dir_itr->path(), TRAM / dir_itr->filename());251 else remove(dir_itr->path());252 }253 else if (dir_itr->path().filename().substr(0,4) == "ONSK" ||254 dir_itr->path().filename().substr(0,4) == "TXMP") {255 cout <<dir_itr->path().filename() << "\n";\256 create_directory( dir_itr->path().parent_path() / "TexFix");257 if(!exists( Textures / dir_itr->filename())) rename(dir_itr->path(), Textures / dir_itr->filename());258 //rename(dir_itr->path(), dir_itr->path().parent_path() / "TexFix" / dir_itr->filename());259 }260 else if (dir_itr->path().filename().substr(0,4) == "ONCC"261 || dir_itr->path().filename().substr(0,4) == "TRBS"262 || dir_itr->path().filename().substr(0,4) == "ONCV"263 || dir_itr->path().filename().substr(0,4) == "ONVL"264 || dir_itr->path().filename().substr(0,4) == "TRMA"265 || dir_itr->path().filename().substr(0,4) == "TRSC"266 || dir_itr->path().filename().substr(0,4) == "TRAS") {267 cout <<dir_itr->path().filename() << "\n";268 if(!exists( Characters / dir_itr->filename())) rename(dir_itr->path(), Characters / dir_itr->filename());269 else remove(dir_itr->path());270 }271 else if (dir_itr->path().filename().substr(0,4) == "OSBD"272 || dir_itr->path().filename().substr(0,4) == "SNDD") {273 cout << dir_itr->path().filename() << "\n";274 if(!exists( Sounds / dir_itr->filename())) rename(dir_itr->path(), Sounds / dir_itr->filename());275 else remove(dir_itr->path());276 }277 else if (dir_itr->path().filename().substr(0,5) == "BINA3"278 || dir_itr->path().filename().substr(0,10) == "M3GMdebris"279 || dir_itr->path().filename() == "M3GMtoxic_bubble.oni"280 || dir_itr->path().filename().substr(0,8) == "M3GMelec"281 || dir_itr->path().filename().substr(0,7) == "M3GMrat"282 || dir_itr->path().filename().substr(0,7) == "M3GMjet"283 || dir_itr->path().filename().substr(0,9) == "M3GMbomb_"284 || dir_itr->path().filename() == "M3GMbarab_swave.oni"285 || dir_itr->path().filename() == "M3GMbloodyfoot.oni"286 ){287 cout <<dir_itr->path().filename() << "\n";288 if(!exists( Particles / dir_itr->filename())) rename(dir_itr->path(), Particles / dir_itr->filename());289 else remove(dir_itr->path());290 }291 else if (dir_itr->path().filename().substr(0,4) == "AGDB"292 || dir_itr->path().filename().substr(0,4) == "TRCM") {293 cout <<dir_itr->path().filename() << "\n";294 295 if(!exists( Archive / dir_itr->filename())) rename(dir_itr->path(), Archive / dir_itr->filename());296 else remove(dir_itr->path());297 }298 else if (dir_itr->path().filename().substr(0,4) == "ONWC") { //fix for buggy ONWC overriding299 cout <<dir_itr->path().filename() << "\n";300 301 if(!exists( "VanillaDats/level0_Final/level0_Final/" + dir_itr->filename())) rename(dir_itr->path(), "VanillaDats/level0_Final/level0_Final/" + dir_itr->filename());302 else remove(dir_itr->path());303 }304 305 if (exists(dir_itr->path())) {306 307 }308 else {309 logfile << "\tMoved file: " << dir_itr->path().filename() << "\n";310 }311 }312 313 314 315 }316 317 logfile << "\tCleaning up TXMPs...\n";318 system( (strOniSplit + " -move:delete " + Textures.string() + " ../GameDataFolder/level" + levels[i] + "_Final/TXMP*.oni").c_str());319 320 321 if ( strcmp(levels[i].c_str(), "0") ){322 system((strOniSplit + " -move:overwrite ../GameDataFolder/level" + levels[i] + "_Final ../GameDataFolder/level" + levels[i] + "_Final/AKEV/AKEV*.oni").c_str());323 remove( "../GameDataFolder/level" + levels[i] + "_Final/AKEV" );324 }325 326 parts_done++;327 328 setProgressBar( (int)(1000 * (float)(parts_done) / (float)(total_steps) ));329 330 }331 }332 logfile << "Reimporting levels\n";333 for (int i = 0; i < 15; i++)334 {335 logfile << "\tReimporting level" << levels[i] << "_Final.oni\n";336 //printf(levels[i],"%d",levels[i]);337 //printf(Step_x_x,"Step %d/%d: reimporting level", parts_done + 1, 7 + 2 * num_levels); setStatusArea((string)Step_x_x + levels[i] + (string)"_Final.dat");338 setStatusArea("Step " + lexical_cast<std::string>(parts_done + 1) + "/" + lexical_cast<std::string>(total_steps) + " reimporting level" + levels[i]+"_Final.oni");339 logfile << (strOniSplit + " " + strImportOption + " ../GameDataFolder/level" + levels[i] + "_Final VanillaDats/level" + levels[i] + "_Final/level"340 + levels[i] + "_Final/level" + levels[i] + "_Final.oni >> Globalize.log").c_str() << '\n';341 string sys_str = (strOniSplit + " " + strImportOption + " ../GameDataFolder/level" + levels[i] + "_Final VanillaDats/level" + levels[i] + "_Final/level"342 + levels[i] + "_Final/level" + levels[i] + "_Final.oni");343 system(sys_str.c_str() );344 setProgressBar( (int)(1000 * (float)(parts_done) / (float)(total_steps) ));345 parts_done++;346 }347 //create_directory( VanillaCharacters.parent_path() );348 create_directory( VanillaParticles.parent_path() );349 create_directory( VanillaTextures.parent_path() );350 create_directory( VanillaSounds.parent_path() );351 create_directory( VanillaAnimations.remove_filename() );352 353 for(unsigned int j = 0; j < GDFPaths.size(); j++) {354 logfile << "\tReimporting " << GDFPaths[j].filename() << ".oni\n";355 setStatusArea("Step " + lexical_cast<std::string>(parts_done + 1) + "/" + lexical_cast<std::string>(total_steps) + ": reimporting " + GDFPaths[j].filename() );356 system((strOniSplit + " " + strImportOption + " " + GDFPaths[j].string() + " " + VanillaPaths[j].string()).c_str());357 parts_done++;358 setProgressBar( (int)(1000 * (float)(parts_done) / (float)(total_steps) ));359 }360 logfile << "\nMoving level0_Characters\n";361 setStatusArea("Step " + lexical_cast<std::string>(parts_done + 1) + "/" + lexical_cast<std::string>(total_steps) + ": moving level0_Characters" );362 copy((path)"../GameDataFolder/level0_Characters", (path)("VanillaDats/level0_Final"));363 GDFPaths.push_back( Characters );364 for(int i = 0; i < GDFPaths.size(); i++)365 {366 directory_iterator end_iter;367 for ( directory_iterator dir_itr( GDFPaths[i] ); dir_itr != end_iter; ++dir_itr )368 {369 try370 {371 372 373 rename(dir_itr->path(), "../GameDataFolder/level0_Final/" + dir_itr->path().filename() );374 }375 catch(exception &ex) {376 377 }378 }379 }380 /*381 printf(Step_x_x,"Step %d/%d: reimporting level0_Characters", parts_done,7 + 2 * num_levels); setStatusArea((string)Step_x_x);setProgressBar( (int)(1000 * (float)(parts_done) / (float)(7 + 2 * num_levels) ));382 system((strOniSplit + " " + strImportOption + " " + Characters.string() + " " + VanillaCharacters.string()).c_str());383 parts_done++; printf(Step_x_x,"Step %d/%d: reimporting level0_Particles", parts_done,7 + 2 * num_levels); setStatusArea((string)Step_x_x);setProgressBar( (int)(1000 * (float)(parts_done) / (float)(7 + 2 * num_levels) ));384 system((strOniSplit + " " + strImportOption + " " + Particles.string() + " " + VanillaParticles.string()).c_str());385 parts_done++; printf(Step_x_x,"Step %d/%d: reimporting level0_Textures", parts_done,7 + 2 * num_levels); setStatusArea((string)Step_x_x);setProgressBar( (int)(1000 * (float)(parts_done) / (float)(7 + 2 * num_levels) ));386 system((strOniSplit + " " + strImportOption + " " + Textures.string() + " " + VanillaTextures.string()).c_str());387 //system((strOniSplit + " " + strImportOption + (string)" " + Animations.string() + (string)" " + VanillaAnimations.string()).c_str());388 parts_done++; printf(Step_x_x,"Step %d/%d: reimporting level0_TRAC", parts_done,7 + 2 * num_levels); setStatusArea((string)Step_x_x);setProgressBar( (int)(1000 * (float)(parts_done) / (float)(7 + 2 * num_levels) ));389 system((strOniSplit + " " + strImportOption + " " + TRAC.string() + " " + VanillaTRAC.string()).c_str());390 parts_done++; printf(Step_x_x,"Step %d/%d: reimporting level0_Sounds", parts_done,7 + 2 * num_levels); setStatusArea((string)Step_x_x);setProgressBar( (int)(1000 * (float)(parts_done) / (float)(7 + 2 * num_levels) ));391 system((strOniSplit + " " + strImportOption + " " + Sounds.string() + " " + VanillaSounds.string()).c_str());392 parts_done++; printf(Step_x_x,"Step %d/%d: reimporting level0_TRAM", parts_done,7 + 2 * num_levels); setStatusArea((string)Step_x_x);setProgressBar( (int)(1000 * (float)(parts_done) / (float)(7 + 2 * num_levels) ));393 system((strOniSplit + " " + strImportOption + " " + TRAM.string() + " " + VanillaTRAM.string()).c_str());394 //parts_done++; setStatusArea((string)"Copying level scripts...");setProgressBar( (int)(1000 * (float)(parts_done) / (float)(7 + 2 * num_levels) ));395 if (exists("../GameDataFolder/IGMD")) remove_all("../GameDataFolder/IGMD");396 */397 create_directory((path)"../GameDataFolder/IGMD");398 copy((path)"packages/VanillaBSL/IGMD", (path)"../GameDataFolder");399 setProgressBar( 1000 );400 401 if(exists("../../persist.dat")) if(!exists("../persist.dat"))402 403 //TODO: Concactate level0 Dirs.404 405 copy("../../persist.dat","..");406 if(exists("../../key_config.txt"))if(!exists("../key_config.txt"))407 copy("../../key_config.txt","..");408 409 #ifndef WIN32410 /* On Mac only, set the current GDF to the AE GDF by writing to Oni's global preferences file (thankfully a standard OS X ".plist" XML file).411 Tests for presence of prefs with [ -f ] before doing anything so it doesn't create a partial prefs file -- just in case user has never412 run Oni before :-p */413 string fullAEpath = escapePath(system_complete(".").parent_path().parent_path().string()); // get full path for edition/414 char prefsCommand[300] = "[ -f ~/Library/Preferences/com.godgames.oni.plist ] && defaults write com.godgames.oni RetailInstallationPath -string '";415 strcat(prefsCommand, fullAEpath.c_str()); // get path of edition/ folder (Oni wants the folder that *contains* the GDF)416 strcat(prefsCommand, "'"); // path string is enclosed in single quotes to avoid the need to escape UNIX-unfriendly characters417 system(prefsCommand);418 419 #endif420 421 422 setStatusArea((string)"Done! Now select your mod packages and click install.");423 // while(1) Sleep(-1);424 425 }426 catch (exception & ex) {427 setStatusArea("Warning, handled exception: " + (string)ex.what());428 }429 430 ptime end_time(second_clock::local_time());431 time_period total_time (start_time, end_time);432 logfile << "\n\nGlobalization ended " << to_simple_string(end_time) << "\nThe process took " << total_time.length();433 //total_time.length().hours();434 logfile.close();435 busy = 0;436 return err;437 }438 439 440 vector<ModPackage> getPackages(void)441 {442 vector<ModPackage> packages;443 packages.reserve(65536); // come on, we shouldn't need this much space...right?!444 fstream file;445 string filename = "\0";446 string MODINFO_CFG = "Mod_Info.cfg";447 448 try449 {450 for (directory_iterator dir_itr("./packages"), end_itr; dir_itr != end_itr; ++dir_itr)451 {452 file.open((dir_itr->path().string() + "/" + MODINFO_CFG).c_str());453 //cout << filename << "\n";454 455 if(!file.fail())456 {457 //cout << dir_itr->path().string() + MODINFO_CFG;458 //would prefer to push a pointer to a package, but this will do for now459 packages.push_back(fileToModPackage(file));460 }461 file.close();462 file.clear();463 }464 sort(packages.begin(), packages.end());465 }466 catch (const std::exception & ex)467 {468 cout << "Warning, something odd happened!\n";469 }470 471 return packages;472 }473 474 ModPackage fileToModPackage(fstream &file)475 {476 /*477 This converts a file to a ModPackage struct.478 479 A few notes...480 "iter" is the current word we are on. I should have named it "token" or something, but I don't have multiple iterators, so its ok.481 I refer to (*iter) at the beginning of each if statement block. I could probably store it as a variable, but I'm pretty sure that dereferencing a pointer\iterator isn't much482 slower than reading a variable.483 */484 ModPackage package;485 string line;486 static string NameOfMod = "NameOfMod"; //used for comparing to the current token...487 //I could have done it in reverse (*iter).compare("ModString") or488 static string ARROW = "->"; //did something like "ModString".compare(*iter), and it would have been489 static string ModString = "ModString"; //functionably the same.490 static string HasOnis = "HasOnis";491 static string HasDeltas = "HasDeltas";492 static string HasBSL = "HasBSL";493 static string HasDats = "HasDats";494 static string IsEngine = "IsEngine";495 static string Readme = "Readme";496 static string GlobalNeeded = "GlobalNeeded";497 static string Category = "Category";498 static string Creator = "Creator";499 while (! file.eof() )500 {501 getline (file,line);502 vector<string> tokens;503 vector<string>::iterator iter;504 tokenize(line, tokens); //string to vector of "words"505 if (tokens.capacity() >= 2) { //make sure they are using enough stuff506 iter = tokens.begin(); //what word we are on, starts at first word507 /*508 if (!AEInstallVersion.compare(*iter))509 If mod is too old, skip this mod.510 */511 /*else*/if (!NameOfMod.compare(*iter)) { //if it contains the name512 for ( ; iter !=tokens.end() && SLASHSLASH.compare(*iter); iter++) { //interates through the words, ends if it reaches the end of the line or a "//" comment513 if (ARROW.compare(*iter) && NameOfMod.compare(*iter)) { //ignores "->" and "NameOfMod"514 //cout << *iter;515 //cout << " ";516 package.name += *iter + " ";517 }518 }519 520 }521 else if (!ModString.compare(*iter)) {522 iter++; iter++;523 package.modStringName = *iter;524 iter++;525 package.modStringVersion = atoi((*iter).c_str());526 }527 else if (!HasOnis.compare(*iter)) {528 iter++; iter++;529 if ( boost::iequals(*iter, "Yes")) package.hasOnis = 1;530 }531 else if (!HasBSL.compare(*iter)) { // string comparer...I know my implementation here sucks. I need to change it to check each character one by one. At the moment,532 iter++; iter++; // using "YFR" would probably set it off. :<533 if ( boost::iequals(*iter, "Yes")) package.hasBSL = 1;534 else if ( boost::iequals(*iter, "Addon")) package.hasAddon = 1;535 }536 else if (!HasDeltas.compare(*iter)) {537 iter++; iter++;538 if (toupper((*iter)[0]) + toupper((*iter)[1]) + toupper((*iter)[2]) == 'Y' + 'E' + 'S') package.hasDeltas = 1;539 }540 else if (!HasDats.compare(*iter)) {541 iter++; iter++;542 if (toupper((*iter)[0]) + toupper((*iter)[1]) + toupper((*iter)[2]) == 'Y' + 'E' + 'S') package.hasDats = 1;543 }544 else if (!IsEngine.compare(*iter)) {545 iter++; iter++;546 if (toupper((*iter)[0]) + toupper((*iter)[1]) + toupper((*iter)[2]) == 'Y' + 'E' + 'S') package.isEngine = 1;547 }548 else if (!GlobalNeeded.compare(*iter)) {549 iter++; iter++;550 if (toupper((*iter)[0]) + toupper((*iter)[1]) + toupper((*iter)[2]) == 'Y' + 'E' + 'S') package.globalNeeded = 1;551 else if (toupper((*iter)[0]) + toupper((*iter)[1]) == 'N' + 'O') package.globalNeeded = 1; //Really the only place where checking for "No" is important atm.552 }553 else if (!Category.compare(*iter)) {554 for ( ; iter !=tokens.end() && SLASHSLASH.compare(*iter); iter++) { //interates through the words, ends if it reaches the end of the line or a "//" comment555 if (ARROW.compare(*iter) && Category.compare(*iter)) { //ignores "->" and "Category"556 //cout << *iter;557 //cout << " ";558 package.category += *iter + " ";559 }560 }561 }562 else if (!Creator.compare(*iter)) { //if it contains the name563 for ( ; iter !=tokens.end() && SLASHSLASH.compare(*iter); iter++) { //interates through the words, ends if it reaches the end of the line or a "//" comment564 if (ARROW.compare(*iter) && Creator.compare(*iter)) { //ignores "->" and "Category"565 //cout << *iter;566 //cout << " ";567 package.creator += *iter + " ";568 }569 }570 }571 else if (!Readme.compare(*iter)) { //if it contains the name572 for ( ; iter !=tokens.end() && SLASHSLASH.compare(*iter); iter++) { //interates through the words, ends if it reaches the end of the line or a "//" comment573 if (ARROW.compare(*iter) && Readme.compare(*iter)) { //ignores "->" and "Category"574 if(!(*iter).compare("\\n")) package.readme += '\n';575 else package.readme += *iter + " ";576 }577 }578 }579 }580 581 }582 package.doOutput();583 return package;584 }585 586 void recompileAll(vector<string> installedMods)587 {try {588 busy = 1;589 using namespace boost::gregorian;590 using namespace boost::posix_time;591 using boost::lexical_cast;592 using boost::bad_lexical_cast;593 path vanilla_dir = "./VanillaDats/";594 string importCommand = "";595 char statusString[128];596 int numberOfDats = 0;597 int j = 1;598 string datString;599 600 601 setStatusArea("Importing levels...");602 //setStatusArea("Recompiling Data...");603 604 std::stringstream out;605 606 ptime start_time(second_clock::local_time());607 clearOldDats();608 609 if(exists("Install.log")) remove("Install.log");610 ofstream logfile("Install.log");611 logfile << "Mod Installation started " << to_simple_string(start_time) << endl;612 logfile.close();613 614 615 if(splitInstances == SPLIT){616 recursive_directory_iterator end_iter;617 618 for ( recursive_directory_iterator dir_itr( vanilla_dir );619 dir_itr != end_iter;620 ++dir_itr )621 {622 try{623 if ( is_directory( dir_itr->status() ) && dir_itr.level() == 1)624 {625 numberOfDats++;626 }627 }628 catch(exception & ex) {629 remove("Install.log");630 ofstream logfile("Install.log");631 632 633 logfile << "Warning, exception " << ex.what() << "!";634 setStatusArea("Warning, exception " + (string)ex.what() + "!");635 logfile.close();636 }637 }638 try {639 //recursive_directory_iterator end_iter;640 641 642 out << numberOfDats;643 datString = out.str();644 for ( recursive_directory_iterator dir_itr( vanilla_dir );645 dir_itr != end_iter;646 ++dir_itr )647 {648 try649 {650 if ( is_directory( dir_itr->status() ) && dir_itr.level() == 1)651 {652 importCommand = strOniSplit + " " + strImportOption + " " + dir_itr->path().parent_path().string() + '/' + dir_itr->path().filename();653 for (unsigned int i = 0; i < installedMods.size(); ++i) {654 if (exists("packages/" + installedMods[i] + "/oni/" + dir_itr->path().parent_path().filename() + '/' + dir_itr->path().filename() ))655 importCommand += " packages/" + installedMods[i] + "/oni/" + dir_itr->path().parent_path().filename() + '/' + dir_itr->path().filename();656 657 //else cout << " VanillaDats/" + installedMods[i] + "/oni/";658 }659 importCommand += " ../GameDataFolder/" + dir_itr->path().filename() + ".dat >> Install.log";660 661 662 setProgressBar( (int)(1000 * (float)(j-1) / (float)numberOfDats) ); //100% * dat we're on / total dats663 setStatusArea("Step " + lexical_cast<std::string>(j) + '/' + lexical_cast<std::string>(numberOfDats)+ ": Importing " + dir_itr->path().filename() + " ");664 665 system(importCommand.c_str());666 //Sleep(1000);667 //cout << importCommand << "\n";668 j++;669 670 }671 }672 catch ( const std::exception & ex )673 {674 675 remove("Install.log");676 ofstream logfile("Install.log");677 678 679 logfile << "Warning, exception " << ex.what() << "!";680 setStatusArea("Warning, exception " + (string)ex.what() + "!");681 logfile.close();682 }683 }684 685 }686 catch( const std::exception & ex ) {687 688 remove("Install.log");689 ofstream logfile("Install.log");690 691 692 logfile << "Warning, exception " << ex.what() << "!";693 setStatusArea("Warning, exception " + (string)ex.what() + "!");694 logfile.close();695 }696 697 }698 else if(splitInstances == NOT_SPLIT){699 directory_iterator end_iter;700 701 for ( directory_iterator dir_itr( vanilla_dir );702 dir_itr != end_iter;703 ++dir_itr )704 {705 706 if ( is_directory( dir_itr->status() ) )707 {708 numberOfDats++;709 }710 711 712 }713 714 out << numberOfDats;715 datString = out.str();716 717 for ( directory_iterator dir_itr( vanilla_dir );718 dir_itr != end_iter;719 ++dir_itr )720 {721 try722 {723 if ( is_directory( dir_itr->status() ) )724 {725 importCommand = strOniSplit + " " + strImportOption + " " + vanilla_dir.string() + dir_itr->path().filename() + " ";726 for (unsigned int i = 0; i < installedMods.size(); ++i) {727 if (exists("packages/" + installedMods[i] + "/oni/" + dir_itr->path().filename() ))728 importCommand += " packages/" + installedMods[i] + "/oni/" + dir_itr->path().filename();729 }730 importCommand += " ../GameDataFolder/" + dir_itr->path().filename() + ".dat >> Install.log";731 732 733 setProgressBar( (int)(1000 * (float)(j-1) / (float)numberOfDats) ); //100% * dat we're on / total dats734 setStatusArea("Step " + lexical_cast<std::string>(j) + '/' + lexical_cast<std::string>(numberOfDats)+ ": Importing " + dir_itr->path().filename() + " ");735 736 system(importCommand.c_str());737 738 j++;739 }740 }741 catch ( const std::exception & ex )742 {743 744 remove("Install.log");745 ofstream logfile("Install.log");746 747 748 logfile << "Warning, exception " << ex.what() << "!";749 setStatusArea("Warning, exception " + (string)ex.what() + "!");750 logfile.close();751 }}752 }753 754 755 756 757 758 759 760 761 762 763 vector<string> BSLfolders;764 vector<string> skippedfolders;765 766 767 ofstream BSLlog("BSL.log");768 for ( directory_iterator dir_itr( "../GameDataFolder/IGMD/" ), end_itr;769 dir_itr != end_itr;770 ++dir_itr ) {771 if( exists(dir_itr->path().string() + "/ignore.txt") ){772 BSLfolders.push_back(dir_itr->path().filename());773 skippedfolders.push_back(dir_itr->path().filename());774 }775 }776 777 for (int i = installedMods.size() - 1; i >= 0; i--) { //Iterates through the installed mods (backwards :P)778 for (unsigned int j = 0; j < globalPackages.size(); ++j) { //looking in the global packages779 if (globalPackages[j].modStringName == installedMods[i]) { //for a mod that has BSL in it780 /*BSLlog << "Testing " << globalPackages[j].modStringName << "\n"781 << "HasBSL: " << globalPackages[j].hasBSL << "\n"782 << "HasAddon: " << globalPackages[j].hasAddon << "\n";*/783 if(!(globalPackages[j].hasAddon || globalPackages[j].hasBSL)) break; //skip non-BSL784 if( exists( "packages/" + globalPackages[j].modStringName + "/BSL/" ) ) {785 copyBSL("packages/" + globalPackages[j].modStringName + "/BSL", BSLfolders, globalPackages[j] );786 BSLlog << "Copied " << globalPackages[j].modStringName << "!\n";787 }788 789 }790 791 }792 }793 794 ModPackage emptyPackage;795 emptyPackage.modStringName = "VanillaBSL";796 emptyPackage.hasBSL = 1;797 copyBSL("packages/VanillaBSL/IGMD", BSLfolders, emptyPackage);798 BSLlog.close();799 800 801 logfile << "Writing config file";802 writeInstalledMods(installedMods);803 setProgressBar(1000);804 805 string finallyDone = "Done! You can now play Oni.";806 807 808 809 setStatusArea(finallyDone);810 811 ptime end_time(second_clock::local_time());812 time_period total_time (start_time, end_time);813 814 815 ofstream logfile2("Install.log", ios::app | ios::ate);816 string outstring = (string)"\n\nGlobalization ended " + to_simple_string(end_time) + "\nThe process took ";// + (string)total_time.length();817 818 logfile2 << "\nInstallation ended " << to_simple_string(end_time) << "\nThe process took " << total_time.length();819 820 //logfile2.write(outstring.c_str(), outstring.length());821 logfile2.close();822 823 //total_time.length().hours();824 825 Sleep(1000);826 setProgressBar(0);827 828 }829 catch(exception & ex) {830 remove("Install.log"); //why did we do this? :|831 ofstream logfile("Install.log");832 833 834 logfile << "Warning, exception " << ex.what() << "!";835 setStatusArea("Warning, exception " + (string)ex.what() + "!");836 logfile.close();837 }838 busy = 0;839 }840 841 void copyBSL(string copypath, vector<string>& BSLfolders, ModPackage pkg) {842 843 ofstream BSLlog("BSL2.log", ios::app );844 845 try {846 for ( directory_iterator dir_itr( copypath ), end_itr;847 dir_itr != end_itr;848 ++dir_itr ) {849 850 if ( is_directory( dir_itr->path() ) && dir_itr->path().string() != ".svn" ) {851 BSLlog << "Testing " << dir_itr->path().string() << " HasBSL: " << pkg.hasBSL << " HasAddon: " << pkg.hasAddon << "\n";852 int skip_folder = 0;853 854 for(unsigned int k = 0; k < BSLfolders.size(); k++) {//iterate through already found BSL folders855 BSLlog << "testing " << dir_itr->path().filename() << " vs " << BSLfolders[k] << "\n";856 if(dir_itr->path().filename() == BSLfolders[k]) {857 skip_folder = 1;858 BSLlog << "skipping " << BSLfolders[k] << " in " << pkg.modStringName << "\n";859 break;860 }861 }862 if (!skip_folder && !exists("../GameDataFolder/IGMD/" + dir_itr->path().filename() + "/ignore.txt")) {863 remove_all( "../GameDataFolder/IGMD/" + dir_itr->path().filename() );864 Sleep(100);865 create_directory( "../GameDataFolder/IGMD/" + dir_itr->path().filename());866 BSLlog << "Copied " << dir_itr->path().string() << " in " << pkg.modStringName << "!\n";867 for ( directory_iterator bsl_itr( dir_itr->path() );868 bsl_itr != end_itr;869 bsl_itr++ ) {870 if ( bsl_itr->path().extension() == ".bsl" ) {871 copy_file(bsl_itr->path(), "../GameDataFolder/IGMD/" + dir_itr->path().filename() + "/" + bsl_itr->path().filename());872 }873 }874 BSLfolders.push_back( dir_itr->path().filename() ); //add back check for addon875 BSLlog << "Pushing " << dir_itr->path().filename() << "\n" ;876 }877 }878 }879 }880 catch ( const std::exception & ex )881 {882 setStatusArea("Warning, exception " + (string)ex.what() + "!");883 while(1) Sleep(1000);884 }885 BSLlog.close();886 887 }888 889 890 void writeInstalledMods(vector<string> installedMods)891 {892 893 if ( exists( strInstallCfg ) )894 {895 remove( strInstallCfg );896 }897 898 ofstream file(strInstallCfg.c_str());899 900 vector<string>list = installedMods;901 vector<string>::iterator begin_iter = list.begin();902 vector<string>::iterator end_iter = list.end();903 904 sort( list.begin(), list.end() );905 906 for( ; begin_iter != end_iter; ++begin_iter) {907 file << *begin_iter << " ";908 }909 910 file.close();911 file.clear();912 913 }914 915 vector<string> getInstallString(string Cfg)916 {917 //system(strPauseCmd);918 vector<string> returnval;919 920 string line;921 fstream file;922 923 if (exists( Cfg ))924 {925 file.open(Cfg.c_str());926 getline(file, line);927 tokenize(line, returnval);928 file.close();929 file.clear();930 sort(returnval.begin(), returnval.end());931 }932 else cout << "fail";933 934 return returnval;935 }936 937 //stolen token function...938 void tokenize(const string& str, vector<string>& tokens, const string& delimiters)939 {940 // Skip delimiters at beginning.941 string::size_type lastPos = str.find_first_not_of(delimiters, 0);942 // Find first "non-delimiter".943 string::size_type pos = str.find_first_of(delimiters, lastPos);944 945 while (string::npos != pos || string::npos != lastPos)946 {947 // Found a token, add it to the vector.948 tokens.push_back(str.substr(lastPos, pos - lastPos));949 // Skip delimiters. Note the "not_of"950 lastPos = str.find_first_not_of(delimiters, pos);951 // Find next "non-delimiter"952 pos = str.find_first_of(delimiters, lastPos);953 }954 }955 956 void clearOldDats(void) {957 directory_iterator end_iter_gdf;958 for ( directory_iterator dir_itr_gdf( "../GameDataFolder" );959 dir_itr_gdf != end_iter_gdf;960 ++dir_itr_gdf )961 {962 //cout << dir_itr_gdf->path().extension() << "\n";963 if ( dir_itr_gdf->path().extension() == ".dat" || dir_itr_gdf->path().extension() == ".raw" || dir_itr_gdf->path().extension() == ".sep" ) {964 remove( dir_itr_gdf->path() );965 }966 967 }968 969 }970 971 #include "boost/thread.hpp"972 20 #include <boost/thread/mutex.hpp> 973 974 /////////////////////////////////////////////////////////////////////////////975 // Name: main_window.cpp976 // Purpose:977 // Author:978 // Modified by:979 // Created: 07/05/2009 20:38:25980 // RCS-ID:981 // Copyright:982 // Licence:983 /////////////////////////////////////////////////////////////////////////////984 985 21 // For compilers that support precompilation, includes "wx/wx.h". 986 22 #include "wx/wxprec.h" … … 996 32 ////@begin includes 997 33 #include "about.h" 34 #include "main_window.h" 35 #include "installer.h" 998 36 ////@end includes 999 1000 #include "main_window.h"1001 37 1002 38 ////@begin XPM images … … 1008 44 ////@end XPM images 1009 45 1010 //#define wxDebug 1; 1011 //#define wxUSE_UNICODE 1; 46 bool busy = false; 47 vector<string> globalInstalledMods; 48 vector<ModPackage> globalPackages; 49 // Variable declarations 50 #ifdef WIN32 51 bool splitInstances = true; 52 string strImportOption = "-import:nosep"; 53 string strOniSplit = "Onisplit.exe"; 54 #else 55 bool splitInstances = false; 56 string strImportOption = "-import:sep"; 57 string strOniSplit = "mono Onisplit.exe"; 58 #endif 1012 59 1013 60 /* … … 1093 140 } 1094 141 1095 1096 142 /* 1097 143 * MainWindow destructor … … 1103 149 ////@end MainWindow destruction 1104 150 } 1105 1106 151 1107 152 /* … … 1129 174 ReglobalizeButton = NULL; 1130 175 ////@end MainWindow member initialisation 1131 1132 } 1133 176 } 1134 177 1135 178 /* … … 1169 212 itemMenu42->Append(wxID_OPTIONS, _("Show Advanced Options..."), wxEmptyString, wxITEM_CHECK); 1170 213 menuBar->Append(itemMenu42, _("Options")); 1171 wxMenu* itemMenu44 = new wxMenu;1172 214 #ifdef WIN32 1173 215 itemMenu44->Append(wxID_ABOUT, _("About"), wxEmptyString, wxITEM_NORMAL); … … 1242 284 StatusArea->SetName(_T("StatusArea")); 1243 285 StatusArea->SetFieldsCount(1); 1244 StatusArea->SetStatusText(_("AE Installer v1.0.1"), 0); 286 string versionText = "AE Installer v" + (string)INSTALLER_VERSION; 287 StatusArea->SetStatusText(versionText.c_str(), 0); 1245 288 itemBoxSizer2->Add(StatusArea, 0, wxGROW|wxALL, 0); 1246 289 … … 1312 355 ::CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_INPROC_SERVER, IID_ITaskbarList, (void **)&pTaskbarList); 1313 356 #endif 1314 1315 1316 /*if ( exists( "../../GameDataFolder/level0_Final.sep" ) ) {1317 strImportOption = "-import:sep";1318 splitInstances = NOT_SPLIT;1319 }1320 else {1321 strImportOption = "-import:nosep";1322 splitInstances = SPLIT;1323 }*/1324 1325 1326 #ifndef WIN321327 strImportOption = "-import:sep";1328 splitInstances = NOT_SPLIT;1329 #else1330 strImportOption = "-import:nosep";1331 splitInstances = SPLIT;1332 #endif1333 1334 #ifndef WIN321335 strImportOption = "-import:sep";1336 splitInstances = NOT_SPLIT;1337 #else1338 strImportOption = "-import:nosep";1339 splitInstances = SPLIT;1340 #endif1341 357 1342 358 globalPackages = getPackages(); … … 1352 368 OptionsPanel->Hide(); 1353 369 1354 //#ifndef WIN32 1355 // itemMenu37->Append(wxID_ABOUT, _("About"), wxEmptyString, wxITEM_NORMAL); 1356 1357 //#endif 1358 1359 if(splitInstances == SPLIT) SeperatedRadio->SetValue(true); 370 if(splitInstances) SeperatedRadio->SetValue(true); 1360 371 else CompleteRadio->SetValue(true); 1361 372 if(strImportOption == "-import:nosep") NoSepRadio->SetValue(true); 1362 373 else SepRadio->SetValue(true); 1363 1364 374 1365 375 #ifdef WIN32 … … 1368 378 ShowWindow( hWnd, SW_HIDE ); 1369 379 #endif 1370 1371 //MainWindow::SetSize(MainWindow::GetRect().GetWidth(), MainWindow::GetRect().GetHeight()-OptionsPanel->GetRect().GetHeight() ); 1372 } 1373 380 } 1374 381 1375 382 /* … … 1382 389 case wxCHK_UNCHECKED: 1383 390 for(unsigned int i = 0; i < globalPackages.size(); i++) Mods_CheckboxList->Check(i, false); 1384 //SelectAll->Set3StateValue(wxCHK_CHECKED);1385 391 break; 1386 392 case wxCHK_CHECKED: 1387 393 for(unsigned int i = 0; i < globalPackages.size(); i++) Mods_CheckboxList->Check(i, true); 1388 //SelectAll->Set3StateValue(wxCHK_UNCHECKED);1389 394 break; 1390 395 case wxCHK_UNDETERMINED: 1391 396 for(unsigned int i = 0; i < globalPackages.size(); i++) Mods_CheckboxList->Check(i, false); 1392 //SelectAll->Set3StateValue(wxCHK_CHECKED);1393 397 break; 1394 1395 } 1396 1397 } 1398 398 } 399 } 1399 400 1400 401 /* … … 1404 405 void MainWindow::ModList_OnCreate( wxWindowCreateEvent& event ) 1405 406 { 1406 1407 407 1408 408 } … … 1457 457 wxIcon MainWindow::GetIconResource( const wxString& name ) 1458 458 { 1459 1460 459 // Icon retrieval 1461 460 ////@begin MainWindow icon retrieval … … 1470 469 } 1471 470 1472 1473 471 /* 1474 472 * wxEVT_COMMAND_LISTBOX_SELECTED event handler for Mods_CheckboxList1 … … 1477 475 void MainWindow::OnModsCheckboxList1Selected( wxCommandEvent& event ) 1478 476 { 1479 //event.GetSelection1480 477 titleText->SetValue(globalPackages[event.GetSelection()].name.c_str()); 1481 478 creatorText->SetValue(globalPackages[event.GetSelection()].creator.c_str()); 1482 479 descriptionText->SetValue(globalPackages[event.GetSelection()].readme.c_str()); 1483 1484 //creatorText->Refresh(); 1485 } 1486 480 } 1487 481 1488 482 /* … … 1519 513 this->SetSize(this->GetRect().GetWidth(), this->GetRect().GetHeight()-OptionsPanel->GetRect().GetHeight());} 1520 514 else { 1521 // Uncomment this when we release, it gets annoying if you are testing globalization a lot ;) 1522 wxMessageDialog* YesNoDialog = new wxMessageDialog(this, "WARNING: These options are for advanced users only, use with caution.", 515 wxMessageDialog* YesNoDialog = new wxMessageDialog(this, "WARNING: These options are for advanced users only, use with caution.", 1523 516 "AE Installer Alert", wxOK | wxICON_EXCLAMATION , wxDefaultPosition); 1524 517 YesNoDialog->ShowModal(); … … 1529 522 } 1530 523 1531 1532 524 /* 1533 525 * wxEVT_COMMAND_MENU_SELECTED event handler for wxID_EXIT … … 1539 531 } 1540 532 1541 1542 533 /* 1543 534 * wxEVT_COMMAND_BUTTON_CLICKED event handler for Install_Button 1544 535 */ 1545 1546 536 1547 537 struct recompile … … 1555 545 1556 546 } 1557 1558 547 vector<string> thePackages; 1559 548 }; … … 1565 554 } 1566 555 1567 1568 1569 556 void MainWindow::OnInstallButtonClick( wxCommandEvent& event ) 1570 557 { 1571 1572 558 vector<string> localPackages; 1573 559 localPackages.push_back("00000Globalize"); … … 1576 562 sort(localPackages.begin(), localPackages.end()); 1577 563 localPackages[0] = "Globalize"; 1578 //MainWindow::MainWindow().Hide();1579 // boost::thread thrd2(recompileAll(localPackages) );1580 //MainWindow::MainWindow().Show();1581 564 this->InstallButton->Disable(); 1582 565 this->ReglobalizeButton->Disable(); … … 1587 570 recompileAll(localPackages); 1588 571 #endif 1589 1590 572 this->InstallButton->Enable(); 1591 573 this->ReglobalizeButton->Enable(); 1592 574 } 1593 1594 1595 } 1596 1597 /*void setStatusArea( string s ) { 1598 //TheStatusBar = MainWindow::StatusArea; 1599 (**TheStatusBar).SetStatusText(_(s.c_str()), 0); 1600 1601 //MainWindow::MainWindow().SetSize(MainWindow::MainWindow().GetRect().GetWidth(), MainWindow::MainWindow().GetRect().GetHeight()+1); 1602 1603 //MainWindow::StatusBar->SetLabel("Importing Files..."); 1604 //StatusBar->SetLabel(s); 1605 //->SetLabel(s); 1606 1607 }*/ 1608 1609 void setProgressBar( int i ) { 1610 //TheProgressBar->SetValue( 575 } 576 577 void setProgressBar( int i ) 578 { 1611 579 #ifdef WIN32 1612 1613 1614 1615 580 if (SUCCEEDED(pTaskbarList->QueryInterface(IID_ITaskbarList3, (void **)&pTaskbarList3))) 1616 581 { 1617 1618 582 pTaskbarList3->SetProgressValue(Handle,i, 1000); 1619 if ( i == 0 ) { 1620 1621 pTaskbarList3->SetProgressState(Handle,TBPF_NOPROGRESS); 1622 } 1623 } 1624 1625 583 if ( i == 0 ) 584 { 585 pTaskbarList3->SetProgressState(Handle,TBPF_NOPROGRESS); 586 } 587 } 1626 588 #endif 1627 589 TheProgressBar->SetValue(i); 1628 1629 } 1630 590 } 1631 591 1632 592 /* … … 1642 602 } 1643 603 1644 1645 604 /* 1646 605 * wxEVT_COMMAND_MENU_SELECTED event handler for wxID_ABOUT … … 1651 610 ////@begin wxEVT_COMMAND_MENU_SELECTED event handler for wxID_ABOUT in MainWindow. 1652 611 // Before editing this code, remove the block markers. 612 // TODO: Make About window work again! 1653 613 About* window = new About(this); 1654 int returnValue = window->ShowModal();1655 614 window->Destroy(); 1656 615 ////@end wxEVT_COMMAND_MENU_SELECTED event handler for wxID_ABOUT in MainWindow. 1657 616 } 1658 617 1659 1660 618 /* 1661 619 * wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for NoSep_RadioButton … … 1667 625 } 1668 626 1669 1670 627 /* 1671 628 * wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for Sep_RadioButton … … 1677 634 } 1678 635 1679 1680 636 /* 1681 637 * wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for Separated_RadioButton … … 1688 644 void MainWindow::OnCompleteRadioButtonSelected( wxCommandEvent& event ) 1689 645 { 1690 splitInstances = NOT_SPLIT; 1691 1692 } 1693 646 splitInstances = false; 647 } 1694 648 1695 649 /* … … 1702 656 } 1703 657 1704 1705 658 /* 1706 659 * wxEVT_COMMAND_MENU_SELECTED event handler for wxID_LOAD 1707 660 */ 1708 661 1709 1710 1711 1712 void MainWindow::refreshMods (vector<string> s) { 1713 662 // TODO: Make refreshMods actually refresh the list in the window of available mods so we can see any new package info and deleted mods are removed from the list 663 void MainWindow::refreshMods (vector<string> s) 664 { 1714 665 Mods_CheckboxList->Clear(); 1715 //globalInstalledMods = getPackages();1716 666 for (unsigned int i = 0; i < globalPackages.size(); i++) { 1717 667 Mods_CheckboxList->Append(globalPackages[i].name.c_str()); 1718 if( binary_search(s.begin(), s.end(), globalPackages[i].modStringName ) ) Mods_CheckboxList->Check(i); 1719 //else Mods_CheckboxList->Check(i,0); 1720 668 if( binary_search(s.begin(), s.end(), globalPackages[i].modStringName ) ) 669 Mods_CheckboxList->Check(i); 1721 670 } 1722 671 } … … 1738 687 refreshMods(getInstallString( string(openFileDialog->GetPath()) )); 1739 688 } 1740 1741 1742 } 1743 689 } 1744 690 1745 691 /* … … 1761 707 if ( openFileDialog->ShowModal() == wxID_OK ) 1762 708 { 1763 1764 1765 //Mods_CheckboxList->1766 1767 1768 1769 //1770 1771 709 if ( exists( openFileDialog->GetPath().c_str() ) ) 1772 710 { … … 1789 727 file.close(); 1790 728 file.clear(); 1791 1792 //SetCurrentFilename(openFileDialog->GetFilename()); 1793 //theText->LoadFile(openFileDialog->GetFilename()); 1794 //SetStatusText(GetCurrentFilename(), 0); 1795 //SetStatusText(openFileDialog->GetDirectory(),1); 1796 } 1797 } 1798 1799 729 } 730 } 1800 731 1801 732 /* … … 1805 736 void MainWindow::OnReGlobalizeButtonClick( wxCommandEvent& event ) 1806 737 { 1807 wxMessageDialog* YesNoDialog = new wxMessageDialog(this, "WARNING: This will DELETE the Edition's GameDataFolder and recreate it from the vanilla Oni game data. \n Are you SURE you want to do this? ", "AE Installer Alert", wxYES_NO | wxICON_EXCLAMATION , wxDefaultPosition); 1808 1809 if (YesNoDialog->ShowModal() == wxID_NO) { //if the user said no... 1810 1811 } 1812 else { 1813 738 string YesNoMsg = "WARNING: This will DELETE the Edition's GameDataFolder and recreate it from the vanilla Oni game data.\n"; 739 YesNoMsg = YesNoMsg + "Are you SURE you want to do this?"; 740 wxMessageDialog* YesNoDialog = new wxMessageDialog(this, YesNoMsg.c_str(), "AE Installer Alert", wxYES_NO | wxICON_EXCLAMATION , wxDefaultPosition); 741 742 if (YesNoDialog->ShowModal() == wxID_NO) 743 { 744 //if the user said no... 745 } 746 else 747 { 1814 748 this->InstallButton->Disable(); 1815 749 this->ReglobalizeButton->Disable(); 1816 1817 750 #ifdef WIN32 1818 1819 751 boost::thread thrd2(globalizeData); 1820 752 //globalizeData(); … … 1825 757 globalizeData(); 1826 758 #endif 1827 1828 759 this->InstallButton->Enable(); 1829 760 this->ReglobalizeButton->Enable(); 1830 761 } 1831 1832 762 } 1833 763 /* 1834 764 * wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for Separated_RadioButton 1835 765 */ 1836 1837 /*void MainWindow::OnSeparatedRadioButtonSelected( wxCommandEvent& event )1838 {1839 ////@begin wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for Separated_RadioButton in MainWindow.1840 // Before editing this code, remove the block markers.1841 event.Skip();1842 ////@end wxEVT_COMMAND_RADIOBUTTON_SELECTED event handler for Separated_RadioButton in MainWindow.1843 }*/1844 1845 766 1846 767 /* … … 1850 771 void MainWindow::OnSeperatedRadioButtonSelected( wxCommandEvent& event ) 1851 772 { 1852 splitInstances = SPLIT; 1853 } 1854 773 splitInstances = true; 774 }
Note:
See TracChangeset
for help on using the changeset viewer.