summaryrefslogtreecommitdiffstats
path: root/filestreewidget.cpp
diff options
context:
space:
mode:
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() !!!!