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

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

Generated on Wed Aug 3 22:01:53 2005 for ffse by  doxygen 1.4.4