summaryrefslogtreecommitdiffstats
path: root/editarchiveitemdialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'editarchiveitemdialog.cpp')
-rw-r--r--editarchiveitemdialog.cpp235
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
+
+}