Files
pokerth/src/gui/qt/startnetworkgamedialog/startnetworkgamedialogimpl.cpp
T

156 lines
4.9 KiB
C++
Raw Normal View History

/***************************************************************************
* Copyright (C) 2006 by FThauer FHammer *
* f.thauer@web.de *
* *
* 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; either version 2 of the License, or *
* (at your option) any later version. *
* *
* 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., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
#include "startnetworkgamedialogimpl.h"
#include "session.h"
2007-06-05 21:56:33 +00:00
#include "configfile.h"
#include <net/socket_msg.h>
startNetworkGameDialogImpl::startNetworkGameDialogImpl(QWidget *parent, ConfigFile *config)
: QDialog(parent), myW(NULL), isAdmin(false), myConfig(config), mySession(NULL)
{
setupUi(this);
connect( pushButton_cancel, SIGNAL( clicked() ), this, SLOT( cancel() ) );
connect( pushButton_startGame, SIGNAL( clicked() ), this, SLOT( startGame() ) );
2007-06-05 20:54:16 +00:00
connect( pushButton_Kick, SIGNAL( clicked() ), this, SLOT( kickPlayer() ) );
connect( treeWidget, SIGNAL( itemClicked ( QTreeWidgetItem*, int) ), this, SLOT( playerSelected(QTreeWidgetItem*, int) ) );
connect( treeWidget, SIGNAL( clear () ), this, SLOT( clearPlayers() ) );
2007-06-05 21:26:40 +00:00
pushButton_Kick->setEnabled(false);
pushButton_startGame->setEnabled(false);
}
2007-08-29 22:30:18 +00:00
void startNetworkGameDialogImpl::exec() {
GameInfo info = mySession->getClientGameInfo("default");
label_maxPlayerNumber->setText(QString::number(info.data.maxNumberOfPlayers));
QDialog::exec();
}
void startNetworkGameDialogImpl::startGame() {
assert(mySession);
mySession->sendStartEvent();
}
void startNetworkGameDialogImpl::cancel() {
}
void startNetworkGameDialogImpl::refresh(int actionID) {
if (actionID == MSG_NET_GAME_CLIENT_START)
{
QTimer::singleShot(500, this, SLOT(accept()));
}
}
void startNetworkGameDialogImpl::joinedNetworkGame(QString playerName, int rights) {
isAdmin = rights == PLAYER_RIGHTS_ADMIN;
addConnectedPlayer(playerName, rights);
}
void startNetworkGameDialogImpl::addConnectedPlayer(QString playerName, int rights) {
2007-03-22 01:24:01 +00:00
QTreeWidgetItem *item = new QTreeWidgetItem(treeWidget,0);
item->setData(0, 0, playerName);
if(treeWidget->topLevelItemCount() != maxPlayerNumber) {
myW->getMySDLPlayer()->playSound("playerconnected", 0);
}
else {
myW->getMySDLPlayer()->playSound("onlinegameready", 0);
}
2007-08-08 12:54:20 +00:00
checkPlayerQuantity();
2007-03-22 01:24:01 +00:00
}
void startNetworkGameDialogImpl::updatePlayer(QString oldPlayerName, QString newPlayerName)
{
QList<QTreeWidgetItem *> list = treeWidget->findItems(oldPlayerName, Qt::MatchExactly, 0);
if(!list.empty()) {
list[0]->setText(0, newPlayerName);
}
}
2007-05-02 22:46:29 +00:00
void startNetworkGameDialogImpl::removePlayer(QString playerName) {
QList<QTreeWidgetItem *> list = treeWidget->findItems(playerName, Qt::MatchExactly, 0);
if(!list.empty()) {
treeWidget->takeTopLevelItem(treeWidget->indexOfTopLevelItem(list[0]));
}
checkPlayerQuantity();
}
2007-06-05 20:54:16 +00:00
void startNetworkGameDialogImpl::playerSelected(QTreeWidgetItem*, int) {
pushButton_Kick->setEnabled(isAdmin);
2007-06-05 20:54:16 +00:00
}
void startNetworkGameDialogImpl::kickPlayer() {
2007-06-05 21:56:33 +00:00
2007-06-05 20:54:16 +00:00
QTreeWidgetItem *item = treeWidget->currentItem();
if (item)
{
QString playerName = item->text(0);
if(playerName == QString::fromUtf8(myConfig->readConfigString("MyName").c_str())) {
{ QMessageBox::warning(this, tr("Server Error"),
tr("You should not kick yourself from this game!"),
QMessageBox::Close); }
}
else {
assert(mySession);
mySession->kickPlayer(playerName.toUtf8().constData());
}
2007-06-05 21:56:33 +00:00
}
pushButton_Kick->setEnabled(false);
2007-06-05 20:54:16 +00:00
}
void startNetworkGameDialogImpl::checkPlayerQuantity() {
2007-08-08 12:54:20 +00:00
if (treeWidget->topLevelItemCount() >= 2 && isAdmin) {
pushButton_startGame->setEnabled(true);
2007-08-08 12:54:20 +00:00
}
else {
pushButton_startGame->setEnabled(false);
2007-08-08 12:54:20 +00:00
}
2007-05-02 22:46:29 +00:00
}
void startNetworkGameDialogImpl::clearPlayers()
{
pushButton_Kick->setEnabled(false);
}
void startNetworkGameDialogImpl::setSession(Session *session)
{
mySession = session;
}
void startNetworkGameDialogImpl::keyPressEvent ( QKeyEvent * event ) {
if (event->key() == 16777220) { pushButton_startGame->click(); } //ENTER
}