Merge pull request #535 from poixen/chatnamehighlight

Chat highlighting when username is mentioned
This commit is contained in:
poixen 2015-01-13 19:11:52 +01:00
commit 8fee9c6c4b
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(255, 120, 0)));
} 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(255, 120, 0)));
}
}
if (!message.isEmpty())
cursor.insertText(message);
cursor.insertText(message, charFormat);
if (atBottom)
verticalScrollBar()->setValue(verticalScrollBar()->maximum());

View file

@ -506,6 +506,10 @@ UserInterfaceSettingsPage::UserInterfaceSettingsPage()
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());
connect(soundEnabledCheckBox, SIGNAL(stateChanged(int)), settingsCache, SLOT(setSoundEnabled(int)));
@ -537,9 +541,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);
@ -552,7 +563,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

@ -91,10 +91,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

@ -40,6 +40,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();
@ -232,6 +233,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

@ -54,6 +54,7 @@ private:
bool invertVerticalCoordinate;
int minPlayersForMultiColumnLayout;
bool tapAnimation;
bool chatMention;
bool zoneViewSortByName, zoneViewSortByType;
bool soundEnabled;
QString soundPath;
@ -92,6 +93,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; }
@ -131,6 +133,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);