mainframe.cc

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

Generated on Fri Feb 2 21:09:25 2007 for dwsrame by  doxygen 1.5.1-p1