Add configuration option for a custom stylesheet
[quassel.git] / src / qtui / topiclabel.cpp
index ec9fc4e..e74d5dc 100644 (file)
@@ -31,6 +31,7 @@
 #include <QFontMetrics>
 
 #include "qtui.h"
+#include "qtuistyle.h"
 #include "message.h"
 
 TopicLabel::TopicLabel(QWidget *parent)
@@ -48,17 +49,17 @@ void TopicLabel::paintEvent(QPaintEvent *event) {
   Q_UNUSED(event);
 
   textPartOffset.clear();
-  
+
   QPainter painter(this);
   painter.setBackgroundMode(Qt::OpaqueMode);
 
-  // FIXME re-enable topic painting
-#ifndef SPUTDEV
+  // FIXME use QTextLayout instead
+
   QRect drawRect = rect().adjusted(offset, 0, 0, 0);
   QRect brect;
   QString textPart;
-  foreach(QTextLayout::FormatRange fr, styledContents.formatList) {
-    textPart = styledContents.plainText.mid(fr.start, fr.length);
+  foreach(QTextLayout::FormatRange fr, formatList) {
+    textPart = plainText.mid(fr.start, fr.length);
     textPartOffset << drawRect.left();
     painter.setFont(fr.format.font());
     painter.setPen(QPen(fr.format.foreground(), 0));
@@ -67,7 +68,6 @@ void TopicLabel::paintEvent(QPaintEvent *event) {
     drawRect.setLeft(brect.right());
   }
   textWidth = brect.right();
-#endif
 }
 
 void TopicLabel::setText(const QString &text) {
@@ -78,19 +78,19 @@ void TopicLabel::setText(const QString &text) {
   offset = 0;
   update();
 
-#ifndef SPUTDEV
-  styledContents = QtUi::style()->styleString(Message::mircToInternal(text));
+  UiStyle::StyledString styledContents = QtUi::style()->styleString(QtUi::style()->mircToInternal(text), UiStyle::PlainMsg);
+  plainText = styledContents.plainText;
+  formatList = QtUi::style()->toTextLayoutList(styledContents.formatList, plainText.length());
   int height = 1;
-  foreach(QTextLayout::FormatRange fr, styledContents.formatList) {
+  foreach(QTextLayout::FormatRange fr, formatList) {
     height = qMax(height, QFontMetrics(fr.format.font()).height());
   }
 
   // ensure the label is editable (height != 1) if there is no text to show
   if(text.isEmpty())
     height = QFontMetrics(qApp->font()).height();
-  
+
   // setFixedHeight(height);
-#endif  
   // show topic in tooltip
 }
 
@@ -103,11 +103,9 @@ void TopicLabel::mouseMoveEvent(QMouseEvent *event) {
   int newOffset = event->pos().x() - dragStartX;
   if(newOffset > 0)
     offset = 0;
-  else if(width() < textWidth || offset < newOffset)
+  else if(width() + 1 < textWidth || offset < newOffset)
     offset = newOffset;
-//     qDebug() << offset << (width() - textWidth) << width() << textWidth;
-//     if(offset < width() - textWidth)
-//       offset = width() - textWidth;
+
   update();
 }
 
@@ -129,33 +127,30 @@ void TopicLabel::mouseReleaseEvent(QMouseEvent *event) {
 }
 
 void TopicLabel::mouseDoubleClickEvent(QMouseEvent *event) {
-#ifndef SPUTDEV
   event->accept();
-  int textPart = 0;
-  int textOffset = 0;
-
   if(textPartOffset.isEmpty())
     return;
 
   // find the text part that contains the url. We don't expect color codes in urls so we expect only full parts (yet?)
-  int x = event->pos().x();
+  int textPart = 0;
+  int x = event->pos().x() + offset;
   while(textPart + 1 < textPartOffset.count()) {
-    if(textPartOffset[textPart + 1] < x) {
+    if(textPartOffset[textPart + 1] < x)
       textPart++;
-      textOffset = textPartOffset[textPart];
-    } else {
+    else
       break;
-    }
   }
+  int textOffset = textPartOffset[textPart];
 
   // we've Identified the needed text part \o/
-  QString text = styledContents.plainText.mid(styledContents.formatList[textPart].start, styledContents.formatList[textPart].length);
+  QString text = plainText.mid(formatList[textPart].start, formatList[textPart].length);
 
   // now we have to find the the left and right word delimiters of the clicked word
-  QFontMetrics fontMetric(styledContents.formatList[textPart].format.font());
-  
+  QFontMetrics fontMetric(formatList[textPart].format.font());
+
   int start = 0;
   int spacePos = text.indexOf(" ");
+  x -= offset; // offset needs to go here as it's already in the textOffset
   while(spacePos != -1) {
     if(fontMetric.width(text.left(spacePos + 1)) + textOffset < x) {
       start = spacePos + 1;
@@ -171,11 +166,8 @@ void TopicLabel::mouseDoubleClickEvent(QMouseEvent *event) {
     len = end - start;
   }
   QString word = text.mid(start, len);
-  qDebug() << word;
   QRegExp regex("^(h|f)t{1,2}ps?:\\/\\/");
   if(regex.indexIn(word) != -1) {
     QDesktopServices::openUrl(QUrl(word));
   }
-#endif
-  
 }