X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fuisupport%2Fuistyle.cpp;h=6cfff50a433653465f621c5987c783f571b6c62c;hp=62c7a0e276dbc0f37fc880ebe7d4ea4ca62d5401;hb=fdf69d69f0dda76a65a27ce7059b7b86696ff79c;hpb=8bd4f0d095891cc992ec7dd006a7bf2c6601787d diff --git a/src/uisupport/uistyle.cpp b/src/uisupport/uistyle.cpp index 62c7a0e2..6cfff50a 100644 --- a/src/uisupport/uistyle.cpp +++ b/src/uisupport/uistyle.cpp @@ -51,34 +51,40 @@ UiStyle::UiStyle(QObject *parent) : QObject(parent) { _formatCodes["%DU"] = Url; setTimestampFormatString("[hh:mm:ss]"); + loadStyleSheet(); } -UiStyle::~ UiStyle() { +UiStyle::~UiStyle() { qDeleteAll(_metricsCache); } +void UiStyle::reload() { + loadStyleSheet(); +} + void UiStyle::loadStyleSheet() { qDeleteAll(_metricsCache); _metricsCache.clear(); _formatCache.clear(); - QString styleSheet; + UiStyleSettings s; + QString styleSheet; styleSheet += loadStyleSheet("file:///" + Quassel::findDataFilePath("default.qss")); - styleSheet += loadStyleSheet("file:///" + Quassel::configDirPath() + "custom.qss"); - // styleSheet += loadStyleSheet("file:///" + some custom file name); FIXME + styleSheet += loadStyleSheet("file:///" + Quassel::configDirPath() + "settings.qss"); + if(s.value("UseCustomStyleSheet", false).toBool()) + styleSheet += loadStyleSheet("file:///" + s.value("CustomStyleSheetPath").toString(), true); styleSheet += loadStyleSheet("file:///" + Quassel::optionValue("qss"), true); - if(styleSheet.isEmpty()) - return; + if(!styleSheet.isEmpty()) { + QssParser parser; + parser.processStyleSheet(styleSheet); + QApplication::setPalette(parser.palette()); + _formatCache = parser.formats(); - QssParser parser; - parser.processStyleSheet(styleSheet); - QApplication::setPalette(parser.palette()); - _formatCache = parser.formats(); - - qApp->setStyleSheet(styleSheet); // pass the remaining sections to the application + qApp->setStyleSheet(styleSheet); // pass the remaining sections to the application + } emit changed(); } @@ -162,14 +168,14 @@ QTextCharFormat UiStyle::format(quint32 ftype, quint32 label_) { } void UiStyle::mergeFormat(QTextCharFormat &fmt, quint32 ftype, quint64 label) { - mergeSubElementFormat(fmt, ftype & 0x000f, label); + mergeSubElementFormat(fmt, ftype & 0x00ff, label); // TODO: allow combinations for mirc formats and colors (each), e.g. setting a special format for "bold and italic" // or "foreground 01 and background 03" if((ftype & 0xfff0)) { // element format - for(quint32 mask = 0x0010; mask <= 0x2000; mask <<= 1) { + for(quint32 mask = 0x00100; mask <= 0x40000; mask <<= 1) { if(ftype & mask) { - mergeSubElementFormat(fmt, mask | 0x0f, label); + mergeSubElementFormat(fmt, mask | 0xff, label); } } } @@ -191,9 +197,9 @@ void UiStyle::mergeFormat(QTextCharFormat &fmt, quint32 ftype, quint64 label) { // Merge a subelement format into an existing message format void UiStyle::mergeSubElementFormat(QTextCharFormat& fmt, quint32 ftype, quint64 label) { quint64 key = ftype | label; - fmt.merge(cachedFormat(key & Q_UINT64_C(0x0000fffffffffff0))); // label + subelement + fmt.merge(cachedFormat(key & Q_UINT64_C(0x0000ffffffffff00))); // label + subelement fmt.merge(cachedFormat(key & Q_UINT64_C(0x0000ffffffffffff))); // label + subelement + msgtype - fmt.merge(cachedFormat(key & Q_UINT64_C(0xfffffffffffffff0))); // label + subelement + nickhash + fmt.merge(cachedFormat(key & Q_UINT64_C(0xffffffffffffff00))); // label + subelement + nickhash fmt.merge(cachedFormat(key & Q_UINT64_C(0xffffffffffffffff))); // label + subelement + nickhash + msgtype } @@ -228,7 +234,8 @@ UiStyle::FormatType UiStyle::formatType(Message::Type msgType) { case Message::DayChange: return DayChangeMsg; } - Q_ASSERT(false); // we need to handle all message types + //Q_ASSERT(false); // we need to handle all message types + qWarning() << Q_FUNC_INFO << "Unknown message type:" << msgType; return ErrorMsg; } @@ -293,7 +300,7 @@ UiStyle::StyledString UiStyle::styleString(const QString &s_, quint32 baseFormat length = 6; } } else if(s[pos+1] == 'O') { // reset formatting - curfmt &= 0x0000000f; // we keep message type-specific formatting + curfmt &= 0x000000ff; // we keep message type-specific formatting length = 2; } else if(s[pos+1] == 'R') { // reverse // TODO: implement reverse formatting @@ -480,20 +487,12 @@ QString UiStyle::StyledMessage::decoratedSender() const { return tr("<%1>").arg(plainSender()); break; case Message::Notice: return tr("[%1]").arg(plainSender()); break; -<<<<<<< HEAD - case Message::Topic: - case Message::Server: - return tr("*"); break; - case Message::Error: - return tr("*"); break; -======= case Message::Action: return tr("-*-"); break; case Message::Nick: return tr("<->"); break; case Message::Mode: return tr("***"); break; ->>>>>>> Handle all message types properly in UiStyle; eliminate msgtype format codes case Message::Join: return tr("-->"); break; case Message::Part: @@ -517,50 +516,6 @@ QString UiStyle::StyledMessage::decoratedSender() const { } } -UiStyle::FormatType UiStyle::StyledMessage::senderFormat() const { - switch(type()) { - case Message::Plain: - // To produce random like but stable nick colorings some sort of hashing should work best. - // In this case we just use the qt function qChecksum which produces a - // CRC16 hash. This should be fast and 16 bits are more than enough. - { - QString nick = nickFromMask(sender()).toLower(); - if(!nick.isEmpty()) { - int chopCount = 0; - while(nick[nick.count() - 1 - chopCount] == '_') { - chopCount++; - } - nick.chop(chopCount); - } - quint16 hash = qChecksum(nick.toAscii().data(), nick.toAscii().size()); - return (UiStyle::FormatType)((((hash % 12) + 1) << 24) + 0x200); // FIXME: amount of sender colors hardwired - } - case Message::Notice: - return UiStyle::NoticeMsg; break; - case Message::Topic: - case Message::Server: - return UiStyle::ServerMsg; break; - case Message::Error: - return UiStyle::ErrorMsg; break; - case Message::Join: - return UiStyle::JoinMsg; break; - case Message::Part: - return UiStyle::PartMsg; break; - case Message::Quit: - return UiStyle::QuitMsg; break; - case Message::Kick: - return UiStyle::KickMsg; break; - case Message::Nick: - return UiStyle::NickMsg; break; - case Message::Mode: - return UiStyle::ModeMsg; break; - case Message::Action: - return UiStyle::ActionMsg; break; - default: - return UiStyle::ErrorMsg; - } -} - // FIXME hardcoded to 16 sender hashes quint8 UiStyle::StyledMessage::senderHash() const { if(_senderHash != 0xff)