X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fqtuistyle.cpp;h=2e505a69d437659973d7527054601e7194f467c0;hp=d1b455d09e3fde7cd57fe6f0718fb305babb4d55;hb=40d9d7cf8df839fa51033ccbc7f8d075ad276949;hpb=0f940afade8a434b061fa45d324ce90f83dad08d diff --git a/src/qtui/qtuistyle.cpp b/src/qtui/qtuistyle.cpp index d1b455d0..2e505a69 100644 --- a/src/qtui/qtuistyle.cpp +++ b/src/qtui/qtuistyle.cpp @@ -18,143 +18,138 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ +#include "chatviewsettings.h" #include "qtuistyle.h" -#include "qtuisettings.h" - -QtUiStyle::QtUiStyle() : UiStyle("QtUiStyle") { - // We need to just set our internal formats; everything else is done by the base class... - - // Internal message formats - QTextCharFormat plainMsg; - plainMsg.setForeground(QBrush("black")); - setFormat(PlainMsg, plainMsg, Settings::Default); - - QTextCharFormat notice; - notice.setForeground(QBrush("navy")); - setFormat(NoticeMsg, notice, Settings::Default); - - QTextCharFormat server; - server.setForeground(QBrush("navy")); - setFormat(ServerMsg, server, Settings::Default); - - QTextCharFormat error; - error.setForeground(QBrush("red")); - setFormat(ErrorMsg, error, Settings::Default); - - QTextCharFormat join; - join.setForeground(QBrush("green")); - setFormat(JoinMsg, join, Settings::Default); - - QTextCharFormat part; - part.setForeground(QBrush("indianred")); - setFormat(PartMsg, part, Settings::Default); - - QTextCharFormat quit; - quit.setForeground(QBrush("indianred")); - setFormat(QuitMsg, quit, Settings::Default); - - QTextCharFormat kick; - kick.setForeground(QBrush("indianred")); - setFormat(KickMsg, kick, Settings::Default); - - QTextCharFormat nren; - nren.setForeground(QBrush("magenta")); - setFormat(RenameMsg, nren, Settings::Default); - - QTextCharFormat mode; - mode.setForeground(QBrush("steelblue")); - setFormat(ModeMsg, mode, Settings::Default); - - QTextCharFormat action; - action.setFontItalic(true); - action.setForeground(QBrush("darkmagenta")); - setFormat(ActionMsg, action, Settings::Default); - - // Internal message element formats - QTextCharFormat ts; - ts.setForeground(QBrush("grey")); - setFormat(Timestamp, ts, Settings::Default); - - // Set the default sender color - QTextCharFormat sender; - sender.setAnchor(true); - sender.setForeground(QBrush("navy")); - setFormat(Sender, sender, Settings::Default); - - /* - * Fillup the list of colors used for sender auto coloring In this case - * this are all tango colors without the grey tones - * See "http://tango.freedesktop.org/Tango_Icon_Theme_Guidelines" for details - */ - // Butter - addSenderAutoColor(SenderCol01, "#fce94f"); - addSenderAutoColor(SenderCol02, "#edd400"); - addSenderAutoColor(SenderCol03, "#c4a000"); - // Orange - addSenderAutoColor(SenderCol04, "#fcaf3e"); - addSenderAutoColor(SenderCol05, "#f57900"); - addSenderAutoColor(SenderCol06, "#ce5c00"); - // Chocolate - addSenderAutoColor(SenderCol07, "#e9b96e"); - addSenderAutoColor(SenderCol08, "#c17d11"); - addSenderAutoColor(SenderCol09, "#8f5902"); - // Chameleon - addSenderAutoColor(SenderCol10, "#8ae234"); - addSenderAutoColor(SenderCol11, "#73d216"); - addSenderAutoColor(SenderCol12, "#4e9a06"); - // Sky Blue - addSenderAutoColor(SenderCol13, "#729fcf"); - addSenderAutoColor(SenderCol14, "#3465a4"); - addSenderAutoColor(SenderCol15, "#204a87"); - // Plum - addSenderAutoColor(SenderCol16, "#ad7fa8"); - addSenderAutoColor(SenderCol17, "#75507b"); - addSenderAutoColor(SenderCol18, "#5c3566"); - // Scarlet Red - addSenderAutoColor(SenderCol19, "#ef2929"); - addSenderAutoColor(SenderCol20, "#cc0000"); - addSenderAutoColor(SenderCol21, "#a40000"); - - QTextCharFormat nick; - nick.setAnchor(true); - nick.setFontWeight(QFont::Bold); - setFormat(Nick, nick, Settings::Default); - - QTextCharFormat hostmask; - hostmask.setFontItalic(true); - setFormat(Hostmask, hostmask, Settings::Default); - - QTextCharFormat channel; - channel.setAnchor(true); - channel.setFontWeight(QFont::Bold); - setFormat(ChannelName, channel, Settings::Default); - - QTextCharFormat flags; - flags.setFontWeight(QFont::Bold); - setFormat(ModeFlags, flags, Settings::Default); - - QTextCharFormat url; - url.setFontUnderline(true); - url.setAnchor(true); - setFormat(Url, url, Settings::Default); - - QtUiStyleSettings s; - _highlightColor = s.highlightColor(); - if(!_highlightColor.isValid()) _highlightColor = QColor("lightcoral"); + +#include +#include + +QtUiStyle::QtUiStyle(QObject *parent) : UiStyle(parent) { + ChatViewSettings s; + s.notify("TimestampFormat", this, SLOT(updateTimestampFormatString())); + updateTimestampFormatString(); } QtUiStyle::~QtUiStyle() {} -void QtUiStyle::setHighlightColor(const QColor &col) { - _highlightColor = col; - QtUiStyleSettings s; - s.setHighlightColor(col); +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"; + + // ChatView + /////////// + QtUiStyleSettings fs("Fonts"); + if(fs.value("UseCustomChatViewFont").toBool()) + out << "\n// ChatView Font\n" + << "ChatLine { " << fontDescription(fs.value("ChatView").value()) << "; }\n"; + + QtUiStyleSettings s("Colors"); + if(s.value("UseChatViewColors").toBool()) { + out << "\n// Custom ChatView Colors\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"; + } + + if(s.value("UseSenderColors").toBool()) { + out << "\n// Sender Colors\n" + << "ChatLine::sender#plain[sender=\"self\"] { foreground: " << color("SenderSelf", s) << "; }\n\n"; + + for(int i = 0; i < 16; i++) + out << senderQss(i, s); + } + + // ItemViews + //////////// + + UiStyleSettings uiFonts("Fonts"); + if(uiFonts.value("UseCustomItemViewFont").toBool()) { + QString fontDesc = fontDescription(uiFonts.value("ItemView").value()); + out << "\n// ItemView Font\n" + << "ChatListItem { " << fontDesc << "; }\n" + << "NickListItem { " << fontDesc << "; }\n\n"; + } + + UiStyleSettings uiColors("Colors"); + if(uiColors.value("UseBufferViewColors").toBool()) { + out << "\n// BufferView Colors\n" + << "ChatListItem { foreground: " << color("DefaultBuffer", uiColors) << "; }\n" + << chatListItemQss("inactive", "InactiveBuffer", uiColors) + << chatListItemQss("channel-event", "ActiveBuffer", uiColors) + << chatListItemQss("unread-message", "UnreadBuffer", uiColors) + << chatListItemQss("highlighted", "HighlightedBuffer", uiColors); + } + + if(uiColors.value("UseNickViewColors").toBool()) { + out << "\n// NickView Colors\n" + << "NickListItem[type=\"category\"] { foreground: " << color("DefaultBuffer", uiColors) << "; }\n" + << "NickListItem[type=\"user\"] { foreground: " << color("OnlineNick", uiColors) << "; }\n" + << "NickListItem[type=\"user\", state=\"away\"] { foreground: " << color("AwayNick", uiColors) << "; }\n"; + } + + settingsQss.close(); +} + +QString QtUiStyle::color(const QString &key, UiSettings &settings) const { + return settings.value(key).value().name(); +} + +QString QtUiStyle::fontDescription(const QFont &font) const { + 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()); + return desc; +} + +QString QtUiStyle::msgTypeQss(const QString &msgType, const QString &key, UiSettings &settings) const { + return QString("ChatLine#%1 { foreground: %2; }\n").arg(msgType, color(key, settings)); +} + +QString QtUiStyle::senderQss(int i, UiSettings &settings) const { + QString dez = QString::number(i); + if(dez.length() == 1) dez.prepend('0'); + + return QString("ChatLine::sender#plain[sender=\"0%1\"] { foreground: %2; }\n").arg(QString::number(i, 16), color("Sender"+dez, settings)); } -void QtUiStyle::addSenderAutoColor(FormatType type, const QString name) -{ - QTextCharFormat autoColor; - autoColor.setAnchor(true); - autoColor.setForeground(QBrush(QColor(name))); - setFormat(type, autoColor, Settings::Default); +QString QtUiStyle::chatListItemQss(const QString &state, const QString &key, UiSettings &settings) const { + return QString("ChatListItem[state=\"%1\"] { foreground: %2; }\n").arg(state, color(key, settings)); }