/* * Copyright (c) 2018-2020, Andreas Kling * Copyright (c) 2022, the SerenityOS developers. * Copyright (c) 2024, Sam Atkins * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include namespace HackStudio { struct Declaration { static Declaration create_filename(ByteString const& filename); static Declaration create_symbol_declaration(CodeComprehension::Declaration const&); bool is_filename() const { return as_filename.has_value(); } bool is_symbol_declaration() const { return as_symbol_declaration.has_value(); } Optional as_filename; Optional as_symbol_declaration; }; class DeclarationsModel final : public GUI::Model { public: explicit DeclarationsModel(Vector&& declarations) : m_declarations(move(declarations)) { } enum Column { Icon, Name, Filename, __Column_Count, }; virtual int row_count(GUI::ModelIndex const& index = GUI::ModelIndex()) const override { if (!index.is_valid()) return m_declarations.size(); return 0; } virtual int column_count(GUI::ModelIndex const& = GUI::ModelIndex()) const override { return Column::__Column_Count; } virtual GUI::Variant data(GUI::ModelIndex const& index, GUI::ModelRole role) const override; virtual MatchResult data_matches(GUI::ModelIndex const&, GUI::Variant const&) const override; Vector const& declarations() const { return m_declarations; } void set_declarations(Vector&&); private: Vector m_declarations; }; }