summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Tomaz Canabrava <tomaz.canabrava@intel.com>2014-09-17 17:15:37 -0300
committerGravatar Dirk Hohndel <dirk@hohndel.org>2014-09-17 15:28:37 -0700
commitf1e7c12e8a5e39c32ad74d9b0aee4cb0c0529159 (patch)
tree55b73f134fe9b24ecac90543c992a06aff931982
parent4e3689370d8e81716759a5b29934c35cf848a379 (diff)
downloadsubsurface-f1e7c12e8a5e39c32ad74d9b0aee4cb0c0529159.tar.gz
Correctly filter dives. (trips are always shown)
This patch correctly filter dives based on tags, but it will also keep showing all the empty trips. Signed-off-by: Tomaz Canabrava <tomaz.canabrava@intel.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--qt-ui/divelistview.cpp6
-rw-r--r--qt-ui/models.cpp18
2 files changed, 17 insertions, 7 deletions
diff --git a/qt-ui/divelistview.cpp b/qt-ui/divelistview.cpp
index d7b48ce77..273517ffb 100644
--- a/qt-ui/divelistview.cpp
+++ b/qt-ui/divelistview.cpp
@@ -34,7 +34,7 @@ DiveListView::DiveListView(QWidget *parent) : QTreeView(parent), mouseClickSelec
setItemDelegate(new DiveListDelegate(this));
setUniformRowHeights(true);
setItemDelegateForColumn(DiveTripModel::RATING, new StarWidgetsDelegate(this));
- QSortFilterProxyModel *model = new QSortFilterProxyModel(this);
+ TagFilterSortModel *model = new TagFilterSortModel(this);
model->setSortRole(DiveTripModel::SORT_ROLE);
model->setFilterKeyColumn(-1); // filter all columns
model->setFilterCaseSensitivity(Qt::CaseInsensitive);
@@ -57,8 +57,8 @@ DiveListView::DiveListView(QWidget *parent) : QTreeView(parent), mouseClickSelec
searchBox.installEventFilter(this);
searchBox.hide();
- connect(showSearchBox, SIGNAL(triggered(bool)), this, SLOT(showSearchEdit()));
- connect(&searchBox, SIGNAL(textChanged(QString)), model, SLOT(setFilterFixedString(QString)));
+// connect(showSearchBox, SIGNAL(triggered(bool)), this, SLOT(showSearchEdit()));
+// connect(&searchBox, SIGNAL(textChanged(QString)), model, SLOT(setFilterFixedString(QString)));
}
// # Date Rtg Dpth Dur Tmp Wght Suit Cyl Gas SAC OTU CNS Loc
diff --git a/qt-ui/models.cpp b/qt-ui/models.cpp
index def258a5f..f1f1f636c 100644
--- a/qt-ui/models.cpp
+++ b/qt-ui/models.cpp
@@ -2146,6 +2146,7 @@ bool TagFilterModel::setData(const QModelIndex &index, const QVariant &value, in
{
if(role == Qt::CheckStateRole){
checkState[index.row()] = value.toBool();
+ dataChanged(index,index);
return true;
}
return false;
@@ -2153,7 +2154,7 @@ bool TagFilterModel::setData(const QModelIndex &index, const QVariant &value, in
TagFilterSortModel::TagFilterSortModel(QObject *parent): QSortFilterProxyModel(parent)
{
-
+ connect(TagFilterModel::instance(), SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(invalidate()));
}
bool TagFilterSortModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
@@ -2162,16 +2163,25 @@ bool TagFilterSortModel::filterAcceptsRow(int source_row, const QModelIndex &sou
QVariant diveVariant = sourceModel()->data(index0, DiveTripModel::DIVE_ROLE);
struct dive* d = (struct dive* ) diveVariant.value<void*>();
if(!d)
- return false; // it's a trip.
-
+ return false;
// Checked means 'Show', Unchecked means 'Hide'.
struct tag_entry *head = d->tag_list;
+ if (!head){ // doesn't have tags, only show if no tags are selected.
+ for(int i = 0; i < TagFilterModel::instance()->stringList().count(); i++){
+ if (TagFilterModel::instance()->checkState[i])
+ return false;
+ }
+ return true;
+ }
+
+ // have at least one tag.
while(head) {
QString tagName(head->tag->name);
int index = TagFilterModel::instance()->stringList().indexOf(tagName);
- if (TagFilterModel::instance()->checkState[index] == false )
+ if (TagFilterModel::instance()->checkState[index])
return true;
+ head = head->next;
}
return false;
}