QTfrontend/ui/page/pagenetgame.cpp
branchwebgl
changeset 8444 75db7bb8dce8
parent 8434 4821897a0f10
child 8453 06541556df53
--- a/QTfrontend/ui/page/pagenetgame.cpp	Wed Jan 02 11:11:49 2013 +0100
+++ b/QTfrontend/ui/page/pagenetgame.cpp	Sun Jan 27 00:28:57 2013 +0100
@@ -28,63 +28,127 @@
 #include "teamselect.h"
 #include "chatwidget.h"
 
+const int cutoffHeight = 688; /* Don't make this number below 605, or else it'll
+                                 let the GameCFGWidget shrink too much before switching to tabbed mode. */
+
 QLayout * PageNetGame::bodyLayoutDefinition()
 {
     QGridLayout * pageLayout = new QGridLayout();
     pageLayout->setSizeConstraint(QLayout::SetMinimumSize);
-    //pageLayout->setSpacing(1);
-    pageLayout->setColumnStretch(0, 50);
-    pageLayout->setColumnStretch(1, 50);
+    pageLayout->setColumnStretch(0, 1);
+    pageLayout->setColumnStretch(1, 1);
+    pageLayout->setRowStretch(0, 0);
+    pageLayout->setRowStretch(1, 0);
+    pageLayout->setRowStretch(2, 1);
+
+    // Room config
+
+    QHBoxLayout * roomConfigLayout = new QHBoxLayout();
+    pageLayout->addLayout(roomConfigLayout, 0, 0, 1, 2);
+    roomConfigLayout->setSpacing(0);
+
+    leRoomName = new HistoryLineEdit(this, 10);
+    leRoomName->setMaxLength(60);
+    leRoomName->setMinimumWidth(400);
+    leRoomName->setMaximumWidth(600);
+    leRoomName->setFixedHeight(30);
+    leRoomName->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
+    roomConfigLayout->addWidget(leRoomName, 100);
+
+    QLabel * lblRoomName = new QLabel(tr("Room name: "), leRoomName);
+    lblRoomName->setStyleSheet("font: 12px; font-weight: bold;");
+    lblRoomName->setStyleSheet(QString("font: 12px; font-weight: bold; background: none; margin-left: -%1px; margin-top: 8px;").arg(lblRoomName->width() - 20));
+    leRoomName->setStyleSheet(QString("font: 12px; border-right: 0; padding-left: %1px; padding-bottom: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px;").arg(lblRoomName->width() - 14));
+
+    BtnUpdate = new QPushButton();
+    BtnUpdate->setEnabled(false);
+    BtnUpdate->setText(tr("Update"));
+    BtnUpdate->setFixedHeight(leRoomName->height() - 0);
+    BtnUpdate->setStyleSheet("border-top-left-radius: 0px; border-bottom-left-radius: 0px; padding: auto 4px;");
+    roomConfigLayout->addWidget(BtnUpdate, 0);
 
-    // chatwidget
+    lblRoomNameReadOnly = new QLabel();
+    lblRoomNameReadOnly->setMinimumWidth(400);
+    lblRoomNameReadOnly->setMaximumWidth(600);
+    lblRoomNameReadOnly->setFixedHeight(30);
+    lblRoomNameReadOnly->setObjectName("labelLikeLineEdit");
+    lblRoomNameReadOnly->setStyleSheet("font: 12px;");
+    lblRoomNameReadOnly->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
+    lblRoomNameReadOnly->setVisible(false);
+    roomConfigLayout->addWidget(lblRoomNameReadOnly, 100);
+
+    roomConfigLayout->addSpacing(10);
+
+    BtnMaster = new QPushButton();
+    BtnMaster->setText(tr("Room controls"));
+    BtnMaster->setFixedHeight(leRoomName->height() - 0);
+    BtnMaster->setStyleSheet("QPushButton { padding: auto 4px; } QPushButton:pressed { background-color: #ffcc00; border-color: #ffcc00; border-bottom-left-radius: 0px; border-bottom-right-radius: 0px; color: #11084A; }");
+    roomConfigLayout->addWidget(BtnMaster, 0);
+
+    roomConfigLayout->addStretch(1);
+
+    // Game config
+
+    pGameCFG = new GameCFGWidget(this);
+    pageLayout->addWidget(pGameCFG, 1, 0);
+
+    // Teams
+
+    pNetTeamsWidget = new TeamSelWidget(this);
+    pNetTeamsWidget->setAcceptOuter(true);
+    pNetTeamsWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+    pageLayout->addWidget(pNetTeamsWidget, 1, 1);
+
+    // Chat
+
     chatWidget = new HWChatWidget(this, true);
     chatWidget->setShowFollow(false); // don't show follow in nicks' context menus
     chatWidget->setIgnoreListKick(true); // kick ignored players automatically
+    chatWidget->setMinimumHeight(50);
+    chatWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum);
     pageLayout->addWidget(chatWidget, 2, 0, 1, 2);
