RemoteObjectPropertyModel.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /*
  2. * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/JsonPath.h>
  8. #include <AK/JsonValue.h>
  9. #include <AK/NonnullOwnPtrVector.h>
  10. #include <LibGUI/Model.h>
  11. namespace Inspector {
  12. class RemoteObject;
  13. class RemoteObjectPropertyModel final : public GUI::Model {
  14. public:
  15. virtual ~RemoteObjectPropertyModel() override { }
  16. static NonnullRefPtr<RemoteObjectPropertyModel> create(RemoteObject& object)
  17. {
  18. return adopt_ref(*new RemoteObjectPropertyModel(object));
  19. }
  20. enum Column {
  21. Name,
  22. Value,
  23. __Count,
  24. };
  25. virtual int row_count(const GUI::ModelIndex& = GUI::ModelIndex()) const override;
  26. virtual int column_count(const GUI::ModelIndex& = GUI::ModelIndex()) const override { return Column::__Count; }
  27. virtual String column_name(int) const override;
  28. virtual GUI::Variant data(const GUI::ModelIndex&, GUI::ModelRole) const override;
  29. virtual void set_data(const GUI::ModelIndex&, const GUI::Variant&) override;
  30. virtual bool is_editable(const GUI::ModelIndex& index) const override { return index.column() == Column::Value; }
  31. virtual GUI::ModelIndex index(int row, int column, const GUI::ModelIndex& parent = GUI::ModelIndex()) const override;
  32. virtual GUI::ModelIndex parent_index(const GUI::ModelIndex&) const override;
  33. private:
  34. explicit RemoteObjectPropertyModel(RemoteObject&);
  35. const JsonPath* cached_path_at(int n, const Vector<JsonPathElement>& prefix) const;
  36. const JsonPath* find_cached_path(const Vector<JsonPathElement>& path) const;
  37. RemoteObject& m_object;
  38. mutable NonnullOwnPtrVector<JsonPath> m_paths;
  39. };
  40. }