*
* @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.
*
updateTimestampFormatString();
s.notify("ShowSenderBrackets", this, SLOT(updateShowSenderBrackets()));
updateShowSenderBrackets();
+
+ // If no style sheet exists, generate it on first run.
+ initializeSettingsQss();
}
}
+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;
<< "\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
}
-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();
}
// 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]));
}
}
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:
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;
<bool>true</bool>
</property>
<property name="checked">
- <bool>false</bool>
+ <bool>true</bool>
</property>
<property name="settingsKey" stdset="0">
<string notr="true">/QtUiStyle/Colors/UseSenderColors</string>
</property>
<property name="defaultValue" stdset="0">
- <bool>false</bool>
+ <bool>true</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<string>Color senders in action messages</string>
</property>
<property name="checked">
- <bool>false</bool>
+ <bool>true</bool>
</property>
<property name="settingsKey" stdset="0">
<string notr="true">/QtUiStyle/Colors/UseSenderActionColors</string>
</property>
+ <property name="defaultValue" stdset="0">
+ <bool>true</bool>
+ </property>
</widget>
</item>
</layout>
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<QColor> defaultSenderColors = QList<QColor> {
+ 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<QColor> 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 &);