00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifdef HAVE_CONFIG_H
00023 #include <config.h>
00024 #endif
00025
00026 #include <wx/wxprec.h>
00027
00028 #ifndef WX_PRECOMP
00029 #include <wx/wx.h>
00030 #endif
00031
00032 #include "MainFrame.hh"
00033 #include "../GenApp.hh"
00034
00035 using namespace emuWorks;
00036
00037 const char *MainFrame::ICON[] = {
00038 "16 16 4 1",
00039 " c None",
00040 "! c #F0BC3C",
00041 "# c #FCFCFC",
00042 "$ c black",
00043 "!!!!!!!!!!!!!!!!",
00044 "##############$!",
00045 "$$$$$$$$$$$$$$$!",
00046 "!$#$#$#$#$#$#$!!",
00047 "!!$$$$$$$$$$$!!!",
00048 "!!#$!#$!#$!#$!!!",
00049 "!!#$!#$!#$!#$!!!",
00050 "!!#$!#$!#$!#$!!!",
00051 "!!#$!#$!#$!#$!!!",
00052 "!!#$!#$!#$!#$!!!",
00053 "!$$$$$$$$$$$$$!!",
00054 "!############$!!",
00055 "$$$$$$$$$$$$$$$!",
00056 "##############$!",
00057 "$$$$$$$$$$$$$$$!",
00058 "!!!!!!!!!!!!!!!!"
00059 };
00060
00061 IMPLEMENT_DYNAMIC_CLASS(MainFrame, wxFrame)
00062
00063 BEGIN_EVENT_TABLE(MainFrame, wxFrame)
00064 EVT_CLOSE(MainFrame::windowClosing)
00065
00066 EVT_MENU(XRCID("IDM_FILE_OPEN"), MainFrame::fileOpen)
00067 EVT_MENU(XRCID("IDM_FILE_CLOSE"), MainFrame::fileClose)
00068 EVT_MENU(XRCID("IDM_FILE_SAVE"), MainFrame::fileSave)
00069 EVT_MENU(XRCID("IDM_FILE_SAVE_AS"), MainFrame::fileSaveAs)
00070 EVT_MENU(XRCID("IDM_FILE_EXIT"), MainFrame::fileExit)
00071
00072 EVT_MENU(XRCID("IDM_GAME_ONE"), MainFrame::gameChange)
00073 EVT_MENU(XRCID("IDM_GAME_TWO"), MainFrame::gameChange)
00074 EVT_MENU(XRCID("IDM_GAME_THREE"), MainFrame::gameChange)
00075
00076 EVT_MENU(XRCID("IDM_HAVE_ALL_LEVELS"), MainFrame::multiChange)
00077 EVT_MENU(XRCID("IDM_HAVE_ALL_CONTAINERS"), MainFrame::multiChange)
00078 EVT_MENU(XRCID("IDM_HAVE_ALL_TECHNIQUES"), MainFrame::multiChange)
00079 EVT_MENU(XRCID("IDM_HAVE_ALL_SPELLS"), MainFrame::multiChange)
00080 EVT_MENU(XRCID("IDM_HAVE_ALL_ITEMS"), MainFrame::multiChange)
00081 EVT_MENU(XRCID("IDM_HAVE_ALL_SEALS"), MainFrame::multiChange)
00082 EVT_MENU(XRCID("IDM_HAVE_ALL_KEYS"), MainFrame::multiChange)
00083
00084 EVT_MENU(XRCID("IDM_HAVE_NONE_LEVELS"), MainFrame::multiChange)
00085 EVT_MENU(XRCID("IDM_HAVE_NONE_CONTAINERS"), MainFrame::multiChange)
00086 EVT_MENU(XRCID("IDM_HAVE_NONE_TECHNIQUES"), MainFrame::multiChange)
00087 EVT_MENU(XRCID("IDM_HAVE_NONE_SPELLS"), MainFrame::multiChange)
00088 EVT_MENU(XRCID("IDM_HAVE_NONE_ITEMS"), MainFrame::multiChange)
00089 EVT_MENU(XRCID("IDM_HAVE_NONE_SEALS"), MainFrame::multiChange)
00090 EVT_MENU(XRCID("IDM_HAVE_NONE_KEYS"), MainFrame::multiChange)
00091
00092 EVT_MENU(XRCID("IDM_HELP_ABOUT"), MainFrame::helpAbout)
00093
00094 EVT_TEXT(XRCID("ID_NAME"), MainFrame::nameChange)
00095 EVT_COMMAND_SCROLL(XRCID("ID_PLAY_COUNT"), MainFrame::playCountChange)
00096 EVT_CHECKBOX(XRCID("ID_TRIFORCE"), MainFrame::triforceChange)
00097
00098 EVT_COMMAND_SCROLL(XRCID("ID_SWORD_LEVEL"), MainFrame::levelChange)
00099 EVT_COMMAND_SCROLL(XRCID("ID_MAGIC_LEVEL"), MainFrame::levelChange)
00100 EVT_COMMAND_SCROLL(XRCID("ID_LIFE_LEVEL"), MainFrame::levelChange)
00101
00102 EVT_COMMAND_SCROLL(XRCID("ID_MAGIC_CONTAINER"), MainFrame::containerChange)
00103 EVT_COMMAND_SCROLL(XRCID("ID_LIFE_CONTAINER"), MainFrame::containerChange)
00104
00105 EVT_CHECKBOX(XRCID("ID_DOWNWARD_THRUST"), MainFrame::techniqueChange)
00106 EVT_CHECKBOX(XRCID("ID_UPWARD_THRUST"), MainFrame::techniqueChange)
00107
00108 EVT_CHECKBOX(XRCID("ID_SHIELD"), MainFrame::spellChange)
00109 EVT_CHECKBOX(XRCID("ID_JUMP"), MainFrame::spellChange)
00110 EVT_CHECKBOX(XRCID("ID_LIFE"), MainFrame::spellChange)
00111 EVT_CHECKBOX(XRCID("ID_FAIRY"), MainFrame::spellChange)
00112 EVT_CHECKBOX(XRCID("ID_FIRE"), MainFrame::spellChange)
00113 EVT_CHECKBOX(XRCID("ID_REFLECT"), MainFrame::spellChange)
00114 EVT_CHECKBOX(XRCID("ID_SPELL"), MainFrame::spellChange)
00115 EVT_CHECKBOX(XRCID("ID_THUNDER"), MainFrame::spellChange)
00116
00117 EVT_CHECKBOX(XRCID("ID_CANDLE"), MainFrame::itemChange)
00118 EVT_CHECKBOX(XRCID("ID_GLOVE"), MainFrame::itemChange)
00119 EVT_CHECKBOX(XRCID("ID_RAFT"), MainFrame::itemChange)
00120 EVT_CHECKBOX(XRCID("ID_BOOTS"), MainFrame::itemChange)
00121 EVT_CHECKBOX(XRCID("ID_CROSS"), MainFrame::itemChange)
00122 EVT_CHECKBOX(XRCID("ID_FLUTE"), MainFrame::itemChange)
00123 EVT_CHECKBOX(XRCID("ID_MAGIC_KEY"), MainFrame::itemChange)
00124 EVT_CHECKBOX(XRCID("ID_HAMMER"), MainFrame::itemChange)
00125
00126 EVT_CHECKBOX(XRCID("ID_PARAPA"), MainFrame::sealChange)
00127 EVT_CHECKBOX(XRCID("ID_MIDORO"), MainFrame::sealChange)
00128 EVT_CHECKBOX(XRCID("ID_ISLAND"), MainFrame::sealChange)
00129 EVT_CHECKBOX(XRCID("ID_MAZE"), MainFrame::sealChange)
00130 EVT_CHECKBOX(XRCID("ID_SEA"), MainFrame::sealChange)
00131 EVT_CHECKBOX(XRCID("ID_THREE_EYE_ROCK"), MainFrame::sealChange)
00132
00133 EVT_COMMAND_SCROLL(XRCID("ID_KEY"), MainFrame::keyChange)
00134 END_EVENT_TABLE()
00135
00136 MainFrame::MainFrame() {
00137 SetParent(NULL);
00138 CreateControls();
00139 Centre();
00140
00141 SetDropTarget(new FileDropTarget(this));
00142 }
00143
00144 void MainFrame::CreateControls() {
00145 wxXmlResource::Get()->LoadFrame(this, GetParent(), wxT("ID_FRAME"));
00146 SetIcon(ICON);
00147
00148 wxMenuBar *menubar = GetMenuBar();
00149
00150 fileCloseItem = menubar->FindItem(XRCID("IDM_FILE_CLOSE"));
00151 fileSaveItem = menubar->FindItem(XRCID("IDM_FILE_SAVE"));
00152 fileSaveAsItem = menubar->FindItem(XRCID("IDM_FILE_SAVE_AS"));
00153
00154 gameItems[0] = menubar->FindItem(XRCID("IDM_GAME_ONE"));
00155 gameItems[0]->Enable(false);
00156
00157 gameItems[1] = menubar->FindItem(XRCID("IDM_GAME_TWO"));
00158 gameItems[1]->Enable(false);
00159
00160 gameItems[2] = menubar->FindItem(XRCID("IDM_GAME_THREE"));
00161 gameItems[2]->Enable(false);
00162
00163 panel = XRCCTRL(*this, "ID_PANEL", wxPanel);
00164 panel->Show(false);
00165
00166 wxStringList letters("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K",
00167 "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",
00168 "W", "X", "Y", "Z", "0", "1", "2", "3", "4", "5", "6",
00169 "7", "8", "9", " ", NULL);
00170
00171 wxTextValidator nameValidator(wxFILTER_INCLUDE_CHAR_LIST);
00172 nameValidator.SetIncludeList(letters);
00173
00174 nameText = XRCCTRL(*this, "ID_NAME", wxTextCtrl);
00175 nameText->SetValidator(nameValidator);
00176 nameText->SetMaxLength(8);
00177
00178 playCountSlider = XRCCTRL(*this, "ID_PLAY_COUNT", wxSlider);
00179 triforceCheck = XRCCTRL(*this, "ID_TRIFORCE", wxCheckBox);
00180
00181 swordLevelSlider = XRCCTRL(*this, "ID_SWORD_LEVEL", wxSlider);
00182 magicLevelSlider = XRCCTRL(*this, "ID_MAGIC_LEVEL", wxSlider);
00183 lifeLevelSlider = XRCCTRL(*this, "ID_LIFE_LEVEL", wxSlider);
00184
00185 magicContainerSlider = XRCCTRL(*this, "ID_MAGIC_CONTAINER", wxSlider);
00186 lifeContainerSlider = XRCCTRL(*this, "ID_LIFE_CONTAINER", wxSlider);
00187
00188 downwardThrustCheck = XRCCTRL(*this, "ID_DOWNWARD_THRUST", wxCheckBox);
00189 upwardThrustCheck = XRCCTRL(*this, "ID_UPWARD_THRUST", wxCheckBox);
00190
00191 shieldCheck = XRCCTRL(*this, "ID_SHIELD", wxCheckBox);
00192 jumpCheck = XRCCTRL(*this, "ID_JUMP", wxCheckBox);
00193 lifeCheck = XRCCTRL(*this, "ID_LIFE", wxCheckBox);
00194 fairyCheck = XRCCTRL(*this, "ID_FAIRY", wxCheckBox);
00195 fireCheck = XRCCTRL(*this, "ID_FIRE", wxCheckBox);
00196 reflectCheck = XRCCTRL(*this, "ID_REFLECT", wxCheckBox);
00197 spellCheck = XRCCTRL(*this, "ID_SPELL", wxCheckBox);
00198 thunderCheck = XRCCTRL(*this, "ID_THUNDER", wxCheckBox);
00199
00200 candleCheck = XRCCTRL(*this, "ID_CANDLE", wxCheckBox);
00201 gloveCheck = XRCCTRL(*this, "ID_GLOVE", wxCheckBox);
00202 raftCheck = XRCCTRL(*this, "ID_RAFT", wxCheckBox);
00203 bootsCheck = XRCCTRL(*this, "ID_BOOTS", wxCheckBox);
00204 crossCheck = XRCCTRL(*this, "ID_CROSS", wxCheckBox);
00205 fluteCheck = XRCCTRL(*this, "ID_FLUTE", wxCheckBox);
00206 magicKeyCheck = XRCCTRL(*this, "ID_MAGIC_KEY", wxCheckBox);
00207 hammerCheck = XRCCTRL(*this, "ID_HAMMER", wxCheckBox);
00208
00209 palaceCheck[0] = XRCCTRL(*this, "ID_PARAPA", wxCheckBox);
00210 palaceCheck[1] = XRCCTRL(*this, "ID_MIDORO", wxCheckBox);
00211 palaceCheck[2] = XRCCTRL(*this, "ID_ISLAND", wxCheckBox);
00212 palaceCheck[3] = XRCCTRL(*this, "ID_MAZE", wxCheckBox);
00213 palaceCheck[4] = XRCCTRL(*this, "ID_SEA", wxCheckBox);
00214 palaceCheck[5] = XRCCTRL(*this, "ID_THREE_EYE_ROCK", wxCheckBox);
00215
00216 keySlider = XRCCTRL(*this, "ID_KEY", wxSlider);
00217
00218 setOpen(false);
00219 }
00220
00221 void MainFrame::setOpen(bool open) {
00222 this->open = open;
00223
00224 fileCloseItem->Enable(open);
00225 fileSaveItem->Enable(open);
00226 fileSaveAsItem->Enable(open);
00227
00228 GetMenuBar()->EnableTop(2, open);
00229 }
00230
00231 bool MainFrame::close() {
00232 if (!isOpen()) {
00233 return true;
00234 }
00235
00236 if (sram->isModified()) {
00237 int choice = wxMessageBox(wxT("Save Game File Before Closing?"),
00238 wxT("Warning: Unsaved Changes"),
00239 wxYES_NO | wxCANCEL | wxICON_QUESTION);
00240
00241 if (choice == wxYES) {
00242 if (!sram->save()) {
00243 return false;
00244 }
00245 } else if (choice == wxCANCEL) {
00246 return false;
00247 }
00248 }
00249
00250 delete sram;
00251
00252 for (int game = 0; game < 3; game++) {
00253 gameItems[game]->Enable(false);
00254 }
00255
00256 panel->Show(false);
00257 setOpen(false);
00258
00259 return true;
00260 }
00261
00262 void MainFrame::loadGameData(int game) {
00263 sram->setCurrentGame(game);
00264 SaveSlot *slot = sram->getCurrentGame();
00265
00266 nameText->SetValue(slot->getName());
00267 playCountSlider->SetValue(slot->getPlayCount());
00268 triforceCheck->SetValue(slot->hasTriforce());
00269
00270 swordLevelSlider->SetValue(slot->getLevel(SWORDLEVEL));
00271 magicLevelSlider->SetValue(slot->getLevel(MAGICLEVEL));
00272 lifeLevelSlider->SetValue(slot->getLevel(LIFELEVEL));
00273
00274 magicContainerSlider->SetValue(slot->getContainers(MAGICCONTAINER));
00275 lifeContainerSlider->SetValue(slot->getContainers(LIFECONTAINER));
00276
00277 downwardThrustCheck->SetValue(slot->hasTechnique(DOWNWARDTHRUST));
00278 upwardThrustCheck->SetValue(slot->hasTechnique(UPWARDTHRUST));
00279
00280 shieldCheck->SetValue(slot->hasSpell(SHIELD));
00281 jumpCheck->SetValue(slot->hasSpell(JUMP));
00282 lifeCheck->SetValue(slot->hasSpell(LIFE));
00283 fairyCheck->SetValue(slot->hasSpell(FAIRY));
00284 fireCheck->SetValue(slot->hasSpell(FIRE));
00285 reflectCheck->SetValue(slot->hasSpell(REFLECT));
00286 spellCheck->SetValue(slot->hasSpell(SPELL));
00287 thunderCheck->SetValue(slot->hasSpell(THUNDER));
00288
00289 candleCheck->SetValue(slot->hasItem(CANDLE));
00290 gloveCheck->SetValue(slot->hasItem(GLOVE));
00291 raftCheck->SetValue(slot->hasItem(RAFT));
00292 bootsCheck->SetValue(slot->hasItem(BOOTS));
00293 crossCheck->SetValue(slot->hasItem(CROSS));
00294 fluteCheck->SetValue(slot->hasItem(FLUTE));
00295 magicKeyCheck->SetValue(slot->hasItem(MAGICKEY));
00296 hammerCheck->SetValue(slot->hasItem(HAMMER));
00297
00298 for (int palace = 0; palace < 6; palace++) {
00299 palaceCheck[palace]->SetValue(slot->hasSeal(palace));
00300 }
00301
00302 keySlider->SetValue(slot->getKeys());
00303
00304 panel->Show(true);
00305 }
00306
00307 void MainFrame::load(wxString &filename) {
00308 if (!close()) {
00309 return;
00310 }
00311
00312 sram = new SRAMFile(filename);
00313
00314 int first = -1;
00315
00316 for (int game = 2; game >= 0; game--) {
00317 if (sram->isValidGame(game)) {
00318 gameItems[game]->Enable(true);
00319 first = game;
00320 }
00321 }
00322
00323 if (first == -1) {
00324 delete sram;
00325
00326 wxMessageBox(wxT("No game data is in the file you loaded."),
00327 wxT("Error: No Data Found"), wxOK | wxICON_ERROR);
00328 } else {
00329 loadGameData(first);
00330
00331 if (first != 0) {
00332 gameItems[first]->Check(true);
00333 }
00334
00335 setOpen(true);
00336 }
00337 }
00338
00339 void MainFrame::fileOpen(wxCommandEvent &event) {
00340 static wxFileDialog *dlg = new wxFileDialog(this,
00341 wxT("Choose a .SAV File"), "", "",
00342 wxT("NES SRAM File (*.sav)|*.sav"), (wxOPEN | wxCHANGE_DIR));
00343
00344 int value = dlg->ShowModal();
00345
00346 if (value == wxID_OK) {
00347 wxString filename = dlg->GetPath();
00348 load(filename);
00349 }
00350 }
00351
00352 void MainFrame::fileClose(wxCommandEvent &event) {
00353 close();
00354 }
00355
00356 void MainFrame::fileSave(wxCommandEvent &event) {
00357 sram->save();
00358 }
00359
00360 void MainFrame::fileSaveAs(wxCommandEvent &event) {
00361 static wxFileDialog *dlg = new wxFileDialog(this,
00362 wxT("Choose a .SAV File"), "", "",
00363 wxT("NES SRAM File (*.sav)|*.sav"), (wxSAVE | wxCHANGE_DIR));
00364
00365 int value = dlg->ShowModal();
00366
00367 if (value == wxID_OK) {
00368 wxString filename = dlg->GetPath();
00369 sram->save(filename);
00370 }
00371 }
00372
00373 void MainFrame::fileExit(wxCommandEvent &event) {
00374 if (close()) {
00375 Close(true);
00376 }
00377 }
00378
00379 void MainFrame::windowClosing(wxCloseEvent &event) {
00380 if (event.CanVeto()) {
00381 if (!close()) {
00382 event.Veto();
00383 return;
00384 }
00385 }
00386
00387 Destroy();
00388 }
00389
00390 void MainFrame::gameChange(wxCommandEvent &event) {
00391 int id = event.GetId();
00392
00393 if (id == XRCID("IDM_GAME_ONE")) {
00394 loadGameData(0);
00395 } else if (id == XRCID("IDM_GAME_TWO")) {
00396 loadGameData(1);
00397 } else if (id == XRCID("IDM_GAME_THREE")) {
00398 loadGameData(2);
00399 }
00400 }
00401
00402 void MainFrame::multiChange(wxCommandEvent &event) {
00403 SaveSlot *game = sram->getCurrentGame();
00404 int id = event.GetId();
00405
00406 if (id == XRCID("IDM_HAVE_ALL_LEVELS")) {
00407 swordLevelSlider->SetValue(8);
00408 game->setLevel(SWORDLEVEL, 8);
00409
00410 magicLevelSlider->SetValue(8);
00411 game->setLevel(MAGICLEVEL, 8);
00412
00413 lifeLevelSlider->SetValue(8);
00414 game->setLevel(LIFELEVEL, 8);
00415 } else if (id == XRCID("IDM_HAVE_ALL_CONTAINERS")) {
00416 magicContainerSlider->SetValue(8);
00417 game->setContainers(MAGICCONTAINER, 8);
00418
00419 lifeContainerSlider->SetValue(8);
00420 game->setContainers(LIFECONTAINER, 8);
00421 } else if (id == XRCID("IDM_HAVE_ALL_TECHNIQUES")) {
00422 downwardThrustCheck->SetValue(true);
00423 game->setTechnique(DOWNWARDTHRUST, true);
00424
00425 upwardThrustCheck->SetValue(true);
00426 game->setTechnique(UPWARDTHRUST, true);
00427 } else if (id == XRCID("IDM_HAVE_ALL_SPELLS")) {
00428 shieldCheck->SetValue(true);
00429 game->setSpell(SHIELD, true);
00430
00431 jumpCheck->SetValue(true);
00432 game->setSpell(JUMP, true);
00433
00434 lifeCheck->SetValue(true);
00435 game->setSpell(LIFE, true);
00436
00437 fairyCheck->SetValue(true);
00438 game->setSpell(FAIRY, true);
00439
00440 fireCheck->SetValue(true);
00441 game->setSpell(FIRE, true);
00442
00443 reflectCheck->SetValue(true);
00444 game->setSpell(REFLECT, true);
00445
00446 spellCheck->SetValue(true);
00447 game->setSpell(SPELL, true);
00448
00449 thunderCheck->SetValue(true);
00450 game->setSpell(THUNDER, true);
00451 } else if (id == XRCID("IDM_HAVE_ALL_ITEMS")) {
00452 candleCheck->SetValue(true);
00453 game->setItem(CANDLE, true);
00454
00455 gloveCheck->SetValue(true);
00456 game->setItem(GLOVE, true);
00457
00458 raftCheck->SetValue(true);
00459 game->setItem(RAFT, true);
00460
00461 bootsCheck->SetValue(true);
00462 game->setItem(BOOTS, true);
00463
00464 crossCheck->SetValue(true);
00465 game->setItem(CROSS, true);
00466
00467 fluteCheck->SetValue(true);
00468 game->setItem(FLUTE, true);
00469
00470 magicKeyCheck->SetValue(true);
00471 game->setItem(MAGICKEY, true);
00472
00473 hammerCheck->SetValue(true);
00474 game->setItem(HAMMER, true);
00475 } else if (id == XRCID("IDM_HAVE_ALL_SEALS")) {
00476 palaceCheck[0]->SetValue(true);
00477 game->setSeal(0, true);
00478
00479 palaceCheck[1]->SetValue(true);
00480 game->setSeal(1, true);
00481
00482 palaceCheck[2]->SetValue(true);
00483 game->setSeal(2, true);
00484
00485 palaceCheck[3]->SetValue(true);
00486 game->setSeal(3, true);
00487
00488 palaceCheck[4]->SetValue(true);
00489 game->setSeal(4, true);
00490
00491 palaceCheck[5]->SetValue(true);
00492 game->setSeal(5, true);
00493 } else if (id == XRCID("IDM_HAVE_ALL_KEYS")) {
00494 keySlider->SetValue(9);
00495 game->setKeys(9);
00496 } else if (id == XRCID("IDM_HAVE_NONE_LEVELS")) {
00497 swordLevelSlider->SetValue(1);
00498 game->setLevel(SWORDLEVEL, 1);
00499
00500 magicLevelSlider->SetValue(1);
00501 game->setLevel(MAGICLEVEL, 1);
00502
00503 lifeLevelSlider->SetValue(1);
00504 game->setLevel(LIFELEVEL, 1);
00505 } else if (id == XRCID("IDM_HAVE_NONE_CONTAINERS")) {
00506 magicContainerSlider->SetValue(4);
00507 game->setContainers(MAGICCONTAINER, 4);
00508
00509 lifeContainerSlider->SetValue(4);
00510 game->setContainers(LIFECONTAINER, 4);
00511 } else if (id == XRCID("IDM_HAVE_NONE_TECHNIQUES")) {
00512 downwardThrustCheck->SetValue(false);
00513 game->setTechnique(DOWNWARDTHRUST, false);
00514
00515 upwardThrustCheck->SetValue(false);
00516 game->setTechnique(UPWARDTHRUST, false);
00517 } else if (id == XRCID("IDM_HAVE_NONE_SPELLS")) {
00518 shieldCheck->SetValue(false);
00519 game->setSpell(SHIELD, false);
00520
00521 jumpCheck->SetValue(false);
00522 game->setSpell(JUMP, false);
00523
00524 lifeCheck->SetValue(false);
00525 game->setSpell(LIFE, false);
00526
00527 fairyCheck->SetValue(false);
00528 game->setSpell(FAIRY, false);
00529
00530 fireCheck->SetValue(false);
00531 game->setSpell(FIRE, false);
00532
00533 reflectCheck->SetValue(false);
00534 game->setSpell(REFLECT, false);
00535
00536 spellCheck->SetValue(false);
00537 game->setSpell(SPELL, false);
00538
00539 thunderCheck->SetValue(false);
00540 game->setSpell(THUNDER, false);
00541 } else if (id == XRCID("IDM_HAVE_NONE_ITEMS")) {
00542 candleCheck->SetValue(false);
00543 game->setItem(CANDLE, false);
00544
00545 gloveCheck->SetValue(false);
00546 game->setItem(GLOVE, false);
00547
00548 raftCheck->SetValue(false);
00549 game->setItem(RAFT, false);
00550
00551 bootsCheck->SetValue(false);
00552 game->setItem(BOOTS, false);
00553
00554 crossCheck->SetValue(false);
00555 game->setItem(CROSS, false);
00556
00557 fluteCheck->SetValue(false);
00558 game->setItem(FLUTE, false);
00559
00560 magicKeyCheck->SetValue(false);
00561 game->setItem(MAGICKEY, false);
00562
00563 hammerCheck->SetValue(false);
00564 game->setItem(HAMMER, false);
00565 } else if (id == XRCID("IDM_HAVE_NONE_SEALS")) {
00566 palaceCheck[0]->SetValue(false);
00567 game->setSeal(0, false);
00568
00569 palaceCheck[1]->SetValue(false);
00570 game->setSeal(1, false);
00571
00572 palaceCheck[2]->SetValue(false);
00573 game->setSeal(2, false);
00574
00575 palaceCheck[3]->SetValue(false);
00576 game->setSeal(3, false);
00577
00578 palaceCheck[4]->SetValue(false);
00579 game->setSeal(4, false);
00580
00581 palaceCheck[5]->SetValue(false);
00582 game->setSeal(5, false);
00583 } else if (id == XRCID("IDM_HAVE_NONE_KEYS")) {
00584 keySlider->SetValue(0);
00585 game->setKeys(0);
00586 }
00587 }
00588
00589 void MainFrame::helpAbout(wxCommandEvent &event) {
00590 wxString msg = wxString(*GenApp::APP_FULL_NAME + wxT(' ') +
00591 *GenApp::APP_VERSION + wxT('\n') +
00592 *GenApp::APP_COPYRIGHT + wxT('\n') +
00593 *GenApp::APP_URL);
00594 wxString title = wxString(wxT("About ") +
00595 *GenApp::APP_FULL_NAME +
00596 wxT("..."));
00597
00598 wxMessageBox(msg, title, wxOK | wxICON_INFORMATION, this);
00599 }
00600
00601 void MainFrame::nameChange(wxCommandEvent &event) {
00602 if (!isOpen()) {
00603 return;
00604 }
00605
00606 SaveSlot *game = sram->getCurrentGame();
00607 wxString name = nameText->GetValue();
00608 game->setName(name);
00609 }
00610
00611 void MainFrame::playCountChange(wxScrollEvent &event) {
00612 if (!isOpen()) {
00613 return;
00614 }
00615
00616 SaveSlot *game = sram->getCurrentGame();
00617 game->setPlayCount(playCountSlider->GetValue());
00618 }
00619
00620 void MainFrame::triforceChange(wxCommandEvent &event) {
00621 if (!isOpen()) {
00622 return;
00623 }
00624
00625 SaveSlot *game = sram->getCurrentGame();
00626 game->setTriforce(triforceCheck->IsChecked());
00627 }
00628
00629 void MainFrame::levelChange(wxScrollEvent &event) {
00630 if (!isOpen()) {
00631 return;
00632 }
00633
00634 SaveSlot *game = sram->getCurrentGame();
00635 wxSlider *ctrl = (wxSlider *)event.GetEventObject();
00636
00637 int level = SWORDLEVEL;
00638
00639 if (ctrl == magicLevelSlider) {
00640 level = MAGICLEVEL;
00641 } else if (ctrl == lifeLevelSlider) {
00642 level = LIFELEVEL;
00643 }
00644
00645 game->setLevel(level, ctrl->GetValue());
00646 }
00647
00648 void MainFrame::containerChange(wxScrollEvent &event) {
00649 if (!isOpen()) {
00650 return;
00651 }
00652
00653 SaveSlot *game = sram->getCurrentGame();
00654 wxSlider *ctrl = (wxSlider *)event.GetEventObject();
00655
00656 int container = ((ctrl == magicContainerSlider) ?
00657 MAGICCONTAINER : LIFECONTAINER);
00658
00659 game->setContainers(container, ctrl->GetValue());
00660 }
00661
00662 void MainFrame::techniqueChange(wxCommandEvent &event) {
00663 printf("technique change...\n");
00664 fflush(stdout);
00665
00666 if (!isOpen()) {
00667 return;
00668 }
00669
00670 SaveSlot *game = sram->getCurrentGame();
00671 wxCheckBox *ctrl = (wxCheckBox *)event.GetEventObject();
00672
00673 int technique = ((ctrl == downwardThrustCheck) ?
00674 DOWNWARDTHRUST : UPWARDTHRUST);
00675
00676 game->setTechnique(technique, ctrl->IsChecked());
00677 }
00678
00679 void MainFrame::spellChange(wxCommandEvent &event) {
00680 if (!isOpen()) {
00681 return;
00682 }
00683
00684 SaveSlot *game = sram->getCurrentGame();
00685 wxCheckBox *ctrl = (wxCheckBox *)event.GetEventObject();
00686
00687 int spell = SHIELD;
00688
00689 if (ctrl == jumpCheck) {
00690 spell = JUMP;
00691 } else if (ctrl == lifeCheck) {
00692 spell = LIFE;
00693 } else if (ctrl == fairyCheck) {
00694 spell = FAIRY;
00695 } else if (ctrl == fireCheck) {
00696 spell = FIRE;
00697 } else if (ctrl == reflectCheck) {
00698 spell = REFLECT;
00699 } else if (ctrl == spellCheck) {
00700 spell = SPELL;
00701 } else if (ctrl == thunderCheck) {
00702 spell = THUNDER;
00703 }
00704
00705 game->setSpell(spell, ctrl->IsChecked());
00706 }
00707
00708 void MainFrame::itemChange(wxCommandEvent &event) {
00709 if (!isOpen()) {
00710 return;
00711 }
00712
00713 SaveSlot *game = sram->getCurrentGame();
00714 wxCheckBox *ctrl = (wxCheckBox *)event.GetEventObject();
00715
00716 int item = CANDLE;
00717
00718 if (ctrl == gloveCheck) {
00719 item = GLOVE;
00720 } else if (ctrl == raftCheck) {
00721 item = RAFT;
00722 } else if (ctrl == bootsCheck) {
00723 item = BOOTS;
00724 } else if (ctrl == crossCheck) {
00725 item = CROSS;
00726 } else if (ctrl == fluteCheck) {
00727 item = FLUTE;
00728 } else if (ctrl == magicKeyCheck) {
00729 item = MAGICKEY;
00730 } else if (ctrl == hammerCheck) {
00731 item = HAMMER;
00732 }
00733
00734 game->setItem(item, ctrl->IsChecked());
00735 }
00736
00737 void MainFrame::sealChange(wxCommandEvent &event) {
00738 if (!isOpen()) {
00739 return;
00740 }
00741
00742 SaveSlot *game = sram->getCurrentGame();
00743 wxCheckBox *ctrl = (wxCheckBox *)event.GetEventObject();
00744 int palace;
00745
00746 for (palace = 0; palace < 6; palace++) {
00747 if (palaceCheck[palace] == ctrl) {
00748 break;
00749 }
00750 }
00751
00752 game->setSeal(palace, ctrl->IsChecked());
00753 }
00754
00755 void MainFrame::keyChange(wxScrollEvent &event) {
00756 if (!isOpen()) {
00757 return;
00758 }
00759
00760 SaveSlot *game = sram->getCurrentGame();
00761 game->setKeys(keySlider->GetValue());
00762 }
00763