mainwindow.cc

Go to the documentation of this file.
00001 /*
00002  * Secret of Evermore SRAM Editor
00003  * Copyright (C) 2006 emuWorks
00004  * http://games.technoplaza.net/
00005  *
00006  * This file is part of Secret of Evermore SRAM Editor.
00007  *
00008  * Secret of Evermore SRAM Editor is free software; you can redistribute it
00009  * and/or modify it under the terms of the GNU General Public License as
00010  * published by the Free Software Foundation; either version 2 of the License,
00011  * or (at your option) any later version.
00012  *
00013  * Secret of Evermore SRAM Editor is distributed in the hope that it will be
00014  * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
00015  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016  * GNU General Public License for more details.
00017  *
00018  * You should have received a copy of the GNU General Public License
00019  * along with Secret of Evermore SRAM Editor; if not, write to the Free Software
00020  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
00021  */
00022  
00023 // $Id: mainwindow.cc,v 1.19 2006/09/06 14:22:00 technoplaza Exp $
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     // setup widgets
00042     ui.setupUi(this);
00043     
00044     // connect signals
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     // make Game menu actions exclusive
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     // setup validators
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     // name validators
00068     ui.boyNameText->setValidator(nameValidator);
00069     ui.dogNameText->setValidator(nameValidator);
00070     
00071     // money validators
00072     ui.talonsText->setValidator(any24BitValidator);
00073     ui.jewelsText->setValidator(any24BitValidator);
00074     ui.goldCoinsText->setValidator(any24BitValidator);
00075     ui.creditsText->setValidator(any24BitValidator);
00076 
00077     // stat validators
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     // weapon level validators
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     // alchemy ingredient validators
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     // alchemy level validators
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     // item validators
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     // dog collar validators
00176     ui.leatherCollarText->setValidator(under6Validator);
00177     ui.spikyCollarText->setValidator(under6Validator);
00178     ui.defenderCollarText->setValidator(under6Validator);
00179     ui.spotsCollarText->setValidator(under6Validator);
00180     
00181     // armor validators
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     // bazooka ammunition validators
00196     ui.thunderBallText->setValidator(under100Validator);
00197     ui.particleBombText->setValidator(under100Validator);
00198     ui.cryoBlastText->setValidator(under100Validator);
00199     
00200     // helmet validators
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     // gauntlet validators
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     // trade good validators
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             // if the save failed, abort
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     // accept file list drops
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     // uri could be something else
00517     if (filename.isEmpty()) {
00518         return;
00519     }
00520     
00521     if (open) {
00522         ui.fileClose->trigger();
00523         
00524         // we must've decided not to close
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     // load the hero's names
00541     ui.boyNameText->setText(sram->getName(SF_BOY));
00542     ui.dogNameText->setText(sram->getName(SF_DOG));
00543     
00544     // load the money
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     // load boy's stats
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     // load dog's stats
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     // load weapon levels
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     // load alchemy ingredients
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     // load alchemy levels
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     // load items
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     // load dog collars
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     // load armor
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     // load bazooka ammunition
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     // load helmets
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     // load gauntlets
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     // load charms
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     // load trade goods
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         // we must've decided not to close
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.91\n"
01325                        "Copyright (C) 2006 emuWorks\n"
01326                        "http://games.technoplaza.net/");
01327 }
01328 

Generated on Wed Sep 6 23:11:55 2006 for Secret of Evermore SRAM Editor by  doxygen 1.4.7