[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdebase/apps/lib/konq
From:       David Faure <faure () kde ! org>
Date:       2010-08-31 20:11:48
Message-ID: 20100831201148.D6FC0AC857 () svn ! kde ! org
[Download RAW message or body]

SVN commit 1170423 by dfaure:

Support richtext in the statusbar message label (fixes khtml showing "<qt>")


 M  +34 -1     konq_statusbarmessagelabel.cpp  


--- trunk/KDE/kdebase/apps/lib/konq/konq_statusbarmessagelabel.cpp #1170422:1170423
@@ -19,11 +19,14 @@
  ***************************************************************************/
 
 #include "konq_statusbarmessagelabel.h"
+#include <QStyle>
+#include <QTextDocument>
 
 #include <kcolorscheme.h>
 #include <kiconloader.h>
 #include <kicon.h>
 #include <klocale.h>
+#include <kdebug.h>
 
 #include <QFontMetrics>
 #include <QPainter>
@@ -47,6 +50,8 @@
         m_closeButton(0)
     {}
 
+    bool isRichText() const { return m_text.startsWith("<html>") || \
m_text.startsWith("<qt>"); } +
     KonqStatusBarMessageLabel::Type m_type;
     KonqStatusBarMessageLabel::State m_state;
     int m_illumination;
@@ -54,6 +59,7 @@
     QTimer* m_timer;
     QString m_text;
     QString m_defaultText;
+    QTextDocument m_textDocument;
     QList<QString> m_pendingMessages;
     QPixmap m_pixmap;
     QToolButton* m_closeButton;
@@ -102,6 +108,16 @@
     d->m_text = text;
     d->m_type = type;
 
+    if (d->isRichText()) {
+        d->m_textDocument.setTextWidth(-1);
+        d->m_textDocument.setDefaultFont(font());
+        QString html = "<html><font color=\"";
+        html += palette().windowText().color().name();
+        html += "\">";
+        html += d->m_text;
+        d->m_textDocument.setHtml(html);
+    }
+
     d->m_timer->stop();
     d->m_illumination = 0;
     d->m_state = DefaultState;
@@ -201,12 +217,29 @@
     }
 
     // draw text
+
+    const QRect availTextRect(x, 0, availableTextWidth(), height());
+
+    if (d->isRichText()) {
+        const QSize sz = d->m_textDocument.size().toSize();
+
+        // Vertical centering
+        const QRect textRect = QStyle::alignedRect(Qt::LeftToRight, Qt::AlignLeft | \
Qt::AlignVCenter, sz, availTextRect); +        //kDebug() << d->m_text << " sz=" << \
sz << textRect; +
+        // What about wordwrap here?
+
+        painter.translate(textRect.left(), textRect.top());
+        d->m_textDocument.drawContents(&painter);
+    } else {
+        // plain text
     painter.setPen(palette().windowText().color());
     int flags = Qt::AlignVCenter;
     if (height() > d->m_minTextHeight) {
         flags = flags | Qt::TextWordWrap;
     }
-    painter.drawText(QRect(x, 0, availableTextWidth(), height()), flags, d->m_text);
+        painter.drawText(availTextRect, flags, d->m_text);
+    }
     painter.end();
 }
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic