diff --git a/cockatrice/src/chatview.cpp b/cockatrice/src/chatview.cpp index f2b8485c..a3ca3963 100644 --- a/cockatrice/src/chatview.cpp +++ b/cockatrice/src/chatview.cpp @@ -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()); diff --git a/cockatrice/src/dlg_settings.cpp b/cockatrice/src/dlg_settings.cpp index fb76d06b..faaf7a3d 100644 --- a/cockatrice/src/dlg_settings.cpp +++ b/cockatrice/src/dlg_settings.cpp @@ -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")); diff --git a/cockatrice/src/dlg_settings.h b/cockatrice/src/dlg_settings.h index 842fa5f2..3b4cdf8b 100644 --- a/cockatrice/src/dlg_settings.h +++ b/cockatrice/src/dlg_settings.h @@ -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(); diff --git a/cockatrice/src/settingscache.cpp b/cockatrice/src/settingscache.cpp index 8374bdb5..f1af2ecc 100644 --- a/cockatrice/src/settingscache.cpp +++ b/cockatrice/src/settingscache.cpp @@ -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; diff --git a/cockatrice/src/settingscache.h b/cockatrice/src/settingscache.h index 3b1908a9..ace89ca1 100644 --- a/cockatrice/src/settingscache.h +++ b/cockatrice/src/settingscache.h @@ -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);