merge Wuzzy's frontend tweaks
authorsheepluva
Sun, 15 May 2016 11:37:07 +0200
changeset 11820 fe339879cf75
parent 11807 93621207563b (current diff)
parent 11819 7642955690bc (diff)
child 11821 d8844d4c67de
merge Wuzzy's frontend tweaks
--- a/QTfrontend/hedgewars.qrc	Sun May 15 10:43:18 2016 +0200
+++ b/QTfrontend/hedgewars.qrc	Sun May 15 11:37:07 2016 +0200
@@ -22,6 +22,12 @@
         <file>res/botlevels/3.png</file>
         <file>res/botlevels/4.png</file>
         <file>res/botlevels/5.png</file>
+        <file>res/botlevels/small0.png</file>
+        <file>res/botlevels/small1.png</file>
+        <file>res/botlevels/small2.png</file>
+        <file>res/botlevels/small3.png</file>
+        <file>res/botlevels/small4.png</file>
+        <file>res/botlevels/small5.png</file>
         <file>res/botlevels/net0.png</file>
         <file>res/botlevels/net1.png</file>
         <file>res/botlevels/net2.png</file>
--- a/QTfrontend/model/ammoSchemeModel.cpp	Sun May 15 10:43:18 2016 +0200
+++ b/QTfrontend/model/ammoSchemeModel.cpp	Sun May 15 11:37:07 2016 +0200
@@ -755,13 +755,13 @@
     if (row == -1)
     {
         QList<QVariant> newScheme = defaultScheme;
-        newScheme[0] = QVariant(tr("new"));
+        newScheme[0] = QVariant(tr("New"));
         schemes.insert(schemes.size(), newScheme);
     }
     else
     {
         QList<QVariant> newScheme = schemes[row];
-        newScheme[0] = QVariant(tr("copy of %1").arg(newScheme[0].toString()));
+        newScheme[0] = QVariant(tr("Copy of %1").arg(newScheme[0].toString()));
         schemes.insert(schemes.size(), newScheme);
     }
 
Binary file QTfrontend/res/botlevels/small0.png has changed
Binary file QTfrontend/res/botlevels/small1.png has changed
Binary file QTfrontend/res/botlevels/small1.xcf has changed
Binary file QTfrontend/res/botlevels/small2.png has changed
Binary file QTfrontend/res/botlevels/small2.xcf has changed
Binary file QTfrontend/res/botlevels/small3.png has changed
Binary file QTfrontend/res/botlevels/small3.xcf has changed
Binary file QTfrontend/res/botlevels/small4.png has changed
Binary file QTfrontend/res/botlevels/small4.xcf has changed
Binary file QTfrontend/res/botlevels/small5.png has changed
Binary file QTfrontend/res/botlevels/small5.xcf has changed
--- a/QTfrontend/ui/page/AbstractPage.cpp	Sun May 15 10:43:18 2016 +0200
+++ b/QTfrontend/ui/page/AbstractPage.cpp	Sun May 15 11:37:07 2016 +0200
@@ -45,7 +45,7 @@
 
     // stretch grid space for body and footer
     pageLayout->setColumnStretch(0,1);
-    pageLayout->setColumnStretch(1,2);
+    pageLayout->setColumnStretch(1,8);
     pageLayout->setColumnStretch(2,1);
     pageLayout->setRowStretch(0,1);
     pageLayout->setRowStretch(1,0);
@@ -127,24 +127,24 @@
     return btn;
 }
 
-QPushButtonWithSound * AbstractPage::addButton(const QString & name, QGridLayout * grid, int row, int column, int rowSpan, int columnSpan, bool hasIcon)
+QPushButtonWithSound * AbstractPage::addButton(const QString & name, QGridLayout * grid, int row, int column, int rowSpan, int columnSpan, bool hasIcon, Qt::Alignment alignment)
 {
     QPushButtonWithSound * btn = formattedButton(name, hasIcon);
-    grid->addWidget(btn, row, column, rowSpan, columnSpan);
+    grid->addWidget(btn, row, column, rowSpan, columnSpan, alignment);
     return btn;
 }
 
-QPushButtonWithSound * AbstractPage::addButton(const QString & name, QBoxLayout * box, int where, bool hasIcon)
+QPushButtonWithSound * AbstractPage::addButton(const QString & name, QBoxLayout * box, int where, bool hasIcon, Qt::Alignment alignment)
 {
     QPushButtonWithSound * btn = formattedButton(name, hasIcon);
-    box->addWidget(btn, where);
+    box->addWidget(btn, where, alignment);
     return btn;
 }
 
-QPushButton* AbstractPage::addSoundlessButton(const QString & name, QBoxLayout * box, int where, bool hasIcon)
+QPushButton* AbstractPage::addSoundlessButton(const QString & name, QBoxLayout * box, int where, bool hasIcon, Qt::Alignment alignment)
 {
     QPushButton* btn = formattedSoundlessButton(name, hasIcon);
-    box->addWidget(btn, where);
+    box->addWidget(btn, where, alignment);
     return btn;
 }
 
--- a/QTfrontend/ui/page/AbstractPage.h	Sun May 15 10:43:18 2016 +0200
+++ b/QTfrontend/ui/page/AbstractPage.h	Sun May 15 11:37:07 2016 +0200
@@ -185,10 +185,11 @@
          * @param rowSpan how many layout rows the button will span.
          * @param columnSpan how many layout columns the button will span.
          * @param hasIcon set to true if this is a picture button.
+         * @param alignment alignment of the button in the layout.
          *
          * @return the button.
          */
-        QPushButtonWithSound * addButton(const QString & name, QGridLayout * grid, int row, int column, int rowSpan = 1, int columnSpan = 1, bool hasIcon = false);
+        QPushButtonWithSound * addButton(const QString & name, QGridLayout * grid, int row, int column, int rowSpan = 1, int columnSpan = 1, bool hasIcon = false, Qt::Alignment alignment = 0);
 
         /**
          * @brief Creates a default formatted button and adds it to a
@@ -198,11 +199,12 @@
          * @param box pointer of the box layout in which to insert the button.
          * @param where layout ndex in which to insert the button.
          * @param hasIcon set to true if this is a picture button.
+         * @param alignment alignment of the button in the layout.
          *
          * @return the button.
          */
