Main Page | Namespace List | Class List | File List | Namespace Members | Class Members | File Members

source/view/MainFrame.cc

Go to the documentation of this file.
00001 /*
00002  * Copyright (C) 2004 emuWorks
00003  * http://games.technoplaza.net/
00004  *
00005  * This program is free software; you can redistribute it and/or
00006  * modify it under the terms of the GNU General Public License
00007  * as published by the Free Software Foundation; either version 2
00008  * of the License, or (at your option) any later version.
00009  *
00010  * This program is distributed in the hope that it will be useful,
00011  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013  * GNU General Public License for more details.
00014  *
00015  * You should have received a copy of the GNU General Public License
00016  * along with this program; if not, write to the Free Software
00017  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
00018  */
00019 
00020 // $Id: MainFrame.cc,v 1.8 2004/12/10 16:10:32 technoplaza Exp $
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 

Generated on Fri Dec 10 11:33:56 2004 for Zelda II SRAM Editor by  doxygen 1.3.9.1