/* * Copyright (c) 2021, Stephan Unverwerth * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include namespace Profiler { class Profile; class ProfileNode; struct SourceLineData { u32 event_count { 0 }; float percent { 0 }; DeprecatedString location; u32 line_number { 0 }; DeprecatedString source_code; }; class SourceModel final : public GUI::Model { public: static NonnullRefPtr create(Profile& profile, ProfileNode& node) { return adopt_ref(*new SourceModel(profile, node)); } enum Column { SampleCount, Location, LineNumber, SourceCode, __Count }; virtual int row_count(GUI::ModelIndex const& = GUI::ModelIndex()) const override; virtual int column_count(GUI::ModelIndex const& = GUI::ModelIndex()) const override { return Column::__Count; } virtual DeprecatedString column_name(int) const override; virtual GUI::Variant data(GUI::ModelIndex const&, GUI::ModelRole) const override; virtual bool is_column_sortable(int) const override { return false; } private: SourceModel(Profile&, ProfileNode&); Profile& m_profile; ProfileNode& m_node; Vector m_source_lines; }; }