-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathUI.h
64 lines (50 loc) · 1.23 KB
/
UI.h
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
/*
* Author: Napattnpp
* File: UI.h
* Version: u.1.1
*/
class UI {
private:
int numOfMode = 0;
int arrow = 0;
char modeName[16][16];
public:
void setMode(const char* _modeName, ...);
int start();
};
void UI::setMode(const char* _modeName, ...) {
va_list vaList;
va_start(vaList, _modeName);
int i = 0;
while (_modeName) {
strcpy(modeName[i], _modeName);
_modeName = va_arg(vaList, const char*);
i++;
}
numOfMode = i + 1;
va_end(vaList);
}
int UI::start() {
// Show title
SCREEN_TEXT(0, 0, "[Select mode]")
// Show mode
for (int i = 1; i < numOfMode; i++) {
SCREEN_TEXT(i, 4, modeName[i-1])
}
SCREEN_SHOW
while (1) {
arrow = knob();
// arrow start with 1 to numOfMode
arrow = map(arrow, 0, MAX_ANALOG, 1, numOfMode);
// Show move arrow
if (arrow != 1) { SCREEN_TEXT(arrow-1, 0, " ") }
SCREEN_TEXT(arrow, 0, "--> ")
SCREEN_TEXT(arrow+1, 0, " ")
SCREEN_SHOW
// If 'OK-Switch' is pressed then clear screen and return mode value (arrow)
if (sw_ok()) {
SCREEN_CLEAR
return arrow;
}
}
}