mainframe.cc

Go to the documentation of this file.
00001 /*
00002  * dwsrame - Dragon Warrior SRAM Editor
00003  * Copyright (C) 2006-2008 emuWorks
00004  * http://games.technoplaza.net/
00005  *
00006  * This file is part of dwsrame.
00007  *
00008  * dwsrame is free software; you can redistribute it and/or modify it under the
00009  * terms of the GNU General Public License as published by the Free Software
00010  * Foundation; either version 2 of the License, or (at your option) any later
00011  * version.
00012  *
00013  * dwsrame is distributed in the hope that it will be useful, but WITHOUT ANY
00014  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
00015  * A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
00016  *
00017  * You should have received a copy of the GNU General Public License along with
00018  * dwsrame; if not, write to the Free Software Foundation, Inc.,
00019  * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
00020  */
00021 
00022 // $Id: mainframe.cc,v 1.18 2008/12/15 22:48:11 jdratlif Exp $
00023 
00024 #ifdef HAVE_CONFIG_H
00025     #include <config.h>
00026 #endif
00027 
00028 #include <wx/wxprec.h>
00029 
00030 #ifndef WX_PRECOMP
00031     #include <wx/wx.h>
00032 #endif
00033 
00034 #include <wx/notebook.h>
00035 #include <wx/spinctrl.h>
00036 #include <wx/xrc/xmlres.h>
00037 
00038 #include "model/sramfile.hh"
00039 #include "res/icon32x32.xpm"
00040 #include "view/mainframe.hh"
00041 #include "view/sramfiletarget.hh"
00042 
00043 using namespace dwsrame;
00044 
00045 MainFrame::MainFrame() : sram(0), enableEvents(true) {
00046     SetParent(NULL);
00047     
00048     loadXRC();
00049     GetSizer()->SetSizeHints(this);
00050     Centre();
00051     
00052     // add DnD support target
00053     SetDropTarget(new SRAMFileTarget(this));
00054     
00055     // create name validator
00056     wxTextValidator validator(wxFILTER_INCLUDE_CHAR_LIST);
00057     wxArrayString letters;
00058     
00059     letters.Add(wxT("0")); letters.Add(wxT("1")); letters.Add(wxT("2"));
00060     letters.Add(wxT("3")); letters.Add(wxT("4")); letters.Add(wxT("5"));
00061     letters.Add(wxT("6")); letters.Add(wxT("7")); letters.Add(wxT("8"));
00062     letters.Add(wxT("9"));
00063     
00064     validator.SetIncludes(letters);
00065     
00066     XRCCTRL(*this, "IDT_HERO_HP", wxTextCtrl)->SetValidator(validator);
00067     XRCCTRL(*this, "IDT_HERO_MP", wxTextCtrl)->SetValidator(validator);
00068     XRCCTRL(*this, "IDT_HERO_EXP", wxTextCtrl)->SetValidator(validator);
00069     XRCCTRL(*this, "IDT_HERO_GOLD", wxTextCtrl)->SetValidator(validator);
00070     XRCCTRL(*this, "IDS_HERO_HERBS", wxSpinCtrl)->SetValidator(validator);
00071     XRCCTRL(*this, "IDS_HERO_KEYS", wxSpinCtrl)->SetValidator(validator);
00072     
00073     letters.Add(wxT("a")); letters.Add(wxT("b")); letters.Add(wxT("c"));
00074     letters.Add(wxT("d")); letters.Add(wxT("e")); letters.Add(wxT("f"));
00075     letters.Add(wxT("g")); letters.Add(wxT("h")); letters.Add(wxT("i"));
00076     letters.Add(wxT("j")); letters.Add(wxT("k")); letters.Add(wxT("l"));
00077     letters.Add(wxT("m")); letters.Add(wxT("n")); letters.Add(wxT("o"));
00078     letters.Add(wxT("p")); letters.Add(wxT("q")); letters.Add(wxT("r"));
00079     letters.Add(wxT("s")); letters.Add(wxT("t")); letters.Add(wxT("u"));
00080     letters.Add(wxT("v")); letters.Add(wxT("w")); letters.Add(wxT("x"));
00081     letters.Add(wxT("y")); letters.Add(wxT("z")); letters.Add(wxT("A"));
00082     letters.Add(wxT("B")); letters.Add(wxT("C")); letters.Add(wxT("D"));
00083     letters.Add(wxT("E")); letters.Add(wxT("F")); letters.Add(wxT("G"));
00084     letters.Add(wxT("H")); letters.Add(wxT("I")); letters.Add(wxT("J"));
00085     letters.Add(wxT("K")); letters.Add(wxT("L")); letters.Add(wxT("M"));
00086     letters.Add(wxT("N")); letters.Add(wxT("O")); letters.Add(wxT("P"));
00087     letters.Add(wxT("Q")); letters.Add(wxT("R")); letters.Add(wxT("S"));
00088     letters.Add(wxT("T")); letters.Add(wxT("U")); letters.Add(wxT("V"));
00089     letters.Add(wxT("W")); letters.Add(wxT("X")); letters.Add(wxT("Y"));
00090     letters.Add(wxT("Z")); letters.Add(wxT("-")); letters.Add(wxT("'"));
00091     letters.Add(wxT("!")); letters.Add(wxT("?")); letters.Add(wxT("("));
00092     letters.Add(wxT(")")); letters.Add(wxT(" ")); letters.Add(wxT(","));
00093     letters.Add(wxT("."));
00094     
00095     validator.SetIncludes(letters);
00096     XRCCTRL(*this, "IDT_HERO_NAME", wxTextCtrl)->SetValidator(validator);
00097     
00098     // hide the notebook
00099     XRCCTRL(*this, "IDN_DWSRAME", wxNotebook)->Show(false);
00100 }
00101 
00102 bool MainFrame::closeSRAM() {
00103     if (sram) {
00104         if (sram->isModified()) {
00105             int answer = wxMessageBox(wxT("Save file before closing?"),
00106                 wxT("Warning: SRAM Modified"),
00107                 wxYES_NO | wxCANCEL | wxICON_QUESTION, this);
00108             
00109             if (answer == wxYES) {
00110                 if (!saveSRAM()) {
00111                     return false;
00112                 }
00113             } else if (answer == wxCANCEL) {
00114                 return false;
00115             }
00116         }
00117         
00118         delete sram;
00119         sram = 0;
00120     }
00121     
00122     XRCCTRL(*this, "IDN_DWSRAME", wxNotebook)->Show(false);
00123     
00124     return true;
00125 }
00126 
00127 void MainFrame::loadGame(int game) {
00128     wxASSERT(sram);
00129     wxASSERT(sram->isValid(game));
00130     
00131     sram->setGame(game);
00132     
00133     // don't process events generated by these changes
00134     enableEvents = false;
00135     
00136     // hero's stats
00137     XRCCTRL(*this, "IDT_HERO_NAME", wxTextCtrl)->SetValue(sram->getName());
00138     XRCCTRL(*this, "IDT_HERO_HP", wxTextCtrl)->
00139         SetValue(wxString::Format(wxT("%u"), sram->getHP()));
00140     XRCCTRL(*this, "IDT_HERO_MP", wxTextCtrl)->
00141         SetValue(wxString::Format(wxT("%u"), sram->getMP()));
00142     XRCCTRL(*this, "IDT_HERO_EXP", wxTextCtrl)->
00143         SetValue(wxString::Format(wxT("%u"), sram->getExperience()));
00144     XRCCTRL(*this, "IDT_HERO_GOLD", wxTextCtrl)->
00145         SetValue(wxString::Format(wxT("%u"), sram->getGold()));
00146         
00147     // hero's inventory
00148     XRCCTRL(*this, "IDS_HERO_HERBS", wxSpinCtrl)->SetValue(sram->getHerbs());
00149     XRCCTRL(*this, "IDS_HERO_KEYS", wxSpinCtrl)->SetValue(sram->getKeys());
00150     
00151     XRCCTRL(*this, "IDC_HERO_INVENTORY1", wxChoice)->
00152         SetSelection(sram->getItem(0));
00153     XRCCTRL(*this, "IDC_HERO_INVENTORY2", wxChoice)->
00154         SetSelection(sram->getItem(1));
00155     XRCCTRL(*this, "IDC_HERO_INVENTORY3", wxChoice)->
00156         SetSelection(sram->getItem(2));
00157     XRCCTRL(*this, "IDC_HERO_INVENTORY4", wxChoice)->
00158         SetSelection(sram->getItem(3));
00159     XRCCTRL(*this, "IDC_HERO_INVENTORY5", wxChoice)->
00160         SetSelection(sram->getItem(4));
00161     XRCCTRL(*this, "IDC_HERO_INVENTORY6", wxChoice)->
00162         SetSelection(sram->getItem(5));
00163     XRCCTRL(*this, "IDC_HERO_INVENTORY7", wxChoice)->
00164         SetSelection(sram->getItem(6));
00165     XRCCTRL(*this, "IDC_HERO_INVENTORY8", wxChoice)->
00166         SetSelection(sram->getItem(7));
00167         
00168     // hero's equipment
00169     XRCCTRL(*this, "IDC_HERO_WEAPON", wxChoice)->
00170         SetSelection(sram->getWeapon() / 0x20);
00171     XRCCTRL(*this, "IDC_HERO_ARMOR", wxChoice)->
00172         SetSelection(sram->getArmor() / 0x4);
00173     XRCCTRL(*this, "IDC_HERO_SHIELD", wxChoice)->
00174         SetSelection(sram->getShield());
00175         
00176     XRCCTRL(*this, "IDN_DWSRAME", wxNotebook)->Show(true);
00177     
00178     // quest markers
00179     XRCCTRL(*this, "IDC_QUEST_LORIKSCHAMBER", wxCheckBox)->
00180         SetValue(sram->getQuestMarker(DW_LORIKSCHAMBER));
00181         
00182     XRCCTRL(*this, "IDC_QUEST_DRAGONSSCALE", wxCheckBox)->
00183         SetValue(sram->getQuestMarker(DW_USINGDRAGONSSCALE));
00184     XRCCTRL(*this, "IDC_QUEST_FIGHTERSRING", wxCheckBox)->
00185         SetValue(sram->getQuestMarker(DW_USINGFIGHTERSRING));
00186     XRCCTRL(*this, "IDC_QUEST_CURSEDBELT", wxCheckBox)->
00187         SetValue(sram->getQuestMarker(DW_USINGCURSEDBELT));
00188     XRCCTRL(*this, "IDC_QUEST_DEATHNECKLACE", wxCheckBox)->
00189         SetValue(sram->getQuestMarker(DW_USINGDEATHNECKLACE));
00190         
00191     if (sram->getQuestMarker(DW_GWAELINONTHRONE)) {
00192         XRCCTRL(*this, "IDC_QUEST_GWAELIN", wxChoice)->SetSelection(2);
00193     } else if (sram->getQuestMarker(DW_HOLDINGGWAELIN)) {
00194         XRCCTRL(*this, "IDC_QUEST_GWAELIN", wxChoice)->SetSelection(1);
00195     } else {
00196         XRCCTRL(*this, "IDC_QUEST_GWAELIN", wxChoice)->SetSelection(0);
00197     }
00198         
00199     XRCCTRL(*this, "IDC_QUEST_RAINBOWBRIDGE", wxCheckBox)->
00200         SetValue(sram->getQuestMarker(DW_RAINBOWBRIDGE));
00201     XRCCTRL(*this, "IDC_QUEST_HIDDENSTAIRS", wxCheckBox)->
00202         SetValue(sram->getQuestMarker(DW_HIDDENSTAIRS));
00203         
00204     XRCCTRL(*this, "IDC_QUEST_GREENDRAGON", wxCheckBox)->
00205         SetValue(sram->getQuestMarker(DW_GREENDRAGONDEAD));
00206     XRCCTRL(*this, "IDC_QUEST_GOLEM", wxCheckBox)->
00207         SetValue(sram->getQuestMarker(DW_GOLEMDEAD));
00208     XRCCTRL(*this, "IDC_QUEST_DRAGONLORD", wxCheckBox)->
00209         SetValue(sram->getQuestMarker(DW_DRAGONLORDDEAD));
00210         
00211     // now we can process events again
00212     enableEvents = true;
00213 }
00214 
00215 void MainFrame::loadXRC() {
00216     wxXmlResource::Get()->LoadFrame(this, GetParent(), wxT("IDF_DWSRAME"));
00217     SetIcon(wxIcon(icon32x32_xpm));
00218 }
00219 
00220 void MainFrame::openSRAM(const wxString &filename) {
00221     if (!closeSRAM()) {
00222         return;
00223     }
00224     
00225     try {
00226         sram = new SRAMFile(filename);
00227         sramFile = filename;
00228         
00229         if (sram->isValid(0)) {
00230             GetMenuBar()->FindItem(XRCID("IDM_GAME_GAME1"))->Check(true);
00231             loadGame(0);
00232         } else if (sram->isValid(1)) {
00233             GetMenuBar()->FindItem(XRCID("IDM_GAME_GAME2"))->Check(true);
00234             loadGame(1);
00235         } else {
00236             GetMenuBar()->FindItem(XRCID("IDM_GAME_GAME3"))->Check(true);
00237             loadGame(2);
00238         }
00239     } catch (InvalidSRAMFileException &e) {
00240         wxString error;
00241         
00242         switch (e.getError()) {
00243             case ISFE_FILENOTFOUND:
00244                 error = wxT("File Not Found");
00245                 break;
00246             case ISFE_INVALIDSIZE:
00247                 error = wxT("Invalid SRAM File Size");
00248                 break;
00249             case ISFE_NOVALIDGAMES:
00250                 error = wxT("No Games Exist");
00251                 break;
00252         }
00253         
00254         wxMessageBox(error,
00255             wxT("Error: Invalid SRAM file"),
00256             wxOK | wxICON_ERROR);
00257     }
00258 }
00259 
00260 bool MainFrame::saveSRAM() {
00261     wxASSERT(sram);
00262     
00263     if (!hasValidData()) {
00264         return false;
00265     }
00266     
00267     if (!sram->save(sramFile)) {
00268         wxMessageBox(wxT("Unable to save SRAM file"),
00269             wxT("File I/O Error"), wxOK | wxICON_ERROR);
00270         
00271         return false;
00272     }
00273     
00274     return true;
00275 }
00276 
00277 bool MainFrame::hasValidData() {
00278     wxString string;
00279     long number = 0;
00280     
00281     XRCCTRL(*this, "IDT_HERO_HP", wxTextCtrl)->GetValue().ToLong(&number);
00282     
00283     if ((number < 0) || (number > 255)) {
00284         wxMessageBox(wxT("Hero's HP must be in the range 0-255"),
00285             wxT("Invalid HP"), wxOK | wxICON_ERROR);
00286         
00287         return false;
00288     }
00289     
00290     XRCCTRL(*this, "IDT_HERO_MP", wxTextCtrl)->GetValue().ToLong(&number);
00291     
00292     if ((number < 0) || (number > 255)) {
00293         wxMessageBox(wxT("Hero's MP must be in the range 0-255"),
00294             wxT("Invalid MP"), wxOK | wxICON_ERROR);
00295         
00296         return false;
00297     }
00298     
00299     XRCCTRL(*this, "IDT_HERO_GOLD", wxTextCtrl)->GetValue().ToLong(&number);
00300     
00301     if ((number < 0) || (number > 65535)) {
00302         wxMessageBox(wxT("Hero's Gold must be in the range 0-65535"),
00303             wxT("Invalid Gold"), wxOK | wxICON_ERROR);
00304         
00305         return false;
00306     }
00307     
00308     XRCCTRL(*this, "IDT_HERO_EXP", wxTextCtrl)->GetValue().ToLong(&number);
00309     
00310     if ((number < 0) || (number > 65535)) {
00311         wxMessageBox(wxT("Hero's Experience must be in the range 0-65535"),
00312             wxT("Invalid Experience"), wxOK | wxICON_ERROR);
00313         
00314         return false;
00315     }
00316     
00317     // no way to validate text parts of wxSpinCtrl
00318     
00319     return true;
00320 }
00321 
00322 void MainFrame::onArmorChange(wxCommandEvent &) {
00323     sram->setArmor(static_cast<enum dw_armor>
00324         (XRCCTRL(*this, "IDC_HERO_ARMOR", wxChoice)->GetSelection() * 0x4));
00325 }
00326 
00327 void MainFrame::onClose(wxCloseEvent &event) {
00328     if (event.CanVeto()) {
00329         if (!closeSRAM()) {
00330             event.Veto();
00331             return;
00332         }
00333     }
00334     
00335     Destroy();
00336 }
00337 
00338 void MainFrame::onExperienceEdit(wxCommandEvent &) {
00339     if (!enableEvents) {
00340         return;
00341     }
00342     
00343     long temp;
00344     
00345     if (XRCCTRL(*this, "IDT_HERO_EXP", wxTextCtrl)->GetValue().ToLong(&temp)) {
00346         sram->setExperience(temp);
00347     }
00348 }
00349 
00350 void MainFrame::onFileMenuUpdate(wxUpdateUIEvent &event) {
00351     if (sram) {
00352         if (event.GetId() == wxID_SAVE) {
00353             event.Enable(sram->isModified());
00354         } else {
00355             event.Enable(true);
00356         }
00357     } else {
00358         event.Enable(false);
00359     }
00360 }
00361 
00362 void MainFrame::onFileOpen(wxCommandEvent &) {
00363     wxFileDialog dlg(this, wxT("Select a Dragon Warrior (NES) SRAM file"),
00364                      wxEmptyString, wxEmptyString,
00365                      wxT("SRAM Files (*.sav)|*.sav"), wxFD_OPEN);
00366                      
00367     if (dlg.ShowModal() == wxID_OK) {
00368         openSRAM(dlg.GetPath());
00369     }
00370 }
00371 
00372 void MainFrame::onFileSaveAs(wxCommandEvent &) {
00373     wxFileDialog dlg(this, wxT("Select a filename"),
00374                      wxEmptyString, wxEmptyString,
00375                      wxT("SRAM Files (*.sav)|*.sav"),
00376                      wxFD_SAVE | wxFD_OVERWRITE_PROMPT);
00377     
00378     if (dlg.ShowModal() == wxID_OK) {
00379         sramFile = dlg.GetPath();
00380         saveSRAM();
00381     }
00382 }
00383 
00384 void MainFrame::onGameMenuUpdate(wxUpdateUIEvent &event) {
00385     if (sram) {
00386         if (event.GetId() == XRCID("IDM_GAME_GAME1")) {
00387             event.Enable(sram->isValid(0));
00388         } else if (event.GetId() == XRCID("IDM_GAME_GAME2")) {
00389             event.Enable(sram->isValid(1));
00390         } else {
00391             wxASSERT(event.GetId() == XRCID("IDM_GAME_GAME3"));
00392             
00393             event.Enable(sram->isValid(2));
00394         }
00395     } else {
00396         event.Enable(false);
00397     }
00398 }
00399 
00400 void MainFrame::onGameSelect(wxCommandEvent &event) {
00401     if (event.GetId() == XRCID("IDM_GAME_GAME1")) {
00402         loadGame(0);
00403     } else if (event.GetId() == XRCID("IDM_GAME_GAME2")) {
00404         loadGame(1);
00405     } else {
00406         wxASSERT(event.GetId() == XRCID("IDM_GAME_GAME3"));
00407         
00408         loadGame(2);
00409     }
00410 }
00411 
00412 void MainFrame::onGoldEdit(wxCommandEvent &) {
00413     if (!enableEvents) {
00414         return;
00415     }
00416     
00417     long temp;
00418     
00419     if (XRCCTRL(*this, "IDT_HERO_GOLD", wxTextCtrl)->GetValue().ToLong(&temp)) {
00420         sram->setGold(temp);
00421     }
00422 }
00423 
00424 void MainFrame::onGwaelinChange(wxCommandEvent &) {
00425     int value = XRCCTRL(*this, "IDC_QUEST_GWAELIN", wxChoice)->GetSelection();
00426     
00427     switch (value) {
00428         case 0:
00429             sram->setQuestMarker(DW_HOLDINGGWAELIN, false);
00430             sram->setQuestMarker(DW_GWAELINONTHRONE, false);
00431             break;
00432             
00433         case 1:
00434             sram->setQuestMarker(DW_HOLDINGGWAELIN, true);
00435             sram->setQuestMarker(DW_GWAELINONTHRONE, false);
00436             break;
00437             
00438         case 2:
00439             sram->setQuestMarker(DW_HOLDINGGWAELIN, false);
00440             sram->setQuestMarker(DW_GWAELINONTHRONE, true);
00441             break;
00442     }
00443 }
00444 
00445 void MainFrame::onHelpAbout(wxCommandEvent &) {
00446     wxMessageBox(wxT("dwsrame 0.91a - Dragon Warrior SRAM Editor\n")
00447                  wxT("Copyright (C) 2006-2008 emuWorks\n")
00448                  wxT("http://games.technoplaza.net/"),
00449         wxT("About dwsrame..."), wxOK | wxICON_INFORMATION);
00450 }
00451 
00452 void MainFrame::onHerbsEdit(wxCommandEvent &) {
00453     if (!enableEvents) {
00454         return;
00455     }
00456     
00457     sram->setHerbs(XRCCTRL(*this, "IDS_HERO_HERBS", wxSpinCtrl)->GetValue());
00458 }
00459 
00460 void MainFrame::onHPEdit(wxCommandEvent &) {
00461     if (!enableEvents) {
00462         return;
00463     }
00464     
00465     long temp;
00466     
00467     if (XRCCTRL(*this, "IDT_HERO_HP", wxTextCtrl)->GetValue().ToLong(&temp)) {
00468         sram->setHP(temp);
00469     }
00470 }
00471 
00472 void MainFrame::onInventoryChange(wxCommandEvent &event) {
00473     int item;
00474     
00475     if (event.GetId() == XRCID("IDC_HERO_INVENTORY1")) {
00476         item = 0;
00477     } else if (event.GetId() == XRCID("IDC_HERO_INVENTORY2")) {
00478         item = 1;
00479     } else if (event.GetId() == XRCID("IDC_HERO_INVENTORY3")) {
00480         item = 2;
00481     } else if (event.GetId() == XRCID("IDC_HERO_INVENTORY4")) {
00482         item = 3;
00483     } else if (event.GetId() == XRCID("IDC_HERO_INVENTORY5")) {
00484         item = 4;
00485     } else if (event.GetId() == XRCID("IDC_HERO_INVENTORY6")) {
00486         item = 5;
00487     } else if (event.GetId() == XRCID("IDC_HERO_INVENTORY7")) {
00488         item = 6;
00489     } else {
00490         wxASSERT(event.GetId() == XRCID("IDC_HERO_INVENTORY8"));
00491         
00492         item = 7;
00493     }
00494     
00495     sram->setItem(static_cast<enum dw_item>(event.GetSelection()), item);
00496 }
00497 
00498 void MainFrame::onKeysEdit(wxCommandEvent &) {
00499     if (!enableEvents) {
00500         return;
00501     }
00502     
00503     sram->setKeys(XRCCTRL(*this, "IDS_HERO_KEYS", wxSpinCtrl)->GetValue());
00504 }
00505 
00506 void MainFrame::onMPEdit(wxCommandEvent &) {
00507     if (!enableEvents) {
00508         return;
00509     }
00510     
00511     long temp;
00512     
00513     if (XRCCTRL(*this, "IDT_HERO_MP", wxTextCtrl)->GetValue().ToLong(&temp)) {
00514         sram->setMP(temp);
00515     }
00516 }
00517 
00518 void MainFrame::onNameEdit(wxCommandEvent &) {
00519     if (!enableEvents) {
00520         return;
00521     }
00522     
00523     sram->setName(XRCCTRL(*this, "IDT_HERO_NAME", wxTextCtrl)->GetValue());
00524 }
00525 
00526 void MainFrame::onQuestMarkerChange(wxCommandEvent &event) {
00527     enum dw_quest marker;
00528     
00529     if (event.GetId() == XRCID("IDC_QUEST_LORIKSCHAMBER")) {
00530         marker = DW_LORIKSCHAMBER;
00531     } else if (event.GetId() == XRCID("IDC_QUEST_DRAGONSSCALE")) {
00532         marker = DW_USINGDRAGONSSCALE;
00533     } else if (event.GetId() == XRCID("IDC_QUEST_FIGHTERSRING")) {
00534         marker = DW_USINGFIGHTERSRING;
00535     } else if (event.GetId() == XRCID("IDC_QUEST_CURSEDBELT")) {
00536         marker = DW_USINGCURSEDBELT;
00537     } else if (event.GetId() == XRCID("IDC_QUEST_DEATHNECKLACE")) {
00538         marker = DW_USINGDEATHNECKLACE;
00539     } else if (event.GetId() == XRCID("IDC_QUEST_RAINBOWBRIDGE")) {
00540         marker = DW_RAINBOWBRIDGE;
00541     } else if (event.GetId() == XRCID("IDC_QUEST_HIDDENSTAIRS")) {
00542         marker = DW_HIDDENSTAIRS;
00543     } else if (event.GetId() == XRCID("IDC_QUEST_GREENDRAGON")) {
00544         marker = DW_GREENDRAGONDEAD;
00545     } else if (event.GetId() == XRCID("IDC_QUEST_GOLEM")) {
00546         marker = DW_GOLEMDEAD;
00547     } else {
00548         wxASSERT(event.GetId() == XRCID("IDC_QUEST_DRAGONLORD"));
00549         
00550         marker = DW_DRAGONLORDDEAD;
00551     }
00552     
00553     sram->setQuestMarker(marker, event.IsChecked());
00554 }
00555 
00556 void MainFrame::onShieldChange(wxCommandEvent &) {
00557     sram->setShield(static_cast<enum dw_shield>
00558         (XRCCTRL(*this, "IDC_HERO_SHIELD", wxChoice)->GetSelection()));
00559 }
00560 
00561 void MainFrame::onWeaponChange(wxCommandEvent &) {
00562     sram->setWeapon(static_cast<enum dw_weapon>
00563         (XRCCTRL(*this, "IDC_HERO_WEAPON", wxChoice)->GetSelection() * 0x20));
00564 }
00565 
00566 IMPLEMENT_CLASS(MainFrame, wxFrame)
00567 
00568 BEGIN_EVENT_TABLE(MainFrame, wxFrame)
00569     EVT_CHECKBOX(XRCID("IDC_QUEST_LORIKSCHAMBER"),
00570         MainFrame::onQuestMarkerChange)
00571     EVT_CHECKBOX(XRCID("IDC_QUEST_DRAGONSSCALE"),
00572         MainFrame::onQuestMarkerChange)
00573     EVT_CHECKBOX(XRCID("IDC_QUEST_FIGHTERSRING"),
00574         MainFrame::onQuestMarkerChange)
00575     EVT_CHECKBOX(XRCID("IDC_QUEST_CURSEDBELT"),
00576         MainFrame::onQuestMarkerChange)
00577     EVT_CHECKBOX(XRCID("IDC_QUEST_DEATHNECKLACE"),
00578         MainFrame::onQuestMarkerChange)
00579     EVT_CHECKBOX(XRCID("IDC_QUEST_RAINBOWBRIDGE"),
00580         MainFrame::onQuestMarkerChange)
00581     EVT_CHECKBOX(XRCID("IDC_QUEST_HIDDENSTAIRS"),
00582         MainFrame::onQuestMarkerChange)
00583     EVT_CHECKBOX(XRCID("IDC_QUEST_GREENDRAGON"),
00584         MainFrame::onQuestMarkerChange)
00585     EVT_CHECKBOX(XRCID("IDC_QUEST_GOLEM"),
00586         MainFrame::onQuestMarkerChange)
00587     EVT_CHECKBOX(XRCID("IDC_QUEST_DRAGONLORD"),
00588         MainFrame::onQuestMarkerChange)
00589 
00590     EVT_CHOICE(XRCID("IDC_HERO_INVENTORY1"), MainFrame::onInventoryChange)
00591     EVT_CHOICE(XRCID("IDC_HERO_INVENTORY2"), MainFrame::onInventoryChange)
00592     EVT_CHOICE(XRCID("IDC_HERO_INVENTORY3"), MainFrame::onInventoryChange)
00593     EVT_CHOICE(XRCID("IDC_HERO_INVENTORY4"), MainFrame::onInventoryChange)
00594     EVT_CHOICE(XRCID("IDC_HERO_INVENTORY5"), MainFrame::onInventoryChange)
00595     EVT_CHOICE(XRCID("IDC_HERO_INVENTORY6"), MainFrame::onInventoryChange)
00596     EVT_CHOICE(XRCID("IDC_HERO_INVENTORY7"), MainFrame::onInventoryChange)
00597     EVT_CHOICE(XRCID("IDC_HERO_INVENTORY8"), MainFrame::onInventoryChange)
00598     
00599     EVT_CHOICE(XRCID("IDC_HERO_WEAPON"), MainFrame::onWeaponChange)
00600     EVT_CHOICE(XRCID("IDC_HERO_ARMOR"), MainFrame::onArmorChange)
00601     EVT_CHOICE(XRCID("IDC_HERO_SHIELD"), MainFrame::onShieldChange)
00602     
00603     EVT_CHOICE(XRCID("IDC_QUEST_GWAELIN"), MainFrame::onGwaelinChange)
00604     
00605     EVT_CLOSE(MainFrame::onClose)
00606 
00607     EVT_MENU(wxID_OPEN, MainFrame::onFileOpen)
00608     EVT_MENU(wxID_CLOSE, MainFrame::onFileClose)
00609     EVT_MENU(wxID_SAVE, MainFrame::onFileSave)
00610     EVT_MENU(wxID_SAVEAS, MainFrame::onFileSaveAs)
00611     EVT_MENU(wxID_EXIT, MainFrame::onFileExit)
00612     
00613     EVT_MENU(XRCID("IDM_GAME_GAME1"), MainFrame::onGameSelect)
00614     EVT_MENU(XRCID("IDM_GAME_GAME2"), MainFrame::onGameSelect)
00615     EVT_MENU(XRCID("IDM_GAME_GAME3"), MainFrame::onGameSelect)
00616     
00617     EVT_MENU(wxID_ABOUT, MainFrame::onHelpAbout)
00618     
00619     EVT_TEXT(XRCID("IDT_HERO_NAME"), MainFrame::onNameEdit)
00620     EVT_TEXT(XRCID("IDT_HERO_HP"), MainFrame::onHPEdit)
00621     EVT_TEXT(XRCID("IDT_HERO_MP"), MainFrame::onMPEdit)
00622     EVT_TEXT(XRCID("IDT_HERO_EXP"), MainFrame::onExperienceEdit)
00623     EVT_TEXT(XRCID("IDT_HERO_GOLD"), MainFrame::onGoldEdit)
00624     
00625     EVT_TEXT(XRCID("IDS_HERO_HERBS"), MainFrame::onHerbsEdit)
00626     EVT_TEXT(XRCID("IDS_HERO_KEYS"), MainFrame::onKeysEdit)
00627     
00628     EVT_UPDATE_UI(wxID_CLOSE, MainFrame::onFileMenuUpdate)
00629     EVT_UPDATE_UI(wxID_SAVE, MainFrame::onFileMenuUpdate)
00630     EVT_UPDATE_UI(wxID_SAVEAS, MainFrame::onFileMenuUpdate)
00631     
00632     EVT_UPDATE_UI(XRCID("IDM_GAME_GAME1"), MainFrame::onGameMenuUpdate)
00633     EVT_UPDATE_UI(XRCID("IDM_GAME_GAME2"), MainFrame::onGameMenuUpdate)
00634     EVT_UPDATE_UI(XRCID("IDM_GAME_GAME3"), MainFrame::onGameMenuUpdate)
00635 END_EVENT_TABLE()
00636 

Generated on Mon Dec 29 00:46:09 2008 for Dragon Warrior SRAM Editor by  doxygen 1.5.4