99 lines
2.2 KiB
C

#ifndef _MENU_H_
#define _MENU_H_
#include "cpu.h"
#define MENU_LINES_NUMBER 4
#define MENU_SYMB_NUMBER 20
// ñëóæåáíûå ñèìâîëû
#define SYMB_GO_UP 0x87
#define SYMB_GO_DOWN 0x86
#define SYMB_RIGHT_ARROW 0x3E
#define SYMB_DESC_MARK 0x3E
#define SYMB_IND_MARK 0x3C
#define SYMB_POINT_MARK 0x3E
// ñòðóêòóðà îïèñàíèÿ ïóíêòà ìåíþ
typedef struct{
// òèï ïóíêòà ìåíþ
CPU_INT08U LineType;
#define MENU_LINE_STRING 0 // ïðîñòî ñòðîêà
#define MENU_LINE_GOTO_MENU 1 // ïåðåõîä íà äðóãîå ìåíþ
#define MENU_LINE_SHOW_DESC 2 // îòîáðàæåíèå ïàðàìåòðà
#define MENU_LINE_INDEX 3 // èíäåêñ ìàññèâà
// äîï. ôëàãè
CPU_INT08U Flags;
#define MENU_FIXED_LINE 0x01 // ôèêñèðîâàííàÿ ñòðîêà
#define MENU_INDEX_LINE 0x02 // ñòðîêà ñ èíäåêñîì ìàññèâà
// óêàçàòåëü íà òåêñòîâóþ ñòðîêó èëè äåñêðèïòîð
void* Ptr;
// ïàíåëü äëÿ ïåðåõîäà
void* GoToPtr;
}TMenuLine;
// äëÿ ìàññèâà ñòðîê
typedef struct{
const TMenuLine* pMenuLine;
}TMenuLineArray;
// ñòðóêòóðà îïèñàíèÿ ïàíåëè ìåíþ
typedef struct{
// óêàçàòåëü íà ìàññèâ ñòðîê
const TMenuLineArray* LineArray;
// óêàçàòåëü íà ôóíêöèþ, âûïîëíÿåìóþ ïåðåä âõîäîì â ïàíåëü
void (*InitFunc)(void);
// ÷èñëî ñòðîê â äàííîì ìåíþ
CPU_INT08U LineNum;
// òèï ïàíåëè
CPU_INT08U PanelType;
#define MENU_PANEL_STANDARD 0 // îáû÷íàÿ ïàíåëü, ñ ïåðåìåùåíèåì ïî ìåíþ
#define MENU_PANEL_STATIC 1 // ñòàòè÷åñêàÿ ïàíåëü
}TMenuPanel;
// ýëåìåíò ñòåêà âîçâðàòîâ ìåíþ
typedef struct{
// óêàçàòåëü íà ïðåäûäóùåå ìåíþ
const TMenuPanel* PrevMenu;
// àêòèâíàÿ ëèíèÿ â ïðåäûäóùåì ìåíþ
CPU_INT08U PrevActiveLine;
}TMenuStack;
///////////////////////////////////
// ôóíêöèè äëÿ ðàáîòû ñ ìåíþ
///////////////////////////////////
// èíèöèàëèçàöèÿ ìåíþ
extern void InitMenu(void);
// ïåðåõîä íà çàäàííóþ ïàíåëü ìåíþ
extern void GoToMenu(const TMenuPanel* Menu);
extern void SetMenu(const TMenuPanel* Menu);
// âîçâðàò â ïðåäûäóùåå ìåíþ
extern void GoToPreviousMenu(void);
// ïåðåçàïóñê ìåíþ
extern void ReInitMenu(void);
extern void MenuSprintf(CPU_INT08U* str, CPU_INT08U len, CPU_INT32U Val);
extern TMenuPanel* GetCurrentMenu(void);
extern void RefreshMenu(void);
#endif //#ifndef _MENU_H_