From 41802000a0bcbb44c3add7f218eceec101f52cc0 Mon Sep 17 00:00:00 2001 From: am Date: Fri, 7 Aug 2009 19:53:55 +0000 Subject: -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 --- archiveeditdialog.cpp | 4 +++- archivefilewidget.cpp | 21 +++++++++++++++++ archivefilewidget.h | 4 ++++ archiveproxy.cpp | 43 ++++++++++----------------------- archiveviewwidget.cpp | 2 ++ editarchiveitemdialog.cpp | 60 +++++++++++++++++++++++++++++++++-------------- editarchiveitemdialog.h | 2 ++ movieitem.cpp | 6 +++-- movieitem.h | 4 ++-- moviemodel.cpp | 50 +++++++++++++++++++++++++++++++++++++-- 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 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 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 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 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 mMd5Sums; diff --git a/archiveproxy.cpp b/archiveproxy.cpp index 0249459..90374c6 100644 --- a/archiveproxy.cpp +++ b/archiveproxy.cpp @@ -9,8 +9,6 @@ #include #include -#include - #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 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("
    "); QModelIndex idx = mMovieModel->index(movie.row(), MovieItem::Title, QModelIndex()); html.append(QString(tr("
  • Title: %1
  • ")).arg(idx.data().toString())); - mTitle->setText(idx.data().toString()); - idx = mMovieModel->index(movie.row(), MovieItem::Filename, QModelIndex()); - html.append(QString(tr("
  • Filename: %1
  • ")).arg(idx.data().toString())); - idx = mMovieModel->index(movie.row(), MovieItem::Md5Sum, QModelIndex()); - html.append(QString(tr("
  • Md5-Sum: %1
  • ")).arg(idx.data().toString())); - idx = mMovieModel->index(movie.row(), MovieItem::Size, QModelIndex()); + mTitle->setText(idx.data(MovieModel::TitleBaseRole).toString()); + html.append(QString(tr("
  • Filename: %1
  • ")).arg(idx.data(MovieModel::FilenameRole).toString())); + html.append(QString(tr("
  • Md5-Sum: %1
  • ")).arg(idx.data(MovieModel::Md5Role).toString())); QLocale l; - html.append(QString(tr("
  • Size: %1
  • ")).arg(l.toString(idx.data().toLongLong()))); - idx = mMovieModel->index(movie.row(), MovieItem::Genre, QModelIndex()); - html.append(QString(tr("
  • Genre: %1
  • ")).arg(idx.data().toString())); + html.append(QString(tr("
  • Size: %1
  • ")).arg(l.toString(idx.data(MovieModel::SizeRole).toLongLong()))); + html.append(QString(tr("
  • Genre: %1
  • ")).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("
  • Quality: %1
  • ")).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("
  • Quality: %1
  • ")).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("
  • On DVD %1
  • ")).arg(l.toString(dvd))); }else{ html.append(QString(tr("
  • Not on DVD
  • "))); } mDvd->setValue(dvd); + int seriesno = idx.data(MovieModel::SeriesNoRole).toInt(); + if(seriesno == -1){ + html.append(QString(tr("
  • First or signle part
  • "))); + }else{ + html.append(QString(tr("
  • Part %1 in series
  • ")).arg(QString::number(seriesno))); + } + mSeriesNo->setValue(seriesno); + int partno = idx.data(MovieModel::PartNoRole).toInt(); + if(partno == -1){ + html.append(QString(tr("
  • Multipart: no
  • "))); + }else{ + html.append(QString(tr("
  • Multipart: part %1")).arg(QString::number(partno))); + } + mPartNo->setValue(partno); html.append("
"); 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 +#include + #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(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; -- cgit v1.2.3-70-g09d2