/* 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 #include "editarchiveitemdialog.h" #include "listmodel.h" #include "moviemodel.h" #include "listeditor.h" #include "covereditor.h" #include "coveritem.h" #include "fileinfomodel.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"));*/ mMovieInfo = new QTreeView; mFileInfoModel = new FileInfoModel; mMovieInfo->setModel(mFileInfoModel); 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("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(); 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){ 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(){ 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()); 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); }