diff options
author | Arno <am@disconnect.de> | 2010-07-04 10:13:17 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2010-07-04 10:13:17 +0200 |
commit | 5dd4fe05df7619fb68356613b698fb373f4fccee (patch) | |
tree | d74adce3b2a1c56448e9dea08a23c51f83decedb /newmoviewizard.cpp | |
parent | 8c6051a16b12f265d7a30b4b24da10b3ba63edae (diff) | |
download | SheMov-5dd4fe05df7619fb68356613b698fb373f4fccee.tar.gz SheMov-5dd4fe05df7619fb68356613b698fb373f4fccee.tar.bz2 SheMov-5dd4fe05df7619fb68356613b698fb373f4fccee.zip |
Fix MovieInfoPage
The first page of NewMovieWizard gave me quite a headache. It crashed
with a segmentation fault because of exposing mDvdNo via registerField()
without actually assigning a QCheckBox to it. The backtrace isn't very
helpful in such a case.
I also fixed some bugs on the way:
1. use SmTreeItem::setData in SmTreeModel::addRow instead of deleting
the old item and creating a new one. This way I don't need to take care
of the parent.
2. get data of old item in SmTreeModel::reparent before calling
removeRows. This call deletes the item.
3. Fix column alignments in WizardTreeModel for size column
Diffstat (limited to 'newmoviewizard.cpp')
-rw-r--r-- | newmoviewizard.cpp | 82 |
1 files changed, 70 insertions, 12 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; } |