diff options
author | Arno <am@disconnect.de> | 2010-12-13 19:31:16 +0100 |
---|---|---|
committer | Arno <am@disconnect.de> | 2010-12-13 19:31:16 +0100 |
commit | c7bffca4cfc626c62c0eae6bc6b06d92cb2a8340 (patch) | |
tree | dcc9a9b47f05690052896d5747018ee087b5437e | |
parent | 0336e3e0e2eb02f9ad8925f1def081d6e46d750b (diff) | |
download | SheMov-c7bffca4cfc626c62c0eae6bc6b06d92cb2a8340.tar.gz SheMov-c7bffca4cfc626c62c0eae6bc6b06d92cb2a8340.tar.bz2 SheMov-c7bffca4cfc626c62c0eae6bc6b06d92cb2a8340.zip |
Set caption for HoverWindow
Implement a caption for HoverWindow. Used to show the filename when
hovering.
-rw-r--r-- | filestreewidget.cpp | 1 | ||||
-rw-r--r-- | hoverwindow.cpp | 30 | ||||
-rw-r--r-- | hoverwindow.h | 1 |
3 files changed, 32 insertions, 0 deletions
diff --git a/filestreewidget.cpp b/filestreewidget.cpp index bc60541..b6189c5 100644 --- a/filestreewidget.cpp +++ b/filestreewidget.cpp @@ -424,6 +424,7 @@ void FilesTreeView::doHover(const QModelIndex &idx){ } } mHoverWin->setPixmap(pm, scale); + mHoverWin->setCaption(idx.data(FilesTreeModel::FileNameRole).toString()); mHoverWin->setPos(); mHoverWin->setVisible(true); } diff --git a/hoverwindow.cpp b/hoverwindow.cpp index e9fcc64..b478879 100644 --- a/hoverwindow.cpp +++ b/hoverwindow.cpp @@ -12,6 +12,14 @@ #include <QSize> #include <QTextDocument> #include <QSettings> +#include <QPixmap> +#include <QImage> +#include <QPainter> +#include <QFontMetrics> +#include <QBrush> +#include <QPen> +#include <QColor> +#include <QApplication> #include "hoverwindow.h" #include "smglobals.h" @@ -89,6 +97,28 @@ void HoverWindow::setData(const QList<QVariant> &data){ setContent(data.at(0).toString(), dataList); } +void HoverWindow::setCaption(const QString &caption){ + const QPixmap *pm = mLabel->pixmap(); + if(!pm){ + return; + } + QFontMetrics fm = qApp->fontMetrics(); + QString elidedCap = fm.elidedText(caption, Qt::ElideMiddle, pm->size().width() - 18, Qt::TextSingleLine); + QSize captionSize = fm.size(Qt::TextSingleLine, elidedCap); + QImage img = pm->toImage(); + QPainter *p = new QPainter(&img); + QColor bgColor(Qt::white); + p->setBrush(QBrush(bgColor)); + p->setPen(Qt::NoPen); + qreal xStart = (pm->size().width() - captionSize.width()) / 2.0; + QRectF bgRect(xStart, 5, captionSize.width() + 6, captionSize.height()); + p->drawRect(bgRect); + p->setPen(Qt::black); + p->drawText(bgRect.topLeft().x() + 3, bgRect.topLeft().y() + fm.ascent(), elidedCap); + delete p; + mLabel->setPixmap(QPixmap::fromImage(img)); +} + int HoverWindow::pixmapHeight() const{ const QPixmap *pm = mLabel->pixmap(); return pm ? pm->height() : 0; diff --git a/hoverwindow.h b/hoverwindow.h index af2f084..6e94a3e 100644 --- a/hoverwindow.h +++ b/hoverwindow.h @@ -23,6 +23,7 @@ class HoverWindow : public QWidget { void setContent(const QString &parent, const QStringList &children); void setPixmap(const QPixmap &pm, bool scale = true); void setData(const QList<QVariant> &data); + void setCaption(const QString &caption); int pixmapHeight() const; void setPos(); QPoint hoverOffset() const { return mHoverOffset; } |