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 <wx/xrc/xmlres.h>
00036
00037 #include "AppConstants.hh"
00038 #include "exceptions/InvalidPasswordException.hh"
00039 #include "res/icon32x32.xpm"
00040 #include "view/MPGFrame.hh"
00041 #include "view/PasswordPanel.hh"
00042
00043 using namespace mpg;
00044
00045 BEGIN_EVENT_TABLE(MPGFrame, wxFrame)
00046 EVT_BUTTON(XRCID("IDB_CHECKSUM"), MPGFrame::onFixChecksum)
00047
00048 EVT_CHECKBOX(XRCID("IDC_ITEMS_MARUMARI"), MPGFrame::onItemChanged)
00049 EVT_CHECKBOX(XRCID("IDC_ITEMS_LONGBEAM"), MPGFrame::onItemChanged)
00050 EVT_CHECKBOX(XRCID("IDC_ITEMS_WAVEBEAM"), MPGFrame::onItemChanged)
00051 EVT_CHECKBOX(XRCID("IDC_ITEMS_ICEBEAM"), MPGFrame::onItemChanged)
00052 EVT_CHECKBOX(XRCID("IDC_ITEMS_BOMBS"), MPGFrame::onItemChanged)
00053 EVT_CHECKBOX(XRCID("IDC_ITEMS_HIGHJUMPBOOTS"), MPGFrame::onItemChanged)
00054 EVT_CHECKBOX(XRCID("IDC_ITEMS_SCREWATTACK"), MPGFrame::onItemChanged)
00055 EVT_CHECKBOX(XRCID("IDC_ITEMS_VARIA"), MPGFrame::onItemChanged)
00056
00057 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_BS1"), MPGFrame::onMissileContainerChanged)
00058 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_BS2"), MPGFrame::onMissileContainerChanged)
00059
00060 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_KL1"), MPGFrame::onMissileContainerChanged)
00061 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_KL2"), MPGFrame::onMissileContainerChanged)
00062 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_KL3"), MPGFrame::onMissileContainerChanged)
00063 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_KL4"), MPGFrame::onMissileContainerChanged)
00064
00065 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_NF1"), MPGFrame::onMissileContainerChanged)
00066 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_NF2"), MPGFrame::onMissileContainerChanged)
00067 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_NF3"), MPGFrame::onMissileContainerChanged)
00068 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_NF4"), MPGFrame::onMissileContainerChanged)
00069 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_NF5"), MPGFrame::onMissileContainerChanged)
00070 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_NF6"), MPGFrame::onMissileContainerChanged)
00071 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_NF7"), MPGFrame::onMissileContainerChanged)
00072 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_NF8"), MPGFrame::onMissileContainerChanged)
00073 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_NF9"), MPGFrame::onMissileContainerChanged)
00074 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_NF10"),
00075 MPGFrame::onMissileContainerChanged)
00076 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_NF11"),
00077 MPGFrame::onMissileContainerChanged)
00078 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_NF12"),
00079 MPGFrame::onMissileContainerChanged)
00080
00081 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_RL1"), MPGFrame::onMissileContainerChanged)
00082 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_RL2"), MPGFrame::onMissileContainerChanged)
00083 EVT_CHECKBOX(XRCID("IDC_ITEMS_MC_RL3"), MPGFrame::onMissileContainerChanged)
00084
00085 EVT_CHECKBOX(XRCID("IDC_ITEMS_ET_BS1"), MPGFrame::onEnergyTankChanged)
00086 EVT_CHECKBOX(XRCID("IDC_ITEMS_ET_BS2"), MPGFrame::onEnergyTankChanged)
00087 EVT_CHECKBOX(XRCID("IDC_ITEMS_ET_BS3"), MPGFrame::onEnergyTankChanged)
00088
00089 EVT_CHECKBOX(XRCID("IDC_ITEMS_ET_NF"), MPGFrame::onEnergyTankChanged)
00090
00091 EVT_CHECKBOX(XRCID("IDC_ITEMS_ET_KL"), MPGFrame::onEnergyTankChanged)
00092 EVT_CHECKBOX(XRCID("IDC_ITEMS_ET_KL_KRAID"), MPGFrame::onEnergyTankChanged)
00093
00094 EVT_CHECKBOX(XRCID("IDC_ITEMS_ET_RL"), MPGFrame::onEnergyTankChanged)
00095 EVT_CHECKBOX(XRCID("IDC_ITEMS_ET_RL_RIDLEY"), MPGFrame::onEnergyTankChanged)
00096
00097 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_BS_LONGBEAM"), MPGFrame::onDoorChanged)
00098 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_BS_TOURIANBRIDGE"),
00099 MPGFrame::onDoorChanged)
00100 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_BS_BOMBS"), MPGFrame::onDoorChanged)
00101 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_BS_ICEBEAM"), MPGFrame::onDoorChanged)
00102 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_BS_VARIA"), MPGFrame::onDoorChanged)
00103
00104 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_KL1"), MPGFrame::onDoorChanged)
00105 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_KL2"), MPGFrame::onDoorChanged)
00106 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_KL3"), MPGFrame::onDoorChanged)
00107 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_KL4"), MPGFrame::onDoorChanged)
00108 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_KL_KRAID"), MPGFrame::onDoorChanged)
00109
00110 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_NF_HIGHJUMPBOOTS"),
00111 MPGFrame::onDoorChanged)
00112 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_NF_SCREWATTACK"),
00113 MPGFrame::onDoorChanged)
00114 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_NF_WAVEBEAM"), MPGFrame::onDoorChanged)
00115 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_NF_ICEBEAM"), MPGFrame::onDoorChanged)
00116
00117 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_RL"), MPGFrame::onDoorChanged)
00118 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_RL_RIDLEY"), MPGFrame::onDoorChanged)
00119
00120 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_T1"), MPGFrame::onDoorChanged)
00121 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_T2"), MPGFrame::onDoorChanged)
00122 EVT_CHECKBOX(XRCID("IDC_MISC_DOORS_T3"), MPGFrame::onDoorChanged)
00123
00124 EVT_CHECKBOX(XRCID("IDC_MISC_STATUE_KRAID"), MPGFrame::onStatueChanged)
00125 EVT_CHECKBOX(XRCID("IDC_MISC_STATUE_RIDLEY"), MPGFrame::onStatueChanged)
00126
00127 EVT_CHECKBOX(XRCID("IDC_MISC_ZEBETITE1"), MPGFrame::onZebetiteChanged)
00128 EVT_CHECKBOX(XRCID("IDC_MISC_ZEBETITE2"), MPGFrame::onZebetiteChanged)
00129 EVT_CHECKBOX(XRCID("IDC_MISC_ZEBETITE3"), MPGFrame::onZebetiteChanged)
00130 EVT_CHECKBOX(XRCID("IDC_MISC_ZEBETITE4"), MPGFrame::onZebetiteChanged)
00131 EVT_CHECKBOX(XRCID("IDC_MISC_ZEBETITE5"), MPGFrame::onZebetiteChanged)
00132
00133 EVT_CHECKBOX(XRCID("IDC_MISC_BOSS_KRAID"), MPGFrame::onBossChanged)
00134 EVT_CHECKBOX(XRCID("IDC_MISC_BOSS_RIDLEY"), MPGFrame::onBossChanged)
00135 EVT_CHECKBOX(XRCID("IDC_MISC_BOSS_MOTHERBRAIN"), MPGFrame::onBossChanged)
00136
00137 EVT_CHECKLISTBOX(XRCID("IDCLB_RAW_BITS"), MPGFrame::onRawBitChanged)
00138
00139 EVT_MENU(wxID_EXIT, MPGFrame::onFileExit)
00140
00141 EVT_MENU(XRCID("IDM_PASSWORD_PERFECTGAME"),
00142 MPGFrame::onPasswordPerfectGame)
00143 EVT_MENU(XRCID("IDM_PASSWORD_DEBUGPASSWORD"),
00144 MPGFrame::onPasswordDebugPassword)
00145 EVT_MENU(XRCID("IDM_PASSWORD_RESET"), MPGFrame::onPasswordReset)
00146
00147 EVT_MENU(XRCID("IDM_PASSWORD_ENDING1"), MPGFrame::onPasswordEnding)
00148 EVT_MENU(XRCID("IDM_PASSWORD_ENDING2"), MPGFrame::onPasswordEnding)
00149 EVT_MENU(XRCID("IDM_PASSWORD_ENDING3"), MPGFrame::onPasswordEnding)
00150 EVT_MENU(XRCID("IDM_PASSWORD_ENDING4"), MPGFrame::onPasswordEnding)
00151 EVT_MENU(XRCID("IDM_PASSWORD_ENDING5"), MPGFrame::onPasswordEnding)
00152
00153 EVT_MENU(XRCID("IDM_PASSWORD_GIVE_MISSILES"),
00154 MPGFrame::onPasswordGiveMissiles)
00155 EVT_MENU(XRCID("IDM_PASSWORD_GIVE_ITEMS"), MPGFrame::onPasswordGiveItems)
00156 EVT_MENU(XRCID("IDM_PASSWORD_GIVE_MC"),
00157 MPGFrame::onPasswordGiveMissileContainers)
00158 EVT_MENU(XRCID("IDM_PASSWORD_GIVE_ET"),
00159 MPGFrame::onPasswordGiveEnergyTanks)
00160 EVT_MENU(XRCID("IDM_PASSWORD_GIVE_DOORS"), MPGFrame::onPasswordGiveDoors)
00161 EVT_MENU(XRCID("IDM_PASSWORD_GIVE_STATUES"),
00162 MPGFrame::onPasswordGiveStatues)
00163 EVT_MENU(XRCID("IDM_PASSWORD_GIVE_ZEBETITES"),
00164 MPGFrame::onPasswordGiveZebetites)
00165 EVT_MENU(XRCID("IDM_PASSWORD_GIVE_BOSSES"), MPGFrame::onPasswordGiveBosses)
00166
00167 EVT_MENU(wxID_ABOUT, MPGFrame::onHelpAbout)
00168
00169 EVT_RADIOBOX(XRCID("IDRB_MISC_START"), MPGFrame::onStartLocationChanged)
00170 EVT_RADIOBOX(XRCID("IDRB_MISC_ARMOR"), MPGFrame::onArmorChanged)
00171
00172 EVT_TEXT(XRCID("IDSC_ITEMS_MISSILES"), MPGFrame::onMissilesTextChanged)
00173 EVT_TEXT(XRCID("IDT_MISC_GAMETIME"), MPGFrame::onGameTimeChanged)
00174 EVT_TEXT(XRCID("IDSC_RAW_SHIFT"), MPGFrame::onShiftTextChanged)
00175 EVT_TEXT(XRCID("IDT_PASSWORD"), MPGFrame::onPasswordChanged)
00176 END_EVENT_TABLE()
00177
00178 MPGFrame::MPGFrame() : fixChecksumButton(NULL), ignoreTextEvent(true) {
00179 SetParent(NULL);
00180
00181 CreateControls();
00182 GetSizer()->SetSizeHints(this);
00183 Centre();
00184 }
00185
00186 void MPGFrame::CreateControls() {
00187 wxXmlResource::Get()->LoadFrame(this, GetParent(), wxT("IDF_MPG"));
00188 SetIcon(wxIcon(icon32x32_xpm));
00189
00190 XRCCTRL(*this, "IDP_PASSWORD", PasswordPanel)->setPassword(&password);
00191 XRCCTRL(*this, "IDT_PASSWORD", wxTextCtrl)->SetMaxLength(27);
00192
00193 wxTextCtrl *gameTime = XRCCTRL(*this, "IDT_MISC_GAMETIME", wxTextCtrl);
00194 gameTime->SetValidator(wxTextValidator(wxFILTER_NUMERIC));
00195 gameTime->SetMaxLength(10);
00196
00197 fixChecksumButton = XRCCTRL(*this, "IDB_CHECKSUM", wxButton);
00198
00199 updateTextCtrlSizes();
00200
00201 ignoreTextEvent = false;
00202 }
00203
00204 wxString MPGFrame::getUnifiedPassword() const {
00205 wxString temp = XRCCTRL(*this, "IDT_PASSWORD", wxTextCtrl)->GetValue();
00206
00207 if (temp.Length() != 27) {
00208 return wxEmptyString;
00209 }
00210
00211 return wxString(temp.Mid(0, 6) + temp.Mid(7, 6) +
00212 temp.Mid(14, 6) + temp.Mid(21));
00213 }
00214
00215 void MPGFrame::updateControls() {
00216
00217 XRCCTRL(*this, "IDC_ITEMS_MARUMARI",
00218 wxCheckBox)->SetValue(password.getBit(MARUMARI) &&
00219 password.getBit(MARUMARI_TAKEN));
00220 XRCCTRL(*this, "IDC_ITEMS_LONGBEAM",
00221 wxCheckBox)->SetValue(password.getBit(LONGBEAM));
00222 XRCCTRL(*this, "IDC_ITEMS_WAVEBEAM",
00223 wxCheckBox)->SetValue(password.getBit(WAVEBEAM));
00224 XRCCTRL(*this, "IDC_ITEMS_ICEBEAM",
00225 wxCheckBox)->SetValue(password.getBit(ICEBEAM));
00226 XRCCTRL(*this, "IDC_ITEMS_BOMBS",
00227 wxCheckBox)->SetValue(password.getBit(BOMBS) &&
00228 password.getBit(BOMBS_TAKEN));
00229 XRCCTRL(*this, "IDC_ITEMS_HIGHJUMPBOOTS",
00230 wxCheckBox)->SetValue(password.getBit(HIGHJUMPBOOTS) &&
00231 password.getBit(HIGHJUMPBOOTS_TAKEN));
00232 XRCCTRL(*this, "IDC_ITEMS_SCREWATTACK",
00233 wxCheckBox)->SetValue(password.getBit(SCREWATTACK) &&
00234 password.getBit(SCREWATTACK_TAKEN));
00235 XRCCTRL(*this, "IDC_ITEMS_VARIA",
00236 wxCheckBox)->SetValue(password.getBit(VARIA) &&
00237 password.getBit(VARIA_TAKEN));
00238
00239
00240 XRCCTRL(*this, "IDC_ITEMS_MC_BS1",
00241 wxCheckBox)->SetValue(password.getBit(MISSILE_BS1));
00242 XRCCTRL(*this, "IDC_ITEMS_MC_BS2",
00243 wxCheckBox)->SetValue(password.getBit(MISSILE_BS2));
00244
00245 XRCCTRL(*this, "IDC_ITEMS_MC_KL1",
00246 wxCheckBox)->SetValue(password.getBit(MISSILE_KL1));
00247 XRCCTRL(*this, "IDC_ITEMS_MC_KL2",
00248 wxCheckBox)->SetValue(password.getBit(MISSILE_KL2));
00249 XRCCTRL(*this, "IDC_ITEMS_MC_KL3",
00250 wxCheckBox)->SetValue(password.getBit(MISSILE_KL3));
00251 XRCCTRL(*this, "IDC_ITEMS_MC_KL4",
00252 wxCheckBox)->SetValue(password.getBit(MISSILE_KL4));
00253
00254 XRCCTRL(*this, "IDC_ITEMS_MC_NF1",
00255 wxCheckBox)->SetValue(password.getBit(MISSILE_NF1));
00256 XRCCTRL(*this, "IDC_ITEMS_MC_NF2",
00257 wxCheckBox)->SetValue(password.getBit(MISSILE_NF2));
00258 XRCCTRL(*this, "IDC_ITEMS_MC_NF3",
00259 wxCheckBox)->SetValue(password.getBit(MISSILE_NF3));
00260 XRCCTRL(*this, "IDC_ITEMS_MC_NF4",
00261 wxCheckBox)->SetValue(password.getBit(MISSILE_NF4));
00262 XRCCTRL(*this, "IDC_ITEMS_MC_NF5",
00263 wxCheckBox)->SetValue(password.getBit(MISSILE_NF5));
00264 XRCCTRL(*this, "IDC_ITEMS_MC_NF6",
00265 wxCheckBox)->SetValue(password.getBit(MISSILE_NF6));
00266 XRCCTRL(*this, "IDC_ITEMS_MC_NF7",
00267 wxCheckBox)->SetValue(password.getBit(MISSILE_NF7));
00268 XRCCTRL(*this, "IDC_ITEMS_MC_NF8",
00269 wxCheckBox)->SetValue(password.getBit(MISSILE_NF8));
00270 XRCCTRL(*this, "IDC_ITEMS_MC_NF9",
00271 wxCheckBox)->SetValue(password.getBit(MISSILE_NF9));
00272 XRCCTRL(*this, "IDC_ITEMS_MC_NF10",
00273 wxCheckBox)->SetValue(password.getBit(MISSILE_NF10));
00274 XRCCTRL(*this, "IDC_ITEMS_MC_NF11",
00275 wxCheckBox)->SetValue(password.getBit(MISSILE_NF11));
00276 XRCCTRL(*this, "IDC_ITEMS_MC_NF12",
00277 wxCheckBox)->SetValue(password.getBit(MISSILE_NF12));
00278
00279 XRCCTRL(*this, "IDC_ITEMS_MC_RL1",
00280 wxCheckBox)->SetValue(password.getBit(MISSILE_RL1));
00281 XRCCTRL(*this, "IDC_ITEMS_MC_RL2",
00282 wxCheckBox)->SetValue(password.getBit(MISSILE_RL2));
00283 XRCCTRL(*this, "IDC_ITEMS_MC_RL3",
00284 wxCheckBox)->SetValue(password.getBit(MISSILE_RL3));
00285
00286
00287 XRCCTRL(*this, "IDC_ITEMS_ET_BS1",
00288 wxCheckBox)->SetValue(password.getBit(ENERGYTANK_BS1));
00289 XRCCTRL(*this, "IDC_ITEMS_ET_BS2",
00290 wxCheckBox)->SetValue(password.getBit(ENERGYTANK_BS2));
00291 XRCCTRL(*this, "IDC_ITEMS_ET_BS3",
00292 wxCheckBox)->SetValue(password.getBit(ENERGYTANK_BS3));
00293
00294 XRCCTRL(*this, "IDC_ITEMS_ET_NF",
00295 wxCheckBox)->SetValue(password.getBit(ENERGYTANK_NF));
00296
00297 XRCCTRL(*this, "IDC_ITEMS_ET_KL",
00298 wxCheckBox)->SetValue(password.getBit(ENERGYTANK_KL));
00299 XRCCTRL(*this, "IDC_ITEMS_ET_KL_KRAID",
00300 wxCheckBox)->SetValue(password.getBit(ENERGYTANK_KL_KRAID));
00301
00302 XRCCTRL(*this, "IDC_ITEMS_ET_RL",
00303 wxCheckBox)->SetValue(password.getBit(ENERGYTANK_RL));
00304 XRCCTRL(*this, "IDC_ITEMS_ET_RL_RIDLEY",
00305 wxCheckBox)->SetValue(password.getBit(ENERGYTANK_RL_RIDLEY));
00306
00307
00308 XRCCTRL(*this, "IDC_MISC_DOORS_BS_LONGBEAM",
00309 wxCheckBox)->SetValue(password.getBit(REDDOOR_BS_LONGBEAM));
00310 XRCCTRL(*this, "IDC_MISC_DOORS_BS_TOURIANBRIDGE",
00311 wxCheckBox)->SetValue(password.getBit(REDDOOR_BS_TOURIANBRIDGE));
00312 XRCCTRL(*this, "IDC_MISC_DOORS_BS_BOMBS",
00313 wxCheckBox)->SetValue(password.getBit(REDDOOR_BS_BOMBS));
00314 XRCCTRL(*this, "IDC_MISC_DOORS_BS_ICEBEAM",
00315 wxCheckBox)->SetValue(password.getBit(REDDOOR_BS_ICEBEAM));
00316 XRCCTRL(*this, "IDC_MISC_DOORS_BS_VARIA",
00317 wxCheckBox)->SetValue(password.getBit(REDDOOR_BS_VARIA));
00318
00319 XRCCTRL(*this, "IDC_MISC_DOORS_KL1",
00320 wxCheckBox)->SetValue(password.getBit(REDDOOR_KL1));
00321 XRCCTRL(*this, "IDC_MISC_DOORS_KL2",
00322 wxCheckBox)->SetValue(password.getBit(REDDOOR_KL2));
00323 XRCCTRL(*this, "IDC_MISC_DOORS_KL3",
00324 wxCheckBox)->SetValue(password.getBit(REDDOOR_KL3));
00325 XRCCTRL(*this, "IDC_MISC_DOORS_KL4",
00326 wxCheckBox)->SetValue(password.getBit(REDDOOR_KL4));
00327 XRCCTRL(*this, "IDC_MISC_DOORS_KL_KRAID",
00328 wxCheckBox)->SetValue(password.getBit(REDDOOR_KL_KRAID));
00329
00330 XRCCTRL(*this, "IDC_MISC_DOORS_NF_HIGHJUMPBOOTS",
00331 wxCheckBox)->SetValue(password.getBit(REDDOOR_NF_HIGHJUMPBOOTS));
00332 XRCCTRL(*this, "IDC_MISC_DOORS_NF_SCREWATTACK",
00333 wxCheckBox)->SetValue(password.getBit(REDDOOR_NF_SCREWATTACK));
00334 XRCCTRL(*this, "IDC_MISC_DOORS_NF_WAVEBEAM",
00335 wxCheckBox)->SetValue(password.getBit(REDDOOR_NF_WAVEBEAM));
00336 XRCCTRL(*this, "IDC_MISC_DOORS_NF_ICEBEAM",
00337 wxCheckBox)->SetValue(password.getBit(REDDOOR_NF_ICEBEAM));
00338
00339 XRCCTRL(*this, "IDC_MISC_DOORS_RL",
00340 wxCheckBox)->SetValue(password.getBit(REDDOOR_RL));
00341 XRCCTRL(*this, "IDC_MISC_DOORS_RL_RIDLEY",
00342 wxCheckBox)->SetValue(password.getBit(REDDOOR_RL_RIDLEY));
00343
00344 XRCCTRL(*this, "IDC_MISC_DOORS_T1",
00345 wxCheckBox)->SetValue(password.getBit(REDDOOR_T1));
00346 XRCCTRL(*this, "IDC_MISC_DOORS_T2",
00347 wxCheckBox)->SetValue(password.getBit(REDDOOR_T2));
00348 XRCCTRL(*this, "IDC_MISC_DOORS_T3",
00349 wxCheckBox)->SetValue(password.getBit(REDDOOR_T3));
00350
00351
00352 XRCCTRL(*this, "IDC_MISC_STATUE_KRAID",
00353 wxCheckBox)->SetValue(password.getBit(KRAID_STATUE));
00354 XRCCTRL(*this, "IDC_MISC_STATUE_RIDLEY",
00355 wxCheckBox)->SetValue(password.getBit(RIDLEY_STATUE));
00356
00357
00358 XRCCTRL(*this, "IDC_MISC_ZEBETITE1",
00359 wxCheckBox)->SetValue(password.getBit(ZEBETITE1));
00360 XRCCTRL(*this, "IDC_MISC_ZEBETITE2",
00361 wxCheckBox)->SetValue(password.getBit(ZEBETITE2));
00362 XRCCTRL(*this, "IDC_MISC_ZEBETITE3",
00363 wxCheckBox)->SetValue(password.getBit(ZEBETITE3));
00364 XRCCTRL(*this, "IDC_MISC_ZEBETITE4",
00365 wxCheckBox)->SetValue(password.getBit(ZEBETITE4));
00366 XRCCTRL(*this, "IDC_MISC_ZEBETITE5",
00367 wxCheckBox)->SetValue(password.getBit(ZEBETITE5));
00368
00369
00370 XRCCTRL(*this, "IDC_MISC_BOSS_KRAID",
00371 wxCheckBox)->SetValue(password.getBit(KRAID));
00372 XRCCTRL(*this, "IDC_MISC_BOSS_RIDLEY",
00373 wxCheckBox)->SetValue(password.getBit(RIDLEY));
00374 XRCCTRL(*this, "IDC_MISC_BOSS_MOTHERBRAIN",
00375 wxCheckBox)->SetValue(password.getBit(MOTHERBRAIN));
00376
00377
00378 XRCCTRL(*this, "IDRB_MISC_ARMOR",
00379 wxRadioBox)->SetSelection(password.getBit(SWIMSUIT) ? 1 : 0);
00380
00381
00382 unsigned long value = static_cast<unsigned long>(password.getGameTime());
00383
00384 ignoreTextEvent = true;
00385 XRCCTRL(*this, "IDSC_ITEMS_MISSILES",
00386 wxSpinCtrl)->SetValue(password.getMissiles());
00387 XRCCTRL(*this, "IDT_MISC_GAMETIME",
00388 wxTextCtrl)->SetValue(wxString::Format(wxT("%lu"), value));
00389 XRCCTRL(*this, "IDSC_RAW_SHIFT",
00390 wxSpinCtrl)->SetValue(password.getShift());
00391 ignoreTextEvent = false;
00392
00393
00394 updateStartLocation();
00395
00396
00397 for (int i = 0; i < PASSWORD_BITS; ++i) {
00398 XRCCTRL(*this, "IDCLB_RAW_BITS",
00399 wxCheckListBox)->Check(i, password.getBit(i));
00400 }
00401
00402
00403 if (password.getBit(RESET)) {
00404 wxMessageBox(wxT("This password is invalid: reset bit is set"),
00405 wxT("Warning: Invalid Password"),
00406 wxICON_EXCLAMATION | wxOK);
00407 }
00408 }
00409
00410 void MPGFrame::updatePasswordText() {
00411 wxTextCtrl *ctrl = XRCCTRL(*this, "IDT_PASSWORD", wxTextCtrl);
00412 wxString text;
00413
00414
00415 for (unsigned int i = 0; i < PASSWORD_LENGTH; ++i) {
00416 if ((i > 0) && ((i % 6) == 0)) {
00417 text += wxT(' ');
00418 }
00419
00420 text += password.getEncoded()[i];
00421 }
00422
00423 ignoreTextEvent = true;
00424 ctrl->SetValue(text);
00425 ignoreTextEvent = false;
00426
00427 XRCCTRL(*this, "IDP_PASSWORD", PasswordPanel)->Refresh(false);
00428
00429
00430 if (password.getEncoded().StartsWith(wxT("NARPASSWORD00000"))) {
00431 wxMessageBox(wxT("This password triggers debug mode.\n"
00432 "Because it is Hard Coded, any change will disable "
00433 "debug mode effects."),
00434 wxT("Debug Password"), wxICON_EXCLAMATION | wxOK);
00435 }
00436 }
00437
00438 void MPGFrame::updateRawGameTime(wxUint32 value) {
00439 wxCheckListBox *ctrl = XRCCTRL(*this, "IDCLB_RAW_BITS", wxCheckListBox);
00440
00441 for (int i = 0; i < 32; ++i) {
00442 ctrl->Check(GAMETIME + i, (value & (1 << i)));
00443 }
00444 }
00445
00446 void MPGFrame::updateRawMissiles(unsigned char value) {
00447 wxCheckListBox *ctrl = XRCCTRL(*this, "IDCLB_RAW_BITS", wxCheckListBox);
00448
00449 for (int i = 0; i < 8; ++i) {
00450 ctrl->Check(MISSILES + i, (value & (1 << i)));
00451 }
00452 }
00453
00454 void MPGFrame::updateStartLocation() {
00455 bool nf = password.getBit(START_NF);
00456 bool kl = password.getBit(START_KL);
00457 bool rl = password.getBit(START_RL);
00458
00459 wxRadioBox *ctrl = XRCCTRL(*this, "IDRB_MISC_START", wxRadioBox);
00460
00461 if (!nf && !kl && !rl) {
00462
00463 ctrl->SetSelection(BRINSTAR);
00464 } else if (!nf && kl && !rl) {
00465
00466 ctrl->SetSelection(KRAIDSLAIR);
00467 } else if (nf && !kl && !rl) {
00468
00469 ctrl->SetSelection(NORFAIR);
00470 } else if (!nf && !kl && rl) {
00471
00472 ctrl->SetSelection(RIDLEYSLAIR);
00473 } else if (nf && kl && !rl) {
00474
00475 ctrl->SetSelection(TOURIAN);
00476 } else {
00477
00478 wxMessageBox(wxT("This password has an invalid start location."),
00479 wxT("Warning: Invalid Password"),
00480 wxICON_EXCLAMATION | wxOK);
00481 }
00482 }
00483
00484 void MPGFrame::updateTextCtrlSizes() {
00485 wxClientDC dc(this);
00486 wxTextCtrl *ctrl;
00487 wxCoord width, height;
00488
00489 ctrl = XRCCTRL(*this, "IDT_MISC_GAMETIME", wxTextCtrl);
00490 dc.SetFont(ctrl->GetFont());
00491 dc.GetTextExtent(wxT("04294967296"), &width, &height);
00492
00493 wxSize size(width + 15, height + 5);
00494 ctrl->SetSize(size);
00495 ctrl->SetMinSize(size);
00496 ctrl->SetMaxSize(size);
00497
00498 ctrl = XRCCTRL(*this, "IDT_PASSWORD", wxTextCtrl);
00499 dc.SetFont(ctrl->GetFont());
00500 dc.GetTextExtent(ctrl->GetValue(), &width, &height);
00501
00502 size = wxSize(width + 15, height + 5);
00503 ctrl->SetSize(size);
00504 ctrl->SetMinSize(size);
00505 ctrl->SetMaxSize(size);
00506 }
00507
00508 void MPGFrame::onArmorChanged(wxCommandEvent &event) {
00509 wxRadioBox *ptr = dynamic_cast<wxRadioBox *>(event.GetEventObject());
00510 bool state = (ptr->GetSelection() == 1);
00511
00512 XRCCTRL(*this, "IDCLB_RAW_BITS", wxCheckListBox)->Check(SWIMSUIT, state);
00513 password.setBit(SWIMSUIT, state);
00514
00515 updatePasswordText();
00516 }
00517
00518 void MPGFrame::onBossChanged(wxCommandEvent &event) {
00519 int id = event.GetId();
00520 bool state = event.IsChecked();
00521 int bit;
00522
00523 if (id == XRCID("IDC_MISC_BOSS_KRAID")) {
00524 bit = KRAID;
00525 } else if (id == XRCID("IDC_MISC_BOSS_RIDLEY")) {
00526 bit = RIDLEY;
00527 } else {
00528 bit = MOTHERBRAIN;
00529 }
00530
00531 XRCCTRL(*this, "IDCLB_RAW_BITS", wxCheckListBox)->Check(bit, state);
00532 password.setBit(bit, state);
00533
00534 updatePasswordText();
00535 }
00536
00537 void MPGFrame::onDoorChanged(wxCommandEvent &event) {
00538 int id = event.GetId();
00539 bool state = event.IsChecked();
00540 int bit;
00541
00542 if (id == XRCID("IDC_MISC_DOORS_BS_LONGBEAM")) {
00543 bit = REDDOOR_BS_LONGBEAM;
00544 } else if (id == XRCID("IDC_MISC_DOORS_BS_TOURIANBRIDGE")) {
00545 bit = REDDOOR_BS_TOURIANBRIDGE;
00546 } else if (id == XRCID("IDC_MISC_DOORS_BS_BOMBS")) {
00547 bit = REDDOOR_BS_BOMBS;
00548 } else if (id == XRCID("IDC_MISC_DOORS_BS_ICEBEAM")) {
00549 bit = REDDOOR_BS_ICEBEAM;
00550 } else if (id == XRCID("IDC_MISC_DOORS_BS_VARIA")) {
00551 bit = REDDOOR_BS_VARIA;
00552 } else if (id == XRCID("IDC_MISC_DOORS_KL1")) {
00553 bit = REDDOOR_KL1;
00554 } else if (id == XRCID("IDC_MISC_DOORS_KL2")) {
00555 bit = REDDOOR_KL2;
00556 } else if (id == XRCID("IDC_MISC_DOORS_KL3")) {
00557 bit = REDDOOR_KL3;
00558 } else if (id == XRCID("IDC_MISC_DOORS_KL4")) {
00559 bit = REDDOOR_KL4;
00560 } else if (id == XRCID("IDC_MISC_DOORS_KL_KRAID")) {
00561 bit = REDDOOR_KL_KRAID;
00562 } else if (id == XRCID("IDC_MISC_DOORS_NF_HIGHJUMPBOOTS")) {
00563 bit = REDDOOR_NF_HIGHJUMPBOOTS;
00564 } else if (id == XRCID("IDC_MISC_DOORS_NF_SCREWATTACK")) {
00565 bit = REDDOOR_NF_SCREWATTACK;
00566 } else if (id == XRCID("IDC_MISC_DOORS_NF_WAVEBEAM")) {
00567 bit = REDDOOR_NF_WAVEBEAM;
00568 } else if (id == XRCID("IDC_MISC_DOORS_NF_ICEBEAM")) {
00569 bit = REDDOOR_NF_ICEBEAM;
00570 } else if (id == XRCID("IDC_MISC_DOORS_RL")) {
00571 bit = REDDOOR_RL;
00572 } else if (id == XRCID("IDC_MISC_DOORS_RL_RIDLEY")) {
00573 bit = REDDOOR_RL_RIDLEY;
00574 } else if (id == XRCID("IDC_MISC_DOORS_T1")) {
00575 bit = REDDOOR_T1;
00576 } else if (id == XRCID("IDC_MISC_DOORS_T2")) {
00577 bit = REDDOOR_T2;
00578 } else {
00579 bit = REDDOOR_T3;
00580 }
00581
00582 XRCCTRL(*this, "IDCLB_RAW_BITS", wxCheckListBox)->Check(bit, state);
00583 password.setBit(bit, state);
00584
00585 updatePasswordText();
00586 }
00587
00588 void MPGFrame::onEnergyTankChanged(wxCommandEvent &event) {
00589 int id = event.GetId();
00590 bool state = event.IsChecked();
00591 int bit;
00592
00593 if (id == XRCID("IDC_ITEMS_ET_BS1")) {
00594 bit = ENERGYTANK_BS1;
00595 } else if (id == XRCID("IDC_ITEMS_ET_BS2")) {
00596 bit = ENERGYTANK_BS2;
00597 } else if (id == XRCID("IDC_ITEMS_ET_BS3")) {
00598 bit = ENERGYTANK_BS3;
00599 } else if (id == XRCID("IDC_ITEMS_ET_NF")) {
00600 bit = ENERGYTANK_NF;
00601 } else if (id == XRCID("IDC_ITEMS_ET_KL")) {
00602 bit = ENERGYTANK_KL;
00603 } else if (id == XRCID("IDC_ITEMS_ET_KL_KRAID")) {
00604 bit = ENERGYTANK_KL_KRAID;
00605 } else if (id == XRCID("IDC_ITEMS_ET_RL")) {
00606 bit = ENERGYTANK_RL;
00607 } else {
00608 bit = ENERGYTANK_RL_RIDLEY;
00609 }
00610
00611 XRCCTRL(*this, "IDCLB_RAW_BITS", wxCheckListBox)->Check(bit, state);
00612 password.setBit(bit, state);
00613
00614 updatePasswordText();
00615 }
00616
00617 void MPGFrame::onFixChecksum(wxCommandEvent &) {
00618 password = Password(getUnifiedPassword(), true);
00619 updatePasswordText();
00620 updateControls();
00621 }
00622
00623 void MPGFrame::onGameTimeChanged(wxCommandEvent &event) {
00624 if (ignoreTextEvent) {
00625 return;
00626 }
00627
00628 unsigned long value;
00629
00630 if (event.GetString().ToULong(&value)) {
00631 wxUint32 ticks = static_cast<wxUint32>(value);
00632
00633 updateRawGameTime(ticks);
00634 password.setGameTime(ticks);
00635
00636 updatePasswordText();
00637 }
00638 }
00639
00640 void MPGFrame::onHelpAbout(wxCommandEvent &) {
00641 wxString message = APP_NAME + wxT(' ') + APP_VERSION + wxT('\n') +
00642 APP_COPYRIGHT + wxT('\n') + APP_URL;
00643 wxString title = wxT("About ") + APP_NAME + wxT("...");
00644
00645 wxMessageBox(message, title, wxICON_INFORMATION | wxOK);
00646 }
00647
00648 void MPGFrame::onItemChanged(wxCommandEvent &event) {
00649 int id = event.GetId();
00650 bool state = event.IsChecked();
00651 int b1, b2 = -1;
00652 wxCheckListBox *ctrl = XRCCTRL(*this, "IDCLB_RAW_BITS", wxCheckListBox);
00653
00654 if (id == XRCID("IDC_ITEMS_MARUMARI")) {
00655 b1 = MARUMARI;
00656 b2 = MARUMARI_TAKEN;
00657 } else if (id == XRCID("IDC_ITEMS_LONGBEAM")) {
00658 b1 = LONGBEAM;
00659 } else if (id == XRCID("IDC_ITEMS_WAVEBEAM")) {
00660 b1 = WAVEBEAM;
00661
00662
00663 XRCCTRL(*this, "IDC_ITEMS_ICEBEAM", wxCheckBox)->SetValue(false);
00664 ctrl->Check(ICEBEAM, false);
00665 password.setBit(ICEBEAM, false);
00666 } else if (id == XRCID("IDC_ITEMS_ICEBEAM")) {
00667 b1 = ICEBEAM;
00668
00669
00670 XRCCTRL(*this, "IDC_ITEMS_WAVEBEAM", wxCheckBox)->SetValue(false);
00671 ctrl->Check(WAVEBEAM, false);
00672 password.setBit(WAVEBEAM, false);
00673 } else if (id == XRCID("IDC_ITEMS_BOMBS")) {
00674 b1 = BOMBS;
00675 b2 = BOMBS_TAKEN;
00676 } else if (id == XRCID("IDC_ITEMS_HIGHJUMPBOOTS")) {
00677 b1 = HIGHJUMPBOOTS;
00678 b2 = HIGHJUMPBOOTS_TAKEN;
00679 } else if (id == XRCID("IDC_ITEMS_SCREWATTACK")) {
00680 b1 = SCREWATTACK;
00681 b2 = SCREWATTACK_TAKEN;
00682 } else {
00683 b1 = VARIA;
00684 b2 = VARIA_TAKEN;
00685 }
00686
00687 ctrl->Check(b1, state);
00688 password.setBit(b1, state);
00689
00690 if (b2 != -1) {
00691 ctrl->Check(b2, state);
00692 password.setBit(b2, state);
00693 }
00694
00695 updatePasswordText();
00696 }
00697
00698 void MPGFrame::onMissileContainerChanged(wxCommandEvent &event) {
00699 int id = event.GetId();
00700 bool state = event.IsChecked();
00701 int bit;
00702
00703 if (id == XRCID("IDC_ITEMS_MC_BS1")) {
00704 bit = MISSILE_BS1;
00705 } else if (id == XRCID("IDC_ITEMS_MC_BS2")) {
00706 bit = MISSILE_BS2;
00707 } else if (id == XRCID("IDC_ITEMS_MC_KL1")) {
00708 bit = MISSILE_KL1;
00709 } else if (id == XRCID("IDC_ITEMS_MC_KL2")) {
00710 bit = MISSILE_KL2;
00711 } else if (id == XRCID("IDC_ITEMS_MC_KL3")) {
00712 bit = MISSILE_KL3;
00713 } else if (id == XRCID("IDC_ITEMS_MC_KL4")) {
00714 bit = MISSILE_KL4;
00715 } else if (id == XRCID("IDC_ITEMS_MC_NF1")) {
00716 bit = MISSILE_NF1;
00717 } else if (id == XRCID("IDC_ITEMS_MC_NF2")) {
00718 bit = MISSILE_NF2;
00719 } else if (id == XRCID("IDC_ITEMS_MC_NF3")) {
00720 bit = MISSILE_NF3;
00721 } else if (id == XRCID("IDC_ITEMS_MC_NF4")) {
00722 bit = MISSILE_NF4;
00723 } else if (id == XRCID("IDC_ITEMS_MC_NF5")) {
00724 bit = MISSILE_NF5;
00725 } else if (id == XRCID("IDC_ITEMS_MC_NF6")) {
00726 bit = MISSILE_NF6;
00727 } else if (id == XRCID("IDC_ITEMS_MC_NF7")) {
00728 bit = MISSILE_NF7;
00729 } else if (id == XRCID("IDC_ITEMS_MC_NF8")) {
00730 bit = MISSILE_NF8;
00731 } else if (id == XRCID("IDC_ITEMS_MC_NF9")) {
00732 bit = MISSILE_NF9;
00733 } else if (id == XRCID("IDC_ITEMS_MC_NF10")) {
00734 bit = MISSILE_NF10;
00735 } else if (id == XRCID("IDC_ITEMS_MC_NF11")) {
00736 bit = MISSILE_NF11;
00737 } else if (id == XRCID("IDC_ITEMS_MC_NF12")) {
00738 bit = MISSILE_NF12;
00739 } else if (id == XRCID("IDC_ITEMS_MC_RL1")) {
00740 bit = MISSILE_RL1;
00741 } else if (id == XRCID("IDC_ITEMS_MC_RL2")) {
00742 bit = MISSILE_RL2;
00743 } else {
00744 bit = MISSILE_RL3;
00745 }
00746
00747 XRCCTRL(*this, "IDCLB_RAW_BITS", wxCheckListBox)->Check(bit, state);
00748 password.setBit(bit, state);
00749
00750 updatePasswordText();
00751 }
00752
00753 void MPGFrame::onMissilesTextChanged(wxCommandEvent &) {
00754 if (ignoreTextEvent) {
00755 return;
00756 }
00757
00758 wxSpinCtrl *ctrl = XRCCTRL(*this, "IDSC_ITEMS_MISSILES", wxSpinCtrl);
00759 unsigned char value = static_cast<unsigned char>(ctrl->GetValue());
00760
00761 password.setMissiles(value);
00762
00763 updateRawMissiles(value);
00764 updatePasswordText();
00765 }
00766
00767 void MPGFrame::onPasswordChanged(wxCommandEvent &) {
00768 if (fixChecksumButton) {
00769 fixChecksumButton->Enable(false);
00770 }
00771
00772 if (ignoreTextEvent) {
00773 return;
00774 }
00775
00776 wxString value = getUnifiedPassword();
00777
00778 try {
00779 password = Password(value);
00780
00781 updatePasswordText();
00782 updateControls();
00783 } catch (InvalidPasswordException &e) {
00784 if (e.getError() == INVALID_CHECKSUM) {
00785 fixChecksumButton->Enable(true);
00786 }
00787 }
00788 }
00789
00790 void MPGFrame::onPasswordDebugPassword(wxCommandEvent &) {
00791 wxMessageBox(wxT("The debug password is NARPAS SWORD0 000000 000000\n"
00792 "It is Hard Coded and cannot be edited."),
00793 wxT("Debug Password"), wxICON_INFORMATION | wxOK);
00794 }
00795
00796 void MPGFrame::onPasswordEnding(wxCommandEvent &event) {
00797 wxTextCtrl *ctrl = XRCCTRL(*this, "IDT_MISC_GAMETIME", wxTextCtrl);
00798 int id = event.GetId();
00799
00800 if (id == XRCID("IDM_PASSWORD_ENDING1")) {
00801 ctrl->SetValue(wxT("0"));
00802 } else if (id == XRCID("IDM_PASSWORD_ENDING2")) {
00803 ctrl->SetValue(wxT("1024"));
00804 } else if (id == XRCID("IDM_PASSWORD_ENDING3")) {
00805 ctrl->SetValue(wxT("2560"));
00806 } else if (id == XRCID("IDM_PASSWORD_ENDING4")) {
00807 ctrl->SetValue(wxT("5632"));
00808 } else {
00809 ctrl->SetValue(wxT("31232"));
00810 }
00811 }
00812
00813 void MPGFrame::onPasswordGiveBosses(wxCommandEvent &) {
00814 password.setBit(KRAID);
00815 password.setBit(RIDLEY);
00816 password.setBit(MOTHERBRAIN);
00817
00818 updatePasswordText();
00819 updateControls();
00820 }
00821
00822 void MPGFrame::onPasswordGiveDoors(wxCommandEvent &) {
00823 password.setBit(REDDOOR_BS_LONGBEAM);
00824 password.setBit(REDDOOR_BS_TOURIANBRIDGE);
00825 password.setBit(REDDOOR_BS_BOMBS);
00826 password.setBit(REDDOOR_BS_ICEBEAM);
00827 password.setBit(REDDOOR_BS_VARIA);
00828
00829 password.setBit(REDDOOR_KL1);
00830 password.setBit(REDDOOR_KL2);
00831 password.setBit(REDDOOR_KL3);
00832 password.setBit(REDDOOR_KL4);
00833 password.setBit(REDDOOR_KL_KRAID);
00834
00835 password.setBit(REDDOOR_NF_HIGHJUMPBOOTS);
00836 password.setBit(REDDOOR_NF_SCREWATTACK);
00837 password.setBit(REDDOOR_NF_WAVEBEAM);
00838 password.setBit(REDDOOR_NF_ICEBEAM);
00839
00840 password.setBit(REDDOOR_RL);
00841 password.setBit(REDDOOR_RL_RIDLEY);
00842
00843 password.setBit(REDDOOR_T1);
00844 password.setBit(REDDOOR_T2);
00845 password.setBit(REDDOOR_T3);
00846
00847 updatePasswordText();
00848 updateControls();
00849 }
00850
00851 void MPGFrame::onPasswordGiveEnergyTanks(wxCommandEvent &) {
00852 password.setBit(ENERGYTANK_BS1);
00853 password.setBit(ENERGYTANK_BS2);
00854 password.setBit(ENERGYTANK_BS3);
00855
00856 password.setBit(ENERGYTANK_NF);
00857
00858 password.setBit(ENERGYTANK_KL);
00859 password.setBit(ENERGYTANK_KL_KRAID);
00860
00861 password.setBit(ENERGYTANK_RL);
00862 password.setBit(ENERGYTANK_RL_RIDLEY);
00863
00864 updatePasswordText();
00865 updateControls();
00866 }
00867
00868 void MPGFrame::onPasswordGiveItems(wxCommandEvent &) {
00869 password.setBit(MARUMARI);
00870 password.setBit(MARUMARI_TAKEN);
00871
00872 password.setBit(LONGBEAM);
00873 password.setBit(WAVEBEAM, false);
00874 password.setBit(ICEBEAM);
00875
00876 password.setBit(BOMBS);
00877 password.setBit(BOMBS_TAKEN);
00878
00879 password.setBit(HIGHJUMPBOOTS);
00880 password.setBit(HIGHJUMPBOOTS_TAKEN);
00881
00882 password.setBit(SCREWATTACK);
00883 password.setBit(SCREWATTACK_TAKEN);
00884
00885 password.setBit(VARIA);
00886 password.setBit(VARIA_TAKEN);
00887
00888 updatePasswordText();
00889 updateControls();
00890 }
00891
00892 void MPGFrame::onPasswordGiveMissiles(wxCommandEvent &) {
00893 int count = 0;
00894
00895 if (password.getBit(MISSILE_BS1)) ++count;
00896 if (password.getBit(MISSILE_BS2)) ++count;
00897 if (password.getBit(MISSILE_KL1)) ++count;
00898 if (password.getBit(MISSILE_KL2)) ++count;
00899 if (password.getBit(MISSILE_KL3)) ++count;
00900 if (password.getBit(MISSILE_KL4)) ++count;
00901 if (password.getBit(MISSILE_NF1)) ++count;
00902 if (password.getBit(MISSILE_NF2)) ++count;
00903 if (password.getBit(MISSILE_NF3)) ++count;
00904 if (password.getBit(MISSILE_NF4)) ++count;
00905 if (password.getBit(MISSILE_NF5)) ++count;
00906 if (password.getBit(MISSILE_NF6)) ++count;
00907 if (password.getBit(MISSILE_NF7)) ++count;
00908 if (password.getBit(MISSILE_NF8)) ++count;
00909 if (password.getBit(MISSILE_NF9)) ++count;
00910 if (password.getBit(MISSILE_NF10)) ++count;
00911 if (password.getBit(MISSILE_NF11)) ++count;
00912 if (password.getBit(MISSILE_NF12)) ++count;
00913 if (password.getBit(MISSILE_RL1)) ++count;
00914 if (password.getBit(MISSILE_RL2)) ++count;
00915 if (password.getBit(MISSILE_RL3)) ++count;
00916 if (password.getBit(KRAID) || password.getBit(KRAID_STATUE)) count += 15;
00917 if (password.getBit(RIDLEY) || password.getBit(RIDLEY_STATUE)) count += 15;
00918
00919 XRCCTRL(*this, "IDSC_ITEMS_MISSILES", wxSpinCtrl)->SetValue(count *= 5);
00920
00921 #ifndef __WXMSW__
00922
00923
00924 password.setMissiles(count);
00925
00926 updateRawMissiles(count);
00927 updatePasswordText();
00928 #endif
00929 }
00930
00931 void MPGFrame::onPasswordGiveMissileContainers(wxCommandEvent &) {
00932 password.setBit(MISSILE_BS1);
00933 password.setBit(MISSILE_BS2);
00934
00935 password.setBit(MISSILE_KL1);
00936 password.setBit(MISSILE_KL2);
00937 password.setBit(MISSILE_KL3);
00938 password.setBit(MISSILE_KL4);
00939
00940 password.setBit(MISSILE_NF1);
00941 password.setBit(MISSILE_NF2);
00942 password.setBit(MISSILE_NF3);
00943 password.setBit(MISSILE_NF4);
00944 password.setBit(MISSILE_NF5);
00945 password.setBit(MISSILE_NF6);
00946 password.setBit(MISSILE_NF7);
00947 password.setBit(MISSILE_NF8);
00948 password.setBit(MISSILE_NF9);
00949 password.setBit(MISSILE_NF10);
00950 password.setBit(MISSILE_NF11);
00951 password.setBit(MISSILE_NF12);
00952
00953 password.setBit(MISSILE_RL1);
00954 password.setBit(MISSILE_RL2);
00955 password.setBit(MISSILE_RL3);
00956
00957 updatePasswordText();
00958 updateControls();
00959 }
00960
00961 void MPGFrame::onPasswordGiveStatues(wxCommandEvent &) {
00962 password.setBit(KRAID_STATUE);
00963 password.setBit(RIDLEY_STATUE);
00964
00965 updatePasswordText();
00966 updateControls();
00967 }
00968
00969 void MPGFrame::onPasswordGiveZebetites(wxCommandEvent &) {
00970 password.setBit(ZEBETITE1);
00971 password.setBit(ZEBETITE2);
00972 password.setBit(ZEBETITE3);
00973 password.setBit(ZEBETITE4);
00974 password.setBit(ZEBETITE5);
00975
00976 updatePasswordText();
00977 updateControls();
00978 }
00979
00980 void MPGFrame::onPasswordPerfectGame(wxCommandEvent &) {
00981 password = Password();
00982
00983
00984 password.setMissiles(MAX_MISSILES);
00985
00986
00987 password.setBit(START_NF);
00988 password.setBit(START_KL);
00989
00990
00991 password.setBit(KRAID_STATUE);
00992 password.setBit(RIDLEY_STATUE);
00993
00994
00995 password.setBit(SWIMSUIT);
00996
00997
00998 password.setBit(KRAID);
00999 password.setBit(RIDLEY);
01000
01001
01002 wxCommandEvent event1(wxEVT_COMMAND_MENU_SELECTED,
01003 XRCID("IDM_PASSWORD_GIVE_ITEMS"));
01004 GetEventHandler()->AddPendingEvent(event1);
01005
01006
01007 wxCommandEvent event2(wxEVT_COMMAND_MENU_SELECTED,
01008 XRCID("IDM_PASSWORD_GIVE_MC"));
01009 GetEventHandler()->AddPendingEvent(event2);
01010
01011
01012 wxCommandEvent event3(wxEVT_COMMAND_MENU_SELECTED,
01013 XRCID("IDM_PASSWORD_GIVE_ET"));
01014 GetEventHandler()->AddPendingEvent(event3);
01015
01016
01017 wxCommandEvent event4(wxEVT_COMMAND_MENU_SELECTED,
01018 XRCID("IDM_PASSWORD_GIVE_DOORS"));
01019 GetEventHandler()->AddPendingEvent(event4);
01020
01021
01022 wxCommandEvent event5(wxEVT_COMMAND_MENU_SELECTED,
01023 XRCID("IDM_PASSWORD_GIVE_ZEBETITES"));
01024 GetEventHandler()->AddPendingEvent(event5);
01025 }
01026
01027 void MPGFrame::onPasswordReset(wxCommandEvent &) {
01028 int answer = wxMessageBox(wxT("Really Reset Password?"),
01029 wxT("Confirm: Reset Password"),
01030 wxYES_NO | wxICON_QUESTION);
01031
01032 if (answer == wxYES) {
01033 password = Password();
01034
01035 updatePasswordText();
01036 updateControls();
01037 }
01038 }
01039
01040 void MPGFrame::onRawBitChanged(wxCommandEvent &event) {
01041 wxCheckListBox *ptr =
01042 dynamic_cast<wxCheckListBox *>(event.GetEventObject());
01043 int bit = event.GetSelection();
01044 bool state = ptr->IsChecked(bit);
01045
01046 password.setBit(bit, state);
01047
01048 switch (bit) {
01049 case MARUMARI:
01050 case MARUMARI_TAKEN:
01051
01052 state = password.getBit(MARUMARI) &&
01053 password.getBit(MARUMARI_TAKEN);
01054 XRCCTRL(*this, "IDC_ITEMS_MARUMARI", wxCheckBox)->SetValue(state);
01055 break;
01056
01057 case MISSILE_BS1:
01058 XRCCTRL(*this, "IDC_ITEMS_MC_BS1", wxCheckBox)->SetValue(state);
01059 break;
01060
01061 case REDDOOR_BS_LONGBEAM:
01062 XRCCTRL(*this, "IDC_MISC_DOORS_BS_LONGBEAM",
01063 wxCheckBox)->SetValue(state);
01064 break;
01065
01066 case REDDOOR_BS_TOURIANBRIDGE:
01067 XRCCTRL(*this, "IDC_MISC_DOORS_BS_TOURIANBRIDGE",
01068 wxCheckBox)->SetValue(state);
01069 break;
01070
01071 case ENERGYTANK_BS1:
01072 XRCCTRL(*this, "IDC_ITEMS_ET_BS1", wxCheckBox)->SetValue(state);
01073 break;
01074
01075 case REDDOOR_BS_BOMBS:
01076 XRCCTRL(*this, "IDC_MISC_DOORS_BS_BOMBS",
01077 wxCheckBox)->SetValue(state);
01078 break;
01079
01080 case BOMBS:
01081 case BOMBS_TAKEN:
01082
01083 state = password.getBit(BOMBS) && password.getBit(BOMBS_TAKEN);
01084 XRCCTRL(*this, "IDC_ITEMS_BOMBS", wxCheckBox)->SetValue(state);
01085 break;
01086
01087 case REDDOOR_BS_ICEBEAM:
01088 XRCCTRL(*this, "IDC_MISC_DOORS_BS_ICEBEAM",
01089 wxCheckBox)->SetValue(state);
01090 break;
01091
01092 case MISSILE_BS2:
01093 XRCCTRL(*this, "IDC_ITEMS_MC_BS2", wxCheckBox)->SetValue(state);
01094 break;
01095
01096 case ENERGYTANK_BS2:
01097 XRCCTRL(*this, "IDC_ITEMS_ET_BS2", wxCheckBox)->SetValue(state);
01098 break;
01099
01100 case REDDOOR_BS_VARIA:
01101 XRCCTRL(*this, "IDC_MISC_DOORS_BS_VARIA",
01102 wxCheckBox)->SetValue(state);
01103 break;
01104
01105 case VARIA:
01106 case VARIA_TAKEN:
01107
01108 state = password.getBit(VARIA) && password.getBit(VARIA_TAKEN);
01109 XRCCTRL(*this, "IDC_ITEMS_VARIA", wxCheckBox)->SetValue(state);
01110 break;
01111
01112 case ENERGYTANK_BS3:
01113 XRCCTRL(*this, "IDC_ITEMS_ET_BS3", wxCheckBox)->SetValue(state);
01114 break;
01115
01116 case MISSILE_NF1:
01117 XRCCTRL(*this, "IDC_ITEMS_MC_NF1", wxCheckBox)->SetValue(state);
01118 break;
01119
01120 case MISSILE_NF2:
01121 XRCCTRL(*this, "IDC_ITEMS_MC_NF2", wxCheckBox)->SetValue(state);
01122 break;
01123
01124 case REDDOOR_NF_ICEBEAM:
01125 XRCCTRL(*this, "IDC_MISC_DOORS_NF_ICEBEAM",
01126 wxCheckBox)->SetValue(state);
01127 break;
01128
01129 case MISSILE_NF3:
01130 XRCCTRL(*this, "IDC_ITEMS_MC_NF3", wxCheckBox)->SetValue(state);
01131 break;
01132
01133 case MISSILE_NF4:
01134 XRCCTRL(*this, "IDC_ITEMS_MC_NF4", wxCheckBox)->SetValue(state);
01135 break;
01136
01137 case MISSILE_NF5:
01138 XRCCTRL(*this, "IDC_ITEMS_MC_NF5", wxCheckBox)->SetValue(state);
01139 break;
01140
01141 case MISSILE_NF6:
01142 XRCCTRL(*this, "IDC_ITEMS_MC_NF6", wxCheckBox)->SetValue(state);
01143 break;
01144
01145 case MISSILE_NF7:
01146 XRCCTRL(*this, "IDC_ITEMS_MC_NF7", wxCheckBox)->SetValue(state);
01147 break;
01148
01149 case MISSILE_NF8:
01150 XRCCTRL(*this, "IDC_ITEMS_MC_NF8", wxCheckBox)->SetValue(state);
01151 break;
01152
01153 case MISSILE_NF9:
01154 XRCCTRL(*this, "IDC_ITEMS_MC_NF9", wxCheckBox)->SetValue(state);
01155 break;
01156
01157 case REDDOOR_NF_HIGHJUMPBOOTS:
01158 XRCCTRL(*this, "IDC_MISC_DOORS_NF_HIGHJUMPBOOTS",
01159 wxCheckBox)->SetValue(state);
01160 break;
01161
01162 case HIGHJUMPBOOTS:
01163 case HIGHJUMPBOOTS_TAKEN:
01164
01165 state = password.getBit(HIGHJUMPBOOTS) &&
01166 password.getBit(HIGHJUMPBOOTS_TAKEN);
01167 XRCCTRL(*this, "IDC_ITEMS_HIGHJUMPBOOTS",
01168 wxCheckBox)->SetValue(state);
01169 break;
01170
01171 case REDDOOR_NF_SCREWATTACK:
01172 XRCCTRL(*this, "IDC_MISC_DOORS_NF_SCREWATTACK",
01173 wxCheckBox)->SetValue(state);
01174 break;
01175
01176 case SCREWATTACK:
01177 case SCREWATTACK_TAKEN:
01178
01179 state = password.getBit(SCREWATTACK) &&
01180 password.getBit(SCREWATTACK_TAKEN);
01181 XRCCTRL(*this, "IDC_ITEMS_SCREWATTACK",
01182 wxCheckBox)->SetValue(state);
01183 break;
01184
01185 case MISSILE_NF10:
01186 XRCCTRL(*this, "IDC_ITEMS_MC_NF10", wxCheckBox)->SetValue(state);
01187 break;
01188
01189 case MISSILE_NF11:
01190 XRCCTRL(*this, "IDC_ITEMS_MC_NF11", wxCheckBox)->SetValue(state);
01191 break;
01192
01193 case REDDOOR_NF_WAVEBEAM:
01194 XRCCTRL(*this, "IDC_MISC_DOORS_NF_WAVEBEAM",
01195 wxCheckBox)->SetValue(state);
01196 break;
01197
01198 case ENERGYTANK_NF:
01199 XRCCTRL(*this, "IDC_ITEMS_ET_NF", wxCheckBox)->SetValue(state);
01200 break;
01201
01202 case MISSILE_NF12:
01203 XRCCTRL(*this, "IDC_ITEMS_MC_NF12", wxCheckBox)->SetValue(state);
01204 break;
01205
01206 case REDDOOR_KL1:
01207 XRCCTRL(*this, "IDC_MISC_DOORS_KL1", wxCheckBox)->SetValue(state);
01208 break;
01209
01210 case MISSILE_KL1:
01211 XRCCTRL(*this, "IDC_ITEMS_MC_KL1", wxCheckBox)->SetValue(state);
01212 break;
01213
01214 case MISSILE_KL2:
01215 XRCCTRL(*this, "IDC_ITEMS_MC_KL2", wxCheckBox)->SetValue(state);
01216 break;
01217
01218 case REDDOOR_KL2:
01219 XRCCTRL(*this, "IDC_MISC_DOORS_KL2", wxCheckBox)->SetValue(state);
01220 break;
01221
01222 case ENERGYTANK_KL:
01223 XRCCTRL(*this, "IDC_ITEMS_ET_KL", wxCheckBox)->SetValue(state);
01224 break;
01225
01226 case REDDOOR_KL3:
01227 XRCCTRL(*this, "IDC_MISC_DOORS_KL3", wxCheckBox)->SetValue(state);
01228 break;
01229
01230 case REDDOOR_KL4:
01231 XRCCTRL(*this, "IDC_MISC_DOORS_KL4", wxCheckBox)->SetValue(state);
01232 break;
01233
01234 case MISSILE_KL3:
01235 XRCCTRL(*this, "IDC_ITEMS_MC_KL3", wxCheckBox)->SetValue(state);
01236 break;
01237
01238 case MISSILE_KL4:
01239 XRCCTRL(*this, "IDC_ITEMS_MC_KL4", wxCheckBox)->SetValue(state);
01240 break;
01241
01242 case REDDOOR_KL_KRAID:
01243 XRCCTRL(*this, "IDC_MISC_DOORS_KL_KRAID",
01244 wxCheckBox)->SetValue(state);
01245 break;
01246
01247 case ENERGYTANK_KL_KRAID:
01248 XRCCTRL(*this, "IDC_ITEMS_ET_KL_KRAID",
01249 wxCheckBox)->SetValue(state);
01250 break;
01251
01252 case MISSILE_RL1:
01253 XRCCTRL(*this, "IDC_ITEMS_MC_RL1", wxCheckBox)->SetValue(state);
01254 break;
01255
01256 case REDDOOR_RL:
01257 XRCCTRL(*this, "IDC_MISC_DOORS_RL", wxCheckBox)->SetValue(state);
01258 break;
01259
01260 case ENERGYTANK_RL:
01261 XRCCTRL(*this, "IDC_ITEMS_ET_RL", wxCheckBox)->SetValue(state);
01262 break;
01263
01264 case MISSILE_RL2:
01265 XRCCTRL(*this, "IDC_ITEMS_MC_RL2", wxCheckBox)->SetValue(state);
01266 break;
01267
01268 case REDDOOR_RL_RIDLEY:
01269 XRCCTRL(*this, "IDC_MISC_DOORS_RL_RIDLEY",
01270 wxCheckBox)->SetValue(state);
01271 break;
01272
01273 case ENERGYTANK_RL_RIDLEY:
01274 XRCCTRL(*this, "IDC_ITEMS_ET_RL_RIDLEY",
01275 wxCheckBox)->SetValue(state);
01276 break;
01277
01278 case MISSILE_RL3:
01279 XRCCTRL(*this, "IDC_ITEMS_MC_RL3", wxCheckBox)->SetValue(state);
01280 break;
01281
01282 case REDDOOR_T1:
01283 XRCCTRL(*this, "IDC_MISC_DOORS_T1", wxCheckBox)->SetValue(state);
01284 break;
01285
01286 case REDDOOR_T2:
01287 XRCCTRL(*this, "IDC_MISC_DOORS_T2", wxCheckBox)->SetValue(state);
01288 break;
01289
01290 case REDDOOR_T3:
01291 XRCCTRL(*this, "IDC_MISC_DOORS_T3", wxCheckBox)->SetValue(state);
01292 break;
01293
01294 case ZEBETITE1:
01295 XRCCTRL(*this, "IDC_MISC_ZEBETITE1", wxCheckBox)->SetValue(state);
01296 break;
01297
01298 case ZEBETITE2:
01299 XRCCTRL(*this, "IDC_MISC_ZEBETITE2", wxCheckBox)->SetValue(state);
01300 break;
01301
01302 case ZEBETITE3:
01303 XRCCTRL(*this, "IDC_MISC_ZEBETITE3", wxCheckBox)->SetValue(state);
01304 break;
01305
01306 case ZEBETITE4:
01307 XRCCTRL(*this, "IDC_MISC_ZEBETITE4", wxCheckBox)->SetValue(state);
01308 break;
01309
01310 case ZEBETITE5:
01311 XRCCTRL(*this, "IDC_MISC_ZEBETITE5", wxCheckBox)->SetValue(state);
01312 break;
01313
01314 case MOTHERBRAIN:
01315 XRCCTRL(*this, "IDC_MISC_BOSS_MOTHERBRAIN",
01316 wxCheckBox)->SetValue(state);
01317 break;
01318
01319 case START_NF:
01320 case START_KL:
01321 case START_RL:
01322 updateStartLocation();
01323 break;
01324
01325 case RESET:
01326 if (state) {
01327 wxMessageBox(wxT("This bit will produce an invalid password."),
01328 wxT("Warning: Invalid Password"),
01329 wxICON_EXCLAMATION | wxOK);
01330 }
01331
01332 break;
01333
01334 case SWIMSUIT:
01335 XRCCTRL(*this, "IDRB_MISC_ARMOR",
01336 wxRadioBox)->SetSelection(state ? 1 : 0);
01337 break;
01338
01339 case LONGBEAM:
01340 XRCCTRL(*this, "IDC_ITEMS_LONGBEAM", wxCheckBox)->SetValue(state);
01341 break;
01342
01343 case WAVEBEAM:
01344 XRCCTRL(*this, "IDC_ITEMS_WAVEBEAM", wxCheckBox)->SetValue(state);
01345 break;
01346
01347 case ICEBEAM:
01348 XRCCTRL(*this, "IDC_ITEMS_ICEBEAM", wxCheckBox)->SetValue(state);
01349 break;
01350
01351 case MISSILES:
01352 case MISSILES + 1:
01353 case MISSILES + 2:
01354 case MISSILES + 3:
01355 case MISSILES + 4:
01356 case MISSILES + 5:
01357 case MISSILES + 6:
01358 case MISSILES + 7:
01359 ignoreTextEvent = true;
01360 XRCCTRL(*this, "IDSC_ITEMS_MISSILES",
01361 wxSpinCtrl)->SetValue(password.getMissiles());
01362 ignoreTextEvent = false;
01363
01364 break;
01365
01366 case GAMETIME:
01367 case GAMETIME + 1:
01368 case GAMETIME + 2:
01369 case GAMETIME + 3:
01370 case GAMETIME + 4:
01371 case GAMETIME + 5:
01372 case GAMETIME + 6:
01373 case GAMETIME + 7:
01374 case GAMETIME + 8:
01375 case GAMETIME + 9:
01376 case GAMETIME + 10:
01377 case GAMETIME + 11:
01378 case GAMETIME + 12:
01379 case GAMETIME + 13:
01380 case GAMETIME + 14:
01381 case GAMETIME + 15:
01382 case GAMETIME + 16:
01383 case GAMETIME + 17:
01384 case GAMETIME + 18:
01385 case GAMETIME + 19:
01386 case GAMETIME + 20:
01387 case GAMETIME + 21:
01388 case GAMETIME + 22:
01389 case GAMETIME + 23:
01390 case GAMETIME + 24:
01391 case GAMETIME + 25:
01392 case GAMETIME + 26:
01393 case GAMETIME + 27:
01394 case GAMETIME + 28:
01395 case GAMETIME + 29:
01396 case GAMETIME + 30:
01397 case GAMETIME + 31:
01398 {
01399 unsigned long value =
01400 static_cast<unsigned long>(password.getGameTime());
01401
01402 ignoreTextEvent = true;
01403 XRCCTRL(*this, "IDT_MISC_GAMETIME",
01404 wxTextCtrl)->SetValue(wxString::Format(wxT("%lu"),
01405 value));
01406 ignoreTextEvent = false;
01407 }
01408
01409 break;
01410
01411 case RIDLEY:
01412 XRCCTRL(*this, "IDC_MISC_BOSS_RIDLEY", wxCheckBox)->SetValue(state);
01413 break;
01414
01415 case RIDLEY_STATUE:
01416 XRCCTRL(*this, "IDC_MISC_STATUE_RIDLEY",
01417 wxCheckBox)->SetValue(state);
01418 break;
01419
01420 case KRAID:
01421 XRCCTRL(*this, "IDC_MISC_BOSS_KRAID", wxCheckBox)->SetValue(state);
01422 break;
01423
01424 case KRAID_STATUE:
01425 XRCCTRL(*this, "IDC_MISC_STATUE_KRAID",
01426 wxCheckBox)->SetValue(state);
01427 break;
01428
01429 default:
01430
01431 break;
01432 }
01433
01434 updatePasswordText();
01435 }
01436
01437 void MPGFrame::onShiftTextChanged(wxCommandEvent &) {
01438 if (ignoreTextEvent) {
01439 return;
01440 }
01441
01442 wxSpinCtrl *ctrl = XRCCTRL(*this, "IDSC_RAW_SHIFT", wxSpinCtrl);
01443 unsigned char value = static_cast<unsigned char>(ctrl->GetValue());
01444
01445 password.setShift(value);
01446
01447 updatePasswordText();
01448 }
01449
01450 void MPGFrame::onStartLocationChanged(wxCommandEvent &event) {
01451 wxRadioBox *ptr = dynamic_cast<wxRadioBox *>(event.GetEventObject());
01452 int location = ptr->GetSelection();
01453 bool nf, kl, rl;
01454
01455 switch (location) {
01456 case 0:
01457
01458 nf = false;
01459 kl = false;
01460 rl = false;
01461 break;
01462
01463 case 1:
01464
01465 nf = false;
01466 kl = true;
01467 rl = false;
01468 break;
01469
01470 case 2:
01471
01472 nf = true;
01473 kl = false;
01474 rl = false;
01475 break;
01476
01477 case 3:
01478
01479 nf = false;
01480 kl = false;
01481 rl = true;
01482 break;
01483
01484 default:
01485
01486 nf = true;
01487 kl = true;
01488 rl = false;
01489 break;
01490 };
01491
01492 wxCheckListBox *ctrl = XRCCTRL(*this, "IDCLB_RAW_BITS", wxCheckListBox);
01493 ctrl->Check(START_NF, nf);
01494 ctrl->Check(START_KL, kl);
01495 ctrl->Check(START_RL, rl);
01496
01497 password.setBit(START_NF, nf);
01498 password.setBit(START_KL, kl);
01499 password.setBit(START_RL, rl);
01500
01501 updatePasswordText();
01502 }
01503
01504 void MPGFrame::onStatueChanged(wxCommandEvent &event) {
01505 int id = event.GetId();
01506 bool state = event.IsChecked();
01507 int bit;
01508
01509 if (id == XRCID("IDC_MISC_STATUE_KRAID")) {
01510 bit = KRAID_STATUE;
01511 } else {
01512 bit = RIDLEY_STATUE;
01513 }
01514
01515 XRCCTRL(*this, "IDCLB_RAW_BITS", wxCheckListBox)->Check(bit, state);
01516 password.setBit(bit, state);
01517
01518 updatePasswordText();
01519 }
01520
01521 void MPGFrame::onZebetiteChanged(wxCommandEvent &event) {
01522 int id = event.GetId();
01523 bool state = event.IsChecked();
01524 int bit;
01525
01526 if (id == XRCID("IDC_MISC_ZEBETITE1")) {
01527 bit = ZEBETITE1;
01528 } else if (id == XRCID("IDC_MISC_ZEBETITE2")) {
01529 bit = ZEBETITE2;
01530 } else if (id == XRCID("IDC_MISC_ZEBETITE3")) {
01531 bit = ZEBETITE3;
01532 } else if (id == XRCID("IDC_MISC_ZEBETITE4")) {
01533 bit = ZEBETITE4;
01534 } else {
01535 bit = ZEBETITE5;
01536 }
01537
01538 XRCCTRL(*this, "IDCLB_RAW_BITS", wxCheckListBox)->Check(bit, state);
01539 password.setBit(bit, state);
01540
01541 updatePasswordText();
01542 }
01543
01544 IMPLEMENT_CLASS(MPGFrame, wxFrame)
01545