From ef93566e66f5c9d52de72e654d4a7dff576f3c42 Mon Sep 17 00:00:00 2001 From: Arno Date: Sun, 20 Feb 2011 10:35:19 +0100 Subject: Show metadata in ArchiveView Added a widget to display metadata beside actors and genres when available --- archivetreeview.cpp | 4 ++++ archivetreeview.h | 2 ++ helper.cpp | 6 ++++++ helper.h | 1 + seriesmetadatamodel.cpp | 55 +++++++++++++++++++++++++++++++++++++++++++++++++ seriesmetadatamodel.h | 16 ++++++++++++++ 6 files changed, 84 insertions(+) diff --git a/archivetreeview.cpp b/archivetreeview.cpp index 3e9e783..b2ba254 100644 --- a/archivetreeview.cpp +++ b/archivetreeview.cpp @@ -43,6 +43,7 @@ #include "seriestreemodel.h" #include "mappingtablewidget.h" #include "mappingtablemodel.h" +#include "seriesmetadatamodel.h" #include "helper.h" ArchiveTreeView::ArchiveTreeView(QWidget *parent) : QWidget(parent){ @@ -67,8 +68,10 @@ ArchiveTreeView::ArchiveTreeView(QWidget *parent) : QWidget(parent){ QHBoxLayout *genreActorLayout = new QHBoxLayout; mActorsWidget = new MappingTableWidget("actors"); mGenresWidget = new MappingTableWidget("genres"); + mMetaData = new MetadataDisplay; genreActorLayout->addWidget(mActorsWidget); genreActorLayout->addWidget(mGenresWidget); + genreActorLayout->addWidget(mMetaData); genreActorWidget->setLayout(genreActorLayout); // fileview, actors and genres @@ -253,6 +256,7 @@ void ArchiveTreeView::currentChanged(const QItemSelection &selected, const QItem mFilesWidget->filesTree()->header()->resizeSections(QHeaderView::ResizeToContents); setMappingItems(selectedPartIds, mActorsModel, mActorsWidget); setMappingItems(selectedPartIds, mGenresModel, mGenresWidget); + mMetaData->setSeriesPartId(selectedPartIds.at(0)); } void ArchiveTreeView::setMappingItems(QListseriesPartIds, MappingTableModel *model, MappingTableWidget *widget){ diff --git a/archivetreeview.h b/archivetreeview.h index ad1d3f1..342e3c4 100644 --- a/archivetreeview.h +++ b/archivetreeview.h @@ -24,6 +24,7 @@ class SeriesTreeModel; class MappingTableWidget; class MappingTableModel; class NoCoverMovieDialog; +class MetadataDisplay; class QItemSelection; class QSqlQuery; class QPushButton; @@ -67,6 +68,7 @@ class ArchiveTreeView : public QWidget FilesTreeWidget *mFilesWidget; MappingTableWidget *mActorsWidget; MappingTableWidget *mGenresWidget; + MetadataDisplay *mMetaData; //models FilesTreeModel *mFilesModel; diff --git a/helper.cpp b/helper.cpp index 8a2e99a..247baca 100644 --- a/helper.cpp +++ b/helper.cpp @@ -188,6 +188,12 @@ namespace Helper { return retval; } + const QString colorToHtml(const QColor &color){ + char colString[7]; + ::snprintf(colString, 7, "%0x%0x%0x", color.red(), color.green(), color.blue()); + return QString::fromAscii(colString); + } + bool SortFileInfoList::operator ()(const QFileInfo &lhs, const QFileInfo &rhs) const { return lhs.fileName().toLower() < rhs.fileName().toLower(); } diff --git a/helper.h b/helper.h index 0ca967d..e6802eb 100644 --- a/helper.h +++ b/helper.h @@ -28,6 +28,7 @@ namespace Helper { const QString durationFromSecs(qint64 secs); QVariant bytesFromUnit(QVariant number, const QString unit); const QStringList toStringList(const QList &list); + const QString colorToHtml(const QColor &color); class SortFileInfoList : public std::binary_function { public: bool operator()(const QFileInfo &lhs, const QFileInfo &rhs) const; diff --git a/seriesmetadatamodel.cpp b/seriesmetadatamodel.cpp index 169db9b..81845e3 100644 --- a/seriesmetadatamodel.cpp +++ b/seriesmetadatamodel.cpp @@ -15,6 +15,11 @@ #include #include #include +#include +#include +#include +#include +#include #include "seriesmetadatamodel.h" #include "smtreeitem.h" @@ -272,3 +277,53 @@ void MetadataWidget::accept(){ mModel->setData(parent, mComment->toPlainText(), row, SeriesMetadataModel::Comment); mModel->update(); } + +MetadataDisplay::MetadataDisplay(QWidget *parent) : QWidget(parent){ + //model + mModel = static_cast(SmGlobals::instance()->model("SeriesMetadata")); + + //display + QGroupBox *gb = new QGroupBox(tr("Metadata")); + QHBoxLayout *gbLayout = new QHBoxLayout; + mDisplay = new QLabel(tr("No metadata available")); + mDisplay->setAlignment(Qt::AlignTop | Qt::AlignHCenter); + mDisplay->setWordWrap(true); + QScrollArea *sa = new QScrollArea; + sa->setWidgetResizable(true); + sa->setWidget(mDisplay); + gbLayout->addWidget(sa); + gb->setLayout(gbLayout); + + //laoyut + QVBoxLayout *mainLayout = new QVBoxLayout; + mainLayout->addWidget(gb); + setLayout(mainLayout); +} + +void MetadataDisplay::setSeriesPartId(int seriesPartId){ + //setup label + model + if(mModel->hasRecord(seriesPartId)){ + mModel->populate(seriesPartId); + QSettings s; + QColor baseColor = s.value("ui/basecolor").value(); + QString baseHtml = Helper::colorToHtml(baseColor); + QColor alternateColor = s.value("ui/alternatecolor").value(); + QString alternateHtml = Helper::colorToHtml(alternateColor); + QModelIndex mdIdx = mModel->index(0, 0, QModelIndex()); + QList metaData = mModel->dataList(mdIdx); + QString text(""); + text.append(QString(tr("")).arg(baseHtml).arg(QString::number(metaData.at(SeriesMetadataModel::ReleaseYear).toInt()))); + text.append(QString(tr("")).arg(alternateHtml).arg(QString::number(metaData.at(SeriesMetadataModel::Passes).toInt()))); + text.append(QString(tr("")).arg(baseHtml).arg(metaData.at(SeriesMetadataModel::ReleaseGroup).toString())); + text.append(QString(tr("")).arg(alternateHtml).arg(metaData.at(SeriesMetadataModel::SourceMedium).toString())); + text.append(QString(tr("")).arg(baseHtml).arg(metaData.at(SeriesMetadataModel::Subject).toString())); + text.append(QString(tr("")).arg(alternateHtml).arg(metaData.at(SeriesMetadataModel::EncoderOpts).toString())); + QDate dateAdded = metaData.at(SeriesMetadataModel::Added).toDate(); + text.append(QString(tr("")).arg(baseHtml).arg(dateAdded.toString(Qt::ISODate))); + text.append(QString(tr("")).arg(alternateHtml).arg(metaData.at(SeriesMetadataModel::Comment).toString())); + text.append("
Release Year%2
Encoding Passes%2
Release Group%2
Source Medium%2
Usenet Subject%2
Encoder Options%2
Added%2
Comment%2
"); + mDisplay->setText(text); + }else{ + mDisplay->setText(tr("No metadata available")); + } +} diff --git a/seriesmetadatamodel.h b/seriesmetadatamodel.h index 06f8cc7..a6c74c3 100644 --- a/seriesmetadatamodel.h +++ b/seriesmetadatamodel.h @@ -18,6 +18,7 @@ class QComboBox; class QLineEdit; class QPlainTextEdit; class QDateEdit; +class QLabel; #include "smtreemodel.h" @@ -78,4 +79,19 @@ class MetadataWidget : public QWidget { SeriesMetadataModel *mModel; }; +class MetadataDisplay : public QWidget { + Q_OBJECT + public: + explicit MetadataDisplay(QWidget *parent = 0); + virtual ~MetadataDisplay() {} + + public slots: + void setSeriesPartId(int seriesId); + + private: + SeriesMetadataModel *mModel; + QLabel *mDisplay; + +}; + #endif // SERIESMETADATAMODEL_H -- cgit v1.2.3-70-g09d2