From ce8ea0df0dd34e516bfad507c4dfb3735ecdf82b Mon Sep 17 00:00:00 2001 From: Arno Date: Sun, 12 Dec 2010 11:36:42 +0100 Subject: Hover fix When hovering over movies in local mode both the ToolTip and the hover image was shown. Fixed by only showing the ToolTip when the movie is not available, eg. archive mode. In any other case incorporate the ToolTip info into the hover image. --- filestreewidget.cpp | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) (limited to 'filestreewidget.cpp') diff --git a/filestreewidget.cpp b/filestreewidget.cpp index 9076091..bc60541 100644 --- a/filestreewidget.cpp +++ b/filestreewidget.cpp @@ -23,6 +23,13 @@ #include #include #include +#include +#include +#include +#include +#include +#include +#include #include "filestreewidget.h" #include "smglobals.h" @@ -32,6 +39,7 @@ #include "pictureviewer.h" #include "filepropertiesdialog.h" #include "hoverwindow.h" +#include "seriestreemodel.h" FilesTreeWidget::FilesTreeWidget(QWidget *parent) : QWidget(parent), mSelectedSize(0){ //the view @@ -397,22 +405,74 @@ bool FilesTreeView::exitHover(bool exitVal){ void FilesTreeView::doHover(const QModelIndex &idx){ QPixmap pm; + bool scale = true; mCurHover = idx; if(idx.data(FilesTreeModel::FileTypeRole).toInt() == FilesTreeModel::Movie){ pm = Helper::grabFrame(idx.data(FilesTreeModel::FullPathRole).toString()); if(pm.isNull()){ return; } + scale = false; + FilesTreeModel *filesModel = qobject_cast(SmGlobals::instance()->model("FilesModel")); + if(filesModel->mode() == FilesTreeModel::Local){ + pm = annotateHover(pm, idx); + scale = false; + } }else{ if(!pm.load(idx.data(FilesTreeModel::FullPathRole).toString())){ return; } } - mHoverWin->setPixmap(pm); + mHoverWin->setPixmap(pm, scale); mHoverWin->setPos(); mHoverWin->setVisible(true); } +const QPixmap FilesTreeView::annotateHover(const QPixmap &hoverImage, const QModelIndex &idx) const{ + SeriesTreeModel *seriesModel = qobject_cast(SmGlobals::instance()->model("SeriesModel")); + int seriesId = seriesModel->seriesIdByPartId(idx.data(FilesTreeModel::SeriesPartIdRole).toInt()); + if(seriesId == -1){ + return hoverImage; + } + QModelIndex seriesIdx = seriesModel->findValue(seriesId, QModelIndex(), SeriesTreeModel::SeriesId); + if(!seriesIdx.isValid()){ + return hoverImage; + } + FilesTreeModel *filesModel = qobject_cast(SmGlobals::instance()->model("FilesModel")); + QHash files = filesModel->filesBySeriesPartId(idx.data(FilesTreeModel::SeriesPartIdRole).toInt()); + QModelIndex seriesPartIdx = seriesModel->findValue(idx.data(FilesTreeModel::SeriesPartIdRole), seriesIdx, SeriesTreeModel::SeriesPartId); + QString data = QString(tr("

%1 %2

")).arg(seriesPartIdx.data(SeriesTreeModel::NameRole).toString()).arg(QString::number(seriesPartIdx.data(SeriesTreeModel::SeriesPartRole).toInt())); + data.append(QString(tr("

Files:

"))); + data.append(tr("
    ")); + QHash::const_iterator it = files.constBegin(); + while(it != files.constEnd()){ + data.append(QString("
  • %1
  • ").arg(it.key())); + ++it; + } + data.append(tr("
")); + QTextDocument doc; + doc.setHtml(data); + doc.setTextWidth(hoverImage.width()); + QSize picSize(hoverImage.width(), hoverImage.height() + doc.size().height()); + QImage retImg(picSize, QImage::Format_ARGB32_Premultiplied); + retImg.fill(0); + QPainter p(&retImg); + p.drawPixmap(0, 0, hoverImage); + p.setRenderHint(QPainter::Antialiasing, false); + p.setRenderHint(QPainter::TextAntialiasing, true); + QColor bgColor(Qt::white); + bgColor.setAlpha(70); + QBrush brush(bgColor); + p.setPen(QPen(Qt::NoPen)); + p.setBrush(brush); + QRect bgRect(0, hoverImage.height(), hoverImage.width(), doc.size().height()); + p.drawRect(bgRect); + p.setPen(QPen(Qt::black)); + p.translate(0, hoverImage.height()); + doc.drawContents(&p); + return QPixmap::fromImage(retImg); +} + FilesTreeSortModel::FilesTreeSortModel(QObject *parent) : QSortFilterProxyModel(parent) {} // left + right are from the sourceModel() !!!! -- cgit v1.2.3-70-g09d2