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