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