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

246 lines
7.7 KiB
C++
Raw Normal View History

/***************************************************************************
* Copyright (C) 2006 by FThauer FHammer LMay *
* 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"
2008-09-19 19:37:12 +00:00
#include "startwindowimpl.h"
#include "session.h"
2007-06-05 21:56:33 +00:00
#include "configfile.h"
#include "chattools.h"
#include <net/socket_msg.h>
2008-09-19 19:37:12 +00:00
startNetworkGameDialogImpl::startNetworkGameDialogImpl(startWindowImpl *parent, ConfigFile *config)
2008-10-07 21:16:27 +00:00
: QDialog(parent), myW(NULL), myStartWindow(parent), keyUpDownChatCounter(0), myPlayerId(0), isAdmin(false), myConfig(config), myChat(NULL)
{
2007-12-04 01:37:43 +00:00
#ifdef __APPLE__
2007-11-28 22:00:42 +00:00
setWindowModality(Qt::ApplicationModal);
setWindowFlags(Qt::WindowSystemMenuHint | Qt::CustomizeWindowHint | Qt::Dialog);
2007-12-04 01:37:43 +00:00
#endif
setupUi(this);
2009-08-17 23:20:58 +00:00
myChat = new ChatTools(lineEdit_ChatInput, myConfig, LAN_LOBBY_CHAT, textBrowser_ChatDisplay);
lineEdit_ChatInput->installEventFilter(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( currentItemChanged ( QTreeWidgetItem*, QTreeWidgetItem*) ), this, SLOT( playerSelected(QTreeWidgetItem*, QTreeWidgetItem*) ) );
connect( lineEdit_ChatInput, SIGNAL( returnPressed () ), myChat, SLOT( sendMessage() ) );
connect( lineEdit_ChatInput, SIGNAL( textChanged (QString) ), myChat, SLOT( checkInputLength(QString) ) );
connect( lineEdit_ChatInput, SIGNAL( textEdited (QString) ), myChat, SLOT( setChatTextEdited() ) );
clearDialog();
}
2007-08-29 22:30:18 +00:00
void startNetworkGameDialogImpl::exec() {
2007-08-29 22:30:18 +00:00
QDialog::exec();
}
void startNetworkGameDialogImpl::startGame() {
assert(mySession);
mySession->sendStartEvent(checkBox_fillUpWithComputerOpponents->isChecked());
}
void startNetworkGameDialogImpl::cancel() {
}
void startNetworkGameDialogImpl::refresh(int actionID) {
if (actionID == MSG_NET_GAME_CLIENT_START)
{
QTimer::singleShot(500, this, SLOT(accept()));
}
}
void startNetworkGameDialogImpl::joinedNetworkGame(unsigned playerId, QString playerName, bool admin) {
myPlayerId = playerId;
isAdmin = admin;
addConnectedPlayer(playerId, playerName, admin);
}
void startNetworkGameDialogImpl::addConnectedPlayer(unsigned playerId, QString playerName, bool) {
2007-11-07 14:11:57 +00:00
// TODO mark admin
QTreeWidgetItem *item = new QTreeWidgetItem(treeWidget, 0);
item->setData(0, Qt::UserRole, playerId);
item->setData(0, Qt::DisplayRole, playerName);
2007-03-22 01:24:01 +00:00
2009-06-20 17:39:13 +00:00
GameInfo info = mySession->getClientGameInfo(1);
2007-10-03 12:30:04 +00:00
if(this->isVisible() && myConfig->readConfigInt("PlayNetworkGameNotification")) {
if(treeWidget->topLevelItemCount() < info.data.maxNumberOfPlayers) {
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(unsigned playerId, QString newPlayerName)
{
QTreeWidgetItemIterator it(treeWidget);
while (*it) {
if ((*it)->data(0, Qt::UserRole) == playerId)
{
(*it)->setData(0, Qt::DisplayRole, newPlayerName);
break;
}
++it;
}
}
void startNetworkGameDialogImpl::removePlayer(unsigned playerId, QString) {
2007-05-02 22:46:29 +00:00
QTreeWidgetItemIterator it(treeWidget);
while (*it) {
if ((*it)->data(0, Qt::UserRole) == playerId)
{
treeWidget->takeTopLevelItem(treeWidget->indexOfTopLevelItem(*it));
break;
}
++it;
2007-05-02 22:46:29 +00:00
}
checkPlayerQuantity();
}
void startNetworkGameDialogImpl::newGameAdmin(unsigned playerId, QString)
{
if (myPlayerId == playerId)
{
isAdmin = true;
checkPlayerQuantity();
}
}
void startNetworkGameDialogImpl::gameCreated(unsigned /*gameId*/)
{
2009-06-20 17:39:13 +00:00
GameInfo info = mySession->getClientGameInfo(1);
label_maxPlayerNumber->setText(QString::number(info.data.maxNumberOfPlayers));
}
void startNetworkGameDialogImpl::playerSelected(QTreeWidgetItem* item, QTreeWidgetItem*) {
2007-06-05 20:54:16 +00:00
if (item)
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(item->data(0, Qt::UserRole).toUInt());
}
2007-06-05 21:56:33 +00:00
}
pushButton_Kick->setEnabled(false);
2007-06-05 20:54:16 +00:00
}
void startNetworkGameDialogImpl::checkPlayerQuantity() {
if(isAdmin){
pushButton_Kick->show();
pushButton_startGame->show();
checkBox_fillUpWithComputerOpponents->show();
if (treeWidget->topLevelItemCount() >= 2) {
pushButton_startGame->setEnabled(true);
}
else {
pushButton_startGame->setEnabled(false);
}
2007-08-08 12:54:20 +00:00
}
2007-05-02 22:46:29 +00:00
}
void startNetworkGameDialogImpl::clearDialog()
{
pushButton_Kick->hide();
pushButton_startGame->hide();
pushButton_Kick->setEnabled(false);
pushButton_startGame->setEnabled(false);
treeWidget->clear();
myChat->clearChat();
checkBox_fillUpWithComputerOpponents->hide();
label_maxPlayerNumber->setText(QString::number(0));
myPlayerId = 0;
}
2008-10-07 21:16:27 +00:00
void startNetworkGameDialogImpl::setSession(boost::shared_ptr<Session> session)
{
mySession = session;
myChat->setSession(mySession);
}
void startNetworkGameDialogImpl::keyPressEvent ( QKeyEvent * event ) {
if (event->key() == Qt::Key_Up && lineEdit_ChatInput->hasFocus()) {
if((keyUpDownChatCounter + 1) <= myChat->getChatLinesHistorySize()) { keyUpDownChatCounter++; }
// std::cout << "Up keyUpDownChatCounter: " << keyUpDownChatCounter << "\n";
myChat->showChatHistoryIndex(keyUpDownChatCounter);
}
else if(event->key() == Qt::Key_Down && lineEdit_ChatInput->hasFocus()) {
if((keyUpDownChatCounter - 1) >= 0) { keyUpDownChatCounter--; }
// std::cout << "Down keyUpDownChatCounter: " << keyUpDownChatCounter << "\n";
myChat->showChatHistoryIndex(keyUpDownChatCounter);
}
else { keyUpDownChatCounter = 0; }
}
bool startNetworkGameDialogImpl::eventFilter(QObject *obj, QEvent *event)
{
QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event);
if (obj == lineEdit_ChatInput && lineEdit_ChatInput->text() != "" && event->type() == QEvent::KeyPress && keyEvent->key() == Qt::Key_Tab)
{
myChat->nickAutoCompletition();
return true;
} else {
// pass the event on to the parent class
return QDialog::eventFilter(obj, event);
}
}
void startNetworkGameDialogImpl::accept()
{
myW->show();
QDialog::accept();
}
2008-09-19 19:37:12 +00:00
void startNetworkGameDialogImpl::reject()
{
myStartWindow->show();
QDialog::reject();
}