--- a/QTfrontend/hwform.cpp Mon Aug 27 17:40:16 2012 +0200
+++ b/QTfrontend/hwform.cpp Sun Sep 16 16:54:51 2012 +0200
@@ -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"
@@ -76,6 +77,7 @@
#include "pagegamestats.h"
#include "pageplayrecord.h"
#include "pagedata.h"
+#include "pagevideos.h"
#include "hwconsts.h"
#include "newnetclient.h"
#include "gamecfgwidget.h"
@@ -90,6 +92,7 @@
#include "drawmapwidget.h"
#include "mouseoverfilter.h"
#include "roomslistmodel.h"
+#include "recorder.h"
#include "DataManager.h"
@@ -140,6 +143,8 @@
config = new GameUIConfig(this, cfgdir->absolutePath() + "/hedgewars.ini");
+ ui.pageVideos->init(config);
+
#ifdef __APPLE__
panel = new M3Panel;
@@ -162,6 +167,7 @@
#endif
UpdateTeamsLists();
+ InitCampaignPage();
UpdateCampaignPage(0);
UpdateWeapons();
@@ -198,6 +204,11 @@
connect(ui.pageNetGame, SIGNAL(DLCClicked()), pageSwitchMapper, SLOT(map()));
pageSwitchMapper->setMapping(ui.pageNetGame, ID_PAGE_DATADOWNLOAD);
+#ifdef VIDEOREC
+ connect(ui.pageMain->BtnVideos, SIGNAL(clicked()), pageSwitchMapper, SLOT(map()));
+ pageSwitchMapper->setMapping(ui.pageMain->BtnVideos, ID_PAGE_VIDEOS);
+#endif
+
//connect(ui.pageMain->BtnExit, SIGNAL(pressed()), this, SLOT(btnExitPressed()));
//connect(ui.pageMain->BtnExit, SIGNAL(clicked()), this, SLOT(btnExitClicked()));
@@ -273,6 +284,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()),
@@ -288,6 +300,7 @@
connect(ui.pageConnecting, SIGNAL(cancelConnection()), this, SLOT(GoBack()));
+ connect(ui.pageVideos, SIGNAL(goBack()), config, SLOT(SaveVideosOptions()));
ammoSchemeModel = new AmmoSchemeModel(this, cfgdir->absolutePath() + "/schemes.ini");
ui.pageScheme->setModel(ammoSchemeModel);
@@ -512,6 +525,11 @@
GoToPage(ID_PAGE_SCHEME);
}
+void HWForm::GoToVideos()
+{
+ GoToPage(ID_PAGE_VIDEOS);
+}
+
void HWForm::OnPageShown(quint8 id, quint8 lastid)
{
#ifdef USE_XFIRE
@@ -603,6 +621,11 @@
config->reloadValues();
}
+ if (id == ID_PAGE_VIDEOS )
+ {
+ config->reloadVideosValues();
+ }
+
// load and save ignore/friends lists
if (lastid == ID_PAGE_NETGAME) // leaving a room
ui.pageNetGame->pChatWidget->saveLists(ui.pageOptions->editNetNick->text());
@@ -704,6 +727,8 @@
int curid = ui.Pages->currentIndex();
if (curid == ID_PAGE_MAIN)
{
+ if (!ui.pageVideos->tryQuit(this))
+ return;
stopAnim = true;
exit();
}
@@ -1354,10 +1379,11 @@
void HWForm::CreateGame(GameCFGWidget * gamecfg, TeamSelWidget* pTeamSelWidget, QString ammo)
{
game = new HWGame(config, gamecfg, ammo, pTeamSelWidget);
+ connect(game, SIGNAL(CampStateChanged(int)), this, SLOT(UpdateCampaignPageProgress(int)));
connect(game, SIGNAL(GameStateChanged(GameState)), this, SLOT(GameStateChanged(GameState)));
connect(game, SIGNAL(GameStats(char, const QString &)), ui.pageGameStats, SLOT(GameStats(char, const QString &)));
connect(game, SIGNAL(ErrorMessage(const QString &)), this, SLOT(ShowErrorMessage(const QString &)), Qt::QueuedConnection);
- connect(game, SIGNAL(HaveRecord(bool, const QByteArray &)), this, SLOT(GetRecord(bool, const QByteArray &)));
+ connect(game, SIGNAL(HaveRecord(RecordType, const QByteArray &)), this, SLOT(GetRecord(RecordType, const QByteArray &)));
m_lastDemo = QByteArray();
}
@@ -1368,43 +1394,47 @@
msg);
}
-void HWForm::GetRecord(bool isDemo, const QByteArray & record)
+void HWForm::GetRecord(RecordType type, const QByteArray & record)
{
- QString filename;
- QByteArray demo = record;
- QString recordFileName =
- config->appendDateTimeToRecordName() ?
- QDateTime::currentDateTime().toString("yyyy-MM-dd_hh-mm") :
- "LastRound";
+ if (type != rtNeither)
+ {
+ QString filename;
+ QByteArray demo = record;
+ QString recordFileName =
+ config->appendDateTimeToRecordName() ?
+ QDateTime::currentDateTime().toString("yyyy-MM-dd_hh-mm") :
+ "LastRound";
- QStringList versionParts = cVersionString->split('-');
- if ( (versionParts.size() == 2) && (!versionParts[1].isEmpty()) && (versionParts[1].contains(':')) )
- recordFileName = recordFileName + "_" + versionParts[1].replace(':','-');
+ QStringList versionParts = cVersionString->split('-');
+ if ( (versionParts.size() == 2) && (!versionParts[1].isEmpty()) && (versionParts[1].contains(':')) )
+ recordFileName = recordFileName + "_" + versionParts[1].replace(':','-');
- if (isDemo)
- {
- demo.replace(QByteArray("\x02TL"), QByteArray("\x02TD"));
- demo.replace(QByteArray("\x02TN"), QByteArray("\x02TD"));
- demo.replace(QByteArray("\x02TS"), QByteArray("\x02TD"));
- filename = cfgdir->absolutePath() + "/Demos/" + recordFileName + "." + *cProtoVer + ".hwd";
- m_lastDemo = demo;
- }
- else
- {
- demo.replace(QByteArray("\x02TL"), QByteArray("\x02TS"));
- demo.replace(QByteArray("\x02TN"), QByteArray("\x02TS"));
- filename = cfgdir->absolutePath() + "/Saves/" + recordFileName + "." + *cProtoVer + ".hws";
+ if (type == rtDemo)
+ {
+ demo.replace(QByteArray("\x02TL"), QByteArray("\x02TD"));
+ demo.replace(QByteArray("\x02TN"), QByteArray("\x02TD"));
+ demo.replace(QByteArray("\x02TS"), QByteArray("\x02TD"));
+ filename = cfgdir->absolutePath() + "/Demos/" + recordFileName + "." + *cProtoVer + ".hwd";
+ m_lastDemo = demo;
+ }
+ else
+ {
+ demo.replace(QByteArray("\x02TL"), QByteArray("\x02TS"));
+ demo.replace(QByteArray("\x02TN"), QByteArray("\x02TS"));
+ filename = cfgdir->absolutePath() + "/Saves/" + recordFileName + "." + *cProtoVer + ".hws";
+ }
+
+ QFile demofile(filename);
+ if (!demofile.open(QIODevice::WriteOnly))
+ ShowErrorMessage(tr("Cannot save record to file %1").arg(filename));
+ else
+ {
+ demofile.write(demo);
+ demofile.close();
+ }
}
-
- QFile demofile(filename);
- if (!demofile.open(QIODevice::WriteOnly))
- {
- ShowErrorMessage(tr("Cannot save record to file %1").arg(filename));
- return ;
- }
- demofile.write(demo);
- demofile.close();
+ ui.pageVideos->startEncoding(record);
}
void HWForm::startTraining(const QString & scriptName)
@@ -1418,7 +1448,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()
@@ -1445,6 +1481,7 @@
xfire_free();
#endif
config->SaveOptions();
+ config->SaveVideosOptions();
event->accept();
}
@@ -1544,24 +1581,51 @@
}
}
+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();
+
+ 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);
- QStringList entries = DataManager::instance().entryList(
- "Missions/Campaign",
- QDir::Files,
- QStringList("*#*.lua")
- );
+ for (unsigned int i = qMin(m + 1, n); i > 0; i--)
+ {
+ ui.pageCampaign->CBMission->addItem(QString("Mission %1: ").arg(i) + QString(missionEntries[i-1]), QString(missionEntries[i-1]));
+ }
+}
- unsigned int n = entries.count();
- for(unsigned int i = 0; (i < n) && (i <= team.campaignProgress()); 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"));
- }
+void HWForm::UpdateCampaignPageProgress(int index)
+{
+ Q_UNUSED(index);
+
+ int missionIndex = ui.pageCampaign->CBMission->currentIndex();
+ UpdateCampaignPage(0);
+ ui.pageCampaign->CBMission->setCurrentIndex(missionIndex);
}
// used for --set-everything [screen width] [screen height] [color dept] [volume] [enable music] [enable sounds] [language file] [full screen] [show FPS] [alternate damage] [timer value] [reduced quality]