forked from scripthookvdotnet/scripthookvdotnet
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Menu.hpp
196 lines (165 loc) · 5.58 KB
/
Menu.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
#pragma once
#include "Viewport.hpp"
#include "UIRectangle.hpp"
#include "UIText.hpp"
#include "MenuItem.hpp"
namespace GTA
{
interface class MenuItem;
ref class Viewport;
public ref class MenuBase
{
public:
/** Draws the menu */
virtual void Draw() { }
//Drawing with an offset implies that this menu is not the active one
/** Draws the menu with an offset */
virtual void Draw(System::Drawing::Size offset) { }
/** Called when the menu is first added to the Viewport */
virtual void Initialize() { }
/** Called when the menu gains or regains focus */
virtual void OnOpen() { }
/** Called when the user hits the back button or unfocuses from this menu */
virtual void OnClose() { }
/** Called when the user hits the activate button */
virtual void OnActivate() { }
/** Called when the user changes what element is selected (i.e. up and down) */
virtual void OnChangeSelection(bool down) { }
/** Called when the user changes the current element (i.e. left and right) */
virtual void OnChangeItem(bool right) { }
public:
property Viewport ^Parent;
property System::Drawing::Color HeaderColor;
property System::Drawing::Color HeaderTextColor;
property int HeaderFont;
property float HeaderTextScale;
property bool HeaderCentered;
property System::Drawing::Color FooterColor;
property System::Drawing::Color FooterTextColor;
property int FooterFont;
property float FooterTextScale;
property bool FooterCentered;
property System::Drawing::Color SelectedItemColor;
property System::Drawing::Color UnselectedItemColor;
property System::Drawing::Color SelectedTextColor;
property System::Drawing::Color UnselectedTextColor;
property int ItemFont;
property float ItemTextScale;
property bool ItemTextCentered;
property System::Drawing::Point Position;
property System::String ^Caption;
};
public ref class Menu : MenuBase
{
public:
Menu(System::String ^headerCaption, array<MenuItem ^> ^items);
public:
virtual void Draw() override;
virtual void Draw(System::Drawing::Size offset) override;
virtual void Initialize() override;
virtual void OnOpen() override;
virtual void OnClose() override;
virtual void OnActivate() override;
virtual void OnChangeSelection(bool down) override;
virtual void OnChangeSelection(int newIndex);
virtual void OnChangeItem(bool right) override;
public:
property int Width;
property int HeaderHeight;
property int FooterHeight;
property int ItemHeight;
property bool HasFooter;
property System::Collections::Generic::List<MenuItem ^> ^Items
{
System::Collections::Generic::List<MenuItem ^> ^get() { return mItems; }
void set(System::Collections::Generic::List<MenuItem ^> ^items){
mItems = items;
}
}
property int SelectedIndex
{
int get() { return mSelectedIndex; }
void set(int newIndex)
{
OnChangeSelection(newIndex);
}
}
private:
UIRectangle ^mHeaderRect = nullptr, ^mFooterRect = nullptr;
UIText ^mHeaderText = nullptr, ^mFooterText = nullptr;
System::Collections::Generic::List<MenuItem ^> ^mItems = gcnew System::Collections::Generic::List<MenuItem ^>();
int mSelectedIndex = -1;
System::String ^mFooterDescription = "footer description";
};
public ref class ListMenu : MenuBase
{
public:
ListMenu(System::String ^headerCaption, System::Action<ListMenu ^> ^activationAction);
ListMenu(System::String ^headerCaption);
public:
virtual void Draw() override;
virtual void Draw(System::Drawing::Size offset) override;
virtual void Initialize() override;
virtual void OnOpen() override;
virtual void OnClose() override;
virtual void OnActivate() override;
virtual void OnChangeSelection(bool down) override;
virtual void OnChangeItem(bool right) override;
public:
void Add(System::String ^Caption, System::String ^Description);
void Add(System::String ^Caption);
void Remove(int Index);
void Remove(System::String ^Caption);
property int SelectedIndex
{
int get() { return mSelectedIndex; }
void set(int NewIndex)
{
mSelectedIndex = NewIndex;
UpdateHighlight();
}
}
private:
void UpdateEntries();
void UpdateHighlight();
public:
property int Width;
property int HeaderHeight;
property int FooterHeight;
property int ItemHeight;
property bool HasFooter;
private:
System::Action<ListMenu ^> ^mActivateAction;
UIRectangle ^mHeaderRect = nullptr, ^mFooterRect = nullptr;
UIText ^mHeaderText = nullptr, ^mFooterText = nullptr;
System::Collections::Generic::List<System::Tuple<System::String ^, System::String ^> ^> ^mItems;
System::Collections::Generic::List<System::Tuple<UIRectangle ^, UIText ^> ^> ^mUIEntries;
int mEntriesHeight = -1;
int mSelectedIndex = -1;
System::String ^mFooterDescription = "footer description";
};
public ref class MessageBox : MenuBase {
public:
MessageBox(System::String ^headerCaption, System::Action ^yesAction, System::Action ^noAction);
public:
virtual void Draw() override;
virtual void Draw(System::Drawing::Size offset) override;
virtual void Initialize() override;
virtual void OnOpen() override;
virtual void OnClose() override;
virtual void OnActivate() override;
virtual void OnChangeSelection(bool down) override;
virtual void OnChangeItem(bool right) override;
public:
property int Width;
property int Height;
property int ButtonHeight;
/** Use Ok and Cancel instead of Yes and No */
property bool OkCancel;
private:
UIRectangle ^mBodyRect = nullptr, ^mYesRect = nullptr, ^mNoRect = nullptr;
UIText ^mText, ^mYesText, ^mNoText;
System::Action ^mYesAction = nullptr, ^mNoAction = nullptr;
bool mSelection = true;
};
}