Chat mention color

+Chat mention / username color can now be set via hex in the settings
+ Users can invert the color of the mention text black/white
+ if an invalid color is provided, the default will be used
This commit is contained in:
Matt Lowe 2015-01-30 00:48:50 +01:00
parent a31c15c752
commit ec8a2de2eb
5 changed files with 43 additions and 5 deletions

View file

@ -12,7 +12,7 @@
#include "main.h"
#include "tab_userlists.h"
const QColor MENTION_COLOR = QColor(190, 25, 85); // maroon
const QColor DEFAULT_MENTION_COLOR = QColor(194, 31, 47);
const QColor OTHER_USER_COLOR = QColor(0, 65, 255); // dark blue
ChatView::ChatView(const TabSupervisor *_tabSupervisor, TabGame *_game, bool _showTimestamps, QWidget *parent)
@ -26,8 +26,6 @@ ChatView::ChatView(const TabSupervisor *_tabSupervisor, TabGame *_game, bool _sh
mention = "@" + userName.toLower();
mentionFormat.setFontWeight(QFont::Bold);
mentionFormat.setForeground(QBrush(Qt::white));
mentionFormat.setBackground(QBrush(MENTION_COLOR));
mentionFormatOtherUser.setFontWeight(QFont::Bold);
mentionFormatOtherUser.setForeground(Qt::blue);
@ -118,8 +116,10 @@ void ChatView::appendMessage(QString message, QString sender, UserLevelFlags use
QTextCharFormat senderFormat;
if (tabSupervisor && tabSupervisor->getUserInfo() && (sender == QString::fromStdString(tabSupervisor->getUserInfo()->name()))) {
QColor customColor;
customColor.setNamedColor("#" + settingsCache->getChatMentionColor());
senderFormat.setForeground(customColor.isValid() ? QBrush(customColor) : QBrush(DEFAULT_MENTION_COLOR));
senderFormat.setFontWeight(QFont::Bold);
senderFormat.setForeground(QBrush(MENTION_COLOR));
} else {
senderFormat.setForeground(QBrush(OTHER_USER_COLOR));
if (playerBold)
@ -195,6 +195,10 @@ void ChatView::appendMessage(QString message, QString sender, UserLevelFlags use
break;
// you have been mentioned
if (message.toLower().startsWith(mention)) {
QColor customColor;
customColor.setNamedColor("#" + settingsCache->getChatMentionColor());
mentionFormat.setBackground(customColor.isValid() ? QBrush(customColor) : QBrush(DEFAULT_MENTION_COLOR));
mentionFormat.setForeground(settingsCache->getChatMentionForeground() ? QBrush(Qt::white):QBrush(Qt::black));
cursor.insertText("@" + userName, mentionFormat);
message = message.mid(mention.size());
QApplication::alert(this);

View file

@ -573,9 +573,20 @@ MessagesSettingsPage::MessagesSettingsPage()
ignoreUnregUsersMainChat.setChecked(settingsCache->getIgnoreUnregisteredUsers());
connect(&ignoreUnregUsersMainChat, SIGNAL(stateChanged(int)), settingsCache, SLOT(setIgnoreUnregisteredUsers(int)));
invertMentionForeground.setChecked(settingsCache->getChatMentionForeground());
connect(&invertMentionForeground, SIGNAL(stateChanged(int)), settingsCache, SLOT(setChatMentionForeground(int)));
mentionColor = new QLineEdit();
mentionColor->setText(settingsCache->getChatMentionColor());
connect(mentionColor, SIGNAL(textChanged(QString)), settingsCache, SLOT(setChatMentionColor(QString)));
QGridLayout *chatGrid = new QGridLayout;
chatGrid->addWidget(&chatMentionCheckBox, 0, 0);
chatGrid->addWidget(&ignoreUnregUsersMainChat, 1, 0);
chatGrid->addWidget(&mentionColorLabel, 1, 0);
chatGrid->addWidget(mentionColor, 1, 1);
chatGrid->addWidget(&invertMentionForeground, 2, 0);
chatGrid->addWidget(&ignoreUnregUsersMainChat, 3, 0);
chatGroupBox = new QGroupBox;
chatGroupBox->setLayout(chatGrid);
@ -648,6 +659,8 @@ void MessagesSettingsPage::retranslateUi()
chatMentionCheckBox.setText(tr("Enable chat mentions ('@yourusername' in chat log will be highlighted)"));
messageShortcuts->setTitle(tr("In-game message macros"));
ignoreUnregUsersMainChat.setText(tr("Ignore unregistered users in main chat"));
mentionColorLabel.setText(tr("Username/Mention color:"));
invertMentionForeground.setText(tr("Invert mention text color (white)"));
}
DlgSettings::DlgSettings(QWidget *parent)

View file

@ -162,8 +162,11 @@ private:
QAction *aRemove;
QCheckBox chatMentionCheckBox;
QCheckBox ignoreUnregUsersMainChat;
QCheckBox invertMentionForeground;
QGroupBox *chatGroupBox;
QGroupBox *messageShortcuts;
QLineEdit *mentionColor;
QLabel mentionColorLabel;
void storeSettings();
};

View file

@ -45,6 +45,8 @@ SettingsCache::SettingsCache()
minPlayersForMultiColumnLayout = settings->value("interface/min_players_multicolumn", 5).toInt();
tapAnimation = settings->value("cards/tapanimation", true).toBool();
chatMention = settings->value("chat/mention", true).toBool();
chatMentionForeground = settings->value("chat/mentionforeground", true).toBool();
chatMentionColor = settings->value("chat/mentioncolor", "C21F2F").toString();
zoneViewSortByName = settings->value("zoneview/sortbyname", true).toBool();
zoneViewSortByType = settings->value("zoneview/sortbytype", true).toBool();
@ -244,6 +246,16 @@ void SettingsCache::setChatMention(int _chatMention) {
settings->setValue("chat/mention", chatMention);
}
void SettingsCache::setChatMentionForeground(int _chatMentionForeground) {
chatMentionForeground = _chatMentionForeground;
settings->setValue("chat/mentionforeground", chatMentionForeground);
}
void SettingsCache::setChatMentionColor(const QString &_chatMentionColor) {
chatMentionColor = _chatMentionColor;
settings->setValue("chat/mentioncolor", chatMentionColor);
}
void SettingsCache::setZoneViewSortByName(int _zoneViewSortByName)
{
zoneViewSortByName = _zoneViewSortByName;

View file

@ -57,6 +57,8 @@ private:
int minPlayersForMultiColumnLayout;
bool tapAnimation;
bool chatMention;
QString chatMentionColor;
bool chatMentionForeground;
bool zoneViewSortByName, zoneViewSortByType, zoneViewPileView, zoneViewShuffle;
bool soundEnabled;
QString soundPath;
@ -83,6 +85,7 @@ public:
QString getTableBgPath() const { return tableBgPath; }
QString getPlayerBgPath() const { return playerBgPath; }
QString getCardBackPicturePath() const { return cardBackPicturePath; }
QString getChatMentionColor() const { return chatMentionColor; }
bool getPicDownload() const { return picDownload; }
bool getPicDownloadHq() const { return picDownloadHq; }
bool getNotificationsEnabled() const { return notificationsEnabled; }
@ -96,6 +99,7 @@ public:
int getMinPlayersForMultiColumnLayout() const { return minPlayersForMultiColumnLayout; }
bool getTapAnimation() const { return tapAnimation; }
bool getChatMention() const { return chatMention; }
bool getChatMentionForeground() const { return chatMentionForeground; }
bool getZoneViewSortByName() const { return zoneViewSortByName; }
bool getZoneViewSortByType() const { return zoneViewSortByType; }
/**
@ -133,6 +137,7 @@ public slots:
void setTableBgPath(const QString &_tableBgPath);
void setPlayerBgPath(const QString &_playerBgPath);
void setCardBackPicturePath(const QString &_cardBackPicturePath);
void setChatMentionColor(const QString &_chatMentionColor);
void setPicDownload(int _picDownload);
void setPicDownloadHq(int _picDownloadHq);
void setNotificationsEnabled(int _notificationsEnabled);
@ -146,6 +151,7 @@ public slots:
void setMinPlayersForMultiColumnLayout(int _minPlayersForMultiColumnLayout);
void setTapAnimation(int _tapAnimation);
void setChatMention(int _chatMention);
void setChatMentionForeground(int _chatMentionForeground);
void setZoneViewSortByName(int _zoneViewSortByName);
void setZoneViewSortByType(int _zoneViewSortByType);
void setZoneViewPileView(int _zoneViewPileView);