diff options
author | am <am@f440f766-f032-0410-8965-dc7d17de2ca0> | 2009-08-07 19:53:55 +0000 |
---|---|---|
committer | am <am@f440f766-f032-0410-8965-dc7d17de2ca0> | 2009-08-07 19:53:55 +0000 |
commit | 41802000a0bcbb44c3add7f218eceec101f52cc0 (patch) | |
tree | eb6e64d81cf9e3ab4a17a19031d5506ca7be405f | |
parent | cbf3c617d366892cf6af9b5fdbc5286e47ca4b42 (diff) | |
download | SheMov-41802000a0bcbb44c3add7f218eceec101f52cc0.tar.gz SheMov-41802000a0bcbb44c3add7f218eceec101f52cc0.tar.bz2 SheMov-41802000a0bcbb44c3add7f218eceec101f52cc0.zip |
-fixed sorting in ArchiveProxy: had to introduce two new fields to MovieModel: partno and seriesno
-made changes to archiveviewiwdget.cpp and dialogs accordingly
git-svn-id: file:///var/svn/repos2/shemov/trunk@400 f440f766-f032-0410-8965-dc7d17de2ca0
-rw-r--r-- | archiveeditdialog.cpp | 4 | ||||
-rw-r--r-- | archivefilewidget.cpp | 21 | ||||
-rw-r--r-- | archivefilewidget.h | 4 | ||||
-rw-r--r-- | archiveproxy.cpp | 43 | ||||
-rw-r--r-- | archiveviewwidget.cpp | 2 | ||||
-rw-r--r-- | editarchiveitemdialog.cpp | 60 | ||||
-rw-r--r-- | editarchiveitemdialog.h | 2 | ||||
-rw-r--r-- | movieitem.cpp | 6 | ||||
-rw-r--r-- | movieitem.h | 4 | ||||
-rw-r--r-- | moviemodel.cpp | 50 | ||||
-rw-r--r-- | moviemodel.h | 2 |
11 files changed, 142 insertions, 56 deletions
diff --git a/archiveeditdialog.cpp b/archiveeditdialog.cpp index eae336d..925afe4 100644 --- a/archiveeditdialog.cpp +++ b/archiveeditdialog.cpp @@ -104,6 +104,8 @@ void ArchiveEditDialog::archive(){ QString file = mCoverEditor->movie(); QString title = mFileWidget->movieTitle().toLower(); int quality = mFileWidget->quality(); + int seriesno = mFileWidget->seriesNo(); + int partno = mFileWidget->partNo(); QStringList files; files << front << back << general; files.removeAll(QString()); @@ -128,7 +130,7 @@ void ArchiveEditDialog::archive(){ } QList<QVariant> data; QFileInfo movie(file); - data << title << movie.fileName() << md5.value(file) << movie.size() << genre << quality << -1; + data << title << movie.fileName() << md5.value(file) << movie.size() << genre << quality << -1 << seriesno << partno; QList<CoverItem> covers; if(!front.isEmpty()){ covers << coverItem(front, "front", md5.value(front)); diff --git a/archivefilewidget.cpp b/archivefilewidget.cpp index bc68382..59447e1 100644 --- a/archivefilewidget.cpp +++ b/archivefilewidget.cpp @@ -83,6 +83,27 @@ ArchiveFileWidget::ArchiveFileWidget(MovieModel *model, QWidget *parent, Qt::Win qualityTitleLayout->addWidget(mTitle); mainLayout->addLayout(qualityTitleLayout); + //series number and part number + QHBoxLayout *numbersLayout = new QHBoxLayout; + QLabel *l6 = new QLabel(tr("Select &series number")); + mSeriesNo = new QSpinBox; + mSeriesNo->setMinimum(-1); + mSeriesNo->setMaximum(1000); + mSeriesNo->setValue(-1); + l6->setBuddy(mSeriesNo); + QLabel *l7 = new QLabel(tr("Select &part number")); + mPartNo = new QSpinBox; + mPartNo->setMinimum(-1); + mPartNo->setMaximum(100); + mPartNo->setValue(-1); + l7->setBuddy(mPartNo); + numbersLayout->addWidget(l6); + numbersLayout->addWidget(mSeriesNo); + numbersLayout->addWidget(l7); + numbersLayout->addWidget(mPartNo); + numbersLayout->addStretch(); + mainLayout->addLayout(numbersLayout); + setLayout(mainLayout); setMinimumWidth(600); } diff --git a/archivefilewidget.h b/archivefilewidget.h index 5dbf339..5d01556 100644 --- a/archivefilewidget.h +++ b/archivefilewidget.h @@ -33,6 +33,8 @@ class ArchiveFileWidget : public QWidget { const QList<int> actorIds() const; int genreId() const; int quality() const { return mQuality->value(); }; + int seriesNo() const { return mSeriesNo->value(); }; + int partNo() const { return mPartNo->value(); }; const QString movieTitle() const { return mTitle->text(); }; const QHash<QString, QString> md5Sums() const { return mMd5Sums; }; @@ -59,6 +61,8 @@ class ArchiveFileWidget : public QWidget { QPushButton *mAddActor; QPushButton *mRemoveActor; QSpinBox *mQuality; + QSpinBox *mSeriesNo; + QSpinBox *mPartNo; QLineEdit *mTitle; QStringList mFileList; QHash<QString, QString> mMd5Sums; diff --git a/archiveproxy.cpp b/archiveproxy.cpp index 0249459..90374c6 100644 --- a/archiveproxy.cpp +++ b/archiveproxy.cpp @@ -9,8 +9,6 @@ #include <QRegExp> #include <QList> -#include <QDebug> - #include "archiveproxy.h" #include "moviemodel.h" @@ -74,35 +72,20 @@ bool ArchiveProxy::lessThan(const QModelIndex &left, const QModelIndex &right) c if(left.column() > 0){ return QSortFilterProxyModel::lessThan(left, right); } - QString l = left.data().toString(); - QString r = right.data().toString(); - QRegExp nos("(\\d+)"); - QList<int> lnos, rnos; - int pos = 0; - bool dummy; - while((pos = nos.indexIn(l, pos)) != -1){ - lnos << nos.cap(1).toInt(&dummy); - pos += nos.matchedLength(); - } - pos = 0; - while((pos = nos.indexIn(r, pos)) != -1){ - rnos << nos.cap(1).toInt(&dummy); - pos += nos.matchedLength(); - } - QRegExp baseRe("(.*)\\s+\\d+"); - baseRe.indexIn(l); - QString lbase = baseRe.cap(1); - baseRe.indexIn(r); - QString rbase = baseRe.cap(1); - if((lnos.size() == 1) && (rnos.size() == 1)){ - if(lbase == rbase){ - return (lnos.at(0) < rnos.at(0)); + QString lbase = left.data(MovieModel::TitleBaseRole).toString(); + QString rbase = right.data(MovieModel::TitleBaseRole).toString(); + if(lbase == rbase){ + int lseriesno = left.data(MovieModel::SeriesNoRole).toInt(); + int rseriesno = right.data(MovieModel::SeriesNoRole).toInt(); + if(lseriesno == rseriesno){ + int lpartno = left.data(MovieModel::PartNoRole).toInt(); + int rpartno = right.data(MovieModel::PartNoRole).toInt(); + return (lpartno < rpartno); + }else{ + return (lseriesno < rseriesno); } - } - if((lnos.size() == 2) && (rnos.size() == 2)){ - if(lbase == rbase){ - return (lnos.at(1) < rnos.at(1)); - } + }else{ + return (lbase < rbase); } return QSortFilterProxyModel::lessThan(left, right); } diff --git a/archiveviewwidget.cpp b/archiveviewwidget.cpp index 37eca17..0e6686e 100644 --- a/archiveviewwidget.cpp +++ b/archiveviewwidget.cpp @@ -73,6 +73,8 @@ ArchiveViewWidget::ArchiveViewWidget(MovieModel *model, ListModel *genre, ListMo mFileView->setSelectionBehavior(QAbstractItemView::SelectRows); mFileView->setSelectionMode(QAbstractItemView::ExtendedSelection); mFileView->setColumnHidden(MovieItem::Md5Sum, true); + mFileView->setColumnHidden(MovieItem::SeriesNo, true); + mFileView->setColumnHidden(MovieItem::PartNo, true); connect(mClearFilter, SIGNAL(clicked()), mProxy, SLOT(clearFilter())); connect(mMovieModel, SIGNAL(moviesChanged()), mProxy, SLOT(invalidate())); diff --git a/editarchiveitemdialog.cpp b/editarchiveitemdialog.cpp index 998ff97..f24ad5f 100644 --- a/editarchiveitemdialog.cpp +++ b/editarchiveitemdialog.cpp @@ -71,7 +71,7 @@ EditArchiveItemDialog::EditArchiveItemDialog(ListModel *genre, ListModel *actors w1Layout->addLayout(genreLayout); //quality + dvd - QLabel *l4 = new QLabel(tr("Select quality")); + QLabel *l4 = new QLabel(tr("Set quality")); mQuality = new QSpinBox; mQuality->setMinimum(0); mQuality->setMaximum(10); @@ -79,19 +79,31 @@ EditArchiveItemDialog::EditArchiveItemDialog(ListModel *genre, ListModel *actors qualityDvdLayout->addWidget(l4); qualityDvdLayout->addWidget(mQuality); qualityDvdLayout->addStretch(); - QLabel*l5 = new QLabel(tr("Select DVD No.")); + 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 *l6 = new QLabel(tr("Set movie title")); + QLabel *l8 = new QLabel(tr("Set movie title")); mTitle = new QLineEdit; QHBoxLayout *titleLayout = new QHBoxLayout; - titleLayout->addWidget(l6); + titleLayout->addWidget(l8); titleLayout->addWidget(mTitle); w1Layout->addLayout(titleLayout); w1->setLayout(w1Layout); @@ -159,31 +171,39 @@ 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(QString(tr("<li>Title: %1</li>")).arg(idx.data().toString())); - mTitle->setText(idx.data().toString()); - idx = mMovieModel->index(movie.row(), MovieItem::Filename, QModelIndex()); - html.append(QString(tr("<li>Filename: %1</li>")).arg(idx.data().toString())); - idx = mMovieModel->index(movie.row(), MovieItem::Md5Sum, QModelIndex()); - html.append(QString(tr("<li>Md5-Sum: %1</li>")).arg(idx.data().toString())); - idx = mMovieModel->index(movie.row(), MovieItem::Size, QModelIndex()); + mTitle->setText(idx.data(MovieModel::TitleBaseRole).toString()); + html.append(QString(tr("<li>Filename: %1</li>")).arg(idx.data(MovieModel::FilenameRole).toString())); + html.append(QString(tr("<li>Md5-Sum: %1</li>")).arg(idx.data(MovieModel::Md5Role).toString())); QLocale l; - html.append(QString(tr("<li>Size: %1</li>")).arg(l.toString(idx.data().toLongLong()))); - idx = mMovieModel->index(movie.row(), MovieItem::Genre, QModelIndex()); - html.append(QString(tr("<li>Genre: %1</li>")).arg(idx.data().toString())); + html.append(QString(tr("<li>Size: %1</li>")).arg(l.toString(idx.data(MovieModel::SizeRole).toLongLong()))); + html.append(QString(tr("<li>Genre: %1</li>")).arg(idx.data(MovieModel::GenreRole).toString())); int genreIndex = mGenre->findText(idx.data().toString()); if(genreIndex != -1){ mGenre->setCurrentIndex(genreIndex); } - idx = mMovieModel->index(movie.row(), MovieItem::Quality, QModelIndex()); - html.append(QString(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(); + html.append(QString(tr("<li>Quality: %1</li>")).arg(l.toString(idx.data(MovieModel::QualityRole).toInt()))); + mQuality->setValue(idx.data(MovieModel::QualityRole).toInt()); + int dvd = idx.data(MovieModel::DvdRole).toInt(); if(dvd != -1){ html.append(QString(tr("<li>On DVD %1</li>")).arg(l.toString(dvd))); }else{ html.append(QString(tr("<li>Not on DVD</li>"))); } mDvd->setValue(dvd); + int seriesno = idx.data(MovieModel::SeriesNoRole).toInt(); + if(seriesno == -1){ + html.append(QString(tr("<li>First or signle part</li>"))); + }else{ + html.append(QString(tr("<li>Part %1 in series</li>")).arg(QString::number(seriesno))); + } + mSeriesNo->setValue(seriesno); + int partno = idx.data(MovieModel::PartNoRole).toInt(); + if(partno == -1){ + html.append(QString(tr("<li>Multipart: no</li>"))); + }else{ + html.append(QString(tr("<li>Multipart: part %1")).arg(QString::number(partno))); + } + mPartNo->setValue(partno); html.append("</ul></body></html>"); mMovieInfo->setHtml(html); } @@ -231,6 +251,10 @@ void EditArchiveItemDialog::updateMovie(){ 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()){ diff --git a/editarchiveitemdialog.h b/editarchiveitemdialog.h index 4dd1cdc..e4e041c 100644 --- a/editarchiveitemdialog.h +++ b/editarchiveitemdialog.h @@ -45,6 +45,8 @@ class EditArchiveItemDialog : public QDialog { QTextEdit *mMovieInfo; QTextEdit *mActorsDisplay; QSpinBox *mQuality; + QSpinBox *mSeriesNo; + QSpinBox *mPartNo; QSpinBox *mDvd; QPushButton *mUpdate; QPushButton *mClose; diff --git a/movieitem.cpp b/movieitem.cpp index 4b05900..46519db 100644 --- a/movieitem.cpp +++ b/movieitem.cpp @@ -7,11 +7,13 @@ #include <QSqlQuery> +#include <QDebug> + #include "movieitem.h" #include "coveritem.h" #include "helper.h" -MovieItem::MovieItem(int id, QObject *parent) : QObject(parent), mNumRows(7), mId(id), mGenreId(-1) { +MovieItem::MovieItem(int id, QObject *parent) : QObject(parent), mNumRows(9), mId(id), mGenreId(-1) { for(int i = 0; i < mNumRows; ++i){ mRows << QVariant(); } @@ -61,7 +63,7 @@ const QVariant MovieItem::dataAt(int column) const { void MovieItem::populate(){ QSqlQuery movieData; - movieData.prepare("SELECT ttitle, tfilename, cmd5sum, bisize, igenreid, iquality, idvd FROM movies WHERE imovid = :id"); + movieData.prepare("SELECT ttitle, tfilename, cmd5sum, bisize, igenreid, iquality, idvd, iseriesno, ipartno FROM movies WHERE imovid = :id"); movieData.bindValue(":id", mId); movieData.exec(); if(movieData.next()){ diff --git a/movieitem.h b/movieitem.h index 70bfc88..a20cf52 100644 --- a/movieitem.h +++ b/movieitem.h @@ -21,8 +21,8 @@ class MovieItem : public QObject { Q_OBJECT Q_ENUMS(Columns) public: - enum Columns { Title = 0, Filename = 1, Md5Sum = 2, Size = 3, Genre = 4, Quality = 5, Dvd = 6 }; - enum { NumRows = 7 }; + enum Columns { Title = 0, Filename = 1, Md5Sum = 2, Size = 3, Genre = 4, Quality = 5, Dvd = 6, SeriesNo = 7, PartNo = 8 }; + enum { NumRows = 9 }; MovieItem(int id = -1, QObject *parent = 0); ~MovieItem() {}; int id() const { return mId; }; diff --git a/moviemodel.cpp b/moviemodel.cpp index 28399de..191b987 100644 --- a/moviemodel.cpp +++ b/moviemodel.cpp @@ -15,7 +15,7 @@ MovieModel::MovieModel(QObject *parent) : QAbstractItemModel(parent) { mHeaders << tr("Title") << tr("Filename") << tr("MD5Sum") << tr("Size") << tr("Genre") << tr("Quality") << tr("Archived"); mInsertQuery = new QSqlQuery; - mInsertQuery->prepare("SELECT insert_movie(:title, :filename, :md5, :filesize, :genre, :quality, :dvd)"); + mInsertQuery->prepare("SELECT insert_movie(:title, :filename, :md5, :filesize, :genre, :quality, :dvd, :seriesno, :partno)"); mDeleteQuery = new QSqlQuery; mDeleteQuery->prepare("DELETE FROM movies WHERE imovid = :id"); mDeleteActorsForMovie = new QSqlQuery; @@ -47,6 +47,12 @@ MovieModel::MovieModel(QObject *parent) : QAbstractItemModel(parent) { QSqlQuery *c7 = new QSqlQuery; c7->prepare("UPDATE movies SET idvd = :value WHERE imovid = :id"); mColumnQueries << c7; + QSqlQuery *c8 = new QSqlQuery; + c8->prepare("UPDATE movies SET iseriesno = :value WHERE imovid = :id"); + mColumnQueries << c8; + QSqlQuery *c9 = new QSqlQuery; + c9->prepare("UPDATE movies set ipartno = :value WHERE imovid = :id"); + mColumnQueries << c9; populate(); } @@ -100,7 +106,20 @@ QVariant MovieModel::data(const QModelIndex &index, int role) const{ MovieItem *item = static_cast<MovieItem*>(index.internalPointer()); Q_ASSERT(item != 0); if(role == Qt::DisplayRole){ - return item->dataAt(index.column()); + if(index.column() == 0){ + QString retval = item->dataAt(MovieItem::Title).toString(); + int seriesno = item->dataAt(MovieItem::SeriesNo).toInt(); + int partno = item->dataAt(MovieItem::PartNo).toInt(); + if(seriesno != -1){ + retval.append(QString(" %1").arg(QString::number(seriesno))); + } + if(partno != -1){ + retval.append(QString(" (part %1)").arg(QString::number(partno))); + } + return retval; + }else{ + return item->dataAt(index.column()); + } } if(role == ActorsRole){ return item->actors(); @@ -114,6 +133,33 @@ QVariant MovieModel::data(const QModelIndex &index, int role) const{ if(role == IdRole){ return item->id(); } + if(role == TitleBaseRole){ + return item->dataAt(MovieItem::Title); + } + if(role == SeriesNoRole){ + return item->dataAt(MovieItem::SeriesNo); + } + if(role == PartNoRole){ + return item->dataAt(MovieItem::PartNo); + } + if(role == FilenameRole){ + return item->dataAt(MovieItem::Filename); + } + if(role == Md5Role){ + return item->dataAt(MovieItem::Md5Sum); + } + if(role == SizeRole){ + return item->dataAt(MovieItem::Size); + } + if(role == GenreRole){ + return item->dataAt(MovieItem::Genre); + } + if(role == QualityRole){ + return item->dataAt(MovieItem::Quality); + } + if(role == DvdRole){ + return item->dataAt(MovieItem::Dvd); + } if((role == Qt::DecorationRole) && (index.column() == 0)){ return QIcon(":/dildo.png"); } diff --git a/moviemodel.h b/moviemodel.h index c8e6dd1..648a8f9 100644 --- a/moviemodel.h +++ b/moviemodel.h @@ -20,7 +20,7 @@ class MovieModel : public QAbstractItemModel { Q_OBJECT Q_ENUMS(CustomRoles) public: - enum CustomRoles { Md5Role = Qt::UserRole + 1, ActorsRole = Qt::UserRole + 2, ActorsMap = Qt::UserRole + 3, CoverRole = Qt::UserRole + 4, IdRole = Qt::UserRole + 5 }; + enum CustomRoles { Md5Role = Qt::UserRole + 1, ActorsRole = Qt::UserRole + 2, ActorsMap = Qt::UserRole + 3, CoverRole = Qt::UserRole + 4, IdRole = Qt::UserRole + 5, TitleBaseRole = Qt::UserRole + 6, SeriesNoRole = Qt::UserRole + 7, PartNoRole = Qt::UserRole + 8, FilenameRole = Qt::UserRole + 9, SizeRole = Qt::UserRole + 10, GenreRole = Qt::UserRole + 11, QualityRole = Qt::UserRole + 12, DvdRole = Qt::UserRole + 13 }; MovieModel(QObject *parent = 0); ~MovieModel(); QModelIndex index(int row, int column, const QModelIndex &parent) const; |