diff -r f329fbf1ffb4 -r dc17ffdf0702 QTfrontend/hwform.cpp --- a/QTfrontend/hwform.cpp Fri Jun 08 19:25:40 2012 +0200 +++ b/QTfrontend/hwform.cpp Mon Jun 25 10:46:48 2012 +0300 @@ -51,6 +51,7 @@ #include "hwform.h" #include "game.h" #include "team.h" +#include "campaign.h" #include "teamselect.h" #include "selectWeapon.h" #include "gameuiconfig.h" @@ -162,6 +163,7 @@ #endif UpdateTeamsLists(); + InitCampaignPage(); UpdateCampaignPage(0); UpdateWeapons(); @@ -273,6 +275,7 @@ connect(ui.pageCampaign->BtnStartCampaign, SIGNAL(clicked()), this, SLOT(StartCampaign())); connect(ui.pageCampaign->CBTeam, SIGNAL(currentIndexChanged(int)), this, SLOT(UpdateCampaignPage(int))); + connect(ui.pageCampaign->CBCampaign, SIGNAL(currentIndexChanged(int)), this, SLOT(UpdateCampaignPage(int))); connect(ui.pageSelectWeapon->BtnDelete, SIGNAL(clicked()), @@ -1418,7 +1421,13 @@ { CreateGame(0, 0, 0); - game->StartCampaign(ui.pageCampaign->CBSelect->itemData(ui.pageCampaign->CBSelect->currentIndex()).toString()); + QComboBox *combo = ui.pageCampaign->CBMission; + QString camp = ui.pageCampaign->CBCampaign->currentText(); + unsigned int mNum = combo->count() - combo->currentIndex(); + QString miss = getCampaignScript(camp, mNum); + QString campTeam = ui.pageCampaign->CBTeam->currentText(); + + game->StartCampaign(camp, miss, campTeam); } void HWForm::CreateNetGame() @@ -1544,23 +1553,41 @@ } } +void HWForm::InitCampaignPage() +{ + ui.pageCampaign->CBCampaign->clear(); + HWTeam team(ui.pageCampaign->CBTeam->currentText()); + + QStringList entries = DataManager::instance().entryList( + "Missions/Campaign", + QDir::Dirs, + QStringList("[^\\.]*") + ); + + unsigned int n = entries.count(); + for(unsigned int i = 0; i < n; i++) + { + ui.pageCampaign->CBCampaign->addItem(QString(entries[i]), QString(entries[i])); + } +} + + void HWForm::UpdateCampaignPage(int index) { Q_UNUSED(index); HWTeam team(ui.pageCampaign->CBTeam->currentText()); - ui.pageCampaign->CBSelect->clear(); + ui.pageCampaign->CBMission->clear(); - QStringList entries = DataManager::instance().entryList( - "Missions/Campaign", - QDir::Files, - QStringList("*#*.lua") - ); + QString campaignName = ui.pageCampaign->CBCampaign->currentText(); + QStringList missionEntries = getCampMissionList(campaignName); + QString tName = team.name(); + unsigned int n = missionEntries.count(); + unsigned int m = getCampProgress(tName, campaignName); - unsigned int n = entries.count(); - for(unsigned int i = 0; (i < n) && (i <= team.campaignProgress()); i++) + for (unsigned int i = min(m + 1, n); i > 0; i--) { - ui.pageCampaign->CBSelect->addItem(QString(entries[i]).replace(QRegExp("^(\\d+)#(.+)\\.lua"), QComboBox::tr("Mission") + " \\1: \\2").replace("_", " "), QString(entries[i]).replace(QRegExp("^(.*)\\.lua"), "\\1")); + ui.pageCampaign->CBMission->addItem(QString("Mission %1: ").arg(i) + QString(missionEntries[i-1]), QString(missionEntries[i-1])); } }