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