QTfrontend/chatwidget.cpp
changeset 2948 3f21a9dc93d0
parent 2847 cde320fd3122
child 3019 d6e19f35d98d
--- a/QTfrontend/chatwidget.cpp	Sat Mar 06 10:54:24 2010 +0000
+++ b/QTfrontend/chatwidget.cpp	Sat Mar 06 10:59:20 2010 +0000
@@ -51,192 +51,192 @@
        sound[3] = Mix_LoadWAV(QString(tmpdir.absolutePath() + "/Russian/Hello.ogg").toLocal8Bit().constData());
     }
 
-	mainLayout.setSpacing(1);
-	mainLayout.setMargin(1);
-	mainLayout.setSizeConstraint(QLayout::SetMinimumSize);
-	mainLayout.setColumnStretch(0, 75);
-	mainLayout.setColumnStretch(1, 25);
+    mainLayout.setSpacing(1);
+    mainLayout.setMargin(1);
+    mainLayout.setSizeConstraint(QLayout::SetMinimumSize);
+    mainLayout.setColumnStretch(0, 75);
+    mainLayout.setColumnStretch(1, 25);
 
-	chatEditLine = new QLineEdit(this);
-	chatEditLine->setMaxLength(300);
-	connect(chatEditLine, SIGNAL(returnPressed()), this, SLOT(returnPressed()));
+    chatEditLine = new QLineEdit(this);
+    chatEditLine->setMaxLength(300);
+    connect(chatEditLine, SIGNAL(returnPressed()), this, SLOT(returnPressed()));
 
-	mainLayout.addWidget(chatEditLine, 1, 0, 1, 2);
+    mainLayout.addWidget(chatEditLine, 1, 0, 1, 2);
 
-	chatText = new QTextBrowser(this);
-	chatText->setMinimumHeight(20);
-	chatText->setMinimumWidth(10);
-	chatText->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
-	chatText->setOpenExternalLinks(true);
-	mainLayout.addWidget(chatText, 0, 0);
+    chatText = new QTextBrowser(this);
+    chatText->setMinimumHeight(20);
+    chatText->setMinimumWidth(10);
+    chatText->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+    chatText->setOpenExternalLinks(true);
+    mainLayout.addWidget(chatText, 0, 0);
 
-	chatNicks = new QListWidget(this);
-	chatNicks->setMinimumHeight(10);
-	chatNicks->setMinimumWidth(10);
-	chatNicks->setSortingEnabled(true);
-	chatNicks->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
-	chatNicks->setContextMenuPolicy(Qt::ActionsContextMenu);
-	connect(chatNicks, SIGNAL(itemDoubleClicked(QListWidgetItem *)),
-		this, SLOT(chatNickDoubleClicked(QListWidgetItem *)));
-	connect(chatNicks, SIGNAL(currentRowChanged(int)),
-		this, SLOT(chatNickSelected(int)));
+    chatNicks = new QListWidget(this);
+    chatNicks->setMinimumHeight(10);
+    chatNicks->setMinimumWidth(10);
+    chatNicks->setSortingEnabled(true);
+    chatNicks->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+    chatNicks->setContextMenuPolicy(Qt::ActionsContextMenu);
+    connect(chatNicks, SIGNAL(itemDoubleClicked(QListWidgetItem *)),
+        this, SLOT(chatNickDoubleClicked(QListWidgetItem *)));
+    connect(chatNicks, SIGNAL(currentRowChanged(int)),
+        this, SLOT(chatNickSelected(int)));
 
-	mainLayout.addWidget(chatNicks, 0, 1);
+    mainLayout.addWidget(chatNicks, 0, 1);
 