-    pageLayout->setRowStretch(1, 100);
-    pageLayout->setRowStretch(2, 100);
-
-    pGameCFG = new GameCFGWidget(this);
-    pageLayout->addWidget(pGameCFG, 0, 0);
-
-    btnSetup = new QPushButton(this);
-    btnSetup->setText(QPushButton::tr("Setup"));
-    pageLayout->addWidget(btnSetup, 1, 0);
-
-    pNetTeamsWidget = new TeamSelWidget(this);
-    pNetTeamsWidget->setAcceptOuter(true);
-    pageLayout->addWidget(pNetTeamsWidget, 0, 1, 2, 1);
 
     return pageLayout;
 }
 
+QLayout * PageNetGame::footerLayoutLeftDefinition()
+{
+    QHBoxLayout * bottomLeftLayout = new QHBoxLayout();
+
+    btnSetup = addButton(":/res/Settings.png", bottomLeftLayout, 0, true);
+    btnSetup->setWhatsThis(tr("Edit game preferences"));
+
+    return bottomLeftLayout;
+}
+
 QLayout * PageNetGame::footerLayoutDefinition()
 {
     QHBoxLayout * bottomLayout = new QHBoxLayout;
 
-    leRoomName = new HistoryLineEdit(this,10);
-    leRoomName->setMaxLength(60);
-    leRoomName->setMinimumWidth(200);
-    leRoomName->setMaximumWidth(400);
+    // Ready button
 
-    //Button to signify whether the player is ready to start playing
     BtnGo = new QPushButton(this);
-    BtnGo->setToolTip(QPushButton::tr("Ready"));
     BtnGo->setIcon(QIcon(":/res/lightbulb_off.png"));
     BtnGo->setIconSize(QSize(25, 34));
     BtnGo->setMinimumWidth(50);
     BtnGo->setMinimumHeight(50);
 
-    bottomLayout->addWidget(leRoomName);
-    BtnUpdate = addButton(QAction::tr("Update"), bottomLayout, 1);
-
     bottomLayout->addStretch();
     bottomLayout->addWidget(BtnGo);
 
-    BtnMaster = addButton(tr("Control"), bottomLayout, 3);
-    bottomLayout->insertStretch(3, 100);
+    // Start button
 
-    BtnStart = addButton(QAction::tr("Start"), bottomLayout, 3);
+    const QIcon& lp = QIcon(":/res/Start.png");
+    QSize sz = lp.actualSize(QSize(65535, 65535));
+    BtnStart = new QPushButton();
+    BtnStart->setText(tr("Start"));
+    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);
 
     return bottomLayout;
 }
@@ -94,6 +158,9 @@
     connect(btnSetup, SIGNAL(clicked()), this, SIGNAL(SetupClicked()));
 
     connect(BtnUpdate, SIGNAL(clicked()), this, SLOT(onUpdateClick()));
+    connect(leRoomName, SIGNAL(returnPressed()), this, SLOT(onUpdateClick()));
+
+    connect(leRoomName, SIGNAL(textChanged(const QString &)), this, SLOT(onRoomNameEdited()));
 }
 
 PageNetGame::PageNetGame(QWidget* parent) : AbstractPage(parent)
@@ -106,13 +173,25 @@
     restrictJoins->setCheckable(true);
     restrictTeamAdds = new QAction(QAction::tr("Restrict Team Additions"), menu);
     restrictTeamAdds->setCheckable(true);
-    //menu->addAction(startGame);
     menu->addAction(restrictJoins);
     menu->addAction(restrictTeamAdds);
 
     BtnMaster->setMenu(menu);
+
+    if (height() < cutoffHeight)
+        pGameCFG->setTabbed(true);
 }
 
+void PageNetGame::resizeEvent(QResizeEvent * event)
+{
+    int oldHeight = event->oldSize().height();
+    int newHeight = event->size().height();
+
+    if (newHeight < cutoffHeight && oldHeight >= cutoffHeight)
+        pGameCFG->setTabbed(true);
+    else if (newHeight >= cutoffHeight && oldHeight < cutoffHeight)
+        pGameCFG->setTabbed(false);
+}
 
 void PageNetGame::displayError(const QString & message)
 {
@@ -139,12 +218,18 @@
         BtnGo->setIcon(QIcon(":/res/lightbulb_off.png"));
 }
 
+void PageNetGame::onRoomNameEdited()
+{
+    BtnUpdate->setEnabled(true);
+}
+
 void PageNetGame::onUpdateClick()
 {
     if (!leRoomName->text().trimmed().isEmpty())
     {
         emit askForUpdateRoomName(leRoomName->text());
         leRoomName->rememberCurrentText();
+        BtnUpdate->setEnabled(false);
     }
     else
     {
@@ -163,6 +248,8 @@
 {
     leRoomName->setText(roomName);
     leRoomName->rememberCurrentText();
+    lblRoomNameReadOnly->setText(roomName);
+    BtnUpdate->setEnabled(false);
 }
 
 void PageNetGame::setMasterMode(bool isMaster)
@@ -171,6 +258,7 @@
     BtnStart->setVisible(isMaster);
     BtnUpdate->setVisible(isMaster);
     leRoomName->setVisible(isMaster);
+    lblRoomNameReadOnly->setVisible(!isMaster);
 }
 
 void PageNetGame::setUser(const QString & nickname)