mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 19:17:44 +00:00
ProfileViewer: Make sure ProfileNodes have the correct parent pointer
We were forgetting to call ProfileNode::add_child() which is how the parent node pointer gets set. This fixes the weird looking GTreeView.
This commit is contained in:
parent
d8b7cd940f
commit
9150be4716
3 changed files with 9 additions and 8 deletions
|
@ -4,7 +4,7 @@
|
||||||
#include <LibCore/CFile.h>
|
#include <LibCore/CFile.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
Profile::Profile(const JsonArray& json, NonnullRefPtrVector<ProfileNode>&& roots)
|
Profile::Profile(const JsonArray& json, Vector<NonnullRefPtr<ProfileNode>>&& roots)
|
||||||
: m_json(json)
|
: m_json(json)
|
||||||
, m_roots(move(roots))
|
, m_roots(move(roots))
|
||||||
{
|
{
|
||||||
|
|
|
@ -43,7 +43,7 @@ public:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
auto new_child = ProfileNode::create(symbol, address, offset);
|
auto new_child = ProfileNode::create(symbol, address, offset);
|
||||||
m_children.append(new_child);
|
add_child(new_child);
|
||||||
return new_child;
|
return new_child;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -77,12 +77,12 @@ public:
|
||||||
|
|
||||||
GModel& model();
|
GModel& model();
|
||||||
|
|
||||||
const NonnullRefPtrVector<ProfileNode>& roots() const { return m_roots; }
|
const Vector<NonnullRefPtr<ProfileNode>>& roots() const { return m_roots; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit Profile(const JsonArray&, NonnullRefPtrVector<ProfileNode>&&);
|
explicit Profile(const JsonArray&, Vector<NonnullRefPtr<ProfileNode>>&&);
|
||||||
|
|
||||||
JsonArray m_json;
|
JsonArray m_json;
|
||||||
RefPtr<ProfileModel> m_model;
|
RefPtr<ProfileModel> m_model;
|
||||||
NonnullRefPtrVector<ProfileNode> m_roots;
|
Vector<NonnullRefPtr<ProfileNode>> m_roots;
|
||||||
};
|
};
|
||||||
|
|
|
@ -19,7 +19,7 @@ GModelIndex ProfileModel::index(int row, int column, const GModelIndex& parent)
|
||||||
if (!parent.is_valid()) {
|
if (!parent.is_valid()) {
|
||||||
if (m_profile.roots().is_empty())
|
if (m_profile.roots().is_empty())
|
||||||
return {};
|
return {};
|
||||||
return create_index(row, column, &m_profile.roots().at(row));
|
return create_index(row, column, m_profile.roots().at(row).ptr());
|
||||||
}
|
}
|
||||||
auto& remote_parent = *static_cast<ProfileNode*>(parent.internal_data());
|
auto& remote_parent = *static_cast<ProfileNode*>(parent.internal_data());
|
||||||
return create_index(row, column, remote_parent.children().at(row).ptr());
|
return create_index(row, column, remote_parent.children().at(row).ptr());
|
||||||
|
@ -33,11 +33,12 @@ GModelIndex ProfileModel::parent_index(const GModelIndex& index) const
|
||||||
if (!node.parent())
|
if (!node.parent())
|
||||||
return {};
|
return {};
|
||||||
|
|
||||||
// NOTE: If the parent has no parent, it's a root, so we have to look among the remote roots.
|
// NOTE: If the parent has no parent, it's a root, so we have to look among the roots.
|
||||||
if (!node.parent()->parent()) {
|
if (!node.parent()->parent()) {
|
||||||
for (int row = 0; row < m_profile.roots().size(); ++row) {
|
for (int row = 0; row < m_profile.roots().size(); ++row) {
|
||||||
if (&m_profile.roots()[row] == node.parent())
|
if (m_profile.roots()[row].ptr() == node.parent()) {
|
||||||
return create_index(row, 0, node.parent());
|
return create_index(row, 0, node.parent());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
ASSERT_NOT_REACHED();
|
ASSERT_NOT_REACHED();
|
||||||
return {};
|
return {};
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue