-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathmenuItem.hpp
More file actions
116 lines (98 loc) · 2.66 KB
/
Copy pathmenuItem.hpp
File metadata and controls
116 lines (98 loc) · 2.66 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
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
#ifndef EVT_TERM_MENUITEM
#define EVT_TERM_MENUITEM
#include <core/io/UART.hpp>
#include <core/utils/terminal/terminal.hpp>
// macro for max initial item count of submenus
// struct used for callback functions, a uart instance to communicate over,
// a list of input strings(your input from the terminal), and a void*
// mostly a placeholder to ease handling void* to a function, when you fill with a function make sure the parameters are
// (UART,char**,void*)
namespace core::utils {
class MenuItem {
public:
/**
* constructor for menu item object
* takes a string for the option key, a string for the description text,
* a void pointer to the items callback method, and a void pointer to the items context
* @param parent pointer to parent node
* @param term pointer to terminal instance this item resides within
* @param option a string representing the items "key", the char/string used to select it
* @param text a short text description/name of an item
* @param cb a void pointer to this items callback method
* @param ctx a void pointer to any context information for this menu(if none provided, is NULL)
*/
MenuItem(void* parent, void* term, char* option, char* text, callback_t cb, void* ctx);
/**
* option acessor
*/
char* getOption() {
return option;
}
/**
* returns parent
*/
void* getParent() {
return parent;
}
/**
* text acessor
*/
char* getText() {
return text;
}
/**
* callback acessor
*/
callback_t getcb() {
return cb;
}
/**
* replace this item with another one
* @param newItem the new item
*/
void replace(MenuItem* newItem);
/**
* context acessor
*/
void* getctx() {
return ctx;
}
/**
* print string representation
* @param uart the uart instance to print over
*/
void printStr(core::io::UART& uart);
/**
* checks if 2 items are equivalent
* true if every attribute is equivalent using ==
* @param it2 a different menu item to compare to
*/
bool equals(MenuItem* it2);
private:
/**
* key value for item, this is used to select it in your commands
*/
char* option;
/**
* description/name of item
*/
char* text;
/**
* pointer to callback method for this item
*/
callback_t cb;
/**
* context for this item, void* because it is of an abstract type
*/
void* ctx;
/**
* submenu or menu this item is in
*/
void* parent;
/**
* terminal this is in
*/
void* term;
};
} // namespace core::utils
#endif