/* 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" #include "fileinfomodel.h" #include "actorwidget.h" #include "actormodel.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 QTreeView; mFileInfoModel = new FileInfoModel; mMovieInfo->setModel(mFileInfoModel); w1Layout->addWidget(mMovieInfo); //actors QLabel *l2 = new QLabel(tr("Select actors")); QHBoxLayout *actorsLayout = new QHBoxLayout; mActorsDisplay = new ActorWidget; mCurrentActors = new ActorModel; actorsLayout->addWidget(l2); w1Layout->addWidget(mActorsDisplay); //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("Set 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("Set DVD No.")); mDvd = new QSpinBox; mDvd->setMinimum(-1); mDvd->setMaximum(1000); qualityDvdLayout->addWidget(l5); qualityDvdLayout->addWidget(mDvd); w1Layout->addLayout(qualityDvdLayout); QLabel *l6 = new QLabel(tr("Set series No.")); mSeriesNo = new QSpinBox; mSeriesNo->setMinimum(-1); mSeriesNo->setMaximum(1000); qualityDvdLayout->addWidget(l6); qualityDvdLayout->addWidget(mSeriesNo); QLabel *l7 = new QLabel(tr("Set part No.")); mPartNo = new QSpinBox; mPartNo->setMinimum(-1); mPartNo->setMaximum(100); qualityDvdLayout->addWidget(l7); qualityDvdLayout->addWidget(mPartNo); //movie title QLabel *l8 = new QLabel(tr("Set movie title")); mTitle = new QLineEdit; QHBoxLayout *titleLayout = new QHBoxLayout; titleLayout->addWidget(l8); 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(); QHash actorMap = movie.data(MovieModel::ActorsMap).value >(); for(QHash::const_iterator it = actorMap.constBegin(); it != actorMap.constEnd(); ++it){ mActorsDisplay->addActor(it.key()); } mCovers = movie.data(MovieModel::CoverRole).toList(); setMovieInfo(movie); } void EditArchiveItemDialog::setMovieInfo(const QModelIndex &movie){ QModelIndex idx = mMovieModel->index(movie.row(), MovieItem::Title, QModelIndex()); mTitle->setText(idx.data(MovieModel::TitleBaseRole).toString()); int genreIndex = mGenre->findText(idx.data().toString()); if(genreIndex != -1){ mGenre->setCurrentIndex(genreIndex); } mQuality->setValue(idx.data(MovieModel::QualityRole).toInt()); int dvd = idx.data(MovieModel::DvdRole).toInt(); mDvd->setValue(dvd); int seriesno = idx.data(MovieModel::SeriesNoRole).toInt(); mSeriesNo->setValue(seriesno); int partno = idx.data(MovieModel::PartNoRole).toInt(); mPartNo->setValue(partno); mFileInfoModel->clear(); mFileInfoModel->addIndex(idx.data().toString(), movie); mMovieInfo->setHeaderHidden(true); mMovieInfo->resizeColumnToContents(0); mMovieInfo->expandAll(); } void EditArchiveItemDialog::addActor(const QString &actor){ mActorsDisplay->addActor(actor); } void EditArchiveItemDialog::updateMovie(){ QStringList actors = mActorsDisplay->actors(); QList actorIds; foreach(QString a, actors){ QModelIndex idx = mActorsModel->index(a); if(idx.isValid()){ actorIds << idx.data(ListModel::IdRole); } } mMovieModel->setActors(mMovieId, actorIds); 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()); QModelIndex seriesnoIdx = mMovieModel->index(mMovieId, MovieItem::SeriesNo); mMovieModel->setDataAt(seriesnoIdx, mSeriesNo->value()); QModelIndex partnoIdx = mMovieModel->index(mMovieId, MovieItem::PartNo); mMovieModel->setDataAt(partnoIdx, mPartNo->value()); QString title = mTitle->text().trimmed().toLower(); QModelIndex titleIdx = mMovieModel->index(mMovieId, MovieItem::Title); if(!title.isEmpty()){ mMovieModel->setDataAt(titleIdx, title); } setMovieInfo(titleIdx); }