# HG changeset patch # User sheepluva # Date 1317090668 -7200 # Node ID ae213ef7030a573b4419c7c27a27c35115214598 # Parent d681b81275232c4205ce12e357d835f2ddcc7ed3 PIMP'ed up training screen. special thanks to mikade for supplying the pics <3 not quite finished (as you'll notice) - but this sheep is heading for sleep. diff -r d681b8127523 -r ae213ef7030a QTfrontend/AbstractPage.h --- a/QTfrontend/AbstractPage.h Mon Sep 26 21:29:40 2011 -0400 +++ b/QTfrontend/AbstractPage.h Tue Sep 27 04:31:08 2011 +0200 @@ -78,6 +78,7 @@ virtual ~AbstractPage() {}; + QPushButton * formattedButton(const QString & btname, bool hasIcon); QPushButton * addButton(const QString & btname, QGridLayout * grid, int wy, int wx, bool hasIcon = false); QPushButton * addButton(const QString & btname, QGridLayout * grid, int wy, int wx, int rowSpan, int columnSpan, bool hasIcon = false); QPushButton * addButton(const QString & btname, QBoxLayout * box, int where, bool hasIcon = false); @@ -87,7 +88,6 @@ QFont * font14; private: - QPushButton * formattedButton(const QString & btname, bool hasIcon); QPushButton * btnBack; }; diff -r d681b8127523 -r ae213ef7030a QTfrontend/hwform.cpp --- a/QTfrontend/hwform.cpp Mon Sep 26 21:29:40 2011 -0400 +++ b/QTfrontend/hwform.cpp Tue Sep 27 04:31:08 2011 +0200 @@ -234,7 +234,7 @@ connect(ui.pageSinglePlayer->BtnLoad, SIGNAL(clicked()), this, SLOT(GoToSaves())); connect(ui.pageSinglePlayer->BtnDemos, SIGNAL(clicked()), this, SLOT(GoToDemos())); - connect(ui.pageTraining->BtnStartTrain, SIGNAL(clicked()), this, SLOT(StartTraining())); + connect(ui.pageTraining, SIGNAL(startMission(const QString&)), this, SLOT(startTraining(const QString&))); connect(ui.pageCampaign->BtnStartCampaign, SIGNAL(clicked()), this, SLOT(StartCampaign())); connect(ui.pageCampaign->CBTeam, SIGNAL(currentIndexChanged(int)), this, SLOT(UpdateCampaignPage(int))); @@ -1126,11 +1126,11 @@ demofile.close(); } -void HWForm::StartTraining() +void HWForm::startTraining(const QString & scriptName) { CreateGame(0, 0, 0); - game->StartTraining(ui.pageTraining->CBSelect->itemData(ui.pageTraining->CBSelect->currentIndex()).toString()); + game->StartTraining(scriptName); } void HWForm::StartCampaign() diff -r d681b8127523 -r ae213ef7030a QTfrontend/hwform.h --- a/QTfrontend/hwform.h Mon Sep 26 21:29:40 2011 -0400 +++ b/QTfrontend/hwform.h Tue Sep 27 04:31:08 2011 +0200 @@ -86,7 +86,7 @@ void DeleteWeaponSet(); void SimpleGame(); void PlayDemo(); - void StartTraining(); + void startTraining(const QString&); void StartCampaign(); void NetConnect(); void NetConnectServer(const QString & host, quint16 port); diff -r d681b8127523 -r ae213ef7030a QTfrontend/pagetraining.cpp --- a/QTfrontend/pagetraining.cpp Mon Sep 26 21:29:40 2011 -0400 +++ b/QTfrontend/pagetraining.cpp Tue Sep 27 04:31:08 2011 +0200 @@ -17,8 +17,10 @@ */ #include +#include +#include +#include #include -#include #include "pagetraining.h" #include "hwconsts.h" @@ -27,29 +29,51 @@ { QGridLayout * pageLayout = new QGridLayout(); - pageLayout->setColumnStretch(0, 1); - pageLayout->setColumnStretch(1, 2); - pageLayout->setColumnStretch(2, 1); +// left column + + // declare start button, caption and description + btnStart = formattedButton(":/res/Trainings.png", true); + btnStart->setToolTip(QPushButton::tr("Go!")); + lblCaption = new QLabel(this); + lblDescription = new QLabel(this); + lblDescription->setWordWrap(true); + + // add start button, caption and description to 3 different rows + pageLayout->addWidget(btnStart, 0, 0); + pageLayout->addWidget(lblCaption, 1, 0); + pageLayout->addWidget(lblDescription, 2, 0); + + // make first and last row stretch vertically pageLayout->setRowStretch(0, 1); + pageLayout->setRowStretch(1, 0); pageLayout->setRowStretch(2, 1); - CBSelect = new QComboBox(this); + // make both columns equal width + pageLayout->setColumnStretch(0, 1); + pageLayout->setColumnStretch(1, 1); - pageLayout->addWidget(CBSelect, 1, 1); - - BtnStartTrain = new QPushButton(this); - BtnStartTrain->setFont(*font14); - BtnStartTrain->setText(QPushButton::tr("Go!")); - pageLayout->addWidget(BtnStartTrain, 1, 2); + // center widgets within their grid cells + pageLayout->setAlignment(btnStart, Qt::AlignHCenter | Qt::AlignVCenter); + pageLayout->setAlignment(lblCaption, Qt::AlignHCenter | Qt::AlignVCenter); + pageLayout->setAlignment(lblDescription, Qt::AlignHCenter | Qt::AlignVCenter); + +// right column + + lstMissions = new QListWidget(this); + pageLayout->addWidget(lstMissions, 0, 1, 3, 1); // spans over 3 rows return pageLayout; } + void PageTraining::connectSignals() { - //TODO + connect(lstMissions, SIGNAL(itemSelectionChanged()), this, SLOT(updateInfo())); + connect(lstMissions, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(startSelected())); + connect(btnStart, SIGNAL(clicked()), this, SLOT(startSelected())); } + PageTraining::PageTraining(QWidget* parent) : AbstractPage(parent) { initPage(); @@ -57,29 +81,32 @@ QDir tmpdir; tmpdir.cd(cfgdir->absolutePath()); tmpdir.cd("Data/Missions/Training"); - QStringList userlist = scriptList(tmpdir); + QStringList missionList = scriptList(tmpdir); + missionList.sort(); + missionList.replaceInStrings(QRegExp("$")," *"); tmpdir.cd(datadir->absolutePath()); tmpdir.cd("Missions/Training"); - QStringList defaultlist = scriptList(tmpdir); + QStringList defaultList = scriptList(tmpdir); + defaultList.sort(); - CBSelect->addItems(userlist); + missionList << defaultList; // add only default scripts that have names different from detected user scripts - foreach (const QString & line, defaultlist) + foreach (const QString & mission, missionList) { - if (!userlist.contains(line,Qt::CaseInsensitive)) CBSelect->addItem(line); + QListWidgetItem * item = new QListWidgetItem(mission); + + // replace underscores in mission name with spaces + item->setText(item->text().replace("_", " ")); + + // store original name in data + item->setData(Qt::UserRole, mission); + + lstMissions->addItem(item); } - // replace underscores with spaces in the displayed that - for(int i = 0; i < CBSelect->count(); i++) - { - QString text = CBSelect->itemText(i); - CBSelect->setItemData(i, text); - CBSelect->setItemText(i, text.replace("_", " ")); -// if (userlist.contains(text)) -// CBSelect->setItemText(i, text + " (" + AbstractPage::tr("custom") + ")"); - } + updateInfo(); } QStringList PageTraining::scriptList(const QDir & scriptDir) const @@ -88,3 +115,33 @@ dir.setFilter(QDir::Files); return dir.entryList(QStringList("*.lua")).replaceInStrings(QRegExp("^(.*)\\.lua"), "\\1"); } + + +void PageTraining::startSelected() +{ + emit startMission(lstMissions->currentItem()->data(Qt::UserRole).toString()); +} + + +void PageTraining::updateInfo() +{ + if (lstMissions->currentItem()) + { + QString thumbFile = datadir->absolutePath() + "/Graphics/Missions/Training/" + lstMissions->currentItem()->data(Qt::UserRole).toString() + ".png"; + if (QFile::exists(thumbFile)) + btnStart->setIcon(QIcon(thumbFile)); + else + btnStart->setIcon(QIcon(":/res/Trainings.png")); + + lblCaption->setText(lstMissions->currentItem()->text()); + // TODO load mission description from file + lblDescription->setText("< Imagine\nMission\nDescription\nhere >\n\nThank you."); + } + else + { + btnStart->setIcon(QIcon(":/res/Trainings.png")); + lblCaption->setText(tr("Select a mission on the right -->")); + // TODO better text and tr() + lblDescription->setText("Welcome to the Training screen.\n\n\n...\nWHAT?\nIt's not finished yet..."); + } +} diff -r d681b8127523 -r ae213ef7030a QTfrontend/pagetraining.h --- a/QTfrontend/pagetraining.h Mon Sep 26 21:29:40 2011 -0400 +++ b/QTfrontend/pagetraining.h Tue Sep 27 04:31:08 2011 +0200 @@ -30,15 +30,31 @@ public: PageTraining(QWidget* parent = 0); - QPushButton *BtnStartTrain; - QComboBox *CBSelect; + +signals: + void startMission(const QString & scriptName); + protected: QLayout * bodyLayoutDefinition(); + // TODO: footer that says "* downloaded/custom content" void connectSignals(); + private: + QPushButton * btnStart; // is also preview + QLabel * lblCaption; + QLabel * lblDescription; + QListWidget * lstMissions; + // TODO reload/refresh button + QStringList scriptList(const QDir & scriptDir) const; + + +private slots: + void startSelected(); + void updateInfo(); + }; #endif diff -r d681b8127523 -r ae213ef7030a share/hedgewars/Data/Graphics/CMakeLists.txt --- a/share/hedgewars/Data/Graphics/CMakeLists.txt Mon Sep 26 21:29:40 2011 -0400 +++ b/share/hedgewars/Data/Graphics/CMakeLists.txt Tue Sep 27 04:31:08 2011 +0200 @@ -4,6 +4,7 @@ add_subdirectory(Hats) add_subdirectory(Hedgehog) add_subdirectory(SuddenDeath) +add_subdirectory(Missions) file(GLOB BaseSprites *.png) list(REMOVE_ITEM BaseSprites *@2x.png) diff -r d681b8127523 -r ae213ef7030a share/hedgewars/Data/Graphics/Missions/CMakeLists.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Graphics/Missions/CMakeLists.txt Tue Sep 27 04:31:08 2011 +0200 @@ -0,0 +1,1 @@ +add_subdirectory(Training) diff -r d681b8127523 -r ae213ef7030a share/hedgewars/Data/Graphics/Missions/Training/Basic_Training_-_Bazooka.png Binary file share/hedgewars/Data/Graphics/Missions/Training/Basic_Training_-_Bazooka.png has changed diff -r d681b8127523 -r ae213ef7030a share/hedgewars/Data/Graphics/Missions/Training/Basic_Training_-_Shotgun.png Binary file share/hedgewars/Data/Graphics/Missions/Training/Basic_Training_-_Shotgun.png has changed diff -r d681b8127523 -r ae213ef7030a share/hedgewars/Data/Graphics/Missions/Training/Basic_Training_-_Sniper_Rifle.png Binary file share/hedgewars/Data/Graphics/Missions/Training/Basic_Training_-_Sniper_Rifle.png has changed diff -r d681b8127523 -r ae213ef7030a share/hedgewars/Data/Graphics/Missions/Training/CMakeLists.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/share/hedgewars/Data/Graphics/Missions/Training/CMakeLists.txt Tue Sep 27 04:31:08 2011 +0200 @@ -0,0 +1,5 @@ +file(GLOB MissionPics *.png) + +install(FILES + ${MissionPics} + DESTINATION ${SHAREPATH}Data/Graphics/Missions/Training) diff -r d681b8127523 -r ae213ef7030a share/hedgewars/Data/Graphics/Missions/Training/User_Mission_-_Bamboo_Thicket.png Binary file share/hedgewars/Data/Graphics/Missions/Training/User_Mission_-_Bamboo_Thicket.png has changed diff -r d681b8127523 -r ae213ef7030a share/hedgewars/Data/Graphics/Missions/Training/User_Mission_-_Dangerous_Ducklings.png Binary file share/hedgewars/Data/Graphics/Missions/Training/User_Mission_-_Dangerous_Ducklings.png has changed diff -r d681b8127523 -r ae213ef7030a share/hedgewars/Data/Graphics/Missions/Training/User_Mission_-_Diver.png Binary file share/hedgewars/Data/Graphics/Missions/Training/User_Mission_-_Diver.png has changed diff -r d681b8127523 -r ae213ef7030a share/hedgewars/Data/Graphics/Missions/Training/User_Mission_-_Newton_and_the_Hammock.png Binary file share/hedgewars/Data/Graphics/Missions/Training/User_Mission_-_Newton_and_the_Hammock.png has changed diff -r d681b8127523 -r ae213ef7030a share/hedgewars/Data/Graphics/Missions/Training/User_Mission_-_Spooky_Tree.png Binary file share/hedgewars/Data/Graphics/Missions/Training/User_Mission_-_Spooky_Tree.png has changed diff -r d681b8127523 -r ae213ef7030a share/hedgewars/Data/Graphics/Missions/Training/User_Mission_-_Teamwork.png Binary file share/hedgewars/Data/Graphics/Missions/Training/User_Mission_-_Teamwork.png has changed diff -r d681b8127523 -r ae213ef7030a share/hedgewars/Data/Graphics/Missions/Training/User_Mission_-_That_Sinking_Feeling.png Binary file share/hedgewars/Data/Graphics/Missions/Training/User_Mission_-_That_Sinking_Feeling.png has changed