# HG changeset patch # User sheepluva # Date 1317132875 -7200 # Node ID 5e3e7d19bdb5d0cbdd19b8bd57c5c84b2631ce8b # Parent 07561ade87cacf79c1a3f89a2e87e8460fbbf6f0 stuffToBeAvoidedInFuture->append("layouting"); diff -r 07561ade87ca -r 5e3e7d19bdb5 QTfrontend/AbstractPage.h --- a/QTfrontend/AbstractPage.h Tue Sep 27 05:08:23 2011 +0200 +++ b/QTfrontend/AbstractPage.h Tue Sep 27 16:14:35 2011 +0200 @@ -78,7 +78,7 @@ virtual ~AbstractPage() {}; - QPushButton * formattedButton(const QString & btname, bool hasIcon); + QPushButton * formattedButton(const QString & btname, bool hasIcon = false); 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); diff -r 07561ade87ca -r 5e3e7d19bdb5 QTfrontend/pagetraining.cpp --- a/QTfrontend/pagetraining.cpp Tue Sep 27 05:08:23 2011 +0200 +++ b/QTfrontend/pagetraining.cpp Tue Sep 27 16:14:35 2011 +0200 @@ -17,6 +17,7 @@ */ #include +#include #include #include #include @@ -32,44 +33,72 @@ // 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); + btnPreview = formattedButton(":/res/Trainings.png", true); + btnPreview->setToolTip(QPushButton::tr("Go!")); + + // make both rows equal height + pageLayout->setRowStretch(0, 1); + pageLayout->setRowStretch(1, 1); // 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); + pageLayout->addWidget(btnPreview, 0, 0); - // make both columns equal width - pageLayout->setColumnStretch(0, 1); - pageLayout->setColumnStretch(1, 1); + // center preview + pageLayout->setAlignment(btnPreview, Qt::AlignRight | Qt::AlignVCenter); - // 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 + // info area (caption on top, description below) + QVBoxLayout * infoLayout = new QVBoxLayout(); + + lblCaption = new QLabel(); + lblCaption->setMinimumWidth(360); + lblCaption->setAlignment(Qt::AlignHCenter | Qt::AlignBottom); + lblCaption->setWordWrap(true); + lblDescription = new QLabel(); + lblDescription->setMinimumWidth(360); + lblDescription->setAlignment(Qt::AlignHCenter | Qt::AlignTop); + lblDescription->setWordWrap(true); + + infoLayout->addWidget(lblCaption); + infoLayout->addWidget(lblDescription); + + pageLayout->addLayout(infoLayout, 0, 1); + pageLayout->setAlignment(infoLayout, Qt::AlignLeft); + + + // mission list lstMissions = new QListWidget(this); - pageLayout->addWidget(lstMissions, 0, 1, 3, 1); // spans over 3 rows + pageLayout->addWidget(lstMissions, 1, 0, 1, 2); // span 2 columns + + // let's not make the list use more space than needed + lstMissions->setFixedWidth(360); + pageLayout->setAlignment(lstMissions, Qt::AlignHCenter); return pageLayout; } +QLayout * PageTraining::footerLayoutDefinition() +{ + QBoxLayout * bottomLayout = new QVBoxLayout(); + + btnStart = formattedButton(QPushButton::tr("Go!")); + btnStart->setFixedWidth(140); + + bottomLayout->addWidget(btnStart); + + bottomLayout->setAlignment(btnStart, Qt::AlignRight | Qt::AlignVCenter); + + return bottomLayout; +} + void PageTraining::connectSignals() { connect(lstMissions, SIGNAL(itemSelectionChanged()), this, SLOT(updateInfo())); connect(lstMissions, SIGNAL(itemDoubleClicked(QListWidgetItem *)), this, SLOT(startSelected())); + connect(btnPreview, SIGNAL(clicked()), this, SLOT(startSelected())); connect(btnStart, SIGNAL(clicked()), this, SLOT(startSelected())); } @@ -78,6 +107,7 @@ { initPage(); +// TODO -> this should be done in a tool "DataDir" class QDir tmpdir; tmpdir.cd(cfgdir->absolutePath()); tmpdir.cd("Data/Missions/Training"); @@ -89,7 +119,12 @@ QStringList defaultList = scriptList(tmpdir); defaultList.sort(); - missionList << defaultList; + // add non-duplicate default scripts to the list + foreach (const QString & mission, defaultList) + { + if (!missionList.contains(mission)) + missionList.append(mission); + } // add only default scripts that have names different from detected user scripts foreach (const QString & mission, missionList) @@ -106,6 +141,10 @@ } updateInfo(); + + // pre-select first mission + if (lstMissions->count() > 0) + lstMissions->setCurrentRow(0); } QStringList PageTraining::scriptList(const QDir & scriptDir) const @@ -132,19 +171,19 @@ // TODO also use .pngs in userdata folder QString thumbFile = datadir->absolutePath() + "/Graphics/Missions/Training/" + lstMissions->currentItem()->data(Qt::UserRole).toString() + ".png"; if (QFile::exists(thumbFile)) - btnStart->setIcon(QIcon(thumbFile)); + btnPreview->setIcon(QIcon(thumbFile)); else - btnStart->setIcon(QIcon(":/res/Trainings.png")); + btnPreview->setIcon(QIcon(":/res/Trainings.png")); - lblCaption->setText(lstMissions->currentItem()->text()); + lblCaption->setText("

" + lstMissions->currentItem()->text()+"

"); // TODO load mission description from file - lblDescription->setText("< Imagine\nMission\nDescription\nhere >\n\nThank you."); + lblDescription->setText("< Imagine Mission Description here >\n\nThank you."); } else { - btnStart->setIcon(QIcon(":/res/Trainings.png")); - lblCaption->setText(tr("Select a mission on the right -->")); + btnPreview->setIcon(QIcon(":/res/Trainings.png")); + lblCaption->setText(tr("Select a mission!")); // TODO better text and tr() - lblDescription->setText("Welcome to the Training screen.\n\n\n...\nWHAT?\nIt's not finished yet..."); + lblDescription->setText(""); } } diff -r 07561ade87ca -r 5e3e7d19bdb5 QTfrontend/pagetraining.h --- a/QTfrontend/pagetraining.h Tue Sep 27 05:08:23 2011 +0200 +++ b/QTfrontend/pagetraining.h Tue Sep 27 16:14:35 2011 +0200 @@ -37,16 +37,16 @@ protected: QLayout * bodyLayoutDefinition(); - // TODO: footer that says "* downloaded/custom content" + QLayout * footerLayoutDefinition(); void connectSignals(); private: - QPushButton * btnStart; // is also preview + QPushButton * btnPreview; + QPushButton * btnStart; QLabel * lblCaption; QLabel * lblDescription; QListWidget * lstMissions; - // TODO reload/refresh button QStringList scriptList(const QDir & scriptDir) const;