TreeModel.h 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. /*
  2. * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
  3. * Copyright (c) 2018-2020, Adam Hodgen <ant1441@gmail.com>
  4. * Copyright (c) 2023, Tim Flynn <trflynn89@serenityos.org>
  5. *
  6. * SPDX-License-Identifier: BSD-2-Clause
  7. */
  8. #pragma once
  9. #include <AK/HashMap.h>
  10. #include <AK/JsonValue.h>
  11. #include <AK/Optional.h>
  12. #include <AK/String.h>
  13. #include <LibWeb/CSS/Selector.h>
  14. #include <LibWebView/ModelIndex.h>
  15. namespace WebView {
  16. class TreeModel {
  17. public:
  18. enum class Type {
  19. AccessibilityTree,
  20. DOMTree,
  21. };
  22. TreeModel(Type, JsonValue tree);
  23. ~TreeModel();
  24. int row_count(ModelIndex const& parent) const;
  25. int column_count(ModelIndex const& parent) const;
  26. ModelIndex index(int row, int column, ModelIndex const& parent) const;
  27. ModelIndex parent(ModelIndex const& index) const;
  28. String text_for_display(ModelIndex const& index) const;
  29. ModelIndex index_for_node(i32 node_id, Optional<Web::CSS::Selector::PseudoElement> const& pseudo_element) const;
  30. private:
  31. ALWAYS_INLINE JsonObject const* get_parent(JsonObject const& node) const
  32. {
  33. auto parent_node = m_node_to_parent_map.get(&node);
  34. VERIFY(parent_node.has_value());
  35. return *parent_node;
  36. }
  37. void prepare_node_maps(JsonObject const* node, JsonObject const* parent_node);
  38. Type m_type;
  39. JsonValue m_tree;
  40. HashMap<JsonObject const*, JsonObject const*> m_node_to_parent_map;
  41. HashMap<i32, JsonObject const*> m_node_id_to_node_map;
  42. };
  43. }