-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmenu.cpp
More file actions
85 lines (68 loc) · 1.53 KB
/
Copy pathmenu.cpp
File metadata and controls
85 lines (68 loc) · 1.53 KB
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
#include "menu.h"
Menu::Menu(EventListener* listener) {
this->listener = listener;
selectedItemId = -1;
}
void Menu::frame() {
listener->listen();
int nextId = 0;
if(listener->isKeyDown(KEY_UP) || listener->isKeyDown(KEY_DOWN)){
if(listener->isKeyDown(KEY_DOWN)) {
nextId = 1;
}
else
nextId = -1;
int nextCursor = selectedItemId + nextId;
while(items[nextCursor].enable == false) {
nextCursor = nextCursor + nextId;
}
if(nextCursor < 0)
nextCursor = items.size() - 1;
if(nextCursor >= items.size())
nextCursor = 0;
selectedItemId = nextCursor;
}
if(listener->isKeyDown(KEY_ENTER)) {
enterPressed = true;
}
}
int Menu::getSelectedItemId() {
return selectedItemId;
}
void Menu::addItem(string text, bool enable) {
MenuItem item = {text, enable};
items.push_back(item);
if(items.size() >= 1)
selectedItemId = 0;
}
void Menu::draw(Painter* painter) {
painter->drawMenuBackground();
int di = 0;
for(int i = 0; i < items.size(); i++) {
if(items[i].enable == false) {
di++;
}
else {
painter->drawText(15, 15 + (i - di) * 32, items[i].text, 0, 0, 0);
if(i == selectedItemId) {
painter->drawMenuItemSelector(12, 15 + (i - di) * 32);
}
}
}
}
bool Menu::isItemPressed(string text) {
if(enterPressed) {
for(int i = 0; i < items.size(); i++) {
if(items[i].text == text && i == selectedItemId) {
return true;
}
}
}
}
void Menu::enableItem(string text) {
for(int i = 0; i < items.size(); i++) {
if(items[i].text == text) {
items[i].enable = true;
}
}
}