From: Manuel Nickschas Date: Thu, 30 Jul 2009 08:56:19 +0000 (+0200) Subject: Generate and load settings.qss X-Git-Tag: 0.5-rc1~103 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=ced47a86a4e196498d1f57f581a6cc7976cb3558 Generate and load settings.qss ChatViewSettingsPage now generates (via QtUiStyle) a stylesheet representing the style settings made in the configuration dialog. This makes the ChatView settingspage fully functional; also, all changes are applied to ChatView immediately. --- diff --git a/src/qtui/qtuistyle.cpp b/src/qtui/qtuistyle.cpp index c6974a90..4086eeda 100644 --- a/src/qtui/qtuistyle.cpp +++ b/src/qtui/qtuistyle.cpp @@ -20,7 +20,9 @@ #include "chatviewsettings.h" #include "qtuistyle.h" -#include "qtuisettings.h" + +#include +#include QtUiStyle::QtUiStyle(QObject *parent) : UiStyle(parent) { ChatViewSettings s; @@ -34,3 +36,83 @@ void QtUiStyle::updateTimestampFormatString() { ChatViewSettings s; setTimestampFormatString(s.timestampFormatString()); } + +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; + } + QTextStream out(&settingsQss); + + out << "// Style settings made in Quassel's configuration dialog\n" + << "// This file is automatically generated, do not edit\n\n"; + + QtUiStyleSettings fs("Fonts"); + QFont font = fs.value("ChatView").value(); + QString desc = "font: "; + if(font.italic()) + desc += "italic "; + if(font.bold()) + desc += "bold "; + if(!font.italic() && !font.bold()) + desc += "normal "; + desc += QString("%1pt \"%2\"").arg(font.pointSize()).arg(font.family()); + + out << "// ChatView Font\n\n" + << "ChatLine { " << desc << "; }\n\n"; + + QtUiStyleSettings s("Colors"); + if(s.value("UseChatViewColors").toBool()) { + out << "// Custom ChatView Colors\n\n" + + << "Palette { marker-line: " << color("MarkerLine", s) << "; }\n" + << "ChatView { background: " << color("ChatViewBackground", s) << "; }\n\n" + << "ChatLine[label=\"highlight\"] {\n" + << " foreground: " << color("Highlight",s) << ";\n" + << " background: " << color("HighlightBackground", s) << ";\n" + << "}\n\n" + << "ChatLine::timestamp { foreground: " << color("Timestamp", s) << "; }\n\n" + + << msgTypeQss("plain", "ChannelMsg", s) + << msgTypeQss("notice", "ServerMsg", s) + << msgTypeQss("action", "ActionMsg", s) + << msgTypeQss("nick", "CommandMsg", s) + << msgTypeQss("mode", "CommandMsg", s) + << msgTypeQss("join", "CommandMsg", s) + << msgTypeQss("part", "CommandMsg", s) + << msgTypeQss("quit", "CommandMsg", s) + << msgTypeQss("kick", "CommandMsg", s) + << msgTypeQss("kill", "CommandMsg", s) + << msgTypeQss("server", "ServerMsg", s) + << msgTypeQss("info", "ServerMsg", s) + << msgTypeQss("error", "ErrorMsg", s) + << msgTypeQss("daychange", "ServerMsg", s) + << "\n\n"; + } + + if(s.value("UseSenderColors").toBool()) { + out << "// Sender Colors\n\n" + << "ChatLine::sender[sender=\"self\"] { foreground: " << color("SenderSelf", s) << "; }\n\n"; + + for(int i = 0; i < 16; i++) + out << senderQss(i, s); + } + + settingsQss.close(); +} + +QString QtUiStyle::color(const QString &key, QtUiStyleSettings &settings) const { + return settings.value(key).value().name(); +} + +QString QtUiStyle::msgTypeQss(const QString &msgType, const QString &key, QtUiStyleSettings &settings) const { + return QString("ChatLine#%1 { foreground: %2; }\n").arg(msgType, color(key, settings)); +} + +QString QtUiStyle::senderQss(int i, QtUiStyleSettings &settings) const { + QString dez = QString::number(i); + if(dez.length() == 1) dez.prepend('0'); + + return QString("ChatLine::sender[sender=\"0%1\"] { foreground: %2; }\n").arg(QString::number(i, 16), color("Sender"+dez, settings)); +} diff --git a/src/qtui/qtuistyle.h b/src/qtui/qtuistyle.h index c5ea4fd8..d2e70514 100644 --- a/src/qtui/qtuistyle.h +++ b/src/qtui/qtuistyle.h @@ -22,6 +22,7 @@ #define QTUISTYLE_H_ #include "uistyle.h" +#include "qtuisettings.h" class QtUiStyle : public UiStyle { Q_OBJECT @@ -33,9 +34,16 @@ public: virtual inline qreal firstColumnSeparator() const { return 6; } virtual inline qreal secondColumnSeparator() const { return 6; } +public slots: + void generateSettingsQss() const; + private slots: void updateTimestampFormatString(); +private: + QString color(const QString &key, QtUiStyleSettings &settings) const; + QString msgTypeQss(const QString &msgType, const QString &key, QtUiStyleSettings &settings) const; + QString senderQss(int i, QtUiStyleSettings &settings) const; }; #endif diff --git a/src/qtui/settingspages/chatviewsettingspage.cpp b/src/qtui/settingspages/chatviewsettingspage.cpp index 82671737..f9c26432 100644 --- a/src/qtui/settingspages/chatviewsettingspage.cpp +++ b/src/qtui/settingspages/chatviewsettingspage.cpp @@ -19,8 +19,9 @@ ***************************************************************************/ #include "chatviewsettingspage.h" - #include "colorbutton.h" +#include "qtui.h" +#include "qtuistyle.h" ChatViewSettingsPage::ChatViewSettingsPage(QWidget *parent) : SettingsPage(tr("Appearance"), tr("Chat View"), parent) @@ -29,3 +30,9 @@ ChatViewSettingsPage::ChatViewSettingsPage(QWidget *parent) initAutoWidgets(); } + +void ChatViewSettingsPage::save() { + SettingsPage::save(); + QtUi::style()->generateSettingsQss(); + QtUi::style()->reload(); +} diff --git a/src/qtui/settingspages/chatviewsettingspage.h b/src/qtui/settingspages/chatviewsettingspage.h index 757e0cd5..70de7f9a 100644 --- a/src/qtui/settingspages/chatviewsettingspage.h +++ b/src/qtui/settingspages/chatviewsettingspage.h @@ -29,15 +29,18 @@ class ColorButton; class ChatViewSettingsPage : public SettingsPage { Q_OBJECT - public: - ChatViewSettingsPage(QWidget *parent = 0); +public: + ChatViewSettingsPage(QWidget *parent = 0); - inline bool hasDefaults() const { return true; } + inline bool hasDefaults() const { return true; } - private: - Ui::ChatViewSettingsPage ui; +public slots: + void save(); - inline QString settingsKey() const { return QString("QtUi/ChatView/__default__"); } +private: + Ui::ChatViewSettingsPage ui; + + inline QString settingsKey() const { return QString("QtUi/ChatView/__default__"); } }; #endif