From 47d30d5f4838a1980545c36308858efc7d5bde0d Mon Sep 17 00:00:00 2001 From: Arno Date: Sun, 22 May 2011 05:54:07 +0200 Subject: Update IsLocal when setting DVD no. The field IsLocal in the SeriesTreeModel is now properly updated when the DVD no. changes. It still doesn't propagate to the file view, though. --- archivetreeview.cpp | 5 +++++ archivetreeview.h | 1 + filestreewidget.cpp | 17 +++++++++++------ seriestreemodel.cpp | 18 ++++++++++++++---- seriestreemodel.h | 4 ++-- smtreemodel.cpp | 26 ++++++++++++++++++++------ smtreemodel.h | 1 + 7 files changed, 54 insertions(+), 18 deletions(-) diff --git a/archivetreeview.cpp b/archivetreeview.cpp index 9bb5aae..65eb11f 100644 --- a/archivetreeview.cpp +++ b/archivetreeview.cpp @@ -57,6 +57,7 @@ ArchiveTreeView::ArchiveTreeView(QWidget *parent) : QWidget(parent){ connect(selModel, SIGNAL(selectionChanged(QItemSelection,QItemSelection)), this, SLOT(currentChanged(QItemSelection,QItemSelection))); connect(mSeriesWidget->seriesTree(), SIGNAL(doubleClicked(QModelIndex)), this, SLOT(playSelected())); mSeriesModel = static_cast(SmGlobals::instance()->model("SeriesModel")); + connect(mSeriesModel, SIGNAL(localsChanged()), this, SLOT(invalidateSorting())); // files view mFilesWidget = new FilesTreeWidget; @@ -306,6 +307,10 @@ void ArchiveTreeView::playSelected(const QString &preferred){ QProcess::startDetached(program, args); } +void ArchiveTreeView::invalidateSorting(){ + mSeriesWidget->seriesProxy()->invalidate(); +} + void ArchiveTreeView::constructWindowTitle(){ QString modeString = mFilesModel->modeName(mFilesModel->mode()); mWindowTitle = QString("Movie Archive - [%1]").arg(modeString); diff --git a/archivetreeview.h b/archivetreeview.h index 0de5782..15a27c5 100644 --- a/archivetreeview.h +++ b/archivetreeview.h @@ -58,6 +58,7 @@ class ArchiveTreeView : public QWidget void currentChanged(const QItemSelection &selected, const QItemSelection &deselected); void setMappingItems(const QList seriesPartIds, MappingTableModel *model, MappingTableWidget *widget); void playSelected(const QString &preferred = QString()); + void invalidateSorting(); private: //functions diff --git a/filestreewidget.cpp b/filestreewidget.cpp index 6999c06..678abb1 100644 --- a/filestreewidget.cpp +++ b/filestreewidget.cpp @@ -230,17 +230,22 @@ void FilesTreeWidget::edit(int column){ value = QInputDialog::getInt(this, msg, msg, sIdxes.first().data().toInt(), -1, 10, 1, &dialogOk); } if(column == FilesTreeModel::DvdNo){ - SeriesTreeModel *seriesModel = static_cast(SmGlobals::instance()->model("SeriesModel")); - int nextDvdNo = seriesModel->findNextDvdNo(); + int nextDvdNo = mSeriesModel->findNextDvdNo(); value = QInputDialog::getInt(this, msg, msg, nextDvdNo, -1, 2147483647, 1, &dialogOk); } if(dialogOk){ foreach(QModelIndex curIdx, sIdxes){ mModel->setData(curIdx, value, Qt::EditRole); - } - // reload the view - if((column == FilesTreeModel::DvdNo) && (mModel->mode() != FilesTreeModel::Normal)){ - mModel->setMode(mModel->mode()); + if(column == FilesTreeModel::DvdNo){ + if(curIdx.data(FilesTreeModel::FileTypeRole).toInt() == FilesTreeModel::Movie){ + QModelIndex seriesIdx = mSeriesModel->findRecursive(curIdx.data(FilesTreeModel::SeriesPartIdRole), SeriesTreeModel::SeriesPartId, mSeriesModel->index(0, 0, QModelIndex())); + if(seriesIdx.isValid()){ + QModelIndex isLocalIdx = mSeriesModel->index(seriesIdx.row(), SeriesTreeModel::IsLocal, seriesIdx.parent()); + bool isLocal = (value > -1) ? false : true; + mSeriesModel->setData(isLocalIdx, isLocal, Qt::EditRole); + } + } + } } } } diff --git a/seriestreemodel.cpp b/seriestreemodel.cpp index a0dfebf..b850b9c 100644 --- a/seriestreemodel.cpp +++ b/seriestreemodel.cpp @@ -181,11 +181,13 @@ bool SeriesTreeModel::setData(const QModelIndex &index, const QVariant &value, i } } } - }else if(index.data(TypeRole).toInt() == NewSeries){ - return setNewSeries(index, value); - }else{ - return updateGeneric(index, value); + }else if(index.column() == IsLocal){ + setLocal(index, value); } + }else if(index.data(TypeRole).toInt() == NewSeries){ + return setNewSeries(index, value); + }else{ + return updateGeneric(index, value); } return false; } @@ -671,3 +673,11 @@ bool SeriesTreeModel::updateGeneric(const QModelIndex &source, const QVariant &v mDb.rollback(); return false; } + +bool SeriesTreeModel::setLocal(const QModelIndex &source, const QVariant &value){ + SmTreeItem *item = static_cast(source.internalPointer()); + item->setData(IsLocal, value); + emit dataChanged(source, source); + emit localsChanged(); + return true; +} diff --git a/seriestreemodel.h b/seriestreemodel.h index aa40ce3..005e2c7 100644 --- a/seriestreemodel.h +++ b/seriestreemodel.h @@ -60,6 +60,7 @@ class SeriesTreeModel : public SmTreeModel { signals: void needResort(); void consistencyMsg(const QString &msg); + void localsChanged(); public slots: void readSettings(); @@ -71,8 +72,7 @@ class SeriesTreeModel : public SmTreeModel { bool renameSeries(const QModelIndex &source, const QVariant &value); bool setNewSeries(const QModelIndex &source, const QVariant &value); bool updateGeneric(const QModelIndex &source, const QVariant &value); - //bool setFavorite(const QModelIndex &source, const QVariant &value); - //bool setSubtitle(const QModelIndex &source, const QVariant &value); + bool setLocal(const QModelIndex &source, const QVariant &value); QString archivePath(const QString &fileName, const QString &md5sum) const; QSqlDatabase mDb; QSqlQuery *mSeriesPartsQuery; diff --git a/smtreemodel.cpp b/smtreemodel.cpp index 8b51bab..bcd1a8a 100644 --- a/smtreemodel.cpp +++ b/smtreemodel.cpp @@ -136,6 +136,26 @@ QModelIndex SmTreeModel::find(const QVariant &value, int column, const QModelInd return QModelIndex(); } +QModelIndex SmTreeModel::findRecursive(const QVariant &value, int column, const QModelIndex &parent) const{ + SmTreeItem *parentItem = 0; + if(!parent.isValid()){ + return QModelIndex(); + }else{ + parentItem = static_cast(parent.internalPointer()); + } + for(int i = 0; i < parentItem->childCount(); ++i){ + SmTreeItem *child = parentItem->child(i); + if(child->childCount()){ + return findRecursive(value, column, createIndex(i, column, child)); + } + if(child->data(column) == value){ + return createIndex(i, column, child); + } + } + QModelIndex next = index(parent.row() + 1, column, parent.parent()); + return findRecursive(value, column, next); +} + bool SmTreeModel::setRoot(SmTreeItem *rootItem){ if(mRootItem){ beginResetModel(); @@ -159,13 +179,7 @@ void SmTreeModel::reparent(const QModelIndex &idx, const QModelIndex &newParent) if(!idx.isValid()){ return; } - SmTreeItem *parentItem = 0; SmTreeItem *item = static_cast(idx.internalPointer()); - if(newParent == QModelIndex()){ - parentItem = root(); - }else{ - parentItem = static_cast(newParent.internalPointer()); - } QList data; for(int i = 0; i < item->columnCount(); ++i){ data << item->data(i); diff --git a/smtreemodel.h b/smtreemodel.h index f23e767..e097d60 100644 --- a/smtreemodel.h +++ b/smtreemodel.h @@ -37,6 +37,7 @@ class SmTreeModel : public QAbstractItemModel { virtual QVariant data(const QModelIndex &index, int role) const; virtual bool setData(const QModelIndex &index, const QVariant &value, int role); virtual QModelIndex find(const QVariant &value, int column = 0, const QModelIndex &parent = QModelIndex()) const; + virtual QModelIndex findRecursive(const QVariant &value, int column = 0, const QModelIndex &parent = QModelIndex()) const; // root + parent item bool setRoot(SmTreeItem *rootItem); -- cgit v1.2.3-70-g09d2