summaryrefslogtreecommitdiffstats
path: root/filestreewidget.cpp
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2010-12-12 11:36:42 +0100
committerArno <am@disconnect.de>2010-12-12 11:36:42 +0100
commitce8ea0df0dd34e516bfad507c4dfb3735ecdf82b (patch)
tree83491df938f694d394890077b8cea1dc2b748837 /filestreewidget.cpp
parentf2a3027188423719fcde96dd5975646b7122e268 (diff)
downloadSheMov-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.cpp62
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() !!!!