From 044be82567c90a977a571b6c5e4c72bacd572983 Mon Sep 17 00:00:00 2001 From: Vrins Date: Thu, 17 Feb 2022 18:20:20 +0100 Subject: [PATCH] Browser: Allow jumping to stylenames by typing in the inspector This adds the default behavior of search and highlighting of abstractView to the inspectorWidget. Search results are based on the titles in the first columns. --- .../Applications/Browser/InspectorWidget.cpp | 3 +++ .../Libraries/LibWeb/StylePropertiesModel.cpp | 17 +++++++++++++++++ .../Libraries/LibWeb/StylePropertiesModel.h | 2 ++ 3 files changed, 22 insertions(+) diff --git a/Userland/Applications/Browser/InspectorWidget.cpp b/Userland/Applications/Browser/InspectorWidget.cpp index 24daae993a..cdfd78a190 100644 --- a/Userland/Applications/Browser/InspectorWidget.cpp +++ b/Userland/Applications/Browser/InspectorWidget.cpp @@ -162,12 +162,15 @@ void InspectorWidget::load_style_json(String specified_values_json, String compu { m_selection_specified_values_json = specified_values_json; m_style_table_view->set_model(Web::StylePropertiesModel::create(m_selection_specified_values_json.value().view())); + m_style_table_view->set_searchable(true); m_selection_computed_values_json = computed_values_json; m_computed_style_table_view->set_model(Web::StylePropertiesModel::create(m_selection_computed_values_json.value().view())); + m_computed_style_table_view->set_searchable(true); m_selection_custom_properties_json = custom_properties_json; m_custom_properties_table_view->set_model(Web::StylePropertiesModel::create(m_selection_custom_properties_json.value().view())); + m_custom_properties_table_view->set_searchable(true); } void InspectorWidget::update_node_box_model(Optional node_box_sizing_json) diff --git a/Userland/Libraries/LibWeb/StylePropertiesModel.cpp b/Userland/Libraries/LibWeb/StylePropertiesModel.cpp index 6c3bc47438..fa69248bda 100644 --- a/Userland/Libraries/LibWeb/StylePropertiesModel.cpp +++ b/Userland/Libraries/LibWeb/StylePropertiesModel.cpp @@ -56,4 +56,21 @@ GUI::Variant StylePropertiesModel::data(GUI::ModelIndex const& index, GUI::Model return {}; } +Vector StylePropertiesModel::matches(StringView searching, unsigned flags, GUI::ModelIndex const& parent) +{ + if (m_values.is_empty()) + return {}; + Vector found_indices; + for (auto it = m_values.begin(); !it.is_end(); ++it) { + GUI::ModelIndex index = this->index(it.index(), Column::PropertyName, parent); + if (!string_matches(data(index, GUI::ModelRole::Display).as_string(), searching, flags)) + continue; + + found_indices.append(index); + if (flags & FirstMatchOnly) + break; + } + return found_indices; +} + } diff --git a/Userland/Libraries/LibWeb/StylePropertiesModel.h b/Userland/Libraries/LibWeb/StylePropertiesModel.h index 974f403a75..b4b1debd74 100644 --- a/Userland/Libraries/LibWeb/StylePropertiesModel.h +++ b/Userland/Libraries/LibWeb/StylePropertiesModel.h @@ -33,6 +33,8 @@ public: virtual int column_count(GUI::ModelIndex const& = GUI::ModelIndex()) const override { return Column::__Count; } virtual String column_name(int) const override; virtual GUI::Variant data(GUI::ModelIndex const&, GUI::ModelRole) const override; + virtual bool is_searchable() const override { return true; } + virtual Vector matches(StringView, unsigned flags, GUI::ModelIndex const&) override; private: explicit StylePropertiesModel(JsonObject);