-	acInfo = new QAction(QAction::tr("Info"), chatNicks);
-	connect(acInfo, SIGNAL(triggered(bool)), this, SLOT(onInfo()));
-	acKick = new QAction(QAction::tr("Kick"), chatNicks);
-	connect(acKick, SIGNAL(triggered(bool)), this, SLOT(onKick()));
-	acBan = new QAction(QAction::tr("Ban"), chatNicks);
-	connect(acBan, SIGNAL(triggered(bool)), this, SLOT(onBan()));
-	acFollow = new QAction(QAction::tr("Follow"), chatNicks);
-	connect(acFollow, SIGNAL(triggered(bool)), this, SLOT(onFollow()));
-	acIgnore = new QAction(QAction::tr("Ignore"), chatNicks);
-	connect(acIgnore, SIGNAL(triggered(bool)), this, SLOT(onIgnore()));
-	acFriend = new QAction(QAction::tr("Add friend"), chatNicks);
-	connect(acFriend, SIGNAL(triggered(bool)), this, SLOT(onFriend()));
+    acInfo = new QAction(QAction::tr("Info"), chatNicks);
+    connect(acInfo, SIGNAL(triggered(bool)), this, SLOT(onInfo()));
+    acKick = new QAction(QAction::tr("Kick"), chatNicks);
+    connect(acKick, SIGNAL(triggered(bool)), this, SLOT(onKick()));
+    acBan = new QAction(QAction::tr("Ban"), chatNicks);
+    connect(acBan, SIGNAL(triggered(bool)), this, SLOT(onBan()));
+    acFollow = new QAction(QAction::tr("Follow"), chatNicks);
+    connect(acFollow, SIGNAL(triggered(bool)), this, SLOT(onFollow()));
+    acIgnore = new QAction(QAction::tr("Ignore"), chatNicks);
+    connect(acIgnore, SIGNAL(triggered(bool)), this, SLOT(onIgnore()));
+    acFriend = new QAction(QAction::tr("Add friend"), chatNicks);
+    connect(acFriend, SIGNAL(triggered(bool)), this, SLOT(onFriend()));
 
-	chatNicks->insertAction(0, acInfo);
-	chatNicks->insertAction(0, acFollow);
-	chatNicks->insertAction(0, acIgnore);
-	chatNicks->insertAction(0, acFriend);
-	
-	showReady = false;
+    chatNicks->insertAction(0, acInfo);
+    chatNicks->insertAction(0, acFollow);
+    chatNicks->insertAction(0, acIgnore);
+    chatNicks->insertAction(0, acFriend);
+    
+    showReady = false;
 }
 
 void HWChatWidget::loadList(QStringList & list, const QString & file)
 {
-	list.clear();
-	QFile txt((cfgdir->absolutePath() + "/" + file).toLocal8Bit().constData());
-	if(!txt.open(QIODevice::ReadOnly))
-		return;
-	QTextStream stream(&txt);
-	stream.setCodec("UTF-8");
+    list.clear();
+    QFile txt((cfgdir->absolutePath() + "/" + file).toLocal8Bit().constData());
+    if(!txt.open(QIODevice::ReadOnly))
+        return;
+    QTextStream stream(&txt);
+    stream.setCodec("UTF-8");
 
-	while(!stream.atEnd())
-	{
-		QString str = stream.readLine();
-		if(str.startsWith(";") || str.length() == 0)
-			continue;
-		list << str.trimmed();
-	}
-	list.removeDuplicates();
-	txt.close();
+    while(!stream.atEnd())
+    {
+        QString str = stream.readLine();
+        if(str.startsWith(";") || str.length() == 0)
+            continue;
+        list << str.trimmed();
+    }
+    list.removeDuplicates();
+    txt.close();
 }
 
 void HWChatWidget::saveList(QStringList & list, const QString & file)
 {
-	QFile txt((cfgdir->absolutePath() + "/" + file).toLocal8Bit().constData());
-	if(!txt.open(QIODevice::WriteOnly | QIODevice::Truncate))
-		return;
-	QTextStream stream(&txt);
-	stream.setCodec("UTF-8");
+    QFile txt((cfgdir->absolutePath() + "/" + file).toLocal8Bit().constData());
+    if(!txt.open(QIODevice::WriteOnly | QIODevice::Truncate))
+        return;
+    QTextStream stream(&txt);
+    stream.setCodec("UTF-8");
 
-	stream << "; this list is used by Hedgewars - do not edit it unless you know what you're doing!" << endl;
-	for(int i = 0; i < list.size(); i++)
-		stream << list[i] << endl;
-	txt.close();
+    stream << "; this list is used by Hedgewars - do not edit it unless you know what you're doing!" << endl;
+    for(int i = 0; i < list.size(); i++)
+        stream << list[i] << endl;
+    txt.close();
 }
 
 void HWChatWidget::updateIcon(QListWidgetItem *item)
 {
-	QString nick = item->text();
+    QString nick = item->text();
 
-	if(ignoreList.contains(nick, Qt::CaseInsensitive))
-	{
-		item->setIcon(QIcon(showReady ? (item->data(Qt::UserRole).toBool() ? ":/res/chat_ignore_on" : ":/res/chat_ignore_off") : ":/res/chat_ignore.png"));
-		item->setForeground(Qt::gray);
-	}
-	else if(friendsList.contains(nick, Qt::CaseInsensitive))
-	{
-		item->setIcon(QIcon(showReady ? (item->data(Qt::UserRole).toBool() ? ":/res/chat_friend_on" : ":/res/chat_friend_off") : ":/res/chat_friend.png"));
-		item->setForeground(Qt::green);
-	}
-	else
-	{
-		item->setIcon(QIcon(showReady ? (item->data(Qt::UserRole).toBool() ? ":/res/chat_default_on" : ":/res/chat_default_off") : ":/res/chat_default.png"));
-		item->setForeground(QBrush(QColor(0xff, 0xcc, 0x00)));
-	}
+    if(ignoreList.contains(nick, Qt::CaseInsensitive))
+    {
+        item->setIcon(QIcon(showReady ? (item->data(Qt::UserRole).toBool() ? ":/res/chat_ignore_on" : ":/res/chat_ignore_off") : ":/res/chat_ignore.png"));
+        item->setForeground(Qt::gray);
+    }
+    else if(friendsList.contains(nick, Qt::CaseInsensitive))
+    {
+        item->setIcon(QIcon(showReady ? (item->data(Qt::UserRole).toBool() ? ":/res/chat_friend_on" : ":/res/chat_friend_off") : ":/res/chat_friend.png"));
+        item->setForeground(Qt::green);
+    }
+    else
+    {
+        item->setIcon(QIcon(showReady ? (item->data(Qt::UserRole).toBool() ? ":/res/chat_default_on" : ":/res/chat_default_off") : ":/res/chat_default.png"));
+        item->setForeground(QBrush(QColor(0xff, 0xcc, 0x00)));
+    }
 }
 
 void HWChatWidget::updateIcons()
 {
-	for(int i = 0; i < chatNicks->count(); i++)
-		updateIcon(chatNicks->item(i));
+    for(int i = 0; i < chatNicks->count(); i++)
+        updateIcon(chatNicks->item(i));
 }
 
 void HWChatWidget::loadLists(const QString & nick)
 {
-	loadList(ignoreList, nick.toLower() + "_ignore.txt");
-	loadList(friendsList, nick.toLower() + "_friends.txt");
-	updateIcons();
+    loadList(ignoreList, nick.toLower() + "_ignore.txt");
+    loadList(friendsList, nick.toLower() + "_friends.txt");
+    updateIcons();
 }
 
 void HWChatWidget::saveLists(const QString & nick)
 {
-	saveList(ignoreList, nick.toLower() + "_ignore.txt");
-	saveList(friendsList, nick.toLower() + "_friends.txt");
+    saveList(ignoreList, nick.toLower() + "_ignore.txt");
+    saveList(friendsList, nick.toLower() + "_friends.txt");
 }
 
 void HWChatWidget::returnPressed()
 {
-	emit chatLine(chatEditLine->text());
-	chatEditLine->clear();
+    emit chatLine(chatEditLine->text());
+    chatEditLine->clear();
 }
 
 void HWChatWidget::onChatString(const QString& str)
 {
-	if (chatStrings.size() > 250)
-		chatStrings.removeFirst();
+    if (chatStrings.size() > 250)
+        chatStrings.removeFirst();
 
-	QString formattedStr = Qt::escape(str.mid(1));
-	QStringList parts = formattedStr.split(QRegExp("\\W+"), QString::SkipEmptyParts);
+    QString formattedStr = Qt::escape(str.mid(1));
+    QStringList parts = formattedStr.split(QRegExp("\\W+"), QString::SkipEmptyParts);
 
-	if (!formattedStr.startsWith(" ***")) // don't ignore status messages
-	{
-		if (formattedStr.startsWith(" *")) // emote
-			parts[0] = parts[1];
-		if(parts.size() > 0 && ignoreList.contains(parts[0], Qt::CaseInsensitive))
-			return;
-	}
+    if (!formattedStr.startsWith(" ***")) // don't ignore status messages
+    {
+        if (formattedStr.startsWith(" *")) // emote
+            parts[0] = parts[1];
+        if(parts.size() > 0 && ignoreList.contains(parts[0], Qt::CaseInsensitive))
+            return;
+    }
 
-	QString color("");
-	bool isFriend = friendsList.contains(parts[0], Qt::CaseInsensitive);
-	
-	if (str.startsWith("\x03"))
-		color = QString("#c0c0c0");
-	else if (str.startsWith("\x02"))
-		color = QString(isFriend ? "#00ff00" : "#ff00ff");
-	else if (isFriend)
-		color = QString("#00c000");
+    QString color("");
+    bool isFriend = friendsList.contains(parts[0], Qt::CaseInsensitive);
+    
+    if (str.startsWith("\x03"))
+        color = QString("#c0c0c0");
+    else if (str.startsWith("\x02"))
+        color = QString(isFriend ? "#00ff00" : "#ff00ff");
+    else if (isFriend)
+        color = QString("#00c000");
 
-	if(color.compare("") != 0)
-		formattedStr = QString("<font color=\"%2\">%1</font>").arg(formattedStr).arg(color);
+    if(color.compare("") != 0)
+        formattedStr = QString("<font color=\"%2\">%1</font>").arg(formattedStr).arg(color);
 
-	chatStrings.append(formattedStr);
+    chatStrings.append(formattedStr);
 
-	chatText->setHtml(chatStrings.join("<br>"));
+    chatText->setHtml(chatStrings.join("<br>"));
 
-	chatText->moveCursor(QTextCursor::End);
+    chatText->moveCursor(QTextCursor::End);
 }
 
 void HWChatWidget::onServerMessage(const QString& str)
 {
-	if (chatStrings.size() > 250)
-		chatStrings.removeFirst();
+    if (chatStrings.size() > 250)
+        chatStrings.removeFirst();
 
-	chatStrings.append("<hr>" + str + "<hr>");
+    chatStrings.append("<hr>" + str + "<hr>");
 
-	chatText->setHtml(chatStrings.join("<br>"));
+    chatText->setHtml(chatStrings.join("<br>"));
 
-	chatText->moveCursor(QTextCursor::End);
+    chatText->moveCursor(QTextCursor::End);
 }
 
 void HWChatWidget::nickAdded(const QString& nick, bool notifyNick)
 {
-	QListWidgetItem * item = new QListWidgetItem(nick);
-	updateIcon(item);
-	chatNicks->addItem(item);
+    QListWidgetItem * item = new QListWidgetItem(nick);
+    updateIcon(item);
+    chatNicks->addItem(item);
 
     if(notifyNick && notify && gameSettings->value("audio/frontendsound", true).toBool()) {
        Mix_PlayChannel(-1, sound[rand()%4], 0);
@@ -245,140 +245,140 @@
 
 void HWChatWidget::nickRemoved(const QString& nick)
 {
-	QList<QListWidgetItem *> items = chatNicks->findItems(nick, Qt::MatchExactly);
-	for(QList<QListWidgetItem *>::iterator it=items.begin(); it!=items.end();) {
-		chatNicks->takeItem(chatNicks->row(*it));
-		++it;
-	}
+    QList<QListWidgetItem *> items = chatNicks->findItems(nick, Qt::MatchExactly);
+    for(QList<QListWidgetItem *>::iterator it=items.begin(); it!=items.end();) {
+        chatNicks->takeItem(chatNicks->row(*it));
+        ++it;
+    }
 }
 
 void HWChatWidget::clear()
 {
-	chatText->clear();
-	chatStrings.clear();
-	chatNicks->clear();
+    chatText->clear();
+    chatStrings.clear();
+    chatNicks->clear();
 }
 
 void HWChatWidget::onKick()
 {
-	QListWidgetItem * curritem = chatNicks->currentItem();
-	if (curritem)
-		emit kick(curritem->text());
+    QListWidgetItem * curritem = chatNicks->currentItem();
+    if (curritem)
+        emit kick(curritem->text());
 }
 
 void HWChatWidget::onBan()
 {
-	QListWidgetItem * curritem = chatNicks->currentItem();
-	if (curritem)
-		emit ban(curritem->text());
+    QListWidgetItem * curritem = chatNicks->currentItem();
+    if (curritem)
+        emit ban(curritem->text());
 }
 
 void HWChatWidget::onInfo()
 {
-	QListWidgetItem * curritem = chatNicks->currentItem();
-	if (curritem)
-		emit info(curritem->text());
+    QListWidgetItem * curritem = chatNicks->currentItem();
+    if (curritem)
+        emit info(curritem->text());
 }
 
 void HWChatWidget::onFollow()
 {
-	QListWidgetItem * curritem = chatNicks->currentItem();
-	if (curritem)
-		emit follow(curritem->text());
+    QListWidgetItem * curritem = chatNicks->currentItem();
+    if (curritem)
+        emit follow(curritem->text());
 }
 
 void HWChatWidget::onIgnore()
 {
-	QListWidgetItem * curritem = chatNicks->currentItem();
-	if(!curritem)
-		return;
+    QListWidgetItem * curritem = chatNicks->currentItem();
+    if(!curritem)
+        return;
 
-	if(ignoreList.contains(curritem->text(), Qt::CaseInsensitive)) // already on list - remove him
-	{
-		ignoreList.removeAll(curritem->text().toLower());
-		onChatString(HWChatWidget::tr("%1 *** %2 has been removed from your ignore list").arg('\x03').arg(curritem->text()));
-	}
-	else // not on list - add
-	{
-		ignoreList << curritem->text().toLower();
-		onChatString(HWChatWidget::tr("%1 *** %2 has been added to your ignore list").arg('\x03').arg(curritem->text()));
-	}
-	updateIcon(curritem); // update icon
-	chatNickSelected(0); // update context menu
+    if(ignoreList.contains(curritem->text(), Qt::CaseInsensitive)) // already on list - remove him
+    {
+        ignoreList.removeAll(curritem->text().toLower());
+        onChatString(HWChatWidget::tr("%1 *** %2 has been removed from your ignore list").arg('\x03').arg(curritem->text()));
+    }
+    else // not on list - add
+    {
+        ignoreList << curritem->text().toLower();
+        onChatString(HWChatWidget::tr("%1 *** %2 has been added to your ignore list").arg('\x03').arg(curritem->text()));
+    }
+    updateIcon(curritem); // update icon
+    chatNickSelected(0); // update context menu
 }
 
 void HWChatWidget::onFriend()
 {
-	QListWidgetItem * curritem = chatNicks->currentItem();
-	if(!curritem)
-		return;
+    QListWidgetItem * curritem = chatNicks->currentItem();
+    if(!curritem)
+        return;
 
-	if(friendsList.contains(curritem->text(), Qt::CaseInsensitive)) // already on list - remove him
-	{
-		friendsList.removeAll(curritem->text().toLower());
-		onChatString(HWChatWidget::tr("%1 *** %2 has been removed from your friends list").arg('\x03').arg(curritem->text()));
-	}
-	else // not on list - add
-	{
-		friendsList << curritem->text().toLower();
-		onChatString(HWChatWidget::tr("%1 *** %2 has been added to your friends list").arg('\x03').arg(curritem->text()));
-	}
-	updateIcon(curritem); // update icon
-	chatNickSelected(0); // update context menu
+    if(friendsList.contains(curritem->text(), Qt::CaseInsensitive)) // already on list - remove him
+    {
+        friendsList.removeAll(curritem->text().toLower());
+        onChatString(HWChatWidget::tr("%1 *** %2 has been removed from your friends list").arg('\x03').arg(curritem->text()));
+    }
+    else // not on list - add
+    {
+        friendsList << curritem->text().toLower();
+        onChatString(HWChatWidget::tr("%1 *** %2 has been added to your friends list").arg('\x03').arg(curritem->text()));
+    }
+    updateIcon(curritem); // update icon
+    chatNickSelected(0); // update context menu
 }
 
 void HWChatWidget::chatNickDoubleClicked(QListWidgetItem * item)
 {
-	if (item) onFollow();
+    if (item) onFollow();
 }
 
 void HWChatWidget::chatNickSelected(int index)
 {
-	QListWidgetItem* item = chatNicks->currentItem();
-	if (!item)
-		return;
+    QListWidgetItem* item = chatNicks->currentItem();
+    if (!item)
+        return;
 
-	// update context menu labels according to possible action
-	if(ignoreList.contains(item->text(), Qt::CaseInsensitive))
-		acIgnore->setText(QAction::tr("Unignore"));
-	else
-		acIgnore->setText(QAction::tr("Ignore"));
+    // update context menu labels according to possible action
+    if(ignoreList.contains(item->text(), Qt::CaseInsensitive))
+        acIgnore->setText(QAction::tr("Unignore"));
+    else
+        acIgnore->setText(QAction::tr("Ignore"));
 
-	if(friendsList.contains(item->text(), Qt::CaseInsensitive))
-		acFriend->setText(QAction::tr("Remove friend"));
-	else
-		acFriend->setText(QAction::tr("Add friend"));
+    if(friendsList.contains(item->text(), Qt::CaseInsensitive))
+        acFriend->setText(QAction::tr("Remove friend"));
+    else
+        acFriend->setText(QAction::tr("Add friend"));
 }
 
 void HWChatWidget::setShowReady(bool s)
 {
-	showReady = s;
+    showReady = s;
 }
 
 void HWChatWidget::setReadyStatus(const QString & nick, bool isReady)
 {
-	QList<QListWidgetItem *> items = chatNicks->findItems(nick, Qt::MatchExactly);
-	if (items.size() != 1)
-	{
-		qWarning("Bug: cannot find user in chat");
-		return;
-	}
+    QList<QListWidgetItem *> items = chatNicks->findItems(nick, Qt::MatchExactly);
+    if (items.size() != 1)
+    {
+        qWarning("Bug: cannot find user in chat");
+        return;
+    }
 
-	items[0]->setData(Qt::UserRole, isReady); // bulb status
-	updateIcon(items[0]);
+    items[0]->setData(Qt::UserRole, isReady); // bulb status
+    updateIcon(items[0]);
 
-	// ensure we're still showing the status bulbs
-	showReady = true;
+    // ensure we're still showing the status bulbs
+    showReady = true;
 }
 
 void HWChatWidget::adminAccess(bool b)
 {
-	chatNicks->removeAction(acKick);
-	chatNicks->removeAction(acBan);
+    chatNicks->removeAction(acKick);
+    chatNicks->removeAction(acBan);
 
-	if(b)
-	{
-		chatNicks->insertAction(0, acKick);
-//		chatNicks->insertAction(0, acBan);
-	}
+    if(b)
+    {
+        chatNicks->insertAction(0, acKick);
+//      chatNicks->insertAction(0, acBan);
+    }
 }