Library which creates a serial test console, it supports pages and menu items. The items are added and the pages are added as necessary when the user sets it up. This is a great too for creating an easy to maintain menu system, whether for a test sytem, or anything else.
Dependencies: Terminal
menuitem.h@3:f308cd7a34ed, 2015-05-01 (annotated)
- Committer:
- iillyyaa
- Date:
- Fri May 01 15:08:49 2015 +0000
- Revision:
- 3:f308cd7a34ed
- Parent:
- 0:907d2d5e77f7
- Child:
- 4:800a75ffea3c
Next pass at menu population;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
glansberry | 0:907d2d5e77f7 | 1 | #ifndef __MENUITEM_H |
glansberry | 0:907d2d5e77f7 | 2 | #define __MENUITEM_H |
glansberry | 0:907d2d5e77f7 | 3 | |
glansberry | 0:907d2d5e77f7 | 4 | #include "Terminal.h" |
glansberry | 0:907d2d5e77f7 | 5 | |
glansberry | 0:907d2d5e77f7 | 6 | extern Terminal term; |
glansberry | 0:907d2d5e77f7 | 7 | |
glansberry | 0:907d2d5e77f7 | 8 | typedef enum {menu, heading, display, control} MenuType; |
glansberry | 0:907d2d5e77f7 | 9 | typedef char * (*callback_function)(bool); // type for conciseness |
glansberry | 0:907d2d5e77f7 | 10 | |
glansberry | 0:907d2d5e77f7 | 11 | #define MAX_NAME_LEN (80-10-10) |
glansberry | 0:907d2d5e77f7 | 12 | |
iillyyaa | 3:f308cd7a34ed | 13 | class MenuAction; |
iillyyaa | 3:f308cd7a34ed | 14 | class Page; |
iillyyaa | 3:f308cd7a34ed | 15 | |
iillyyaa | 3:f308cd7a34ed | 16 | class MenuItem { |
iillyyaa | 3:f308cd7a34ed | 17 | public: |
glansberry | 0:907d2d5e77f7 | 18 | MenuItem(); |
iillyyaa | 3:f308cd7a34ed | 19 | MenuItem(const char * name_p, MenuAction *action_p, int level, MenuType type_p, int target_page = -1); |
iillyyaa | 3:f308cd7a34ed | 20 | MenuItem(Page &target_page_p); //construct a menu selection item this way |
iillyyaa | 3:f308cd7a34ed | 21 | const char *name; //reference to the name |
glansberry | 0:907d2d5e77f7 | 22 | int level; //0 if primary 1 or greater if this is a sub-menu |
glansberry | 0:907d2d5e77f7 | 23 | MenuType type; //are we displaying something or controlling something |
iillyyaa | 3:f308cd7a34ed | 24 | |
iillyyaa | 3:f308cd7a34ed | 25 | MenuAction *action; //callback for getting/setting the data |
iillyyaa | 3:f308cd7a34ed | 26 | |
glansberry | 0:907d2d5e77f7 | 27 | int name_len; |
iillyyaa | 3:f308cd7a34ed | 28 | |
glansberry | 0:907d2d5e77f7 | 29 | int data_col; //column where the data is shown |
glansberry | 0:907d2d5e77f7 | 30 | int target_page; //the page to go to if called |
iillyyaa | 3:f308cd7a34ed | 31 | }; |
iillyyaa | 3:f308cd7a34ed | 32 | |
iillyyaa | 3:f308cd7a34ed | 33 | class MenuAction { |
iillyyaa | 3:f308cd7a34ed | 34 | public: |
iillyyaa | 3:f308cd7a34ed | 35 | MenuAction(char const *name): |
iillyyaa | 3:f308cd7a34ed | 36 | m_name(name) |
iillyyaa | 3:f308cd7a34ed | 37 | {} |
glansberry | 0:907d2d5e77f7 | 38 | |
iillyyaa | 3:f308cd7a34ed | 39 | char const *getName() { |
iillyyaa | 3:f308cd7a34ed | 40 | return m_name; |
iillyyaa | 3:f308cd7a34ed | 41 | } |
iillyyaa | 3:f308cd7a34ed | 42 | |
iillyyaa | 3:f308cd7a34ed | 43 | virtual void getString(char *buf, int bufLen) { |
iillyyaa | 3:f308cd7a34ed | 44 | if(buf && bufLen > 0) { |
iillyyaa | 3:f308cd7a34ed | 45 | buf[0] = '\0'; |
iillyyaa | 3:f308cd7a34ed | 46 | } |
iillyyaa | 3:f308cd7a34ed | 47 | } |
iillyyaa | 3:f308cd7a34ed | 48 | virtual void doAction() {} |
iillyyaa | 3:f308cd7a34ed | 49 | |
iillyyaa | 3:f308cd7a34ed | 50 | private: |
iillyyaa | 3:f308cd7a34ed | 51 | char const *m_name; |
iillyyaa | 3:f308cd7a34ed | 52 | }; |
iillyyaa | 3:f308cd7a34ed | 53 | |
iillyyaa | 3:f308cd7a34ed | 54 | |
iillyyaa | 3:f308cd7a34ed | 55 | class MenuDigitalIn: public MenuAction { |
iillyyaa | 3:f308cd7a34ed | 56 | public: |
iillyyaa | 3:f308cd7a34ed | 57 | MenuDigitalIn(char const *name, DigitalIn const & myIO): |
iillyyaa | 3:f308cd7a34ed | 58 | MenuAction(name), |
iillyyaa | 3:f308cd7a34ed | 59 | m_io(myIO) |
iillyyaa | 3:f308cd7a34ed | 60 | {} |
iillyyaa | 3:f308cd7a34ed | 61 | |
iillyyaa | 3:f308cd7a34ed | 62 | virtual void getString(char *buf, int bufLen) { |
iillyyaa | 3:f308cd7a34ed | 63 | snprintf(buf, bufLen, "%d", int(m_io)); |
iillyyaa | 3:f308cd7a34ed | 64 | } |
iillyyaa | 3:f308cd7a34ed | 65 | private: |
iillyyaa | 3:f308cd7a34ed | 66 | DigitalIn m_io; |
iillyyaa | 3:f308cd7a34ed | 67 | }; |
iillyyaa | 3:f308cd7a34ed | 68 | |
iillyyaa | 3:f308cd7a34ed | 69 | class MenuDigitalOut: public MenuAction { |
iillyyaa | 3:f308cd7a34ed | 70 | public: |
iillyyaa | 3:f308cd7a34ed | 71 | MenuDigitalOut(char const *name, DigitalOut const & myIO): |
iillyyaa | 3:f308cd7a34ed | 72 | MenuAction(name), |
iillyyaa | 3:f308cd7a34ed | 73 | m_io(myIO) |
iillyyaa | 3:f308cd7a34ed | 74 | {} |
iillyyaa | 3:f308cd7a34ed | 75 | |
iillyyaa | 3:f308cd7a34ed | 76 | virtual void getString(char *buf, int bufLen) { |
iillyyaa | 3:f308cd7a34ed | 77 | snprintf(buf, bufLen, "%d", int(m_io)); |
iillyyaa | 3:f308cd7a34ed | 78 | } |
iillyyaa | 3:f308cd7a34ed | 79 | virtual void doAction() { |
iillyyaa | 3:f308cd7a34ed | 80 | m_io = !m_io; |
iillyyaa | 3:f308cd7a34ed | 81 | } |
iillyyaa | 3:f308cd7a34ed | 82 | private: |
iillyyaa | 3:f308cd7a34ed | 83 | DigitalOut m_io; |
iillyyaa | 3:f308cd7a34ed | 84 | }; |
iillyyaa | 3:f308cd7a34ed | 85 | |
iillyyaa | 3:f308cd7a34ed | 86 | class MenuTestAction: public MenuAction { |
iillyyaa | 3:f308cd7a34ed | 87 | public: |
iillyyaa | 3:f308cd7a34ed | 88 | MenuTestAction(char const *name): |
iillyyaa | 3:f308cd7a34ed | 89 | MenuAction(name), |
iillyyaa | 3:f308cd7a34ed | 90 | m_value(false) |
iillyyaa | 3:f308cd7a34ed | 91 | {} |
iillyyaa | 3:f308cd7a34ed | 92 | |
iillyyaa | 3:f308cd7a34ed | 93 | virtual void getString(char *buf, int bufLen) { |
iillyyaa | 3:f308cd7a34ed | 94 | snprintf(buf, bufLen, "%d", int(m_value)); |
iillyyaa | 3:f308cd7a34ed | 95 | } |
iillyyaa | 3:f308cd7a34ed | 96 | virtual void doAction() { |
iillyyaa | 3:f308cd7a34ed | 97 | m_value = !m_value; |
iillyyaa | 3:f308cd7a34ed | 98 | } |
iillyyaa | 3:f308cd7a34ed | 99 | |
iillyyaa | 3:f308cd7a34ed | 100 | private: |
iillyyaa | 3:f308cd7a34ed | 101 | bool m_value; |
glansberry | 0:907d2d5e77f7 | 102 | }; |
glansberry | 0:907d2d5e77f7 | 103 | |
glansberry | 0:907d2d5e77f7 | 104 | |
glansberry | 0:907d2d5e77f7 | 105 | #endif |