diff options
Diffstat (limited to 'editarchiveitemdialog.cpp')
-rw-r--r-- | editarchiveitemdialog.cpp | 235 |
1 files changed, 235 insertions, 0 deletions
diff --git a/editarchiveitemdialog.cpp b/editarchiveitemdialog.cpp new file mode 100644 index 0000000..333c410 --- /dev/null +++ b/editarchiveitemdialog.cpp @@ -0,0 +1,235 @@ +/* + 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 <QLineEdit> +#include <QLabel> +#include <QSplitter> +#include <QHBoxLayout> +#include <QVBoxLayout> +#include <QSpinBox> +#include <QTextEdit> +#include <QPushButton> +#include <QFont> +#include <QComboBox> +#include <QSplitter> +#include <QApplication> +#include <QModelIndex> +#include <QLocale> + +#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); + + //list editors + QWidget *w2 = new QWidget; + QVBoxLayout *w2Layout = new QVBoxLayout; + ListEditor *genreEditor = new ListEditor(mGenreModel); + w2Layout->addWidget(genreEditor); + ListEditor *actorsEditor = new ListEditor(mActorsModel); + w2Layout->addWidget(actorsEditor); + mCoverEditor = new CoverEditor(CoverEditor::Update); + w2Layout->addWidget(mCoverEditor); + + //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(triggered()), 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<QHash<QString, QVariant> >(); + mCovers = movie.data(MovieModel::CoverRole).toList(); + setActors(); + setMovieInfo(movie); + setCovers(movie); +} + +void EditArchiveItemDialog::setActors(){ + QString html("<html><body style=\"color:#CD0003\"><ul>"); + QHash<QString, QVariant>::const_iterator it = mActorMap.constBegin(); + while(it != mActorMap.constEnd()){ + html.append(QString("<li>%1</li>").arg(it.key())); + ++it; + } + html.append("</ul></body></html>"); + mActorsDisplay->setHtml(html); +} + +void EditArchiveItemDialog::setMovieInfo(const QModelIndex &movie){ + QString html("<html><body style=\"color:#CD0003\"><ul>"); + QModelIndex idx = mMovieModel->index(movie.row(), MovieItem::Title, QModelIndex()); + html.append(tr("<li>Title: %1</li>")).arg(idx.data().toString()); + mTitle->setText(idx.data().toString()); + idx = mMovieModel->index(movie.row(), MovieItem::Filename, QModelIndex()); + html.append(tr("<li>Filename: %1</li>")).arg(idx.data().toString()); + idx = mMovieModel->index(movie.row(), MovieItem::Md5Sum, QModelIndex()); + html.append(tr("<li>Md5-Sum: %1</li>")).arg(idx.data().toString()); + idx = mMovieModel->index(movie.row(), MovieItem::Size, QModelIndex()); + QLocale l; + html.append(tr("<li>Size: %1</li>")).arg(l.toString(idx.data().toLongLong())); + idx = mMovieModel->index(movie.row(), MovieItem::Genre, QModelIndex()); + html.append(tr("<li>Genre: %1</li>")).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(tr("<li>Quality: %1</li>")).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(tr("<li>On DVD %1</li>")).arg(l.toString(dvd)); + }else{ + html.append(tr("<li>Not on DVD</li>)")); + } + mDvd->setValue(dvd); +} + +void EditArchiveItemDialog::setCovers(const QModelIndex &movie){ + mCovers.clear(); + QList<QVariant> covers = movie.data(MovieModel::CoverRole).toList(); + QStringList coverNames; + foreach(QVariant v, covers){ + CoverItem i = v.value<CoverItem>(); + coverNames << i.fileName(); + //mModelCovers << i.fileName(); + } + mCoverEditor->setCovers(coverNames); +} + +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::removeActor(){ + QString currentText = mActors->currentText(); + if(mActorMap.contains(currentText)){ + mActorMap.remove(currentText); + setActors(); + } +} + +void EditArchiveItemDialog::updateMovie(){ + QHash<QString, QVariant>::const_iterator it = mActorMap.constBegin(); + QList<QVariant> actors; + while(it != mActorMap.constEnd()){ + actors << it.value(); + ++it; + } + mMovieModel->setActors(mMovieId, actors); + +} + +void EditArchiveItemDialog::updateCovers(){ + QString front = mCoverEditor->frontCover(); + QString back = mCoverEditor->backCover(); + QString covers = mCoverEditor->covers(); + QList<CoverItem> coverList; + ///if(front + +} |