diff options
author | Arno <am@disconnect.de> | 2010-12-12 11:36:42 +0100 |
---|---|---|
committer | Arno <am@disconnect.de> | 2010-12-12 11:36:42 +0100 |
commit | ce8ea0df0dd34e516bfad507c4dfb3735ecdf82b (patch) | |
tree | 83491df938f694d394890077b8cea1dc2b748837 /filestreewidget.cpp | |
parent | f2a3027188423719fcde96dd5975646b7122e268 (diff) | |
download | SheMov-ce8ea0df0dd34e516bfad507c4dfb3735ecdf82b.tar.gz SheMov-ce8ea0df0dd34e516bfad507c4dfb3735ecdf82b.tar.bz2 SheMov-ce8ea0df0dd34e516bfad507c4dfb3735ecdf82b.zip |
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.
Diffstat (limited to 'filestreewidget.cpp')
-rw-r--r-- | filestreewidget.cpp | 62 |
1 files changed, 61 insertions, 1 deletions
diff --git a/filestreewidget.cpp b/filestreewidget.cpp index 9076091..bc60541 100644 --- a/filestreewidget.cpp +++ b/filestreewidget.cpp @@ -23,6 +23,13 @@ #include <QSettings> #include <QHeaderView> #include <QInputDialog> +#include <QPainter> +#include <QTextDocument> +#include <QImage> +#include <QHash> +#include <QBrush> +#include <QColor> +#include <QPen> #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<FilesTreeModel*>(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<SeriesTreeModel*>(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<FilesTreeModel*>(SmGlobals::instance()->model("FilesModel")); + QHash<QString, QString> files = filesModel->filesBySeriesPartId(idx.data(FilesTreeModel::SeriesPartIdRole).toInt()); + QModelIndex seriesPartIdx = seriesModel->findValue(idx.data(FilesTreeModel::SeriesPartIdRole), seriesIdx, SeriesTreeModel::SeriesPartId); + QString data = QString(tr("<p style=\"text-decoration: underline; font-weight: bold\">%1 %2</p>")).arg(seriesPartIdx.data(SeriesTreeModel::NameRole).toString()).arg(QString::number(seriesPartIdx.data(SeriesTreeModel::SeriesPartRole).toInt())); + data.append(QString(tr("<p style=\"margin-bottom: 0px; padding-bottom: 0px\">Files:</p>"))); + data.append(tr("<ul style=\"margin-top: 0px\">")); + QHash<QString, QString>::const_iterator it = files.constBegin(); + while(it != files.constEnd()){ + data.append(QString("<li style=\"margin-left: -10px\">%1</li>").arg(it.key())); + ++it; + } + data.append(tr("</ul>")); + 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() !!!! |