/* 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 #include #include #include "editarchiveitemdialog.h" #include "listmodel.h" #include "moviemodel.h" #include "listeditor.h" #include "covereditor.h" #include "coveritem.h" EditArchiveItemDialog::EditArchiveItemDialog(ListModel *genre, ListModel *actors, MovieModel *movies, QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f), mGenreModel(genre), mActorsModel(actors), mMovieModel(movies){ QWidget *w1 = new QWidget; QVBoxLayout *w1Layout = new QVBoxLayout; //movie information QLabel *l1 = new QLabel(tr("Movie information")); w1Layout->addWidget(l1); mMovieInfo = new QTextEdit; mMovieInfo->setReadOnly(true); mMovieInfo->setFont(QFont("Courier new")); w1Layout->addWidget(mMovieInfo); //actors QLabel *l2 = new QLabel(tr("Select actors")); mActors = new QComboBox; mActors->setModel(mActorsModel); QHBoxLayout *actorsLayout = new QHBoxLayout; actorsLayout->addWidget(l2); actorsLayout->addWidget(mActors); w1Layout->addLayout(actorsLayout); mActorsDisplay = new QTextEdit; mActorsDisplay->setReadOnly(true); mActorsDisplay->setFont(QFont("Courier new")); w1Layout->addWidget(mActorsDisplay); QHBoxLayout *actorButtons = 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())); actorButtons->addStretch(); actorButtons->addWidget(mAddActor); actorButtons->addWidget(mRemoveActor); w1Layout->addLayout(actorButtons); //genre QLabel *l3 = new QLabel(tr("Select genre")); mGenre = new QComboBox; mGenre->setModel(mGenreModel); QHBoxLayout *genreLayout = new QHBoxLayout; genreLayout->addWidget(l3); genreLayout->addWidget(mGenre); w1Layout->addLayout(genreLayout); //quality + dvd QLabel *l4 = new QLabel(tr("Select quality")); mQuality = new QSpinBox; mQuality->setMinimum(0); mQuality->setMaximum(10); QHBoxLayout *qualityDvdLayout = new QHBoxLayout; qualityDvdLayout->addWidget(l4); qualityDvdLayout->addWidget(mQuality); qualityDvdLayout->addStretch(); QLabel*l5 = new QLabel(tr("Select DVD No.")); mDvd = new QSpinBox; mDvd->setMinimum(-1); mDvd->setMaximum(1000); qualityDvdLayout->addWidget(l5); qualityDvdLayout->addWidget(mDvd); w1Layout->addLayout(qualityDvdLayout); //movie title QLabel *l6 = new QLabel(tr("Set movie title")); mTitle = new QLineEdit; QHBoxLayout *titleLayout = new QHBoxLayout; titleLayout->addWidget(l6); titleLayout->addWidget(mTitle); w1Layout->addLayout(titleLayout); w1->setLayout(w1Layout); w1->setMinimumWidth(500); //list editors QWidget *w2 = new QWidget; QVBoxLayout *w2Layout = new QVBoxLayout; ListEditor *genreEditor = new ListEditor(mGenreModel); w2Layout->addWidget(genreEditor); ListEditor *actorsEditor = new ListEditor(mActorsModel); connect(actorsEditor, SIGNAL(itemAdded(const QString &)), this, SLOT(addActor(const QString &))); w2Layout->addWidget(actorsEditor); w2Layout->addStretch(); w2->setLayout(w2Layout); //splitter QSplitter *splitter = new QSplitter; splitter->addWidget(w1); splitter->addWidget(w2); //dialog buttons QHBoxLayout *buttonLayout = new QHBoxLayout; buttonLayout->addStretch(); mUpdate = new QPushButton(tr("Update")); connect(mUpdate, SIGNAL(clicked()), this, SLOT(updateMovie())); mClose = new QPushButton(tr("Close")); connect(mClose, SIGNAL(clicked()), this, SLOT(reject())); buttonLayout->addWidget(mUpdate); buttonLayout->addWidget(mClose); //now put it all together QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addWidget(splitter); mainLayout->addLayout(buttonLayout); setLayout(mainLayout); QString title = QString(tr("%1 - Edit archive")).arg(qApp->applicationName()); setWindowTitle(title); } void EditArchiveItemDialog::setMovie(const QModelIndex &movie){ if(!movie.isValid()){ return; } mMovieId = movie.data(MovieModel::IdRole).toInt(); mActorMap = movie.data(MovieModel::ActorsMap).value >(); mCovers = movie.data(MovieModel::CoverRole).toList(); setActors(); setMovieInfo(movie); } void EditArchiveItemDialog::setActors(){ QString html("
    "); QHash::const_iterator it = mActorMap.constBegin(); while(it != mActorMap.constEnd()){ html.append(QString("
  • %1
  • ").arg(it.key())); ++it; } html.append("
"); mActorsDisplay->setHtml(html); } void EditArchiveItemDialog::setMovieInfo(const QModelIndex &movie){ QString html("
    "); QModelIndex idx = mMovieModel->index(movie.row(), MovieItem::Title, QModelIndex()); html.append(QString(tr("
  • Title: %1
  • ")).arg(idx.data().toString())); mTitle->setText(idx.data().toString()); idx = mMovieModel->index(movie.row(), MovieItem::Filename, QModelIndex()); html.append(QString(tr("
  • Filename: %1
  • ")).arg(idx.data().toString())); idx = mMovieModel->index(movie.row(), MovieItem::Md5Sum, QModelIndex()); html.append(QString(tr("
  • Md5-Sum: %1
  • ")).arg(idx.data().toString())); idx = mMovieModel->index(movie.row(), MovieItem::Size, QModelIndex()); QLocale l; html.append(QString(tr("
  • Size: %1
  • ")).arg(l.toString(idx.data().toLongLong()))); idx = mMovieModel->index(movie.row(), MovieItem::Genre, QModelIndex()); html.append(QString(tr("
  • Genre: %1
  • ")).arg(idx.data().toString())); int genreIndex = mGenre->findText(idx.data().toString()); if(genreIndex != -1){ mGenre->setCurrentIndex(genreIndex); } idx = mMovieModel->index(movie.row(), MovieItem::Quality, QModelIndex()); html.append(QString(tr("
  • Quality: %1
  • ")).arg(l.toString(idx.data().toInt()))); mQuality->setValue(idx.data().toInt()); idx = mMovieModel->index(movie.row(), MovieItem::Dvd, QModelIndex()); int dvd = idx.data().toInt(); if(dvd != -1){ html.append(QString(tr("
  • On DVD %1
  • ")).arg(l.toString(dvd))); }else{ html.append(QString(tr("
  • Not on DVD
  • "))); } mDvd->setValue(dvd); html.append("
"); mMovieInfo->setHtml(html); } void EditArchiveItemDialog::addActor(){ QString currentText = mActors->currentText(); QModelIndex idx = mActorsModel->index(currentText); if(idx.isValid()){ int id = idx.data(ListModel::IdRole).toInt(); mActorMap.insert(currentText, id); setActors(); } } void EditArchiveItemDialog::addActor(const QString &actor){ int idx = mActors->findText(actor); if(idx != -1){ mActors->setCurrentIndex(idx); addActor(); } } void EditArchiveItemDialog::removeActor(){ QString currentText = mActors->currentText(); if(mActorMap.contains(currentText)){ mActorMap.remove(currentText); setActors(); } } void EditArchiveItemDialog::updateMovie(){ QHash::const_iterator it = mActorMap.constBegin(); QList actors; while(it != mActorMap.constEnd()){ actors << it.value(); ++it; } mMovieModel->setActors(mMovieId, actors); QString genreName = mGenre->currentText(); QModelIndex genreIdx = mGenreModel->index(genreName); QModelIndex genreMovieIndex = mMovieModel->index(mMovieId, MovieItem::Genre); QVariant genreId = genreIdx.data(ListModel::IdRole); mMovieModel->setDataAt(genreMovieIndex, genreId); QModelIndex dvdIdx = mMovieModel->index(mMovieId, MovieItem::Dvd); mMovieModel->setDataAt(dvdIdx, mDvd->value()); QModelIndex qualityIdx = mMovieModel->index(mMovieId, MovieItem::Quality); mMovieModel->setDataAt(qualityIdx, mQuality->value()); QString title = mTitle->text().trimmed().toLower(); QModelIndex titleIdx = mMovieModel->index(mMovieId, MovieItem::Title); if(!title.isEmpty()){ mMovieModel->setDataAt(titleIdx, title); } setMovieInfo(titleIdx); }