00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00022 #ifndef __MENU_H
00023 #define __MENU_H
00024
00025 #include <avr/pgmspace.h>
00026 #include <inttypes.h>
00027
00028 #ifdef __cplusplus
00029
00030 class VisibleObject;
00031 class Container;
00032
00036 class VisibleObject {
00037 protected:
00038 uint8_t x, y;
00039 uint8_t active;
00040 public:
00041 virtual void KeyCallback(uint8_t key);
00042 virtual bool Activate(void);
00043 virtual void Deactivate(void);
00044 virtual void Display(void) = NULL;
00045 virtual void LoadProperties(uint8_t tag);
00046 virtual bool Shift(uint8_t dir);
00047 };
00048
00052 class Container : public VisibleObject {
00053 private:
00054 uint8_t current;
00055 uint8_t count;
00056 VisibleObject **childs;
00057
00058 protected:
00059 void AddChild(VisibleObject *child);
00060
00061 public:
00062 Container();
00063 virtual bool Activate(void);
00064 virtual void Deactivate(void);
00065 virtual void Display(void);
00066 virtual void LoadProperties(uint8_t tag);
00067 virtual bool Shift(uint8_t dir);
00068 };
00069
00070 void menu_set_hook(uint8_t index, PGM_VOID_P image, VisibleObject* obj);
00071 void menu_remove_hook(uint8_t index);
00072
00073 #endif
00074
00075
00076
00077
00078
00079 #ifdef __cplusplus
00080 extern "C" {
00081 #endif
00082
00083 void menu_init(void);
00084 void menu_process(void);
00085
00086 #ifdef __cplusplus
00087 }
00088 #endif
00089
00090 #endif