diff options
author | Arno <am@disconnect.de> | 2011-05-14 13:26:41 +0200 |
---|---|---|
committer | Arno <am@disconnect.de> | 2011-05-14 13:26:41 +0200 |
commit | 3a70006747322708b81b91f52b447abb33d91df0 (patch) | |
tree | 1a8b53c7990bf2de08f3b2dc36de9a62fda3bc00 | |
parent | a6a1c319ee5a77cc8341eaeccc72da35cbcf17c5 (diff) | |
download | SheMov-3a70006747322708b81b91f52b447abb33d91df0.tar.gz SheMov-3a70006747322708b81b91f52b447abb33d91df0.tar.bz2 SheMov-3a70006747322708b81b91f52b447abb33d91df0.zip |
Use new field IsLocal in SeriesTreeModel
Use field IsLocal in SeriesTreeModel when filtering local or
archived files.
-rw-r--r-- | archivetreeview.cpp | 22 | ||||
-rw-r--r-- | seriestreemodel.cpp | 9 | ||||
-rw-r--r-- | seriestreemodel.h | 4 | ||||
-rw-r--r-- | seriestreewidget.cpp | 43 | ||||
-rw-r--r-- | seriestreewidget.h | 3 |
5 files changed, 58 insertions, 23 deletions
diff --git a/archivetreeview.cpp b/archivetreeview.cpp index b2ba254..7587a6a 100644 --- a/archivetreeview.cpp +++ b/archivetreeview.cpp @@ -103,25 +103,11 @@ ArchiveTreeView::ArchiveTreeView(QWidget *parent) : QWidget(parent){ } void ArchiveTreeView::setFileViewMode(int mode){ - switch(mode){ - case FilesTreeModel::Archived: - case FilesTreeModel::Local: - mSeriesWidget->setEnabled(false); - break; - case FilesTreeModel::Normal: - mSeriesWidget->setEnabled(true); - break; - default: - ; - } - mFilesWidget->resetSize(); - mFilesModel->setMode(mode); - if(mode == FilesTreeModel::Normal){ - currentChanged(QItemSelection(), QItemSelection()); - } - mFilesWidget->filesTree()->expandAll(); - mFilesWidget->filesTree()->header()->resizeSections(QHeaderView::ResizeToContents); + SeriesTreeModel *seriesModel = static_cast<SeriesTreeModel*>(SmGlobals::instance()->model("SeriesModel")); + seriesModel->setRowFilter(mode); + mSeriesWidget->seriesProxy()->invalidate(); constructWindowTitle(); + mSeriesWidget->expandItems(); } void ArchiveTreeView::cleanDatabase(const QString &table){ diff --git a/seriestreemodel.cpp b/seriestreemodel.cpp index ca8e10d..a0dfebf 100644 --- a/seriestreemodel.cpp +++ b/seriestreemodel.cpp @@ -17,7 +17,7 @@ #include "smtreeitem.h" #include "helper.h" -SeriesTreeModel::SeriesTreeModel(QStringList &headers, QObject *parent) : SmTreeModel(headers, parent){ +SeriesTreeModel::SeriesTreeModel(QStringList &headers, QObject *parent) : SmTreeModel(headers, parent), mRowFilter(All) { mDb = QSqlDatabase::database("treedb"); mSeriesPartsQuery = new QSqlQuery(mDb); mSeriesPartsQuery->prepare("SELECT iseriesparts_id, iseriespart, bfavorite, tsubtitle FROM seriesparts WHERE iseries_id = :id ORDER BY iseriespart"); @@ -152,6 +152,9 @@ QVariant SeriesTreeModel::data(const QModelIndex &index, int role) const{ if(role == SubtitleRole){ return item->data(Subtitle); } + if(role == IsLocalRole){ + return item->data(IsLocal); + } return QVariant(); } @@ -409,7 +412,7 @@ void SeriesTreeModel::setMappingFilter(const QString &filter, const QString &tab QSqlQuery seriesIdQuery(seriesIdTemplate, mDb); while(seriesIdQuery.next()){ QList<QVariant> seriesData; - seriesData << seriesIdQuery.value(1) << seriesIdQuery.value(0) << QVariant() << QVariant() << Series << false << QVariant(); + seriesData << seriesIdQuery.value(1) << seriesIdQuery.value(0) << QVariant() << QVariant() << Series << false << QVariant() << QVariant(); SmTreeItem *seriesItem = new SmTreeItem(seriesData, rootItem); rootItem->appendChild(seriesItem); QString partsQueryString = seriesPartsTemplate.arg(table).arg(ids.join(",")); @@ -553,7 +556,7 @@ void SeriesTreeModel::populate(){ while(mSeriesPartsQuery->next()){ QList<QVariant> partData; partData << seriesData.at(Name) << seriesData.at(SeriesId) << mSeriesPartsQuery->value(0) << mSeriesPartsQuery->value(1) << Part << mSeriesPartsQuery->value(2) << mSeriesPartsQuery->value(3); - partData << hasLocals(seriesData.at(1).toInt()); + partData << hasLocals(mSeriesPartsQuery->value(0).toInt()); SmTreeItem *partItem = new SmTreeItem(partData, seriesItem); seriesItem->appendChild(partItem); mSeriesPartSeriesMap.insert(mSeriesPartsQuery->value(0).toInt(), seriesData.at(1).toInt()); diff --git a/seriestreemodel.h b/seriestreemodel.h index 348ff2c..aa40ce3 100644 --- a/seriestreemodel.h +++ b/seriestreemodel.h @@ -25,6 +25,7 @@ class SeriesTreeModel : public SmTreeModel { enum Types { Series, Part, NewSeries }; enum QueryType { NumericQuery, TextQuery }; enum { NumFields = 8 }; + enum RowFilter { All = 0, Archived = 1, Local = 2 }; explicit SeriesTreeModel(QStringList &headers, QObject *parent = 0); ~SeriesTreeModel(); @@ -33,6 +34,8 @@ class SeriesTreeModel : public SmTreeModel { QVariant data(const QModelIndex &index, int role) const; bool setData(const QModelIndex &index, const QVariant &value, int role); QList<QVariant> childrenColumnList(const QModelIndex &parent, int column) const; + int rowFilter() const { return mRowFilter; } + void setRowFilter(int rowFilter) { mRowFilter = rowFilter; } //find QModelIndex findValue(const QVariant &value, const QModelIndex &parent = QModelIndex(), int searchColumn = 0, int indexColumn = -1) const; @@ -93,6 +96,7 @@ class SeriesTreeModel : public SmTreeModel { QHash<int, QString> mUpdateGenericMap; QColor mFavoriteColor; QString mUpdateGenericTemplate; + int mRowFilter; }; #endif // SERIESTREEMODEL_H diff --git a/seriestreewidget.cpp b/seriestreewidget.cpp index dd986b3..5a97587 100644 --- a/seriestreewidget.cpp +++ b/seriestreewidget.cpp @@ -337,7 +337,11 @@ void SeriesTreeWidget::itemCollaped(const QModelIndex &what){ } void SeriesTreeWidget::expandItems(const QStringList &items){ - foreach(QString s, items){ + QStringList expand = items; + if(items.isEmpty()){ + expand = mExpandedItems; + } + foreach(QString s, expand){ QModelIndex idx = mProxy->mapFromSource(mModel->findValue(s)); mView->expand(idx); } @@ -482,6 +486,43 @@ bool SeriesTreeSortModel::lessThan(const QModelIndex &left, const QModelIndex &r return QSortFilterProxyModel::lessThan(left, right); } +bool SeriesTreeSortModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const { + SeriesTreeModel *seriesModel = static_cast<SeriesTreeModel*>(sourceModel()); + int rowFilter = seriesModel->rowFilter(); + QModelIndex curIdx = sourceModel()->index(source_row, 0, source_parent); + QString name = curIdx.data(SeriesTreeModel::NameRole).toString(); + QRegExp filterRe = filterRegExp(); + if(rowFilter == SeriesTreeModel::All){ + if(filterRe.isEmpty()){ + return true; + }else{ + return (filterRe.indexIn(name) != -1); + } + } + if(!curIdx.isValid()){ + return true; + } + int type = curIdx.data(SeriesTreeModel::TypeRole).toInt(); + bool filterLocal = (rowFilter == SeriesTreeModel::Local); + if(type == SeriesTreeModel::Series){ + int row = 0; + QModelIndex child = curIdx.child(row, 0); + while(child.isValid()){ + bool hasLocals = child.data(SeriesTreeModel::IsLocalRole).toBool(); + if(hasLocals == filterLocal){ + return (filterRe.indexIn(name) != -1); + } + child = curIdx.child(++row, 0); + } + }else if(type == SeriesTreeModel::Part){ + bool accept = (curIdx.data(SeriesTreeModel::IsLocalRole).toBool() == filterLocal); + if(accept){ + return (filterRe.indexIn(name) != -1); + } + } + return false; +} + AddCoverDialog::AddCoverDialog(QWidget *parent, Qt::WindowFlags f) : QDialog(parent, f){ //File selection QLabel *l1 = new QLabel(tr("Select file")); diff --git a/seriestreewidget.h b/seriestreewidget.h index 18964d0..9c2438e 100644 --- a/seriestreewidget.h +++ b/seriestreewidget.h @@ -59,13 +59,13 @@ class SeriesTreeWidget : public QWidget { void setFilterMode(int mode); void filter(); void filterFavorites(bool checked); + void expandItems(const QStringList &items = QStringList()); private slots: void clearFilter(); void resort(); void itemExpanded(const QModelIndex &); void itemCollaped(const QModelIndex &); - void expandItems(const QStringList &items); void editItem(); void producerFinished(QStringListModel *model); @@ -118,6 +118,7 @@ class SeriesTreeSortModel : public QSortFilterProxyModel { protected: virtual bool lessThan(const QModelIndex &left, const QModelIndex &right) const; + virtual bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const; }; class AddCoverDialog : public QDialog { |