From ff8fdb92b8c2dfaa4818150d75c32fc303b438cb Mon Sep 17 00:00:00 2001 From: Arno Date: Wed, 28 Jul 2010 22:21:38 +0200 Subject: Reset NewMovieWizard Well, the point of this commit was to have one NewMovieWizard in memory all the time and just show it when it's needed. For this several things were necessary: 1. implement initializePage() for every QWizardPage. For this I had to implement reset functions in some models. 2. setOption(QWizard::IndependentPages, true) in Wizard constructor. 3. Make NewMovieWizard a member of SheMov... Well, it was, already, but I didn't remove the ptr. The good news: the Wizard works. Bad News: 1. Program crashes in ArchiveViewWizard::currentChanged (see TODOS) 2. Cover files also have a quality Attribute attached. --- TODOS | 11 ++++++++++- newmoviewizard.cpp | 30 ++++++++++++++++++++++++------ newmoviewizard.h | 3 +++ seriestreewidget.cpp | 17 +++++++++++++++++ seriestreewidget.h | 1 + shemov.cpp | 8 ++++++-- shemov.h | 1 + 7 files changed, 62 insertions(+), 9 deletions(-) diff --git a/TODOS b/TODOS index 8f37176..7a60061 100644 --- a/TODOS +++ b/TODOS @@ -22,10 +22,19 @@ SheMov (MainWindow) TODOS: -File properties for TreeView --Fix statistics menu! -Finish this file -Fix Unable to free statement on exit +TODOS 20100728: +-Whenn adding covers via NewMovieWizard covers have quality +-CRASH in ArchiveTreeWidget::currentChanged. This is totally +borked. Revisit and revamp, rename SeriesWidget::mapToSource +or make it virtual, maybe add some isValid() +-implement some moveToIncoming() or something for debugging + + + + GOOD FILES TO REMOVE: *archiveeditdialog *listeditor diff --git a/newmoviewizard.cpp b/newmoviewizard.cpp index 9a47a64..4b8d728 100644 --- a/newmoviewizard.cpp +++ b/newmoviewizard.cpp @@ -36,6 +36,7 @@ NewMovieWizard::NewMovieWizard(QWidget *parent) : QWizard(parent){ addPage(new MovieInfoPage); addPage(new MovieMappingPage("actors")); addPage(new MovieMappingPage("genres")); + setOption(QWizard::IndependentPages, true); } void NewMovieWizard::accept(){ @@ -120,12 +121,7 @@ MovieInfoPage::MovieInfoPage(QWidget *parent) : QWizardPage(parent){ //files model setup 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() << tr("Movie files") << QVariant() << QVariant() << QVariant(), root); - root->appendChild(mMoviesItem); - mCoversItem = new SmTreeItem(QList() << tr("Cover files") << QVariant() << QVariant() << QVariant(), root); - root->appendChild(mCoversItem); - mFileModel->setRoot(root); + initModel(); //files view mFileView = new QTreeView; @@ -221,6 +217,15 @@ MovieInfoPage::MovieInfoPage(QWidget *parent) : QWizardPage(parent){ registerField("onDvd", mOnDvd); } +void MovieInfoPage::initializePage(){ + initModel(); + mTitle->clear(); + mSeriesNo->setValue(1); + mPartno->setValue(1); + mQuality->setValue(8); + mOnDvd->setChecked(false); +} + void MovieInfoPage::addFiles(){ QSettings s; QString startDir = s.value("paths/selecteddir", QDir::homePath()).toString(); @@ -295,6 +300,15 @@ void MovieInfoPage::setNextDvdNo(){ mDvdNo->setValue(nextdvd + 1); } +void MovieInfoPage::initModel(){ + SmTreeItem *root = new SmTreeItem(4); + mMoviesItem= new SmTreeItem(QList() << tr("Movie files") << QVariant() << QVariant() << QVariant(), root); + root->appendChild(mMoviesItem); + mCoversItem = new SmTreeItem(QList() << tr("Cover files") << QVariant() << QVariant() << QVariant(), root); + root->appendChild(mCoversItem); + mFileModel->setRoot(root); +} + MovieMappingPage::MovieMappingPage(const QString &table, QWidget *parent) : QWizardPage(parent){ QString title = QString(tr("Edit %1")).arg(table); QString subTitle = QString(tr("Edit %1 by adding them from the text field below")).arg(table); @@ -308,6 +322,10 @@ MovieMappingPage::MovieMappingPage(const QString &table, QWidget *parent) : QWiz setLayout(mainLayout); } +void MovieMappingPage::initializePage(){ + model()->setStringList(QStringList()); +} + WizardTreeModel::WizardTreeModel(QStringList &headers, QObject *parent) : SmTreeModel(headers, parent){ FilesTreeModel *filesModel = static_cast(SmGlobals::instance()->model("FilesModel")); mFileTypeMap = filesModel->fileTypes(); diff --git a/newmoviewizard.h b/newmoviewizard.h index 7c671cd..d79531f 100644 --- a/newmoviewizard.h +++ b/newmoviewizard.h @@ -41,6 +41,7 @@ class MovieInfoPage : public QWizardPage { public: explicit MovieInfoPage(QWidget *parent = 0); WizardTreeModel *model() { return mFileModel; } + virtual void initializePage(); private slots: void addFiles(); @@ -48,6 +49,7 @@ class MovieInfoPage : public QWizardPage { void onDvd(int); void typeChanged(QString); void setNextDvdNo(); + void initModel(); private: QTreeView *mFileView; @@ -71,6 +73,7 @@ class MovieMappingPage : public QWizardPage { public: explicit MovieMappingPage(const QString &table, QWidget *parent = 0); MappingTableItemModel *model() { return mWidget->model(); } + virtual void initializePage(); private: MappingTableWidget *mWidget; diff --git a/seriestreewidget.cpp b/seriestreewidget.cpp index a124450..7e5d41f 100644 --- a/seriestreewidget.cpp +++ b/seriestreewidget.cpp @@ -95,6 +95,23 @@ void SeriesTreeWidget::newSeries(){ } } +void SeriesTreeWidget::seriesAdded(QString seriesName, int seriesPart, bool resort){ + if(resort){ + mProxy->invalidate(); + } + QModelIndex destIdx = mModel->findValue(seriesName); + if(destIdx.isValid()){ + QModelIndex seriesPartIdx = mModel->findValue(seriesPart, destIdx, SeriesTreeModel::SeriesPart); + if(seriesPartIdx.isValid()){ + destIdx = seriesPartIdx; + } + } + if(destIdx.isValid()){ + QModelIndex proxyIndex = mProxy->mapFromSource(destIdx); + mView->selectionModel()->setCurrentIndex(proxyIndex, QItemSelectionModel::ClearAndSelect); + } +} + void SeriesTreeWidget::deleteFromSeries(){ QModelIndexList selected = mView->selectionModel()->selectedRows(); if(selected.isEmpty()){ diff --git a/seriestreewidget.h b/seriestreewidget.h index 815b5f5..fd850b4 100644 --- a/seriestreewidget.h +++ b/seriestreewidget.h @@ -33,6 +33,7 @@ class SeriesTreeWidget : public QWidget { public slots: void newSeries(); + void seriesAdded(const QString seriesName, int seriesPart, bool resort = true); void deleteFromSeries(); void readSettings(); void writeSettings(); diff --git a/shemov.cpp b/shemov.cpp index 03b9271..6c443de 100644 --- a/shemov.cpp +++ b/shemov.cpp @@ -61,6 +61,10 @@ SheMov::SheMov(QWidget *parent, Qt::WindowFlags flags) : QMainWindow(parent, fla connect(mATree->filesWidget()->filesTree()->selectionModel(), SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)), this, SLOT(updateSelectionCount(const QItemSelection &, const QItemSelection &))); connect(mATree->seriesWidget()->seriesTree()->selectionModel(), SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(updateSelectionCount(QItemSelection,QItemSelection))); + //newmoviewizard + mNewMovieWizard = new NewMovieWizard(this); + connect(mNewMovieWizard, SIGNAL(seriesAdded(QString,int)), mATree->seriesWidget(), SLOT(seriesAdded(QString,int))); + QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->addWidget(mTab); @@ -207,8 +211,8 @@ void SheMov::showStatistics(){ } void SheMov::newMovieWizard(){ - NewMovieWizard wiz(this); - wiz.exec(); + mNewMovieWizard->restart(); + mNewMovieWizard->show(); } void SheMov::setSize(qint64 size){ diff --git a/shemov.h b/shemov.h index 4ba2f48..ac0332e 100644 --- a/shemov.h +++ b/shemov.h @@ -119,6 +119,7 @@ class SheMov : public QMainWindow { QMenu *mTreeViewMenu; QAction *mEditFSMenuA; + //widgets + dialogs QTabWidget *mTab; FilesystemWidget *mFSWidget; ArchiveTreeView *mATree; -- cgit v1.2.3-70-g09d2