-        QPushButtonWithSound * addButton(const QString & name, QBoxLayout * box, int where, bool hasIcon = false);
-        QPushButton* addSoundlessButton(const QString & name, QBoxLayout * box, int where, bool hasIcon = false);
+        QPushButtonWithSound * addButton(const QString & name, QBoxLayout * box, int where, bool hasIcon = false, Qt::Alignment alignment = 0);
+        QPushButton* addSoundlessButton(const QString & name, QBoxLayout * box, int where, bool hasIcon = false, Qt::Alignment alignment = 0);
 
         /**
          * @brief Changes visibility of the back-button.
--- a/QTfrontend/ui/page/pagedata.cpp	Sun May 15 10:43:18 2016 +0200
+++ b/QTfrontend/ui/page/pagedata.cpp	Sun May 15 11:37:07 2016 +0200
@@ -54,7 +54,8 @@
     QHBoxLayout * bottomLayout = new QHBoxLayout();
     bottomLayout->setStretch(0, 1);
 
-    pbOpenDir = addButton(tr("Open packages directory"), bottomLayout, 1, false);
+    pbOpenDir = addButton(tr("Open packages directory"), bottomLayout, 1, false, Qt::AlignBottom);
+    pbOpenDir->setMinimumHeight(50);
 
     bottomLayout->setStretch(2, 1);
 
--- a/QTfrontend/ui/page/pageeditteam.cpp	Sun May 15 10:43:18 2016 +0200
+++ b/QTfrontend/ui/page/pageeditteam.cpp	Sun May 15 11:37:07 2016 +0200
@@ -100,7 +100,7 @@
     tmpLabel->setText(QLabel::tr("Name"));
     GBTLayout->addWidget(tmpLabel, 0, 0);
     tmpLabel = new QLabel(GBoxTeam);
-    tmpLabel->setText(QLabel::tr("Type"));
+    tmpLabel->setText(QLabel::tr("Player"));
     GBTLayout->addWidget(tmpLabel, 1, 0);
     tmpLabel = new QLabel(GBoxTeam);
     tmpLabel->setText(QLabel::tr("Grave"));
@@ -118,19 +118,21 @@
     vbox2->addWidget(GBoxTeam);
 
     CBTeamLvl = new QComboBox(GBoxTeam);
-    CBTeamLvl->setIconSize(QSize(48, 48));
-    CBTeamLvl->addItem(QIcon(":/res/botlevels/0.png"), QComboBox::tr("Human"));
+    CBTeamLvl->setIconSize(QSize(32, 32));
+    CBTeamLvl->addItem(QIcon(":/res/botlevels/small0.png"), QComboBox::tr("Human"));
     for(int i = 5; i > 0; i--)
         CBTeamLvl->addItem(
-            QIcon(QString(":/res/botlevels/%1.png").arg(6 - i)),
-            QString("%1 %2").arg(QComboBox::tr("Level")).arg(i)
+            QIcon(QString(":/res/botlevels/small%1.png").arg(6 - i)),
+            QComboBox::tr("Computer (Level %1)").arg(i)
         );
+    CBTeamLvl->setFixedHeight(38);
     GBTLayout->addWidget(CBTeamLvl, 1, 1);
 
     CBGrave = new QComboBox(GBoxTeam);
     CBGrave->setMaxCount(65535);
     CBGrave->setMaxVisibleItems(20);
     CBGrave->setIconSize(QSize(32, 32));
+    CBGrave->setFixedHeight(44);
     GBTLayout->addWidget(CBGrave, 2, 1);
 
     CBFlag = new QComboBox(GBoxTeam);
@@ -145,6 +147,7 @@
 
     hbox->addWidget(CBVoicepack, 100);
     btnTestSound = addSoundlessButton(":/res/PlaySound.png", hbox, 1, true);
+    btnTestSound->setWhatsThis("Play a random example of this voice");
     hbox->setStretchFactor(btnTestSound, 1);
 
     GBTLayout->addLayout(hbox, 4, 1);
@@ -153,6 +156,7 @@
     GBoxFort->setTitle(QGroupBox::tr("Fort"));
     QGridLayout * GBFLayout = new QGridLayout(GBoxFort);
     CBFort = new QComboBox(GBoxFort);
+    CBFort->setMaxVisibleItems(25);
     CBFort->setMaxCount(65535);
     GBFLayout->addWidget(CBFort, 0, 0);
     FortPreview = new SquareLabel(GBoxFort);
--- a/QTfrontend/ui/page/pageinfo.cpp	Sun May 15 10:43:18 2016 +0200
+++ b/QTfrontend/ui/page/pageinfo.cpp	Sun May 15 11:37:07 2016 +0200
@@ -40,9 +40,10 @@
 QLayout * PageInfo::footerLayoutDefinition()
 {
     QHBoxLayout * bottomLayout = new QHBoxLayout();
-    BtnSnapshots = addButton(":/res/Star.png", bottomLayout, 0, true);
+    bottomLayout->setContentsMargins(0,0,0,0);
+    BtnSnapshots = addButton(":/res/Star.png", bottomLayout, 0, true, Qt::AlignBottom);
     BtnSnapshots->setWhatsThis(tr("Open the snapshot folder"));
-    bottomLayout->setAlignment(BtnSnapshots, Qt::AlignRight | Qt::AlignVCenter);
+    BtnSnapshots->setMinimumSize(50,50);
     return bottomLayout;
 }
 
--- a/QTfrontend/ui/page/pagemain.cpp	Sun May 15 10:43:18 2016 +0200
+++ b/QTfrontend/ui/page/pagemain.cpp	Sun May 15 11:37:07 2016 +0200
@@ -109,11 +109,11 @@
     btnBack->setWhatsThis(tr("Exit game"));
 
 #ifdef VIDEOREC
-    BtnVideos = addButton(":/res/Videos.png", bottomLayout, 1, true);
+    BtnVideos = addButton(":/res/Videos.png", bottomLayout, 1, true, Qt::AlignBottom);
     BtnVideos->setWhatsThis(tr("Manage videos recorded from game"));
 #endif
 
-    BtnSetup = addButton(":/res/Settings.png", bottomLayout, 2, true);
+    BtnSetup = addButton(":/res/Settings.png", bottomLayout, 2, true, Qt::AlignBottom);
     BtnSetup->setWhatsThis(tr("Edit game preferences"));
 
     return bottomLayout;
--- a/QTfrontend/ui/page/pagemultiplayer.cpp	Sun May 15 10:43:18 2016 +0200
+++ b/QTfrontend/ui/page/pagemultiplayer.cpp	Sun May 15 11:37:07 2016 +0200
@@ -46,7 +46,7 @@
 {
     QHBoxLayout * bottomLeftLayout = new QHBoxLayout();
 
-    btnSetup = addButton(":/res/Settings.png", bottomLeftLayout, 0, true);
+    btnSetup = addButton(":/res/Settings.png", bottomLeftLayout, 0, true, Qt::AlignBottom);
     btnSetup->setWhatsThis(tr("Edit game preferences"));
 
     return bottomLeftLayout;
@@ -60,6 +60,7 @@
     QSize sz = lp.actualSize(QSize(65535, 65535));
     BtnStartMPGame = new QPushButton();
     BtnStartMPGame->setText(tr("Start"));
+    BtnStartMPGame->setWhatsThis(tr("Start fighting (requires at least 2 teams)"));
     BtnStartMPGame->setMinimumWidth(sz.width() + 60);
     BtnStartMPGame->setIcon(lp);
     BtnStartMPGame->setFixedHeight(50);
@@ -68,7 +69,7 @@
     BtnStartMPGame->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
 
     footerLayout->addStretch();
-    footerLayout->addWidget(BtnStartMPGame);
+    footerLayout->addWidget(BtnStartMPGame, 0, Qt::AlignBottom);
 
     return footerLayout;
 }
--- a/QTfrontend/ui/page/pagenet.cpp	Sun May 15 10:43:18 2016 +0200
+++ b/QTfrontend/ui/page/pagenet.cpp	Sun May 15 11:37:07 2016 +0200
@@ -71,7 +71,7 @@
     QHBoxLayout * footerLayout = new QHBoxLayout();
 
     BtnNetSvrStart = formattedButton(QPushButton::tr("Start server"));
-    BtnNetSvrStart->setMinimumWidth(180);
+    BtnNetSvrStart->setMinimumSize(180, 50);
     QString serverPath = bindir->absolutePath() + "/hedgewars-server";
 #ifdef Q_OS_WIN
     serverPath += + ".exe";
@@ -80,7 +80,7 @@
     BtnNetSvrStart->setVisible(server.exists());
 
     footerLayout->addStretch();
-    footerLayout->addWidget(BtnNetSvrStart);
+    footerLayout->addWidget(BtnNetSvrStart, 0, Qt::AlignBottom);
 
     return footerLayout;
 }
--- a/QTfrontend/ui/page/pagenetgame.cpp	Sun May 15 10:43:18 2016 +0200
+++ b/QTfrontend/ui/page/pagenetgame.cpp	Sun May 15 11:37:07 2016 +0200
@@ -49,6 +49,7 @@
     roomConfigLayout->setSpacing(0);
 
     leRoomName = new HistoryLineEdit(this, 10);
+    leRoomName->setWhatsThis(tr("Room name"));
     leRoomName->setMaxLength(60);
     leRoomName->setMinimumWidth(400);
     leRoomName->setMaximumWidth(600);
@@ -58,6 +59,7 @@
     roomConfigLayout->addWidget(leRoomName, 100);
 
     BtnUpdate = new QPushButton();
+    BtnUpdate->setWhatsThis(tr("Update the room name"));
     BtnUpdate->setEnabled(false);
     BtnUpdate->setText(tr("Update"));
     BtnUpdate->setFixedHeight(leRoomName->height() - 0);
@@ -111,8 +113,9 @@
 QLayout * PageNetGame::footerLayoutLeftDefinition()
 {
     QHBoxLayout * bottomLeftLayout = new QHBoxLayout();
+    bottomLeftLayout->setContentsMargins(0,0,0,0);
 
-    btnSetup = addButton(":/res/Settings.png", bottomLeftLayout, 0, true);
+    btnSetup = addButton(":/res/Settings.png", bottomLeftLayout, 0, true, Qt::AlignBottom);
     btnSetup->setWhatsThis(tr("Edit game preferences"));
 
     return bottomLeftLayout;
@@ -125,13 +128,14 @@
     // Ready button
 
     BtnGo = new QPushButton(this);
-    BtnGo->setIcon(QIcon(":/res/lightbulb_off.png"));
     BtnGo->setIconSize(QSize(25, 34));
+    BtnGo->setWhatsThis(tr("Turn on the lightbulb to show the other players when you're ready to fight"));
+    setReadyStatus(false);
     BtnGo->setMinimumWidth(50);
     BtnGo->setMinimumHeight(50);
 
     bottomLayout->addStretch();
-    bottomLayout->addWidget(BtnGo);
+    bottomLayout->addWidget(BtnGo, 0, Qt::AlignBottom);
 
     // Start button
 
@@ -139,13 +143,14 @@
     QSize sz = lp.actualSize(QSize(65535, 65535));
     BtnStart = new QPushButton();
     BtnStart->setText(tr("Start"));
+    BtnStart->setWhatsThis(tr("Start fighting (requires at least 2 teams)"));
     BtnStart->setMinimumWidth(sz.width() + 60);
     BtnStart->setIcon(lp);
     BtnStart->setFixedHeight(50);
     BtnStart->setIconSize(sz);
     BtnStart->setFlat(true);
     BtnStart->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
-    bottomLayout->addWidget(BtnStart);
+    bottomLayout->addWidget(BtnStart, 0, Qt::AlignBottom);
 
     return bottomLayout;
 }
@@ -217,9 +222,13 @@
 void PageNetGame::setReadyStatus(bool isReady)
 {
     if(isReady)
+    {
         BtnGo->setIcon(QIcon(":/res/lightbulb_on.png"));
+    }
     else
+    {
         BtnGo->setIcon(QIcon(":/res/lightbulb_off.png"));
+    }
 }
 
 void PageNetGame::onRoomNameEdited()
--- a/QTfrontend/ui/page/pagenetserver.cpp	Sun May 15 10:43:18 2016 +0200
+++ b/QTfrontend/ui/page/pagenetserver.cpp	Sun May 15 11:37:07 2016 +0200
@@ -98,10 +98,10 @@
 
     BtnStart = formattedButton(QPushButton::tr("Start"));
     BtnStart->setWhatsThis(QPushButton::tr("Start private server"));
-    BtnStart->setMinimumWidth(180);
+    BtnStart->setMinimumSize(180, 50);
 
     bottomLayout->addStretch();
-    bottomLayout->addWidget(BtnStart);
+    bottomLayout->addWidget(BtnStart, 0, Qt::AlignBottom);
 
     return bottomLayout;
 }
--- a/QTfrontend/ui/page/pageplayrecord.cpp	Sun May 15 10:43:18 2016 +0200
+++ b/QTfrontend/ui/page/pageplayrecord.cpp	Sun May 15 11:37:07 2016 +0200
@@ -40,11 +40,6 @@
     pageLayout->setColumnStretch(2, 1);
     pageLayout->setRowStretch(2, 100);
 
-    BtnPlayDemo = new QPushButton(this);
-    BtnPlayDemo->setFont(*font14);
-    BtnPlayDemo->setText(QPushButton::tr("Play demo"));
-    pageLayout->addWidget(BtnPlayDemo, 3, 2);
-
     BtnRenameRecord = new QPushButton(this);
     BtnRenameRecord->setText(QPushButton::tr("Rename"));
     pageLayout->addWidget(BtnRenameRecord, 0, 2);
@@ -60,6 +55,23 @@
     return pageLayout;
 }
 
+QLayout * PagePlayDemo::footerLayoutDefinition()
+{
+    QHBoxLayout * bottomLayout = new QHBoxLayout();
+
+    BtnPlayDemo = addButton(tr("Play demo"), bottomLayout, 0, false, Qt::AlignBottom);
+    const QIcon& lp = QIcon(":/res/Start.png");
+    QSize sz = lp.actualSize(QSize(65535, 65535));
+    BtnPlayDemo->setMinimumWidth(sz.width());
+    BtnPlayDemo->setIcon(lp);
+    BtnPlayDemo->setFixedHeight(50);
+    BtnPlayDemo->setIconSize(sz);
+    BtnPlayDemo->setFlat(true);
+    BtnPlayDemo->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
+
+    return bottomLayout;
+}
+
 void PagePlayDemo::connectSignals()
 {
     connect(BtnRenameRecord, SIGNAL(clicked()), this, SLOT(renameRecord()));
@@ -85,12 +97,14 @@
         dir.cd("Demos");
         extension = "hwd";
         BtnPlayDemo->setText(QPushButton::tr("Play demo"));
+        BtnPlayDemo->setWhatsThis(tr("Play the selected demo"));
     }
     else
     {
         dir.cd("Saves");
         extension = "hws";
         BtnPlayDemo->setText(QPushButton::tr("Load"));
+        BtnPlayDemo->setWhatsThis(tr("Load the selected game"));
     }
     dir.setFilter(QDir::Files);
 
--- a/QTfrontend/ui/page/pageplayrecord.h	Sun May 15 10:43:18 2016 +0200
+++ b/QTfrontend/ui/page/pageplayrecord.h	Sun May 15 11:37:07 2016 +0200
@@ -52,6 +52,7 @@
 
     private:
         QLayout * bodyLayoutDefinition();
+        QLayout * footerLayoutDefinition();
         void connectSignals();
 
         RecordType recType;
--- a/QTfrontend/ui/page/pageroomslist.cpp	Sun May 15 10:43:18 2016 +0200
+++ b/QTfrontend/ui/page/pageroomslist.cpp	Sun May 15 11:37:07 2016 +0200
@@ -174,8 +174,8 @@
 {
     QHBoxLayout * bottomLayout = new QHBoxLayout();
 
-    BtnAdmin = addButton(tr("Admin features"), bottomLayout, 0);
-    BtnAdmin->setStyleSheet("padding: 4px auto;");
+    BtnAdmin = addButton(tr("Admin features"), bottomLayout, 0, false, Qt::AlignBottom);
+    BtnAdmin->setMinimumSize(180, 50);
     BtnAdmin->setWhatsThis(tr("Open server administration page"));
 
     return bottomLayout;
--- a/QTfrontend/ui/page/pagescheme.cpp	Sun May 15 10:43:18 2016 +0200
+++ b/QTfrontend/ui/page/pagescheme.cpp	Sun May 15 11:37:07 2016 +0200
@@ -30,6 +30,7 @@
 #include "ammoSchemeModel.h"
 #include "pagescheme.h"
 #include "FreqSpinBox.h"
+#include "MinesTimeSpinBox.h"
 
 
 QLayout * PageScheme::bodyLayoutDefinition()
@@ -170,15 +171,37 @@
     // Right
     QLabel * l;
 
+    QString wtDamageModifier = tr("Overall damage and knockback in percent");
+    QString wtTurnTime = tr("Turn time in seconds");
+    QString wtInitHealth = tr("Initial health of hedgehogs");
+    QString wtSuddenDeath = tr("How many rounds have to be played before Sudden Death begins");
+    QString wtWaterRise = tr("How much the water rises per turn while in Sudden Death. Set to 0 along with Sudden Death Health Decrease to disable Sudden Death.");
+    QString wtHealthDecrease = tr("How much health hedgehogs lose per turn while in Sudden Death, down to 1 health. Set to 0 along with Sudden Death Water Rise to disable Sudden Death.");
+    QString wtRopeModifier = tr("Maximum rope length in percent");
+    QString wtHealthCrates = tr("Likelihood of a dropped crate being a health crate. All other crates will be weapon or utility crates.");
+    QString wtCaseProb = tr("Likelihood of a crate dropping before a turn");
+    QString wtCrateHealth= tr("Health bonus for collecting a health crate");
+    QString wtMinesTime = tr("Detonation timer of mines. The random timer lies between 0 and 5 seconds. The timer of air mines will be a quarter of the mines timer.");
+    QString wtMines = tr("Average number of mines to be placed a medium-sized island map. This number will be scaled for other maps.");
+    QString wtMineDuds = tr("Likelihood of a mine being a dud. Does not affect mines placed by hedgehogs.");
+    QString wtExplosives = tr("Average number of barrels to be placed a medium-sized island map. This number will be scaled for other maps.");
+    QString wtAirMines = tr("Average number of air mines to be placed a medium-sized island map. This number will be scaled for other maps.");
+    QString wtWorldEdge = tr("Affects the left and right boundaries of the map");
+    QString wtGetAwayTime = tr("Time you get after an attack");
+    QString wtScriptParam = tr("Additional parameter to configure game styles. The meaning depends on the used style, refer to the documentation. When in doubt, leave it empty.");
+
     l = new QLabel(gbBasicSettings);
     l->setText(QLabel::tr("Damage Modifier"));
+    l->setWhatsThis(wtDamageModifier);
     l->setWordWrap(true);
     glBSLayout->addWidget(l,0,0,1,1);
     l = new QLabel(gbBasicSettings);
+    l->setWhatsThis(wtDamageModifier);
     l->setFixedSize(32,32);
     l->setPixmap(QPixmap(":/res/iconDamage.png"));
     glBSLayout->addWidget(l,0,1,1,1);
     SB_DamageModifier = new QSpinBox(gbBasicSettings);
+    SB_DamageModifier->setWhatsThis(wtDamageModifier);
     SB_DamageModifier->setRange(10, 300);
     SB_DamageModifier->setValue(100);
     SB_DamageModifier->setSingleStep(25);
@@ -186,13 +209,16 @@
 
     l = new QLabel(gbBasicSettings);
     l->setText(QLabel::tr("Turn Time"));
+    l->setWhatsThis(wtTurnTime);
     l->setWordWrap(true);
     glBSLayout->addWidget(l,1,0,1,1);
     l = new QLabel(gbBasicSettings);
+    l->setWhatsThis(wtTurnTime);
     l->setFixedSize(32,32);
     l->setPixmap(QPixmap(":/res/iconTime.png"));
     glBSLayout->addWidget(l,1,1,1,1);
     SB_TurnTime = new QSpinBox(gbBasicSettings);
+    SB_TurnTime->setWhatsThis(wtTurnTime);
     SB_TurnTime->setRange(1, 9999);
     SB_TurnTime->setValue(45);
     SB_TurnTime->setSingleStep(15);
@@ -200,13 +226,16 @@
 
     l = new QLabel(gbBasicSettings);
     l->setText(QLabel::tr("Initial Health"));
+    l->setWhatsThis(wtInitHealth);
     l->setWordWrap(true);
     glBSLayout->addWidget(l,2,0,1,1);
     l = new QLabel(gbBasicSettings);
+    l->setWhatsThis(wtInitHealth);
     l->setFixedSize(32,32);
     l->setPixmap(QPixmap(":/res/iconHealth.png"));
     glBSLayout->addWidget(l,2,1,1,1);
     SB_InitHealth = new QSpinBox(gbBasicSettings);
+    SB_InitHealth->setWhatsThis(wtInitHealth);
     SB_InitHealth->setRange(50, 200);
     SB_InitHealth->setValue(100);
     SB_InitHealth->setSingleStep(25);
@@ -214,13 +243,16 @@
 
     l = new QLabel(gbBasicSettings);
     l->setText(QLabel::tr("Sudden Death Timeout"));
+    l->setWhatsThis(wtSuddenDeath);
     l->setWordWrap(true);
     glBSLayout->addWidget(l,3,0,1,1);
     l = new QLabel(gbBasicSettings);
     l->setFixedSize(32,32);
+    l->setWhatsThis(wtSuddenDeath);
     l->setPixmap(QPixmap(":/res/iconSuddenDeathTime.png"));
     glBSLayout->addWidget(l,3,1,1,1);
     SB_SuddenDeath = new QSpinBox(gbBasicSettings);
+    SB_SuddenDeath->setWhatsThis(wtSuddenDeath);
     SB_SuddenDeath->setRange(0, 50);
     SB_SuddenDeath->setValue(15);
     SB_SuddenDeath->setSingleStep(3);
@@ -228,13 +260,16 @@
 
     l = new QLabel(gbBasicSettings);
     l->setText(QLabel::tr("Sudden Death Water Rise"));
+    l->setWhatsThis(wtWaterRise);
     l->setWordWrap(true);
     glBSLayout->addWidget(l,4,0,1,1);
     l = new QLabel(gbBasicSettings);
+    l->setWhatsThis(wtWaterRise);
     l->setFixedSize(32,32);
     l->setPixmap(QPixmap(":/res/iconSuddenDeathWater.png"));
     glBSLayout->addWidget(l,4,1,1,1);
     SB_WaterRise = new QSpinBox(gbBasicSettings);
+    SB_WaterRise->setWhatsThis(wtWaterRise);
     SB_WaterRise->setRange(0, 100);
     SB_WaterRise->setValue(47);
     SB_WaterRise->setSingleStep(5);
@@ -242,13 +277,16 @@
 
     l = new QLabel(gbBasicSettings);
     l->setText(QLabel::tr("Sudden Death Health Decrease"));
+    l->setWhatsThis(wtHealthDecrease);
     l->setWordWrap(true);
     glBSLayout->addWidget(l,5,0,1,1);
     l = new QLabel(gbBasicSettings);
+    l->setWhatsThis(wtHealthDecrease);
     l->setFixedSize(32,32);
     l->setPixmap(QPixmap(":/res/iconSuddenDeath.png"));
     glBSLayout->addWidget(l,5,1,1,1);
     SB_HealthDecrease = new QSpinBox(gbBasicSettings);
+    SB_HealthDecrease->setWhatsThis(wtHealthDecrease);
     SB_HealthDecrease->setRange(0, 100);
     SB_HealthDecrease->setValue(5);
     SB_HealthDecrease->setSingleStep(1);
@@ -256,13 +294,16 @@
 
     l = new QLabel(gbBasicSettings);
     l->setText(QLabel::tr("% Rope Length"));
+    l->setWhatsThis(wtRopeModifier);
     l->setWordWrap(true);
     glBSLayout->addWidget(l,6,0,1,1);
     l = new QLabel(gbBasicSettings);
+    l->setWhatsThis(wtRopeModifier);
     l->setFixedSize(32,32);
     l->setPixmap(QPixmap(":/res/iconRope.png"));
     glBSLayout->addWidget(l,6,1,1,1);
     SB_RopeModifier = new QSpinBox(gbBasicSettings);
+    SB_RopeModifier->setWhatsThis(wtRopeModifier);
     SB_RopeModifier->setRange(25, 999);
     SB_RopeModifier->setValue(100);
     SB_RopeModifier->setSingleStep(25);
@@ -270,26 +311,32 @@
 
     l = new QLabel(gbBasicSettings);
     l->setText(QLabel::tr("Crate Drops"));
+    l->setWhatsThis(wtCaseProb);
     l->setWordWrap(true);
     glBSLayout->addWidget(l,7,0,1,1);
     l = new QLabel(gbBasicSettings);
     l->setFixedSize(32,32);
+    l->setWhatsThis(wtCaseProb);
     l->setPixmap(QPixmap(":/res/iconBox.png"));
     glBSLayout->addWidget(l,7,1,1,1);
     SB_CaseProb = new FreqSpinBox(gbBasicSettings);
+    SB_CaseProb->setWhatsThis(wtCaseProb);
     SB_CaseProb->setRange(0, 9);
     SB_CaseProb->setValue(5);
     glBSLayout->addWidget(SB_CaseProb,7,2,1,1);
 
     l = new QLabel(gbBasicSettings);
     l->setText(QLabel::tr("% Health Crates"));
+    l->setWhatsThis(wtHealthCrates);
     l->setWordWrap(true);
     glBSLayout->addWidget(l,8,0,1,1);
     l = new QLabel(gbBasicSettings);
     l->setFixedSize(32,32);
+    l->setWhatsThis(wtHealthCrates);
     l->setPixmap(QPixmap(":/res/iconHealthPercent.png"));
     glBSLayout->addWidget(l,8,1,1,1);
     SB_HealthCrates = new QSpinBox(gbBasicSettings);
+    SB_HealthCrates->setWhatsThis(wtHealthCrates);
     SB_HealthCrates->setRange(0, 100);
     SB_HealthCrates->setValue(35);
     SB_HealthCrates->setSingleStep(5);
@@ -297,13 +344,16 @@
 
     l = new QLabel(gbBasicSettings);
     l->setText(QLabel::tr("Health in Crates"));
+    l->setWhatsThis(wtCrateHealth);
     l->setWordWrap(true);
     glBSLayout->addWidget(l,9,0,1,1);
     l = new QLabel(gbBasicSettings);
     l->setFixedSize(32,32);
+    l->setWhatsThis(wtCrateHealth);
     l->setPixmap(QPixmap(":/res/iconHealth.png"));
     glBSLayout->addWidget(l,9,1,1,1);
     SB_CrateHealth = new QSpinBox(gbBasicSettings);
+    SB_CrateHealth->setWhatsThis(wtCrateHealth);
     SB_CrateHealth->setRange(0, 200);
     SB_CrateHealth->setValue(25);
     SB_CrateHealth->setSingleStep(5);
@@ -311,29 +361,33 @@
 
     l = new QLabel(gbBasicSettings);
     l->setText(QLabel::tr("Mines Time"));
+    l->setWhatsThis(wtMinesTime);
     l->setWordWrap(true);
     glBSLayout->addWidget(l,10,0,1,1);
     l = new QLabel(gbBasicSettings);
+    l->setWhatsThis(wtMinesTime);
     l->setFixedSize(32,32);
     l->setPixmap(QPixmap(":/res/iconMineTime.png"));
     glBSLayout->addWidget(l,10,1,1,1);
-    SB_MinesTime = new QSpinBox(gbBasicSettings);
+    SB_MinesTime = new MinesTimeSpinBox(gbBasicSettings);
+    SB_MinesTime->setWhatsThis(wtMinesTime);
     SB_MinesTime->setRange(-1, 5);
     SB_MinesTime->setValue(3);
     SB_MinesTime->setSingleStep(1);
-    SB_MinesTime->setSpecialValueText(tr("Random"));
-    SB_MinesTime->setSuffix(" "+ tr("Seconds"));
     glBSLayout->addWidget(SB_MinesTime,10,2,1,1);
 
     l = new QLabel(gbBasicSettings);
     l->setText(QLabel::tr("Mines"));
+    l->setWhatsThis(wtMines);
     l->setWordWrap(true);
     glBSLayout->addWidget(l,11,0,1,1);
     l = new QLabel(gbBasicSettings);
+    l->setWhatsThis(wtMines);
     l->setFixedSize(32,32);
     l->setPixmap(QPixmap(":/res/iconMine.png"));
     glBSLayout->addWidget(l,11,1,1,1);
     SB_Mines = new QSpinBox(gbBasicSettings);
+    SB_Mines->setWhatsThis(wtMines);
     SB_Mines->setRange(0, 200);
     SB_Mines->setValue(0);
     SB_Mines->setSingleStep(5);
@@ -341,27 +395,33 @@
 
     l = new QLabel(gbBasicSettings);
     l->setText(QLabel::tr("% Dud Mines"));
+    l->setWhatsThis(wtMineDuds);
     l->setWordWrap(true);
     glBSLayout->addWidget(l,12,0,1,1);
     l = new QLabel(gbBasicSettings);
+    l->setWhatsThis(wtMineDuds);
     l->setFixedSize(32,32);
     l->setPixmap(QPixmap(":/res/iconDud.png"));
     glBSLayout->addWidget(l,12,1,1,1);
     SB_MineDuds = new QSpinBox(gbBasicSettings);
+    SB_MineDuds->setWhatsThis(wtMineDuds);
     SB_MineDuds->setRange(0, 100);
     SB_MineDuds->setValue(0);
     SB_MineDuds->setSingleStep(5);
     glBSLayout->addWidget(SB_MineDuds,12,2,1,1);
 
     l = new QLabel(gbBasicSettings);
-    l->setText(QLabel::tr("Explosives"));
+    l->setText(QLabel::tr("Barrels"));
+    l->setWhatsThis(wtExplosives);
     l->setWordWrap(true);
     glBSLayout->addWidget(l,13,0,1,1);
     l = new QLabel(gbBasicSettings);
+    l->setWhatsThis(wtExplosives);
     l->setFixedSize(32,32);
     l->setPixmap(QPixmap(":/res/iconExplosive.png"));
     glBSLayout->addWidget(l,13,1,1,1);
     SB_Explosives = new QSpinBox(gbBasicSettings);
+    SB_Explosives->setWhatsThis(wtExplosives);
     SB_Explosives->setRange(0, 200);
     SB_Explosives->setValue(0);
     SB_Explosives->setSingleStep(3);
@@ -369,27 +429,33 @@
 
     l = new QLabel(gbBasicSettings);
     l->setText(QLabel::tr("Air Mines"));
+    l->setWhatsThis(wtAirMines);
     l->setWordWrap(true);
     glBSLayout->addWidget(l,14,0,1,1);
     l = new QLabel(gbBasicSettings);
+    l->setWhatsThis(wtAirMines);
     l->setFixedSize(32,32);
     l->setPixmap(QPixmap(":/res/iconAirMine.png"));
     glBSLayout->addWidget(l,14,1,1,1);
     SB_AirMines = new QSpinBox(gbBasicSettings);
+    SB_AirMines->setWhatsThis(wtAirMines);
     SB_AirMines->setRange(0, 200);
     SB_AirMines->setValue(0);
     SB_AirMines->setSingleStep(5);
     glBSLayout->addWidget(SB_AirMines,14,2,1,1);
 
     l = new QLabel(gbBasicSettings);
-    l->setText(QLabel::tr("% Get Away Time"));
+    l->setText(QLabel::tr("% Retreat Time"));
+    l->setWhatsThis(wtGetAwayTime);
     l->setWordWrap(true);
     glBSLayout->addWidget(l,15,0,1,1);
     l = new QLabel(gbBasicSettings);
+    l->setWhatsThis(wtGetAwayTime);
     l->setFixedSize(32,32);
     l->setPixmap(QPixmap(":/res/iconTime.png"));
     glBSLayout->addWidget(l,15,1,1,1);
     SB_GetAwayTime = new QSpinBox(gbBasicSettings);
+    SB_GetAwayTime->setWhatsThis(wtGetAwayTime);
     SB_GetAwayTime->setRange(0, 999);
     SB_GetAwayTime->setValue(100);
     SB_GetAwayTime->setSingleStep(25);
@@ -397,14 +463,17 @@
 
     l = new QLabel(gbBasicSettings);
     l->setText(QLabel::tr("World Edge"));
+    l->setWhatsThis(wtWorldEdge);
     l->setWordWrap(true);
     glBSLayout->addWidget(l,16,0,1,1);
     l = new QLabel(gbBasicSettings);
+    l->setWhatsThis(wtWorldEdge);
     l->setFixedSize(32,32);
     l->setPixmap(QPixmap(":/res/iconEarth.png"));
     glBSLayout->addWidget(l,16,1,1,1);
 
     CB_WorldEdge = new QComboBox(gbBasicSettings);
+    CB_WorldEdge->setWhatsThis(wtWorldEdge);
     CB_WorldEdge->insertItem(0, tr("None (Default)"));
     CB_WorldEdge->insertItem(1, tr("Wrap (World wraps)"));
     CB_WorldEdge->insertItem(2, tr("Bounce (Edges reflect)"));
@@ -415,14 +484,17 @@
 
     l = new QLabel(gbBasicSettings);
     l->setText(QLabel::tr("Script parameter"));
+    l->setWhatsThis(wtScriptParam);
     l->setWordWrap(true);
     glBSLayout->addWidget(l,17,0,1,1);
     l = new QLabel(gbBasicSettings);
+    l->setWhatsThis(wtScriptParam);
     l->setFixedSize(32,32);
     l->setPixmap(QPixmap(":/res/iconScript.png"));
     glBSLayout->addWidget(l,17,1,1,1);
 
     LE_ScriptParam = new QLineEdit(gbBasicSettings);
+    LE_ScriptParam->setWhatsThis(wtScriptParam);
     LE_ScriptParam->setMaxLength(240);
     glBSLayout->addWidget(LE_ScriptParam,17,2,1,1);
 
@@ -431,6 +503,7 @@
     l->setText(QLabel::tr("Scheme Name:"));
 
     LE_name = new QLineEdit(this);
+    LE_name->setWhatsThis("Name of this scheme");
 
     gl->addWidget(LE_name,15,1,1,5);
     gl->addWidget(l,15,0,1,1);
--- a/QTfrontend/ui/page/pagescheme.h	Sun May 15 10:43:18 2016 +0200
+++ b/QTfrontend/ui/page/pagescheme.h	Sun May 15 11:37:07 2016 +0200
@@ -23,6 +23,7 @@
 #include "togglebutton.h"
 
 class FreqSpinBox;
+class MinesTimeSpinBox;
 
 class PageScheme : public AbstractPage
 {
@@ -85,7 +86,7 @@
         FreqSpinBox * SB_CaseProb;
         QSpinBox * SB_HealthCrates;
         QSpinBox * SB_CrateHealth;
-        QSpinBox * SB_MinesTime;
+        MinesTimeSpinBox * SB_MinesTime;
         QSpinBox * SB_Mines;
         QSpinBox * SB_AirMines;
         QSpinBox * SB_MineDuds;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QTfrontend/ui/widget/MinesTimeSpinBox.cpp	Sun May 15 11:37:07 2016 +0200
@@ -0,0 +1,40 @@
+/*
+ * Hedgewars, a free turn based strategy game
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+/**
+ * @file
+ * @brief MinesTimeSpinBox class implementation
+ */
+
+#include "MinesTimeSpinBox.h"
+
+
+MinesTimeSpinBox::MinesTimeSpinBox(QWidget* parent) : QSpinBox(parent)
+{
+    // do nothing
+};
+
+
+QString MinesTimeSpinBox::textFromValue(int value) const
+{
+    switch (value)
+    {
+        case -1: return tr("Random");
+        default: return tr("%1 seconds", "", value).arg(value);
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/QTfrontend/ui/widget/MinesTimeSpinBox.h	Sun May 15 11:37:07 2016 +0200
@@ -0,0 +1,55 @@
+/*
+ * Hedgewars, a free turn based strategy game
+ * Copyright (c) 2004-2015 Andrey Korotaev <unC0Rr@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ */
+
+/**
+ * @file
+ * @brief MinesTimeSpinBox class definition
+ */
+
+#ifndef HEDGEWARS_MINESTIMESPINBOX_H
+#define HEDGEWARS_MINESTIMESPINBOX_H
+
+#include <QObject>
+#include <QSpinBox>
+
+/**
+ * <code>SpinBox</code> that returns its value as localized mines time.
+ * @since  0.9.23
+ */
+class MinesTimeSpinBox : public QSpinBox
+{
+        Q_OBJECT
+
+    public:
+        /**
+         * @brief Class constructor.
+         * @param parent parent widget.
+         */
+        MinesTimeSpinBox(QWidget * parent);
+
+    protected:
+        /**
+         * Returns it's value localized.
+         * @param value integer value to be representing as string.
+         * @return string representation
+         */
+        QString textFromValue(int value) const;
+};
+
+
+#endif // HEDGEWARS_MINESTIMESPINBOX_H
--- a/QTfrontend/ui/widget/chatwidget.cpp	Sun May 15 10:43:18 2016 +0200
+++ b/QTfrontend/ui/widget/chatwidget.cpp	Sun May 15 11:37:07 2016 +0200
@@ -210,6 +210,7 @@
     // Chat view
 
     chatText = new QTextBrowser(this);
+    chatText->setWhatsThis(tr("Chat log"));
     chatText->document()->setDefaultStyleSheet(styleSheet());
     chatText->setMinimumHeight(20);
     chatText->setMinimumWidth(10);
@@ -226,6 +227,7 @@
     // Hover:   rgb(13, 5, 68)
 
     chatEditLine = new SmartLineEdit();
+    chatEditLine->setWhatsThis(tr("Enter chat messages here and send them with [Enter]"));
     chatEditLine->setMaxLength(300);
     chatEditLine->setStyleSheet("SmartLineEdit { background-color: rgb(23, 11, 54); padding: 2px 8px; border-width: 0px; border-radius: 7px; } SmartLineEdit:hover, SmartLineEdit:focus { background-color: rgb(13, 5, 68); }");
     chatEditLine->setFixedHeight(24);
@@ -237,6 +239,7 @@
     // Nickname list
 
     chatNicks = new QListView(this);
+    chatNicks->setWhatsThis(tr("List of players"));
     chatNicks->setIconSize(QSize(24, 16));
     chatNicks->setSelectionMode(QAbstractItemView::SingleSelection);
     chatNicks->setEditTriggers(QAbstractItemView::NoEditTriggers);
--- a/QTfrontend/ui/widget/mapContainer.cpp	Sun May 15 10:43:18 2016 +0200
+++ b/QTfrontend/ui/widget/mapContainer.cpp	Sun May 15 11:37:07 2016 +0200
@@ -137,6 +137,7 @@
 
     btnSeed = new QPushButton(parentWidget()->parentWidget());
     btnSeed->setText(tr("Seed"));
+    btnSeed->setWhatsThis(tr("View and edit the seed, the source of randomness in the game"));
     btnSeed->setStyleSheet("padding: 5px;");
     btnSeed->setFixedHeight(cType->height());
     connect(btnSeed, SIGNAL(clicked()), this, SLOT(showSeedPrompt()));
@@ -255,6 +256,7 @@
     QHBoxLayout * themeHBox = new QHBoxLayout(this);
 
     btnRandTheme = new QPushButton();
+    btnRandTheme->setWhatsThis(tr("Randomize the theme"));
     btnRandTheme->setIcon(lp);
     btnRandTheme->setIconSize(QSize(24, 24));
     btnRandTheme->setFixedHeight(30);
@@ -264,6 +266,7 @@
     themeHBox->addWidget(btnRandTheme, 0);
 
     btnTheme = new QPushButton(this);
+    btnTheme->setWhatsThis(tr("Choose a theme"));
     btnTheme->setFlat(true);
     btnTheme->setIconSize(QSize(30, 30));
     btnTheme->setFixedHeight(30);
@@ -794,6 +797,44 @@
     changeMapType((MapModel::MapType)cType->itemData(index).toInt());
 }
 
+void HWMapContainer::updateHelpTexts(MapModel::MapType type)
+{
+    QString randomAll = tr("Randomize the map, theme and seed");
+    QString randomNoMap = tr("Randomize the theme and seed");
+    QString randomSeed = tr("Randomize the seed");
+    QString randomAllPrev = tr("Click to randomize the map, theme and seed");
+    QString randomNoMapPrev = tr("Click to randomize the theme and seed");
+    QString mfsComplex = QString(tr("Adjust the complexity of the generated map"));
+    QString mfsFortsDistance = QString(tr("Adjust the distance between forts"));
+    switch (type)
+    {
+        case MapModel::GeneratedMap:
+        case MapModel::GeneratedPerlin:
+        case MapModel::GeneratedMaze:
+            mapPreview->setWhatsThis(randomAllPrev);
+            mapFeatureSize->setWhatsThis(mfsComplex);
+            btnRandomize->setWhatsThis(randomAll);
+            break;
+        case MapModel::MissionMap:
+        case MapModel::StaticMap:
+            mapPreview->setWhatsThis(randomAllPrev);
+            btnRandomize->setWhatsThis(randomAll);
+            break;
+        case MapModel::HandDrawnMap:
+            mapPreview->setWhatsThis(tr("Click to edit"));
+            btnRandomize->setWhatsThis(randomSeed);
+            break;
+        case MapModel::FortsMap:
+            mapPreview->setWhatsThis(randomNoMapPrev);
+            mapFeatureSize->setWhatsThis(mfsFortsDistance);
+            btnRandomize->setWhatsThis(randomNoMap);
+            break;
+        default:
+            break;
+    }
+}
+ 
+
 void HWMapContainer::changeMapType(MapModel::MapType type, const QModelIndex & newMap)
 {
     staticMapList->hide();
@@ -870,6 +911,9 @@
     // Update theme button size
     updateThemeButtonSize();
 
+    // Update “What's This?” help texts
+    updateHelpTexts(type);
+
     // Update cType combobox
     for (int i = 0; i < cType->count(); i++)
     {
@@ -888,6 +932,7 @@
 void HWMapContainer::intSetFeatureSize(int val)
 {
     mapFeatureSize->setValue(val);    
+    updateHelpTexts((MapModel::MapType)cType->itemData(cType->currentIndex()).toInt());
     emit mapFeatureSizeChanged(val);
 }
 void HWMapContainer::setFeatureSize(int val)
--- a/QTfrontend/ui/widget/mapContainer.h	Sun May 15 10:43:18 2016 +0200
+++ b/QTfrontend/ui/widget/mapContainer.h	Sun May 15 11:37:07 2016 +0200
@@ -175,6 +175,7 @@
         void mapChanged(const QModelIndex & map, int type, const QModelIndex & old = QModelIndex());
         void setMapInfo(MapModel::MapInfo mapInfo);
         void changeMapType(MapModel::MapType type, const QModelIndex & newMap = QModelIndex());
+        void updateHelpTexts(MapModel::MapType type);
         void updatePreview();
         void updateThemeButtonSize();
         void setupMissionMapsView();
--- a/QTfrontend/ui/widget/selectWeapon.cpp	Sun May 15 10:43:18 2016 +0200
+++ b/QTfrontend/ui/widget/selectWeapon.cpp	Sun May 15 11:37:07 2016 +0200
@@ -286,12 +286,12 @@
 
 void SelWeaponWidget::newWeaponsName()
 {
-    QString newName = tr("new");
+    QString newName = tr("New");
     if(wconf->contains(newName))
     {
         //name already used -> look for an appropriate name:
         int i=2;
-        while(wconf->contains(newName = tr("new")+QString::number(i++))) ;
+        while(wconf->contains(newName = tr("New (%1)").arg(i++))) ;
     }
     setWeaponsName(newName);
 }
@@ -322,12 +322,12 @@
     if(wconf->contains(curWeaponsName))
     {
         QString ammo = getWeaponsString(curWeaponsName);
-        QString newName = tr("copy of %1").arg(curWeaponsName);
+        QString newName = tr("Copy of %1").arg(curWeaponsName);
         if(wconf->contains(newName))
         {
             //name already used -> look for an appropriate name:
             int i=2;
-            while(wconf->contains(newName = tr("copy of %1").arg(curWeaponsName+QString::number(i++))));
+            while(wconf->contains(newName = tr("Copy of %1 (%2)").arg(curWeaponsName, i++)));
         }
         setWeaponsName(newName);
         setWeapons(ammo);
--- a/share/hedgewars/Data/Locale/hedgewars_en.ts	Sun May 15 10:43:18 2016 +0200
+++ b/share/hedgewars/Data/Locale/hedgewars_en.ts	Sun May 15 11:37:07 2016 +0200
@@ -138,6 +138,20 @@
     </message>
 </context>
 <context>
+    <name>MinesTimeSpinBox</name>
+    <message>
+        <source>Random</source>
+        <translation>Random</translation>
+    </message>
+    <message numerus="yes">
+        <source>%1 seconds</source>
+        <translation>
+            <numerusform>%1 second</numerusform>
+            <numerusform>%1 seconds</numerusform>
+        </translation>
+    </message>
+</context>
+<context>
     <name>GameCFGWidget</name>
     <message>
         <source>Edit weapons</source>
@@ -1440,14 +1454,6 @@
         <translation>Your hogs are unable to move, put your artillery skills to the test</translation>
     </message>
     <message>
-        <source>Random</source>
-        <translation>Random</translation>
-    </message>
-    <message>
-        <source>Seconds</source>
-        <translation>Seconds</translation>
-    </message>
-    <message>
         <source>New</source>
         <translation>New</translation>
     </message>