# HG changeset patch # User sheepluva # Date 1316971810 -7200 # Node ID d38da7c19e43ab1006b80ed6ea6121394ab994a0 # Parent 8ed6e810051a4987bdc2094b57e39c6543aaae0e some more cleanups and refactoring. functional changes: when generating random hog names avoid duplicate names (if possible) diff -r 8ed6e810051a -r d38da7c19e43 QTfrontend/game.cpp --- a/QTfrontend/game.cpp Sun Sep 25 16:09:55 2011 +0200 +++ b/QTfrontend/game.cpp Sun Sep 25 19:30:10 2011 +0200 @@ -120,13 +120,11 @@ .arg((themesModel->rowCount() > 0) ? themesModel->index(rand() % themesModel->rowCount()).data().toString() : "steel")); HWProto::addStringToBuffer(teamscfg, "eseed " + QUuid::createUuid().toString()); - HWNamegen namegen; - HWTeam team1; team1.setDifficulty(0); team1.setColor(QColor(colors[0])); team1.setNumHedgehogs(4); - namegen.teamRandomNames(team1,TRUE); + HWNamegen::teamRandomNames(team1,true); HWProto::addStringListToBuffer(teamscfg, team1.teamGameConfig(100)); @@ -135,7 +133,7 @@ team2.setColor(QColor(colors[1])); team2.setNumHedgehogs(4); do - namegen.teamRandomNames(team2,TRUE); + HWNamegen::teamRandomNames(team2,true); while(!team2.name().compare(team1.name()) || !team2.hedgehog(0).Hat.compare(team1.hedgehog(0).Hat)); HWProto::addStringListToBuffer(teamscfg, team2.teamGameConfig(100)); diff -r 8ed6e810051a -r d38da7c19e43 QTfrontend/hwform.cpp --- a/QTfrontend/hwform.cpp Sun Sep 25 16:09:55 2011 +0200 +++ b/QTfrontend/hwform.cpp Sun Sep 25 19:30:10 2011 +0200 @@ -44,7 +44,6 @@ #include "hwform.h" #include "game.h" #include "team.h" -#include "namegen.h" #include "teamselect.h" #include "selectWeapon.h" #include "gameuiconfig.h" @@ -115,7 +114,6 @@ config = new GameUIConfig(this, cfgdir->absolutePath() + "/hedgewars.ini"); - namegen = new HWNamegen(); #ifdef __APPLE__ panel = new M3Panel; @@ -170,11 +168,7 @@ connect(ui.pageMain->BtnExit, SIGNAL(pressed()), this, SLOT(btnExitPressed())); connect(ui.pageMain->BtnExit, SIGNAL(clicked()), this, SLOT(btnExitClicked())); - connect(ui.pageEditTeam->BtnTeamSave, SIGNAL(clicked()), this, SLOT(TeamSave())); - connect(ui.pageEditTeam->BtnTeamDiscard, SIGNAL(clicked()), this, SLOT(TeamDiscard())); - - connect(ui.pageEditTeam->signalMapper2, SIGNAL(mapped(const int &)), this, SLOT(RandomName(const int &))); - connect(ui.pageEditTeam->randTeamButton, SIGNAL(clicked()), this, SLOT(RandomNames())); + connect(ui.pageEditTeam, SIGNAL(teamEdited()), this, SLOT(AfterTeamEdit())); connect(ui.pageMultiplayer->BtnStartMPGame, SIGNAL(clicked()), this, SLOT(StartMPGame())); connect(ui.pageMultiplayer->teamsSelect, SIGNAL(setEnabledGameStart(bool)), @@ -189,9 +183,9 @@ connect(ui.pagePlayDemo->BtnPlayDemo, SIGNAL(clicked()), this, SLOT(PlayDemo())); connect(ui.pagePlayDemo->DemosList, SIGNAL(doubleClicked (const QModelIndex &)), this, SLOT(PlayDemo())); - connect(ui.pageOptions->BtnNewTeam, SIGNAL(clicked()), this, SLOT(NewTeam())); - connect(ui.pageOptions->BtnEditTeam, SIGNAL(clicked()), this, SLOT(EditTeam())); - connect(ui.pageOptions->BtnDeleteTeam, SIGNAL(clicked()), this, SLOT(DeleteTeam())); + connect(ui.pageOptions, SIGNAL(newTeamRequested()), this, SLOT(NewTeam())); + connect(ui.pageOptions, SIGNAL(editTeamRequested(const QString&)), this, SLOT(EditTeam(const QString&))); + connect(ui.pageOptions, SIGNAL(deleteTeamRequested(const QString&)), this, SLOT(DeleteTeam(const QString&))); connect(ui.pageOptions->BtnSaveOptions, SIGNAL(clicked()), config, SLOT(SaveOptions())); connect(ui.pageOptions->BtnSaveOptions, SIGNAL(clicked()), this, SLOT(GoBack())); connect(ui.pageOptions->BtnAssociateFiles, SIGNAL(clicked()), this, SLOT(AssociateFiles())); @@ -476,11 +470,7 @@ if (id == ID_PAGE_MULTIPLAYER || id == ID_PAGE_NETGAME) { QStringList tmNames = config->GetTeamsList(); TeamSelWidget* curTeamSelWidget; - ui.pageOptions->BtnNewTeam->setVisible(false); - ui.pageOptions->BtnEditTeam->setVisible(false); - ui.pageOptions->BtnDeleteTeam->setVisible(false); - ui.pageOptions->CBTeamName->setVisible(false); - ui.pageOptions->LblNoEditTeam->setVisible(true); + ui.pageOptions->setTeamOptionsEnabled(false); if (id == ID_PAGE_MULTIPLAYER) { curTeamSelWidget = ui.pageMultiplayer->teamsSelect; @@ -511,11 +501,7 @@ } if (id == ID_PAGE_MAIN) { - ui.pageOptions->BtnNewTeam->setVisible(true); - ui.pageOptions->BtnEditTeam->setVisible(true); - ui.pageOptions->BtnDeleteTeam->setVisible(true); - ui.pageOptions->CBTeamName->setVisible(true); - ui.pageOptions->LblNoEditTeam->setVisible(false); + ui.pageOptions->setTeamOptionsEnabled(true); } // load and save ignore/friends lists @@ -624,61 +610,30 @@ void HWForm::NewTeam() { - editedTeam = new HWTeam(QLineEdit::tr("unnamed")); - editedTeam->SetToPage(this); - GoToPage(ID_PAGE_SETUP_TEAM); -} - -void HWForm::EditTeam() -{ - editedTeam = new HWTeam(ui.pageOptions->CBTeamName->currentText()); - editedTeam->loadFromFile(); - editedTeam->SetToPage(this); + ui.pageEditTeam->createTeam(QLineEdit::tr("unnamed"), playerHash); + UpdateTeamsLists(); GoToPage(ID_PAGE_SETUP_TEAM); } -void HWForm::DeleteTeam() +void HWForm::EditTeam(const QString & teamName) { - QMessageBox reallyDelete(QMessageBox::Question, QMessageBox::tr("Teams"), QMessageBox::tr("Really delete this team?"), QMessageBox::Ok | QMessageBox::Cancel); - - if (reallyDelete.exec() == QMessageBox::Ok) { - editedTeam = new HWTeam(ui.pageOptions->CBTeamName->currentText()); - editedTeam->deleteFile(); - - // Remove from lists - ui.pageOptions->CBTeamName->removeItem(ui.pageOptions->CBTeamName->currentIndex()); - } + ui.pageEditTeam->editTeam(teamName, playerHash); + GoToPage(ID_PAGE_SETUP_TEAM); } -void HWForm::RandomNames() -{ - editedTeam->GetFromPage(this); - namegen->teamRandomNames(*editedTeam, true); - editedTeam->SetToPage(this); -} - -void HWForm::RandomName(const int &i) +void HWForm::AfterTeamEdit() { - editedTeam->GetFromPage(this); - namegen->teamRandomName(*editedTeam,i); - editedTeam->SetToPage(this); -} - -void HWForm::TeamSave() -{ - editedTeam->GetFromPage(this); - editedTeam->saveToFile(); - delete editedTeam; - editedTeam=0; UpdateTeamsLists(); GoBack(); } -void HWForm::TeamDiscard() + +void HWForm::DeleteTeam(const QString & teamName) { - delete editedTeam; - editedTeam=0; - GoBack(); + ui.pageEditTeam->deleteTeam(teamName); + QMessageBox reallyDelete(QMessageBox::Question, QMessageBox::tr("Teams"), QMessageBox::tr("Really delete this team?"), QMessageBox::Ok | QMessageBox::Cancel); + + UpdateTeamsLists(); } void HWForm::DeleteScheme() diff -r 8ed6e810051a -r d38da7c19e43 QTfrontend/hwform.h --- a/QTfrontend/hwform.h Sun Sep 25 16:09:55 2011 +0200 +++ b/QTfrontend/hwform.h Sun Sep 25 19:30:10 2011 +0200 @@ -79,12 +79,9 @@ void btnExitClicked(); void IntermediateSetup(); void NewTeam(); - void EditTeam(); - void DeleteTeam(); - void RandomNames(); - void RandomName(const int &i); - void TeamSave(); - void TeamDiscard(); + void EditTeam(const QString & teamName); + void AfterTeamEdit(); + void DeleteTeam(const QString & teamName); void DeleteScheme(); void DeleteWeaponSet(); void SimpleGame(); diff -r 8ed6e810051a -r d38da7c19e43 QTfrontend/namegen.cpp --- a/QTfrontend/namegen.cpp Sun Sep 25 16:09:55 2011 +0200 +++ b/QTfrontend/namegen.cpp Sun Sep 25 19:30:10 2011 +0200 @@ -26,151 +26,211 @@ #include "hwconsts.h" -HWNamegen::HWNamegen() : - typesAvailable(false) -{ - - loadTypes(); -} +HWNamegen::HWNamegen() {} -HWNamegen::~HWNamegen() -{ -} - +QList HWNamegen::TypesTeamnames; +QList HWNamegen::TypesHatnames; +bool HWNamegen::typesAvailable = false; -void HWNamegen::teamRandomName(HWTeam & team, const int HedgehogNumber) -{ - randomNameByHat(team, HedgehogNumber); -} - void HWNamegen::teamRandomNames(HWTeam & team, const bool changeteamname) { - if ((TypesHatnames.size() > 0) && typesAvailable){ + // load types if not already loaded + if (!typesAvailable) + if (!loadTypes()) + return; // abort if loading failed + + // abort if there are no hat types + if (TypesHatnames.size() <= 0) + return; - int kind = (rand()%(TypesHatnames.size())); + // the hat will influence which names the hogs get + int kind = (rand()%(TypesHatnames.size())); + + // pick team name based on hat + if (changeteamname) + { + if (TypesTeamnames[kind].size() > 0) + team.setName(TypesTeamnames[kind][rand()%(TypesTeamnames[kind].size())]); - if (changeteamname){ - if (TypesTeamnames[kind].size() > 0){ - team.setName(TypesTeamnames[kind][rand()%(TypesTeamnames[kind].size())]); - } - team.setGrave(getRandomGrave()); - team.setFort(getRandomFort()); - team.setVoicepack("Default"); + team.setGrave(getRandomGrave()); + team.setFort(getRandomFort()); + team.setVoicepack("Default"); + } + + QStringList dicts; + QStringList dict; + + if ((TypesHatnames[kind].size()) <= 0) + { + dicts = dictsForHat(team.hedgehog(0).Hat); + dict = dictContents(dicts[rand()%(dicts.size())]); + } + + for(int i = 0; i < HEDGEHOGS_PER_TEAM; i++) + { + if ((TypesHatnames[kind].size()) > 0) + { + HWHog hh = team.hedgehog(i); + hh.Hat = TypesHatnames[kind][rand()%(TypesHatnames[kind].size())]; + team.setHedgehog(i,hh); } - //give each hedgehog a random name: - //TODO: load the dictionary only once! (right now it's loaded once for each hedgehog) - for(int i = 0; i < HEDGEHOGS_PER_TEAM; i++) + // there is a chance that this hog has the same hat as the previous one + // let's reuse the hat-specific dict in this case + if ((i == 0) or (team.hedgehog(i).Hat != team.hedgehog(i-1).Hat)) { - if ((TypesHatnames[kind].size()) > 0){ - HWHog hh = team.hedgehog(i); - hh.Hat = TypesHatnames[kind][rand()%(TypesHatnames[kind].size())]; - team.setHedgehog(i,hh); - } - randomNameByHat(team,i); + dicts = dictsForHat(team.hedgehog(i).Hat); + dict = dictContents(dicts[rand()%(dicts.size())]); } + // give each hedgehog a random name + HWNamegen::teamRandomName(team,i,dict); } } +void HWNamegen::teamRandomName(HWTeam & team, const int HedgehogNumber) +{ + QStringList dicts = dictsForHat(team.hedgehog(HedgehogNumber).Hat); -void HWNamegen::randomNameByHat(HWTeam & team, const int HedgehogNumber) + QStringList dict = dictContents(dicts[rand()%(dicts.size())]); + + teamRandomName(team, HedgehogNumber, dict); +} + +void HWNamegen::teamRandomName(HWTeam & team, const int HedgehogNumber, const QStringList & dict) { - QStringList Dictionaries; - hatCfgLoad(team.hedgehog(HedgehogNumber).Hat,Dictionaries); + QStringList namesDict = dict; - QStringList Dictionary; - dictLoad(Dictionaries[rand()%(Dictionaries.size())],Dictionary); + for(int i = 0; i < HEDGEHOGS_PER_TEAM; i++) + { + namesDict.removeOne(team.hedgehog(i).Name); + } + + // if our dict doesn't have any new names we'll have to use duplicates + if (namesDict.size() < 1) + namesDict = dict; HWHog hh = team.hedgehog(HedgehogNumber); - hh.Name = Dictionary[rand()%(Dictionary.size())]; + + hh.Name = namesDict[rand()%(namesDict.size())]; + team.setHedgehog(HedgehogNumber, hh); } -void HWNamegen::dictLoad(const QString filename, QStringList &list) +QStringList HWNamegen::dictContents(const QString filename) { - list.clear(); + QStringList list; QFile file; + + // find .cfg to load the names from file.setFileName(QString("%1/Data/Names/%2.txt").arg(cfgdir->absolutePath()).arg(filename)); - if (!file.exists()) file.setFileName(QString("%1/Names/%2.txt").arg(datadir->absolutePath()).arg(filename)); + if (!file.exists()) + file.setFileName(QString("%1/Names/%2.txt").arg(datadir->absolutePath()).arg(filename)); + if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { QTextStream in(&file); - while (!in.atEnd()) { + while (!in.atEnd()) + { QString line = in.readLine(); - if(line != QString("")) - {list.append(line);} + if(!line.isEmpty()) + list.append(line); } } - if (list.size()==0) + if (list.size() == 0) list.append(filename); + return list; } -void HWNamegen::hatCfgLoad(const QString hatname, QStringList &list) +QStringList HWNamegen::dictsForHat(const QString hatname) { - list.clear(); + QStringList list; QFile file; + + // find .cfg to load the names from file.setFileName(QString("%1/Data/Names/%2.cfg").arg(cfgdir->absolutePath()).arg(hatname)); - if (!file.exists()) file.setFileName(QString("%1/Names/%2.cfg").arg(datadir->absolutePath()).arg(hatname)); + if (!file.exists()) + file.setFileName(QString("%1/Names/%2.cfg").arg(datadir->absolutePath()).arg(hatname)); + + if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { - QTextStream in(&file); - while (!in.atEnd()) { + while (!in.atEnd()) + { QString line = in.readLine(); - if(line != QString("")) - {list.append(line);} + if(!line.isEmpty()) + list.append(line); } } - if (list.size()==0) + if (list.size() == 0) list.append(QString("generic")); + return list; } +// loades types from ini files. returns true on success. +bool HWNamegen::loadTypes() +{ + QFile file; + + // find .cfg to load the names from + file.setFileName(QString("%1/Data/Names/types.ini").arg(cfgdir->absolutePath())); + if (!file.exists()) + file.setFileName(QString("%1/Names/types.ini").arg(datadir->absolutePath())); + -void HWNamegen::loadTypes() -{ - QFile file; - file.setFileName(QString("%1/Data/Names/types.ini").arg(cfgdir->absolutePath())); - if (!file.exists()) file.setFileName(QString("%1/Names/types.ini").arg(datadir->absolutePath())); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) - {typesAvailable = false; return;} + return false; int counter = 0; //counter starts with 0 (teamnames mode) TypesTeamnames.append(QStringList()); TypesHatnames.append(QStringList()); QTextStream in(&file); - while (!in.atEnd()) { + while (!in.atEnd()) + { QString line = in.readLine(); - if (line == QString("#####")){ + if (line == QString("#####")) + { counter++; //toggle mode (teamnames || hats) - if ((counter%2) == 0){ + if ((counter%2) == 0) + { TypesTeamnames.append(QStringList()); TypesHatnames.append(QStringList()); } - } else if ((line == QString("*****")) || (line == QString("*END*"))){ - typesAvailable = true; return; // bye bye - } else { - if ((counter%2) == 0){ // even => teamnames mode + } + else if ((line == QString("*****")) || (line == QString("*END*"))) + { + typesAvailable = true; + return true; // bye bye + } + else + { + if ((counter%2) == 0) + { + // even => teamnames mode TypesTeamnames[(counter/2)].append(line); - } else { // odd => hats mode + } + else + { + // odd => hats mode TypesHatnames[((counter-1)/2)].append(line); } } -// Types.append(line); } - typesAvailable = true; - return; + + typesAvailable = true; + return true; } diff -r 8ed6e810051a -r d38da7c19e43 QTfrontend/namegen.h --- a/QTfrontend/namegen.h Sun Sep 25 16:09:55 2011 +0200 +++ b/QTfrontend/namegen.h Sun Sep 25 19:30:10 2011 +0200 @@ -28,24 +28,24 @@ class HWNamegen { public: - HWNamegen(); - ~HWNamegen(); - void teamRandomName(HWTeam & team, const int HedgehogNumber); - void teamRandomNames(HWTeam & team, const bool changeteamname); - void randomNameByHat(HWTeam & team, const int HedgehogNumber); + static void teamRandomName(HWTeam & team, const int HedgehogNumber); + static void teamRandomNames(HWTeam & team, const bool changeteamname); private: + HWNamegen(); - QList TypesTeamnames; - QList TypesHatnames; - bool typesAvailable; - void loadTypes(); - void dictLoad(const QString filename, QStringList &list); - void hatCfgLoad(const QString hatname, QStringList &list); + static QList TypesTeamnames; + static QList TypesHatnames; + static bool typesAvailable; - QString getRandomGrave(); - QString getRandomFort(); + static bool loadTypes(); + static QStringList dictContents(const QString filename); + static QStringList dictsForHat(const QString hatname); + + static QString getRandomGrave(); + static QString getRandomFort(); + static void teamRandomName(HWTeam & team, const int HedgehogNumber, const QStringList & dict); }; diff -r 8ed6e810051a -r d38da7c19e43 QTfrontend/newnetclient.cpp --- a/QTfrontend/newnetclient.cpp Sun Sep 25 16:09:55 2011 +0200 +++ b/QTfrontend/newnetclient.cpp Sun Sep 25 19:30:10 2011 +0200 @@ -112,7 +112,7 @@ team.flag() + delimeter + QString::number(team.difficulty()); - for(unsigned int i = 0; i < HEDGEHOGS_PER_TEAM; ++i) + for(int i = 0; i < HEDGEHOGS_PER_TEAM; ++i) { cmd.append(delimeter); cmd.append(team.hedgehog(i).Name); diff -r 8ed6e810051a -r d38da7c19e43 QTfrontend/pageeditteam.cpp --- a/QTfrontend/pageeditteam.cpp Sun Sep 25 16:09:55 2011 +0200 +++ b/QTfrontend/pageeditteam.cpp Sun Sep 25 19:30:10 2011 +0200 @@ -24,10 +24,10 @@ #include #include #include +#include #include "pageeditteam.h" #include "sdlkeys.h" -#include "hwconsts.h" #include "SquareLabel.h" #include "hats.h" #include "HWApplication.h" @@ -35,6 +35,7 @@ PageEditTeam::PageEditTeam(QWidget* parent, SDLInteraction * sdli) : AbstractPage(parent) { + m_playerHash = "0000000000000000000000000000000000000000"; mySdli = sdli; QGridLayout * pageLayout = new QGridLayout(this); QTabWidget * tbw = new QTabWidget(this); @@ -43,11 +44,15 @@ tbw->addTab(page1, tr("General")); tbw->addTab(page2, tr("Advanced")); pageLayout->addWidget(tbw, 0, 0, 1, 3); - BtnTeamDiscard = addButton(":/res/Exit.png", pageLayout, 1, 0, true); + BtnTeamSave = addButton(":/res/Save.png", pageLayout, 1, 2, true);; BtnTeamSave->setStyleSheet("QPushButton{margin: 12px 0px 12px 0px;}"); + connect(BtnTeamSave, SIGNAL(clicked()), this, SLOT(saveTeam())); + + BtnTeamDiscard = addButton(":/res/Exit.png", pageLayout, 1, 0, true); BtnTeamDiscard->setFixedHeight(BtnTeamSave->height()); BtnTeamDiscard->setStyleSheet("QPushButton{margin-top: 31px;}"); + connect(BtnTeamDiscard, SIGNAL(clicked()), this, SIGNAL(goBack())); QHBoxLayout * page1Layout = new QHBoxLayout(page1); page1Layout->setAlignment(Qt::AlignTop); @@ -68,9 +73,10 @@ signalMapper2 = new QSignalMapper(this); connect(signalMapper1, SIGNAL(mapped(int)), this, SLOT(fixHHname(int))); + connect(signalMapper2, SIGNAL(mapped(int)), this, SLOT(setRandomName(int))); HatsModel * hatsModel = new HatsModel(GBoxHedgehogs); - for(int i = 0; i < 8; i++) + for(int i = 0; i < HEDGEHOGS_PER_TEAM; i++) { HHHats[i] = new QComboBox(GBoxHedgehogs); HHHats[i]->setModel(hatsModel); @@ -95,6 +101,7 @@ } randTeamButton = addButton(QPushButton::tr("Random Team"), GBHLayout, 9, false); + connect(randTeamButton, SIGNAL(clicked()), this, SLOT(setRandomNames())); vbox1->addWidget(GBoxHedgehogs); @@ -345,6 +352,7 @@ CBBind[i]->addItem(HWApplication::translate("binds (keys)", sdlkeys[j][1]).contains(": ") ? HWApplication::translate("binds (keys)", sdlkeys[j][1]) : HWApplication::translate("binds (keys)", "Keyboard") + QString(": ") + HWApplication::translate("binds (keys)", sdlkeys[j][1]), sdlkeys[j][0]); pagelayout->addWidget(CBBind[i++], num++, 1); } + } void PageEditTeam::fixHHname(int idx) @@ -384,3 +392,106 @@ Mix_PlayChannel(-1, sound, 0); } } + +void PageEditTeam::createTeam(const QString & name, const QString & playerHash) +{ + m_playerHash = playerHash; + HWTeam newTeam(name); + loadTeam(newTeam); +} + +void PageEditTeam::editTeam(const QString & name, const QString & playerHash) +{ + m_playerHash = playerHash; + HWTeam team(name); + team.loadFromFile(); + loadTeam(team); +} + +void PageEditTeam::deleteTeam(const QString & name) +{ + QMessageBox reallyDelete(QMessageBox::Question, QMessageBox::tr("Teams"), QMessageBox::tr("Really delete this team?"), QMessageBox::Ok | QMessageBox::Cancel, this); + + if (reallyDelete.exec() == QMessageBox::Ok) + HWTeam(name).deleteFile(); +} + +void PageEditTeam::setRandomNames() +{ + HWTeam team = data(); + HWNamegen::teamRandomNames(team, true); + loadTeam(team); +} + +void PageEditTeam::setRandomName(int hh_index) +{ + HWTeam team = data(); + HWNamegen::teamRandomName(team,hh_index); + loadTeam(team); +} + +void PageEditTeam::loadTeam(const HWTeam & team) +{ + TeamNameEdit->setText(team.name()); + CBTeamLvl->setCurrentIndex(team.difficulty()); + + for(int i = 0; i < HEDGEHOGS_PER_TEAM; i++) + { + HWHog hh = team.hedgehog(i); + + HHNameEdit[i]->setText(hh.Name); + + if (hh.Hat.startsWith("Reserved")) + hh.Hat = hh.Hat.remove(0,40); + + HHHats[i]->setCurrentIndex(HHHats[i]->findData(hh.Hat, Qt::DisplayRole)); + } + + CBGrave->setCurrentIndex(CBGrave->findText(team.grave())); + CBFlag->setCurrentIndex(CBFlag->findData(team.flag())); + + CBFort->setCurrentIndex(CBFort->findText(team.fort())); + CBVoicepack->setCurrentIndex(CBVoicepack->findText(team.voicepack())); + + for(int i = 0; i < BINDS_NUMBER; i++) + { + CBBind[i]->setCurrentIndex(CBBind[i]->findData(team.keyBind(i))); + } +} + +HWTeam PageEditTeam::data() +{ + HWTeam team(TeamNameEdit->text()); + team.setDifficulty(CBTeamLvl->currentIndex()); + + for(int i = 0; i < HEDGEHOGS_PER_TEAM; i++) + { + HWHog hh; + hh.Name = HHNameEdit[i]->text(); + hh.Hat = HHHats[i]->currentText(); + + if (hh.Hat.startsWith("Reserved")) + hh.Hat = "Reserved"+m_playerHash+hh.Hat.remove(0,9); + + team.setHedgehog(i,hh); + } + + team.setGrave(CBGrave->currentText()); + team.setFort(CBFort->currentText()); + team.setVoicepack(CBVoicepack->currentText()); + team.setFlag(CBFlag->itemData(CBFlag->currentIndex()).toString()); + + for(int i = 0; i < BINDS_NUMBER; i++) + { + team.bindKey(i,CBBind[i]->itemData(CBBind[i]->currentIndex()).toString()); + } + + return team; +} + +void PageEditTeam::saveTeam() +{ + data().saveToFile(); + emit teamEdited(); +} + diff -r 8ed6e810051a -r d38da7c19e43 QTfrontend/pageeditteam.h --- a/QTfrontend/pageeditteam.h Sun Sep 25 16:09:55 2011 +0200 +++ b/QTfrontend/pageeditteam.h Sun Sep 25 19:30:10 2011 +0200 @@ -21,8 +21,12 @@ #include "AbstractPage.h" #include "binds.h" +#include "hwconsts.h" +#include "namegen.h" #include "SDLs.h" +#include "team.h" + class SquareLabel; class PageEditTeam : public AbstractPage @@ -31,6 +35,19 @@ public: PageEditTeam(QWidget* parent, SDLInteraction * sdli); + + void createTeam(const QString & name, const QString & playerHash); + void editTeam(const QString & name, const QString & playerHash); + void deleteTeam(const QString & name); + +signals: + void teamEdited(); + +public slots: + void CBFort_activated(const QString & gravename); + +private: + QPushButton * randTeamButton; QSignalMapper* signalMapper1; QSignalMapper* signalMapper2; QGroupBox *GBoxHedgehogs; @@ -48,19 +65,20 @@ QPushButton *BtnTeamSave; QPushButton * BtnTestSound; QLineEdit * TeamNameEdit; - QLineEdit * HHNameEdit[8]; - QComboBox * HHHats[8]; - QPushButton * randButton[8]; + QLineEdit * HHNameEdit[HEDGEHOGS_PER_TEAM]; + QComboBox * HHHats[HEDGEHOGS_PER_TEAM]; + QPushButton * randButton[HEDGEHOGS_PER_TEAM]; QComboBox * CBBind[BINDS_NUMBER]; - QPushButton * randTeamButton; + SDLInteraction * mySdli; + HWTeam data(); + QString m_playerHash; -private: - SDLInteraction * mySdli; - -public slots: - void CBFort_activated(const QString & gravename); + void loadTeam(const HWTeam & team); private slots: + void saveTeam(); + void setRandomNames(); + void setRandomName(int hh_index); void testSound(); void fixHHname(int idx); }; diff -r 8ed6e810051a -r d38da7c19e43 QTfrontend/pageoptions.cpp --- a/QTfrontend/pageoptions.cpp Sun Sep 25 16:09:55 2011 +0200 +++ b/QTfrontend/pageoptions.cpp Sun Sep 25 19:30:10 2011 +0200 @@ -76,6 +76,7 @@ BtnNewTeam->setIconSize(pmNew.size()); BtnNewTeam->setIcon(pmNew); BtnNewTeam->setMaximumWidth(pmNew.width() + 6); + connect(BtnNewTeam, SIGNAL(clicked()), this, SIGNAL(newTeamRequested())); GBTlayout->addWidget(BtnNewTeam, 0, 1); BtnEditTeam = new QPushButton(teamsBox); @@ -83,6 +84,7 @@ BtnEditTeam->setIconSize(pmEdit.size()); BtnEditTeam->setIcon(pmEdit); BtnEditTeam->setMaximumWidth(pmEdit.width() + 6); + connect(BtnEditTeam, SIGNAL(clicked()), this, SLOT(requestEditSelectedTeam())); GBTlayout->addWidget(BtnEditTeam, 0, 2); BtnDeleteTeam = new QPushButton(teamsBox); @@ -90,6 +92,7 @@ BtnDeleteTeam->setIconSize(pmDelete.size()); BtnDeleteTeam->setIcon(pmDelete); BtnDeleteTeam->setMaximumWidth(pmDelete.width() + 6); + connect(BtnDeleteTeam, SIGNAL(clicked()), this, SLOT(requestDeleteSelectedTeam())); GBTlayout->addWidget(BtnDeleteTeam, 0, 3); LblNoEditTeam = new QLabel(teamsBox); @@ -457,3 +460,23 @@ { editNetNick->setText(editNetNick->text().trimmed()); } + +void PageOptions::requestEditSelectedTeam() +{ + emit editTeamRequested(CBTeamName->currentText()); +} + +void PageOptions::requestDeleteSelectedTeam() +{ + emit deleteTeamRequested(CBTeamName->currentText()); +} + +void PageOptions::setTeamOptionsEnabled(bool enabled) +{ + BtnNewTeam->setVisible(enabled); + BtnEditTeam->setVisible(enabled); + BtnDeleteTeam->setVisible(enabled); + CBTeamName->setVisible(enabled); + LblNoEditTeam->setVisible(!enabled); +} + diff -r 8ed6e810051a -r d38da7c19e43 QTfrontend/pageoptions.h --- a/QTfrontend/pageoptions.h Sun Sep 25 16:09:55 2011 +0200 +++ b/QTfrontend/pageoptions.h Sun Sep 25 19:30:10 2011 +0200 @@ -43,12 +43,8 @@ QComboBox *CBLanguage; - IconedGroupBox *teamsBox; - QPushButton *BtnNewTeam; - QPushButton *BtnEditTeam; - QPushButton *BtnDeleteTeam; + IconedGroupBox *teamsBox;; QPushButton *BtnAssociateFiles; - QLabel *LblNoEditTeam; QComboBox *CBTeamName; IconedGroupBox *AGGroupBox; QComboBox *CBResolution; @@ -76,10 +72,22 @@ QSlider *SLQuality; QCheckBox *CBFrontendEffects; + void setTeamOptionsEnabled(bool enabled); + +signals: + void newTeamRequested(); + void editTeamRequested(const QString & teamName); + void deleteTeamRequested(const QString & teamName); + + private: bool previousFullscreenValue; int previousResolutionIndex; int previousQuality; + QLabel *LblNoEditTeam; + QPushButton *BtnNewTeam; + QPushButton *BtnEditTeam; + QPushButton *BtnDeleteTeam; QPushButton *BtnBack; private slots: @@ -88,6 +96,8 @@ void setResolution(int state); void setQuality(int value); void trimNetNick(); + void requestEditSelectedTeam(); + void requestDeleteSelectedTeam(); }; #endif diff -r 8ed6e810051a -r d38da7c19e43 QTfrontend/team.cpp --- a/QTfrontend/team.cpp Sun Sep 25 16:09:55 2011 +0200 +++ b/QTfrontend/team.cpp Sun Sep 25 19:30:10 2011 +0200 @@ -46,8 +46,8 @@ m_flag = "hedgewars"; for(int i = 0; i < BINDS_NUMBER; i++) { - binds[i].action = cbinds[i].action; - binds[i].strbind = cbinds[i].strbind; + m_binds[i].action = cbinds[i].action; + m_binds[i].strbind = cbinds[i].strbind; } m_rounds = 0; m_wins = 0; @@ -99,8 +99,8 @@ for(int i = 0; i < BINDS_NUMBER; i++) { - binds[i].action = cbinds[i].action; - binds[i].strbind = cbinds[i].strbind; + m_binds[i].action = cbinds[i].action; + m_binds[i].strbind = cbinds[i].strbind; } m_rounds = 0; m_wins = 0; @@ -132,7 +132,7 @@ m_hedgehogs[i].Suicides = teamfile.value(hh + "Suicides", 0).toInt(); } for(int i = 0; i < BINDS_NUMBER; i++) - binds[i].strbind = teamfile.value(QString("Binds/%1").arg(binds[i].action), cbinds[i].strbind).toString(); + m_binds[i].strbind = teamfile.value(QString("Binds/%1").arg(m_binds[i].action), cbinds[i].strbind).toString(); for(int i = 0; i < MAX_ACHIEVEMENTS; i++) if(achievements[i][0][0]) AchievementProgress[i] = teamfile.value(QString("Achievements/%1").arg(achievements[i][0]), 0).toUInt(); @@ -186,7 +186,7 @@ teamfile.setValue(hh + "Suicides", m_hedgehogs[i].Suicides); } for(int i = 0; i < BINDS_NUMBER; i++) - teamfile.setValue(QString("Binds/%1").arg(binds[i].action), binds[i].strbind); + teamfile.setValue(QString("Binds/%1").arg(m_binds[i].action), m_binds[i].strbind); for(int i = 0; i < MAX_ACHIEVEMENTS; i++) if(achievements[i][0][0]) teamfile.setValue(QString("Achievements/%1").arg(achievements[i][0]), AchievementProgress[i]); @@ -195,54 +195,6 @@ return true; } -void HWTeam::SetToPage(HWForm * hwform) -{ - hwform->ui.pageEditTeam->TeamNameEdit->setText(m_name); - hwform->ui.pageEditTeam->CBTeamLvl->setCurrentIndex(m_difficulty); - for(int i = 0; i < HEDGEHOGS_PER_TEAM; i++) - { - hwform->ui.pageEditTeam->HHNameEdit[i]->setText(m_hedgehogs[i].Name); - if (m_hedgehogs[i].Hat.startsWith("Reserved")) - hwform->ui.pageEditTeam->HHHats[i]->setCurrentIndex(hwform->ui.pageEditTeam->HHHats[i]->findData("Reserved "+m_hedgehogs[i].Hat.remove(0,40), Qt::DisplayRole)); - else - hwform->ui.pageEditTeam->HHHats[i]->setCurrentIndex(hwform->ui.pageEditTeam->HHHats[i]->findData(m_hedgehogs[i].Hat, Qt::DisplayRole)); - } - hwform->ui.pageEditTeam->CBGrave->setCurrentIndex(hwform->ui.pageEditTeam->CBGrave->findText(m_grave)); - hwform->ui.pageEditTeam->CBFlag->setCurrentIndex(hwform->ui.pageEditTeam->CBFlag->findData(m_flag)); - - hwform->ui.pageEditTeam->CBFort->setCurrentIndex(hwform->ui.pageEditTeam->CBFort->findText(m_fort)); - hwform->ui.pageEditTeam->CBVoicepack->setCurrentIndex(hwform->ui.pageEditTeam->CBVoicepack->findText(m_voicepack)); - //hwform->ui.pageEditTeam->CBFort_activated(Fort); - - for(int i = 0; i < BINDS_NUMBER; i++) - { - hwform->ui.pageEditTeam->CBBind[i]->setCurrentIndex(hwform->ui.pageEditTeam->CBBind[i]->findData(binds[i].strbind)); - } -} - -void HWTeam::GetFromPage(HWForm * hwform) -{ - m_name = hwform->ui.pageEditTeam->TeamNameEdit->text(); - m_difficulty = hwform->ui.pageEditTeam->CBTeamLvl->currentIndex(); - for(int i = 0; i < HEDGEHOGS_PER_TEAM; i++) - { - m_hedgehogs[i].Name = hwform->ui.pageEditTeam->HHNameEdit[i]->text(); - if (hwform->ui.pageEditTeam->HHHats[i]->currentText().startsWith("Reserved")) - m_hedgehogs[i].Hat = "Reserved"+playerHash+hwform->ui.pageEditTeam->HHHats[i]->currentText().remove(0,9); - else - m_hedgehogs[i].Hat = hwform->ui.pageEditTeam->HHHats[i]->currentText(); - } - - m_grave = hwform->ui.pageEditTeam->CBGrave->currentText(); - m_fort = hwform->ui.pageEditTeam->CBFort->currentText(); - m_voicepack = hwform->ui.pageEditTeam->CBVoicepack->currentText(); - m_flag = hwform->ui.pageEditTeam->CBFlag->itemData(hwform->ui.pageEditTeam->CBFlag->currentIndex()).toString(); - for(int i = 0; i < BINDS_NUMBER; i++) - { - binds[i].strbind = hwform->ui.pageEditTeam->CBBind[i]->itemData(hwform->ui.pageEditTeam->CBBind[i]->currentIndex()).toString(); - } -} - QStringList HWTeam::teamGameConfig(quint32 InitHealth) const { QStringList sl; @@ -260,8 +212,8 @@ if (!m_isNetTeam) for(int i = 0; i < BINDS_NUMBER; i++) - if(!binds[i].strbind.isEmpty()) - sl.push_back(QString("ebind " + binds[i].strbind + " " + binds[i].action)); + if(!m_binds[i].strbind.isEmpty()) + sl.push_back(QString("ebind " + m_binds[i].strbind + " " + m_binds[i].action)); for (int t = 0; t < m_numHedgehogs; t++) { @@ -299,7 +251,7 @@ // single hedgehog const HWHog & HWTeam::hedgehog(unsigned int idx) const { return m_hedgehogs[idx]; } - void HWTeam::setHedgehog(unsigned int idx, const HWHog & hh) { m_hedgehogs[idx] = hh; } + void HWTeam::setHedgehog(unsigned int idx, HWHog hh) { m_hedgehogs[idx] = hh; } // owner QString HWTeam::owner() const { return m_owner; } @@ -315,6 +267,9 @@ void HWTeam::setColor(const QColor & color) { m_color = color; } +// binds +QString HWTeam::keyBind(unsigned int idx) const { return m_binds[idx].strbind; } + void HWTeam::bindKey(unsigned int idx, const QString & key) { m_binds[idx].strbind = key; } // flag void HWTeam::setFlag(const QString & flag) { m_flag = flag; } diff -r 8ed6e810051a -r d38da7c19e43 QTfrontend/team.h --- a/QTfrontend/team.h Sun Sep 25 16:09:55 2011 +0200 +++ b/QTfrontend/team.h Sun Sep 25 19:30:10 2011 +0200 @@ -52,6 +52,7 @@ HWTeam(); // file operations + static HWTeam loadFromFile(const QString & teamName); bool loadFromFile(); bool deleteFile(); bool saveToFile(); @@ -66,18 +67,20 @@ QString grave() const; const HWHog & hedgehog(unsigned int idx) const; bool isNetTeam() const; + QString keyBind(unsigned int idx) const; QString name() const; unsigned char numHedgehogs() const; QString owner() const; QString voicepack() const; // attribute setters + void bindKey(unsigned int idx, const QString & key); void setColor(const QColor & color); void setDifficulty(unsigned int level); void setFlag(const QString & flag); void setFort(const QString & fort); void setGrave(const QString & grave); - void setHedgehog(unsigned int idx, const HWHog & hh); + void setHedgehog(unsigned int idx, HWHog hh); void setName(const QString & name); void setNumHedgehogs(unsigned char num); void setVoicepack(const QString & voicepack); @@ -86,10 +89,6 @@ void incRounds(); void incWins(); - // pages... wait... wth is THIS doing in this class? FIXME!!!! - void SetToPage(HWForm * hwform); - void GetFromPage(HWForm * hwform); - // convert team info into strings for further computation QStringList teamGameConfig(quint32 InitHealth) const; @@ -111,7 +110,7 @@ QString m_voicepack; HWHog m_hedgehogs[HEDGEHOGS_PER_TEAM]; unsigned int m_difficulty; - BindAction binds[BINDS_NUMBER]; + BindAction m_binds[BINDS_NUMBER]; // class members that contain info for the current game setup unsigned char m_numHedgehogs;