mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-28 13:10:19 +00:00
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>
This commit is contained in:
parent
4e3689370d
commit
f1e7c12e8a
2 changed files with 17 additions and 7 deletions
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue