mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Filter: move num_shown logic from model to core
Since the number of shown dives is stored in the core, let's also keep it updated there. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
b76f207158
commit
9ffafbc326
4 changed files with 18 additions and 20 deletions
|
@ -900,13 +900,19 @@ void deselect_dive(struct dive *dive)
|
||||||
}
|
}
|
||||||
|
|
||||||
int shown_dives = 0;
|
int shown_dives = 0;
|
||||||
void filter_dive(struct dive *d, bool shown)
|
bool filter_dive(struct dive *d, bool shown)
|
||||||
{
|
{
|
||||||
|
bool old_shown, changed;
|
||||||
if (!d)
|
if (!d)
|
||||||
return;
|
return false;
|
||||||
|
old_shown = !d->hidden_by_filter;
|
||||||
d->hidden_by_filter = !shown;
|
d->hidden_by_filter = !shown;
|
||||||
if (!shown && d->selected)
|
if (!shown && d->selected)
|
||||||
deselect_dive(d);
|
deselect_dive(d);
|
||||||
|
changed = old_shown != shown;
|
||||||
|
if (changed)
|
||||||
|
shown_dives += shown - old_shown;
|
||||||
|
return changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
void mark_divelist_changed(bool changed)
|
void mark_divelist_changed(bool changed)
|
||||||
|
@ -927,9 +933,13 @@ void process_loaded_dives()
|
||||||
int i;
|
int i;
|
||||||
struct dive *dive;
|
struct dive *dive;
|
||||||
|
|
||||||
/* Register dive computer nick names */
|
/* Register dive computer nick names and count shown dives. */
|
||||||
for_each_dive(i, dive)
|
shown_dives = 0;
|
||||||
|
for_each_dive(i, dive) {
|
||||||
|
if (!dive->hidden_by_filter)
|
||||||
|
shown_dives++;
|
||||||
set_dc_nickname(dive);
|
set_dc_nickname(dive);
|
||||||
|
}
|
||||||
|
|
||||||
sort_dive_table(&dive_table);
|
sort_dive_table(&dive_table);
|
||||||
sort_trip_table(&trip_table);
|
sort_trip_table(&trip_table);
|
||||||
|
@ -1448,6 +1458,7 @@ void clear_dive_file_data()
|
||||||
while (dive_table.nr)
|
while (dive_table.nr)
|
||||||
delete_single_dive(0);
|
delete_single_dive(0);
|
||||||
current_dive = NULL;
|
current_dive = NULL;
|
||||||
|
shown_dives = 0;
|
||||||
while (dive_site_table.nr)
|
while (dive_site_table.nr)
|
||||||
delete_dive_site(get_dive_site(0, &dive_site_table), &dive_site_table);
|
delete_dive_site(get_dive_site(0, &dive_site_table), &dive_site_table);
|
||||||
if (trip_table.nr != 0) {
|
if (trip_table.nr != 0) {
|
||||||
|
|
|
@ -44,7 +44,7 @@ extern int remove_dive(const struct dive *dive, struct dive_table *table);
|
||||||
extern bool consecutive_selected();
|
extern bool consecutive_selected();
|
||||||
extern void select_dive(struct dive *dive);
|
extern void select_dive(struct dive *dive);
|
||||||
extern void deselect_dive(struct dive *dive);
|
extern void deselect_dive(struct dive *dive);
|
||||||
extern void filter_dive(struct dive *d, bool shown);
|
extern bool filter_dive(struct dive *d, bool shown); /* returns true if status changed */
|
||||||
extern struct dive *first_selected_dive();
|
extern struct dive *first_selected_dive();
|
||||||
extern struct dive *last_selected_dive();
|
extern struct dive *last_selected_dive();
|
||||||
extern int get_dive_nr_at_idx(int idx);
|
extern int get_dive_nr_at_idx(int idx);
|
||||||
|
|
|
@ -1377,7 +1377,6 @@ void DiveTripModelList::filterFinished()
|
||||||
// In list mode, we don't have to change anything after filter finished.
|
// In list mode, we don't have to change anything after filter finished.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Simple sorting helper for sorting against a criterium and if
|
// Simple sorting helper for sorting against a criterium and if
|
||||||
// that is undefined against a different criterium.
|
// that is undefined against a different criterium.
|
||||||
// Return true if diff1 < 0, false if diff1 > 0.
|
// Return true if diff1 < 0, false if diff1 > 0.
|
||||||
|
|
|
@ -57,8 +57,6 @@ void MultiFilterSortModel::myInvalidate()
|
||||||
// as a consequence of the filterFinished signal right after the local scope.
|
// as a consequence of the filterFinished signal right after the local scope.
|
||||||
auto marker = diveListNotifier.enterCommand();
|
auto marker = diveListNotifier.enterCommand();
|
||||||
|
|
||||||
shown_dives = 0;
|
|
||||||
|
|
||||||
DiveFilter *filter = DiveFilter::instance();
|
DiveFilter *filter = DiveFilter::instance();
|
||||||
for (int i = 0; i < m->rowCount(QModelIndex()); ++i) {
|
for (int i = 0; i < m->rowCount(QModelIndex()); ++i) {
|
||||||
QModelIndex idx = m->index(i, 0, QModelIndex());
|
QModelIndex idx = m->index(i, 0, QModelIndex());
|
||||||
|
@ -75,18 +73,14 @@ void MultiFilterSortModel::myInvalidate()
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
bool show = filter->showDive(d);
|
bool show = filter->showDive(d);
|
||||||
if (show) {
|
if (show)
|
||||||
shown_dives++;
|
|
||||||
showTrip = true;
|
showTrip = true;
|
||||||
}
|
|
||||||
m->setData(idx2, show, DiveTripModelBase::SHOWN_ROLE);
|
m->setData(idx2, show, DiveTripModelBase::SHOWN_ROLE);
|
||||||
}
|
}
|
||||||
m->setData(idx, showTrip, DiveTripModelBase::SHOWN_ROLE);
|
m->setData(idx, showTrip, DiveTripModelBase::SHOWN_ROLE);
|
||||||
} else {
|
} else {
|
||||||
dive *d = m->data(idx, DiveTripModelBase::DIVE_ROLE).value<dive *>();
|
dive *d = m->data(idx, DiveTripModelBase::DIVE_ROLE).value<dive *>();
|
||||||
bool show = (d != NULL) && filter->showDive(d);
|
bool show = (d != NULL) && filter->showDive(d);
|
||||||
if (show)
|
|
||||||
shown_dives++;
|
|
||||||
m->setData(idx, show, DiveTripModelBase::SHOWN_ROLE);
|
m->setData(idx, show, DiveTripModelBase::SHOWN_ROLE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -103,14 +97,8 @@ void MultiFilterSortModel::myInvalidate()
|
||||||
|
|
||||||
bool MultiFilterSortModel::updateDive(struct dive *d)
|
bool MultiFilterSortModel::updateDive(struct dive *d)
|
||||||
{
|
{
|
||||||
bool oldStatus = !d->hidden_by_filter;
|
|
||||||
bool newStatus = DiveFilter::instance()->showDive(d);
|
bool newStatus = DiveFilter::instance()->showDive(d);
|
||||||
bool changed = oldStatus != newStatus;
|
return filter_dive(d, newStatus);
|
||||||
if (changed) {
|
|
||||||
filter_dive(d, newStatus);
|
|
||||||
shown_dives += newStatus - oldStatus;
|
|
||||||
}
|
|
||||||
return changed;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MultiFilterSortModel::lessThan(const QModelIndex &i1, const QModelIndex &i2) const
|
bool MultiFilterSortModel::lessThan(const QModelIndex &i1, const QModelIndex &i2) const
|
||||||
|
|
Loading…
Add table
Reference in a new issue