Blob Blame History Raw
From 1af756f101d099592df25ddaaf1c34d63633f3a3 Mon Sep 17 00:00:00 2001
From: Emmanuel Pescosta <emmanuelpescosta099@gmail.com>
Date: Sat, 2 Nov 2013 00:12:33 +0100
Subject: [PATCH 1/2] Fix Bug 287983 - Dolphin truncates tooltip information
 for long file names

Use KStringHandler and QTextLayout to wrap the text (file name)
into the maximum width of the label "name".

Make use of QFontMetrics to calculate a font size aware tooltip size.

BUG: 287983
FIXED-IN: 4.11.3
REVIEW: 113101
---
 dolphin/src/views/tooltips/filemetadatatooltip.cpp | 37 +++++++++++++++++++++-
 1 file changed, 36 insertions(+), 1 deletion(-)

diff --git a/dolphin/src/views/tooltips/filemetadatatooltip.cpp b/dolphin/src/views/tooltips/filemetadatatooltip.cpp
index c22f6be..67911ee 100644
--- a/dolphin/src/views/tooltips/filemetadatatooltip.cpp
+++ b/dolphin/src/views/tooltips/filemetadatatooltip.cpp
@@ -24,11 +24,15 @@
 #include <KColorScheme>
 #include <KSeparator>
 #include <KWindowSystem>
+#include <KStringHandler>
 
 #include <QLabel>
 #include <QStyleOptionFrame>
 #include <QStylePainter>
 #include <QVBoxLayout>
+#include <QTextDocument>
+#include <QTextLayout>
+#include <QTextLine>
 
 #ifndef HAVE_NEPOMUK
 #include <KFileMetaDataWidget>
@@ -56,10 +60,15 @@ FileMetaDataToolTip::FileMetaDataToolTip(QWidget* parent) :
     m_name = new QLabel(this);
     m_name->setForegroundRole(QPalette::ToolTipText);
     m_name->setTextFormat(Qt::PlainText);
+    m_name->setAlignment(Qt::AlignHCenter);
+
     QFont font = m_name->font();
     font.setBold(true);
     m_name->setFont(font);
 
+    QFontMetrics fontMetrics(font);
+    m_name->setMaximumWidth(fontMetrics.averageCharWidth() * 40);
+
     // Create widget for the meta data
 #ifndef HAVE_NEPOMUK
     m_fileMetaDataWidget = new KFileMetaDataWidget(this);
@@ -108,7 +117,33 @@ QPixmap FileMetaDataToolTip::preview() const
 
 void FileMetaDataToolTip::setName(const QString& name)
 {
-    m_name->setText(name);
+    QTextOption textOption;
+    textOption.setWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere);
+
+    const QString processedName = Qt::mightBeRichText(name) ? name : KStringHandler::preProcessWrap(name);
+
+    QTextLayout textLayout(processedName);
+    textLayout.setFont(m_name->font());
+    textLayout.setTextOption(textOption);
+
+    QString wrappedText;
+    wrappedText.reserve(processedName.length());
+
+    // wrap the text to fit into the maximum width of m_name
+    textLayout.beginLayout();
+    QTextLine line = textLayout.createLine();
+    while (line.isValid()) {
+        line.setLineWidth(m_name->maximumWidth());
+        wrappedText += processedName.mid(line.textStart(), line.textLength());
+
+        line = textLayout.createLine();
+        if (line.isValid()) {
+            wrappedText += QChar::LineSeparator;
+        }
+    }
+    textLayout.endLayout();
+
+    m_name->setText(wrappedText);
 }
 
 QString FileMetaDataToolTip::name() const
-- 
1.8.4.2