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 #include <cmath>
00026
00027 #include <QActionGroup>
00028 #include <QCloseEvent>
00029 #include <QDesktopWidget>
00030 #include <QFileDialog>
00031 #include <QIntValidator>
00032 #include <QMessageBox>
00033 #include <QRegExpValidator>
00034 #include <QUrl>
00035
00036 #include "view/mainwindow.hh"
00037
00038 using namespace soesrame;
00039
00040 MainWindow::MainWindow() : QMainWindow(), ignoreSignals(false), open(false) {
00041
00042 ui.setupUi(this);
00043
00044
00045 connect(this, SIGNAL(sramFileOpened()), this, SLOT(onSRAMFileOpened()));
00046 connect(this, SIGNAL(sramFileOpened()), this, SIGNAL(uiChanged()));
00047 connect(this, SIGNAL(uiChanged()), this, SLOT(onUIChanged()));
00048
00049
00050 QActionGroup *gameActionGroup = new QActionGroup(this);
00051 gameActionGroup->addAction(ui.gameGame1);
00052 gameActionGroup->addAction(ui.gameGame2);
00053 gameActionGroup->addAction(ui.gameGame3);
00054 gameActionGroup->addAction(ui.gameGame4);
00055 gameActionGroup->setExclusive(true);
00056
00057
00058 QRegExpValidator *nameValidator =
00059 new QRegExpValidator(QRegExp("[A-Za-z0-9,.!'\\-&# ]*"), this);
00060 QIntValidator *under6Validator = new QIntValidator(0, 6, this);
00061 QIntValidator *under100Validator = new QIntValidator(0, 99, this);
00062 QIntValidator *under1000Validator = new QIntValidator(0, 999, this);
00063 QIntValidator *any24BitValidator = new QIntValidator(0, 16777215, this);
00064 QIntValidator *levelValidator = new QIntValidator(1, 99, this);
00065 QIntValidator *weaponLevelValidator = new QIntValidator(0, 255, this);
00066
00067
00068 ui.boyNameText->setValidator(nameValidator);
00069 ui.dogNameText->setValidator(nameValidator);
00070
00071
00072 ui.talonsText->setValidator(any24BitValidator);
00073 ui.jewelsText->setValidator(any24BitValidator);
00074 ui.goldCoinsText->setValidator(any24BitValidator);
00075 ui.creditsText->setValidator(any24BitValidator);
00076
00077
00078 ui.boyLevelText->setValidator(levelValidator);
00079 ui.boyCurrentHPText->setValidator(under1000Validator);
00080 ui.boyMaxHPText->setValidator(under1000Validator);
00081 ui.boyExperienceText->setValidator(any24BitValidator);
00082
00083 ui.dogLevelText->setValidator(levelValidator);
00084 ui.dogCurrentHPText->setValidator(under1000Validator);
00085 ui.dogMaxHPText->setValidator(under1000Validator);
00086 ui.dogExperienceText->setValidator(any24BitValidator);
00087 ui.dogAttackLevelText->setValidator(weaponLevelValidator);
00088
00089
00090 ui.boneCrusherText->setValidator(weaponLevelValidator);
00091 ui.gladiatorSwordText->setValidator(weaponLevelValidator);
00092 ui.crusaderSwordText->setValidator(weaponLevelValidator);
00093 ui.neutronBladeText->setValidator(weaponLevelValidator);
00094
00095 ui.spidersClawText->setValidator(weaponLevelValidator);
00096 ui.bronzeAxeText->setValidator(weaponLevelValidator);
00097 ui.knightBasherText->setValidator(weaponLevelValidator);
00098 ui.atomSmasherText->setValidator(weaponLevelValidator);
00099
00100 ui.hornSpearText->setValidator(weaponLevelValidator);
00101 ui.bronzeSpearText->setValidator(weaponLevelValidator);
00102 ui.lanceWeaponText->setValidator(weaponLevelValidator);
00103 ui.laserLanceText->setValidator(weaponLevelValidator);
00104
00105
00106 ui.acornText->setValidator(under100Validator);
00107 ui.ashText->setValidator(under100Validator);
00108 ui.atlasMedallionText->setValidator(under100Validator);
00109 ui.boneText->setValidator(under100Validator);
00110 ui.brimstoneText->setValidator(under100Validator);
00111 ui.clayText->setValidator(under100Validator);
00112 ui.crystalText->setValidator(under100Validator);
00113 ui.dryIceText->setValidator(under100Validator);
00114 ui.ethanolText->setValidator(under100Validator);
00115 ui.featherText->setValidator(under100Validator);
00116 ui.greaseText->setValidator(under100Validator);
00117 ui.gunpowderText->setValidator(under100Validator);
00118 ui.ironText->setValidator(under100Validator);
00119 ui.limestoneText->setValidator(under100Validator);
00120 ui.meteoriteText->setValidator(under100Validator);
00121 ui.mudPepperText->setValidator(under100Validator);
00122 ui.mushroomText->setValidator(under100Validator);
00123 ui.oilText->setValidator(under100Validator);
00124 ui.rootText->setValidator(under100Validator);
00125 ui.vinegarText->setValidator(under100Validator);
00126 ui.waterText->setValidator(under100Validator);
00127 ui.waxText->setValidator(under100Validator);
00128
00129
00130 ui.acidRainText->setValidator(under100Validator);
00131 ui.atlasText->setValidator(under100Validator);
00132 ui.barrierText->setValidator(under100Validator);
00133 ui.callUpText->setValidator(under100Validator);
00134 ui.corrosionText->setValidator(under100Validator);
00135 ui.crushText->setValidator(under100Validator);
00136 ui.cureText->setValidator(under100Validator);
00137 ui.defendText->setValidator(under100Validator);
00138 ui.doubleDrainText->setValidator(under100Validator);
00139 ui.drainText->setValidator(under100Validator);
00140 ui.energizeText->setValidator(under100Validator);
00141 ui.escapeText->setValidator(under100Validator);
00142 ui.explosionText->setValidator(under100Validator);
00143 ui.fireballText->setValidator(under100Validator);
00144 ui.firePowerText->setValidator(under100Validator);
00145 ui.flashText->setValidator(under100Validator);
00146 ui.forceFieldText->setValidator(under100Validator);
00147 ui.hardBallText->setValidator(under100Validator);
00148 ui.healText->setValidator(under100Validator);
00149 ui.lanceAlchemyText->setValidator(under100Validator);
00150 ui.levitateText->setValidator(under100Validator);
00151 ui.lightningStormText->setValidator(under100Validator);
00152 ui.miracleCureText->setValidator(under100Validator);
00153 ui.nitroText->setValidator(under100Validator);
00154 ui.oneUpText->setValidator(under100Validator);
00155 ui.reflectText->setValidator(under100Validator);
00156 ui.regrowthText->setValidator(under100Validator);
00157 ui.revealerText->setValidator(under100Validator);
00158 ui.reviveText->setValidator(under100Validator);
00159 ui.slowBurnText->setValidator(under100Validator);
00160 ui.speedText->setValidator(under100Validator);
00161 ui.stingText->setValidator(under100Validator);
00162 ui.stopText->setValidator(under100Validator);
00163 ui.superHealText->setValidator(under100Validator);
00164
00165
00166 ui.petalText->setValidator(under6Validator);
00167 ui.nectarText->setValidator(under6Validator);
00168 ui.honeyText->setValidator(under6Validator);
00169 ui.dogBiscuitText->setValidator(under6Validator);
00170 ui.wingsText->setValidator(under6Validator);
00171 ui.essenceText->setValidator(under6Validator);
00172 ui.pixieDustText->setValidator(under6Validator);
00173 ui.callBeadText->setValidator(under100Validator);
00174
00175
00176 ui.leatherCollarText->setValidator(under6Validator);
00177 ui.spikyCollarText->setValidator(under6Validator);
00178 ui.defenderCollarText->setValidator(under6Validator);
00179 ui.spotsCollarText->setValidator(under6Validator);
00180
00181
00182 ui.grassVestText->setValidator(under6Validator);
00183 ui.shellPlateText->setValidator(under6Validator);
00184 ui.dinoSkinText->setValidator(under6Validator);
00185 ui.bronzeArmorText->setValidator(under6Validator);
00186 ui.stoneVestText->setValidator(under6Validator);
00187 ui.centurionCapeText->setValidator(under6Validator);
00188 ui.silverMailText->setValidator(under6Validator);
00189 ui.goldPlatedVestText->setValidator(under6Validator);
00190 ui.shiningArmorText->setValidator(under6Validator);
00191 ui.magnaMailText->setValidator(under6Validator);
00192 ui.titaniumVestText->setValidator(under6Validator);
00193 ui.virtualVestText->setValidator(under6Validator);
00194
00195
00196 ui.thunderBallText->setValidator(under100Validator);
00197 ui.particleBombText->setValidator(under100Validator);
00198 ui.cryoBlastText->setValidator(under100Validator);
00199
00200
00201 ui.grassHatText->setValidator(under6Validator);
00202 ui.shellHatText->setValidator(under6Validator);
00203 ui.dinoHelmText->setValidator(under6Validator);
00204 ui.bronzeHelmetText->setValidator(under6Validator);
00205 ui.obsidianHelmText->setValidator(under6Validator);
00206 ui.centurionHelmText->setValidator(under6Validator);
00207 ui.titansCrownText->setValidator(under6Validator);
00208 ui.dragonHelmText->setValidator(under6Validator);
00209 ui.knightsHelmText->setValidator(under6Validator);
00210 ui.lightningHelmText->setValidator(under6Validator);
00211 ui.oldReliableText->setValidator(under6Validator);
00212 ui.brainstormText->setValidator(under6Validator);
00213
00214
00215 ui.vineBraceletText->setValidator(under6Validator);
00216 ui.mammothGuardText->setValidator(under6Validator);
00217 ui.clawGuardText->setValidator(under6Validator);
00218 ui.serpentBracerText->setValidator(under6Validator);
00219 ui.bronzeGauntletText->setValidator(under6Validator);
00220 ui.glovesOfRaText->setValidator(under6Validator);
00221 ui.ironBracerText->setValidator(under6Validator);
00222 ui.magiciansRingText->setValidator(under6Validator);
00223 ui.dragonsClawText->setValidator(under6Validator);
00224 ui.cybergloveText->setValidator(under6Validator);
00225 ui.protectorRingText->setValidator(under6Validator);
00226 ui.virtualGloveText->setValidator(under6Validator);
00227
00228
00229 ui.annihilationAmuletText->setValidator(under100Validator);
00230 ui.beadsText->setValidator(under100Validator);
00231 ui.ceramicPotText->setValidator(under100Validator);
00232 ui.chickenText->setValidator(under100Validator);
00233 ui.goldenJackalText->setValidator(under100Validator);
00234 ui.jeweledScarabText->setValidator(under100Validator);
00235 ui.limestoneTabletText->setValidator(under100Validator);
00236 ui.perfumeText->setValidator(under100Validator);
00237 ui.riceText->setValidator(under100Validator);
00238 ui.spiceText->setValidator(under100Validator);
00239 ui.souvenirSpoonText->setValidator(under100Validator);
00240 ui.tapestryText->setValidator(under100Validator);
00241 ui.ticketForExhibitionText->setValidator(under100Validator);
00242 }
00243
00244 bool MainWindow::confirmClose() {
00245 if (sram->isModified()) {
00246 int choice =
00247 QMessageBox::question(this, "Warning: Unsaved Changes",
00248 "Save changes?", QMessageBox::Yes,
00249 QMessageBox::No, QMessageBox::Cancel);
00250
00251 if (choice == QMessageBox::Yes) {
00252 ui.fileSave->trigger();
00253
00254
00255 if (sram->isModified()) {
00256 return false;
00257 }
00258 } else if (choice == QMessageBox::Cancel) {
00259 return false;
00260 }
00261 }
00262
00263 return true;
00264 }
00265
00266 void MainWindow::openSRAM(const QString &filename) {
00267 try {
00268 sram = new SRAMFile(filename);
00269 sramFile = new QString(filename);
00270 open = true;
00271
00272 emit sramFileOpened();
00273 } catch (InvalidSRAMFileException &e) {
00274 QString temp;
00275
00276 if (e.getError() == ISFE_INVALIDSIZE) {
00277 temp = "Invalid SRAM File Size";
00278 } else if (e.getError() == ISFE_NOVALIDGAMES) {
00279 temp = "No Save Games Found";
00280 }
00281
00282 QMessageBox::warning(this, "Unable to Open SRAM File", temp,
00283 QMessageBox::Ok, QMessageBox::NoButton);
00284 }
00285 }
00286
00287 void MainWindow::setAlchemy(enum sf_alchemy alchemy, int state) {
00288 if (ignoreSignals) {
00289 return;
00290 }
00291
00292 Q_ASSERT(open);
00293
00294 sram->setAlchemy(alchemy, (state != 0));
00295 emit uiChanged();
00296 }
00297
00298 void MainWindow::setAlchemyLevelMajor(enum sf_alchemy alchemy, int value) {
00299 if (ignoreSignals) {
00300 return;
00301 }
00302
00303 Q_ASSERT(open);
00304
00305 std::pair<int, int> temp = sram->getAlchemyLevel(alchemy);
00306 temp.first = value;
00307 sram->setAlchemyLevel(alchemy, temp);
00308
00309 emit uiChanged();
00310 }
00311
00312 void MainWindow::setAlchemyLevelMinor(enum sf_alchemy alchemy,
00313 const QString &text) {
00314 Q_ASSERT(open);
00315
00316 std::pair<int, int> temp = sram->getAlchemyLevel(alchemy);
00317 temp.second = text.toInt();
00318 sram->setAlchemyLevel(alchemy, temp);
00319
00320 emit uiChanged();
00321 }
00322
00323 void MainWindow::setCharm(enum sf_charm charm, int state) {
00324 if (ignoreSignals) {
00325 return;
00326 }
00327
00328 Q_ASSERT(open);
00329
00330 sram->setCharm(charm, (state != 0));
00331 emit uiChanged();
00332 }
00333
00334 void MainWindow::setGame(int game) {
00335 Q_ASSERT(open);
00336 Q_ASSERT((game >= 0) && (game < 4));
00337
00338 sram->setGame(game);
00339 emit sramFileOpened();
00340 }
00341
00342 void MainWindow::setIngredient(enum sf_ingredient ingredient,
00343 const QString &text) {
00344 Q_ASSERT(open);
00345
00346 sram->setIngredient(ingredient, text.toInt());
00347 emit uiChanged();
00348 }
00349
00350 void MainWindow::setItem(enum sf_item item, const QString &text) {
00351 Q_ASSERT(open);
00352
00353 sram->setItem(item, text.toInt());
00354 emit uiChanged();
00355 }
00356
00357 void MainWindow::setMoney(enum sf_money money, const QString &text) {
00358 Q_ASSERT(open);
00359
00360 sram->setMoney(money, text.toUInt());
00361 emit uiChanged();
00362 }
00363
00364 void MainWindow::setTradeGood(enum sf_tradegood tradegood,
00365 const QString &text) {
00366 Q_ASSERT(open);
00367
00368 sram->setTradeGood(tradegood, text.toInt());
00369 emit uiChanged();
00370 }
00371
00372 void MainWindow::setWeapon(enum sf_weapon weapon, int state) {
00373 if (ignoreSignals) {
00374 return;
00375 }
00376
00377 Q_ASSERT(open);
00378
00379 sram->setWeapon(weapon, (state != 0));
00380 emit uiChanged();
00381 }
00382
00383 void MainWindow::setWeaponLevelMajor(enum sf_weapon weapon, int value) {
00384 if (ignoreSignals) {
00385 return;
00386 }
00387
00388 Q_ASSERT(open);
00389
00390 std::pair<int, int> temp = sram->getWeaponLevel(weapon);
00391 temp.first = value;
00392 sram->setWeaponLevel(weapon, temp);
00393
00394 showActualLevel(temp, weapon);
00395 emit uiChanged();
00396 }
00397
00398 void MainWindow::setWeaponLevelMinor(enum sf_weapon weapon,
00399 const QString &text) {
00400 Q_ASSERT(open);
00401
00402 std::pair<int, int> temp = sram->getWeaponLevel(weapon);
00403 temp.second = text.toInt();
00404 sram->setWeaponLevel(weapon, temp);
00405
00406 showActualLevel(temp, weapon);
00407 emit uiChanged();
00408 }
00409
00410 void MainWindow::show() {
00411 QRect screenRect = QApplication::desktop()->availableGeometry();
00412 QRect windowRect = frameGeometry();
00413
00414 move(screenRect.width() / 2 - windowRect.width() / 2,
00415 screenRect.height() / 2 - windowRect.height() / 2);
00416
00417 emit uiChanged();
00418
00419 QMainWindow::show();
00420 }
00421
00422 void MainWindow::showActualLevel(std::pair<int, int> level,
00423 enum sf_weapon weapon) {
00424 level.second = static_cast<int>(std::floor(level.second / 2.56));
00425
00426 QString status =
00427 QString("Actual Level %1:%2").arg(level.first).arg(level.second);
00428
00429 switch (weapon) {
00430 case SF_BONECRUSHER:
00431 ui.boneCrusherSpinner->setStatusTip(status);
00432 ui.boneCrusherText->setStatusTip(status);
00433 break;
00434
00435 case SF_GLADIATORSWORD:
00436 ui.gladiatorSwordSpinner->setStatusTip(status);
00437 ui.gladiatorSwordText->setStatusTip(status);
00438 break;
00439
00440 case SF_CRUSADERSWORD:
00441 ui.crusaderSwordSpinner->setStatusTip(status);
00442 ui.crusaderSwordText->setStatusTip(status);
00443 break;
00444
00445 case SF_NEUTRONBLADE:
00446 ui.neutronBladeSpinner->setStatusTip(status);
00447 ui.neutronBladeText->setStatusTip(status);
00448 break;
00449
00450 case SF_SPIDERSCLAW:
00451 ui.spidersClawSpinner->setStatusTip(status);
00452 ui.spidersClawText->setStatusTip(status);
00453 break;
00454
00455 case SF_BRONZEAXE:
00456 ui.bronzeAxeSpinner->setStatusTip(status);
00457 ui.bronzeAxeText->setStatusTip(status);
00458 break;
00459
00460 case SF_KNIGHTBASHER:
00461 ui.knightBasherSpinner->setStatusTip(status);
00462 ui.knightBasherText->setStatusTip(status);
00463 break;
00464
00465 case SF_ATOMSMASHER:
00466 ui.atomSmasherSpinner->setStatusTip(status);
00467 ui.atomSmasherText->setStatusTip(status);
00468 break;
00469
00470 case SF_HORNSPEAR:
00471 ui.hornSpearSpinner->setStatusTip(status);
00472 ui.hornSpearText->setStatusTip(status);
00473 break;
00474
00475 case SF_BRONZESPEAR:
00476 ui.bronzeSpearSpinner->setStatusTip(status);
00477 ui.bronzeSpearText->setStatusTip(status);
00478 break;
00479
00480 case SF_LANCEWEAPON:
00481 ui.lanceWeaponSpinner->setStatusTip(status);
00482 ui.lanceWeaponText->setStatusTip(status);
00483 break;
00484
00485 case SF_LASERLANCE:
00486 ui.laserLanceSpinner->setStatusTip(status);
00487 ui.laserLanceText->setStatusTip(status);
00488 break;
00489
00490 default:
00491 ui.dogAttackLevelSpinner->setStatusTip(status);
00492 ui.dogAttackLevelText->setStatusTip(status);
00493 break;
00494 }
00495 }
00496
00497 void MainWindow::closeEvent(QCloseEvent *event) {
00498 if (open && !confirmClose()) {
00499 event->ignore();
00500 } else {
00501 event->accept();
00502 }
00503 }
00504
00505 void MainWindow::dragEnterEvent(QDragEnterEvent *event) {
00506
00507 if (event->mimeData()->hasFormat("text/uri-list")) {
00508 event->acceptProposedAction();
00509 }
00510 }
00511
00512 void MainWindow::dropEvent(QDropEvent *event) {
00513 QList<QUrl> urls = event->mimeData()->urls();
00514 QString filename = urls.first().toLocalFile();
00515
00516
00517 if (filename.isEmpty()) {
00518 return;
00519 }
00520
00521 if (open) {
00522 ui.fileClose->trigger();
00523
00524
00525 if (open) {
00526 return;
00527 }
00528 }
00529
00530 openSRAM(filename);
00531 }
00532
00533 void MainWindow::onSRAMFileOpened() {
00534 Q_ASSERT(sram);
00535
00536 std::pair<int, int> level;
00537
00538 ignoreSignals = true;
00539
00540
00541 ui.boyNameText->setText(sram->getName(SF_BOY));
00542 ui.dogNameText->setText(sram->getName(SF_DOG));
00543
00544
00545 ui.talonsText->setText(QString::number(sram->getMoney(SF_TALONS)));
00546 ui.jewelsText->setText(QString::number(sram->getMoney(SF_JEWELS)));
00547 ui.goldCoinsText->setText(QString::number(sram->getMoney(SF_GOLDCOINS)));
00548 ui.creditsText->setText(QString::number(sram->getMoney(SF_CREDITS)));
00549
00550
00551 ui.boyLevelText->setText(QString::number(sram->getLevel(SF_BOY)));
00552 ui.boyCurrentHPText->setText(QString::number(sram->getCurrentHP(SF_BOY)));
00553 ui.boyMaxHPText->setText(QString::number(sram->getMaxHP(SF_BOY)));
00554 ui.boyExperienceText->setText(QString::number(sram->getExperience(SF_BOY)));
00555
00556
00557 ui.dogLevelText->setText(QString::number(sram->getLevel(SF_DOG)));
00558 ui.dogCurrentHPText->setText(QString::number(sram->getCurrentHP(SF_DOG)));
00559 ui.dogMaxHPText->setText(QString::number(sram->getMaxHP(SF_DOG)));
00560 ui.dogExperienceText->setText(QString::number(sram->getExperience(SF_DOG)));
00561
00562 level = sram->getAttackLevel();
00563 ui.dogAttackLevelSpinner->setValue(level.first);
00564 ui.dogAttackLevelText->setText(QString::number(level.second));
00565 showActualLevel(level);
00566
00567
00568 level = sram->getWeaponLevel(SF_BONECRUSHER);
00569 ui.boneCrusherCheck->setChecked(sram->hasWeapon(SF_BONECRUSHER));
00570 ui.boneCrusherSpinner->setValue(level.first);
00571 ui.boneCrusherText->setText(QString::number(level.second));
00572 showActualLevel(level, SF_BONECRUSHER);
00573
00574 level = sram->getWeaponLevel(SF_GLADIATORSWORD);
00575 ui.gladiatorSwordCheck->setChecked(sram->hasWeapon(SF_GLADIATORSWORD));
00576 ui.gladiatorSwordSpinner->setValue(level.first);
00577 ui.gladiatorSwordText->setText(QString::number(level.second));
00578 showActualLevel(level, SF_GLADIATORSWORD);
00579
00580 level = sram->getWeaponLevel(SF_CRUSADERSWORD);
00581 ui.crusaderSwordCheck->setChecked(sram->hasWeapon(SF_CRUSADERSWORD));
00582 ui.crusaderSwordSpinner->setValue(level.first);
00583 ui.crusaderSwordText->setText(QString::number(level.second));
00584 showActualLevel(level, SF_CRUSADERSWORD);
00585
00586 level = sram->getWeaponLevel(SF_NEUTRONBLADE);
00587 ui.neutronBladeCheck->setChecked(sram->hasWeapon(SF_NEUTRONBLADE));
00588 ui.neutronBladeSpinner->setValue(level.first);
00589 ui.neutronBladeText->setText(QString::number(level.second));
00590 showActualLevel(level, SF_NEUTRONBLADE);
00591
00592 level = sram->getWeaponLevel(SF_SPIDERSCLAW);
00593 ui.spidersClawCheck->setChecked(sram->hasWeapon(SF_SPIDERSCLAW));
00594 ui.spidersClawSpinner->setValue(level.first);
00595 ui.spidersClawText->setText(QString::number(level.second));
00596 showActualLevel(level, SF_SPIDERSCLAW);
00597
00598 level = sram->getWeaponLevel(SF_BRONZEAXE);
00599 ui.bronzeAxeCheck->setChecked(sram->hasWeapon(SF_BRONZEAXE));
00600 ui.bronzeAxeSpinner->setValue(level.first);
00601 ui.bronzeAxeText->setText(QString::number(level.second));
00602 showActualLevel(level, SF_BRONZEAXE);
00603
00604 level = sram->getWeaponLevel(SF_KNIGHTBASHER);
00605 ui.knightBasherCheck->setChecked(sram->hasWeapon(SF_KNIGHTBASHER));
00606 ui.knightBasherSpinner->setValue(level.first);
00607 ui.knightBasherText->setText(QString::number(level.second));
00608 showActualLevel(level, SF_KNIGHTBASHER);
00609
00610 level = sram->getWeaponLevel(SF_ATOMSMASHER);
00611 ui.atomSmasherCheck->setChecked(sram->hasWeapon(SF_ATOMSMASHER));
00612 ui.atomSmasherSpinner->setValue(level.first);
00613 ui.atomSmasherText->setText(QString::number(level.second));
00614 showActualLevel(level, SF_ATOMSMASHER);
00615
00616 level = sram->getWeaponLevel(SF_HORNSPEAR);
00617 ui.hornSpearCheck->setChecked(sram->hasWeapon(SF_HORNSPEAR));
00618 ui.hornSpearSpinner->setValue(level.first);
00619 ui.hornSpearText->setText(QString::number(level.second));
00620 showActualLevel(level, SF_HORNSPEAR);
00621
00622 level = sram->getWeaponLevel(SF_BRONZESPEAR);
00623 ui.bronzeSpearCheck->setChecked(sram->hasWeapon(SF_BRONZESPEAR));
00624 ui.bronzeSpearSpinner->setValue(level.first);
00625 ui.bronzeSpearText->setText(QString::number(level.second));
00626 showActualLevel(level, SF_BRONZESPEAR);
00627
00628 level = sram->getWeaponLevel(SF_LANCEWEAPON);
00629 ui.lanceWeaponCheck->setChecked(sram->hasWeapon(SF_LANCEWEAPON));
00630 ui.lanceWeaponSpinner->setValue(level.first);
00631 ui.lanceWeaponText->setText(QString::number(level.second));
00632 showActualLevel(level, SF_LANCEWEAPON);
00633
00634 level = sram->getWeaponLevel(SF_LASERLANCE);
00635 ui.laserLanceCheck->setChecked(sram->hasWeapon(SF_LASERLANCE));
00636 ui.laserLanceSpinner->setValue(level.first);
00637 ui.laserLanceText->setText(QString::number(level.second));
00638 showActualLevel(level, SF_LASERLANCE);
00639
00640 ui.bazookaCheck->setChecked(sram->hasWeapon(SF_BAZOOKA));
00641
00642
00643 ui.acornText->setText(QString::number(sram->getIngredient(SF_ACORN)));
00644 ui.ashText->setText(QString::number(sram->getIngredient(SF_ASH)));
00645 ui.atlasMedallionText->setText(QString::number(sram->getIngredient(SF_ATLASMEDALLION)));
00646 ui.boneText->setText(QString::number(sram->getIngredient(SF_BONE)));
00647 ui.brimstoneText->setText(QString::number(sram->getIngredient(SF_BRIMSTONE)));
00648 ui.clayText->setText(QString::number(sram->getIngredient(SF_CLAY)));
00649 ui.crystalText->setText(QString::number(sram->getIngredient(SF_CRYSTAL)));
00650 ui.dryIceText->setText(QString::number(sram->getIngredient(SF_DRYICE)));
00651 ui.ethanolText->setText(QString::number(sram->getIngredient(SF_ETHANOL)));
00652 ui.featherText->setText(QString::number(sram->getIngredient(SF_FEATHER)));
00653 ui.greaseText->setText(QString::number(sram->getIngredient(SF_GREASE)));
00654 ui.gunpowderText->setText(QString::number(sram->getIngredient(SF_GUNPOWDER)));
00655 ui.ironText->setText(QString::number(sram->getIngredient(SF_IRON)));
00656 ui.limestoneText->setText(QString::number(sram->getIngredient(SF_LIMESTONE)));
00657 ui.meteoriteText->setText(QString::number(sram->getIngredient(SF_METEORITE)));
00658 ui.mudPepperText->setText(QString::number(sram->getIngredient(SF_MUDPEPPER)));
00659 ui.mushroomText->setText(QString::number(sram->getIngredient(SF_MUSHROOM)));
00660 ui.oilText->setText(QString::number(sram->getIngredient(SF_OIL)));
00661 ui.rootText->setText(QString::number(sram->getIngredient(SF_ROOT)));
00662 ui.vinegarText->setText(QString::number(sram->getIngredient(SF_VINEGAR)));
00663 ui.waterText->setText(QString::number(sram->getIngredient(SF_WATER)));
00664 ui.waxText->setText(QString::number(sram->getIngredient(SF_WAX)));
00665
00666
00667 level = sram->getAlchemyLevel(SF_ACIDRAIN);
00668 ui.acidRainCheck->setChecked(sram->hasAlchemy(SF_ACIDRAIN));
00669 ui.acidRainSpinner->setValue(level.first);
00670 ui.acidRainText->setText(QString::number(level.second));
00671
00672 level = sram->getAlchemyLevel(SF_ATLAS);
00673 ui.atlasCheck->setChecked(sram->hasAlchemy(SF_ATLAS));
00674 ui.atlasSpinner->setValue(level.first);
00675 ui.atlasText->setText(QString::number(level.second));
00676
00677 level = sram->getAlchemyLevel(SF_BARRIER);
00678 ui.barrierCheck->setChecked(sram->hasAlchemy(SF_BARRIER));
00679 ui.barrierSpinner->setValue(level.first);
00680 ui.barrierText->setText(QString::number(level.second));
00681
00682 level = sram->getAlchemyLevel(SF_CALLUP);
00683 ui.callUpCheck->setChecked(sram->hasAlchemy(SF_CALLUP));
00684 ui.callUpSpinner->setValue(level.first);
00685 ui.callUpText->setText(QString::number(level.second));
00686
00687 level = sram->getAlchemyLevel(SF_CORROSION);
00688 ui.corrosionCheck->setChecked(sram->hasAlchemy(SF_CORROSION));
00689 ui.corrosionSpinner->setValue(level.first);
00690 ui.corrosionText->setText(QString::number(level.second));
00691
00692 level = sram->getAlchemyLevel(SF_CRUSH);
00693 ui.crushCheck->setChecked(sram->hasAlchemy(SF_CRUSH));
00694 ui.crushSpinner->setValue(level.first);
00695 ui.crushText->setText(QString::number(level.second));
00696
00697 level = sram->getAlchemyLevel(SF_CURE);
00698 ui.cureCheck->setChecked(sram->hasAlchemy(SF_CURE));
00699 ui.cureSpinner->setValue(level.first);
00700 ui.cureText->setText(QString::number(level.second));
00701
00702 level = sram->getAlchemyLevel(SF_DEFEND);
00703 ui.defendCheck->setChecked(sram->hasAlchemy(SF_DEFEND));
00704 ui.defendSpinner->setValue(level.first);
00705 ui.defendText->setText(QString::number(level.second));
00706
00707 level = sram->getAlchemyLevel(SF_DOUBLEDRAIN);
00708 ui.doubleDrainCheck->setChecked(sram->hasAlchemy(SF_DOUBLEDRAIN));
00709 ui.doubleDrainSpinner->setValue(level.first);
00710 ui.doubleDrainText->setText(QString::number(level.second));
00711
00712 level = sram->getAlchemyLevel(SF_DRAIN);
00713 ui.drainCheck->setChecked(sram->hasAlchemy(SF_DRAIN));
00714 ui.drainSpinner->setValue(level.first);
00715 ui.drainText->setText(QString::number(level.second));
00716
00717 level = sram->getAlchemyLevel(SF_ENERGIZE);
00718 ui.energizeCheck->setChecked(sram->hasAlchemy(SF_ENERGIZE));
00719 ui.energizeSpinner->setValue(level.first);
00720 ui.energizeText->setText(QString::number(level.second));
00721
00722 level = sram->getAlchemyLevel(SF_ESCAPE);
00723 ui.escapeCheck->setChecked(sram->hasAlchemy(SF_ESCAPE));
00724 ui.escapeSpinner->setValue(level.first);
00725 ui.escapeText->setText(QString::number(level.second));
00726
00727 level = sram->getAlchemyLevel(SF_EXPLOSION);
00728 ui.explosionCheck->setChecked(sram->hasAlchemy(SF_EXPLOSION));
00729 ui.explosionSpinner->setValue(level.first);
00730 ui.explosionText->setText(QString::number(level.second));
00731
00732 level = sram->getAlchemyLevel(SF_FIREBALL);
00733 ui.fireballCheck->setChecked(sram->hasAlchemy(SF_FIREBALL));
00734 ui.fireballSpinner->setValue(level.first);
00735 ui.fireballText->setText(QString::number(level.second));
00736
00737 level = sram->getAlchemyLevel(SF_FIREPOWER);
00738 ui.firePowerCheck->setChecked(sram->hasAlchemy(SF_FIREPOWER));
00739 ui.firePowerSpinner->setValue(level.first);
00740 ui.firePowerText->setText(QString::number(level.second));
00741
00742 level = sram->getAlchemyLevel(SF_FLASH);
00743 ui.flashCheck->setChecked(sram->hasAlchemy(SF_FLASH));
00744 ui.flashSpinner->setValue(level.first);
00745 ui.flashText->setText(QString::number(level.second));
00746
00747 level = sram->getAlchemyLevel(SF_FORCEFIELD);
00748 ui.forceFieldCheck->setChecked(sram->hasAlchemy(SF_FORCEFIELD));
00749 ui.forceFieldSpinner->setValue(level.first);
00750 ui.forceFieldText->setText(QString::number(level.second));
00751
00752 level = sram->getAlchemyLevel(SF_HARDBALL);
00753 ui.hardBallCheck->setChecked(sram->hasAlchemy(SF_HARDBALL));
00754 ui.hardBallSpinner->setValue(level.first);
00755 ui.hardBallText->setText(QString::number(level.second));
00756
00757 level = sram->getAlchemyLevel(SF_HEAL);
00758 ui.healCheck->setChecked(sram->hasAlchemy(SF_HEAL));
00759 ui.healSpinner->setValue(level.first);
00760 ui.healText->setText(QString::number(level.second));
00761
00762 level = sram->getAlchemyLevel(SF_LANCEALCHEMY);
00763 ui.lanceAlchemyCheck->setChecked(sram->hasAlchemy(SF_LANCEALCHEMY));
00764 ui.lanceAlchemySpinner->setValue(level.first);
00765 ui.lanceAlchemyText->setText(QString::number(level.second));
00766
00767 level = sram->getAlchemyLevel(SF_LEVITATE);
00768 ui.levitateCheck->setChecked(sram->hasAlchemy(SF_LEVITATE));
00769 ui.levitateSpinner->setValue(level.first);
00770 ui.levitateText->setText(QString::number(level.second));
00771
00772 level = sram->getAlchemyLevel(SF_LIGHTNINGSTORM);
00773 ui.lightningStormCheck->setChecked(sram->hasAlchemy(SF_LIGHTNINGSTORM));
00774 ui.lightningStormSpinner->setValue(level.first);
00775 ui.lightningStormText->setText(QString::number(level.second));
00776
00777 level = sram->getAlchemyLevel(SF_MIRACLECURE);
00778 ui.miracleCureCheck->setChecked(sram->hasAlchemy(SF_MIRACLECURE));
00779 ui.miracleCureSpinner->setValue(level.first);
00780 ui.miracleCureText->setText(QString::number(level.second));
00781
00782 level = sram->getAlchemyLevel(SF_NITRO);
00783 ui.nitroCheck->setChecked(sram->hasAlchemy(SF_NITRO));
00784 ui.nitroSpinner->setValue(level.first);
00785 ui.nitroText->setText(QString::number(level.second));
00786
00787 level = sram->getAlchemyLevel(SF_ONEUP);
00788 ui.oneUpCheck->setChecked(sram->hasAlchemy(SF_ONEUP));
00789 ui.oneUpSpinner->setValue(level.first);
00790 ui.oneUpText->setText(QString::number(level.second));
00791
00792 level = sram->getAlchemyLevel(SF_REFLECT);
00793 ui.reflectCheck->setChecked(sram->hasAlchemy(SF_REFLECT));
00794 ui.reflectSpinner->setValue(level.first);
00795 ui.reflectText->setText(QString::number(level.second));
00796
00797 level = sram->getAlchemyLevel(SF_REGROWTH);
00798 ui.regrowthCheck->setChecked(sram->hasAlchemy(SF_REGROWTH));
00799 ui.regrowthSpinner->setValue(level.first);
00800 ui.regrowthText->setText(QString::number(level.second));
00801
00802 level = sram->getAlchemyLevel(SF_REVEALER);
00803 ui.revealerCheck->setChecked(sram->hasAlchemy(SF_REVEALER));
00804 ui.revealerSpinner->setValue(level.first);
00805 ui.revealerText->setText(QString::number(level.second));
00806
00807 level = sram->getAlchemyLevel(SF_REVIVE);
00808 ui.reviveCheck->setChecked(sram->hasAlchemy(SF_REVIVE));
00809 ui.reviveSpinner->setValue(level.first);
00810 ui.reviveText->setText(QString::number(level.second));
00811
00812 level = sram->getAlchemyLevel(SF_SLOWBURN);
00813 ui.slowBurnCheck->setChecked(sram->hasAlchemy(SF_SLOWBURN));
00814 ui.slowBurnSpinner->setValue(level.first);
00815 ui.slowBurnText->setText(QString::number(level.second));
00816
00817 level = sram->getAlchemyLevel(SF_SPEED);
00818 ui.speedCheck->setChecked(sram->hasAlchemy(SF_SPEED));
00819 ui.speedSpinner->setValue(level.first);
00820 ui.speedText->setText(QString::number(level.second));
00821
00822 level = sram->getAlchemyLevel(SF_STING);
00823 ui.stingCheck->setChecked(sram->hasAlchemy(SF_STING));
00824 ui.stingSpinner->setValue(level.first);
00825 ui.stingText->setText(QString::number(level.second));
00826
00827 level = sram->getAlchemyLevel(SF_STOP);
00828 ui.stopCheck->setChecked(sram->hasAlchemy(SF_STOP));
00829 ui.stopSpinner->setValue(level.first);
00830 ui.stopText->setText(QString::number(level.second));
00831
00832 level = sram->getAlchemyLevel(SF_SUPERHEAL);
00833 ui.superHealCheck->setChecked(sram->hasAlchemy(SF_SUPERHEAL));
00834 ui.superHealSpinner->setValue(level.first);
00835 ui.superHealText->setText(QString::number(level.second));
00836
00837
00838 ui.petalText->setText(QString::number(sram->getItem(SF_PETAL)));
00839 ui.nectarText->setText(QString::number(sram->getItem(SF_NECTAR)));
00840 ui.honeyText->setText(QString::number(sram->getItem(SF_HONEY)));
00841 ui.dogBiscuitText->setText(QString::number(sram->getItem(SF_DOGBISCUIT)));
00842 ui.wingsText->setText(QString::number(sram->getItem(SF_WINGS)));
00843 ui.essenceText->setText(QString::number(sram->getItem(SF_ESSENCE)));
00844 ui.pixieDustText->setText(QString::number(sram->getItem(SF_PIXIEDUST)));
00845 ui.callBeadText->setText(QString::number(sram->getItem(SF_CALLBEAD)));
00846
00847
00848 ui.leatherCollarText->
00849 setText(QString::number(sram->getItem(SF_LEATHERCOLLAR)));
00850 ui.spikyCollarText->
00851 setText(QString::number(sram->getItem(SF_SPIKYCOLLAR)));
00852 ui.defenderCollarText->
00853 setText(QString::number(sram->getItem(SF_DEFENDERCOLLAR)));
00854 ui.spotsCollarText->
00855 setText(QString::number(sram->getItem(SF_SPOTSCOLLAR)));
00856
00857
00858 ui.grassVestText->
00859 setText(QString::number(sram->getItem(SF_GRASSVEST)));
00860 ui.shellPlateText->
00861 setText(QString::number(sram->getItem(SF_SHELLPLATE)));
00862 ui.dinoSkinText->
00863 setText(QString::number(sram->getItem(SF_DINOSKIN)));
00864 ui.bronzeArmorText->
00865 setText(QString::number(sram->getItem(SF_BRONZEARMOR)));
00866 ui.stoneVestText->
00867 setText(QString::number(sram->getItem(SF_STONEVEST)));
00868 ui.centurionCapeText->
00869 setText(QString::number(sram->getItem(SF_CENTURIONCAPE)));
00870 ui.silverMailText->
00871 setText(QString::number(sram->getItem(SF_SILVERMAIL)));
00872 ui.goldPlatedVestText->
00873 setText(QString::number(sram->getItem(SF_GOLDPLATEDVEST)));
00874 ui.shiningArmorText->
00875 setText(QString::number(sram->getItem(SF_SHININGARMOR)));
00876 ui.magnaMailText->
00877 setText(QString::number(sram->getItem(SF_MAGNAMAIL)));
00878 ui.titaniumVestText->
00879 setText(QString::number(sram->getItem(SF_TITANIUMVEST)));
00880 ui.virtualVestText->
00881 setText(QString::number(sram->getItem(SF_VIRTUALVEST)));
00882
00883
00884 ui.thunderBallText->
00885 setText(QString::number(sram->getItem(SF_THUNDERBALL)));
00886 ui.particleBombText->
00887 setText(QString::number(sram->getItem(SF_PARTICLEBOMB)));
00888 ui.cryoBlastText->
00889 setText(QString::number(sram->getItem(SF_CRYOBLAST)));
00890
00891
00892 ui.grassHatText->
00893 setText(QString::number(sram->getItem(SF_GRASSHAT)));
00894 ui.shellHatText->
00895 setText(QString::number(sram->getItem(SF_SHELLHAT)));
00896 ui.dinoHelmText->
00897 setText(QString::number(sram->getItem(SF_DINOHELM)));
00898 ui.bronzeHelmetText->
00899 setText(QString::number(sram->getItem(SF_BRONZEHELMET)));
00900 ui.obsidianHelmText->
00901 setText(QString::number(sram->getItem(SF_OBSIDIANHELM)));
00902 ui.centurionHelmText->
00903 setText(QString::number(sram->getItem(SF_CENTURIONHELM)));
00904 ui.titansCrownText->
00905 setText(QString::number(sram->getItem(SF_TITANSCROWN)));
00906 ui.dragonHelmText->
00907 setText(QString::number(sram->getItem(SF_DRAGONHELM)));
00908 ui.knightsHelmText->
00909 setText(QString::number(sram->getItem(SF_KNIGHTSHELM)));
00910 ui.lightningHelmText->
00911 setText(QString::number(sram->getItem(SF_LIGHTNINGHELM)));
00912 ui.oldReliableText->
00913 setText(QString::number(sram->getItem(SF_OLDRELIABLE)));
00914 ui.brainstormText->
00915 setText(QString::number(sram->getItem(SF_BRAINSTORM)));
00916
00917
00918 ui.vineBraceletText->
00919 setText(QString::number(sram->getItem(SF_VINEBRACELET)));
00920 ui.mammothGuardText->
00921 setText(QString::number(sram->getItem(SF_MAMMOTHGUARD)));
00922 ui.clawGuardText->
00923 setText(QString::number(sram->getItem(SF_CLAWGUARD)));
00924 ui.serpentBracerText->
00925 setText(QString::number(sram->getItem(SF_SERPENTBRACER)));
00926 ui.bronzeGauntletText->
00927 setText(QString::number(sram->getItem(SF_BRONZEGAUNTLET)));
00928 ui.glovesOfRaText->
00929 setText(QString::number(sram->getItem(SF_GLOVESOFRA)));
00930 ui.ironBracerText->
00931 setText(QString::number(sram->getItem(SF_IRONBRACER)));
00932 ui.magiciansRingText->
00933 setText(QString::number(sram->getItem(SF_MAGICIANSRING)));
00934 ui.dragonsClawText->
00935 setText(QString::number(sram->getItem(SF_DRAGONSCLAW)));
00936 ui.cybergloveText->
00937 setText(QString::number(sram->getItem(SF_CYBERGLOVE)));
00938 ui.protectorRingText->
00939 setText(QString::number(sram->getItem(SF_PROTECTORRING)));
00940 ui.virtualGloveText->
00941 setText(QString::number(sram->getItem(SF_VIRTUALGLOVE)));
00942
00943
00944 ui.armorPolishCheck->setChecked(sram->hasCharm(SF_ARMORPOLISH));
00945 ui.chocoboEggCheck->setChecked(sram->hasCharm(SF_CHOCOBOEGG));
00946 ui.insectIncenseCheck->setChecked(sram->hasCharm(SF_INSECTINCENSE));
00947 ui.jadeDiskCheck->setChecked(sram->hasCharm(SF_JADEDISK));
00948 ui.jaguarRingCheck->setChecked(sram->hasCharm(SF_JAGUARRING));
00949 ui.magicGourdCheck->setChecked(sram->hasCharm(SF_MAGICGOURD));
00950 ui.moxaStickCheck->setChecked(sram->hasCharm(SF_MOXASTICK));
00951 ui.oracleBoneCheck->setChecked(sram->hasCharm(SF_ORACLEBONE));
00952 ui.rubyHeartCheck->setChecked(sram->hasCharm(SF_RUBYHEART));
00953 ui.silverSheathCheck->setChecked(sram->hasCharm(SF_SILVERSHEATH));
00954 ui.staffOfLifeCheck->setChecked(sram->hasCharm(SF_STAFFOFLIFE));
00955 ui.sunStoneCheck->setChecked(sram->hasCharm(SF_SUNSTONE));
00956 ui.thugsCloakCheck->setChecked(sram->hasCharm(SF_THUGSCLOAK));
00957 ui.wizardsCoinCheck->setChecked(sram->hasCharm(SF_WIZARDSCOIN));
00958
00959
00960 ui.annihilationAmuletText->
00961 setText(QString::number(sram->getTradeGood(SF_ANNIHILATIONAMULET)));
00962 ui.beadsText->
00963 setText(QString::number(sram->getTradeGood(SF_BEADS)));
00964 ui.ceramicPotText->
00965 setText(QString::number(sram->getTradeGood(SF_CERAMICPOT)));
00966 ui.chickenText->
00967 setText(QString::number(sram->getTradeGood(SF_CHICKEN)));
00968 ui.goldenJackalText->
00969 setText(QString::number(sram->getTradeGood(SF_GOLDENJACKAL)));
00970 ui.jeweledScarabText->
00971 setText(QString::number(sram->getTradeGood(SF_JEWELEDSCARAB)));
00972 ui.limestoneTabletText->
00973 setText(QString::number(sram->getTradeGood(SF_LIMESTONETABLET)));
00974 ui.perfumeText->
00975 setText(QString::number(sram->getTradeGood(SF_PERFUME)));
00976 ui.riceText->
00977 setText(QString::number(sram->getTradeGood(SF_RICE)));
00978 ui.spiceText->
00979 setText(QString::number(sram->getTradeGood(SF_SPICE)));
00980 ui.souvenirSpoonText->
00981 setText(QString::number(sram->getTradeGood(SF_SOUVENIRSPOON)));
00982 ui.tapestryText->
00983 setText(QString::number(sram->getTradeGood(SF_TAPESTRY)));
00984 ui.ticketForExhibitionText->
00985 setText(QString::number(sram->getTradeGood(SF_TICKETFOREXHIBITION)));
00986
00987 ignoreSignals = false;
00988 }
00989
00990 void MainWindow::onUIChanged() {
00991 ui.fileClose->setEnabled(open);
00992 ui.fileSave->setEnabled(open && sram->isModified());
00993 ui.fileSaveAs->setEnabled(open);
00994
00995 ui.tabWidget->setVisible(open);
00996
00997 if (open) {
00998 ui.gameGame1->setEnabled(sram->isValid(0));
00999 ui.gameGame2->setEnabled(sram->isValid(1));
01000 ui.gameGame3->setEnabled(sram->isValid(2));
01001 ui.gameGame4->setEnabled(sram->isValid(3));
01002
01003 switch (sram->getGame()) {
01004 case 0: ui.gameGame1->setChecked(true); break;
01005 case 1: ui.gameGame2->setChecked(true); break;
01006 case 2: ui.gameGame3->setChecked(true); break;
01007 default: ui.gameGame4->setChecked(true); break;
01008 }
01009
01010 ui.boneCrusherSpinner->setEnabled(sram->hasWeapon(SF_BONECRUSHER));
01011 ui.boneCrusherText->setEnabled(sram->hasWeapon(SF_BONECRUSHER));
01012
01013 ui.gladiatorSwordSpinner->setEnabled(sram->hasWeapon(SF_GLADIATORSWORD));
01014 ui.gladiatorSwordText->setEnabled(sram->hasWeapon(SF_GLADIATORSWORD));
01015
01016 ui.crusaderSwordSpinner->setEnabled(sram->hasWeapon(SF_CRUSADERSWORD));
01017 ui.crusaderSwordText->setEnabled(sram->hasWeapon(SF_CRUSADERSWORD));
01018
01019 ui.neutronBladeSpinner->setEnabled(sram->hasWeapon(SF_NEUTRONBLADE));
01020 ui.neutronBladeText->setEnabled(sram->hasWeapon(SF_NEUTRONBLADE));
01021
01022 ui.spidersClawSpinner->setEnabled(sram->hasWeapon(SF_SPIDERSCLAW));
01023 ui.spidersClawText->setEnabled(sram->hasWeapon(SF_SPIDERSCLAW));
01024
01025 ui.bronzeAxeSpinner->setEnabled(sram->hasWeapon(SF_BRONZEAXE));
01026 ui.bronzeAxeText->setEnabled(sram->hasWeapon(SF_BRONZEAXE));
01027
01028 ui.knightBasherSpinner->setEnabled(sram->hasWeapon(SF_KNIGHTBASHER));
01029 ui.knightBasherText->setEnabled(sram->hasWeapon(SF_KNIGHTBASHER));
01030
01031 ui.atomSmasherSpinner->setEnabled(sram->hasWeapon(SF_ATOMSMASHER));
01032 ui.atomSmasherText->setEnabled(sram->hasWeapon(SF_ATOMSMASHER));
01033
01034 ui.hornSpearSpinner->setEnabled(sram->hasWeapon(SF_HORNSPEAR));
01035 ui.hornSpearText->setEnabled(sram->hasWeapon(SF_HORNSPEAR));
01036
01037 ui.bronzeSpearSpinner->setEnabled(sram->hasWeapon(SF_BRONZESPEAR));
01038 ui.bronzeSpearText->setEnabled(sram->hasWeapon(SF_BRONZESPEAR));
01039
01040 ui.lanceWeaponSpinner->setEnabled(sram->hasWeapon(SF_LANCEWEAPON));
01041 ui.lanceWeaponText->setEnabled(sram->hasWeapon(SF_LANCEWEAPON));
01042
01043 ui.laserLanceSpinner->setEnabled(sram->hasWeapon(SF_LASERLANCE));
01044 ui.laserLanceText->setEnabled(sram->hasWeapon(SF_LASERLANCE));
01045
01046 ui.acidRainSpinner->setEnabled(sram->hasAlchemy(SF_ACIDRAIN));
01047 ui.acidRainText->setEnabled(sram->hasAlchemy(SF_ACIDRAIN));
01048
01049 ui.atlasSpinner->setEnabled(sram->hasAlchemy(SF_ATLAS));
01050 ui.atlasText->setEnabled(sram->hasAlchemy(SF_ATLAS));
01051
01052 ui.barrierSpinner->setEnabled(sram->hasAlchemy(SF_BARRIER));
01053 ui.barrierText->setEnabled(sram->hasAlchemy(SF_BARRIER));
01054
01055 ui.callUpSpinner->setEnabled(sram->hasAlchemy(SF_CALLUP));
01056 ui.callUpText->setEnabled(sram->hasAlchemy(SF_CALLUP));
01057
01058 ui.corrosionSpinner->setEnabled(sram->hasAlchemy(SF_CORROSION));
01059 ui.corrosionText->setEnabled(sram->hasAlchemy(SF_CORROSION));
01060
01061 ui.crushSpinner->setEnabled(sram->hasAlchemy(SF_CRUSH));
01062 ui.crushText->setEnabled(sram->hasAlchemy(SF_CRUSH));
01063
01064 ui.cureSpinner->setEnabled(sram->hasAlchemy(SF_CURE));
01065 ui.cureText->setEnabled(sram->hasAlchemy(SF_CURE));
01066
01067 ui.defendSpinner->setEnabled(sram->hasAlchemy(SF_DEFEND));
01068 ui.defendText->setEnabled(sram->hasAlchemy(SF_DEFEND));
01069
01070 ui.doubleDrainSpinner->setEnabled(sram->hasAlchemy(SF_DOUBLEDRAIN));
01071 ui.doubleDrainText->setEnabled(sram->hasAlchemy(SF_DOUBLEDRAIN));
01072
01073 ui.drainSpinner->setEnabled(sram->hasAlchemy(SF_DRAIN));
01074 ui.drainText->setEnabled(sram->hasAlchemy(SF_DRAIN));
01075
01076 ui.energizeSpinner->setEnabled(sram->hasAlchemy(SF_ENERGIZE));
01077 ui.energizeText->setEnabled(sram->hasAlchemy(SF_ENERGIZE));
01078
01079 ui.escapeSpinner->setEnabled(sram->hasAlchemy(SF_ESCAPE));
01080 ui.escapeText->setEnabled(sram->hasAlchemy(SF_ESCAPE));
01081
01082 ui.explosionSpinner->setEnabled(sram->hasAlchemy(SF_EXPLOSION));
01083 ui.explosionText->setEnabled(sram->hasAlchemy(SF_EXPLOSION));
01084
01085 ui.fireballSpinner->setEnabled(sram->hasAlchemy(SF_FIREBALL));
01086 ui.fireballText->setEnabled(sram->hasAlchemy(SF_FIREBALL));
01087
01088 ui.firePowerSpinner->setEnabled(sram->hasAlchemy(SF_FIREPOWER));
01089 ui.firePowerText->setEnabled(sram->hasAlchemy(SF_FIREPOWER));
01090
01091 ui.flashSpinner->setEnabled(sram->hasAlchemy(SF_FLASH));
01092 ui.flashText->setEnabled(sram->hasAlchemy(SF_FLASH));
01093
01094 ui.forceFieldSpinner->setEnabled(sram->hasAlchemy(SF_FORCEFIELD));
01095 ui.forceFieldText->setEnabled(sram->hasAlchemy(SF_FORCEFIELD));
01096
01097 ui.hardBallSpinner->setEnabled(sram->hasAlchemy(SF_HARDBALL));
01098 ui.hardBallText->setEnabled(sram->hasAlchemy(SF_HARDBALL));
01099
01100 ui.healSpinner->setEnabled(sram->hasAlchemy(SF_HEAL));
01101 ui.healText->setEnabled(sram->hasAlchemy(SF_HEAL));
01102
01103 ui.lanceAlchemySpinner->setEnabled(sram->hasAlchemy(SF_LANCEALCHEMY));
01104 ui.lanceAlchemyText->setEnabled(sram->hasAlchemy(SF_LANCEALCHEMY));
01105
01106 ui.levitateSpinner->setEnabled(sram->hasAlchemy(SF_LEVITATE));
01107 ui.levitateText->setEnabled(sram->hasAlchemy(SF_LEVITATE));
01108
01109 ui.lightningStormSpinner->setEnabled(sram->hasAlchemy(SF_LIGHTNINGSTORM));
01110 ui.lightningStormText->setEnabled(sram->hasAlchemy(SF_LIGHTNINGSTORM));
01111
01112 ui.miracleCureSpinner->setEnabled(sram->hasAlchemy(SF_MIRACLECURE));
01113 ui.miracleCureText->setEnabled(sram->hasAlchemy(SF_MIRACLECURE));
01114
01115 ui.nitroSpinner->setEnabled(sram->hasAlchemy(SF_NITRO));
01116 ui.nitroText->setEnabled(sram->hasAlchemy(SF_NITRO));
01117
01118 ui.oneUpSpinner->setEnabled(sram->hasAlchemy(SF_ONEUP));
01119 ui.oneUpText->setEnabled(sram->hasAlchemy(SF_ONEUP));
01120
01121 ui.reflectSpinner->setEnabled(sram->hasAlchemy(SF_REFLECT));
01122 ui.reflectText->setEnabled(sram->hasAlchemy(SF_REFLECT));
01123
01124 ui.regrowthSpinner->setEnabled(sram->hasAlchemy(SF_REGROWTH));
01125 ui.regrowthText->setEnabled(sram->hasAlchemy(SF_REGROWTH));
01126
01127 ui.revealerSpinner->setEnabled(sram->hasAlchemy(SF_REVEALER));
01128 ui.revealerText->setEnabled(sram->hasAlchemy(SF_REVEALER));
01129
01130 ui.reviveSpinner->setEnabled(sram->hasAlchemy(SF_REVIVE));
01131 ui.reviveText->setEnabled(sram->hasAlchemy(SF_REVIVE));
01132
01133 ui.slowBurnSpinner->setEnabled(sram->hasAlchemy(SF_SLOWBURN));
01134 ui.slowBurnText->setEnabled(sram->hasAlchemy(SF_SLOWBURN));
01135
01136 ui.speedSpinner->setEnabled(sram->hasAlchemy(SF_SPEED));
01137 ui.speedText->setEnabled(sram->hasAlchemy(SF_SPEED));
01138
01139 ui.stingSpinner->setEnabled(sram->hasAlchemy(SF_STING));
01140 ui.stingText->setEnabled(sram->hasAlchemy(SF_STING));
01141
01142 ui.stopSpinner->setEnabled(sram->hasAlchemy(SF_STOP));
01143 ui.stopText->setEnabled(sram->hasAlchemy(SF_STOP));
01144
01145 ui.superHealSpinner->setEnabled(sram->hasAlchemy(SF_SUPERHEAL));
01146 ui.superHealText->setEnabled(sram->hasAlchemy(SF_SUPERHEAL));
01147 } else {
01148 ui.gameGame1->setEnabled(false);
01149 ui.gameGame2->setEnabled(false);
01150 ui.gameGame3->setEnabled(false);
01151 ui.gameGame4->setEnabled(false);
01152 }
01153 }
01154
01155 void MainWindow::on_boyCurrentHPText_textEdited(const QString &text) {
01156 Q_ASSERT(open);
01157
01158 sram->setCurrentHP(SF_BOY, text.toUInt());
01159 emit uiChanged();
01160 }
01161
01162 void MainWindow::on_boyExperienceText_textEdited(const QString &text) {
01163 Q_ASSERT(open);
01164
01165 sram->setExperience(SF_BOY, text.toUInt());
01166 emit uiChanged();
01167 }
01168
01169 void MainWindow::on_boyLevelText_textEdited(const QString &text) {
01170 Q_ASSERT(open);
01171
01172 int level = text.toInt();
01173
01174 if (level != 0) {
01175 sram->setLevel(SF_BOY, level);
01176 emit uiChanged();
01177 }
01178 }
01179
01180 void MainWindow::on_boyMaxHPText_textEdited(const QString &text) {
01181 Q_ASSERT(open);
01182
01183 sram->setMaxHP(SF_BOY, text.toUInt());
01184 emit uiChanged();
01185 }
01186
01187 void MainWindow::on_boyNameText_textEdited(const QString &name) {
01188 Q_ASSERT(open);
01189
01190 sram->setName(SF_BOY, name);
01191 emit uiChanged();
01192 }
01193
01194 void MainWindow::on_dogAttackLevelSpinner_valueChanged(int level) {
01195 if (ignoreSignals) {
01196 return;
01197 }
01198
01199 Q_ASSERT(open);
01200
01201 std::pair<int, int> temp = sram->getAttackLevel();
01202 temp.first = level;
01203 sram->setAttackLevel(temp);
01204
01205 emit uiChanged();
01206 }
01207
01208 void MainWindow::on_dogAttackLevelText_textEdited(const QString &text) {
01209 Q_ASSERT(open);
01210
01211 std::pair<int, int> temp = sram->getAttackLevel();
01212 temp.second = text.toInt();
01213 sram->setAttackLevel(temp);
01214
01215 showActualLevel(temp);
01216 emit uiChanged();
01217 }
01218
01219 void MainWindow::on_dogCurrentHPText_textEdited(const QString &text) {
01220 Q_ASSERT(open);
01221
01222 sram->setCurrentHP(SF_DOG, text.toUInt());
01223 emit uiChanged();
01224 }
01225
01226 void MainWindow::on_dogExperienceText_textEdited(const QString &text) {
01227 Q_ASSERT(open);
01228
01229 sram->setExperience(SF_DOG, text.toUInt());
01230 emit uiChanged();
01231 }
01232
01233 void MainWindow::on_dogLevelText_textEdited(const QString &text) {
01234 Q_ASSERT(open);
01235
01236 int level = text.toInt();
01237
01238 if (level != 0) {
01239 sram->setLevel(SF_DOG, level);
01240 emit uiChanged();
01241 }
01242 }
01243
01244 void MainWindow::on_dogMaxHPText_textEdited(const QString &text) {
01245 Q_ASSERT(open);
01246
01247 sram->setMaxHP(SF_DOG, text.toUInt());
01248 emit uiChanged();
01249 }
01250
01251 void MainWindow::on_dogNameText_textEdited(const QString &name) {
01252 Q_ASSERT(open);
01253
01254 sram->setName(SF_DOG, name);
01255 emit uiChanged();
01256 }
01257
01258 void MainWindow::on_fileClose_triggered(bool) {
01259 Q_ASSERT(open);
01260
01261 if (confirmClose()) {
01262 delete sram;
01263 delete sramFile;
01264 open = false;
01265
01266 emit uiChanged();
01267 ui.tabWidget->setCurrentIndex(0);
01268 }
01269 }
01270
01271 void MainWindow::on_fileOpen_triggered(bool) {
01272 if (open) {
01273 ui.fileClose->trigger();
01274
01275
01276 if (open) {
01277 return;
01278 }
01279 }
01280
01281 QString filename =
01282 QFileDialog::getOpenFileName(this,
01283 "Open Secret of Evermore SRAM File",
01284 "", "SRAM Files (*.srm)");
01285
01286 if (filename.isNull()) {
01287 return;
01288 }
01289
01290 openSRAM(filename);
01291 }
01292
01293 void MainWindow::on_fileSave_triggered(bool) {
01294 Q_ASSERT(open);
01295
01296 if (!sram->save(*sramFile)) {
01297 QMessageBox::warning(this, "Unable to Save SRAM File",
01298 "An I/O error occurred while trying to save.",
01299 QMessageBox::Ok, QMessageBox::NoButton);
01300 }
01301
01302 emit uiChanged();
01303 }
01304
01305 void MainWindow::on_fileSaveAs_triggered(bool) {
01306 Q_ASSERT(open);
01307
01308 QString temp =
01309 QFileDialog::getSaveFileName(this, "Save SRAM File As",
01310 "", "SRAM File (*.srm)");
01311
01312 if (temp.isNull()) {
01313 return;
01314 }
01315
01316 delete sramFile;
01317 sramFile = new QString(temp);
01318
01319 ui.fileSave->trigger();
01320 }
01321
01322 void MainWindow::on_helpAbout_triggered(bool) {
01323 QMessageBox::about(this, "About soesrame",
01324 "Secret of Evermore SRAM Editor 0.92\n"
01325 "Copyright (C) 2006 emuWorks\n"
01326 "http://games.technoplaza.net/");
01327 }
01328