Files
pokerth/src/gui/qt/gametable/myavatarlabel.cpp
T

442 lines
17 KiB
C++
Raw Normal View History

2008-05-05 07:46:19 +00:00
//
// C++ Implementation: mycardspixmaplabel
//
// Description:
//
//
// Author: FThauer FHammer <f.thauer@web.de>, (C) 2007
//
// Copyright: See COPYING file that comes with this distribution
//
//
#include "myavatarlabel.h"
2008-05-05 07:46:19 +00:00
#include "gametableimpl.h"
#include "gametablestylereader.h"
2008-10-17 19:39:27 +00:00
#include "session.h"
#include "playerinterface.h"
#include "game.h"
#include "mymessagedialogimpl.h"
#include "chattools.h"
2008-05-05 07:46:19 +00:00
using namespace std;
MyAvatarLabel::MyAvatarLabel(QGroupBox* parent)
: QLabel(parent), voteRunning(FALSE), transparent(FALSE)
2008-05-05 07:46:19 +00:00
{
myContextMenu = new QMenu;
action_EditTip = new QAction(QIcon(), tr("Add/Edit/Remove tooltip"), myContextMenu);
myContextMenu->addAction(action_EditTip);
action_VoteForKick = new QAction(QIcon(":/gfx/list_remove_user.png"), tr("Start vote to kick this player"), myContextMenu);
myContextMenu->addAction(action_VoteForKick);
action_IgnorePlayer = new QAction(QIcon(":/gfx/im-ban-user.png"), tr("Ignore Player"), myContextMenu);
myContextMenu->addAction(action_IgnorePlayer);
2011-01-03 21:55:35 +00:00
action_ReportBadAvatar = new QAction(QIcon(":/gfx/emblem-important.png"), tr("Report inappropriate avatar"), myContextMenu);
2010-12-11 00:58:40 +00:00
myContextMenu->addAction(action_ReportBadAvatar);
2008-05-05 07:46:19 +00:00
connect( action_VoteForKick, SIGNAL ( triggered() ), this, SLOT ( sendTriggerVoteOnKickSignal() ) );
connect( action_IgnorePlayer, SIGNAL ( triggered() ), this, SLOT ( putPlayerOnIgnoreList() ) );
2010-12-11 00:58:40 +00:00
connect( action_ReportBadAvatar, SIGNAL ( triggered() ), this, SLOT ( reportBadAvatar() ) );
connect( action_EditTip, SIGNAL( triggered() ), this, SLOT ( startEditTip() ) );
2008-05-05 07:46:19 +00:00
}
MyAvatarLabel::~MyAvatarLabel()
{
}
2008-09-23 08:15:33 +00:00
void MyAvatarLabel::contextMenuEvent ( QContextMenuEvent *event ) {
2008-05-05 07:46:19 +00:00
assert(myW->getSession()->getCurrentGame());
2011-01-03 21:26:49 +00:00
if (myW->getSession()->isNetworkClientRunning()) {
boost::shared_ptr<PlayerInterface> humanPlayer = myW->getSession()->getCurrentGame()->getSeatsList()->front();
//only active players are allowed to start a vote
if(humanPlayer->getMyActiveStatus()) {
2008-10-17 19:39:27 +00:00
2011-01-12 22:37:33 +00:00
boost::shared_ptr<Game> currentGame = myW->getSession()->getCurrentGame();
2011-01-03 21:55:35 +00:00
PlayerListConstIterator it_c;
int activePlayerCounter=0;
PlayerList seatList = currentGame->getSeatsList();
for (it_c=seatList->begin(); it_c!=seatList->end(); ++it_c) {
2011-01-03 21:55:35 +00:00
if((*it_c)->getMyActiveStatus()) activePlayerCounter++;
2011-01-03 21:26:49 +00:00
}
2011-01-03 21:55:35 +00:00
GameInfo info(myW->getSession()->getClientGameInfo(myW->getSession()->getClientCurrentGameId()));
if(activePlayerCounter > 2 && !voteRunning && info.data.gameType != GAME_TYPE_RANKING && !myW->getGuestMode()) {
setVoteOnKickContextMenuEnabled(TRUE);
}
else {
setVoteOnKickContextMenuEnabled(FALSE);
}
action_IgnorePlayer->setEnabled(true);
action_EditTip->setEnabled(true);
2011-01-03 21:55:35 +00:00
int j=0;
for (it_c=seatList->begin(); it_c!=seatList->end(); ++it_c) {
2011-01-03 21:55:35 +00:00
2011-01-03 22:23:58 +00:00
if(myId == j) {
if(j == 0)
{
action_EditTip->setDisabled(true);
}
if(myW->myStartWindow->getSession()->getGameType() == Session::GAME_TYPE_NETWORK)
{
action_EditTip->setDisabled(true);
}
2011-01-03 22:23:58 +00:00
if(myW->getSession()->getClientPlayerInfo((*it_c)->getMyUniqueID()).isGuest) {
action_IgnorePlayer->setDisabled(true);
action_EditTip->setDisabled(true);
2011-01-03 22:23:58 +00:00
}
if(myW->getSession()->getGameType() == Session::GAME_TYPE_INTERNET && !((*it_c)->getMyAvatar().empty()) ) {
action_ReportBadAvatar->setVisible(TRUE);
}
else {
action_ReportBadAvatar->setVisible(FALSE);
}
2011-01-03 21:55:35 +00:00
}
j++;
}
int i=0;
for (it_c=seatList->begin(); it_c!=seatList->end(); ++it_c) {
2011-01-03 21:55:35 +00:00
//also inactive player which stays on table can be voted to kick
2011-01-03 22:00:37 +00:00
if(myContextMenuEnabled && myId != 0 && myId == i && (*it_c)->getMyType() != PLAYER_TYPE_COMPUTER && ( (*it_c)->getMyActiveStatus() || (*it_c)->getMyStayOnTableStatus() ) )
2011-01-03 21:55:35 +00:00
showContextMenu(event->globalPos());
i++;
}
}
}
2008-05-05 07:46:19 +00:00
}
2008-09-23 08:15:33 +00:00
void MyAvatarLabel::showContextMenu(const QPoint &pos) {
2008-05-05 07:46:19 +00:00
myContextMenu->popup(pos);
2008-09-23 08:15:33 +00:00
}
void MyAvatarLabel::setPlayerRating(QString playerInfo)
{
int found=0;
QStringList playerInfoList=playerInfo.split("\"", QString::KeepEmptyParts, Qt::CaseSensitive), tipInfo;
boost::shared_ptr<Game> currentGame = myW->myStartWindow->getSession()->getCurrentGame();
PlayerListConstIterator it_c;
PlayerList seatsList = currentGame->getSeatsList();
std::list<std::string> tipsList = myW->getMyConfig()->readConfigStringList("PlayerTooltips");
std::list<std::string> result;
std::string separator="(!#$%)";
std::list<std::string>::iterator iterator;
2011-02-09 15:01:07 +00:00
for(iterator = tipsList.begin(); iterator != tipsList.end(); ++iterator) {
tipInfo=QString::fromUtf8(iterator->c_str()).split("(!#$%)", QString::KeepEmptyParts, Qt::CaseSensitive);
if(tipInfo.at(0)==playerInfoList.at(0))
{
result.push_back(tipInfo.at(0).toUtf8().constData()+separator+tipInfo.at(1).toUtf8().constData()+separator+playerInfoList.at(1).toUtf8().constData()+separator);
found=1;
}
else
{
result.push_back(tipInfo.at(0).toUtf8().constData()+separator+tipInfo.at(1).toUtf8().constData()+separator+tipInfo.at(2).toUtf8().constData()+separator);
}
}
if(found==0)
{
result.push_back(playerInfoList.at(0).toUtf8().constData()+separator+separator+playerInfoList.at(1).toUtf8().constData()+separator);
}
myW->getMyConfig()->writeConfigStringList("PlayerTooltips", result);
myW->getMyConfig()->writeBuffer();
refreshStars();
}
void MyAvatarLabel::startChangePlayerTip(QString playerName)
{
if(myW->tabWidget_Left->widget(2) == myW->tab_Kick)
{
myW->tabWidget_Left->insertTab(3, myW->tab_editTip, playerName);
myW->tabWidget_Left->setCurrentIndex(3);
}
else
{
myW->tabWidget_Left->insertTab(2, myW->tab_editTip, playerName);
myW->tabWidget_Left->setCurrentIndex(2);
}
myW->textEdit_tipInput->setPlainText(getPlayerTip(playerName));
}
void MyAvatarLabel::refreshStars()
{
boost::shared_ptr<Game> curGame = myW->myStartWindow->getSession()->getCurrentGame();
PlayerListConstIterator it_c;
int seatPlace;
PlayerList seatsList = curGame->getSeatsList();
for (seatPlace=0,it_c=seatsList->begin(); it_c!=seatsList->end(); ++it_c, seatPlace++) {
for(int i=1;i<=5;i++)myW->playerStarsArray[i][seatPlace]->setText("");
if(myW->myStartWindow->getSession()->getGameType() == Session::GAME_TYPE_INTERNET && !myW->getSession()->getClientPlayerInfo((*it_c)->getMyUniqueID()).isGuest && (*it_c)->getMyType() != PLAYER_TYPE_COMPUTER)
if((*it_c)->getMyStayOnTableStatus() == TRUE && (*it_c)->getMyName()!="" && seatPlace!=0) {
int playerStars=getPlayerRating(QString::fromUtf8((*it_c)->getMyName().c_str()));
for(int i=1;i<=5;i++)
{
myW->playerStarsArray[i][seatPlace]->setText("<a style='color: yellow;' href='"+QString::fromUtf8((*it_c)->getMyName().c_str())+"\""+QString::number(i)+"'>&#9734;</a>");
}
for(int i=1;i<=playerStars;i++)
{
myW->playerStarsArray[i][seatPlace]->setText("<a style='color: #"+myW->getMyGameTableStyle()->getRatingStarsColor()+";' href='"+QString::fromUtf8((*it_c)->getMyName().c_str())+"\""+QString::number(i)+"'>&#9733;</a>");
}
}
}
}
void MyAvatarLabel::refreshTooltips() {
boost::shared_ptr<Game> currentGame = myW->myStartWindow->getSession()->getCurrentGame();
PlayerListConstIterator it_c;
int seatPlace;
PlayerList seatsList = currentGame->getSeatsList();
for (seatPlace=0,it_c=seatsList->begin(); it_c!=seatsList->end(); ++it_c, seatPlace++) {
if((*it_c)->getMyStayOnTableStatus() == TRUE || (*it_c)->getMyActiveStatus()) {
bool computerPlayer = false;
if((*it_c)->getMyType() == PLAYER_TYPE_COMPUTER) { computerPlayer = true; }
if(!computerPlayer && getPlayerTip(QString::fromUtf8((*it_c)->getMyName().c_str()))!="")
{
myW->playerTipLabelArray[(*it_c)->getMyID()]->setText(QString("<a style='text-decoration: none; color: #"+myW->getMyGameTableStyle()->getPlayerInfoHintTextColor()+"; font-size: 14px; font-weight: bold; font-family:serif;' href=\'")+QString::fromUtf8((*it_c)->getMyName().c_str())+"\'>i</a>");
myW->playerTipLabelArray[(*it_c)->getMyID()]->setToolTip( getPlayerTip(QString::fromUtf8((*it_c)->getMyName().c_str())) );
myW->playerAvatarLabelArray[(*it_c)->getMyID()]->setToolTip( getPlayerTip(QString::fromUtf8((*it_c)->getMyName().c_str())) );
}
else
{
myW->playerTipLabelArray[(*it_c)->getMyID()]->setText("");
myW->playerTipLabelArray[(*it_c)->getMyID()]->setToolTip("");
myW->playerAvatarLabelArray[(*it_c)->getMyID()]->setToolTip("");
}
}
else
{
myW->playerTipLabelArray[(*it_c)->getMyID()]->setText("");
myW->playerTipLabelArray[(*it_c)->getMyID()]->setToolTip("");
myW->playerAvatarLabelArray[(*it_c)->getMyID()]->setToolTip("");
}
}
refreshStars();
}
int MyAvatarLabel::getPlayerRating(QString playerName)
{
std::list<std::string> tipsList = myW->getMyConfig()->readConfigStringList("PlayerTooltips");
std::list<std::string>::iterator iterator;
QStringList playerInfo;
QString result="0";
2011-02-09 15:01:07 +00:00
for(iterator = tipsList.begin(); iterator != tipsList.end(); ++iterator) {
playerInfo=QString::fromUtf8(iterator->c_str()).split("(!#$%)", QString::KeepEmptyParts, Qt::CaseSensitive);
if(playerInfo.at(0)==playerName)
{
result=playerInfo.at(2);
break;
}
}
return result.toInt();
}
QString MyAvatarLabel::getPlayerTip(QString playerName)
{
std::list<std::string> tipsList = myW->getMyConfig()->readConfigStringList("PlayerTooltips");
std::list<std::string>::iterator iterator;
QStringList playerInfo;
2011-02-09 15:01:07 +00:00
for(iterator = tipsList.begin(); iterator != tipsList.end(); ++iterator) {
playerInfo=QString::fromUtf8(iterator->c_str()).split("(!#$%)", QString::KeepEmptyParts, Qt::CaseSensitive);
if(playerInfo.at(0)==playerName)return playerInfo.at(1);
}
return QString("");
}
void MyAvatarLabel::setPlayerTip()
{
int found=0;
std::string rating="1", separator="(!#$%)";
std::string tip = std::string((const char*)myW->textEdit_tipInput->toPlainText().toUtf8());
std::string playerName;
if(myW->tabWidget_Left->widget(2) == myW->tab_editTip)playerName = myW->tabWidget_Left->tabText(2).toUtf8().constData();
if(myW->tabWidget_Left->widget(3) == myW->tab_editTip)playerName = myW->tabWidget_Left->tabText(3).toUtf8().constData();
QStringList playerInfo;
std::list<std::string> tipsList = myW->getMyConfig()->readConfigStringList("PlayerTooltips");
std::list<std::string> result;
std::list<std::string>::iterator iterator;
2011-02-09 15:01:07 +00:00
for(iterator = tipsList.begin(); iterator != tipsList.end(); ++iterator) {
playerInfo=QString::fromUtf8(iterator->c_str()).split("(!#$%)", QString::KeepEmptyParts, Qt::CaseSensitive);
if(QString::fromUtf8(playerName.c_str())==playerInfo.at(0))
{
result.push_back(playerName+separator+QString::fromUtf8(tip.c_str()).toUtf8().constData()+separator+playerInfo.at(2).toStdString()+separator);
found=1;
}
else
{
result.push_back(playerInfo.at(0).toUtf8().constData()+separator+playerInfo.at(1).toUtf8().constData()+separator+playerInfo.at(2).toStdString()+separator);
}
}
if(found==0)
{
result.push_back(playerName.c_str()+separator+QString::fromUtf8(tip.c_str()).toUtf8().constData()+separator+QString("0").toStdString()+separator);
}
myW->getMyConfig()->writeConfigStringList("PlayerTooltips", result);
myW->getMyConfig()->writeBuffer();
if(myW->tabWidget_Left->widget(3) == myW->tab_editTip)
{
myW->tabWidget_Left->removeTab(3);
}
else if(myW->tabWidget_Left->widget(2) == myW->tab_editTip)
{
myW->tabWidget_Left->removeTab(2);
}
refreshTooltips();
}
2008-10-12 19:36:46 +00:00
void MyAvatarLabel::sendTriggerVoteOnKickSignal()
2008-09-23 08:15:33 +00:00
{
myW->triggerVoteOnKick(myId);
2008-10-12 19:36:46 +00:00
}
void MyAvatarLabel::setEnabledContextMenu(bool b)
{
myContextMenuEnabled = b;
2008-05-05 07:46:19 +00:00
}
2008-11-17 16:02:11 +00:00
void MyAvatarLabel::setVoteOnKickContextMenuEnabled(bool b)
{
action_VoteForKick->setEnabled(b);
}
void MyAvatarLabel::setPixmap ( const QPixmap &pix, const bool trans) {
myPixmap = pix.scaled(50,50, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
transparent = trans;
update();
}
void MyAvatarLabel::setPixmapAndCountry ( const QPixmap &pix,QString countryString, int seatPlace, const bool trans) {
QPixmap resultAvatar(pix.scaled(50,50, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
QPainter painter(&resultAvatar);
int showCountryFlags = myW->getMyConfig()->readConfigInt("ShowCountryFlagInAvatar");
if(showCountryFlags && !countryString.isEmpty())
{
2010-12-11 00:58:40 +00:00
if(seatPlace<=2||seatPlace>=8)
{
2010-12-11 00:58:40 +00:00
painter.drawPixmap(resultAvatar.width()-(QPixmap(countryString)).width(),resultAvatar.height()-(QPixmap(countryString)).height(),QPixmap(countryString));
}
else
{
2010-12-11 00:58:40 +00:00
painter.drawPixmap(resultAvatar.width()-(QPixmap(countryString)).width(),0,QPixmap(countryString));
}
}
painter.end();
myPixmap = resultAvatar;
transparent = trans;
update();
}
void MyAvatarLabel::paintEvent(QPaintEvent*) {
QPainter painter(this);
if(transparent)
painter.setOpacity(0.4);
else
painter.setOpacity(1.0);
painter.drawPixmap(0,0,myPixmap);
}
bool MyAvatarLabel::playerIsOnIgnoreList(QString playerName) {
list<std::string> playerIgnoreList = myW->getMyConfig()->readConfigStringList("PlayerIgnoreList");
list<std::string>::iterator it1;
for(it1= playerIgnoreList.begin(); it1 != playerIgnoreList.end(); it1++) {
if(playerName == QString::fromUtf8(it1->c_str())) {
return true;
}
}
return false;
}
void MyAvatarLabel::putPlayerOnIgnoreList() {
QStringList list;
PlayerListConstIterator it_c;
PlayerList seatList = myW->getSession()->getCurrentGame()->getSeatsList();
for (it_c=seatList->begin(); it_c!=seatList->end(); ++it_c) {
list << QString::fromUtf8((*it_c)->getMyName().c_str());
}
if(!playerIsOnIgnoreList(list.at(myId))) {
myMessageDialogImpl dialog(myW->getMyConfig(), this);
2010-07-27 08:30:55 +00:00
if(dialog.exec(4, tr("You will no longer receive chat messages or game invitations from this user.<br>Do you really want to put player <b>%1</b> on ignore list?").arg(list.at(myId)), tr("PokerTH - Question"), QPixmap(":/gfx/im-ban-user_64.png"), QDialogButtonBox::Yes|QDialogButtonBox::No, false ) == QDialog::Accepted) {
std::list<std::string> playerIgnoreList = myW->getMyConfig()->readConfigStringList("PlayerIgnoreList");
playerIgnoreList.push_back(list.at(myId).toUtf8().constData());
myW->getMyConfig()->writeConfigStringList("PlayerIgnoreList", playerIgnoreList);
myW->getMyConfig()->writeBuffer();
myW->getMyChat()->refreshIgnoreList();
}
}
}
2010-12-11 00:58:40 +00:00
void MyAvatarLabel::reportBadAvatar() {
2011-01-12 22:37:33 +00:00
boost::shared_ptr<Game> currentGame = myW->getSession()->getCurrentGame();
2010-12-11 00:58:40 +00:00
int j=0;
PlayerListConstIterator it_c;
PlayerList seatList = currentGame->getSeatsList();
for (it_c=seatList->begin(); it_c!=seatList->end(); ++it_c) {
2010-12-11 00:58:40 +00:00
if(myId == j) {
QString avatar = QString::fromUtf8((*it_c)->getMyAvatar().c_str());
if(!avatar.isEmpty()) {
QString nick = QString::fromUtf8((*it_c)->getMyName().c_str());
int ret = QMessageBox::question(this, tr("PokerTH - Question"),
2011-01-10 21:40:48 +00:00
tr("Are you sure you want to report the avatar of \"%1\" as inappropriate?").arg(nick), QMessageBox::Yes | QMessageBox::No);
if(ret == QMessageBox::Yes) {
QFileInfo fi(avatar);
2011-01-03 22:23:58 +00:00
myW->getSession()->reportBadAvatar((*it_c)->getMyUniqueID(), fi.baseName().toStdString());
}
2010-12-11 00:58:40 +00:00
}
break;
}
j++;
}
}
void MyAvatarLabel::startEditTip() {
boost::shared_ptr<Game> currentGame = myW->getSession()->getCurrentGame();
int j=0;
PlayerListConstIterator it_c;
PlayerList seatList = currentGame->getSeatsList();
for (it_c=seatList->begin(); it_c!=seatList->end(); ++it_c) {
if(myId == j) {
QString nick = QString::fromUtf8((*it_c)->getMyName().c_str());
startChangePlayerTip(nick);
break;
}
j++;
}
}