1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 15:17:36 +00:00

Profiler: Make the ProfileModel searchable

Note that this only searches the items at the same level as the selected
index.
This commit is contained in:
Ali Mohammad Pur 2021-09-14 03:11:32 +04:30 committed by Ali Mohammad Pur
parent bf0315ff8f
commit 44cc6e1662
2 changed files with 27 additions and 0 deletions

View file

@ -145,4 +145,29 @@ GUI::Variant ProfileModel::data(const GUI::ModelIndex& index, GUI::ModelRole rol
return {};
}
Vector<GUI::ModelIndex> ProfileModel::matches(StringView const& searching, unsigned flags, GUI::ModelIndex const& parent)
{
RemoveReference<decltype(m_profile.roots())>* nodes { nullptr };
if (!parent.is_valid())
nodes = &m_profile.roots();
else
nodes = &static_cast<ProfileNode*>(parent.internal_data())->children();
if (!nodes)
return {};
Vector<GUI::ModelIndex> found_indices;
for (auto it = nodes->begin(); !it.is_end(); ++it) {
GUI::ModelIndex index = this->index(it.index(), StackFrame, parent);
if (!string_matches(data(index, GUI::ModelRole::Display).as_string(), searching, flags))
continue;
found_indices.append(index);
if (flags & FirstMatchOnly)
break;
}
return found_indices;
}
}