Chat highlighting when mentioned

When being mentioned in a post with '@username' you will now see the entry highlighted. This
helps to see when someone is talking to you. It work across the main
chat, in game and in private chat.
This commit is contained in:
Matt Lowe 2015-01-09 01:08:27 +01:00
parent 7476667b69
commit 5452d0ceae
5 changed files with 37 additions and 3 deletions

View file

@ -8,6 +8,8 @@
#include "user_context_menu.h"
#include "tab_supervisor.h"
#include "pixmapgenerator.h"
#include "settingscache.h"
#include "main.h"
ChatView::ChatView(const TabSupervisor *_tabSupervisor, TabGame *_game, bool _showTimestamps, QWidget *parent)
: QTextBrowser(parent), tabSupervisor(_tabSupervisor), game(_game), evenNumber(true), showTimestamps(_showTimestamps), hoveredItemType(HoveredNothing)
@ -102,7 +104,7 @@ void ChatView::appendMessage(QString message, QString sender, UserLevelFlags use
QTextCharFormat senderFormat;
if (tabSupervisor && tabSupervisor->getUserInfo() && (sender == QString::fromStdString(tabSupervisor->getUserInfo()->name()))) {
senderFormat.setFontWeight(QFont::Bold);
senderFormat.setForeground(Qt::red);
senderFormat.setForeground(QBrush(QColor(113, 43, 43)));
} else {
senderFormat.setForeground(Qt::blue);
if (playerBold)
@ -168,8 +170,17 @@ void ChatView::appendMessage(QString message, QString sender, UserLevelFlags use
} else
from = 1;
}
QTextCharFormat charFormat;
if (settingsCache->getChatMention()) {
if (message.toLower().contains("@" + QString::fromStdString(tabSupervisor->getUserInfo()->name()).toLower())) {
charFormat.setFontWeight(QFont::Bold);
charFormat.setForeground(QBrush(QColor(113, 43, 43)));
}
}
if (!message.isEmpty())
cursor.insertText(message);
cursor.insertText(message, charFormat);
if (atBottom)
verticalScrollBar()->setValue(verticalScrollBar()->maximum());

View file

@ -493,6 +493,10 @@ UserInterfaceSettingsPage::UserInterfaceSettingsPage()
tapAnimationCheckBox = new QCheckBox;
tapAnimationCheckBox->setChecked(settingsCache->getTapAnimation());
connect(tapAnimationCheckBox, SIGNAL(stateChanged(int)), settingsCache, SLOT(setTapAnimation(int)));
chatMentionCheckBox = new QCheckBox;
chatMentionCheckBox->setChecked(settingsCache->getChatMention());
connect(chatMentionCheckBox, SIGNAL(stateChanged(int)), settingsCache, SLOT(setChatMention(int)));
soundEnabledCheckBox = new QCheckBox;
soundEnabledCheckBox->setChecked(settingsCache->getSoundEnabled());
@ -525,9 +529,16 @@ UserInterfaceSettingsPage::UserInterfaceSettingsPage()
animationGroupBox = new QGroupBox;
animationGroupBox->setLayout(animationGrid);
QGridLayout *chatGrid = new QGridLayout;
chatGrid->addWidget(chatMentionCheckBox, 0, 0);
chatGroupBox = new QGroupBox;
chatGroupBox->setLayout(chatGrid);
QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(generalGroupBox);
mainLayout->addWidget(animationGroupBox);
mainLayout->addWidget(chatGroupBox);
mainLayout->addWidget(soundGroupBox);
setLayout(mainLayout);
@ -540,7 +551,9 @@ void UserInterfaceSettingsPage::retranslateUi()
doubleClickToPlayCheckBox->setText(tr("&Double-click cards to play them (instead of single-click)"));
playToStackCheckBox->setText(tr("&Play all nonlands onto the stack (not the battlefield) by default"));
animationGroupBox->setTitle(tr("Animation settings"));
chatGroupBox->setTitle(tr("Chat settings"));
tapAnimationCheckBox->setText(tr("&Tap/untap animation"));
chatMentionCheckBox->setText(tr("Enable chat mentions ('@yourusername' in chat log will be highlighted)"));
soundEnabledCheckBox->setText(tr("Enable &sounds"));
soundPathLabel->setText(tr("Path to sounds directory:"));
soundTestButton->setText(tr("Test system sound engine"));

View file

@ -89,10 +89,11 @@ private:
QCheckBox *doubleClickToPlayCheckBox;
QCheckBox *playToStackCheckBox;
QCheckBox *tapAnimationCheckBox;
QCheckBox *chatMentionCheckBox;
QCheckBox *soundEnabledCheckBox;
QLabel *soundPathLabel;
QLineEdit *soundPathEdit;
QGroupBox *generalGroupBox, *animationGroupBox, *soundGroupBox;
QGroupBox *generalGroupBox, *animationGroupBox, *soundGroupBox, *chatGroupBox;
QPushButton *soundTestButton;
public:
UserInterfaceSettingsPage();

View file

@ -39,6 +39,7 @@ SettingsCache::SettingsCache()
invertVerticalCoordinate = settings->value("table/invert_vertical", false).toBool();
minPlayersForMultiColumnLayout = settings->value("interface/min_players_multicolumn", 5).toInt();
tapAnimation = settings->value("cards/tapanimation", true).toBool();
chatMention = settings->value("chat/mention", true).toBool();
zoneViewSortByName = settings->value("zoneview/sortbyname", true).toBool();
zoneViewSortByType = settings->value("zoneview/sortbytype", true).toBool();
@ -231,6 +232,11 @@ void SettingsCache::setTapAnimation(int _tapAnimation)
settings->setValue("cards/tapanimation", tapAnimation);
}
void SettingsCache::setChatMention(int _chatMention) {
chatMention = _chatMention;
settings->setValue("chat/mention", chatMention);
}
void SettingsCache::setZoneViewSortByName(int _zoneViewSortByName)
{
zoneViewSortByName = _zoneViewSortByName;

View file

@ -51,6 +51,7 @@ private:
bool invertVerticalCoordinate;
int minPlayersForMultiColumnLayout;
bool tapAnimation;
bool chatMention;
bool zoneViewSortByName, zoneViewSortByType;
bool soundEnabled;
QString soundPath;
@ -88,6 +89,7 @@ public:
bool getInvertVerticalCoordinate() const { return invertVerticalCoordinate; }
int getMinPlayersForMultiColumnLayout() const { return minPlayersForMultiColumnLayout; }
bool getTapAnimation() const { return tapAnimation; }
bool getChatMention() const { return chatMention; }
bool getZoneViewSortByName() const { return zoneViewSortByName; }
bool getZoneViewSortByType() const { return zoneViewSortByType; }
bool getSoundEnabled() const { return soundEnabled; }
@ -126,6 +128,7 @@ public slots:
void setInvertVerticalCoordinate(int _invertVerticalCoordinate);
void setMinPlayersForMultiColumnLayout(int _minPlayersForMultiColumnLayout);
void setTapAnimation(int _tapAnimation);
void setChatMention(int _chatMention);
void setZoneViewSortByName(int _zoneViewSortByName);
void setZoneViewSortByType(int _zoneViewSortByType);
void setSoundEnabled(int _soundEnabled);