mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Filter: cache number of dives fulfilling filter rules
Currently, in FilterModelBase::data() the number of dives is recalculated. This happens for every mouse-over event! Calculate the number of dives only on recalculation and store the count in the items-struct. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
parent
e3f8615054
commit
66aeaddd0f
2 changed files with 13 additions and 3 deletions
|
@ -69,6 +69,16 @@ void FilterModelBase::updateList(const QStringList &newList)
|
||||||
items.back().checked = true;
|
items.back().checked = true;
|
||||||
anyChecked = true;
|
anyChecked = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Finally, calculate and cache the counts. Ignore the last item, since
|
||||||
|
// this is the "Show Empty Tags" entry.
|
||||||
|
for (int i = 0; i < (int)newList.size() - 1; i++)
|
||||||
|
items[i].count = countDives(qPrintable(newList[i]));
|
||||||
|
|
||||||
|
// Calculate count of "Empty Tags".
|
||||||
|
if (!items.empty())
|
||||||
|
items.back().count = countDives("");
|
||||||
|
|
||||||
setStringList(newList);
|
setStringList(newList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,9 +109,8 @@ QVariant FilterModelBase::data(const QModelIndex &index, int role) const
|
||||||
if (role == Qt::CheckStateRole) {
|
if (role == Qt::CheckStateRole) {
|
||||||
return items[index.row()].checked ? Qt::Checked : Qt::Unchecked;
|
return items[index.row()].checked ? Qt::Checked : Qt::Unchecked;
|
||||||
} else if (role == Qt::DisplayRole) {
|
} else if (role == Qt::DisplayRole) {
|
||||||
QString value = stringList()[index.row()];
|
int row = index.row();
|
||||||
int count = countDives((index.row() == rowCount() - 1) ? "" : qPrintable(value));
|
return QStringLiteral("%1 (%2)").arg(stringList()[row], QString::number(items[row].count));
|
||||||
return value + QString(" (%1)").arg(count);
|
|
||||||
}
|
}
|
||||||
return QVariant();
|
return QVariant();
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,7 @@ class FilterModelBase : public QStringListModel {
|
||||||
protected:
|
protected:
|
||||||
struct Item {
|
struct Item {
|
||||||
bool checked;
|
bool checked;
|
||||||
|
int count;
|
||||||
};
|
};
|
||||||
std::vector<Item> items;
|
std::vector<Item> items;
|
||||||
public:
|
public:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue