-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMenu.h
101 lines (95 loc) · 1.88 KB
/
Menu.h
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
#pragma once
#define MENU_BEGIN(text)\
PGM_P Text = PSTR(text);\
unsigned char ItemNum;\
unsigned char Row = 0;\
const unsigned char PrevPage = gCurrentPage;\
\
gLCD.firstPage();\
do\
{\
ItemNum = 0;\
Row = 0;\
DrawStrP(gLCD.getDisplayWidth()/2-StrWidthP(Text)/2, 7, Text);\
gLCD.drawLine(0,8,gLCD.getDisplayWidth(),8);
#define MENU_ITEM_P(text, sel_code)\
if (ItemNum >= gData.RM.First && ItemNum < gData.RM.Last)\
{\
DrawStrP(5, 16+Row*7, text);\
Row++;\
\
if (gData.RM.Enc && gData.RM.EncPos == ItemNum)\
{\
gData.RM.Enc = 0;\
sel_code;\
}\
}\
\
ItemNum++;
#define MENU_ITEM_J(text, len, sel_code)\
if (ItemNum >= gData.RM.First && ItemNum < gData.RM.Last)\
{\
DrawStrJ(5, 16+Row*7, text, len);\
Row++;\
\
if (gData.RM.Enc && gData.RM.EncPos == ItemNum)\
{\
gData.RM.Enc = 0;\
sel_code;\
}\
}\
\
ItemNum++;
#define MENU_END()\
DrawStrP(0,7*(gData.RM.EncPos - gData.RM.First)+16,PSTR(">"));\
}\
while (gLCD.nextPage()); \
\
if (gCurrentPage == PrevPage)\
{\
char EncPos = gEnc1.read()/4;\
\
if (EncPos < 0)\
{\
EncPos = 0;\
gEnc1.write(EncPos);\
}\
else if (EncPos >= ItemNum)\
{\
EncPos = ItemNum-1;\
gEnc1.write(EncPos*4);\
}\
\
gData.RM.EncPos = EncPos;\
\
if (EncPos < gData.RM.First)\
{\
gData.RM.First = EncPos;\
gData.RM.Last = min(gData.RM.First + 7, ItemNum - 1);\
}\
else if (EncPos >= gData.RM.Last)\
{\
gData.RM.Last = EncPos + 1;\
gData.RM.First = max(gData.RM.Last - 7, 0);\
}\
\
if (gFlags & FLAGS_ENC_SW)\
{\
gFlags &= ~FLAGS_ENC_SW;\
gData.RM.Enc = 1;\
}\
}\
else\
{\
MENU_RESET();\
}
#define MENU_RESET()\
do\
{\
gEnc1.write(0);\
gData.RM.EncPos = 0;\
gData.RM.First = 0;\
gData.RM.Last = 7;\
gData.RM.Enc = 0;\
}\
while(false)