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

source/view/MainFrame.cc

Go to the documentation of this file.
00001 /*
00002  * Copyright (C) 2004 emuWorks
00003  * http://games.technoplaza.net/
00004  *
00005  * This program is free software; you can redistribute it and/or
00006  * modify it under the terms of the GNU General Public License
00007  * as published by the Free Software Foundation; either version 2
00008  * of the License, or (at your option) any later version.
00009  *
00010  * This program is distributed in the hope that it will be useful,
00011  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013  * GNU General Public License for more details.
00014  *
00015  * You should have received a copy of the GNU General Public License
00016  * along with this program; if not, write to the Free Software
00017  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
00018  */
00019 
00020 // $Id: MainFrame.cc,v 1.12 2004/12/08 06:39:53 technoplaza Exp $
00021 
00022 #ifdef HAVE_CONFIG_H
00023     #include <config.h>
00024 #endif
00025 
00026 #include <wx/wxprec.h>
00027 
00028 #ifndef WX_PRECOMP
00029     #include <wx/wx.h>
00030 #endif
00031 
00032 #include <fstream>
00033 #include <cstring>
00034 
00035 #include "MainFrame.hh"
00036 #include "../ffse.hh"
00037 
00038 using namespace ffse;
00039 
00040 const char *MainFrame::ICON[] = {
00041     "16 16 4 1",
00042     "   c None",
00043     "!  c #24188C",
00044     "#  c #FCFCFC",
00045     "$  c #5C94FC",
00046     "!!!!!!!!!#!!!!!!",
00047     "!!!!!!$$$#!!!!!!",
00048     "!!!!$$#$###$#!#!",
00049     "!!!$$$$$$#$$$!!!",
00050     "!!$$$###$#$$$$!!",
00051     "!!$$###$$#$$$$!!",
00052     "!$$###$$$#$$$$$!",
00053     "!$$##$$$$$$$$$$!",
00054     "!$$#$$$$$$$$$$$!",
00055     "!$$$$$$$$$$$$$$!",
00056     "!!$$$$$$$$$$$$!!",
00057     "!!$$$$$$$$$$$$!!",
00058     "!#!$$$$$$$$$$!#!",
00059     "#!#!$$$$$$$$!#!#",
00060     "!###!!$$$$!!###!",
00061     "!!!!##!!!!##!!!!"
00062 };
00063 
00064 IMPLEMENT_DYNAMIC_CLASS(MainFrame, wxFrame)
00065 
00066 BEGIN_EVENT_TABLE(MainFrame, wxFrame)
00067     EVT_CLOSE(MainFrame::windowClosing)
00068 
00069     EVT_MENU(XRCID("IDM_FILE_OPEN"), MainFrame::fileOpen)
00070     EVT_MENU(XRCID("IDM_FILE_CLOSE"), MainFrame::fileClose)
00071     EVT_MENU(XRCID("IDM_FILE_SAVE"), MainFrame::fileSave)
00072     EVT_MENU(XRCID("IDM_FILE_SAVE_AS"), MainFrame::fileSaveAs)
00073     EVT_MENU(XRCID("IDM_FILE_EXIT"), MainFrame::fileExit)
00074     
00075     EVT_MENU(XRCID("IDM_MEMBER_ONE"), MainFrame::memberChange)
00076     EVT_MENU(XRCID("IDM_MEMBER_TWO"), MainFrame::memberChange)
00077     EVT_MENU(XRCID("IDM_MEMBER_THREE"), MainFrame::memberChange)
00078     EVT_MENU(XRCID("IDM_MEMBER_FOUR"), MainFrame::memberChange)
00079     
00080     EVT_MENU(XRCID("IDM_HELP_ABOUT"), MainFrame::helpAbout)
00081     
00082     EVT_TEXT(XRCID("ID_GENERAL_GOLD"), MainFrame::goldChange)
00083     
00084     EVT_COMMAND_SCROLL(XRCID("ID_GENERAL_HEAL"), MainFrame::itemQuantityChange)
00085     EVT_COMMAND_SCROLL(XRCID("ID_GENERAL_PURE"), MainFrame::itemQuantityChange)
00086     EVT_COMMAND_SCROLL(XRCID("ID_GENERAL_SOFT"), MainFrame::itemQuantityChange)
00087     EVT_COMMAND_SCROLL(XRCID("ID_GENERAL_TENT"), MainFrame::itemQuantityChange)
00088     EVT_COMMAND_SCROLL(XRCID("ID_GENERAL_CABIN"), MainFrame::itemQuantityChange)
00089     EVT_COMMAND_SCROLL(XRCID("ID_GENERAL_HOUSE"), MainFrame::itemQuantityChange)
00090     
00091     EVT_CHECKBOX(XRCID("ID_GENERAL_LUTE"), MainFrame::itemHaveChange)
00092     EVT_CHECKBOX(XRCID("ID_GENERAL_CROWN"), MainFrame::itemHaveChange)
00093     EVT_CHECKBOX(XRCID("ID_GENERAL_CRYSTAL"), MainFrame::itemHaveChange)
00094     EVT_CHECKBOX(XRCID("ID_GENERAL_HERB"), MainFrame::itemHaveChange)
00095     EVT_CHECKBOX(XRCID("ID_GENERAL_KEY"), MainFrame::itemHaveChange)
00096     EVT_CHECKBOX(XRCID("ID_GENERAL_TNT"), MainFrame::itemHaveChange)
00097     EVT_CHECKBOX(XRCID("ID_GENERAL_ADAMENT"), MainFrame::itemHaveChange)
00098     EVT_CHECKBOX(XRCID("ID_GENERAL_SLAB"), MainFrame::itemHaveChange)
00099     EVT_CHECKBOX(XRCID("ID_GENERAL_RUBY"), MainFrame::itemHaveChange)
00100     EVT_CHECKBOX(XRCID("ID_GENERAL_ROD"), MainFrame::itemHaveChange)
00101     EVT_CHECKBOX(XRCID("ID_GENERAL_FLOATER"), MainFrame::itemHaveChange)
00102     EVT_CHECKBOX(XRCID("ID_GENERAL_CHIME"), MainFrame::itemHaveChange)
00103     EVT_CHECKBOX(XRCID("ID_GENERAL_TAIL"), MainFrame::itemHaveChange)
00104     EVT_CHECKBOX(XRCID("ID_GENERAL_CUBE"), MainFrame::itemHaveChange)
00105     EVT_CHECKBOX(XRCID("ID_GENERAL_BOTTLE"), MainFrame::itemHaveChange)
00106     EVT_CHECKBOX(XRCID("ID_GENERAL_OXYALE"), MainFrame::itemHaveChange)
00107     EVT_CHECKBOX(XRCID("ID_GENERAL_CANOE"), MainFrame::itemHaveChange)
00108     EVT_CHECKBOX(XRCID("ID_GENERAL_FIRE_ORB"), MainFrame::itemHaveChange)
00109     EVT_CHECKBOX(XRCID("ID_GENERAL_WATER_ORB"), MainFrame::itemHaveChange)
00110     EVT_CHECKBOX(XRCID("ID_GENERAL_WIND_ORB"), MainFrame::itemHaveChange)
00111     EVT_CHECKBOX(XRCID("ID_GENERAL_EARTH_ORB"), MainFrame::itemHaveChange)
00112     
00113     EVT_TEXT(XRCID("ID_CHARACTER_NAME"), MainFrame::nameChange)
00114     
00115     EVT_CHOICE(XRCID("ID_CHARACTER_CLASS"), MainFrame::conditionChange)
00116     EVT_CHOICE(XRCID("ID_CHARACTER_CONDITION"), MainFrame::conditionChange)
00117     
00118     EVT_TEXT(XRCID("ID_CHARACTER_CURRENT_HP"), MainFrame::statChange)
00119     EVT_TEXT(XRCID("ID_CHARACTER_MAX_HP"), MainFrame::statChange)
00120     EVT_TEXT(XRCID("ID_CHARACTER_EXPERIENCE"), MainFrame::statChange)
00121     EVT_TEXT(XRCID("ID_CHARACTER_STRENGTH"), MainFrame::statChange)
00122     EVT_TEXT(XRCID("ID_CHARACTER_AGILITY"), MainFrame::statChange)
00123     EVT_TEXT(XRCID("ID_CHARACTER_INTELLIGENCE"), MainFrame::statChange)
00124     EVT_TEXT(XRCID("ID_CHARACTER_VITALITY"), MainFrame::statChange)
00125     EVT_TEXT(XRCID("ID_CHARACTER_LUCK"), MainFrame::statChange)
00126     EVT_TEXT(XRCID("ID_CHARACTER_DAMAGE"), MainFrame::statChange)
00127     EVT_TEXT(XRCID("ID_CHARACTER_HIT_PERCENT"), MainFrame::statChange)
00128     
00129     EVT_CHOICE(XRCID("ID_CHARACTER_WEAPON1"), MainFrame::weaponChange)
00130     EVT_CHOICE(XRCID("ID_CHARACTER_WEAPON2"), MainFrame::weaponChange)
00131     EVT_CHOICE(XRCID("ID_CHARACTER_WEAPON3"), MainFrame::weaponChange)
00132     EVT_CHOICE(XRCID("ID_CHARACTER_WEAPON4"), MainFrame::weaponChange)
00133     
00134     EVT_CHECKBOX(XRCID("ID_CHARACTER_WEAPON_EQUIPPED1"), MainFrame::weaponEquippedChange)
00135     EVT_CHECKBOX(XRCID("ID_CHARACTER_WEAPON_EQUIPPED2"), MainFrame::weaponEquippedChange)
00136     EVT_CHECKBOX(XRCID("ID_CHARACTER_WEAPON_EQUIPPED3"), MainFrame::weaponEquippedChange)
00137     EVT_CHECKBOX(XRCID("ID_CHARACTER_WEAPON_EQUIPPED4"), MainFrame::weaponEquippedChange)
00138     
00139     EVT_CHOICE(XRCID("ID_CHARACTER_ARMOR1"), MainFrame::armorChange)
00140     EVT_CHOICE(XRCID("ID_CHARACTER_ARMOR2"), MainFrame::armorChange)
00141     EVT_CHOICE(XRCID("ID_CHARACTER_ARMOR3"), MainFrame::armorChange)
00142     EVT_CHOICE(XRCID("ID_CHARACTER_ARMOR4"), MainFrame::armorChange)
00143     
00144     EVT_CHECKBOX(XRCID("ID_CHARACTER_ARMOR_EQUIPPED1"), MainFrame::armorEquippedChange)
00145     EVT_CHECKBOX(XRCID("ID_CHARACTER_ARMOR_EQUIPPED2"), MainFrame::armorEquippedChange)
00146     EVT_CHECKBOX(XRCID("ID_CHARACTER_ARMOR_EQUIPPED3"), MainFrame::armorEquippedChange)
00147     EVT_CHECKBOX(XRCID("ID_CHARACTER_ARMOR_EQUIPPED4"), MainFrame::armorEquippedChange)
00148    
00149     EVT_COMMAND_SCROLL(XRCID("ID_MAGIC_CURRENT1"), MainFrame::currentMagicChange)
00150     EVT_COMMAND_SCROLL(XRCID("ID_MAGIC_CURRENT2"), MainFrame::currentMagicChange)
00151     EVT_COMMAND_SCROLL(XRCID("ID_MAGIC_CURRENT3"), MainFrame::currentMagicChange)
00152     EVT_COMMAND_SCROLL(XRCID("ID_MAGIC_CURRENT4"), MainFrame::currentMagicChange)
00153     EVT_COMMAND_SCROLL(XRCID("ID_MAGIC_CURRENT5"), MainFrame::currentMagicChange)
00154     EVT_COMMAND_SCROLL(XRCID("ID_MAGIC_CURRENT6"), MainFrame::currentMagicChange)
00155     EVT_COMMAND_SCROLL(XRCID("ID_MAGIC_CURRENT7"), MainFrame::currentMagicChange)
00156     EVT_COMMAND_SCROLL(XRCID("ID_MAGIC_CURRENT8"), MainFrame::currentMagicChange)
00157     
00158     EVT_COMMAND_SCROLL(XRCID("ID_MAGIC_MAX1"), MainFrame::maxMagicChange)
00159     EVT_COMMAND_SCROLL(XRCID("ID_MAGIC_MAX2"), MainFrame::maxMagicChange)
00160     EVT_COMMAND_SCROLL(XRCID("ID_MAGIC_MAX3"), MainFrame::maxMagicChange)
00161     EVT_COMMAND_SCROLL(XRCID("ID_MAGIC_MAX4"), MainFrame::maxMagicChange)
00162     EVT_COMMAND_SCROLL(XRCID("ID_MAGIC_MAX5"), MainFrame::maxMagicChange)
00163     EVT_COMMAND_SCROLL(XRCID("ID_MAGIC_MAX6"), MainFrame::maxMagicChange)
00164     EVT_COMMAND_SCROLL(XRCID("ID_MAGIC_MAX7"), MainFrame::maxMagicChange)
00165     EVT_COMMAND_SCROLL(XRCID("ID_MAGIC_MAX8"), MainFrame::maxMagicChange)
00166     
00167     EVT_CHOICE(XRCID("ID_MAGIC_KNOWN11"), MainFrame::knownMagicChange)
00168     EVT_CHOICE(XRCID("ID_MAGIC_KNOWN12"), MainFrame::knownMagicChange)
00169     EVT_CHOICE(XRCID("ID_MAGIC_KNOWN13"), MainFrame::knownMagicChange)
00170     EVT_CHOICE(XRCID("ID_MAGIC_KNOWN21"), MainFrame::knownMagicChange)
00171     EVT_CHOICE(XRCID("ID_MAGIC_KNOWN22"), MainFrame::knownMagicChange)
00172     EVT_CHOICE(XRCID("ID_MAGIC_KNOWN23"), MainFrame::knownMagicChange)
00173     EVT_CHOICE(XRCID("ID_MAGIC_KNOWN31"), MainFrame::knownMagicChange)
00174     EVT_CHOICE(XRCID("ID_MAGIC_KNOWN32"), MainFrame::knownMagicChange)
00175     EVT_CHOICE(XRCID("ID_MAGIC_KNOWN33"), MainFrame::knownMagicChange)
00176     EVT_CHOICE(XRCID("ID_MAGIC_KNOWN41"), MainFrame::knownMagicChange)
00177     EVT_CHOICE(XRCID("ID_MAGIC_KNOWN42"), MainFrame::knownMagicChange)
00178     EVT_CHOICE(XRCID("ID_MAGIC_KNOWN43"), MainFrame::knownMagicChange)
00179     EVT_CHOICE(XRCID("ID_MAGIC_KNOWN51"), MainFrame::knownMagicChange)
00180     EVT_CHOICE(XRCID("ID_MAGIC_KNOWN52"), MainFrame::knownMagicChange)
00181     EVT_CHOICE(XRCID("ID_MAGIC_KNOWN53"), MainFrame::knownMagicChange)
00182     EVT_CHOICE(XRCID("ID_MAGIC_KNOWN61"), MainFrame::knownMagicChange)
00183     EVT_CHOICE(XRCID("ID_MAGIC_KNOWN62"), MainFrame::knownMagicChange)
00184     EVT_CHOICE(XRCID("ID_MAGIC_KNOWN63"), MainFrame::knownMagicChange)
00185     EVT_CHOICE(XRCID("ID_MAGIC_KNOWN71"), MainFrame::knownMagicChange)
00186     EVT_CHOICE(XRCID("ID_MAGIC_KNOWN72"), MainFrame::knownMagicChange)
00187     EVT_CHOICE(XRCID("ID_MAGIC_KNOWN73"), MainFrame::knownMagicChange)
00188     EVT_CHOICE(XRCID("ID_MAGIC_KNOWN81"), MainFrame::knownMagicChange)
00189     EVT_CHOICE(XRCID("ID_MAGIC_KNOWN82"), MainFrame::knownMagicChange)
00190     EVT_CHOICE(XRCID("ID_MAGIC_KNOWN83"), MainFrame::knownMagicChange)
00191 END_EVENT_TABLE()
00192 
00193 MainFrame::MainFrame() {
00194     SetParent(NULL);
00195     CreateControls();
00196     Centre();
00197     
00198     SetDropTarget(new FileDropTarget(this));
00199 }
00200 
00201 void MainFrame::CreateControls() {
00202     wxXmlResource::Get()->LoadFrame(this, GetParent(), wxT("ID_FRAME"));
00203     SetIcon(ICON);
00204     
00205     notebook = XRCCTRL(*this, "ID_NOTEBOOK", wxNotebook);
00206     notebook->Show(false);
00207     
00208     wxMenuBar *menubar = GetMenuBar();
00209     
00210     memberItems[0] = menubar->FindItem(XRCID("IDM_MEMBER_ONE"));
00211     memberItems[0]->Enable(false);
00212     
00213     memberItems[1] = menubar->FindItem(XRCID("IDM_MEMBER_TWO"));
00214     memberItems[1]->Enable(false);
00215     
00216     memberItems[2] = menubar->FindItem(XRCID("IDM_MEMBER_THREE"));
00217     memberItems[2]->Enable(false);
00218     
00219     memberItems[3] = menubar->FindItem(XRCID("IDM_MEMBER_FOUR"));
00220     memberItems[3]->Enable(false);
00221     
00222     fileCloseItem = menubar->FindItem(XRCID("IDM_FILE_CLOSE"));
00223     fileSaveItem = menubar->FindItem(XRCID("IDM_FILE_SAVE"));
00224     fileSaveAsItem = menubar->FindItem(XRCID("IDM_FILE_SAVE_AS"));
00225     
00226     wxTextValidator numberValidator(wxFILTER_NUMERIC);
00227     goldText = XRCCTRL(*this, "ID_GENERAL_GOLD", wxTextCtrl);
00228     goldText->SetValidator(numberValidator);
00229     goldText->SetMaxLength(6);
00230     
00231     healSlider = XRCCTRL(*this, "ID_GENERAL_HEAL", wxSlider);
00232     pureSlider = XRCCTRL(*this, "ID_GENERAL_PURE", wxSlider);
00233     softSlider = XRCCTRL(*this, "ID_GENERAL_SOFT", wxSlider);
00234     tentSlider = XRCCTRL(*this, "ID_GENERAL_TENT", wxSlider);
00235     cabinSlider = XRCCTRL(*this, "ID_GENERAL_CABIN", wxSlider);
00236     houseSlider = XRCCTRL(*this, "ID_GENERAL_HOUSE", wxSlider);
00237     
00238     luteCheck = XRCCTRL(*this, "ID_GENERAL_LUTE", wxCheckBox);
00239     crownCheck = XRCCTRL(*this, "ID_GENERAL_CROWN", wxCheckBox);
00240     crystalCheck = XRCCTRL(*this, "ID_GENERAL_CRYSTAL", wxCheckBox);
00241     herbCheck = XRCCTRL(*this, "ID_GENERAL_HERB", wxCheckBox);
00242     keyCheck = XRCCTRL(*this, "ID_GENERAL_KEY", wxCheckBox);
00243     tntCheck = XRCCTRL(*this, "ID_GENERAL_TNT", wxCheckBox);
00244     adamentCheck = XRCCTRL(*this, "ID_GENERAL_ADAMENT", wxCheckBox);
00245     slabCheck = XRCCTRL(*this, "ID_GENERAL_SLAB", wxCheckBox);
00246     rubyCheck = XRCCTRL(*this, "ID_GENERAL_RUBY", wxCheckBox);
00247     rodCheck = XRCCTRL(*this, "ID_GENERAL_ROD", wxCheckBox);
00248     floaterCheck = XRCCTRL(*this, "ID_GENERAL_FLOATER", wxCheckBox);
00249     chimeCheck = XRCCTRL(*this, "ID_GENERAL_CHIME", wxCheckBox);
00250     tailCheck = XRCCTRL(*this, "ID_GENERAL_TAIL", wxCheckBox);
00251     cubeCheck = XRCCTRL(*this, "ID_GENERAL_CUBE", wxCheckBox);
00252     bottleCheck = XRCCTRL(*this, "ID_GENERAL_BOTTLE", wxCheckBox);
00253     oxyaleCheck = XRCCTRL(*this, "ID_GENERAL_OXYALE", wxCheckBox);
00254     canoeCheck = XRCCTRL(*this, "ID_GENERAL_CANOE", wxCheckBox);
00255     fireOrbCheck = XRCCTRL(*this, "ID_GENERAL_FIRE_ORB", wxCheckBox);
00256     waterOrbCheck = XRCCTRL(*this, "ID_GENERAL_WATER_ORB", wxCheckBox);
00257     windOrbCheck = XRCCTRL(*this, "ID_GENERAL_WIND_ORB", wxCheckBox);
00258     earthOrbCheck = XRCCTRL(*this, "ID_GENERAL_EARTH_ORB", wxCheckBox);
00259     
00260     wxStringList letters("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K",
00261                          "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",
00262                          "W", "X", "Y", "Z", "a", "b", "c", "d", "e", "f", "g",
00263                          "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r",
00264                          "s", "t", "u", "v", "w", "x", "y", "z", "0", "1", "2",
00265                          "3", "4", "5", "6", "7", "8", "9", "'", ",", ".", "-",
00266                          ":", "!", "?", NULL);
00267 
00268     wxTextValidator nameValidator(wxFILTER_INCLUDE_CHAR_LIST);
00269     nameValidator.SetIncludeList(letters);
00270     
00271     nameText = XRCCTRL(*this, "ID_CHARACTER_NAME", wxTextCtrl);
00272     nameText->SetValidator(nameValidator);
00273     nameText->SetMaxLength(4);
00274     
00275     classChoice = XRCCTRL(*this, "ID_CHARACTER_CLASS", wxChoice);
00276     conditionChoice = XRCCTRL(*this, "ID_CHARACTER_CONDITION", wxChoice);
00277     
00278     currentHPText = XRCCTRL(*this, "ID_CHARACTER_CURRENT_HP", wxTextCtrl);
00279     currentHPText->SetValidator(numberValidator);
00280     currentHPText->SetMaxLength(3);
00281     
00282     maxHPText = XRCCTRL(*this, "ID_CHARACTER_MAX_HP", wxTextCtrl);
00283     maxHPText->SetValidator(numberValidator);
00284     maxHPText->SetMaxLength(3);
00285     
00286     experienceText = XRCCTRL(*this, "ID_CHARACTER_EXPERIENCE", wxTextCtrl);
00287     experienceText->SetValidator(numberValidator);
00288     experienceText->SetMaxLength(6);
00289     
00290     strengthText = XRCCTRL(*this, "ID_CHARACTER_STRENGTH", wxTextCtrl);
00291     strengthText->SetValidator(numberValidator);
00292     strengthText->SetMaxLength(2);
00293     
00294     agilityText = XRCCTRL(*this, "ID_CHARACTER_AGILITY", wxTextCtrl);
00295     agilityText->SetValidator(numberValidator);
00296     agilityText->SetMaxLength(2);
00297     
00298     intelligenceText = XRCCTRL(*this, "ID_CHARACTER_INTELLIGENCE", wxTextCtrl);
00299     intelligenceText->SetValidator(numberValidator);
00300     intelligenceText->SetMaxLength(2);
00301     
00302     vitalityText = XRCCTRL(*this, "ID_CHARACTER_VITALITY", wxTextCtrl);
00303     vitalityText->SetValidator(numberValidator);
00304     vitalityText->SetMaxLength(2);
00305     
00306     luckText = XRCCTRL(*this, "ID_CHARACTER_LUCK", wxTextCtrl);
00307     luckText->SetValidator(numberValidator);
00308     luckText->SetMaxLength(2);
00309     
00310     damageText = XRCCTRL(*this, "ID_CHARACTER_DAMAGE", wxTextCtrl);
00311     damageText->SetValidator(numberValidator);
00312     damageText->SetMaxLength(3);
00313     
00314     hitPercentText = XRCCTRL(*this, "ID_CHARACTER_HIT_PERCENT", wxTextCtrl);
00315     hitPercentText->SetValidator(numberValidator);
00316     hitPercentText->SetMaxLength(3);
00317     
00318     weaponChoice[0] = XRCCTRL(*this, "ID_CHARACTER_WEAPON1", wxChoice);
00319     weaponEquippedCheck[0] = XRCCTRL(*this, "ID_CHARACTER_WEAPON_EQUIPPED1", wxCheckBox);
00320     weaponChoice[1] = XRCCTRL(*this, "ID_CHARACTER_WEAPON2", wxChoice);
00321     weaponEquippedCheck[1] = XRCCTRL(*this, "ID_CHARACTER_WEAPON_EQUIPPED2", wxCheckBox);
00322     weaponChoice[2] = XRCCTRL(*this, "ID_CHARACTER_WEAPON3", wxChoice);
00323     weaponEquippedCheck[2] = XRCCTRL(*this, "ID_CHARACTER_WEAPON_EQUIPPED3", wxCheckBox);
00324     weaponChoice[3] = XRCCTRL(*this, "ID_CHARACTER_WEAPON4", wxChoice);
00325     weaponEquippedCheck[3] = XRCCTRL(*this, "ID_CHARACTER_WEAPON_EQUIPPED4", wxCheckBox);
00326     
00327     armorChoice[0] = XRCCTRL(*this, "ID_CHARACTER_ARMOR1", wxChoice);
00328     armorEquippedCheck[0] = XRCCTRL(*this, "ID_CHARACTER_ARMOR_EQUIPPED1", wxCheckBox);
00329     armorChoice[1] = XRCCTRL(*this, "ID_CHARACTER_ARMOR2", wxChoice);
00330     armorEquippedCheck[1] = XRCCTRL(*this, "ID_CHARACTER_ARMOR_EQUIPPED2", wxCheckBox);
00331     armorChoice[2] = XRCCTRL(*this, "ID_CHARACTER_ARMOR3", wxChoice);
00332     armorEquippedCheck[2] = XRCCTRL(*this, "ID_CHARACTER_ARMOR_EQUIPPED3", wxCheckBox);
00333     armorChoice[3] = XRCCTRL(*this, "ID_CHARACTER_ARMOR4", wxChoice);
00334     armorEquippedCheck[3] = XRCCTRL(*this, "ID_CHARACTER_ARMOR_EQUIPPED4", wxCheckBox);
00335     
00336     currentMagicSlider[0] = XRCCTRL(*this, "ID_MAGIC_CURRENT1", wxSlider);
00337     maxMagicSlider[0] = XRCCTRL(*this, "ID_MAGIC_MAX1", wxSlider);
00338     currentMagicSlider[1] = XRCCTRL(*this, "ID_MAGIC_CURRENT2", wxSlider);
00339     maxMagicSlider[1] = XRCCTRL(*this, "ID_MAGIC_MAX2", wxSlider);
00340     currentMagicSlider[2] = XRCCTRL(*this, "ID_MAGIC_CURRENT3", wxSlider);
00341     maxMagicSlider[2] = XRCCTRL(*this, "ID_MAGIC_MAX3", wxSlider);
00342     currentMagicSlider[3] = XRCCTRL(*this, "ID_MAGIC_CURRENT4", wxSlider);
00343     maxMagicSlider[3] = XRCCTRL(*this, "ID_MAGIC_MAX4", wxSlider);
00344     currentMagicSlider[4] = XRCCTRL(*this, "ID_MAGIC_CURRENT5", wxSlider);
00345     maxMagicSlider[4] = XRCCTRL(*this, "ID_MAGIC_MAX5", wxSlider);
00346     currentMagicSlider[5] = XRCCTRL(*this, "ID_MAGIC_CURRENT6", wxSlider);
00347     maxMagicSlider[5] = XRCCTRL(*this, "ID_MAGIC_MAX6", wxSlider);
00348     currentMagicSlider[6] = XRCCTRL(*this, "ID_MAGIC_CURRENT7", wxSlider);
00349     maxMagicSlider[6] = XRCCTRL(*this, "ID_MAGIC_MAX7", wxSlider);
00350     currentMagicSlider[7] = XRCCTRL(*this, "ID_MAGIC_CURRENT8", wxSlider);
00351     maxMagicSlider[7] = XRCCTRL(*this, "ID_MAGIC_MAX8", wxSlider);
00352     
00353     knownMagicChoice[0][0] = XRCCTRL(*this, "ID_MAGIC_KNOWN11", wxChoice);
00354     knownMagicChoice[0][1] = XRCCTRL(*this, "ID_MAGIC_KNOWN12", wxChoice);
00355     knownMagicChoice[0][2] = XRCCTRL(*this, "ID_MAGIC_KNOWN13", wxChoice);
00356     knownMagicChoice[1][0] = XRCCTRL(*this, "ID_MAGIC_KNOWN21", wxChoice);
00357     knownMagicChoice[1][1] = XRCCTRL(*this, "ID_MAGIC_KNOWN22", wxChoice);
00358     knownMagicChoice[1][2] = XRCCTRL(*this, "ID_MAGIC_KNOWN23", wxChoice);
00359     knownMagicChoice[2][0] = XRCCTRL(*this, "ID_MAGIC_KNOWN31", wxChoice);
00360     knownMagicChoice[2][1] = XRCCTRL(*this, "ID_MAGIC_KNOWN32", wxChoice);
00361     knownMagicChoice[2][2] = XRCCTRL(*this, "ID_MAGIC_KNOWN33", wxChoice);
00362     knownMagicChoice[3][0] = XRCCTRL(*this, "ID_MAGIC_KNOWN41", wxChoice);
00363     knownMagicChoice[3][1] = XRCCTRL(*this, "ID_MAGIC_KNOWN42", wxChoice);
00364     knownMagicChoice[3][2] = XRCCTRL(*this, "ID_MAGIC_KNOWN43", wxChoice);
00365     knownMagicChoice[4][0] = XRCCTRL(*this, "ID_MAGIC_KNOWN51", wxChoice);
00366     knownMagicChoice[4][1] = XRCCTRL(*this, "ID_MAGIC_KNOWN52", wxChoice);
00367     knownMagicChoice[4][2] = XRCCTRL(*this, "ID_MAGIC_KNOWN53", wxChoice);
00368     knownMagicChoice[5][0] = XRCCTRL(*this, "ID_MAGIC_KNOWN61", wxChoice);
00369     knownMagicChoice[5][1] = XRCCTRL(*this, "ID_MAGIC_KNOWN62", wxChoice);
00370     knownMagicChoice[5][2] = XRCCTRL(*this, "ID_MAGIC_KNOWN63", wxChoice);
00371     knownMagicChoice[6][0] = XRCCTRL(*this, "ID_MAGIC_KNOWN71", wxChoice);
00372     knownMagicChoice[6][1] = XRCCTRL(*this, "ID_MAGIC_KNOWN72", wxChoice);
00373     knownMagicChoice[6][2] = XRCCTRL(*this, "ID_MAGIC_KNOWN73", wxChoice);
00374     knownMagicChoice[7][0] = XRCCTRL(*this, "ID_MAGIC_KNOWN81", wxChoice);
00375     knownMagicChoice[7][1] = XRCCTRL(*this, "ID_MAGIC_KNOWN82", wxChoice);
00376     knownMagicChoice[7][2] = XRCCTRL(*this, "ID_MAGIC_KNOWN83", wxChoice);
00377     
00378     statusbar = XRCCTRL(*this, "ID_STATUSBAR", wxStatusBar);
00379     
00380     setOpen(false);
00381 }
00382 
00383 void MainFrame::setOpen(bool open) {
00384     fileSaveItem->Enable(open);
00385     fileSaveAsItem->Enable(open);
00386     fileCloseItem->Enable(open);
00387     
00388     for (int i = 0; i < 4; i++) {
00389         memberItems[i]->Enable(open);
00390     }
00391     
00392     this->open = open;
00393 }
00394 
00395 void MainFrame::loadCharacterData(int member) {
00396     this->member = member;
00397     
00398     wxString str = game->getName(member);
00399     nameText->SetValue(str);
00400     
00401     classChoice->SetSelection(game->getClass(member));
00402     conditionChoice->SetSelection(game->getCondition(member));
00403     
00404     str.Printf("%d", game->getCurrentHP(member));
00405     currentHPText->SetValue(str);
00406     
00407     str.Printf("%d", game->getMaxHP(member));
00408     maxHPText->SetValue(str);
00409     
00410     str.Printf("%d", game->getExperience(member));
00411     experienceText->SetValue(str);
00412     
00413     str.Printf("%d", game->getStrength(member));
00414     strengthText->SetValue(str);
00415     
00416     str.Printf("%d", game->getAgility(member));
00417     agilityText->SetValue(str);
00418     
00419     str.Printf("%d", game->getIntelligence(member));
00420     intelligenceText->SetValue(str);
00421     
00422     str.Printf("%d", game->getVitality(member));
00423     vitalityText->SetValue(str);
00424     
00425     str.Printf("%d", game->getLuck(member));
00426     luckText->SetValue(str);
00427     
00428     str.Printf("%d", game->getDamage(member));
00429     damageText->SetValue(str);
00430     
00431     str.Printf("%d", game->getHitPercent(member));
00432     hitPercentText->SetValue(str);
00433     
00434     for (int pos = 0; pos < 4; pos++) {
00435         int weapon = game->getWeapon(member, pos);
00436         int armor = game->getArmor(member, pos);
00437         
00438         weaponChoice[pos]->SetSelection(weapon & 0x7F);
00439         armorChoice[pos]->SetSelection(armor & 0x7F);
00440         
00441         weaponEquippedCheck[pos]->SetValue((weapon & 0x80) ? true : false);
00442         armorEquippedCheck[pos]->SetValue((armor & 0x80) ? true : false);
00443     }
00444     
00445     for (int level = 0; level < 8; level++) {
00446         int current = game->getCurrentMagic(member, level);
00447         int max = game->getMaxMagic(member, level);
00448         
00449         currentMagicSlider[level]->SetValue(current);
00450         maxMagicSlider[level]->SetValue(max);
00451         
00452         for (int slot = 0; slot < 3; slot++) {
00453             int magic = game->getMagic(member, level, slot);
00454             knownMagicChoice[level][slot]->SetSelection(magic);
00455         }
00456     }
00457 }
00458 
00459 void MainFrame::loadGameData() {
00460     wxString str;
00461     str.Printf("%d", game->getGold());
00462     
00463     goldText->SetValue(str);
00464     
00465     healSlider->SetValue(game->getItem(HEALP));
00466     pureSlider->SetValue(game->getItem(PUREP));
00467     softSlider->SetValue(game->getItem(SOFTP));
00468     
00469     tentSlider->SetValue(game->getItem(TENT));
00470     cabinSlider->SetValue(game->getItem(CABIN));
00471     houseSlider->SetValue(game->getItem(HOUSE));
00472     
00473     luteCheck->SetValue((game->getItem(LUTE) == 1) ? true : false);
00474     crownCheck->SetValue((game->getItem(CROWN) == 1) ? true : false);
00475     crystalCheck->SetValue((game->getItem(CRYSTAL) == 1) ? true : false);
00476     herbCheck->SetValue((game->getItem(HERB) == 1) ? true : false);
00477     keyCheck->SetValue((game->getItem(KEY) == 1) ? true : false);
00478     tntCheck->SetValue((game->getItem(TNT) == 1) ? true : false);
00479     adamentCheck->SetValue((game->getItem(ADAMENT) == 1) ? true : false);
00480     slabCheck->SetValue((game->getItem(SLAB) == 1) ? true : false);
00481     rubyCheck->SetValue((game->getItem(RUBY) == 1) ? true : false);
00482     rodCheck->SetValue((game->getItem(ROD) == 1) ? true : false);
00483     floaterCheck->SetValue((game->getItem(FLOATER) == 1) ? true : false);
00484     chimeCheck->SetValue((game->getItem(CHIME) == 1) ? true : false);
00485     tailCheck->SetValue((game->getItem(TAIL) == 1) ? true : false);
00486     cubeCheck->SetValue((game->getItem(CUBE) == 1) ? true : false);
00487     bottleCheck->SetValue((game->getItem(BOTTLE) == 1) ? true : false);
00488     oxyaleCheck->SetValue((game->getItem(OXYALE) == 1) ? true : false);
00489     canoeCheck->SetValue((game->getItem(CANOE) == 1) ? true : false);
00490     fireOrbCheck->SetValue((game->getItem(FIREORB) == 1) ? true : false);
00491     waterOrbCheck->SetValue((game->getItem(WATERORB) == 1) ? true : false);
00492     windOrbCheck->SetValue((game->getItem(WINDORB) == 1) ? true : false);
00493     earthOrbCheck->SetValue((game->getItem(EARTHORB) == 1) ? true : false);
00494     
00495     loadCharacterData();
00496     
00497     notebook->Show(true);
00498 }
00499 
00500 void MainFrame::load(wxString &filename) {
00501     if (!close()) {
00502         return;
00503     }
00504     
00505     char nvram[GAME_SIZE];
00506     sram = new char[SRAM_SIZE];
00507     
00508     std::ifstream in(filename.mb_str(), std::ios::in | std::ios::binary);
00509     
00510     if (!in) {
00511         // unable to open file
00512         wxMessageBox(wxT("Unable to open the selected file."),
00513                      wxT("File I/O Error"), wxOK | wxICON_ERROR);
00514         return;
00515     }
00516     
00517     in.read(sram, SRAM_SIZE);
00518     
00519     if (in.rdstate() & std::ios::failbit) {
00520         // unable to read the requested data
00521         wxMessageBox(wxT("Unable to read the selected file."),
00522                      wxT("File I/O Error"), wxOK | wxICON_ERROR);
00523         return;
00524     }
00525     
00526     in.close();
00527     
00528     memcpy(nvram, (sram + GAME_OFFSET), GAME_SIZE);
00529     game = new SaveSlot(nvram);
00530     
00531     if (game->isValid()) {
00532         loadGameData();
00533         setOpen(true);
00534         
00535         wxString bakfile = filename + ".bak";
00536         std::ofstream out(bakfile.mb_str(), std::ios::out | std::ios::binary);
00537         
00538         if (out) {
00539             out.write(sram, SRAM_SIZE);
00540             out.close();
00541         }
00542     } else {
00543         wxMessageBox(wxT("No Final Fantasy game data is in the file you loaded."),
00544                      wxT("Error: No Data Found"), wxOK | wxICON_ERROR);
00545                      
00546         delete sram;
00547         delete game;
00548     }
00549 }
00550 
00551 void MainFrame::fileOpen(wxCommandEvent &event) {
00552     static wxFileDialog *dlg = new wxFileDialog(this, 
00553         wxT("Choose a .SAV File"), "", "", 
00554         wxT("NES SRAM File (*.sav)|*.sav"), (wxOPEN | wxCHANGE_DIR));
00555         
00556     int value = dlg->ShowModal();
00557     
00558     if (value == wxID_OK) {
00559         sramFile = dlg->GetPath();
00560         load(sramFile);
00561     }
00562 }
00563 
00564 bool MainFrame::close() {
00565     if (!isOpen()) {
00566         return true;
00567     }
00568     
00569     if (game->isModified()) {
00570         int choice = wxMessageBox(wxT("Save Game File Before Closing?"),
00571                                   wxT("Warning: Unsaved Changes"),
00572                                   wxYES_NO | wxCANCEL | wxICON_QUESTION,
00573                                   this);
00574         
00575         if (choice == wxYES) {
00576             if (!save(sramFile)) {
00577                 return false;
00578             }
00579         } else if (choice == wxCANCEL) {
00580             return false;
00581         }
00582     }
00583     
00584     delete game;
00585     delete sram;
00586     
00587     memberItems[0]->Check(true);
00588     notebook->Show(false);
00589     
00590     setOpen(false);
00591     
00592     return true;
00593 }
00594 
00595 void MainFrame::fileClose(wxCommandEvent &event) {
00596     close();
00597 }
00598 
00599 bool MainFrame::isValidEquipment() {
00600     bool weapon;
00601     bool armor;
00602     bool shield;
00603     bool helmet;
00604     bool gauntlet;
00605     
00606     for (int member = 0; member < 4; member++) {
00607         weapon = false;
00608         armor = false;
00609         shield = false;
00610         helmet = false;
00611         gauntlet = false;
00612         
00613         for (int slot = 0; slot < 4; slot++) {
00614             int item = game->getWeapon(member, slot);
00615         
00616             if ((item >= 0x81) && (item <= 0xA8)) {
00617                 if (weapon) {
00618                     return false;
00619                 }
00620             
00621                 weapon = true;
00622             }
00623         
00624             item = game->getArmor(member, slot);
00625         
00626             if ((item >= 0x81) && (item <= 0x90)) {
00627                 if (armor) {
00628                     return false;
00629                 }
00630             
00631                 armor = true;
00632             } else if ((item >= 0x91) && (item <= 0x99)) {
00633                 if (shield) {
00634                     return false;
00635                 }
00636             
00637                 shield = true;
00638             } else if ((item >= 0x9A) && (item <= 0xA0)) {
00639                 if (helmet) {
00640                     return false;
00641                 }
00642             
00643                 helmet = true;
00644             } else if ((item >= 0xA1) && (item <= 0xA8)) {
00645                 if (gauntlet) {
00646                     return false;
00647                 }
00648             
00649                 gauntlet = true;
00650             }
00651         }
00652     }
00653     
00654     return true;
00655 }
00656 
00657 bool MainFrame::save(wxString &filename) {
00658     if (!isValidEquipment()) {
00659         int choice = wxMessageBox(wxT("At least one party member has duplicate equipment.\nContinue Saving?"),
00660                      wxT("Error: Invalid Equipment"), 
00661                      wxYES | wxNO | wxICON_QUESTION);
00662                      
00663         if (choice != wxYES) {
00664             return false;
00665         }
00666     }
00667     
00668     memcpy((sram + GAME_OFFSET), game->nvram, GAME_SIZE);
00669     
00670     std::ofstream out(filename.mb_str(), std::ios::binary | std::ios::out);
00671     
00672     if (!out) {
00673         wxMessageBox(wxT("Unable to open the SRAM file."),
00674                      wxT("File Open Error"), wxOK | wxICON_ERROR);
00675         return false;
00676     }
00677     
00678     out.write(sram, SRAM_SIZE);
00679     
00680     if (out.rdstate() && std::ios::failbit) {
00681         wxMessageBox(wxT("Unable to write to the SRAM file."),
00682                      wxT("File I/O Error"), wxOK | wxICON_ERROR);
00683         out.close();
00684         return false;
00685     }
00686     
00687     out.close();
00688     
00689     game->setModified(false);
00690     
00691     return true;
00692 }
00693 
00694 void MainFrame::fileSave(wxCommandEvent &event) {
00695     save(sramFile);
00696 }
00697 
00698 void MainFrame::fileSaveAs(wxCommandEvent &event) {
00699     static wxFileDialog *dlg = new wxFileDialog(this,
00700         wxT("Choose a .SAV File"), "", "",
00701         wxT("NES SRAM File (*.sav)|*.sav"), (wxSAVE | wxCHANGE_DIR));
00702 
00703     int value = dlg->ShowModal();
00704 
00705     if (value == wxID_OK) {
00706         sramFile = dlg->GetPath();
00707         save(sramFile);
00708     }
00709 }
00710 
00711 void MainFrame::fileExit(wxCommandEvent &event) {
00712     if (close()) {
00713         Close(true);
00714     }
00715 }
00716 
00717 void MainFrame::windowClosing(wxCloseEvent &event) {
00718     if (event.CanVeto()) {
00719         if (!close()) {
00720             event.Veto();
00721             return;
00722         }
00723     }
00724     
00725     Destroy();
00726 }
00727 
00728 void MainFrame::memberChange(wxCommandEvent &event) {
00729     setOpen(false);
00730     
00731     int id = event.GetId();
00732     
00733     if (id == XRCID("IDM_MEMBER_ONE")) {
00734         loadCharacterData(0);
00735     } else if (id == XRCID("IDM_MEMBER_TWO")) {
00736         loadCharacterData(1);
00737     } else if (id == XRCID("IDM_MEMBER_THREE")) {
00738         loadCharacterData(2);
00739     } else if (id == XRCID("IDM_MEMBER_FOUR")) {
00740         loadCharacterData(3);
00741     }
00742     
00743     setOpen(true);
00744 }
00745 
00746 void MainFrame::helpAbout(wxCommandEvent &event) {
00747     wxString msg = wxString(*ffseApp::APP_NAME + wxT(' ') + 
00748                             *ffseApp::APP_VERSION + wxT('\n') +
00749                             *ffseApp::APP_COPYRIGHT);
00750     wxString title = wxString(wxT("About ") + *ffseApp::APP_NAME + wxT("..."));
00751     
00752     wxMessageBox(msg, title, wxOK | wxICON_INFORMATION, this);
00753 }
00754 
00755 void MainFrame::goldChange(wxCommandEvent &event) {
00756     if (!isOpen()) {
00757         return;
00758     }
00759     
00760     game->setGold(atoi(goldText->GetValue()));
00761 }
00762 
00763 void MainFrame::itemQuantityChange(wxScrollEvent &event) {
00764     if (!isOpen()) {
00765         return;
00766     }
00767     
00768     wxSlider *ctrl = (wxSlider *)event.GetEventObject();
00769     int item = HOUSE;
00770     
00771     if (ctrl == healSlider) {
00772         item = HEALP;
00773     } else if (ctrl == pureSlider) {
00774         item = PUREP;
00775     } else if (ctrl == softSlider) {
00776         item = SOFTP;
00777     } else if (ctrl == tentSlider) {
00778         item = TENT;
00779     } else if (ctrl == cabinSlider) {
00780         item = CABIN;
00781     }
00782     
00783     game->setItem(item, ctrl->GetValue());
00784 }
00785 
00786 void MainFrame::itemHaveChange(wxCommandEvent &event) {
00787     if (!isOpen()) {
00788         return;
00789     }
00790     
00791     wxCheckBox *ctrl = (wxCheckBox *)event.GetEventObject();
00792     int item = LUTE;
00793     
00794     if (ctrl == crownCheck) {
00795         item = CROWN;
00796     } else if (ctrl == crystalCheck) {
00797         item = CRYSTAL;
00798     } else if (ctrl == herbCheck) {
00799         item = HERB;
00800     } else if (ctrl == keyCheck) {
00801         item = KEY;
00802     } else if (ctrl == tntCheck) {
00803         item = TNT;
00804     } else if (ctrl == adamentCheck) {
00805         item = ADAMENT;
00806     } else if (ctrl == slabCheck) {
00807         item = SLAB;
00808     } else if (ctrl == rubyCheck) {
00809         item = RUBY;
00810     } else if (ctrl == rodCheck) {
00811         item = ROD;
00812     } else if (ctrl == floaterCheck) {
00813         item = FLOATER;
00814     } else if (ctrl == chimeCheck) {
00815         item = CHIME;
00816     } else if (ctrl == tailCheck) {
00817         item = TAIL;
00818     } else if (ctrl == cubeCheck) {
00819         item = CUBE;
00820     } else if (ctrl == bottleCheck) {
00821         item = BOTTLE;
00822     } else if (ctrl == oxyaleCheck) {
00823         item = OXYALE;
00824     } else if (ctrl == canoeCheck) {
00825         item = CANOE;
00826     } else if (ctrl == fireOrbCheck) {
00827         item = FIREORB;
00828     } else if (ctrl == waterOrbCheck) {
00829         item = WATERORB;
00830     } else if (ctrl == windOrbCheck) {
00831         item = WINDORB;
00832     } else if (ctrl == earthOrbCheck) {
00833         item = EARTHORB;
00834     }
00835     
00836     game->setItem(item, ctrl->IsChecked());
00837 }
00838 
00839 void MainFrame::nameChange(wxCommandEvent &event) {
00840     if (!isOpen()) {
00841         return;
00842     }
00843     
00844     wxString value = nameText->GetValue();
00845     game->setName(member, value);
00846 }
00847 
00848 void MainFrame::conditionChange(wxCommandEvent &event) {
00849     if (!isOpen()) {
00850         return;
00851     }
00852     
00853     wxChoice *ctrl = (wxChoice *)event.GetEventObject();
00854     
00855     if (ctrl == classChoice) {
00856         game->setClass(member, ctrl->GetSelection());
00857     } else if (ctrl == conditionChoice) {
00858         game->setCondition(member, ctrl->GetSelection());
00859     }
00860 }
00861 
00862 void MainFrame::statChange(wxCommandEvent &event) {
00863     if (!isOpen()) {
00864         return;
00865     }
00866     
00867     wxTextCtrl *ctrl = (wxTextCtrl *)event.GetEventObject();
00868     int value = atoi(ctrl->GetValue());
00869     
00870     if (ctrl == currentHPText) {
00871         game->setCurrentHP(member, value);
00872     } else if (ctrl == maxHPText) {
00873         game->setMaxHP(member, value);
00874     } else if (ctrl == experienceText) {
00875         game->setExperience(member, value);
00876     } else if (ctrl == strengthText) {
00877         game->setStrength(member, value);
00878     } else if (ctrl == agilityText) {
00879         game->setAgility(member, value);
00880     } else if (ctrl == intelligenceText) {
00881         game->setIntelligence(member, value);
00882     } else if (ctrl == vitalityText) {
00883         game->setVitality(member, value);
00884     } else if (ctrl == luckText) {
00885         game->setLuck(member, value);
00886     } else if (ctrl == damageText) {
00887         game->setDamage(member, ((value > 255) ? 255 : value));
00888     } else if (ctrl == hitPercentText) {
00889         game->setHitPercent(member, ((value > 255) ? 255 : value));
00890     }
00891 }
00892 
00893 void MainFrame::weaponChange(wxCommandEvent &event) {
00894     if (!isOpen()) {
00895         return;
00896     }
00897     
00898     wxChoice *ctrl = (wxChoice *)event.GetEventObject();
00899     int slot;
00900     
00901     for (slot = 0; slot < 4; slot++) {
00902         if (ctrl == weaponChoice[slot]) {
00903             break;
00904         }
00905     }
00906     
00907     int weapon = ctrl->GetSelection();
00908     
00909     if (weaponEquippedCheck[slot]->IsChecked()) {
00910         weapon |= 0x80;
00911     }
00912     
00913     game->setWeapon(member, slot, weapon);
00914 }
00915 
00916 void MainFrame::weaponEquippedChange(wxCommandEvent &event) {
00917     if (!isOpen()) {
00918         return;
00919     }
00920     
00921     wxCheckBox *ctrl = (wxCheckBox *)event.GetEventObject();
00922     int slot;
00923     
00924     for (slot = 0; slot < 4; slot++) {
00925         if (ctrl == weaponEquippedCheck[slot]) {
00926             break;
00927         }
00928     }
00929     
00930     int weapon = weaponChoice[slot]->GetSelection();
00931     
00932     if (ctrl->IsChecked()) {
00933         weapon |= 0x80;
00934     }
00935     
00936     game->setWeapon(member, slot, weapon);
00937 }
00938 
00939 void MainFrame::armorChange(wxCommandEvent &event) {
00940     if (!isOpen()) {
00941         return;
00942     }
00943     
00944     wxChoice *ctrl = (wxChoice *)event.GetEventObject();
00945     int slot;
00946     
00947     for (slot = 0; slot < 4; slot++) {
00948         if (ctrl == armorChoice[slot]) {
00949             break;
00950         }
00951     }
00952     
00953     int armor = ctrl->GetSelection();
00954     
00955     if (armorEquippedCheck[slot]->IsChecked()) {
00956         armor |= 0x80;
00957     }
00958     
00959     game->setArmor(member, slot, armor);
00960 }
00961 
00962 void MainFrame::armorEquippedChange(wxCommandEvent &event) {
00963     if (!isOpen()) {
00964         return;
00965     }
00966     
00967     wxCheckBox *ctrl = (wxCheckBox *)event.GetEventObject();
00968     int slot;
00969     
00970     for (slot = 0; slot < 4; slot++) {
00971         if (ctrl == armorEquippedCheck[slot]) {
00972             break;
00973         }
00974     }
00975     
00976     int armor = armorChoice[slot]->GetSelection();
00977     
00978     if (ctrl->IsChecked()) {
00979         armor |= 0x80;
00980     }
00981     
00982     game->setArmor(member, slot, armor);
00983 }
00984 
00985 void MainFrame::currentMagicChange(wxScrollEvent &event) {
00986     if (!isOpen()) {
00987         return;
00988     }
00989     
00990     wxSlider *ctrl = (wxSlider *)event.GetEventObject();
00991     int level;
00992     
00993     for (level = 0; level < 8; level++) {
00994         if (ctrl == currentMagicSlider[level]) {
00995             break;
00996         }
00997     }
00998     
00999     game->setCurrentMagic(member, level, ctrl->GetValue());
01000 }
01001 
01002 void MainFrame::maxMagicChange(wxScrollEvent &event) {
01003     if (!isOpen()) {
01004         return;
01005     }
01006     
01007     wxSlider *ctrl = (wxSlider *)event.GetEventObject();
01008     int level;
01009     
01010     for (level = 0; level < 8; level++) {
01011         if (ctrl == maxMagicSlider[level]) {
01012             break;
01013         }
01014     }
01015     
01016     game->setMaxMagic(member, level, ctrl->GetValue());
01017 }
01018 
01019 void MainFrame::knownMagicChange(wxCommandEvent &event) {
01020     if (!isOpen()) {
01021         return;
01022     }
01023     
01024     wxChoice *ctrl = (wxChoice *)event.GetEventObject();
01025     int level, slot;
01026     
01027     for (level = 0; level < 8; level++) {
01028         bool match = false;
01029         
01030         for (slot = 0; slot < 3; slot++) {
01031             if (ctrl == knownMagicChoice[level][slot]) {
01032                 match = true;
01033                 break;
01034             }
01035         }
01036         
01037         if (match) {
01038             break;
01039         }
01040     }
01041     
01042     game->setMagic(member, level, slot, ctrl->GetSelection());
01043 }
01044 

Generated on Wed Dec 8 03:21:44 2004 for Final Fantasy SRAM Editor by  doxygen 1.3.9.1