mirror of
https://invent.kde.org/system/dolphin
synced 2024-09-19 00:11:21 +00:00
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
This commit is contained in:
parent
f55119945f
commit
c2bf208fe6
|
@ -24,11 +24,15 @@
|
||||||
#include <KColorScheme>
|
#include <KColorScheme>
|
||||||
#include <KSeparator>
|
#include <KSeparator>
|
||||||
#include <KWindowSystem>
|
#include <KWindowSystem>
|
||||||
|
#include <KStringHandler>
|
||||||
|
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
#include <QStyleOptionFrame>
|
#include <QStyleOptionFrame>
|
||||||
#include <QStylePainter>
|
#include <QStylePainter>
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
|
#include <QTextDocument>
|
||||||
|
#include <QTextLayout>
|
||||||
|
#include <QTextLine>
|
||||||
|
|
||||||
#ifndef HAVE_NEPOMUK
|
#ifndef HAVE_NEPOMUK
|
||||||
#include <KFileMetaDataWidget>
|
#include <KFileMetaDataWidget>
|
||||||
|
@ -56,10 +60,15 @@ FileMetaDataToolTip::FileMetaDataToolTip(QWidget* parent) :
|
||||||
m_name = new QLabel(this);
|
m_name = new QLabel(this);
|
||||||
m_name->setForegroundRole(QPalette::ToolTipText);
|
m_name->setForegroundRole(QPalette::ToolTipText);
|
||||||
m_name->setTextFormat(Qt::PlainText);
|
m_name->setTextFormat(Qt::PlainText);
|
||||||
|
m_name->setAlignment(Qt::AlignHCenter);
|
||||||
|
|
||||||
QFont font = m_name->font();
|
QFont font = m_name->font();
|
||||||
font.setBold(true);
|
font.setBold(true);
|
||||||
m_name->setFont(font);
|
m_name->setFont(font);
|
||||||
|
|
||||||
|
QFontMetrics fontMetrics(font);
|
||||||
|
m_name->setMaximumWidth(fontMetrics.averageCharWidth() * 40);
|
||||||
|
|
||||||
// Create widget for the meta data
|
// Create widget for the meta data
|
||||||
#ifndef HAVE_NEPOMUK
|
#ifndef HAVE_NEPOMUK
|
||||||
m_fileMetaDataWidget = new KFileMetaDataWidget(this);
|
m_fileMetaDataWidget = new KFileMetaDataWidget(this);
|
||||||
|
@ -108,7 +117,33 @@ QPixmap FileMetaDataToolTip::preview() const
|
||||||
|
|
||||||
void FileMetaDataToolTip::setName(const QString& name)
|
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
|
QString FileMetaDataToolTip::name() const
|
||||||
|
|
Loading…
Reference in a new issue