MainFrame.cc

Go to the documentation of this file.
00001 /*
00002  * ffse
00003  * Copyright (C) 2004-2005 emuWorks
00004  * http://games.technoplaza.net/
00005  *
00006  * This file is part of ffse.
00007  *
00008  * ffse 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  * ffse 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 ffse; 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.18 2007/02/25 11:29:19 technoplaza 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 <fstream>
00038 #include <cstring>
00039 
00040 #include "ffse.hh"
00041 #include "model/SaveSlot.hh"
00042 #include "res/orb32x32.xpm"
00043 #include "view/FileDropTarget.hh"
00044 #include "view/MainFrame.hh"
00045 
00046 using namespace ffse;
00047 
00048 MainFrame::MainFrame() {
00049     SetParent(NULL);
00050     CreateControls();
00051     GetSizer()->SetSizeHints(this);
00052     Centre();
00053     
00054     XRCCTRL(*this, "IDN_FFSE", wxNotebook)->Show(false);
00055     
00056     SetDropTarget(new FileDropTarget(this));
00057 }
00058 
00059 void MainFrame::CreateControls() {
00060     wxXmlResource::Get()->LoadFrame(this, GetParent(), wxT("IDF_FRAME"));
00061     SetIcon(orb32x32_xpm);
00062     
00063     wxMenuBar *menubar = GetMenuBar();
00064     
00065     memberItems[0] = menubar->FindItem(XRCID("IDM_MEMBER_ONE"));
00066     memberItems[0]->Enable(false);
00067     
00068     memberItems[1] = menubar->FindItem(XRCID("IDM_MEMBER_TWO"));
00069     memberItems[1]->Enable(false);
00070     
00071     memberItems[2] = menubar->FindItem(XRCID("IDM_MEMBER_THREE"));
00072     memberItems[2]->Enable(false);
00073     
00074     memberItems[3] = menubar->FindItem(XRCID("IDM_MEMBER_FOUR"));
00075     memberItems[3]->Enable(false);
00076     
00077     fileCloseItem = menubar->FindItem(wxID_CLOSE);
00078     fileSaveItem = menubar->FindItem(wxID_SAVE);
00079     fileSaveAsItem = menubar->FindItem(wxID_SAVEAS);
00080     
00081     wxTextValidator numberValidator(wxFILTER_NUMERIC);
00082     goldText = XRCCTRL(*this, "IDT_GENERAL_GOLD", wxTextCtrl);
00083     goldText->SetValidator(numberValidator);
00084     
00085     healSlider = XRCCTRL(*this, "IDS_GENERAL_HEAL", wxSlider);
00086     pureSlider = XRCCTRL(*this, "IDS_GENERAL_PURE", wxSlider);
00087     softSlider = XRCCTRL(*this, "IDS_GENERAL_SOFT", wxSlider);
00088     tentSlider = XRCCTRL(*this, "IDS_GENERAL_TENT", wxSlider);
00089     cabinSlider = XRCCTRL(*this, "IDS_GENERAL_CABIN", wxSlider);
00090     houseSlider = XRCCTRL(*this, "IDS_GENERAL_HOUSE", wxSlider);
00091     
00092     wxArrayString letters;
00093     letters.Add(wxT("A")); letters.Add(wxT("B")); letters.Add(wxT("C"));
00094     letters.Add(wxT("D")); letters.Add(wxT("E")); letters.Add(wxT("F"));
00095     letters.Add(wxT("G")); letters.Add(wxT("H")); letters.Add(wxT("I"));
00096     letters.Add(wxT("J")); letters.Add(wxT("K")); letters.Add(wxT("L"));
00097     letters.Add(wxT("M")); letters.Add(wxT("N")); letters.Add(wxT("O"));
00098     letters.Add(wxT("P")); letters.Add(wxT("Q")); letters.Add(wxT("R"));
00099     letters.Add(wxT("S")); letters.Add(wxT("T")); letters.Add(wxT("U"));
00100     letters.Add(wxT("V")); letters.Add(wxT("W")); letters.Add(wxT("X"));
00101     letters.Add(wxT("Y")); letters.Add(wxT("Z")); letters.Add(wxT("a"));
00102     letters.Add(wxT("b")); letters.Add(wxT("c")); letters.Add(wxT("d"));
00103     letters.Add(wxT("e")); letters.Add(wxT("f")); letters.Add(wxT("g"));
00104     letters.Add(wxT("h")); letters.Add(wxT("i")); letters.Add(wxT("j"));
00105     letters.Add(wxT("k")); letters.Add(wxT("l")); letters.Add(wxT("m"));
00106     letters.Add(wxT("n")); letters.Add(wxT("o")); letters.Add(wxT("p"));
00107     letters.Add(wxT("q")); letters.Add(wxT("r")); letters.Add(wxT("s"));
00108     letters.Add(wxT("t")); letters.Add(wxT("u")); letters.Add(wxT("v"));
00109     letters.Add(wxT("w")); letters.Add(wxT("x")); letters.Add(wxT("y"));
00110     letters.Add(wxT("z")); letters.Add(wxT("0")); letters.Add(wxT("1"));
00111     letters.Add(wxT("2")); letters.Add(wxT("3")); letters.Add(wxT("4"));
00112     letters.Add(wxT("5")); letters.Add(wxT("6")); letters.Add(wxT("7"));
00113     letters.Add(wxT("8")); letters.Add(wxT("9")); letters.Add(wxT("'"));
00114     letters.Add(wxT(",")); letters.Add(wxT(".")); letters.Add(wxT("-"));
00115     letters.Add(wxT(":")); letters.Add(wxT("!")); letters.Add(wxT("?"));
00116 
00117     wxTextValidator nameValidator(wxFILTER_INCLUDE_CHAR_LIST);
00118     nameValidator.SetIncludes(letters);
00119     
00120     nameText = XRCCTRL(*this, "IDT_CHARACTER_NAME", wxTextCtrl);
00121     nameText->SetValidator(nameValidator);
00122     
00123     classChoice = XRCCTRL(*this, "IDC_CHARACTER_CLASS", wxChoice);
00124     conditionChoice = XRCCTRL(*this, "IDC_CHARACTER_CONDITION", wxChoice);
00125     
00126     currentHPText = XRCCTRL(*this, "IDT_CHARACTER_CURRENT_HP", wxTextCtrl);
00127     currentHPText->SetValidator(numberValidator);
00128     
00129     maxHPText = XRCCTRL(*this, "IDT_CHARACTER_MAX_HP", wxTextCtrl);
00130     maxHPText->SetValidator(numberValidator);
00131     
00132     experienceText = XRCCTRL(*this, "IDT_CHARACTER_EXPERIENCE", wxTextCtrl);
00133     experienceText->SetValidator(numberValidator);
00134     
00135     strengthText = XRCCTRL(*this, "IDT_CHARACTER_STRENGTH", wxTextCtrl);
00136     strengthText->SetValidator(numberValidator);
00137     
00138     agilityText = XRCCTRL(*this, "IDT_CHARACTER_AGILITY", wxTextCtrl);
00139     agilityText->SetValidator(numberValidator);
00140     
00141     intelligenceText = XRCCTRL(*this, "IDT_CHARACTER_INTELLIGENCE", wxTextCtrl);
00142     intelligenceText->SetValidator(numberValidator);
00143     
00144     vitalityText = XRCCTRL(*this, "IDT_CHARACTER_VITALITY", wxTextCtrl);
00145     vitalityText->SetValidator(numberValidator);
00146     
00147     luckText = XRCCTRL(*this, "IDT_CHARACTER_LUCK", wxTextCtrl);
00148     luckText->SetValidator(numberValidator);
00149     
00150     damageText = XRCCTRL(*this, "IDT_CHARACTER_DAMAGE", wxTextCtrl);
00151     damageText->SetValidator(numberValidator);
00152     
00153     hitPercentText = XRCCTRL(*this, "IDT_CHARACTER_HIT_PERCENT", wxTextCtrl);
00154     hitPercentText->SetValidator(numberValidator);
00155     
00156     weaponChoice[0] = XRCCTRL(*this, "IDC_CHARACTER_WEAPON1", wxChoice);
00157     weaponEquippedCheck[0] =
00158         XRCCTRL(*this, "IDC_CHARACTER_WEAPON_EQUIPPED1", wxCheckBox);
00159     weaponChoice[1] = XRCCTRL(*this, "IDC_CHARACTER_WEAPON2", wxChoice);
00160     weaponEquippedCheck[1] =
00161         XRCCTRL(*this, "IDC_CHARACTER_WEAPON_EQUIPPED2", wxCheckBox);
00162     weaponChoice[2] = XRCCTRL(*this, "IDC_CHARACTER_WEAPON3", wxChoice);
00163     weaponEquippedCheck[2] =
00164         XRCCTRL(*this, "IDC_CHARACTER_WEAPON_EQUIPPED3", wxCheckBox);
00165     weaponChoice[3] = XRCCTRL(*this, "IDC_CHARACTER_WEAPON4", wxChoice);
00166     weaponEquippedCheck[3] =
00167         XRCCTRL(*this, "IDC_CHARACTER_WEAPON_EQUIPPED4", wxCheckBox);
00168     
00169     armorChoice[0] = XRCCTRL(*this, "IDC_CHARACTER_ARMOR1", wxChoice);
00170     armorEquippedCheck[0] =
00171         XRCCTRL(*this, "IDC_CHARACTER_ARMOR_EQUIPPED1", wxCheckBox);
00172     armorChoice[1] = XRCCTRL(*this, "IDC_CHARACTER_ARMOR2", wxChoice);
00173     armorEquippedCheck[1] =
00174         XRCCTRL(*this, "IDC_CHARACTER_ARMOR_EQUIPPED2", wxCheckBox);
00175     armorChoice[2] = XRCCTRL(*this, "IDC_CHARACTER_ARMOR3", wxChoice);
00176     armorEquippedCheck[2] =
00177         XRCCTRL(*this, "IDC_CHARACTER_ARMOR_EQUIPPED3", wxCheckBox);
00178     armorChoice[3] = XRCCTRL(*this, "IDC_CHARACTER_ARMOR4", wxChoice);
00179     armorEquippedCheck[3] =
00180         XRCCTRL(*this, "IDC_CHARACTER_ARMOR_EQUIPPED4", wxCheckBox);
00181     
00182     currentMagicSlider[0] = XRCCTRL(*this, "IDS_MAGIC_CURRENT1", wxSlider);
00183     maxMagicSlider[0] = XRCCTRL(*this, "IDS_MAGIC_MAX1", wxSlider);
00184     currentMagicSlider[1] = XRCCTRL(*this, "IDS_MAGIC_CURRENT2", wxSlider);
00185     maxMagicSlider[1] = XRCCTRL(*this, "IDS_MAGIC_MAX2", wxSlider);
00186     currentMagicSlider[2] = XRCCTRL(*this, "IDS_MAGIC_CURRENT3", wxSlider);
00187     maxMagicSlider[2] = XRCCTRL(*this, "IDS_MAGIC_MAX3", wxSlider);
00188     currentMagicSlider[3] = XRCCTRL(*this, "IDS_MAGIC_CURRENT4", wxSlider);
00189     maxMagicSlider[3] = XRCCTRL(*this, "IDS_MAGIC_MAX4", wxSlider);
00190     currentMagicSlider[4] = XRCCTRL(*this, "IDS_MAGIC_CURRENT5", wxSlider);
00191     maxMagicSlider[4] = XRCCTRL(*this, "IDS_MAGIC_MAX5", wxSlider);
00192     currentMagicSlider[5] = XRCCTRL(*this, "IDS_MAGIC_CURRENT6", wxSlider);
00193     maxMagicSlider[5] = XRCCTRL(*this, "IDS_MAGIC_MAX6", wxSlider);
00194     currentMagicSlider[6] = XRCCTRL(*this, "IDS_MAGIC_CURRENT7", wxSlider);
00195     maxMagicSlider[6] = XRCCTRL(*this, "IDS_MAGIC_MAX7", wxSlider);
00196     currentMagicSlider[7] = XRCCTRL(*this, "IDS_MAGIC_CURRENT8", wxSlider);
00197     maxMagicSlider[7] = XRCCTRL(*this, "IDS_MAGIC_MAX8", wxSlider);
00198     
00199     knownMagicChoice[0][0] = XRCCTRL(*this, "IDC_MAGIC_KNOWN11", wxChoice);
00200     knownMagicChoice[0][1] = XRCCTRL(*this, "IDC_MAGIC_KNOWN12", wxChoice);
00201     knownMagicChoice[0][2] = XRCCTRL(*this, "IDC_MAGIC_KNOWN13", wxChoice);
00202     knownMagicChoice[1][0] = XRCCTRL(*this, "IDC_MAGIC_KNOWN21", wxChoice);
00203     knownMagicChoice[1][1] = XRCCTRL(*this, "IDC_MAGIC_KNOWN22", wxChoice);
00204     knownMagicChoice[1][2] = XRCCTRL(*this, "IDC_MAGIC_KNOWN23", wxChoice);
00205     knownMagicChoice[2][0] = XRCCTRL(*this, "IDC_MAGIC_KNOWN31", wxChoice);
00206     knownMagicChoice[2][1] = XRCCTRL(*this, "IDC_MAGIC_KNOWN32", wxChoice);
00207     knownMagicChoice[2][2] = XRCCTRL(*this, "IDC_MAGIC_KNOWN33", wxChoice);
00208     knownMagicChoice[3][0] = XRCCTRL(*this, "IDC_MAGIC_KNOWN41", wxChoice);
00209     knownMagicChoice[3][1] = XRCCTRL(*this, "IDC_MAGIC_KNOWN42", wxChoice);
00210     knownMagicChoice[3][2] = XRCCTRL(*this, "IDC_MAGIC_KNOWN43", wxChoice);
00211     knownMagicChoice[4][0] = XRCCTRL(*this, "IDC_MAGIC_KNOWN51", wxChoice);
00212     knownMagicChoice[4][1] = XRCCTRL(*this, "IDC_MAGIC_KNOWN52", wxChoice);
00213     knownMagicChoice[4][2] = XRCCTRL(*this, "IDC_MAGIC_KNOWN53", wxChoice);
00214     knownMagicChoice[5][0] = XRCCTRL(*this, "IDC_MAGIC_KNOWN61", wxChoice);
00215     knownMagicChoice[5][1] = XRCCTRL(*this, "IDC_MAGIC_KNOWN62", wxChoice);
00216     knownMagicChoice[5][2] = XRCCTRL(*this, "IDC_MAGIC_KNOWN63", wxChoice);
00217     knownMagicChoice[6][0] = XRCCTRL(*this, "IDC_MAGIC_KNOWN71", wxChoice);
00218     knownMagicChoice[6][1] = XRCCTRL(*this, "IDC_MAGIC_KNOWN72", wxChoice);
00219     knownMagicChoice[6][2] = XRCCTRL(*this, "IDC_MAGIC_KNOWN73", wxChoice);
00220     knownMagicChoice[7][0] = XRCCTRL(*this, "IDC_MAGIC_KNOWN81", wxChoice);
00221     knownMagicChoice[7][1] = XRCCTRL(*this, "IDC_MAGIC_KNOWN82", wxChoice);
00222     knownMagicChoice[7][2] = XRCCTRL(*this, "IDC_MAGIC_KNOWN83", wxChoice);
00223     
00224     setOpen(false);
00225 }
00226 
00227 void MainFrame::setOpen(bool open) {
00228     fileSaveItem->Enable(open);
00229     fileSaveAsItem->Enable(open);
00230     fileCloseItem->Enable(open);
00231     
00232     for (int i = 0; i < 4; i++) {
00233         memberItems[i]->Enable(open);
00234     }
00235     
00236     this->open = open;
00237 }
00238 
00239 void MainFrame::loadCharacterData(int member) {
00240     this->member = member;
00241     
00242     wxString str = game->getName(member);
00243     nameText->SetValue(str);
00244     
00245     classChoice->SetSelection(game->getClass(member));
00246     conditionChoice->SetSelection(game->getCondition(member));
00247     
00248     str.Printf(wxT("%d"), game->getCurrentHP(member));
00249     currentHPText->SetValue(str);
00250     
00251     str.Printf(wxT("%d"), game->getMaxHP(member));
00252     maxHPText->SetValue(str);
00253     
00254     str.Printf(wxT("%d"), game->getExperience(member));
00255     experienceText->SetValue(str);
00256     
00257     str.Printf(wxT("%d"), game->getStrength(member));
00258     strengthText->SetValue(str);
00259     
00260     str.Printf(wxT("%d"), game->getAgility(member));
00261     agilityText->SetValue(str);
00262     
00263     str.Printf(wxT("%d"), game->getIntelligence(member));
00264     intelligenceText->SetValue(str);
00265     
00266     str.Printf(wxT("%d"), game->getVitality(member));
00267     vitalityText->SetValue(str);
00268     
00269     str.Printf(wxT("%d"), game->getLuck(member));
00270     luckText->SetValue(str);
00271     
00272     str.Printf(wxT("%d"), game->getDamage(member));
00273     damageText->SetValue(str);
00274     
00275     str.Printf(wxT("%d"), game->getHitPercent(member));
00276     hitPercentText->SetValue(str);
00277     
00278     for (int pos = 0; pos < 4; pos++) {
00279         int weapon = game->getWeapon(member, pos);
00280         int armor = game->getArmor(member, pos);
00281         
00282         weaponChoice[pos]->SetSelection(weapon & 0x7F);
00283         armorChoice[pos]->SetSelection(armor & 0x7F);
00284         
00285         weaponEquippedCheck[pos]->SetValue((weapon & 0x80) ? true : false);
00286         armorEquippedCheck[pos]->SetValue((armor & 0x80) ? true : false);
00287     }
00288     
00289     for (int level = 0; level < 8; level++) {
00290         int current = game->getCurrentMagic(member, level);
00291         int max = game->getMaxMagic(member, level);
00292         
00293         currentMagicSlider[level]->SetValue(current);
00294         maxMagicSlider[level]->SetValue(max);
00295         
00296         for (int slot = 0; slot < 3; slot++) {
00297             int magic = game->getMagic(member, level, slot);
00298             knownMagicChoice[level][slot]->SetSelection(magic);
00299         }
00300     }
00301 }
00302 
00303 void MainFrame::loadGameData() {
00304     wxString str;
00305     str.Printf(wxT("%d"), game->getGold());
00306     
00307     goldText->SetValue(str);
00308     
00309     healSlider->SetValue(game->getItem(HEALP));
00310     pureSlider->SetValue(game->getItem(PUREP));
00311     softSlider->SetValue(game->getItem(SOFTP));
00312     
00313     tentSlider->SetValue(game->getItem(TENT));
00314     cabinSlider->SetValue(game->getItem(CABIN));
00315     houseSlider->SetValue(game->getItem(HOUSE));
00316     
00317     XRCCTRL(*this, "IDC_GENERAL_LUTE", wxCheckBox)->
00318         SetValue((game->getItem(LUTE) == 1) ? true : false);
00319     XRCCTRL(*this, "IDC_GENERAL_CROWN", wxCheckBox)->
00320         SetValue((game->getItem(CROWN) == 1) ? true : false);
00321     XRCCTRL(*this, "IDC_GENERAL_CRYSTAL", wxCheckBox)->
00322         SetValue((game->getItem(CRYSTAL) == 1) ? true : false);
00323     XRCCTRL(*this, "IDC_GENERAL_HERB", wxCheckBox)->
00324         SetValue((game->getItem(HERB) == 1) ? true : false);
00325     XRCCTRL(*this, "IDC_GENERAL_KEY", wxCheckBox)->
00326         SetValue((game->getItem(KEY) == 1) ? true : false);
00327     XRCCTRL(*this, "IDC_GENERAL_TNT", wxCheckBox)->
00328         SetValue((game->getItem(TNT) == 1) ? true : false);
00329     XRCCTRL(*this, "IDC_GENERAL_ADAMENT", wxCheckBox)->
00330         SetValue((game->getItem(ADAMENT) == 1) ? true : false);
00331     XRCCTRL(*this, "IDC_GENERAL_SLAB", wxCheckBox)->
00332         SetValue((game->getItem(SLAB) == 1) ? true : false);
00333     XRCCTRL(*this, "IDC_GENERAL_RUBY", wxCheckBox)->
00334         SetValue((game->getItem(RUBY) == 1) ? true : false);
00335     XRCCTRL(*this, "IDC_GENERAL_ROD", wxCheckBox)->
00336         SetValue((game->getItem(ROD) == 1) ? true : false);
00337     XRCCTRL(*this, "IDC_GENERAL_FLOATER", wxCheckBox)->
00338         SetValue((game->getItem(FLOATER) == 1) ? true : false);
00339     XRCCTRL(*this, "IDC_GENERAL_CHIME", wxCheckBox)->
00340         SetValue((game->getItem(CHIME) == 1) ? true : false);
00341     XRCCTRL(*this, "IDC_GENERAL_TAIL", wxCheckBox)->
00342         SetValue((game->getItem(TAIL) == 1) ? true : false);
00343     XRCCTRL(*this, "IDC_GENERAL_CUBE", wxCheckBox)->
00344         SetValue((game->getItem(CUBE) == 1) ? true : false);
00345     XRCCTRL(*this, "IDC_GENERAL_BOTTLE", wxCheckBox)->
00346         SetValue((game->getItem(BOTTLE) == 1) ? true : false);
00347     XRCCTRL(*this, "IDC_GENERAL_OXYALE", wxCheckBox)->
00348         SetValue((game->getItem(OXYALE) == 1) ? true : false);
00349     XRCCTRL(*this, "IDC_GENERAL_CANOE", wxCheckBox)->
00350         SetValue((game->getItem(CANOE) == 1) ? true : false);
00351     XRCCTRL(*this, "IDC_GENERAL_FIRE_ORB", wxCheckBox)->
00352         SetValue((game->getItem(FIREORB) == 1) ? true : false);
00353     XRCCTRL(*this, "IDC_GENERAL_WATER_ORB", wxCheckBox)->
00354         SetValue((game->getItem(WATERORB) == 1) ? true : false);
00355     XRCCTRL(*this, "IDC_GENERAL_WIND_ORB", wxCheckBox)->
00356         SetValue((game->getItem(WINDORB) == 1) ? true : false);
00357     XRCCTRL(*this, "IDC_GENERAL_EARTH_ORB", wxCheckBox)->
00358         SetValue((game->getItem(EARTHORB) == 1) ? true : false);
00359     
00360     loadCharacterData();
00361     
00362     XRCCTRL(*this, "IDN_FFSE", wxNotebook)->Show(true);
00363 }
00364 
00365 void MainFrame::load(wxString &filename) {
00366     if (!close()) {
00367         return;
00368     }
00369     
00370     char nvram[GAME_SIZE];
00371     sram = new char[SRAM_SIZE];
00372     
00373     std::ifstream in(filename.mb_str(), std::ios::in | std::ios::binary);
00374     
00375     if (!in) {
00376         // unable to open file
00377         wxMessageBox(wxT("Unable to open the selected file."),
00378                      wxT("File I/O Error"), wxOK | wxICON_ERROR);
00379         return;
00380     }
00381     
00382     in.read(sram, SRAM_SIZE);
00383     
00384     if (in.rdstate() & std::ios::failbit) {
00385         // unable to read the requested data
00386         wxMessageBox(wxT("Unable to read the selected file."),
00387                      wxT("File I/O Error"), wxOK | wxICON_ERROR);
00388         return;
00389     }
00390     
00391     in.close();
00392     
00393     memcpy(nvram, (sram + GAME_OFFSET), GAME_SIZE);
00394     game = new SaveSlot(nvram);
00395     
00396     if (game->isValid()) {
00397         loadGameData();
00398         setOpen(true);
00399         
00400         wxString bakfile = filename + wxT(".bak");
00401         std::ofstream out(bakfile.mb_str(), std::ios::out | std::ios::binary);
00402         
00403         if (out) {
00404             out.write(sram, SRAM_SIZE);
00405             out.close();
00406         }
00407     } else {
00408         wxMessageBox(wxT("No game data found in the file you loaded."),
00409                      wxT("Error: No Data Found"), wxOK | wxICON_ERROR);
00410                      
00411         delete sram;
00412         delete game;
00413     }
00414 }
00415 
00416 void MainFrame::fileOpen(wxCommandEvent &) {
00417     static wxFileDialog *dlg = new wxFileDialog(this, 
00418         wxT("Choose a .SAV File"), wxT(""), wxT(""), 
00419         wxT("NES SRAM File (*.sav)|*.sav"), (wxOPEN | wxCHANGE_DIR));
00420         
00421     int value = dlg->ShowModal();
00422     
00423     if (value == wxID_OK) {
00424         sramFile = dlg->GetPath();
00425         load(sramFile);
00426     }
00427 }
00428 
00429 bool MainFrame::close() {
00430     if (!isOpen()) {
00431         return true;
00432     }
00433     
00434     if (game->isModified()) {
00435         int choice = wxMessageBox(wxT("Save Game File Before Closing?"),
00436                                   wxT("Warning: Unsaved Changes"),
00437                                   wxYES_NO | wxCANCEL | wxICON_QUESTION,
00438                                   this);
00439         
00440         if (choice == wxYES) {
00441             if (!save(sramFile)) {
00442                 return false;
00443             }
00444         } else if (choice == wxCANCEL) {
00445             return false;
00446         }
00447     }
00448     
00449     delete game;
00450     delete sram;
00451     
00452     memberItems[0]->Check(true);
00453     XRCCTRL(*this, "IDN_FFSE", wxNotebook)->Show(false);
00454     
00455     setOpen(false);
00456     
00457     return true;
00458 }
00459 
00460 void MainFrame::fileClose(wxCommandEvent &) {
00461     close();
00462 }
00463 
00464 bool MainFrame::isValidEquipment() {
00465     bool weapon;
00466     bool armor;
00467     bool shield;
00468     bool helmet;
00469     bool gauntlet;
00470     
00471     for (int member = 0; member < 4; member++) {
00472         weapon = false;
00473         armor = false;
00474         shield = false;
00475         helmet = false;
00476         gauntlet = false;
00477         
00478         for (int slot = 0; slot < 4; slot++) {
00479             int item = game->getWeapon(member, slot);
00480         
00481             if ((item >= 0x81) && (item <= 0xA8)) {
00482                 if (weapon) {
00483                     return false;
00484                 }
00485             
00486                 weapon = true;
00487             }
00488         
00489             item = game->getArmor(member, slot);
00490         
00491             if ((item >= 0x81) && (item <= 0x90)) {
00492                 if (armor) {
00493                     return false;
00494                 }
00495             
00496                 armor = true;
00497             } else if ((item >= 0x91) && (item <= 0x99)) {
00498                 if (shield) {
00499                     return false;
00500                 }
00501             
00502                 shield = true;
00503             } else if ((item >= 0x9A) && (item <= 0xA0)) {
00504                 if (helmet) {
00505                     return false;
00506                 }
00507             
00508                 helmet = true;
00509             } else if ((item >= 0xA1) && (item <= 0xA8)) {
00510                 if (gauntlet) {
00511                     return false;
00512                 }
00513             
00514                 gauntlet = true;
00515             }
00516         }
00517     }
00518     
00519     return true;
00520 }
00521 
00522 bool MainFrame::save(wxString &filename) {
00523     if (!isValidEquipment()) {
00524         int choice = wxMessageBox(
00525             wxT("At least one party member has duplicate equipment.\n")
00526             wxT("Continue Saving?"), wxT("Error: Invalid Equipment"),
00527             wxYES | wxNO | wxICON_QUESTION);
00528                      
00529         if (choice != wxYES) {
00530             return false;
00531         }
00532     }
00533     
00534     memcpy((sram + GAME_OFFSET), game->nvram, GAME_SIZE);
00535     
00536     std::ofstream out(filename.mb_str(), std::ios::binary | std::ios::out);
00537     
00538     if (!out) {
00539         wxMessageBox(wxT("Unable to open the SRAM file."),
00540                      wxT("File Open Error"), wxOK | wxICON_ERROR);
00541         return false;
00542     }
00543     
00544     out.write(sram, SRAM_SIZE);
00545     
00546     if (out.rdstate() && std::ios::failbit) {
00547         wxMessageBox(wxT("Unable to write to the SRAM file."),
00548                      wxT("File I/O Error"), wxOK | wxICON_ERROR);
00549         out.close();
00550         return false;
00551     }
00552     
00553     out.close();
00554     
00555     game->setModified(false);
00556     
00557     return true;
00558 }
00559 
00560 void MainFrame::fileSave(wxCommandEvent &) {
00561     save(sramFile);
00562 }
00563 
00564 void MainFrame::fileSaveAs(wxCommandEvent &) {
00565     static wxFileDialog *dlg = new wxFileDialog(this,
00566         wxT("Choose a .SAV File"), wxT(""), wxT(""),
00567         wxT("NES SRAM File (*.sav)|*.sav"), (wxSAVE | wxCHANGE_DIR));
00568 
00569     int value = dlg->ShowModal();
00570 
00571     if (value == wxID_OK) {
00572         sramFile = dlg->GetPath();
00573         save(sramFile);
00574     }
00575 }
00576 
00577 void MainFrame::fileExit(wxCommandEvent &) {
00578     if (close()) {
00579         Close(true);
00580     }
00581 }
00582 
00583 void MainFrame::windowClosing(wxCloseEvent &event) {
00584     if (event.CanVeto()) {
00585         if (!close()) {
00586             event.Veto();
00587             return;
00588         }
00589     }
00590     
00591     Destroy();
00592 }
00593 
00594 void MainFrame::memberChange(wxCommandEvent &event) {
00595     setOpen(false);
00596     
00597     int id = event.GetId();
00598     
00599     if (id == XRCID("IDM_MEMBER_ONE")) {
00600         loadCharacterData(0);
00601     } else if (id == XRCID("IDM_MEMBER_TWO")) {
00602         loadCharacterData(1);
00603     } else if (id == XRCID("IDM_MEMBER_THREE")) {
00604         loadCharacterData(2);
00605     } else if (id == XRCID("IDM_MEMBER_FOUR")) {
00606         loadCharacterData(3);
00607     }
00608     
00609     setOpen(true);
00610 }
00611 
00612 void MainFrame::helpAbout(wxCommandEvent &) {
00613     wxString msg = wxString(*ffseApp::APP_NAME + wxT(' ') + 
00614                             *ffseApp::APP_VERSION + wxT('\n') +
00615                             *ffseApp::APP_COPYRIGHT + wxT('\n') +
00616                             *ffseApp::APP_URL);
00617     wxString title = wxString(wxT("About ") + *ffseApp::APP_NAME + wxT("..."));
00618     
00619     wxMessageBox(msg, title, wxOK | wxICON_INFORMATION, this);
00620 }
00621 
00622 void MainFrame::goldChange(wxCommandEvent &) {
00623     if (!isOpen()) {
00624         return;
00625     }
00626     
00627     game->setGold(atoi(goldText->GetValue().mb_str()));
00628 }
00629 
00630 void MainFrame::itemQuantityChange(wxScrollEvent &event) {
00631     if (!isOpen()) {
00632         return;
00633     }
00634     
00635     wxSlider *ctrl = (wxSlider *)event.GetEventObject();
00636     int item = HOUSE;
00637     
00638     if (ctrl == healSlider) {
00639         item = HEALP;
00640     } else if (ctrl == pureSlider) {
00641         item = PUREP;
00642     } else if (ctrl == softSlider) {
00643         item = SOFTP;
00644     } else if (ctrl == tentSlider) {
00645         item = TENT;
00646     } else if (ctrl == cabinSlider) {
00647         item = CABIN;
00648     }
00649     
00650     game->setItem(item, ctrl->GetValue());
00651 }
00652 
00653 void MainFrame::itemHaveChange(wxCommandEvent &event) {
00654     if (!isOpen()) {
00655         return;
00656     }
00657     
00658     wxCheckBox *ctrl = (wxCheckBox *)event.GetEventObject();
00659     int item = LUTE;
00660     
00661     if (ctrl == XRCCTRL(*this, "IDC_GENERAL_CROWN", wxCheckBox)) {
00662         item = CROWN;
00663     } else if (ctrl == XRCCTRL(*this, "IDC_GENERAL_CRYSTAL", wxCheckBox)) {
00664         item = CRYSTAL;
00665     } else if (ctrl == XRCCTRL(*this, "IDC_GENERAL_HERB", wxCheckBox)) {
00666         item = HERB;
00667     } else if (ctrl == XRCCTRL(*this, "IDC_GENERAL_KEY", wxCheckBox)) {
00668         item = KEY;
00669     } else if (ctrl == XRCCTRL(*this, "IDC_GENERAL_TNT", wxCheckBox)) {
00670         item = TNT;
00671     } else if (ctrl == XRCCTRL(*this, "IDC_GENERAL_ADAMENT", wxCheckBox)) {
00672         item = ADAMENT;
00673     } else if (ctrl == XRCCTRL(*this, "IDC_GENERAL_SLAB", wxCheckBox)) {
00674         item = SLAB;
00675     } else if (ctrl == XRCCTRL(*this, "IDC_GENERAL_RUBY", wxCheckBox)) {
00676         item = RUBY;
00677     } else if (ctrl == XRCCTRL(*this, "IDC_GENERAL_ROD", wxCheckBox)) {
00678         item = ROD;
00679     } else if (ctrl == XRCCTRL(*this, "IDC_GENERAL_FLOATER", wxCheckBox)) {
00680         item = FLOATER;
00681     } else if (ctrl == XRCCTRL(*this, "IDC_GENERAL_CHIME", wxCheckBox)) {
00682         item = CHIME;
00683     } else if (ctrl == XRCCTRL(*this, "IDC_GENERAL_TAIL", wxCheckBox)) {
00684         item = TAIL;
00685     } else if (ctrl == XRCCTRL(*this, "IDC_GENERAL_CUBE", wxCheckBox)) {
00686         item = CUBE;
00687     } else if (ctrl == XRCCTRL(*this, "IDC_GENERAL_BOTTLE", wxCheckBox)) {
00688         item = BOTTLE;
00689     } else if (ctrl == XRCCTRL(*this, "IDC_GENERAL_OXYALE", wxCheckBox)) {
00690         item = OXYALE;
00691     } else if (ctrl == XRCCTRL(*this, "IDC_GENERAL_CANOE", wxCheckBox)) {
00692         item = CANOE;
00693     } else if (ctrl == XRCCTRL(*this, "IDC_GENERAL_FIRE_ORB", wxCheckBox)) {
00694         item = FIREORB;
00695     } else if (ctrl == XRCCTRL(*this, "IDC_GENERAL_WATER_ORB", wxCheckBox)) {
00696         item = WATERORB;
00697     } else if (ctrl == XRCCTRL(*this, "IDC_GENERAL_WIND_ORB", wxCheckBox)) {
00698         item = WINDORB;
00699     } else if (ctrl == XRCCTRL(*this, "IDC_GENERAL_EARTH_ORB", wxCheckBox)) {
00700         item = EARTHORB;
00701     }
00702     
00703     game->setItem(item, ctrl->IsChecked());
00704 }
00705 
00706 void MainFrame::nameChange(wxCommandEvent &) {
00707     if (!isOpen()) {
00708         return;
00709     }
00710     
00711     wxString value = nameText->GetValue();
00712     game->setName(member, value);
00713 }
00714 
00715 void MainFrame::conditionChange(wxCommandEvent &event) {
00716     if (!isOpen()) {
00717         return;
00718     }
00719     
00720     wxChoice *ctrl = (wxChoice *)event.GetEventObject();
00721     
00722     if (ctrl == classChoice) {
00723         game->setClass(member, ctrl->GetSelection());
00724     } else if (ctrl == conditionChoice) {
00725         game->setCondition(member, ctrl->GetSelection());
00726     }
00727 }
00728 
00729 void MainFrame::statChange(wxCommandEvent &event) {
00730     if (!isOpen()) {
00731         return;
00732     }
00733     
00734     wxTextCtrl *ctrl = (wxTextCtrl *)event.GetEventObject();
00735     int value = atoi(ctrl->GetValue().mb_str());
00736     
00737     if (ctrl == currentHPText) {
00738         game->setCurrentHP(member, value);
00739     } else if (ctrl == maxHPText) {
00740         game->setMaxHP(member, value);
00741     } else if (ctrl == experienceText) {
00742         game->setExperience(member, value);
00743     } else if (ctrl == strengthText) {
00744         game->setStrength(member, value);
00745     } else if (ctrl == agilityText) {
00746         game->setAgility(member, value);
00747     } else if (ctrl == intelligenceText) {
00748         game->setIntelligence(member, value);
00749     } else if (ctrl == vitalityText) {
00750         game->setVitality(member, value);
00751     } else if (ctrl == luckText) {
00752         game->setLuck(member, value);
00753     } else if (ctrl == damageText) {
00754         game->setDamage(member, ((value > 255) ? 255 : value));
00755     } else if (ctrl == hitPercentText) {
00756         game->setHitPercent(member, ((value > 255) ? 255 : value));
00757     }
00758 }
00759 
00760 void MainFrame::weaponChange(wxCommandEvent &event) {
00761     if (!isOpen()) {
00762         return;
00763     }
00764     
00765     wxChoice *ctrl = (wxChoice *)event.GetEventObject();
00766     int slot;
00767     
00768     for (slot = 0; slot < 4; slot++) {
00769         if (ctrl == weaponChoice[slot]) {
00770             break;
00771         }
00772     }
00773     
00774     int weapon = ctrl->GetSelection();
00775     
00776     if (weaponEquippedCheck[slot]->IsChecked()) {
00777         weapon |= 0x80;
00778     }
00779     
00780     game->setWeapon(member, slot, weapon);
00781 }
00782 
00783 void MainFrame::weaponEquippedChange(wxCommandEvent &event) {
00784     if (!isOpen()) {
00785         return;
00786     }
00787     
00788     wxCheckBox *ctrl = (wxCheckBox *)event.GetEventObject();
00789     int slot;
00790     
00791     for (slot = 0; slot < 4; slot++) {
00792         if (ctrl == weaponEquippedCheck[slot]) {
00793             break;
00794         }
00795     }
00796     
00797     int weapon = weaponChoice[slot]->GetSelection();
00798     
00799     if (ctrl->IsChecked()) {
00800         weapon |= 0x80;
00801     }
00802     
00803     game->setWeapon(member, slot, weapon);
00804 }
00805 
00806 void MainFrame::armorChange(wxCommandEvent &event) {
00807     if (!isOpen()) {
00808         return;
00809     }
00810     
00811     wxChoice *ctrl = (wxChoice *)event.GetEventObject();
00812     int slot;
00813     
00814     for (slot = 0; slot < 4; slot++) {
00815         if (ctrl == armorChoice[slot]) {
00816             break;
00817         }
00818     }
00819     
00820     int armor = ctrl->GetSelection();
00821     
00822     if (armorEquippedCheck[slot]->IsChecked()) {
00823         armor |= 0x80;
00824     }
00825     
00826     game->setArmor(member, slot, armor);
00827 }
00828 
00829 void MainFrame::armorEquippedChange(wxCommandEvent &event) {
00830     if (!isOpen()) {
00831         return;
00832     }
00833     
00834     wxCheckBox *ctrl = (wxCheckBox *)event.GetEventObject();
00835     int slot;
00836     
00837     for (slot = 0; slot < 4; slot++) {
00838         if (ctrl == armorEquippedCheck[slot]) {
00839             break;
00840         }
00841     }
00842     
00843     int armor = armorChoice[slot]->GetSelection();
00844     
00845     if (ctrl->IsChecked()) {
00846         armor |= 0x80;
00847     }
00848     
00849     game->setArmor(member, slot, armor);
00850 }
00851 
00852 void MainFrame::currentMagicChange(wxScrollEvent &event) {
00853     if (!isOpen()) {
00854         return;
00855     }
00856     
00857     wxSlider *ctrl = (wxSlider *)event.GetEventObject();
00858     int level;
00859     
00860     for (level = 0; level < 8; level++) {
00861         if (ctrl == currentMagicSlider[level]) {
00862             break;
00863         }
00864     }
00865     
00866     game->setCurrentMagic(member, level, ctrl->GetValue());
00867 }
00868 
00869 void MainFrame::maxMagicChange(wxScrollEvent &event) {
00870     if (!isOpen()) {
00871         return;
00872     }
00873     
00874     wxSlider *ctrl = (wxSlider *)event.GetEventObject();
00875     int level;
00876     
00877     for (level = 0; level < 8; level++) {
00878         if (ctrl == maxMagicSlider[level]) {
00879             break;
00880         }
00881     }
00882     
00883     game->setMaxMagic(member, level, ctrl->GetValue());
00884 }
00885 
00886 void MainFrame::knownMagicChange(wxCommandEvent &event) {
00887     if (!isOpen()) {
00888         return;
00889     }
00890     
00891     wxChoice *ctrl = (wxChoice *)event.GetEventObject();
00892     int level, slot;
00893     
00894     for (level = 0; level < 8; level++) {
00895         bool match = false;
00896         
00897         for (slot = 0; slot < 3; slot++) {
00898             if (ctrl == knownMagicChoice[level][slot]) {
00899                 match = true;
00900                 break;
00901             }
00902         }
00903         
00904         if (match) {
00905             break;
00906         }
00907     }
00908     
00909     game->setMagic(member, level, slot, ctrl->GetSelection());
00910 }
00911 
00912 IMPLEMENT_DYNAMIC_CLASS(MainFrame, wxFrame)
00913 
00914 BEGIN_EVENT_TABLE(MainFrame, wxFrame)
00915     EVT_CLOSE(MainFrame::windowClosing)
00916 
00917     EVT_MENU(wxID_OPEN, MainFrame::fileOpen)
00918     EVT_MENU(wxID_CLOSE, MainFrame::fileClose)
00919     EVT_MENU(wxID_SAVE, MainFrame::fileSave)
00920     EVT_MENU(wxID_SAVEAS, MainFrame::fileSaveAs)
00921     EVT_MENU(wxID_EXIT, MainFrame::fileExit)
00922     
00923     EVT_MENU(XRCID("IDM_MEMBER_ONE"), MainFrame::memberChange)
00924     EVT_MENU(XRCID("IDM_MEMBER_TWO"), MainFrame::memberChange)
00925     EVT_MENU(XRCID("IDM_MEMBER_THREE"), MainFrame::memberChange)
00926     EVT_MENU(XRCID("IDM_MEMBER_FOUR"), MainFrame::memberChange)
00927     
00928     EVT_MENU(wxID_ABOUT, MainFrame::helpAbout)
00929     
00930     EVT_TEXT(XRCID("IDT_GENERAL_GOLD"), MainFrame::goldChange)
00931     
00932     EVT_COMMAND_SCROLL(XRCID("IDS_GENERAL_HEAL"), MainFrame::itemQuantityChange)
00933     EVT_COMMAND_SCROLL(XRCID("IDS_GENERAL_PURE"), MainFrame::itemQuantityChange)
00934     EVT_COMMAND_SCROLL(XRCID("IDS_GENERAL_SOFT"), MainFrame::itemQuantityChange)
00935     EVT_COMMAND_SCROLL(XRCID("IDS_GENERAL_TENT"), MainFrame::itemQuantityChange)
00936     EVT_COMMAND_SCROLL(XRCID("IDS_GENERAL_CABIN"), MainFrame::itemQuantityChange)
00937     EVT_COMMAND_SCROLL(XRCID("IDS_GENERAL_HOUSE"), MainFrame::itemQuantityChange)
00938     
00939     EVT_CHECKBOX(XRCID("IDC_GENERAL_LUTE"), MainFrame::itemHaveChange)
00940     EVT_CHECKBOX(XRCID("IDC_GENERAL_CROWN"), MainFrame::itemHaveChange)
00941     EVT_CHECKBOX(XRCID("IDC_GENERAL_CRYSTAL"), MainFrame::itemHaveChange)
00942     EVT_CHECKBOX(XRCID("IDC_GENERAL_HERB"), MainFrame::itemHaveChange)
00943     EVT_CHECKBOX(XRCID("IDC_GENERAL_KEY"), MainFrame::itemHaveChange)
00944     EVT_CHECKBOX(XRCID("IDC_GENERAL_TNT"), MainFrame::itemHaveChange)
00945     EVT_CHECKBOX(XRCID("IDC_GENERAL_ADAMENT"), MainFrame::itemHaveChange)
00946     EVT_CHECKBOX(XRCID("IDC_GENERAL_SLAB"), MainFrame::itemHaveChange)
00947     EVT_CHECKBOX(XRCID("IDC_GENERAL_RUBY"), MainFrame::itemHaveChange)
00948     EVT_CHECKBOX(XRCID("IDC_GENERAL_ROD"), MainFrame::itemHaveChange)
00949     EVT_CHECKBOX(XRCID("IDC_GENERAL_FLOATER"), MainFrame::itemHaveChange)
00950     EVT_CHECKBOX(XRCID("IDC_GENERAL_CHIME"), MainFrame::itemHaveChange)
00951     EVT_CHECKBOX(XRCID("IDC_GENERAL_TAIL"), MainFrame::itemHaveChange)
00952     EVT_CHECKBOX(XRCID("IDC_GENERAL_CUBE"), MainFrame::itemHaveChange)
00953     EVT_CHECKBOX(XRCID("IDC_GENERAL_BOTTLE"), MainFrame::itemHaveChange)
00954     EVT_CHECKBOX(XRCID("IDC_GENERAL_OXYALE"), MainFrame::itemHaveChange)
00955     EVT_CHECKBOX(XRCID("IDC_GENERAL_CANOE"), MainFrame::itemHaveChange)
00956     EVT_CHECKBOX(XRCID("IDC_GENERAL_FIRE_ORB"), MainFrame::itemHaveChange)
00957     EVT_CHECKBOX(XRCID("IDC_GENERAL_WATER_ORB"), MainFrame::itemHaveChange)
00958     EVT_CHECKBOX(XRCID("IDC_GENERAL_WIND_ORB"), MainFrame::itemHaveChange)
00959     EVT_CHECKBOX(XRCID("IDC_GENERAL_EARTH_ORB"), MainFrame::itemHaveChange)
00960     
00961     EVT_TEXT(XRCID("IDT_CHARACTER_NAME"), MainFrame::nameChange)
00962     
00963     EVT_CHOICE(XRCID("IDC_CHARACTER_CLASS"), MainFrame::conditionChange)
00964     EVT_CHOICE(XRCID("IDC_CHARACTER_CONDITION"), MainFrame::conditionChange)
00965     
00966     EVT_TEXT(XRCID("IDT_CHARACTER_CURRENT_HP"), MainFrame::statChange)
00967     EVT_TEXT(XRCID("IDT_CHARACTER_MAX_HP"), MainFrame::statChange)
00968     EVT_TEXT(XRCID("IDT_CHARACTER_EXPERIENCE"), MainFrame::statChange)
00969     EVT_TEXT(XRCID("IDT_CHARACTER_STRENGTH"), MainFrame::statChange)
00970     EVT_TEXT(XRCID("IDT_CHARACTER_AGILITY"), MainFrame::statChange)
00971     EVT_TEXT(XRCID("IDT_CHARACTER_INTELLIGENCE"), MainFrame::statChange)
00972     EVT_TEXT(XRCID("IDT_CHARACTER_VITALITY"), MainFrame::statChange)
00973     EVT_TEXT(XRCID("IDT_CHARACTER_LUCK"), MainFrame::statChange)
00974     EVT_TEXT(XRCID("IDT_CHARACTER_DAMAGE"), MainFrame::statChange)
00975     EVT_TEXT(XRCID("IDT_CHARACTER_HIT_PERCENT"), MainFrame::statChange)
00976     
00977     EVT_CHOICE(XRCID("IDC_CHARACTER_WEAPON1"), MainFrame::weaponChange)
00978     EVT_CHOICE(XRCID("IDC_CHARACTER_WEAPON2"), MainFrame::weaponChange)
00979     EVT_CHOICE(XRCID("IDC_CHARACTER_WEAPON3"), MainFrame::weaponChange)
00980     EVT_CHOICE(XRCID("IDC_CHARACTER_WEAPON4"), MainFrame::weaponChange)
00981     
00982     EVT_CHECKBOX(XRCID("IDC_CHARACTER_WEAPON_EQUIPPED1"),
00983         MainFrame::weaponEquippedChange)
00984     EVT_CHECKBOX(XRCID("IDC_CHARACTER_WEAPON_EQUIPPED2"),
00985         MainFrame::weaponEquippedChange)
00986     EVT_CHECKBOX(XRCID("IDC_CHARACTER_WEAPON_EQUIPPED3"),
00987         MainFrame::weaponEquippedChange)
00988     EVT_CHECKBOX(XRCID("IDC_CHARACTER_WEAPON_EQUIPPED4"),
00989         MainFrame::weaponEquippedChange)
00990     
00991     EVT_CHOICE(XRCID("IDC_CHARACTER_ARMOR1"), MainFrame::armorChange)
00992     EVT_CHOICE(XRCID("IDC_CHARACTER_ARMOR2"), MainFrame::armorChange)
00993     EVT_CHOICE(XRCID("IDC_CHARACTER_ARMOR3"), MainFrame::armorChange)
00994     EVT_CHOICE(XRCID("IDC_CHARACTER_ARMOR4"), MainFrame::armorChange)
00995     
00996     EVT_CHECKBOX(XRCID("IDC_CHARACTER_ARMOR_EQUIPPED1"),
00997         MainFrame::armorEquippedChange)
00998     EVT_CHECKBOX(XRCID("IDC_CHARACTER_ARMOR_EQUIPPED2"),
00999         MainFrame::armorEquippedChange)
01000     EVT_CHECKBOX(XRCID("IDC_CHARACTER_ARMOR_EQUIPPED3"),
01001         MainFrame::armorEquippedChange)
01002     EVT_CHECKBOX(XRCID("IDC_CHARACTER_ARMOR_EQUIPPED4"),
01003         MainFrame::armorEquippedChange)
01004    
01005     EVT_COMMAND_SCROLL(XRCID("IDS_MAGIC_CURRENT1"),
01006         MainFrame::currentMagicChange)
01007     EVT_COMMAND_SCROLL(XRCID("IDS_MAGIC_CURRENT2"),
01008         MainFrame::currentMagicChange)
01009     EVT_COMMAND_SCROLL(XRCID("IDS_MAGIC_CURRENT3"),
01010         MainFrame::currentMagicChange)
01011     EVT_COMMAND_SCROLL(XRCID("IDS_MAGIC_CURRENT4"),
01012         MainFrame::currentMagicChange)
01013     EVT_COMMAND_SCROLL(XRCID("IDS_MAGIC_CURRENT5"),
01014         MainFrame::currentMagicChange)
01015     EVT_COMMAND_SCROLL(XRCID("IDS_MAGIC_CURRENT6"),
01016         MainFrame::currentMagicChange)
01017     EVT_COMMAND_SCROLL(XRCID("IDS_MAGIC_CURRENT7"),
01018         MainFrame::currentMagicChange)
01019     EVT_COMMAND_SCROLL(XRCID("IDS_MAGIC_CURRENT8"),
01020         MainFrame::currentMagicChange)
01021     
01022     EVT_COMMAND_SCROLL(XRCID("IDS_MAGIC_MAX1"), MainFrame::maxMagicChange)
01023     EVT_COMMAND_SCROLL(XRCID("IDS_MAGIC_MAX2"), MainFrame::maxMagicChange)
01024     EVT_COMMAND_SCROLL(XRCID("IDS_MAGIC_MAX3"), MainFrame::maxMagicChange)
01025     EVT_COMMAND_SCROLL(XRCID("IDS_MAGIC_MAX4"), MainFrame::maxMagicChange)
01026     EVT_COMMAND_SCROLL(XRCID("IDS_MAGIC_MAX5"), MainFrame::maxMagicChange)
01027     EVT_COMMAND_SCROLL(XRCID("IDS_MAGIC_MAX6"), MainFrame::maxMagicChange)
01028     EVT_COMMAND_SCROLL(XRCID("IDS_MAGIC_MAX7"), MainFrame::maxMagicChange)
01029     EVT_COMMAND_SCROLL(XRCID("IDS_MAGIC_MAX8"), MainFrame::maxMagicChange)
01030     
01031     EVT_CHOICE(XRCID("IDC_MAGIC_KNOWN11"), MainFrame::knownMagicChange)
01032     EVT_CHOICE(XRCID("IDC_MAGIC_KNOWN12"), MainFrame::knownMagicChange)
01033     EVT_CHOICE(XRCID("IDC_MAGIC_KNOWN13"), MainFrame::knownMagicChange)
01034     EVT_CHOICE(XRCID("IDC_MAGIC_KNOWN21"), MainFrame::knownMagicChange)
01035     EVT_CHOICE(XRCID("IDC_MAGIC_KNOWN22"), MainFrame::knownMagicChange)
01036     EVT_CHOICE(XRCID("IDC_MAGIC_KNOWN23"), MainFrame::knownMagicChange)
01037     EVT_CHOICE(XRCID("IDC_MAGIC_KNOWN31"), MainFrame::knownMagicChange)
01038     EVT_CHOICE(XRCID("IDC_MAGIC_KNOWN32"), MainFrame::knownMagicChange)
01039     EVT_CHOICE(XRCID("IDC_MAGIC_KNOWN33"), MainFrame::knownMagicChange)
01040     EVT_CHOICE(XRCID("IDC_MAGIC_KNOWN41"), MainFrame::knownMagicChange)
01041     EVT_CHOICE(XRCID("IDC_MAGIC_KNOWN42"), MainFrame::knownMagicChange)
01042     EVT_CHOICE(XRCID("IDC_MAGIC_KNOWN43"), MainFrame::knownMagicChange)
01043     EVT_CHOICE(XRCID("IDC_MAGIC_KNOWN51"), MainFrame::knownMagicChange)
01044     EVT_CHOICE(XRCID("IDC_MAGIC_KNOWN52"), MainFrame::knownMagicChange)
01045     EVT_CHOICE(XRCID("IDC_MAGIC_KNOWN53"), MainFrame::knownMagicChange)
01046     EVT_CHOICE(XRCID("IDC_MAGIC_KNOWN61"), MainFrame::knownMagicChange)
01047     EVT_CHOICE(XRCID("IDC_MAGIC_KNOWN62"), MainFrame::knownMagicChange)
01048     EVT_CHOICE(XRCID("IDC_MAGIC_KNOWN63"), MainFrame::knownMagicChange)
01049     EVT_CHOICE(XRCID("IDC_MAGIC_KNOWN71"), MainFrame::knownMagicChange)
01050     EVT_CHOICE(XRCID("IDC_MAGIC_KNOWN72"), MainFrame::knownMagicChange)
01051     EVT_CHOICE(XRCID("IDC_MAGIC_KNOWN73"), MainFrame::knownMagicChange)
01052     EVT_CHOICE(XRCID("IDC_MAGIC_KNOWN81"), MainFrame::knownMagicChange)
01053     EVT_CHOICE(XRCID("IDC_MAGIC_KNOWN82"), MainFrame::knownMagicChange)
01054     EVT_CHOICE(XRCID("IDC_MAGIC_KNOWN83"), MainFrame::knownMagicChange)
01055 END_EVENT_TABLE()
01056 

Generated on Sun Feb 25 07:02:51 2007 for ffse by  doxygen 1.5.1-p1