diff options
author | Arno <am@disconnect.de> | 2011-02-05 14:52:14 +0100 |
---|---|---|
committer | Arno <am@disconnect.de> | 2011-02-05 14:52:14 +0100 |
commit | 1cba003449f2c875b3be81a9f7c5835b183e78c8 (patch) | |
tree | c2c2ec7ddab0a6adf15bb3c245c8e49a68158aae | |
parent | aaef34e66368a2803ae876d734809b69f0c258a2 (diff) | |
download | SheMov-1cba003449f2c875b3be81a9f7c5835b183e78c8.tar.gz SheMov-1cba003449f2c875b3be81a9f7c5835b183e78c8.tar.bz2 SheMov-1cba003449f2c875b3be81a9f7c5835b183e78c8.zip |
Show metadata when hovering
Also show metadata in snapshot when hovering over a movie file.
-rw-r--r-- | filestreewidget.cpp | 68 | ||||
-rw-r--r-- | filestreewidget.h | 4 |
2 files changed, 56 insertions, 16 deletions
diff --git a/filestreewidget.cpp b/filestreewidget.cpp index c4604fb..0d8ae1f 100644 --- a/filestreewidget.cpp +++ b/filestreewidget.cpp @@ -30,6 +30,7 @@ #include <QBrush> #include <QColor> #include <QPen> +#include <QDate> #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<FilesTreeModel*>(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<SeriesTreeModel*>(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<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\">")); + QString retval = 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())); + retval.append(QString(tr("<p style=\"margin-bottom: 0px; padding-bottom: 0px\">Files:</p>"))); + retval.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())); + retval.append(QString("<li style=\"margin-left: -10px\">%1</li>").arg(it.key())); ++it; } - data.append(tr("</ul>")); + retval.append(tr("</ul>")); + return retval; +} + +const QString FilesTreeView::metaDataText(const QModelIndex &idx) const{ + if(!idx.isValid()){ + return QString(); + } + SeriesMetadataModel *metaDataModel = qobject_cast<SeriesMetadataModel*>(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<QVariant> metaData = metaDataModel->dataList(mdIdx); + QString retval("<p style=\"text-decoration: underline; font-weight: bold; margin-bottom: 10px\">Metadata</p><p style=\"margin-left: 20px\"><table>"); + retval.append(QString(tr("<tr><td style=\"padding-right: 20px\"><span style=\"font-style: italic;\">Release Year</span></td><td>%1</td></tr>")).arg(QString::number(metaData.at(SeriesMetadataModel::ReleaseYear).toInt()))); + retval.append(QString(tr("<tr><td style=\"padding-right: 20px\"><span style=\"font-style: italic;\">Encoding Passes</span></td><td>%1</td></tr>")).arg(QString::number(metaData.at(SeriesMetadataModel::Passes).toInt()))); + retval.append(QString(tr("<tr><td style=\"padding-right: 20px\"><span style=\"font-style: italic;\">Release Group</span></td><td>%1</td></tr>")).arg(metaData.at(SeriesMetadataModel::ReleaseGroup).toString())); + retval.append(QString(tr("<tr><td style=\"padding-right: 20px\"><span style=\"font-style: italic;\">Source Medium</span></td><td>%1</td></tr>")).arg(metaData.at(SeriesMetadataModel::SourceMedium).toString())); + retval.append(QString(tr("<tr><td style=\"padding-right: 20px\"><span style=\"font-style: italic;\">Usenet Subject</span></td><td>%1</td></tr>")).arg(metaData.at(SeriesMetadataModel::Subject).toString())); + retval.append(QString(tr("<tr><td style=\"padding-right: 20px\"><span style=\"font-style: italic;\">Encoder Options</span></td><td>%1</td></tr>")).arg(metaData.at(SeriesMetadataModel::EncoderOpts).toString())); + QDate dateAdded = metaData.at(SeriesMetadataModel::Added).toDate(); + retval.append(QString(tr("<tr><td style=\"padding-right: 20px\"><span style=\"font-style: italic;\">Added</span></td><td>%1</td></tr>")).arg(dateAdded.toString(Qt::ISODate))); + retval.append(QString(tr("<tr><td style=\"padding-right: 20px\"><span style=\"font-style: italic;\">Comment</span></td><td>%1</td></tr>")).arg(metaData.at(SeriesMetadataModel::Comment).toString())); + retval.append("</table></p>"); + 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() !!!! diff --git a/filestreewidget.h b/filestreewidget.h index 86b6a15..5b064b9 100644 --- a/filestreewidget.h +++ b/filestreewidget.h @@ -76,7 +76,9 @@ class FilesTreeView : public QTreeView { private: bool exitHover(bool exitVal = true); void doHover(const QModelIndex &idx); - const QPixmap annotateHover(const QPixmap &hoverImage, const QModelIndex &idx) const; + const QString fileNameText(const QModelIndex &idx) const; + const QString metaDataText(const QModelIndex &idx) const; + const QPixmap annotateHover(const QPixmap &hoverImage, const QString &text) const; QModelIndex mCurHover; HoverWindow *mHoverWin; bool mHoverPics; |