From 4e3689370d8e81716759a5b29934c35cf848a379 Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Wed, 17 Sep 2014 16:18:37 -0300 Subject: [PATCH] Create the sorting method. This method should remove a row on the dive list model visualization if none of the tags that it have are marked as 'visible'. Signed-off-by: Tomaz Canabrava Signed-off-by: Dirk Hohndel --- qt-ui/models.cpp | 25 +++++++++++++++++++++++++ qt-ui/models.h | 11 +++++++++-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/qt-ui/models.cpp b/qt-ui/models.cpp index b22702795..def258a5f 100644 --- a/qt-ui/models.cpp +++ b/qt-ui/models.cpp @@ -2150,3 +2150,28 @@ bool TagFilterModel::setData(const QModelIndex &index, const QVariant &value, in } return false; } + +TagFilterSortModel::TagFilterSortModel(QObject *parent): QSortFilterProxyModel(parent) +{ + +} + +bool TagFilterSortModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const +{ + QModelIndex index0 = sourceModel()->index(source_row, 0, source_parent); + QVariant diveVariant = sourceModel()->data(index0, DiveTripModel::DIVE_ROLE); + struct dive* d = (struct dive* ) diveVariant.value(); + if(!d) + return false; // it's a trip. + + // Checked means 'Show', Unchecked means 'Hide'. + struct tag_entry *head = d->tag_list; + + while(head) { + QString tagName(head->tag->name); + int index = TagFilterModel::instance()->stringList().indexOf(tagName); + if (TagFilterModel::instance()->checkState[index] == false ) + return true; + } + return false; +} diff --git a/qt-ui/models.h b/qt-ui/models.h index c54a765ab..446ae9047 100644 --- a/qt-ui/models.h +++ b/qt-ui/models.h @@ -11,6 +11,7 @@ #include #include #include +#include #include "../dive.h" #include "../divelist.h" @@ -217,7 +218,6 @@ struct TripItem; class TreeModel : public QAbstractItemModel { Q_OBJECT - public: TreeModel(QObject *parent = 0); virtual ~TreeModel(); @@ -425,10 +425,17 @@ public: virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); virtual Qt::ItemFlags flags(const QModelIndex &index) const; + bool *checkState; public slots: void repopulate(); private: explicit TagFilterModel(QObject *parent = 0); - bool *checkState; +}; + +class TagFilterSortModel : public QSortFilterProxyModel { + Q_OBJECT +public: + TagFilterSortModel(QObject *parent = 0); + virtual bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const; }; #endif // MODELS_H