/* * Copyright (c) 2018-2020, Andreas Kling * Copyright (c) 2018-2020, Adam Hodgen * Copyright (c) 2023, Tim Flynn * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include #include #include namespace WebView { class TreeModel { public: enum class Type { AccessibilityTree, DOMTree, }; TreeModel(Type, JsonValue tree); ~TreeModel(); int row_count(ModelIndex const& parent) const; int column_count(ModelIndex const& parent) const; ModelIndex index(int row, int column, ModelIndex const& parent) const; ModelIndex parent(ModelIndex const& index) const; String text_for_display(ModelIndex const& index) const; ModelIndex index_for_node(i32 node_id, Optional const& pseudo_element) const; private: ALWAYS_INLINE JsonObject const* get_parent(JsonObject const& node) const { auto parent_node = m_node_to_parent_map.get(&node); VERIFY(parent_node.has_value()); return *parent_node; } void prepare_node_maps(JsonObject const* node, JsonObject const* parent_node); Type m_type; JsonValue m_tree; HashMap m_node_to_parent_map; HashMap m_node_id_to_node_map; }; }