diff options
| author | hachem <im@hachem.wtf> | 2024-11-18 01:01:01 +0100 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2024-11-18 01:01:01 +0100 |
| commit | 406250285d57a8134376b881c3fef6d6481a7740 (patch) | |
| tree | 8e9fe791b963d5321916ca2fe0a3bcb2977f46ac /src/ui/ui.h | |
| parent | e73fd02fb3077d8f1b91c7d71d160f7e888348a3 (diff) | |
feat: ui view and renderer
Diffstat (limited to 'src/ui/ui.h')
| -rw-r--r-- | src/ui/ui.h | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/src/ui/ui.h b/src/ui/ui.h new file mode 100644 index 0000000..7c0de5d --- /dev/null +++ b/src/ui/ui.h @@ -0,0 +1,78 @@ +#pragma once + +#include "core/result.h" +#include "ui/source_view.h" + +#include <cstdint> +#include <filesystem> +#include <string> +#include <string_view> +#include <vector> + +namespace Hsdbg +{ + class Debugger; + class Window; + + class Ui + { + public: + explicit Ui(Window& window); + ~Ui(); + + Ui(const Ui&) = delete; + Ui(Ui&&) = delete; + auto operator=(const Ui&) -> Ui& = delete; + auto operator=(Ui&&) -> Ui& = delete; + + auto begin_frame() -> void; + auto draw(Debugger& debugger) -> void; + auto end_frame() -> void; + + auto open_source(const std::filesystem::path& path) -> void; + + private: + struct PanelVisibility + { + bool source = true; + bool breakpoints = true; + bool call_stack = true; + bool threads = true; + bool locals = true; + bool registers = true; + bool console = true; + bool demo = false; + }; + + auto apply_style() -> void; + auto build_default_layout(uint32_t dockspace_id) -> void; + + auto draw_menu_bar(Debugger& debugger) -> void; + auto draw_toolbar(Debugger& debugger) -> void; + auto draw_status_bar(Debugger& debugger) -> void; + auto draw_load_target_popup(Debugger& debugger) -> void; + + auto draw_source_panel(Debugger& debugger) -> void; + auto draw_breakpoints_panel(Debugger& debugger) -> void; + auto draw_call_stack_panel(Debugger& debugger) -> void; + auto draw_threads_panel(Debugger& debugger) -> void; + auto draw_locals_panel(Debugger& debugger) -> void; + auto draw_registers_panel(Debugger& debugger) -> void; + auto draw_console_panel(Debugger& debugger) -> void; + + auto push_console(std::string line) -> void; + auto report(const Result<void>& result, std::string_view action) -> void; + + Window* m_window = nullptr; + SourceView m_source_view; + PanelVisibility m_visible; + + std::vector<std::string> m_console_lines; + std::string m_console_input; + std::string m_target_input; + + bool m_layout_built = false; + bool m_console_scroll_pending = false; + bool m_load_target_pending = false; + }; +} |
