/* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. */ #include #include #include #include #include #include #include #include #include #include #include #include "archivefilewidget.h" #include "moviemodel.h" #include "listmodel.h" #include "helper.h" ArchiveFileWidget::ArchiveFileWidget(MovieModel *model, QWidget *parent, Qt::WindowFlags f) : QWidget(parent, f) , mModel(model){ QVBoxLayout *mainLayout = new QVBoxLayout; //selected files QLabel *l1 = new QLabel(tr("Selected files:")); mFiles = new QTextEdit; mFiles->setReadOnly(true); mFiles->setFont(QFont("Courier new")); mFiles->setTextColor(QColor(Qt::red)); mainLayout->addWidget(l1); mainLayout->addWidget(mFiles); //genre combobox QHBoxLayout *genreLayout = new QHBoxLayout; QLabel *l2 = new QLabel(tr("Select genre")); mGenre = new QComboBox; genreLayout->addWidget(l2); genreLayout->addWidget(mGenre); mainLayout->addLayout(genreLayout); //actors combobox QHBoxLayout *actorsLayout = new QHBoxLayout; QLabel *l3 = new QLabel(tr("Select actors")); mActors = new QComboBox; actorsLayout->addWidget(l3); actorsLayout->addWidget(mActors); mainLayout->addLayout(actorsLayout); //selected actors mSelectedActors = new QTextEdit; mSelectedActors->setReadOnly(true); mSelectedActors->setFont(QFont("Courier new")); mSelectedActors->setTextColor(QColor(Qt::red)); mainLayout->addWidget(mSelectedActors); //actors buttons QHBoxLayout *actorButtonLayout = new QHBoxLayout; mAddActor = new QPushButton(tr("&Add actor")); connect(mAddActor, SIGNAL(clicked()), this, SLOT(addActor())); mRemoveActor = new QPushButton(tr("&Remove actor")); connect(mRemoveActor, SIGNAL(clicked()), this, SLOT(removeActor())); actorButtonLayout->addStretch(); actorButtonLayout->addWidget(mAddActor); actorButtonLayout->addWidget(mRemoveActor); mainLayout->addLayout(actorButtonLayout); //quality and movie title QHBoxLayout *qualityTitleLayout = new QHBoxLayout; QLabel *l4 = new QLabel(tr("Select quality")); mQuality = new QSpinBox; mQuality->setMinimum(0); mQuality->setMaximum(10); QLabel *l5 = new QLabel(tr("Set movie title")); mTitle = new QLineEdit; qualityTitleLayout->addWidget(l4); qualityTitleLayout->addWidget(mQuality); qualityTitleLayout->addWidget(l5); qualityTitleLayout->addWidget(mTitle); mainLayout->addLayout(qualityTitleLayout); //series number and part number QHBoxLayout *numbersLayout = new QHBoxLayout; QLabel *l6 = new QLabel(tr("Select &series number")); mSeriesNo = new QSpinBox; mSeriesNo->setMinimum(-1); mSeriesNo->setMaximum(1000); mSeriesNo->setValue(-1); l6->setBuddy(mSeriesNo); QLabel *l7 = new QLabel(tr("Select &part number")); mPartNo = new QSpinBox; mPartNo->setMinimum(-1); mPartNo->setMaximum(100); mPartNo->setValue(-1); l7->setBuddy(mPartNo); numbersLayout->addWidget(l6); numbersLayout->addWidget(mSeriesNo); numbersLayout->addWidget(l7); numbersLayout->addWidget(mPartNo); numbersLayout->addStretch(); mainLayout->addLayout(numbersLayout); setLayout(mainLayout); setMinimumWidth(600); } void ArchiveFileWidget::setMovieModel(MovieModel *model){ mModel = model; } void ArchiveFileWidget::setGenreModel(ListModel *model){ mGenreModel = model; mGenre->setModel(mGenreModel); } void ArchiveFileWidget::setActorsModel(ListModel *model){ mActorsModel = model; mActors->setModel(mActorsModel); } void ArchiveFileWidget::setFiles(const QStringList &files){ mFileList = files; mFiles->clear(); mMd5Sums.clear(); mActorIdMap.clear(); QString html(""); QLocale l; foreach(QString f, files){ QFileInfo info(f); qint64 size = info.size(); QString md5 = Helper::md5Sum(f); QString filename = info.fileName(); QString mimeType = Helper::mimeType(f); QString row = QString("").arg(filename).arg(l.toString(size)).arg(md5).arg(mimeType); html.append(row); mMd5Sums.insert(f, md5); } html.append("
FilenameSizeMD5-SumMime type
%1%2%3%4
"); mFiles->setHtml(html); mSelectedActors->clear(); mTitle->clear(); } const QList ArchiveFileWidget::actorIds() const{ QHash::const_iterator i = mActorIdMap.constBegin(); QList retval; while(i != mActorIdMap.constEnd()){ retval << i.value(); ++i; } return retval; } int ArchiveFileWidget::genreId() const{ QString selectedGenre = mGenre->currentText(); QModelIndex idx = mGenreModel->index(selectedGenre); int retval(-1); if(idx.isValid()){ retval = mGenreModel->data(idx, ListModel::IdRole).toInt(); }else{ qDebug() << "genreId: invalid"; } return retval; } void ArchiveFileWidget::setActor(const QString &actor){ int idx = mActors->findText(actor); if(idx != -1){ mActors->setCurrentIndex(idx); addActor(); } } void ArchiveFileWidget::addActor(){ QString selectedActor = mActors->currentText(); if(!selectedActor.isEmpty() && !mActorIdMap.contains(selectedActor)){ QModelIndex idx = mActorsModel->index(selectedActor); if(idx.isValid()){ int id = mActorsModel->data(idx, ListModel::IdRole).toInt(); mActorIdMap.insert(selectedActor, id); createActorList(); QString message = QString(tr("Added actor %1 to actor list")).arg(selectedActor); emit statusbarMessage(message); }else{ qDebug() << "addActor: invalid!"; } } } void ArchiveFileWidget::removeActor(){ QString selectedActor = mActors->currentText(); if(!selectedActor.isEmpty()){ mActorIdMap.remove(selectedActor); createActorList(); QString message = QString(tr("Removed actor %1 from actor list")).arg(selectedActor); emit statusbarMessage(message); } } void ArchiveFileWidget::createActorList(){ mSelectedActors->clear(); QString html("
    "); mSelectedActors->append("
      "); QHash::const_iterator i = mActorIdMap.constBegin(); while(i != mActorIdMap.constEnd()){ QString s = QString("
    • %1
    • ").arg(i.key()); html.append(s); ++i; } html.append("
    "); mSelectedActors->setHtml(html); }