RegistersModel.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. /*
  2. * Copyright (c) 2020, Luke Wilde <lukew@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/Vector.h>
  8. #include <LibGUI/Model.h>
  9. #include <sys/arch/i386/regs.h>
  10. namespace HackStudio {
  11. struct RegisterData {
  12. String name;
  13. FlatPtr value;
  14. bool changed { false };
  15. };
  16. class RegistersModel final : public GUI::Model {
  17. public:
  18. static RefPtr<RegistersModel> create(const PtraceRegisters& regs)
  19. {
  20. return adopt_ref(*new RegistersModel(regs));
  21. }
  22. static RefPtr<RegistersModel> create(const PtraceRegisters& current_regs, const PtraceRegisters& previous_regs)
  23. {
  24. return adopt_ref(*new RegistersModel(current_regs, previous_regs));
  25. }
  26. enum Column {
  27. Register,
  28. Value,
  29. __Count
  30. };
  31. virtual ~RegistersModel() override;
  32. virtual int row_count(const GUI::ModelIndex& = GUI::ModelIndex()) const override;
  33. virtual int column_count(const GUI::ModelIndex& = GUI::ModelIndex()) const override { return Column::__Count; }
  34. virtual String column_name(int) const override;
  35. virtual GUI::Variant data(const GUI::ModelIndex&, GUI::ModelRole) const override;
  36. const PtraceRegisters& raw_registers() const { return m_raw_registers; }
  37. private:
  38. explicit RegistersModel(const PtraceRegisters& regs);
  39. RegistersModel(const PtraceRegisters& current_regs, const PtraceRegisters& previous_regs);
  40. PtraceRegisters m_raw_registers;
  41. Vector<RegisterData> m_registers;
  42. };
  43. }