nxdk_pgraph_tests
A collection of tests for the Xbox nv2a graphics processor
 
Loading...
Searching...
No Matches
menu_item.h
1#ifndef NXDK_PGRAPH_TESTS_MENU_ITEM_H
2#define NXDK_PGRAPH_TESTS_MENU_ITEM_H
3
4#include <chrono>
5#include <cstdint>
6#include <functional>
7#include <memory>
8#include <string>
9#include <vector>
10
11class TestSuite;
12
13struct MenuItem {
14 public:
15 MenuItem(std::string name, uint32_t width, uint32_t height) : width(width), height(height), name(std::move(name)) {}
16 virtual ~MenuItem() = default;
17
18 static void SetBackgroundColor(uint32_t background_color);
19
20 // Whether or not this menu item becomes the active drawable when activated.
21 [[nodiscard]] virtual bool IsEnterable() const { return !submenu.empty(); }
22
23 virtual void Draw();
24
25 // Invoked when this MenuItem becomes the active drawable.
26 virtual void OnEnter();
27
28 // Invoked when the user activates this MenuItem.
29 virtual void Activate();
30
31 virtual void ActivateCurrentSuite();
32
33 virtual bool Deactivate();
34
35 virtual void CursorUp(bool is_repeat);
36 virtual void CursorDown(bool is_repeat);
37 virtual void CursorLeft(bool is_repeat);
38 virtual void CursorRight(bool is_repeat);
39
40 void CursorUpAndActivate();
41 void CursorDownAndActivate();
42
43 protected:
44 void PrepareDraw(uint32_t background_color) const;
45 static void Swap();
46
47 public:
48 uint32_t width;
49 uint32_t height;
50 std::string name;
51
52 static uint32_t menu_background_color_;
53
54 uint32_t cursor_position{0};
55 std::vector<std::shared_ptr<MenuItem>> submenu{};
56 std::shared_ptr<MenuItem> active_submenu{};
57 MenuItem* parent{nullptr};
58};
59
60struct MenuItemCallable : public MenuItem {
61 MenuItemCallable(std::function<void()> on_activate, std::string name, uint32_t width, uint32_t height);
62
63 void Draw() override;
64
65 void Activate() override;
66 void ActivateCurrentSuite() override {}
67 std::function<void()> on_activate;
68};
69
70struct MenuItemTest : public MenuItem {
71 static bool one_shot_mode_;
72
73 MenuItemTest(std::shared_ptr<TestSuite> suite, std::string name, uint32_t width, uint32_t height);
74
75 static void SetOneShotMode(bool val) { one_shot_mode_ = val; }
76
77 [[nodiscard]] bool IsEnterable() const override { return true; }
78
79 void Draw() override;
80 void OnEnter() override;
81 void Activate() override { OnEnter(); }
82 bool Deactivate() override;
83 void ActivateCurrentSuite() override {}
84 void CursorUp(bool is_repeat) override;
85 void CursorDown(bool is_repeat) override;
86 void CursorLeft(bool is_repeat) override {}
87 void CursorRight(bool is_repeat) override {}
88
89 std::shared_ptr<TestSuite> suite;
90 bool has_run_once_{false};
91};
92
93struct MenuItemSuite : public MenuItem {
94 explicit MenuItemSuite(const std::shared_ptr<TestSuite>& suite, uint32_t width, uint32_t height);
95
96 void ActivateCurrentSuite() override;
97 std::shared_ptr<TestSuite> suite;
98};
99
100struct MenuItemRoot : public MenuItem {
101 explicit MenuItemRoot(const std::vector<std::shared_ptr<TestSuite>>& suites, std::function<void()> on_run_all,
102 std::function<void()> on_exit, uint32_t width, uint32_t height, bool disable_autorun,
103 bool autorun_immediately);
104
105 void Draw() override;
106 void Activate() override;
107 void ActivateCurrentSuite() override;
108 bool Deactivate() override;
109 void CursorUp(bool is_repeat) override;
110 void CursorDown(bool is_repeat) override;
111 void CursorLeft(bool is_repeat) override;
112 void CursorRight(bool is_repeat) override;
113
114 std::function<void()> on_run_all;
115 std::function<void()> on_exit;
116 std::chrono::steady_clock::time_point start_time;
117 bool timer_valid{false};
118 bool timer_cancelled{false};
119
120 private:
121 bool disable_autorun_;
122 bool autorun_immediately_;
123};
124
125struct MenuItemOptions : public MenuItem {
126 MenuItemOptions(const std::vector<std::shared_ptr<TestSuite>>& suites, std::function<void()> on_exit, uint32_t width,
127 uint32_t height);
128
129 void Draw() override;
130 void Activate() override;
131 void ActivateCurrentSuite() override;
132 bool Deactivate() override;
133 void CursorUp(bool is_repeat) override;
134 void CursorDown(bool is_repeat) override;
135 void CursorLeft(bool is_repeat) override;
136 void CursorRight(bool is_repeat) override;
137
138 std::function<void()> on_exit;
139 std::chrono::steady_clock::time_point start_time;
140 bool timer_valid{false};
141 bool timer_cancelled{false};
142};
143
144#endif // NXDK_PGRAPH_TESTS_MENU_ITEM_H
Definition test_suite.h:20
Definition menu_item.h:60
Definition menu_item.h:125
Definition menu_item.h:100
Definition menu_item.h:93
Definition menu_item.h:70
Definition menu_item.h:13