summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2011-05-22 05:54:07 +0200
committerArno <am@disconnect.de>2011-05-22 05:54:07 +0200
commit47d30d5f4838a1980545c36308858efc7d5bde0d (patch)
treeb1137fa0db924409df7eda40f8ed08e5fa30ae1e
parent9b2f7da813faea42587c0a78435a41aa338471fe (diff)
downloadSheMov-47d30d5f4838a1980545c36308858efc7d5bde0d.tar.gz
SheMov-47d30d5f4838a1980545c36308858efc7d5bde0d.tar.bz2
SheMov-47d30d5f4838a1980545c36308858efc7d5bde0d.zip
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.
-rw-r--r--archivetreeview.cpp5
-rw-r--r--archivetreeview.h1
-rw-r--r--filestreewidget.cpp17
-rw-r--r--seriestreemodel.cpp18
-rw-r--r--seriestreemodel.h4
-rw-r--r--smtreemodel.cpp26
-rw-r--r--smtreemodel.h1
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<SeriesTreeModel*>(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<int> 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<SeriesTreeModel*>(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<SmTreeItem*>(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<SmTreeItem*>(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<SmTreeItem*>(idx.internalPointer());
- if(newParent == QModelIndex()){
- parentItem = root();
- }else{
- parentItem = static_cast<SmTreeItem*>(newParent.internalPointer());
- }
QList<QVariant> 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);