mainwindow.cc

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

Generated on Sun Jan 27 09:41:43 2008 for Secret of Evermore SRAM Editor by  doxygen 1.5.4