Serenity Operating System
1/*
2 * Copyright (c) 2020, Luke Wilde <lukew@serenityos.org>
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/Label.h>
12#include <LibGUI/Model.h>
13#include <LibGUI/TableView.h>
14#include <LibGUI/Widget.h>
15#include <sys/arch/regs.h>
16
17namespace HackStudio {
18
19class UnavailableDisassemblyWidget final : public GUI::Frame {
20 C_OBJECT(UnavailableDisassemblyWidget)
21public:
22 virtual ~UnavailableDisassemblyWidget() override { }
23
24 DeprecatedString const& reason() const { return m_reason; }
25 void set_reason(DeprecatedString const& text) { m_reason = text; }
26
27private:
28 UnavailableDisassemblyWidget(DeprecatedString const& reason)
29 : m_reason(reason)
30 {
31 }
32
33 virtual void paint_event(GUI::PaintEvent& event) override;
34
35 DeprecatedString m_reason;
36};
37
38class DisassemblyWidget final : public GUI::Widget {
39 C_OBJECT(DisassemblyWidget)
40public:
41 virtual ~DisassemblyWidget() override { }
42
43 void update_state(Debug::DebugSession const&, PtraceRegisters const&);
44 void program_stopped();
45
46private:
47 DisassemblyWidget();
48
49 void show_disassembly();
50 void hide_disassembly(DeprecatedString const&);
51
52 RefPtr<GUI::Widget> m_top_container;
53 RefPtr<GUI::TableView> m_disassembly_view;
54 RefPtr<GUI::Label> m_function_name_label;
55 RefPtr<UnavailableDisassemblyWidget> m_unavailable_disassembly_widget;
56};
57
58}