From 7fdf432fe178523d001e6e0859466cca90b54428 Mon Sep 17 00:00:00 2001 From: doitux Date: Sat, 27 Mar 2010 21:55:34 +0000 Subject: [PATCH] GUI: Lobby changes and invite preperation --- src/gui/qt/gamelobbydialog.ui | 659 +++++++++++------- .../gamelobbydialog/gamelobbydialogimpl.cpp | 29 +- .../qt/gamelobbydialog/gamelobbydialogimpl.h | 25 +- src/gui/qt/resources/player_play.png | Bin 3220 -> 501 bytes 4 files changed, 450 insertions(+), 263 deletions(-) diff --git a/src/gui/qt/gamelobbydialog.ui b/src/gui/qt/gamelobbydialog.ui index bc391de5..998ec47e 100644 --- a/src/gui/qt/gamelobbydialog.ui +++ b/src/gui/qt/gamelobbydialog.ui @@ -64,6 +64,9 @@ 16777215 + + Qt::CustomContextMenu + 5 @@ -304,65 +307,310 @@ p, li { white-space: pre-wrap; } Game Info - + + + 3 + + + 7 + - 4 + 2 + + + 7 - 5 + 7 - - 5 - - - - - - - Game type: + + + + + 0 + 174 + + + + true + + + + + 0 + 0 + 248 + 175 + + + + + 2 - - - - - - - 16 - 16 - + + 2 - - - 16 - 16 - - - - true - - - - - - - - 0 - 0 - - - - - - - - + + + + + + Start Cash: + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + + + + + + 0 + 0 + + + + QLabel { color:rgb(0, 0, 255); } + + + Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing + + + + + + + + + + + First small blind: + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + + + + + + 0 + 0 + + + + QLabel { color:rgb(0, 0, 255); } + + + Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing + + + + + + + + + + + Blinds raise interval: + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + + + + + + 0 + 0 + + + + QLabel { color:rgb(0, 0, 255); } + + + Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing + + + true + + + + + + + + + + + Blinds raise mode: + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + + + + + + 0 + 0 + + + + QLabel { color:rgb(0, 0, 255); } + + + + + + Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing + + + true + + + + + + + + + + + Manual blinds list: + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + + + + + + 0 + 0 + + + + QLabel { color:rgb(0, 0, 255); } + + + + + + Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing + + + true + + + + + + + + + + + Timeout for player action (sec): + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + + + + + + 0 + 0 + + + + QLabel { color:rgb(0, 0, 255); } + + + Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing + + + + + + + + + + + + 0 + 0 + + + + Game type: + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + 0 + 0 + + + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + + + Qt::Horizontal + + + + + + - + 221 - 221 + 240 @@ -384,227 +632,134 @@ p, li { white-space: pre-wrap; } - - - - Fill up with computer opponents - - - - - - - 6 - - - 3 - - - 4 - + + - + + + + 0 + 0 + + + + Fill up with computer opponents + + + + :/gfx/swbuttonlocalgame.png:/gfx/swbuttonlocalgame.png + + + + + - Qt::Horizontal + Qt::Vertical + + + QSizePolicy::Fixed - 40 - 20 + 0 + 21 + + + + + + 3 + + + 0 + + + 0 + false + + + 0 + 0 + + + + + 0 + 26 + + + + + 16777215 + 26 + + &Start Game + + + :/gfx/dialog_ok_apply.png:/gfx/dialog_ok_apply.png + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 0 + 26 + + + + + + + 0 + 0 + + + + + 0 + 26 + + + + + 16777215 + 26 + + &Kick Player + + + :/gfx/editdelete.png:/gfx/editdelete.png + - - - - true - - - - - 0 - 0 - 244 - 159 - - - - - 1 - - - 2 - - - 3 - - - - - - - Start Cash: - - - - - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - - First small blind: - - - - - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - - - Blinds raise interval: - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - - - - - Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing - - - - - - - - - - - Blinds raise mode: - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - - - - - - - - Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing - - - true - - - - - - - - - - - Manual blinds list: - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - - - - - - - - Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing - - - true - - - - - - - - - - - Timeout for player action (sec): - - - - - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - + 0 @@ -620,7 +775,7 @@ p, li { white-space: pre-wrap; } 0 - 27 + 26 @@ -633,9 +788,25 @@ p, li { white-space: pre-wrap; } 0 + + + 0 + 26 + + + + + 16777215 + 26 + + &Leave Game + + + :/gfx/arrow_left_double.png:/gfx/arrow_left_double.png + @@ -660,6 +831,8 @@ p, li { white-space: pre-wrap; } pushButton_Kick pushButton_Leave - + + + diff --git a/src/gui/qt/gamelobbydialog/gamelobbydialogimpl.cpp b/src/gui/qt/gamelobbydialog/gamelobbydialogimpl.cpp index 804eabaa..9f04892a 100644 --- a/src/gui/qt/gamelobbydialog/gamelobbydialogimpl.cpp +++ b/src/gui/qt/gamelobbydialog/gamelobbydialogimpl.cpp @@ -69,7 +69,7 @@ gameLobbyDialogImpl::gameLobbyDialogImpl(startWindowImpl *parent, ConfigFile *c) QStringList headerList; headerList << tr("Game") << tr("Players") << tr("State") << tr("R") << tr("P"); myGameListModel->setHorizontalHeaderLabels(headerList); - + treeView_GameList->setColumnWidth(0,220); treeView_GameList->setColumnWidth(1,65); treeView_GameList->setColumnWidth(2,65); @@ -79,6 +79,10 @@ gameLobbyDialogImpl::gameLobbyDialogImpl(startWindowImpl *parent, ConfigFile *c) treeView_GameList->setStyleSheet("QTreeView {background-color: white; background-image: url(\""+myAppDataPath +"gfx/gui/misc/background_gamelist.png\"); background-attachment: fixed; background-position: top center ; background-repeat: no-repeat;}"); treeView_GameList->setAutoFillBackground(TRUE); + nickListContextMenu = new QMenu(); + nickListInviteAction = new QAction(QIcon(":/gfx/list_add_user.png"), tr("Invite player"), nickListContextMenu); + nickListContextMenu->addAction(nickListInviteAction); + connect( pushButton_CreateGame, SIGNAL( clicked() ), this, SLOT( createGame() ) ); connect( pushButton_JoinGame, SIGNAL( clicked() ), this, SLOT( joinGame() ) ); connect( pushButton_joinAnyGame, SIGNAL( clicked() ), this, SLOT( joinAnyGame() ) ); @@ -95,6 +99,8 @@ gameLobbyDialogImpl::gameLobbyDialogImpl(startWindowImpl *parent, ConfigFile *c) connect( waitStartGameMsgBoxTimer, SIGNAL(timeout()), this, SLOT( showWaitStartGameMsgBox() )); connect( blinkingButtonAnimationTimer, SIGNAL(timeout()), this, SLOT( blinkingStartButtonAnimation() )); connect( comboBox_gameListFilter, SIGNAL(currentIndexChanged(int)), this, SLOT(changeGameListFilter(int))); + connect( treeWidget_NickList, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT( showNickListContextMenu(QPoint) ) ); + connect( nickListInviteAction, SIGNAL(triggered()), this, SLOT( invitePlayerToCurrentGame() )); lineEdit_ChatInput->installEventFilter(this); @@ -1065,15 +1071,17 @@ void gameLobbyDialogImpl::hideShowGameDescription(bool show) { label_gameDesc5->show(); label_gameDesc6->show(); label_gameDesc7->show(); + line->show(); } else { - label_gameType->show(); + label_gameType->hide(); label_gameDesc2->hide(); label_gameDesc3->hide(); label_gameDesc4->hide(); label_gameDesc5->hide(); label_gameDesc6->hide(); label_gameDesc7->hide(); + line->hide(); } } @@ -1289,3 +1297,20 @@ void gameLobbyDialogImpl::guestUserMode() lineEdit_ChatInput->setDisabled(true); guestMode = true; } + +void gameLobbyDialogImpl::showNickListContextMenu(QPoint p) +{ + if(treeWidget_NickList->topLevelItemCount()) { + + assert(mySession); + + if(inGame && mySession->getClientGameInfo(mySession->getClientCurrentGameId()).data.gameType == GAME_TYPE_INVITE_ONLY && treeWidget_NickList->selectedItems().at(0)->data(0, Qt::UserRole).toUInt() != mySession->getClientUniquePlayerId()) { + nickListContextMenu->popup(treeWidget_NickList->mapToGlobal(p)); + } + } +} + +void gameLobbyDialogImpl::invitePlayerToCurrentGame() +{ + qDebug() << "invitePlayer"; +} diff --git a/src/gui/qt/gamelobbydialog/gamelobbydialogimpl.h b/src/gui/qt/gamelobbydialog/gamelobbydialogimpl.h index 49d870f2..3d492f5c 100644 --- a/src/gui/qt/gamelobbydialog/gamelobbydialogimpl.h +++ b/src/gui/qt/gamelobbydialog/gamelobbydialogimpl.h @@ -55,68 +55,55 @@ public slots: void createGame(); void joinGame(); void joinAnyGame(); - void gameSelected(const QModelIndex &, const QModelIndex &); void updateGameItem(QList , unsigned gameId); - void addGame(unsigned gameId); void updateGameMode(unsigned gameId, int newMode); void updateGameAdmin(unsigned gameId, unsigned adminPlayerId); void removeGame(unsigned gameId); void gameAddPlayer(unsigned gameId, unsigned playerId); void gameRemovePlayer(unsigned gameId, unsigned playerId); - void playerJoinedLobby(unsigned playerId, QString playerName); void playerLeftLobby(unsigned playerId); - void updateStats(ServerStats stats); - - void refreshGameStats(); + void refreshGameStats(); void refreshPlayerStats(); - void setCurrentGameName ( const QString& theValue ) { currentGameName = theValue; } QString getCurrentGameName() const { return currentGameName; } - gameTableImpl* getMyW() const { return myW; } void checkPlayerQuantity(); void blinkingStartButtonAnimation(); - void joinedNetworkGame(unsigned, QString, bool); void addConnectedPlayer(unsigned, QString, bool); void updatePlayer(unsigned, QString); void removePlayer(unsigned, QString); void newGameAdmin(unsigned, QString); - void refreshConnectedPlayerAvatars(); - void playerSelected(QTreeWidgetItem*, QTreeWidgetItem*); void refresh(int actionID); void removedFromGame(int reason); void startGame(); void leaveGame(); void kickPlayer(); - void joinedGameDialogUpdate(); void leftGameDialogUpdate(); void updateDialogBlinds(const GameData &gameData); void clearDialog(); - void keyPressEvent(QKeyEvent * keyEvent); bool event(QEvent * event); void hideShowGameDescription(bool show); - void showWaitStartGameMsgBox(); - - void joinAnyGameButtonRefresh(); + void joinAnyGameButtonRefresh(); void reject(); void closeEvent(QCloseEvent *event); void writeDialogSettings(int); void readDialogSettings(); void changeGameListFilter(int); - void changeGameListSorting(); - + void changeGameListSorting(); void registeredUserMode(); void guestUserMode(); + void showNickListContextMenu(QPoint); + void invitePlayerToCurrentGame(); private: @@ -146,6 +133,8 @@ private: QStandardItemModel *myGameListModel; QItemSelectionModel *myGameListSelectionModel; MyGameListSortFilterProxyModel *myGameListSortFilterProxyModel; + QMenu *nickListContextMenu; + QAction *nickListInviteAction; protected: diff --git a/src/gui/qt/resources/player_play.png b/src/gui/qt/resources/player_play.png index c930ee7aecaf0d4134f5be49b7d24358cb0a2f65..80ff3a1d50871134d810bc38d2637fcedccc0404 100644 GIT binary patch delta 474 zcmV<00VV#F8TA81iBL{Q4GJ0x0000DNk~Le0000G0000G2m}BC0JZuz>Hq)$0&_x1 zR0s%F>_!9t000SaNLh0L00FxI00FxJI_%@(kwzzf0dz@3K~xwS1;If}Qvn)Y1REBDfVB1DMYq&L{|%!#2N z&U|-&V#k)=U^fvVy6J{jzWHhF%0Go)&K=v(O+}=&&9dv%AEkG$OjRZd7q)GdX)V^X zWgq=knmTsmE2tEPmaXr{O1|ogLWMo69(e5v6PMPkVAh(UOJjwxGaa*9 zgM~zd5Ur$<*2`Ioc0Bjkta{lYIBdh20qxn%iZ)DAy5JLP1do6CCFD*9> Qi~s-t07*qoM6N<$g78V!00000 delta 3214 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