colors["15"] = QColor("silver");
QTextCharFormat def;
- //def.setFont(QFont("Lucida Mono"));
+ def.setForeground(QBrush("black"));
+ def.setFont(QFont("Verdana",9));
formats["default"] = def;
// %B - 0x02 - bold
formats["%B"] = bold;
// %O - 0x0f - plain
- formats["%O"] = QTextCharFormat();
+ formats["%O"] = def;
// %R - 0x12 - reverse
// -- - 0x16 - reverse
formats["%Dj"] = join;
// %Dp - part
QTextCharFormat part;
- part.setForeground(QBrush("firebrick"));
+ part.setForeground(QBrush("indianred"));
formats["%Dp"] = part;
// %Dq - quit
QTextCharFormat quit;
- quit.setForeground(QBrush("firebrick"));
+ quit.setForeground(QBrush("indianred"));
formats["%Dq"] = quit;
// %Dk - kick
QTextCharFormat kick;
- kick.setForeground(QBrush("firebrick"));
+ kick.setForeground(QBrush("indianred"));
formats["%Dk"] = kick;
// %Dr - nick rename
QTextCharFormat nren;
QTextCharFormat mode;
mode.setForeground(QBrush("steelblue"));
formats["%Dm"] = mode;
+ // %Da - ctcp action
+ QTextCharFormat action;
+ action.setFontItalic(true);
+ action.setForeground(QBrush("darkmagenta"));
+ formats["%Da"] = action;
// %DT - timestamp
QTextCharFormat ts;
QTextCharFormat flags;
flags.setFontWeight(QFont::Bold);
formats["%DM"] = flags;
-
+ // %DU - clickable URL
+ QTextCharFormat url;
+ url.setFontUnderline(true);
+ url.setAnchor(true);
+ formats["%DU"] = url;
}
QString Style::mircToInternal(QString mirc) {
* describing the formats of the string.
* \param s string in internal format (% style format codes)
*/
-Style::StringFormats Style::internalToFormatted(QString s) {
+Style::FormattedString Style::internalToFormatted(QString s) {
QHash<QString, int> toggles;
QString p;
- StringFormats sf;
+ FormattedString sf;
QTextLayout::FormatRange rng;
rng.format = formats["default"]; rng.start = 0; rng.length = -1; sf.formats.append(rng);
toggles["default"] = sf.formats.count() - 1;
}
} else if(s[i] == 'O') {
foreach(QString key, toggles.keys()) {
+ if(key == "default") continue;
sf.formats[toggles[key]].length = j - sf.formats[toggles[key]].start;
toggles.remove(key);
}
if(s[i] == 'D') i++;
if(toggles.contains(key)) {
sf.formats[toggles[key]].length = j - sf.formats[toggles[key]].start;
+ if(key == "%DU") {
+ // URL handling
+ // FIXME check for and handle format codes within URLs
+ QString u = s.mid(i - sf.formats[toggles[key]].length - 2, sf.formats[toggles[key]].length);
+ UrlInfo url;
+ url.start = sf.formats[toggles[key]].start;
+ url.end = j;
+ url.url = QUrl(u);
+ sf.urls.append(url);
+ }
toggles.remove(key);
} else {
QTextLayout::FormatRange range;