/***************************************************************************
* Copyright (C) 2010 by Peter Penz <peter.penz19@gmail.com> *
* Copyright (C) 2008 by Fredrik Höglund <fredrik@kde.org> *
+ * Copyright (C) 2012 by Mark Gaiser <markg85@gmail.com> *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
#include "filemetadatatooltip.h"
#include <KColorScheme>
-#include <kfilemetadatawidget.h>
#include <KSeparator>
#include <KWindowSystem>
+#include <KStringHandler>
#include <QLabel>
-#include <QPainter>
+#include <QStyleOptionFrame>
+#include <QStylePainter>
#include <QVBoxLayout>
+#include <QTextDocument>
+#include <QTextLayout>
+#include <QTextLine>
+
+#ifndef HAVE_BALOO
+#include <KFileMetaDataWidget>
+#else
+#include <baloo/filemetadatawidget.h>
+#endif
+
+// For the blurred tooltip background
+#include <plasma/windoweffects.h>
FileMetaDataToolTip::FileMetaDataToolTip(QWidget* parent) :
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
- m_fileMetaDataWidget = new KFileMetaDataWidget();
+#ifndef HAVE_BALOO
+ m_fileMetaDataWidget = new KFileMetaDataWidget(this);
+#else
+ m_fileMetaDataWidget = new Baloo::FileMetaDataWidget(this);
+#endif
m_fileMetaDataWidget->setForegroundRole(QPalette::ToolTipText);
m_fileMetaDataWidget->setReadOnly(true);
connect(m_fileMetaDataWidget, SIGNAL(metaDataRequestFinished(KFileItemList)),
QPixmap FileMetaDataToolTip::preview() const
{
- if (m_preview->pixmap() != 0) {
+ if (m_preview->pixmap()) {
return *m_preview->pixmap();
}
return QPixmap();
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
void FileMetaDataToolTip::paintEvent(QPaintEvent* event)
{
- Q_UNUSED(event);
-
- QPainter painter(this);
+ QStylePainter painter(this);
+ QStyleOptionFrame option;
+ option.init(this);
+ painter.drawPrimitive(QStyle::PE_PanelTipLabel, option);
+ painter.end();
- QColor toColor = palette().brush(QPalette::ToolTipBase).color();
- QColor fromColor = KColorScheme::shade(toColor, KColorScheme::LightShade, 0.2);
-
- const bool haveAlphaChannel = KWindowSystem::compositingActive();
- if (haveAlphaChannel) {
- painter.setRenderHint(QPainter::Antialiasing);
- painter.translate(0.5, 0.5);
- toColor.setAlpha(220);
- fromColor.setAlpha(220);
- }
-
- QLinearGradient gradient(QPointF(0.0, 0.0), QPointF(0.0, height()));
- gradient.setColorAt(0.0, fromColor);
- gradient.setColorAt(1.0, toColor);
- painter.setPen(Qt::NoPen);
- painter.setBrush(gradient);
-
- const QRect rect(0, 0, width(), height());
- if (haveAlphaChannel) {
- const qreal radius = 5.0;
-
- QPainterPath path;
- path.moveTo(rect.left(), rect.top() + radius);
- arc(path, rect.left() + radius, rect.top() + radius, radius, 180, -90);
- arc(path, rect.right() - radius, rect.top() + radius, radius, 90, -90);
- arc(path, rect.right() - radius, rect.bottom() - radius, radius, 0, -90);
- arc(path, rect.left() + radius, rect.bottom() - radius, radius, 270, -90);
- path.closeSubpath();
-
- painter.drawPath(path);
- } else {
- painter.drawRect(rect);
- }
+ QWidget::paintEvent(event);
}
-void FileMetaDataToolTip::arc(QPainterPath& path,
- qreal cx, qreal cy,
- qreal radius, qreal angle,
- qreal sweepLength)
+void FileMetaDataToolTip::showEvent(QShowEvent *)
{
- path.arcTo(cx-radius, cy-radius, radius * 2, radius * 2, angle, sweepLength);
+ Plasma::WindowEffects::overrideShadow(winId(), true);
+ Plasma::WindowEffects::enableBlurBehind(winId(), true, mask());
}
#include "filemetadatatooltip.moc"