]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/views/tooltips/filemetadatatooltip.cpp
Port tooltips to KToolTipWidget
[dolphin.git] / src / views / tooltips / filemetadatatooltip.cpp
index 1f4fb69aecbead34ba250014da4e04f36ae31892..2fbba8b9c6918f076b278619c8d4e2170aed0130 100644 (file)
 #include "filemetadatatooltip.h"
 
 #include <KColorScheme>
-#include <kfilemetadatawidget.h>
 #include <KSeparator>
-#include <KWindowSystem>
+// For the blurred tooltip background
+#include <KWindowEffects>
+#include <KStringHandler>
+#include <QTextDocument>
 
 #include <QLabel>
 #include <QStyleOptionFrame>
 #include <QStylePainter>
 #include <QVBoxLayout>
+#include <QTextLayout>
+#include <QTextLine>
 
-// For the blurred tooltip background
-#include <plasma/windoweffects.h>
+#ifndef HAVE_BALOO
+#include <KFileMetaDataWidget>
+#else
+#include <Baloo/FileMetaDataWidget>
+#endif
 
 FileMetaDataToolTip::FileMetaDataToolTip(QWidget* parent) :
     QWidget(parent),
@@ -40,9 +47,6 @@ FileMetaDataToolTip::FileMetaDataToolTip(QWidget* parent) :
     m_name(0),
     m_fileMetaDataWidget(0)
 {
-    setAttribute(Qt::WA_TranslucentBackground);
-    setWindowFlags(Qt::ToolTip | Qt::FramelessWindowHint);
-
     // Create widget for file preview
     m_preview = new QLabel(this);
     m_preview->setAlignment(Qt::AlignTop);
@@ -50,16 +54,28 @@ FileMetaDataToolTip::FileMetaDataToolTip(QWidget* parent) :
     // Create widget for file name
     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_BALOO
     m_fileMetaDataWidget = new KFileMetaDataWidget(this);
+    connect(m_fileMetaDataWidget, &KFileMetaDataWidget::metaDataRequestFinished,
+            this, &FileMetaDataToolTip::metaDataRequestFinished);
+#else
+    m_fileMetaDataWidget = new Baloo::FileMetaDataWidget(this);
+    connect(m_fileMetaDataWidget, &Baloo::FileMetaDataWidget::metaDataRequestFinished,
+            this, &FileMetaDataToolTip::metaDataRequestFinished);
+#endif
     m_fileMetaDataWidget->setForegroundRole(QPalette::ToolTipText);
     m_fileMetaDataWidget->setReadOnly(true);
-    connect(m_fileMetaDataWidget, SIGNAL(metaDataRequestFinished(KFileItemList)),
-            this, SIGNAL(metaDataRequestFinished(KFileItemList)));
 
     QVBoxLayout* textLayout = new QVBoxLayout();
     textLayout->addWidget(m_name);
@@ -98,7 +114,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.midRef(line.textStart(), line.textLength());
+
+        line = textLayout.createLine();
+        if (line.isValid()) {
+            wrappedText += QChar::LineSeparator;
+        }
+    }
+    textLayout.endLayout();
+
+    m_name->setText(wrappedText);
 }
 
 QString FileMetaDataToolTip::name() const
@@ -116,21 +158,3 @@ KFileItemList FileMetaDataToolTip::items() const
     return m_fileMetaDataWidget->items();
 }
 
-void FileMetaDataToolTip::paintEvent(QPaintEvent* event)
-{
-    QStylePainter painter(this);
-    QStyleOptionFrame option;
-    option.init(this);
-    painter.drawPrimitive(QStyle::PE_PanelTipLabel, option);
-    painter.end();
-
-    QWidget::paintEvent(event);
-}
-
-void FileMetaDataToolTip::showEvent(QShowEvent *)
-{
-    Plasma::WindowEffects::overrideShadow(winId(), true);
-    Plasma::WindowEffects::enableBlurBehind(winId(), true, mask());
-}
-
-#include "filemetadatatooltip.moc"