┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/views/tooltips
diff options
context:
space:
mode:
authorEmmanuel Pescosta <[email protected]>2013-11-02 00:12:33 +0100
committerEmmanuel Pescosta <[email protected]>2013-11-02 00:12:33 +0100
commitc2bf208fe6c7c7081fe1cdb8213fb5b4eb3b6050 (patch)
tree9fd043d721acb97124c16cd73d5174e601394bb7 /src/views/tooltips
parentf55119945f0edc369b53c64b45ae117dc73ff426 (diff)
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
Diffstat (limited to 'src/views/tooltips')
-rw-r--r--src/views/tooltips/filemetadatatooltip.cpp37
1 files changed, 36 insertions, 1 deletions
diff --git a/src/views/tooltips/filemetadatatooltip.cpp b/src/views/tooltips/filemetadatatooltip.cpp
index c22f6be5d..67911eea2 100644
--- a/src/views/tooltips/filemetadatatooltip.cpp
+++ b/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