From 1cba003449f2c875b3be81a9f7c5835b183e78c8 Mon Sep 17 00:00:00 2001 From: Arno Date: Sat, 5 Feb 2011 14:52:14 +0100 Subject: Show metadata when hovering Also show metadata in snapshot when hovering over a movie file. --- filestreewidget.cpp | 68 +++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 53 insertions(+), 15 deletions(-) (limited to 'filestreewidget.cpp') diff --git a/filestreewidget.cpp b/filestreewidget.cpp index c4604fb..0d8ae1f 100644 --- a/filestreewidget.cpp +++ b/filestreewidget.cpp @@ -30,6 +30,7 @@ #include #include #include +#include #include "filestreewidget.h" #include "smglobals.h" @@ -40,6 +41,7 @@ #include "filepropertiesdialog.h" #include "hoverwindow.h" #include "seriestreemodel.h" +#include "seriesmetadatamodel.h" FilesTreeWidget::FilesTreeWidget(QWidget *parent) : QWidget(parent), mSelectedSize(0){ //the view @@ -422,9 +424,14 @@ void FilesTreeView::doHover(const QModelIndex &idx){ scale = false; FilesTreeModel *filesModel = qobject_cast(SmGlobals::instance()->model("FilesModel")); if(filesModel->mode() == FilesTreeModel::Local){ - pm = annotateHover(pm, idx); - scale = false; + QString filesData = fileNameText(idx); + pm = annotateHover(pm, filesData); } + QString metaData = metaDataText(idx); + if(!metaData.isEmpty()){ + pm = annotateHover(pm, metaData); + } + scale = false; }else{ if(!pm.load(idx.data(FilesTreeModel::FullPathRole).toString())){ return; @@ -436,33 +443,63 @@ void FilesTreeView::doHover(const QModelIndex &idx){ mHoverWin->setVisible(true); } -const QPixmap FilesTreeView::annotateHover(const QPixmap &hoverImage, const QModelIndex &idx) const{ +const QString FilesTreeView::fileNameText(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; + return QString(); } QModelIndex seriesIdx = seriesModel->findValue(seriesId, QModelIndex(), SeriesTreeModel::SeriesId); if(!seriesIdx.isValid()){ - return hoverImage; + return QString(); } 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("
    ")); + QString retval = QString(tr("

    %1 %2

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

    Files:

    "))); + retval.append(tr("
      ")); QHash::const_iterator it = files.constBegin(); while(it != files.constEnd()){ - data.append(QString("
    • %1
    • ").arg(it.key())); + retval.append(QString("
    • %1
    • ").arg(it.key())); ++it; } - data.append(tr("
    ")); + retval.append(tr("
")); + return retval; +} + +const QString FilesTreeView::metaDataText(const QModelIndex &idx) const{ + if(!idx.isValid()){ + return QString(); + } + SeriesMetadataModel *metaDataModel = qobject_cast(SmGlobals::instance()->model("SeriesMetadata")); + int seriesPartId = idx.data(FilesTreeModel::SeriesPartIdRole).toInt(); + if(!metaDataModel->hasRecord(seriesPartId)){ + return QString(); + } + metaDataModel->populate(seriesPartId); + QModelIndex mdIdx = metaDataModel->index(0, 0, QModelIndex()); + QList metaData = metaDataModel->dataList(mdIdx); + QString retval("

Metadata

"); + retval.append(QString(tr("")).arg(QString::number(metaData.at(SeriesMetadataModel::ReleaseYear).toInt()))); + retval.append(QString(tr("")).arg(QString::number(metaData.at(SeriesMetadataModel::Passes).toInt()))); + retval.append(QString(tr("")).arg(metaData.at(SeriesMetadataModel::ReleaseGroup).toString())); + retval.append(QString(tr("")).arg(metaData.at(SeriesMetadataModel::SourceMedium).toString())); + retval.append(QString(tr("")).arg(metaData.at(SeriesMetadataModel::Subject).toString())); + retval.append(QString(tr("")).arg(metaData.at(SeriesMetadataModel::EncoderOpts).toString())); + QDate dateAdded = metaData.at(SeriesMetadataModel::Added).toDate(); + retval.append(QString(tr("")).arg(dateAdded.toString(Qt::ISODate))); + retval.append(QString(tr("")).arg(metaData.at(SeriesMetadataModel::Comment).toString())); + retval.append("
Release Year%1
Encoding Passes%1
Release Group%1
Source Medium%1
Usenet Subject%1
Encoder Options%1
Added%1
Comment%1

"); + return retval; +} + +const QPixmap FilesTreeView::annotateHover(const QPixmap &hoverImage, const QString &text) const{ QTextDocument doc; - doc.setHtml(data); + doc.setHtml(text); doc.setTextWidth(hoverImage.width()); - QSize picSize(hoverImage.width(), hoverImage.height() + doc.size().height()); - QImage retImg(picSize, QImage::Format_ARGB32_Premultiplied); + QSize newPicSize(hoverImage.width(), hoverImage.height() + doc.size().height()); + QImage retImg(newPicSize, QImage::Format_ARGB32_Premultiplied); retImg.fill(0); QPainter p(&retImg); p.drawPixmap(0, 0, hoverImage); @@ -473,14 +510,15 @@ const QPixmap FilesTreeView::annotateHover(const QPixmap &hoverImage, const QMod QBrush brush(bgColor); p.setPen(QPen(Qt::NoPen)); p.setBrush(brush); - QRect bgRect(0, hoverImage.height(), hoverImage.width(), doc.size().height()); - p.drawRect(bgRect); + QRect annotateRect(0, hoverImage.height(), hoverImage.width(), doc.size().height()); + p.drawRect(annotateRect); 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