summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArno <am@disconnect.de>2011-05-14 13:26:41 +0200
committerArno <am@disconnect.de>2011-05-14 13:26:41 +0200
commit3a70006747322708b81b91f52b447abb33d91df0 (patch)
tree1a8b53c7990bf2de08f3b2dc36de9a62fda3bc00
parenta6a1c319ee5a77cc8341eaeccc72da35cbcf17c5 (diff)
downloadSheMov-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.cpp22
-rw-r--r--seriestreemodel.cpp9
-rw-r--r--seriestreemodel.h4
-rw-r--r--seriestreewidget.cpp43
-rw-r--r--seriestreewidget.h3
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 {