mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Filter: add reference counting for dive-site mode
The dive-site-edit and dive-site-table tabs both put the filter into a special dive-site mode. When switching between both, it could happen that the one got its show befor the other got its hide event. Thus, the first would start dive-site filtering and the second stop it. Now the app was not in filter mode even though it should. To solve this problem, add reference counting for the filter's dive-site mode. In both tabs call the enter/exit functions on show/hide. In the dive-site-table tab, when the selection changes, use a set function that doesn't modify the reference count. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
cd5489e08d
commit
065423896d
4 changed files with 29 additions and 4 deletions
|
@ -105,7 +105,8 @@ MultiFilterSortModel *MultiFilterSortModel::instance()
|
|||
}
|
||||
|
||||
MultiFilterSortModel::MultiFilterSortModel(QObject *parent) : QSortFilterProxyModel(parent),
|
||||
divesDisplayed(0)
|
||||
divesDisplayed(0),
|
||||
diveSiteRefCount(0)
|
||||
{
|
||||
setFilterKeyColumn(-1); // filter all columns
|
||||
setFilterCaseSensitivity(Qt::CaseInsensitive);
|
||||
|
@ -269,15 +270,24 @@ void MultiFilterSortModel::clearFilter()
|
|||
void MultiFilterSortModel::startFilterDiveSites(QVector<dive_site *> ds)
|
||||
{
|
||||
dive_sites = ds;
|
||||
++diveSiteRefCount;
|
||||
myInvalidate();
|
||||
}
|
||||
|
||||
void MultiFilterSortModel::stopFilterDiveSites()
|
||||
{
|
||||
if (--diveSiteRefCount > 0)
|
||||
return;
|
||||
dive_sites.clear();
|
||||
myInvalidate();
|
||||
}
|
||||
|
||||
void MultiFilterSortModel::setFilterDiveSite(QVector<dive_site *> ds)
|
||||
{
|
||||
dive_sites = ds;
|
||||
myInvalidate();
|
||||
}
|
||||
|
||||
const QVector<dive_site *> &MultiFilterSortModel::filteredDiveSites() const
|
||||
{
|
||||
return dive_sites;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue