From 68e94f0a2e27675451538a2eaf34d67728fe6a55 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 18 Aug 2019 11:12:43 +0200 Subject: [PATCH] Inspector: Implement RemoteObjectGraphModel::parent_index() This makes GTreeView paint the tree lines correctly. It's a bit weird that this is needed, but straightforward to implement so meh. --- DevTools/Inspector/RemoteObjectGraphModel.cpp | 16 ++++++++++++++++ DevTools/Inspector/RemoteObjectGraphModel.h | 1 + 2 files changed, 17 insertions(+) diff --git a/DevTools/Inspector/RemoteObjectGraphModel.cpp b/DevTools/Inspector/RemoteObjectGraphModel.cpp index 1647a9b11ad..2b0776aea99 100644 --- a/DevTools/Inspector/RemoteObjectGraphModel.cpp +++ b/DevTools/Inspector/RemoteObjectGraphModel.cpp @@ -26,6 +26,22 @@ GModelIndex RemoteObjectGraphModel::index(int row, int column, const GModelIndex return create_index(row, column, remote_parent.children.at(row)); } +GModelIndex RemoteObjectGraphModel::parent_index(const GModelIndex& index) const +{ + if (!index.is_valid()) + return {}; + auto& remote_object = *static_cast(index.internal_data()); + if (!remote_object.parent) + return {}; + for (int row = 0; row < remote_object.parent->children.size(); ++row) { + if (remote_object.parent->children[row] == &remote_object) + return create_index(row, 0, remote_object.parent); + } + + ASSERT_NOT_REACHED(); + return {}; +} + int RemoteObjectGraphModel::row_count(const GModelIndex& index) const { if (!index.is_valid()) diff --git a/DevTools/Inspector/RemoteObjectGraphModel.h b/DevTools/Inspector/RemoteObjectGraphModel.h index 7aa239b19e4..e6e50b1644f 100644 --- a/DevTools/Inspector/RemoteObjectGraphModel.h +++ b/DevTools/Inspector/RemoteObjectGraphModel.h @@ -18,6 +18,7 @@ public: virtual int column_count(const GModelIndex& = GModelIndex()) const override; virtual GVariant data(const GModelIndex&, Role = Role::Display) const override; virtual GModelIndex index(int row, int column, const GModelIndex& parent = GModelIndex()) const override; + virtual GModelIndex parent_index(const GModelIndex&) const; virtual void update() override; private: