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

Committer:
glansberry
Date:
Fri Jul 24 22:18:19 2015 +0000
Revision:
9:b1fdd7ea6f72
Parent:
6:e992366d0684
Fixed bug is choosing the first page.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
glansberry 0:907d2d5e77f7 1 #ifndef __PAGE_H
glansberry 0:907d2d5e77f7 2 #define __PAGE_H
glansberry 0:907d2d5e77f7 3 #include "menuitem.h"
glansberry 0:907d2d5e77f7 4 #include "Terminal.h"
glansberry 0:907d2d5e77f7 5 //this class contains Pages of menu items
glansberry 0:907d2d5e77f7 6
glansberry 0:907d2d5e77f7 7 extern Terminal term;
glansberry 0:907d2d5e77f7 8 #define MAX_MENUITEMS 15
glansberry 0:907d2d5e77f7 9 #define LEVEL_INDENT 8
glansberry 0:907d2d5e77f7 10 #define DATA_GAP 4
glansberry 0:907d2d5e77f7 11 #define ITEM_ROW_START 3
glansberry 0:907d2d5e77f7 12 #define TERM_LOC_DEBUG 40,24 //x,y for printing debug info
glansberry 0:907d2d5e77f7 13 #define TERM_LOC_INPUT 10,23 // X,Y for getting input
glansberry 0:907d2d5e77f7 14 #define TERM_LOC_FEEDBACK 10,24 // X,Y for getting input
glansberry 0:907d2d5e77f7 15 //class MenuItem; //forward declare
glansberry 0:907d2d5e77f7 16
glansberry 0:907d2d5e77f7 17 class Page{
glansberry 0:907d2d5e77f7 18 private:
glansberry 6:e992366d0684 19 bool make_active_flag;
glansberry 0:907d2d5e77f7 20 public:
glansberry 0:907d2d5e77f7 21 Page();
glansberry 6:e992366d0684 22 Page(const char * name_p, Terminal * term_p);
glansberry 6:e992366d0684 23 const char * name; //reference to the name of the Page
glansberry 6:e992366d0684 24 Terminal * term;
glansberry 0:907d2d5e77f7 25 int num_menuitems;
glansberry 0:907d2d5e77f7 26 int data_start_x; //starting column for printing the data
glansberry 0:907d2d5e77f7 27 MenuItem item[MAX_MENUITEMS];
glansberry 0:907d2d5e77f7 28 char command_letter[MAX_MENUITEMS]; //the character in front of the menuitem
glansberry 0:907d2d5e77f7 29 char max_upper_letter_cmd;
glansberry 0:907d2d5e77f7 30 char max_lower_letter_cmd;
glansberry 0:907d2d5e77f7 31 char max_number_cmd;
glansberry 0:907d2d5e77f7 32 int page_num;
glansberry 0:907d2d5e77f7 33 bool refresh_required;
glansberry 6:e992366d0684 34 Page& add(Page *page_p) { return add(MenuItem((*page_p))); }
iillyyaa 3:f308cd7a34ed 35 Page& add(char const *text) { return add(MenuItem(text, NULL, 0, heading)); }
iillyyaa 3:f308cd7a34ed 36 Page& add(char const *text, MenuAction *action_p) { return add(MenuItem(text, action_p, 0, ::display, -1)); }
iillyyaa 3:f308cd7a34ed 37 Page& add(MenuItem const &item_p);
glansberry 0:907d2d5e77f7 38 void display();
glansberry 0:907d2d5e77f7 39 void update();
glansberry 0:907d2d5e77f7 40 char * set_active() {make_active_flag = true; return NULL;} //flag the current page to be active
glansberry 0:907d2d5e77f7 41 void ack_active() {make_active_flag = false;} //call to clear the set_active flag
glansberry 0:907d2d5e77f7 42 bool check_active() {return make_active_flag;} // check to see if this page wants to be active
glansberry 0:907d2d5e77f7 43 };
glansberry 0:907d2d5e77f7 44
glansberry 0:907d2d5e77f7 45 #endif