Serenity Operating System
1/*
2 * Copyright (c) 2020, Itamar S. <itamar8910@gmail.com>
3 *
4 * SPDX-License-Identifier: BSD-2-Clause
5 */
6
7#pragma once
8
9#include "Debugger.h"
10#include <AK/NonnullOwnPtr.h>
11#include <LibGUI/Model.h>
12#include <LibGUI/TreeView.h>
13#include <sys/arch/regs.h>
14
15namespace HackStudio {
16
17class VariablesModel final : public GUI::Model {
18public:
19 static RefPtr<VariablesModel> create(Debug::ProcessInspector&, PtraceRegisters const& regs);
20
21 void set_variable_value(const GUI::ModelIndex&, StringView, GUI::Window*);
22
23 virtual int row_count(const GUI::ModelIndex& = GUI::ModelIndex()) const override;
24 virtual int column_count(const GUI::ModelIndex& = GUI::ModelIndex()) const override { return 1; }
25 virtual GUI::Variant data(const GUI::ModelIndex& index, GUI::ModelRole role) const override;
26 virtual GUI::ModelIndex parent_index(const GUI::ModelIndex&) const override;
27 virtual GUI::ModelIndex index(int row, int column = 0, const GUI::ModelIndex& = GUI::ModelIndex()) const override;
28 Debug::ProcessInspector& inspector() { return m_inspector; }
29
30private:
31 explicit VariablesModel(Debug::ProcessInspector& inspector, Vector<NonnullOwnPtr<Debug::DebugInfo::VariableInfo>>&& variables, PtraceRegisters const& regs)
32 : m_variables(move(variables))
33 , m_regs(regs)
34 , m_inspector(inspector)
35 {
36 m_variable_icon.set_bitmap_for_size(16, Gfx::Bitmap::load_from_file("/res/icons/16x16/inspector-object.png"sv).release_value_but_fixme_should_propagate_errors());
37 }
38 Vector<NonnullOwnPtr<Debug::DebugInfo::VariableInfo>> m_variables;
39 PtraceRegisters m_regs;
40
41 GUI::Icon m_variable_icon;
42 Debug::ProcessInspector& m_inspector;
43};
44
45}