Default nick/action color on, sender brackets off
[quassel.git] / src / qtui / qtuistyle.cpp
index f195dfb..ebf1947 100644 (file)
@@ -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<QColor>().name();
+    return settings.value(key, defaultColor).value<QColor>().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]));
     }
 }