/* 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 "addmoviewizard.h" #include "listmodelsingleton.h" #include "actorwidget.h" #include "listeditor.h" #include "moviemodelsingleton.h" #include "moviemodel.h" #include "helper.h" AddMovieWizard::AddMovieWizard(QWidget *parent) : QWizard(parent){ addPage(new MovieNamePage); addPage(new MovieActorPage); addPage(new MovieGenrePage); addPage(new MovieCoverPage); } void AddMovieWizard::accept(){ QString movieName = field("movieName").toString(); int partno = field("partNo").toInt(); int seriesno = field("seriesNo").toInt(); int quality = field("quality").toInt(); QStringList actors = field("actors").toStringList(); QString genre = field("genre").toString(); int dvdno = field("dvdNo").toInt(); MovieModel *model = MovieModelSingleton::instance(); ListModel *genreModel = ListModelSingleton::instance()->model("genre"); ListModel *actorModel = ListModelSingleton::instance()->model("actor"); QList movieData; movieData << movieName; for(int i = 1; i < MovieItem::NumRows; ++i){ movieData << QVariant(); } QString md5(32, '0'); QModelIndex genreIdx = genreModel->index(genre); int genreId = genreModel->defaultId(); if(genreIdx.isValid()){ genreId = genreIdx.data(ListModel::IdRole).toInt(); } QList actorIds; foreach(QVariant a, actors){ QModelIndex actorIdx = actorModel->index(a.toString()); if(actorIdx.isValid()){ actorIds << actorIdx.data(ListModel::IdRole).toInt(); } } QHash covers; covers.insert("front", field("frontCover").toString()); covers.insert("back", field("backCover").toString()); covers.insert("general", field("generalCover").toString()); QList coverItems; foreach(QString type, covers.keys()){ if(covers[type].isEmpty()){ continue; } QString md5sum = Helper::md5Sum(covers[type]); QString destFile = Helper::moveToArchive(covers[type], md5sum); if(!destFile.isEmpty()){ coverItems << CoverItem(covers[type], type, md5sum); } } movieData[MovieItem::Md5Sum] = md5; movieData[MovieItem::Genre] = genreId; movieData[MovieItem::Dvd] = dvdno; movieData[MovieItem::Filename] = tr("(DVD)"); movieData[MovieItem::Size] = Q_INT64_C(4707319808); movieData[MovieItem::Quality] = quality; movieData[MovieItem::SeriesNo] = seriesno; movieData[MovieItem::PartNo] = partno; model->addMovie(movieData, actorIds, coverItems); QDialog::accept(); } /* MovieNamePage */ MovieNamePage::MovieNamePage(QWidget *parent) : QWizardPage(parent){ setTitle(tr("Basic Movie Information")); setSubTitle(tr("Enter basic Movie information here. The series no. is the series part, e.g. Rogue adventures 14. The part no. only has to be set if the movie is split in several parts. Set -1 for none.")); setPixmap(QWizard::LogoPixmap, QPixmap(":/shemov.png")); QGridLayout *mainLayout = new QGridLayout; QLabel *l1 = new QLabel(tr("Movie name")); mainLayout->addWidget(l1, 0, 0); mMovieName = new QLineEdit; mainLayout->addWidget(mMovieName, 0, 1); QLabel *l2 = new QLabel(tr("Series no.")); mainLayout->addWidget(l2, 1, 0); mSeriesNo = new QSpinBox; mSeriesNo->setMinimum(-1); mSeriesNo->setValue(-1); mainLayout->addWidget(mSeriesNo, 1, 1); QLabel *l3 = new QLabel(tr("Part no.")); mainLayout->addWidget(l3, 2, 0); mPartNo = new QSpinBox; mPartNo->setMinimum(-1); mPartNo->setValue(-1); mainLayout->addWidget(mPartNo, 2, 1); QLabel *l4 = new QLabel(tr("Quality")); mainLayout->addWidget(l4, 3, 0); mQuality = new QSpinBox; mQuality->setMaximum(10); mQuality->setMinimum(0); mQuality->setValue(10); mainLayout->addWidget(mQuality, 3, 1); MovieModel *movieModel = MovieModelSingleton::instance(); int dvdno = movieModel->maxValue(MovieItem::Dvd).toInt(); QLabel *l5 = new QLabel(tr("DVD no.")); mainLayout->addWidget(l5, 4, 0); mDvdNo = new QSpinBox; mDvdNo->setMinimum(0); mDvdNo->setValue(++dvdno); mainLayout->addWidget(mDvdNo, 4, 1); registerField("movieName*", mMovieName); registerField("seriesNo", mSeriesNo); registerField("partNo", mPartNo); registerField("quality", mQuality); registerField("dvdNo", mDvdNo); setLayout(mainLayout); } /* MovieActorPage */ MovieActorPage::MovieActorPage(QWidget *parent) : QWizardPage(parent){ setTitle(tr("Actors")); setSubTitle(tr("Enter actors here")); setPixmap(QWizard::LogoPixmap, QPixmap(":/shemov.png")); QHBoxLayout *mainLayout = new QHBoxLayout; mActorWidget = new ActorWidget; mainLayout->addWidget(mActorWidget); QVBoxLayout *actorEditorLayout = new QVBoxLayout; ListEditor *actorsEditor = new ListEditor(ListModelSingleton::instance()->model("actor")); actorEditorLayout->addWidget(actorsEditor); actorEditorLayout->addStretch(); mainLayout->addLayout(actorEditorLayout); connect(actorsEditor, SIGNAL(itemAdded(const QString &)), this, SLOT(addActor(const QString &))); registerField("actors", mActorWidget, "actors"); setLayout(mainLayout); } void MovieActorPage::addActor(const QString &actor){ mActorWidget->addActor(actor); } /* MovieGenrePage */ MovieGenrePage::MovieGenrePage(QWidget *parent) : QWizardPage(parent){ setTitle(tr("Genre")); setSubTitle(tr("Set the genre of the movie")); setPixmap(QWizard::LogoPixmap, QPixmap(":/shemov.png")); QVBoxLayout *mainLayout = new QVBoxLayout; QLabel *l1 = new QLabel(tr("Select genre")); mainLayout->addWidget(l1); mGenre = new QComboBox; mGenre->setModel(ListModelSingleton::instance()->model("genre")); int idx = mGenre->findText("shemale"); if(idx != -1){ mGenre->setCurrentIndex(idx); } mainLayout->addWidget(mGenre); ListEditor *genreEditor = new ListEditor(ListModelSingleton::instance()->model("genre")); mainLayout->addWidget(genreEditor); mainLayout->addStretch(); registerField("genre", mGenre, "currentText"); setLayout(mainLayout); } /* MovieCoverPage */ MovieCoverPage::MovieCoverPage(QWidget *parent) : QWizardPage(parent){ setTitle(tr("Covers")); setSubTitle(tr("Select covers for the movie")); setPixmap(QWizard::LogoPixmap, QPixmap(":/shemov.png")); QSignalMapper *mapper = new QSignalMapper(this); QGridLayout *mainLayout = new QGridLayout; QLabel *l1 = new QLabel(tr("Front cover")); mFrontCover = new QLineEdit; mSelectFront = new QPushButton(tr("Browse...")); connect(mSelectFront, SIGNAL(clicked()), mapper, SLOT(map())); mapper->setMapping(mSelectFront, mFrontCover); mainLayout->addWidget(l1, 0, 0); mainLayout->addWidget(mFrontCover, 0, 1); mainLayout->addWidget(mSelectFront, 0, 2); QLabel *l2 = new QLabel(tr("Back cover")); mBackCover = new QLineEdit; mSelectBack = new QPushButton(tr("Browse...")); connect(mSelectBack, SIGNAL(clicked()), mapper, SLOT(map())); mapper->setMapping(mSelectBack, mBackCover); mainLayout->addWidget(l2, 1, 0); mainLayout->addWidget(mBackCover, 1, 1); mainLayout->addWidget(mSelectBack, 1, 2); QLabel *l3 = new QLabel(tr("General cover")); mGeneralCover = new QLineEdit; mSelectGeneral = new QPushButton(tr("Browse...")); connect(mSelectGeneral, SIGNAL(clicked()), mapper, SLOT(map())); mapper->setMapping(mSelectGeneral, mGeneralCover); mainLayout->addWidget(l3, 2, 0); mainLayout->addWidget(mGeneralCover, 2, 1); mainLayout->addWidget(mSelectGeneral, 2, 2); registerField("frontCover", mFrontCover); registerField("backCover", mBackCover); registerField("generalCover", mGeneralCover); connect(mapper, SIGNAL(mapped(QWidget*)), this, SLOT(selectFile(QWidget*))); setLayout(mainLayout); } void MovieCoverPage::selectFile(QWidget *lineEdit){ QLineEdit *curLineEdit = static_cast(lineEdit); Q_ASSERT(curLineEdit); QSettings s; if(mLastOpenedDir.isEmpty()){ mLastOpenedDir = s.value("paths/selecteddir", QDir::homePath()).toString(); } QString file = QFileDialog::getOpenFileName(this, tr("Select cover"), mLastOpenedDir); curLineEdit->setText(file); if(!file.isEmpty()){ QFileInfo fi(file); mLastOpenedDir = fi.absolutePath(); } }