diff options
-rw-r--r-- | newmoviewizard.cpp | 82 | ||||
-rw-r--r-- | newmoviewizard.h | 9 | ||||
-rw-r--r-- | seriestreemodel.cpp | 11 | ||||
-rw-r--r-- | seriestreemodel.h | 2 | ||||
-rw-r--r-- | shemov.cpp | 12 | ||||
-rw-r--r-- | shemov.h | 4 | ||||
-rw-r--r-- | smtreemodel.cpp | 10 |
7 files changed, 112 insertions, 18 deletions
diff --git a/newmoviewizard.cpp b/newmoviewizard.cpp index 313ca99..0b66a50 100644 --- a/newmoviewizard.cpp +++ b/newmoviewizard.cpp @@ -18,26 +18,29 @@ #include <QFileInfo> #include <QLocale> #include <QCompleter> +#include <QCheckBox> #include "newmoviewizard.h" -#include "smtreemodel.h" #include "smtreeitem.h" #include "seriestreemodel.h" #include "smmodelsingleton.h" #include "helper.h" NewMovieWizard::NewMovieWizard(QWidget *parent) : QWizard(parent){ + addPage(new MovieInfoPage); +} +void NewMovieWizard::accept(){ + QDialog::accept(); } MovieInfoPage::MovieInfoPage(QWidget *parent) : QWizardPage(parent){ - //page setup setTitle(tr("Collect files for movie")); setSubTitle(tr("Select files by clicking the \"Add files...\" button. After adding files select one by one and set the appropriate file type. The series no is the number the movie has in the series: 14 in case of e.g. rogue adventures 14. The part number only has to be set if the movie is split in several parts.")); setPixmap(QWizard::LogoPixmap, QPixmap(":/shemov.png")); //files model setup - QStringList modelHeaders = QStringList() << tr("File name") << tr("File type") << tr("Size") << tr("Full path"); + QStringList modelHeaders = QStringList() << tr("File name") << tr("Size") << tr("File Type") << tr("Full path"); mFileModel = new WizardTreeModel(modelHeaders, this); SmTreeItem *root = new SmTreeItem(4); mMoviesItem= new SmTreeItem(QList<QVariant>() << tr("Movie files") << QVariant() << QVariant() << QVariant(), root); @@ -49,7 +52,6 @@ MovieInfoPage::MovieInfoPage(QWidget *parent) : QWizardPage(parent){ //files view mFileView = new QTreeView; mFileView->setModel(mFileModel); - mFileView->setHeaderHidden(true); //add + remove files QHBoxLayout *fileButtonLayout = new QHBoxLayout; @@ -65,6 +67,7 @@ MovieInfoPage::MovieInfoPage(QWidget *parent) : QWizardPage(parent){ QHBoxLayout *movieTitleLayout = new QHBoxLayout; QLabel *l1 = new QLabel(tr("Movie &title")); mTitle = new QLineEdit; + l1->setBuddy(mTitle); movieTitleLayout->addWidget(l1); movieTitleLayout->addWidget(mTitle); SeriesTreeModel *seriesModel = static_cast<SeriesTreeModel*>(SmModelSingleton::instance()->model("SeriesModel")); @@ -76,13 +79,14 @@ MovieInfoPage::MovieInfoPage(QWidget *parent) : QWizardPage(parent){ QHBoxLayout *numberLayout = new QHBoxLayout; QLabel *l2 = new QLabel(tr("File &type")); mFileType = new QComboBox; + l2->setBuddy(mFileType); mFileType->addItems(mFileModel->types()); numberLayout->addWidget(l2); numberLayout->addWidget(mFileType); numberLayout->addStretch(); connect(mFileType, SIGNAL(currentIndexChanged(QString)), this, SLOT(typeChanged(QString))); - //the numbers + //series, part + quality QLabel *l3 = new QLabel(tr("&Series no.")); mSeriesNo = new QSpinBox; l3->setBuddy(mSeriesNo); @@ -100,16 +104,41 @@ MovieInfoPage::MovieInfoPage(QWidget *parent) : QWizardPage(parent){ mQuality->setMaximum(10); numberLayout->addWidget(l5); numberLayout->addWidget(mQuality); - - //main layout + + //dvd + QHBoxLayout *dvdLayout = new QHBoxLayout; + mOnDvd = new QCheckBox(tr("Movie is on DVD")); + dvdLayout->addWidget(mOnDvd); + dvdLayout->addStretch(); + QLabel *l6 = new QLabel(tr("Dvd no.")); + dvdLayout->addWidget(l6); + mDvdNo = new QSpinBox; + mDvdNo->setMinimum(1); + dvdLayout->addWidget(mDvdNo); + connect(mOnDvd, SIGNAL(stateChanged(int)), this, SLOT(onDvd(int))); + mNextDvdNo = new QPushButton(tr("Get next")); + dvdLayout->addWidget(mNextDvdNo); + connect(mNextDvdNo, SIGNAL(clicked()), this, SLOT(setNextDvdNo())); + setNextDvdNo(); + mNextDvdNo->setChecked(false); + mDvdNo->setEnabled(false); + mNextDvdNo->setEnabled(false); + QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addWidget(mFileView); mainLayout->addLayout(fileButtonLayout); + mainLayout->addLayout(movieTitleLayout); mainLayout->addLayout(numberLayout); + mainLayout->addLayout(dvdLayout); setLayout(mainLayout); //expose data - //later... + registerField("title", mTitle); + registerField("seriesNo", mSeriesNo); + registerField("partNo", mPartno); + registerField("quality", mQuality); + registerField("dvdNo", mDvdNo); + } void MovieInfoPage::addFiles(){ @@ -126,11 +155,11 @@ void MovieInfoPage::addFiles(){ QModelIndex parent = QModelIndex(); itemData << fi.fileName() << fi.size() << QVariant() << fi.absoluteFilePath(); QString mimeType = Helper::mimeType(fi.absoluteFilePath()); - if(mimeType.startsWith("image")){ - itemData[WizardTreeModel::FileType] = WizardTreeModel::GeneralCover; + if(mimeType.startsWith("video")){ + itemData[WizardTreeModel::FileType] = WizardTreeModel::Movie; parent = mFileModel->find("Movie files"); }else{ - itemData[WizardTreeModel::FileType] = WizardTreeModel::Movie; + itemData[WizardTreeModel::FileType] = WizardTreeModel::GeneralCover; parent = mFileModel->find("Cover files"); } if(parent.isValid()){ @@ -138,6 +167,11 @@ void MovieInfoPage::addFiles(){ } } } + mFileView->expandAll(); + mFileView->resizeColumnToContents(0); + mFileView->resizeColumnToContents(1); + mFileView->resizeColumnToContents(2); + } void MovieInfoPage::removeFile(){ @@ -148,6 +182,11 @@ void MovieInfoPage::removeFile(){ mFileModel->removeRows(selected.at(0).row(), 1, selected.at(0).parent()); } +void MovieInfoPage::onDvd(int state){ + mDvdNo->setEnabled(state == Qt::Checked); + mNextDvdNo->setEnabled(state == Qt::Checked); +} + void MovieInfoPage::typeChanged(QString type){ QModelIndexList selected = mFileView->selectionModel()->selectedRows(); if(selected.isEmpty()){ @@ -170,6 +209,12 @@ void MovieInfoPage::typeChanged(QString type){ } +void MovieInfoPage::setNextDvdNo(){ + SeriesTreeModel *seriesTreeModel = static_cast<SeriesTreeModel*>(SmModelSingleton::instance()->model("SeriesModel")); + int nextdvd = seriesTreeModel->findNextDvdNo(); + mDvdNo->setValue(nextdvd + 1); +} + WizardTreeModel::WizardTreeModel(QStringList &headers, QObject *parent) : SmTreeModel(headers, parent){ mFileTypeMap.insert(1, tr("Movie")); mFileTypeMap.insert(2, tr("Front cover")); @@ -188,18 +233,30 @@ QVariant WizardTreeModel::data(const QModelIndex &index, int role) const{ SmTreeItem *item = static_cast<SmTreeItem*>(index.internalPointer()); if(role == Qt::DisplayRole){ if(index.column() == FileSize){ + if(item->parent() == root()){ + return QVariant(); + } QLocale l; return l.toString(item->data(FileSize).toLongLong()); } if(index.column() == FileType){ - return mFileTypeMap.value(index.data().toInt()); + return mFileTypeMap.value(item->data(FileType).toInt()); } return item->data(index.column()); } + if(role == Qt::TextAlignmentRole){ + if(index.column() == FileSize){ + return Qt::AlignRight; + } + return Qt::AlignLeft; + } if(role == FileNameRole){ return item->data(FileName); } if(role == FileSizeRole){ + if(item->parent() == root()){ + return QVariant(); + } return item->data(FileSize); } if(role == FileTypeRole){ @@ -221,6 +278,7 @@ int WizardTreeModel::typeId(const QString &value) const{ if(it.value() == value){ return it.key(); } + ++it; } return -1; } diff --git a/newmoviewizard.h b/newmoviewizard.h index a92d91d..e28a3a9 100644 --- a/newmoviewizard.h +++ b/newmoviewizard.h @@ -21,11 +21,13 @@ class QLineEdit; class QSpinBox; class QPushButton; class QComboBox; +class QCheckBox; class NewMovieWizard : public QWizard { Q_OBJECT public: explicit NewMovieWizard(QWidget *parent = 0); + void accept(); }; @@ -33,11 +35,14 @@ class MovieInfoPage : public QWizardPage { Q_OBJECT public: explicit MovieInfoPage(QWidget *parent = 0); + WizardTreeModel *model() { return mFileModel; } private slots: void addFiles(); void removeFile(); + void onDvd(int); void typeChanged(QString); + void setNextDvdNo(); private: QTreeView *mFileView; @@ -49,6 +54,8 @@ class MovieInfoPage : public QWizardPage { QPushButton *mAddFile; QPushButton *mRemoveFile; QComboBox *mFileType; + QCheckBox *mOnDvd; + QPushButton *mNextDvdNo; WizardTreeModel *mFileModel; SmTreeItem *mMoviesItem; SmTreeItem *mCoversItem; @@ -58,7 +65,7 @@ class WizardTreeModel : public SmTreeModel { Q_OBJECT public: enum CustomRoles { FileNameRole = Qt::UserRole + 1, FileSizeRole = Qt::UserRole + 2, FileTypeRole = Qt::UserRole + 3, FullPathRole = Qt::UserRole + 4 }; - enum Fields { FileName = 0, FileSize = 1, FileType = 3, FullPath = 4 }; + enum Fields { FileName = 0, FileSize = 1, FileType = 2, FullPath = 3 }; enum Types { Movie = 1, FrontCover = 2, BackCover = 3, GeneralCover = 4 }; explicit WizardTreeModel(QStringList &headers, QObject *parent = 0); virtual ~WizardTreeModel() {} diff --git a/seriestreemodel.cpp b/seriestreemodel.cpp index b521647..d5257bb 100644 --- a/seriestreemodel.cpp +++ b/seriestreemodel.cpp @@ -36,6 +36,8 @@ SeriesTreeModel::SeriesTreeModel(QStringList &headers, QObject *parent) : SmTree mSeriesPartFilesQuery->prepare("SELECT files.tfilename, files.cmd5sum FROM seriesparts, files WHERE seriesparts.iseriesparts_id = :id AND seriesparts.iseriesparts_id = files.iseriespart_id"); mSortedMovieListQuery = new QSqlQuery(mDb); mSortedMovieListQuery->prepare("SELECT files.tfilename, files.cmd5sum FROM series, seriesparts, files WHERE series.iseries_id = :id AND seriesparts.iseries_id = series.iseries_id AND seriesparts.iseriesparts_id = files.iseriespart_id AND files.sifiletype = 1 ORDER BY seriesparts.iseriespart, files.sifileno"); + mNextDvdNoQuery = new QSqlQuery(mDb); + mNextDvdNoQuery->prepare("SELECT MAX(idvd) FROM files"); populate(); } @@ -230,6 +232,15 @@ QFileInfoList SeriesTreeModel::findSortedMovies(const QModelIndex &from) const{ return retval; } +int SeriesTreeModel::findNextDvdNo() const{ + int dvdno = 0; + mNextDvdNoQuery->exec(); + while(mNextDvdNoQuery->next()){ + dvdno = mNextDvdNoQuery->value(0).toInt(); + } + return dvdno; +} + bool SeriesTreeModel::deleteFromSeries(const QModelIndex &what){ int nodeType = what.data(TypeRole).toInt(); QSqlQuery *query = 0; diff --git a/seriestreemodel.h b/seriestreemodel.h index 81c6d6a..416e43c 100644 --- a/seriestreemodel.h +++ b/seriestreemodel.h @@ -36,6 +36,7 @@ class SeriesTreeModel : public SmTreeModel { QFileInfoList findFiles(const QModelIndex &where) const; QFileInfoList findMovies(const QModelIndexList &from) const; QFileInfoList findSortedMovies(const QModelIndex &from) const; + int findNextDvdNo() const; //delete bool deleteFromSeries(const QModelIndex &what); @@ -58,6 +59,7 @@ class SeriesTreeModel : public SmTreeModel { QSqlQuery *mSeriesFilesQuery; QSqlQuery *mSeriesPartFilesQuery; QSqlQuery *mSortedMovieListQuery; + QSqlQuery *mNextDvdNoQuery; }; #endif // SERIESTREEMODEL_H @@ -47,6 +47,7 @@ #include "archivetreeview.h" #include "smmodelsingleton.h" #include "seriestreewidget.h" +#include "newmoviewizard.h" SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, flags), mOpenWithGroupFS(0), mOpenWithGroupAV(0) { qApp->setWindowIcon(QIcon(":/shemov.png")); @@ -106,6 +107,8 @@ SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, fla connect(mFSWidget->dirModel(), SIGNAL(layoutChanged()), this, SLOT(setFsFree())); connect(mFSWidget->dirModel(), SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SLOT(setFsFree())); + //NewMovieWizard = new NewMovieWizard(this); + QWidget *centralWidget = new QWidget; centralWidget->setLayout(mainLayout); setCentralWidget(centralWidget); @@ -245,6 +248,11 @@ void SheMov::showStatistics(){ dlg.exec(); } +void SheMov::newMovieWizard(){ + NewMovieWizard wiz(this); + wiz.exec(); +} + void SheMov::createStatusbar(){ QLabel *selSizeL = new QLabel(tr("Sel. Size")); mSelectedSize = new QLabel(tr("nothing selected yet")); @@ -370,6 +378,8 @@ void SheMov::createActions(){ connect(mCollapseAllSeriesA, SIGNAL(triggered()), mATree->seriesWidget()->seriesTree(), SLOT(collapseAll())); mExpandCurrentA = new QAction(tr("Expand"), this); connect(mExpandCurrentA, SIGNAL(triggered()), mATree->seriesWidget(), SLOT(expandCurrent())); + mNewMovieWizardA = new QAction(tr("Archive movie..."), this); + connect(mNewMovieWizardA, SIGNAL(triggered()), this, SLOT(newMovieWizard())); // misc mOpenWithMapperFS = new QSignalMapper(this); @@ -383,6 +393,8 @@ void SheMov::createMenus(){ QMenu *fileMenu = new QMenu(tr("&File"), this); fileMenu->addAction(mPlaySelectedFSA); fileMenu->addSeparator(); + fileMenu->addAction(mNewMovieWizardA); + fileMenu->addSeparator(); fileMenu->addAction(mQuitA); mEditFSMenu = new QMenu(tr("&Edit"), this); mEditFSMenu->addAction(mCdupA); @@ -27,6 +27,7 @@ class ArchiveViewWidget; class EditArchiveItemDialog; class ArchiveItemEditDialog; class ArchiveTreeView; +class NewMovieWizard; class SheMov : public QMainWindow { Q_OBJECT @@ -47,6 +48,7 @@ class SheMov : public QMainWindow { void setFsFree(); void aboutShemov(); void showStatistics(); + void newMovieWizard(); private: void createStatusbar(); @@ -102,6 +104,7 @@ class SheMov : public QMainWindow { QAction *mExpandAllSeriesA; QAction *mCollapseAllSeriesA; QAction *mExpandCurrentA; + QAction *mNewMovieWizardA; QActionGroup *mOpenWithGroupFS; QActionGroup *mOpenWithGroupAV; @@ -129,6 +132,7 @@ class SheMov : public QMainWindow { MovieModel *mMovieModel; ListModel *mGenreModel; ListModel *mActorModel; + NewMovieWizard *mNewMovieWizard; }; #endif diff --git a/smtreemodel.cpp b/smtreemodel.cpp index 2026902..bc7b010 100644 --- a/smtreemodel.cpp +++ b/smtreemodel.cpp @@ -153,11 +153,11 @@ void SmTreeModel::reparent(const QModelIndex &idx, const QModelIndex &newParent) }else{ parentItem = static_cast<SmTreeItem*>(newParent.internalPointer()); } - removeRows(idx.row(), 1, idx.parent()); QList<QVariant> data; for(int i = 0; i < item->columnCount(); ++i){ data << item->data(i); } + removeRows(idx.row(), 1, idx.parent()); addRow(data, newParent); } @@ -171,7 +171,7 @@ bool SmTreeModel::insertRows(int row, int count, const QModelIndex &parent){ beginInsertRows(parent, row, row + count - 1); for(int i = row; i < row + count; ++i){ - SmTreeItem *newItem = new SmTreeItem(mRootItem->columnCount()); + SmTreeItem *newItem = new SmTreeItem(mRootItem->columnCount(), parentItem); retval = parentItem->insertChild(i, newItem); } endInsertRows(); @@ -204,9 +204,9 @@ bool SmTreeModel::addRow(const QList<QVariant> &data, const QModelIndex &parent) if(insertRows(parentItem->childCount(), 1, parent)){ SmTreeItem *child = parentItem->child(parentItem->childCount() - 1); - delete child; - SmTreeItem *newChild = new SmTreeItem(data, parentItem); - child = newChild; + for(int i = 0; i < data.count(); ++i){ + child->setData(i, data.at(i)); + } QModelIndex start = index(parentItem->childCount() - 1, 0, parent); QModelIndex end = index(parentItem->childCount() - 1, parentItem->columnCount() - 1, parent); emit dataChanged(start, end); |