diff -r 31570b766315 -r ed5a6478e710 QTfrontend/ui/widget/chatwidget.cpp --- a/QTfrontend/ui/widget/chatwidget.cpp Tue Nov 10 18:16:35 2015 +0100 +++ b/QTfrontend/ui/widget/chatwidget.cpp Tue Nov 10 20:43:13 2015 +0100 @@ -1,7 +1,7 @@ /* * Hedgewars, a free turn based strategy game * Copyright (c) 2007 Igor Ulyanov - * Copyright (c) 2004-2013 Andrey Korotaev + * Copyright (c) 2004-2015 Andrey Korotaev * * 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 @@ -14,7 +14,7 @@ * * 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 + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include @@ -179,9 +179,14 @@ this->gameSettings = NULL; this->notify = notify; + m_usersModel = NULL; + m_isAdmin = false; m_autoKickEnabled = false; + m_scrollToBottom = false; + m_scrollBarPos = 0; + QStringList vpList = QStringList() << "Classic" << "Default" << "Mobster" << "Russian"; @@ -406,26 +411,27 @@ void HWChatWidget::printChatString( const QString & nick, const QString & str, const QString & cssClassPart, bool highlight) { - QSortFilterProxyModel * playersSortFilterModel = qobject_cast(chatNicks->model()); - if(!playersSortFilterModel) - return; - - PlayersListModel * players = qobject_cast(playersSortFilterModel->sourceModel()); - - if(!players) + if(!m_usersModel) return; // don't show chat lines that are from ignored nicks - if (players->isFlagSet(nick, PlayersListModel::Ignore)) + if (m_usersModel->isFlagSet(nick, PlayersListModel::Ignore)) return; - bool isFriend = (!nick.isEmpty()) && players->isFlagSet(nick, PlayersListModel::Friend); + bool isFriend = (!nick.isEmpty()) && m_usersModel->isFlagSet(nick, PlayersListModel::Friend); QString cssClass = (isFriend ? "msg_Friend" : "msg_User") + cssClassPart; addLine(cssClass, str, highlight); } +bool HWChatWidget::isInGame() { + if (!m_usersModel) + return false; + + return m_usersModel->isFlagSet(m_userNick, PlayersListModel::InGame); +} + void HWChatWidget::addLine(const QString & cssClass, QString line, bool isHighlight) { if (s_displayNone->contains(cssClass)) @@ -449,7 +455,8 @@ { line = QString("%1").arg(line); SDLInteraction::instance().playSoundFile(m_hilightSound); - HWApplication::alert(this, 800); + if (!isInGame()) + HWApplication::alert(this, 800); } chatStrings.append(line); @@ -544,7 +551,8 @@ QString hlRegExp("^(.* )?%1[^-a-z0-9_]*( .*)?$"); QRegExp whitespace("\\s"); - m_highlights.append(QRegExp(hlRegExp.arg(m_userNick.toLower()))); + if (!m_userNick.isEmpty()) + m_highlights.append(QRegExp(hlRegExp.arg(QRegExp::escape(m_userNick.toLower())))); QFile file(cfgdir->absolutePath() + "/" + m_userNick.toLower() + "_highlight.txt"); @@ -589,9 +597,10 @@ { addLine("msg_PlayerInfo", QString(" >>> %1 - %2 %3 %4") .arg(linkedNick(nick)) - .arg(ip) - .arg(version) - .arg(roomInfo)); + .arg(Qt::escape(ip == "[]"?"":ip)) + .arg(Qt::escape(version)) + .arg(Qt::escape(roomInfo)) + ); } void HWChatWidget::onKick() @@ -717,14 +726,14 @@ void HWChatWidget::adminAccess(bool b) { chatNicks->removeAction(acKick); - chatNicks->removeAction(acBan); + //chatNicks->removeAction(acBan); m_isAdmin = b; if(b) { chatNicks->insertAction(0, acKick); - chatNicks->insertAction(0, acBan); + //chatNicks->insertAction(0, acBan); } } @@ -848,6 +857,12 @@ chatNicks->setModel(model); chatNicks->setModelColumn(0); + + QSortFilterProxyModel * sfpModel = qobject_cast(model); + if (sfpModel) + m_usersModel = qobject_cast(sfpModel->sourceModel()); + else + m_usersModel = qobject_cast(model); } void HWChatWidget::nicksContextMenuRequested(const QPoint &pos)