00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
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
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
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