MainFrame.cc

Go to the documentation of this file.
00001 /*
00002  * Zelda II SRAM Editor
00003  * Copyright (C) 2004-2005,2007-2008 emuWorks
00004  * http://games.technoplaza.net/
00005  *
00006  * This file is part of z2se.
00007  *
00008  * z2se is free software; you can redistribute it and/or modify
00009  * it under the terms of the GNU General Public License as published by
00010  * the Free Software Foundation; either version 2 of the License, or
00011  * (at your option) any later version.
00012  *
00013  * z2se is distributed in the hope that it will be useful,
00014  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00015  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016  * GNU General Public License for more details.
00017  *
00018  * You should have received a copy of the GNU General Public License
00019  * along with z2se; if not, write to the Free Software
00020  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
00021  */
00022 
00023 // $Id: MainFrame.cc,v 1.16 2008/12/17 06:34:43 jdratlif Exp $
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/icon32x32.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(icon32x32_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"), (wxFD_OPEN | wxFD_CHANGE_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"), (wxFD_SAVE | wxFD_CHANGE_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 

Generated on Mon Dec 29 01:21:33 2008 for Zelda II SRAM Editor by  doxygen 1.5.4