diff options
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() !!!! |