From: Shane Synan Date: Mon, 27 Jun 2016 23:53:31 +0000 (-0400) Subject: Default nick/action color on, sender brackets off X-Git-Tag: travis-deploy-test~435 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=b7cf37ec77eccfde8e515c6638ef8d996c71019f Default nick/action color on, sender brackets off Add default sender colors in a QList accessible to the stylesheet generator to allow for enabling colors by default. This complements removing sender brackets by default. Generate a default stylesheet on first run so stylesheet-dependent defaults such as sender colors will be applied. Enable both sender and action colors, disable sender brackets by default when not otherwise selected. --- diff --git a/src/qtui/chatviewsettings.h b/src/qtui/chatviewsettings.h index 286de7cc..cb57b68a 100644 --- a/src/qtui/chatviewsettings.h +++ b/src/qtui/chatviewsettings.h @@ -65,7 +65,7 @@ public: * * @returns True if sender brackets enabled, otherwise false */ - inline bool showSenderBrackets() { return localValue("ShowSenderBrackets", true).toBool(); } + inline bool showSenderBrackets() { return localValue("ShowSenderBrackets", false).toBool(); } /** * Sets whether brackets are shown around around sender names. * diff --git a/src/qtui/qtuistyle.cpp b/src/qtui/qtuistyle.cpp index f195dfb4..ebf1947a 100644 --- a/src/qtui/qtuistyle.cpp +++ b/src/qtui/qtuistyle.cpp @@ -31,6 +31,9 @@ QtUiStyle::QtUiStyle(QObject *parent) : UiStyle(parent) updateTimestampFormatString(); s.notify("ShowSenderBrackets", this, SLOT(updateShowSenderBrackets())); updateShowSenderBrackets(); + + // If no style sheet exists, generate it on first run. + initializeSettingsQss(); } @@ -49,9 +52,22 @@ void QtUiStyle::updateShowSenderBrackets() } +void QtUiStyle::initializeSettingsQss() +{ + QFileInfo settingsQss(Quassel::configDirPath() + "settings.qss"); + // Only initialize if it doesn't already exist + if (settingsQss.exists()) + return; + + // Generate and load the new stylesheet + generateSettingsQss(); + reload(); +} + void QtUiStyle::generateSettingsQss() const { QFile settingsQss(Quassel::configDirPath() + "settings.qss"); + if (!settingsQss.open(QFile::WriteOnly|QFile::Truncate)) { qWarning() << "Could not open" << settingsQss.fileName() << "for writing!"; return; @@ -102,25 +118,26 @@ void QtUiStyle::generateSettingsQss() const << "\n"; } - if (s.value("UseSenderColors").toBool()) { + if (s.value("UseSenderColors", true).toBool()) { out << "\n// Sender Colors\n" - << "ChatLine::sender#plain[sender=\"self\"] { foreground: " << color("SenderSelf", s) << "; }\n\n"; + << "ChatLine::sender#plain[sender=\"self\"] { foreground: " << color("SenderSelf", s, defaultSenderColorSelf) << "; }\n\n"; // Matches qssparser.cpp for UiStyle::PlainMsg - for (int i = 0; i < 16; i++) + for (int i = 0; i < defaultSenderColors.count(); i++) out << senderQss(i, s, "plain"); // Only color the nicks in CTCP ACTIONs if sender colors are enabled - if (s.value("UseSenderActionColors").toBool()) { + if (s.value("UseSenderActionColors", true).toBool()) { // For action messages, color the 'sender' column -and- the nick itself out << "\n// Sender Nickname Colors for action messages\n" - << "ChatLine::sender#action[sender=\"self\"] { foreground: " << color("SenderSelf", s) << "; }\n" - << "ChatLine::nick#action[sender=\"self\"] { foreground: " << color("SenderSelf", s) << "; }\n\n"; + << "ChatLine::sender#action[sender=\"self\"] { foreground: " << color("SenderSelf", s, defaultSenderColorSelf) << "; }\n" + << "ChatLine::nick#action[sender=\"self\"] { foreground: " << color("SenderSelf", s, defaultSenderColorSelf) << "; }\n\n"; // Matches qssparser.cpp for UiStyle::ActionMsg - for (int i = 0; i < 16; i++) + for (int i = 0; i < defaultSenderColors.count(); i++) out << senderQss(i, s, "action", true); } + } // ItemViews @@ -155,9 +172,9 @@ void QtUiStyle::generateSettingsQss() const } -QString QtUiStyle::color(const QString &key, UiSettings &settings) const +QString QtUiStyle::color(const QString &key, UiSettings &settings, const QColor &defaultColor) const { - return settings.value(key).value().name(); + return settings.value(key, defaultColor).value().name(); } @@ -190,10 +207,10 @@ QString QtUiStyle::senderQss(int i, UiSettings &settings, const QString &message // Include the nickname in the color rules return QString("ChatLine::sender#%1[sender=\"0%2\"] { foreground: %3; }\n" "ChatLine::nick#%1[sender=\"0%2\"] { foreground: %3; }\n") - .arg(messageType, QString::number(i, 16), color("Sender"+dez, settings)); + .arg(messageType, QString::number(i, 16), color("Sender"+dez, settings, defaultSenderColors[i])); } else { return QString("ChatLine::sender#%1[sender=\"0%2\"] { foreground: %3; }\n") - .arg(messageType, QString::number(i, 16), color("Sender"+dez, settings)); + .arg(messageType, QString::number(i, 16), color("Sender"+dez, settings, defaultSenderColors[i])); } } diff --git a/src/qtui/qtuistyle.h b/src/qtui/qtuistyle.h index 365640c7..d8247401 100644 --- a/src/qtui/qtuistyle.h +++ b/src/qtui/qtuistyle.h @@ -36,6 +36,17 @@ public: virtual inline qreal secondColumnSeparator() const { return 6; } public slots: + /** + * Generates initial settingsQss if it doesn't exist + * + * This allows for default fonts, colors, etc to specified. + */ + + void initializeSettingsQss(); + + /** + * Generates UI stylesheet based on selected fonts, colors, etc + */ void generateSettingsQss() const; private slots: @@ -47,7 +58,15 @@ private slots: private: QString fontDescription(const QFont &font) const; - QString color(const QString &key, UiSettings &settings) const; + + /** + * Generate a Qt stylesheet color string from a given setting + * + * @param[in] key Reference to settings key containing a QColor + * @param[in] settings UiSettings manager to search + * @param[in] defaultColor Fallback color if not found; when unspecified default is black + */ + QString color(const QString &key, UiSettings &settings, const QColor &defaultColor = QColor()) const; QString msgTypeQss(const QString &msgType, const QString &key, UiSettings &settings) const; diff --git a/src/qtui/settingspages/chatviewsettingspage.ui b/src/qtui/settingspages/chatviewsettingspage.ui index f37821a8..5e4eb245 100644 --- a/src/qtui/settingspages/chatviewsettingspage.ui +++ b/src/qtui/settingspages/chatviewsettingspage.ui @@ -498,13 +498,13 @@ true - false + true /QtUiStyle/Colors/UseSenderColors - false + true @@ -833,11 +833,14 @@ Color senders in action messages - false + true /QtUiStyle/Colors/UseSenderActionColors + + true + diff --git a/src/uisupport/uistyle.h b/src/uisupport/uistyle.h index c4dda117..b179147b 100644 --- a/src/uisupport/uistyle.h +++ b/src/uisupport/uistyle.h @@ -134,6 +134,47 @@ public: class StyledMessage; + /** + * List of default sender colors + * + * In order from 1 - 16, matching the Sender## format in the settings file. + * Don't change the length or values of the colors without updating the UI, too. + * + * @see ../qtui/settingspages/chatviewsettingspage.ui + */ + const QList defaultSenderColors = QList { + QColor(233, 13, 127), /// Sender00 + QColor(142, 85, 233), /// Sender01 + QColor(179, 14, 14), /// Sender02 + QColor(23, 179, 57), /// Sender03 + QColor(88, 175, 179), /// Sender04 + QColor(157, 84, 179), /// Sender05 + QColor(179, 151, 117), /// Sender06 + QColor(49, 118, 179), /// Sender07 + QColor(233, 13, 127), /// Sender08 + QColor(142, 85, 233), /// Sender09 + QColor(179, 14, 14), /// Sender10 + QColor(23, 179, 57), /// Sender11 + QColor(88, 175, 179), /// Sender12 + QColor(157, 84, 179), /// Sender13 + QColor(179, 151, 117), /// Sender14 + QColor(49, 118, 179), /// Sender15 + }; + // Explicitly declare QList type for defaultSenderColors, otherwise error C2797 + // "list initialization inside member initializer list" will occur in Windows builds with Visual + // Studio's compiler. + // + // See https://blogs.msdn.microsoft.com/vcblog/2014/08/19/the-future-of-non-static-data-member-initialization/ + // Note: Qt Creator flags this as invalid unless you set Clang in + // Settings -> C++ -> Code Model -> Code Completion and Semantic Highlighting -> C + // + // See https://bugreports.qt.io/browse/QTCREATORBUG-1902 + + /** + * Default sender color for sent messages + */ + const QColor defaultSenderColorSelf = QColor(0, 0, 0); + static FormatType formatType(Message::Type msgType); static StyledString styleString(const QString &string, quint32 baseFormat = Base); static QString mircToInternal(const QString &);