diff --git a/Userland/Applications/Browser/InspectorWidget.cpp b/Userland/Applications/Browser/InspectorWidget.cpp index 62d7e94efc..7728e96626 100644 --- a/Userland/Applications/Browser/InspectorWidget.cpp +++ b/Userland/Applications/Browser/InspectorWidget.cpp @@ -75,15 +75,6 @@ InspectorWidget::InspectorWidget() set_inspected_node(index); }; - auto& layout_tree_container = top_tab_widget.add_tab("Layout"); - layout_tree_container.set_layout(); - layout_tree_container.layout()->set_margins({ 4, 4, 4, 4 }); - m_layout_tree_view = layout_tree_container.add(); - m_layout_tree_view->on_selection_change = [this] { - const auto& index = m_layout_tree_view->selection().first(); - set_inspected_node(index); - }; - auto& bottom_tab_widget = splitter.add(); auto& style_table_container = bottom_tab_widget.add_tab("Styles"); @@ -110,9 +101,6 @@ void InspectorWidget::select_default_node() // FIXME: Select the element, or else the root node. m_dom_tree_view->collapse_tree(); m_dom_tree_view->set_cursor({}, GUI::AbstractView::SelectionUpdate::ClearIfNotSelected); - - m_layout_tree_view->collapse_tree(); - m_layout_tree_view->set_cursor({}, GUI::AbstractView::SelectionUpdate::ClearIfNotSelected); } void InspectorWidget::set_dom_json(String json) @@ -123,9 +111,6 @@ void InspectorWidget::set_dom_json(String json) m_dom_json = json; m_dom_tree_view->set_model(Web::DOMTreeModel::create(m_dom_json->view())); - // FIXME: Support the LayoutTreeModel - // m_layout_tree_view->set_model(Web::LayoutTreeModel::create(*document)); - if (m_pending_inspect_node_id.has_value()) { i32 node_id = m_pending_inspect_node_id.value(); m_pending_inspect_node_id.clear(); diff --git a/Userland/Applications/Browser/InspectorWidget.h b/Userland/Applications/Browser/InspectorWidget.h index 9db7ce9d5d..ec264f6cc0 100644 --- a/Userland/Applications/Browser/InspectorWidget.h +++ b/Userland/Applications/Browser/InspectorWidget.h @@ -35,7 +35,6 @@ private: RefPtr m_web_view; RefPtr m_dom_tree_view; - RefPtr m_layout_tree_view; RefPtr m_style_table_view; RefPtr m_computed_style_table_view; diff --git a/Userland/Libraries/LibWeb/CMakeLists.txt b/Userland/Libraries/LibWeb/CMakeLists.txt index 8eb80979b4..e137fed6c1 100644 --- a/Userland/Libraries/LibWeb/CMakeLists.txt +++ b/Userland/Libraries/LibWeb/CMakeLists.txt @@ -204,7 +204,6 @@ set(SOURCES Layout/TableRowGroupBox.cpp Layout/TextNode.cpp Layout/TreeBuilder.cpp - LayoutTreeModel.cpp Loader/CSSLoader.cpp Loader/ContentFilter.cpp Loader/FrameLoader.cpp diff --git a/Userland/Libraries/LibWeb/LayoutTreeModel.cpp b/Userland/Libraries/LibWeb/LayoutTreeModel.cpp deleted file mode 100644 index ff38c59951..0000000000 --- a/Userland/Libraries/LibWeb/LayoutTreeModel.cpp +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Copyright (c) 2020, Andreas Kling - * - * SPDX-License-Identifier: BSD-2-Clause - */ - -#include "LayoutTreeModel.h" -#include -#include -#include -#include -#include -#include -#include - -namespace Web { - -LayoutTreeModel::LayoutTreeModel(DOM::Document& document) - : m_document(document) -{ - m_document_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-html.png")); - m_element_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/inspector-object.png")); - m_text_icon.set_bitmap_for_size(16, Gfx::Bitmap::try_load_from_file("/res/icons/16x16/filetype-unknown.png")); -} - -LayoutTreeModel::~LayoutTreeModel() -{ -} - -GUI::ModelIndex LayoutTreeModel::index(int row, int column, const GUI::ModelIndex& parent) const -{ - if (!parent.is_valid()) - return create_index(row, column, m_document->layout_node()); - auto& parent_node = *static_cast(parent.internal_data()); - return create_index(row, column, parent_node.child_at_index(row)); -} - -GUI::ModelIndex LayoutTreeModel::parent_index(const GUI::ModelIndex& index) const -{ - if (!index.is_valid()) - return {}; - auto& node = *static_cast(index.internal_data()); - if (!node.parent()) - return {}; - - // No grandparent? Parent is the document! - if (!node.parent()->parent()) { - return create_index(0, 0, m_document->layout_node()); - } - - // Walk the grandparent's children to find the index of node's parent in its parent. - // (This is needed to produce the row number of the GUI::ModelIndex corresponding to node's parent.) - int grandparent_child_index = 0; - for (auto* grandparent_child = node.parent()->parent()->first_child(); grandparent_child; grandparent_child = grandparent_child->next_sibling()) { - if (grandparent_child == node.parent()) - return create_index(grandparent_child_index, 0, node.parent()); - ++grandparent_child_index; - } - - VERIFY_NOT_REACHED(); - return {}; -} - -int LayoutTreeModel::row_count(const GUI::ModelIndex& index) const -{ - if (!index.is_valid()) - return 1; - auto& node = *static_cast(index.internal_data()); - return node.child_count(); -} - -int LayoutTreeModel::column_count(const GUI::ModelIndex&) const -{ - return 1; -} - -static String with_whitespace_collapsed(const StringView& string) -{ - StringBuilder builder; - for (size_t i = 0; i < string.length(); ++i) { - if (isspace(string[i])) { - builder.append(' '); - while (i < string.length()) { - if (isspace(string[i])) { - ++i; - continue; - } - builder.append(string[i]); - break; - } - continue; - } - builder.append(string[i]); - } - return builder.to_string(); -} - -GUI::Variant LayoutTreeModel::data(const GUI::ModelIndex& index, GUI::ModelRole role) const -{ - auto& node = *static_cast(index.internal_data()); - if (role == GUI::ModelRole::Icon) { - if (is(node)) - return m_document_icon; - if (is(node)) - return m_text_icon; - return m_element_icon; - } - if (role == GUI::ModelRole::Display) { - if (is(node)) - return String::formatted("TextNode: {}", with_whitespace_collapsed(verify_cast(node).text_for_rendering())); - StringBuilder builder; - builder.append(node.class_name()); - builder.append(' '); - if (node.is_anonymous()) { - builder.append("[anonymous]"); - } else if (!node.dom_node()->is_element()) { - builder.append(node.dom_node()->node_name()); - } else { - auto& element = verify_cast(*node.dom_node()); - builder.append('<'); - builder.append(element.local_name()); - element.for_each_attribute([&](auto& name, auto& value) { - builder.append(' '); - builder.append(name); - builder.append('='); - builder.append('"'); - builder.append(value); - builder.append('"'); - }); - builder.append('>'); - } - return builder.to_string(); - } - return {}; -} - -} diff --git a/Userland/Libraries/LibWeb/LayoutTreeModel.h b/Userland/Libraries/LibWeb/LayoutTreeModel.h deleted file mode 100644 index c533a95e31..0000000000 --- a/Userland/Libraries/LibWeb/LayoutTreeModel.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (c) 2020, Andreas Kling - * - * SPDX-License-Identifier: BSD-2-Clause - */ - -#pragma once - -#include -#include - -namespace Web { - -class LayoutTreeModel final : public GUI::Model { -public: - static NonnullRefPtr create(DOM::Document& document) - { - return adopt_ref(*new LayoutTreeModel(document)); - } - - virtual ~LayoutTreeModel() override; - - virtual int row_count(const GUI::ModelIndex& = GUI::ModelIndex()) const override; - virtual int column_count(const GUI::ModelIndex& = GUI::ModelIndex()) const override; - virtual GUI::Variant data(const GUI::ModelIndex&, GUI::ModelRole) const override; - virtual GUI::ModelIndex index(int row, int column, const GUI::ModelIndex& parent = GUI::ModelIndex()) const override; - virtual GUI::ModelIndex parent_index(const GUI::ModelIndex&) const override; - -private: - explicit LayoutTreeModel(DOM::Document&); - - NonnullRefPtr m_document; - - GUI::Icon m_document_icon; - GUI::Icon m_element_icon; - GUI::Icon m_text_icon; -}; - -}