#pragma once #include #include #include #include class RemoteObjectGraphModel final : public GModel { public: static NonnullRefPtr create_with_pid(pid_t pid) { return adopt(*new RemoteObjectGraphModel(pid)); } virtual ~RemoteObjectGraphModel() override; virtual int row_count(const GModelIndex& = GModelIndex()) const override; 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 override; virtual void update() override; private: struct RemoteObject { RemoteObject* parent { nullptr }; Vector> children; String address; String parent_address; String class_name; String name; }; explicit RemoteObjectGraphModel(pid_t); pid_t m_pid { -1 }; CLocalSocket m_socket; JsonArray m_json; NonnullOwnPtrVector m_remote_roots; GIcon m_object_icon; GIcon m_window_icon; };