# HG changeset patch # User Wuzzy # Date 1546734076 -3600 # Node ID 029f40c609b484410c6b55b35eae6c9e5da32026 # Parent b5618fa33a49e82fb902d56af4dba68f6c86270d Display team records in training menu diff -r b5618fa33a49 -r 029f40c609b4 QTfrontend/hwform.cpp --- a/QTfrontend/hwform.cpp Sat Jan 05 23:15:13 2019 +0100 +++ b/QTfrontend/hwform.cpp Sun Jan 06 01:21:16 2019 +0100 @@ -2039,6 +2039,7 @@ item->setIcon(notFinishedIcon); } } + ui.pageTraining->updateInfo(); } void HWForm::InitCampaignPage() diff -r b5618fa33a49 -r 029f40c609b4 QTfrontend/mission.cpp --- a/QTfrontend/mission.cpp Sat Jan 05 23:15:13 2019 +0100 +++ b/QTfrontend/mission.cpp Sun Jan 06 01:21:16 2019 +0100 @@ -53,3 +53,27 @@ bool won = teamfile->value("Mission " + missionName + "/Won", false).toBool(); return won; } + +/** + Returns true if the mission value adressed with the provided + missionName: Name of the mission in question + teamName: Name of the playing team + key: name of key to check +*/ +bool missionValueExists(QString & missionName, QString & teamName, QString key) +{ + QSettings* teamfile = getMissionTeamFile(missionName, teamName); + return teamfile->contains("Mission " + missionName + "/" + key); +} +/** + Returns a mission value. + NOTE: Check whether the mission value exists first, using missionValueExists. + missionName: Name of the mission in question + teamName: Name of the playing team + key: name of key to read its value from +*/ +QVariant getMissionValue(QString & missionName, QString & teamName, QString key) +{ + QSettings* teamfile = getMissionTeamFile(missionName, teamName); + return teamfile->value("Mission " + missionName + "/" + key); +} diff -r b5618fa33a49 -r 029f40c609b4 QTfrontend/mission.h --- a/QTfrontend/mission.h Sat Jan 05 23:15:13 2019 +0100 +++ b/QTfrontend/mission.h Sun Jan 06 01:21:16 2019 +0100 @@ -24,5 +24,7 @@ QSettings* getMissionTeamFile(QString & missionName, QString & teamName); bool isMissionWon(QString & missionName, QString & teamName); +bool missionValueExists(QString & missionName, QString & teamName, QString key); +QVariant getMissionValue(QString & missionName, QString & teamName, QString key); #endif diff -r b5618fa33a49 -r 029f40c609b4 QTfrontend/ui/page/pagetraining.cpp --- a/QTfrontend/ui/page/pagetraining.cpp Sat Jan 05 23:15:13 2019 +0100 +++ b/QTfrontend/ui/page/pagetraining.cpp Sun Jan 06 01:21:16 2019 +0100 @@ -28,6 +28,7 @@ #include #include +#include "mission.h" #include "hwconsts.h" #include "DataManager.h" @@ -72,9 +73,13 @@ lblDescription->setMinimumWidth(360); lblDescription->setAlignment(Qt::AlignHCenter | Qt::AlignTop); lblDescription->setWordWrap(true); + lblHighscores = new QLabel(); + lblHighscores->setMinimumWidth(360); + lblHighscores->setAlignment(Qt::AlignHCenter | Qt::AlignTop); infoTextLayout->addWidget(lblCaption); infoTextLayout->addWidget(lblDescription); + infoTextLayout->addWidget(lblHighscores); infoLayout->addWidget(infoTextWidget); @@ -88,7 +93,7 @@ // let's not make the tab widget use more space than needed tbw->setFixedWidth(400); pageLayout->setAlignment(tbw, Qt::AlignHCenter); - + tbw->setStyleSheet("QListWidget { border-style: none; padding-top: 6px; }"); // training/challenge/scenario lists @@ -314,9 +319,10 @@ list = (QListWidget*) tbw->currentWidget(); if (list->currentItem()) { + QString missionName = list->currentItem()->data(Qt::UserRole).toString(); QString thumbFile = "physfs://Graphics/Missions/" + subFolder + "/" + - list->currentItem()->data(Qt::UserRole).toString() + + missionName + "@2x.png"; if (QFile::exists(thumbFile)) @@ -331,24 +337,43 @@ btnPreview->setWhatsThis(tr("Start fighting")); - QString realName = list->currentItem()->data( - Qt::UserRole).toString(); - - QString caption = m_info->value(realName + ".name", + QString caption = m_info->value(missionName + ".name", list->currentItem()->text()).toString(); - QString description = m_info->value(realName + ".desc", + QString description = m_info->value(missionName + ".desc", tr("No description available")).toString(); lblCaption->setText("

" + caption +"

"); lblDescription->setText(description); + + // Challenge highscores + QString highscoreText = QString(""); + QString teamName = CBTeam->currentText(); + if (missionValueExists(missionName, teamName, "Highscore")) + //: Highest score of a team + highscoreText = highscoreText + tr("Team highscore: %1").arg(getMissionValue(missionName, teamName, "Highscore").toString()) + "\n"; + if (missionValueExists(missionName, teamName, "Lowscore")) + //: Lowest score of a team + highscoreText = highscoreText + tr("Team lowscore: %1").arg(getMissionValue(missionName, teamName, "Lowscore").toString()) + "\n"; + if (missionValueExists(missionName, teamName, "TimeRecord")) + { + double time = ((double) getMissionValue(missionName, teamName, "TimeRecord").toInt()) / 1000.0; + highscoreText = highscoreText + tr("Team's best time: %L1 s").arg(time, 0, 'f', 3) + "\n"; + } + if (missionValueExists(missionName, teamName, "TimeRecordHigh")) + { + double time = ((double) getMissionValue(missionName, teamName, "TimeRecordHigh").toInt()) / 1000.0; + highscoreText = highscoreText + tr("Team's longest time: %L1 s").arg(time, 0, 'f', 3) + "\n"; + } + + lblHighscores->setText(highscoreText); } else { btnPreview->setIcon(QIcon(":/res/Trainings.png")); lblCaption->setText(tr("Select a mission!")); - // TODO better text and tr() lblDescription->setText(""); + lblHighscores->setText(""); } } } diff -r b5618fa33a49 -r 029f40c609b4 QTfrontend/ui/page/pagetraining.h --- a/QTfrontend/ui/page/pagetraining.h Sat Jan 05 23:15:13 2019 +0100 +++ b/QTfrontend/ui/page/pagetraining.h Sun Jan 06 01:21:16 2019 +0100 @@ -32,6 +32,9 @@ QListWidget * lstScenarios; QComboBox * CBTeam; + public slots: + void updateInfo(); + signals: void startMission(const QString & scriptName, const QString & subFolder); @@ -47,6 +50,7 @@ QPushButton * btnStart; QLabel * lblCaption; QLabel * lblDescription; + QLabel * lblHighscores; QTabWidget * tbw; QSettings * m_info; QString getSubFolderOfSelected(); @@ -54,7 +58,6 @@ private slots: void startSelected(); - void updateInfo(); }; diff -r b5618fa33a49 -r 029f40c609b4 share/hedgewars/Data/Scripts/Utils.lua --- a/share/hedgewars/Data/Scripts/Utils.lua Sat Jan 05 23:15:13 2019 +0100 +++ b/share/hedgewars/Data/Scripts/Utils.lua Sun Jan 06 01:21:16 2019 +0100 @@ -36,12 +36,14 @@ end local function challengeRecordToString(recordType, value) - if recordType == "TimeRecord" or recordType == "TimeRecordHigh" then - return string.format(loc("Team record: %.3fs"), value/1000) + if recordType == "TimeRecord" then + return string.format(loc("Team's best time: %.3fs"), value/1000) + elseif recordType == "TimeRecordHigh" then + return string.format(loc("Team's longest time: %.3fs"), value/1000) elseif recordType == "Highscore" then - return string.format(loc("Team high score: %d"), value) - else - return string.format(loc("Team record: %d"), value) + return string.format(loc("Team highscore: %d"), value) + elseif recordType == "Lowscore" then + return string.format(loc("Team lowscore: %d"), value) end end