// BufferView / NickView settings
UiStyleSettings s;
_showBufferViewIcons = _showNickViewIcons = s.value("ShowItemViewIcons", true).toBool();
- s.notify("ShowItemViewIcons", this, SLOT(showItemViewIconsChanged()));
+ s.notify("ShowItemViewIcons", this, SLOT(showItemViewIconsChanged(QVariant)));
+
+ _allowMircColors = s.value("AllowMircColors", true).toBool();
+ s.notify("AllowMircColors", this, SLOT(allowMircColorsChanged(QVariant)));
loadStyleSheet();
}
}
}
+void UiStyle::allowMircColorsChanged(const QVariant &v) {
+ _allowMircColors = v.toBool();
+ emit changed();
+}
+
/******** ItemView Styling *******/
-void UiStyle::showItemViewIconsChanged() {
- UiStyleSettings s;
- _showBufferViewIcons = _showNickViewIcons = s.value("ShowItemViewIcons").toBool();
+void UiStyle::showItemViewIconsChanged(const QVariant &v) {
+ _showBufferViewIcons = _showNickViewIcons = v.toBool();
}
QVariant UiStyle::bufferViewItemData(const QModelIndex &index, int role) const {
return _formatCache.value(formatType | ((quint64)messageLabel << 32), QTextCharFormat());
}
-void UiStyle::setCachedFormat(const QTextCharFormat &format, quint32 formatType, quint32 messageLabel) {
+void UiStyle::setCachedFormat(const QTextCharFormat &format, quint32 formatType, quint32 messageLabel) const {
_formatCache[formatType | ((quint64)messageLabel << 32)] = format;
}
-QFontMetricsF *UiStyle::fontMetrics(quint32 ftype, quint32 label) {
+QFontMetricsF *UiStyle::fontMetrics(quint32 ftype, quint32 label) const {
// QFontMetricsF is not assignable, so we need to store pointers :/
quint64 key = ftype | ((quint64)label << 32);
// NOTE: This and the following functions are intimately tied to the values in FormatType. Don't change this
// until you _really_ know what you do!
-QTextCharFormat UiStyle::format(quint32 ftype, quint32 label_) {
+QTextCharFormat UiStyle::format(quint32 ftype, quint32 label_) const {
if(ftype == Invalid)
return QTextCharFormat();
return fmt;
}
-void UiStyle::mergeFormat(QTextCharFormat &fmt, quint32 ftype, quint64 label) {
+void UiStyle::mergeFormat(QTextCharFormat &fmt, quint32 ftype, quint64 label) const {
mergeSubElementFormat(fmt, ftype & 0x00ff, label);
// TODO: allow combinations for mirc formats and colors (each), e.g. setting a special format for "bold and italic"
// Now we handle color codes
// We assume that those can't be combined with subelement and message types.
- if(ftype & 0x00400000)
- mergeSubElementFormat(fmt, ftype & 0x0f400000, label); // foreground
- if(ftype & 0x00800000)
- mergeSubElementFormat(fmt, ftype & 0xf0800000, label); // background
- if((ftype & 0x00c00000) == 0x00c00000)
- mergeSubElementFormat(fmt, ftype & 0xffc00000, label); // combination
+ if(_allowMircColors) {
+ if(ftype & 0x00400000)
+ mergeSubElementFormat(fmt, ftype & 0x0f400000, label); // foreground
+ if(ftype & 0x00800000)
+ mergeSubElementFormat(fmt, ftype & 0xf0800000, label); // background
+ if((ftype & 0x00c00000) == 0x00c00000)
+ mergeSubElementFormat(fmt, ftype & 0xffc00000, label); // combination
+ }
// URL
if(ftype & Url)
}
// Merge a subelement format into an existing message format
-void UiStyle::mergeSubElementFormat(QTextCharFormat& fmt, quint32 ftype, quint64 label) {
+void UiStyle::mergeSubElementFormat(QTextCharFormat& fmt, quint32 ftype, quint64 label) const {
quint64 key = ftype | label;
fmt.merge(format(key & Q_UINT64_C(0x0000ffffffffff00))); // label + subelement
fmt.merge(format(key & Q_UINT64_C(0x0000ffffffffffff))); // label + subelement + msgtype
return NetsplitJoinMsg;
case Message::NetsplitQuit:
return NetsplitQuitMsg;
+ case Message::Invite:
+ return InviteMsg;
}
//Q_ASSERT(false); // we need to handle all message types
qWarning() << Q_FUNC_INFO << "Unknown message type:" << msgType;
return _formatCodes.key(ftype);
}
-QList<QTextLayout::FormatRange> UiStyle::toTextLayoutList(const FormatList &formatList, int textLength, quint32 messageLabel) {
+QList<QTextLayout::FormatRange> UiStyle::toTextLayoutList(const FormatList &formatList, int textLength, quint32 messageLabel) const {
QList<QTextLayout::FormatRange> formatRanges;
QTextLayout::FormatRange range;
int i = 0;
if(s[pos+1] == 'D') code += s[pos+2];
FormatType ftype = formatType(code);
if(ftype == Invalid) {
+ pos++;
qWarning() << (QString("Invalid format code in string: %1").arg(s));
continue;
}
QString UiStyle::mircToInternal(const QString &mirc_) {
QString mirc = mirc_;
mirc.replace('%', "%%"); // escape % just to be sure
+ mirc.replace('\t', " "); // tabs break layout, also this is italics in Konversation
mirc.replace('\x02', "%B");
mirc.replace('\x0f', "%O");
mirc.replace('\x12', "%R");
QString txt = UiStyle::mircToInternal(contents());
QString bufferName = bufferInfo().bufferName();
bufferName.replace('%', "%%"); // well, you _can_ have a % in a buffername apparently... -_-
+ host.replace('%', "%%"); // hostnames too...
+ user.replace('%', "%%"); // and the username...
+ nick.replace('%', "%%"); // ... and then there's totally RFC-violating servers like justin.tv m(
const int maxNetsplitNicks = 15;
QString t;
t.append(tr("%DN%1%DN (%2 more)").arg(static_cast<QStringList>(users.mid(0, maxNetsplitNicks)).join(", ")).arg(users.count() - maxNetsplitNicks));
}
break;
+ case Message::Invite:
+ //: Invite Message
+ t = tr("%1").arg(txt); break;
default:
t = tr("[%1]").arg(txt);
}
return tr("=>"); break;
case Message::NetsplitQuit:
return tr("<="); break;
+ case Message::Invite:
+ return tr("->"); break;
default:
return tr("%1").arg(plainSender());
}