main.c 34 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315
  1. #include "u8g2.h"
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include "mui.h"
  6. #include "mui_u8g2.h"
  7. /*=================================================*/
  8. /* global variables */
  9. u8g2_t u8g2;
  10. mui_t ui;
  11. /*
  12. global variables which form the communication gateway between the user interface and the rest of the code
  13. */
  14. uint8_t number_input9 = 2; // variable where the user can input a number between 0 and 9
  15. uint8_t number_input99 = 95; // variable where the user can input a number between 0 and 99
  16. int8_t snumber_input9 = 2; // variable where the user can input a number between 0 and 9
  17. int8_t snumber_input99 = 95; // variable where the user can input a number between 0 and 99
  18. uint8_t chkbox1_input = 0;
  19. uint8_t chkbox2_input = 0;
  20. uint8_t radio_input = 0;
  21. uint8_t fruit_input = 2;
  22. uint8_t color_input = 0;
  23. uint8_t food_input = 0;
  24. uint8_t text_input[4] = { ' ',' ',' ',' '} ;
  25. uint16_t list_selection_1 = 0;
  26. uint16_t list_selection_2 = 0;
  27. uint16_t list_selection_3 = 0;
  28. uint8_t number_input = 2; // variable where the user can input a number between 0 and 9
  29. uint8_t number_input2 = 100; // variable where the user can input a number between 0 and 9
  30. uint8_t fruit_input2 = 2;
  31. uint8_t my_value3 = 0;
  32. uint8_t checkbox_input = 0;
  33. uint8_t direction_input = 0;
  34. uint8_t exit_code = 0;
  35. uint16_t list_selection = 0;
  36. uint16_t list_selection2 = 0;
  37. uint16_t list_selection3 = 0;
  38. uint16_t list_selection4 = 0;
  39. uint8_t array_pos = 0;
  40. uint8_t array_led_off_time[4] = { 10, 5, 3, 1};
  41. uint8_t led_off_time = 0;
  42. uint8_t array_led_on_time[4] = { 10, 5, 3, 1};
  43. uint8_t led_on_time = 0;
  44. /*=================================================*/
  45. /* user element access functions */
  46. static const char *animals[] = { "Bird", "Bison", "Cat", "Crow", "Dog", "Elephant", "Fish", "Gnu", "Horse", "Koala", "Lion", "Mouse", "Owl", "Rabbit", "Spider", "Turtle", "Zebra" };
  47. uint16_t animals_get_cnt(void *data)
  48. {
  49. return sizeof(animals)/sizeof(*animals); /* number of animals */
  50. }
  51. const char *animals_get_str(void *data, uint16_t index)
  52. {
  53. return animals[index];
  54. }
  55. /*=================================================*/
  56. /* style */
  57. uint8_t mui_style_helv_r_08(mui_t *ui, uint8_t msg)
  58. {
  59. u8g2_t *u8g2 = mui_get_U8g2(ui);
  60. switch(msg)
  61. {
  62. case MUIF_MSG_DRAW:
  63. u8g2_SetFont(u8g2, u8g2_font_helvR08_tr);
  64. break;
  65. }
  66. return 0;
  67. }
  68. uint8_t mui_style_helv_b_08(mui_t *ui, uint8_t msg)
  69. {
  70. u8g2_t *u8g2 = mui_get_U8g2(ui);
  71. switch(msg)
  72. {
  73. case MUIF_MSG_DRAW:
  74. u8g2_SetFont(u8g2, u8g2_font_helvB08_tr);
  75. break;
  76. }
  77. return 0;
  78. }
  79. uint8_t mui_style_monospaced(mui_t *ui, uint8_t msg)
  80. {
  81. u8g2_t *u8g2 = mui_get_U8g2(ui);
  82. switch(msg)
  83. {
  84. case MUIF_MSG_DRAW:
  85. u8g2_SetFont(u8g2, u8g2_font_profont12_tr);
  86. //u8g2_SetFont(u8g2, u8g2_font_6x10_tr);
  87. break;
  88. }
  89. return 0;
  90. }
  91. uint8_t mui_style_streamline_food_drink(mui_t *ui, uint8_t msg)
  92. {
  93. u8g2_t *u8g2 = mui_get_U8g2(ui);
  94. switch(msg)
  95. {
  96. case MUIF_MSG_DRAW:
  97. u8g2_SetFont(u8g2, u8g2_font_streamline_food_drink_t);
  98. break;
  99. }
  100. return 0;
  101. }
  102. uint8_t mui_style_small(mui_t *ui, uint8_t msg)
  103. {
  104. u8g2_t *u8g2 = mui_get_U8g2(ui);
  105. switch(msg)
  106. {
  107. case MUIF_MSG_DRAW:
  108. u8g2_SetFont(u8g2, u8g2_font_blipfest_07_tr );
  109. //u8g2_SetFont(u8g2, u8g2_font_u8glib_4_tr );
  110. break;
  111. }
  112. return 0;
  113. }
  114. uint8_t mui_style_streamline_interface_essential_login(mui_t *ui, uint8_t msg)
  115. {
  116. u8g2_t *u8g2 = mui_get_U8g2(ui);
  117. switch(msg)
  118. {
  119. case MUIF_MSG_DRAW:
  120. u8g2_SetFont(u8g2, u8g2_font_streamline_interface_essential_login_t);
  121. //u8g2_SetFont(u8g2, u8g2_font_6x10_tr);
  122. break;
  123. }
  124. return 0;
  125. }
  126. uint8_t mui_style_glasstown(mui_t *ui, uint8_t msg)
  127. {
  128. u8g2_t *u8g2 = mui_get_U8g2(ui);
  129. switch(msg)
  130. {
  131. case MUIF_MSG_DRAW:
  132. u8g2_SetFont(u8g2, u8g2_font_glasstown_nbp_tr);
  133. break;
  134. }
  135. return 0;
  136. }
  137. /*=================================================*/
  138. /* local mui functions */
  139. uint8_t mui_hrule(mui_t *ui, uint8_t msg)
  140. {
  141. u8g2_t *u8g2 = mui_get_U8g2(ui);
  142. switch(msg)
  143. {
  144. case MUIF_MSG_DRAW:
  145. u8g2_DrawHLine(u8g2, 0, mui_get_y(ui), u8g2_GetDisplayWidth(u8g2));
  146. break;
  147. }
  148. return 0;
  149. }
  150. uint8_t muif_array_pos_selection(mui_t *ui, uint8_t msg)
  151. {
  152. uint8_t return_value = 0;
  153. switch(msg)
  154. {
  155. case MUIF_MSG_FORM_START:
  156. led_off_time = array_led_off_time[array_pos];
  157. led_on_time = array_led_on_time[array_pos];
  158. return_value = mui_u8g2_u8_min_max_wm_mse_pi(ui, msg);
  159. break;
  160. case MUIF_MSG_FORM_END:
  161. return_value = mui_u8g2_u8_min_max_wm_mse_pi(ui, msg);
  162. break;
  163. case MUIF_MSG_CURSOR_SELECT:
  164. case MUIF_MSG_EVENT_NEXT:
  165. case MUIF_MSG_EVENT_PREV:
  166. array_led_off_time[array_pos] = led_off_time;
  167. array_led_on_time[array_pos] = led_on_time;
  168. return_value = mui_u8g2_u8_min_max_wm_mse_pi(ui, msg);
  169. led_off_time = array_led_off_time[array_pos];
  170. led_on_time = array_led_on_time[array_pos];
  171. break;
  172. default:
  173. return_value = mui_u8g2_u8_min_max_wm_mse_pi(ui, msg);
  174. }
  175. return return_value;
  176. }
  177. /* https://github.com/olikraus/u8g2/discussions/2516 */
  178. uint8_t mui_goto_or_back_form_w1_pi(mui_t *ui, uint8_t msg)
  179. {
  180. if ( msg == MUIF_MSG_CURSOR_SELECT )
  181. {
  182. if ( mui_GetSelectableFieldTextOption(ui, ui->last_form_fds, ui->arg + ui->form_scroll_top) )
  183. {
  184. if ( (uint8_t)ui->text[0] == 254 ) // use MUI_254 for the return
  185. {
  186. mui_RestoreForm(ui);
  187. return 0;
  188. }
  189. }
  190. }
  191. return mui_u8g2_goto_form_w1_pi(ui, msg); // call the original MUIF
  192. }
  193. /*=================================================*/
  194. /* list functions (get cnt/get element pairs) */
  195. uint16_t list_get_cnt(void *data)
  196. {
  197. return 17; /* number of animals */
  198. }
  199. const char *list_get_str(void *data, uint16_t index)
  200. {
  201. static const char *animals[] = { "Bird", "Bison", "Cat", "Crow", "Dog", "Elephant", "Fish", "Gnu", "Horse", "Koala", "Lion", "Mouse", "Owl", "Rabbit", "Spider", "Turtle", "Zebra" };
  202. return animals[index];
  203. }
  204. uint16_t menu_get_cnt(void *data)
  205. {
  206. return 10; /* number of menu entries */
  207. }
  208. const char *menu_get_str(void *data, uint16_t index)
  209. {
  210. static const char *menu[] =
  211. {
  212. MUI_1 "Goto Main Menu",
  213. MUI_10 "Enter a number",
  214. MUI_11 "Parent/Child Selection",
  215. MUI_13 "Checkbox",
  216. MUI_14 "Radio Selection",
  217. MUI_15 "Text Input",
  218. MUI_16 "Single Line Selection",
  219. MUI_17 "List Line Selection",
  220. MUI_18 "Parent/Child List",
  221. MUI_20 "Array Edit",
  222. };
  223. return menu[index];
  224. }
  225. /*=================================================*/
  226. /* list functions (get cnt/get element pairs) */
  227. muif_t muif_list[] MUI_PROGMEM = {
  228. /* normal text style */
  229. MUIF_STYLE(0, mui_style_helv_r_08),
  230. /* bold text style */
  231. MUIF_STYLE(1, mui_style_helv_b_08),
  232. /* very small font */
  233. MUIF_STYLE(2, mui_style_small),
  234. MUIF_STYLE(3, mui_style_streamline_interface_essential_login),
  235. /* food and drink */
  236. MUIF_STYLE(4, mui_style_streamline_food_drink),
  237. /* monospaced font, good for mui_u8g2_u8_char_wm_mud_pi */
  238. MUIF_STYLE(5, mui_style_monospaced),
  239. /* smaller replacement for style 0 */
  240. MUIF_STYLE(6, mui_style_glasstown),
  241. /* horizontal line (hrule) */
  242. MUIF_RO("HR", mui_hrule),
  243. MUIF_LABEL(mui_u8g2_draw_text),
  244. MUIF_RO("GP",mui_u8g2_goto_data),
  245. MUIF_BUTTON("GC", mui_goto_or_back_form_w1_pi), /* mui_u8g2_goto_form_w1_pi replaced by mui_goto_or_back_form_w1_pi */
  246. MUIF_BUTTON("BK", mui_u8g2_btn_back_wm_fi),
  247. /* Form 10 */
  248. MUIF_GOTO(mui_u8g2_btn_goto_wm_fi),
  249. MUIF_BUTTON("G0", mui_u8g2_btn_goto_wm_fi),
  250. MUIF_BUTTON("G1", mui_u8g2_btn_goto_w1_pi),
  251. MUIF_BUTTON("G2", mui_u8g2_btn_goto_w2_fi),
  252. /* Form 20 */
  253. MUIF_U8G2_U8_MIN_MAX("N0", &number_input9, 0, 9, mui_u8g2_u8_min_max_wm_mse_pi),
  254. MUIF_U8G2_U8_MIN_MAX("N1", &number_input99, 0, 99, mui_u8g2_u8_min_max_wm_mud_pi),
  255. MUIF_U8G2_U8_MIN_MAX("N2", &number_input9, 0, 9, mui_u8g2_u8_min_max_wm_mse_pf),
  256. MUIF_U8G2_U8_MIN_MAX("N3", &number_input99, 0, 99, mui_u8g2_u8_min_max_wm_mud_pf),
  257. /* Form 30 */
  258. MUIF_VARIABLE("C1",&chkbox1_input,mui_u8g2_u8_chkbox_wm_pi),
  259. MUIF_VARIABLE("C2",&chkbox2_input,mui_u8g2_u8_chkbox_wm_pi),
  260. MUIF_VARIABLE("RB",&radio_input,mui_u8g2_u8_radio_wm_pi),
  261. /* Form 40: Cycle Option */
  262. MUIF_VARIABLE("O1",&fruit_input,mui_u8g2_u8_opt_line_wa_mse_pi),
  263. MUIF_VARIABLE("O2",&fruit_input,mui_u8g2_u8_opt_line_wa_mud_pi),
  264. /* Form 50: Parent/Child Option */
  265. MUIF_VARIABLE("P1",&color_input,mui_u8g2_u8_opt_parent_wm_pi),
  266. MUIF_VARIABLE("ca",&color_input,mui_u8g2_u8_opt_radio_child_w1_pi),
  267. MUIF_VARIABLE("P2",&food_input,mui_u8g2_u8_opt_parent_wm_pi),
  268. MUIF_VARIABLE("cf",&food_input,mui_u8g2_u8_opt_child_wm_pi),
  269. /* Form 60: Char Input */
  270. MUIF_VARIABLE("T0", text_input+0, mui_u8g2_u8_char_wm_mud_pi),
  271. MUIF_VARIABLE("T1", text_input+1, mui_u8g2_u8_char_wm_mud_pi),
  272. MUIF_VARIABLE("T2", text_input+2, mui_u8g2_u8_char_wm_mud_pi),
  273. MUIF_VARIABLE("T3", text_input+3, mui_u8g2_u8_char_wm_mud_pi),
  274. /* Form 70: One of many selection within the same field */
  275. MUIF_U8G2_U16_LIST("A1", &list_selection_1, NULL, animals_get_str, animals_get_cnt, mui_u8g2_u16_list_line_wa_mse_pi),
  276. MUIF_U8G2_U16_LIST("A2", &list_selection_2, NULL, animals_get_str, animals_get_cnt, mui_u8g2_u16_list_line_wa_mud_pi),
  277. MUIF_U8G2_U16_LIST("AP", &list_selection_3, NULL, animals_get_str, animals_get_cnt, mui_u8g2_u16_list_parent_wm_pi),
  278. MUIF_U8G2_U16_LIST("AC", &list_selection_3, NULL, animals_get_str, animals_get_cnt, mui_u8g2_u16_list_child_w1_pi),
  279. /* Form 90 */
  280. MUIF_U8G2_S8_MIN_MAX("M0", &snumber_input9, -9, 9, mui_u8g2_s8_min_max_wm_mse_pi),
  281. MUIF_U8G2_S8_MIN_MAX("M1", &snumber_input99, -99, 99, mui_u8g2_s8_min_max_wm_mud_pi),
  282. MUIF_U8G2_S8_MIN_MAX("M2", &snumber_input9, -9, 9, mui_u8g2_s8_min_max_wm_mse_pf),
  283. MUIF_U8G2_S8_MIN_MAX("M3", &snumber_input99, -99, 99, mui_u8g2_s8_min_max_wm_mud_pf),
  284. };
  285. fds_t fds[] =
  286. MUI_FORM(1)
  287. MUI_STYLE(1)
  288. MUI_LABEL(5,10, "MUI Elements")
  289. MUI_XY("HR", 0,13)
  290. MUI_STYLE(0)
  291. MUI_DATA("GP",
  292. MUI_10 "Goto Buttons|"
  293. MUI_20 "uint8 Number|"
  294. MUI_90 "int8 Number|"
  295. MUI_30 "uint8 Checkbox|"
  296. MUI_40 "uint8 Cycle Options|"
  297. MUI_50 "uint8 ParentChild Select|"
  298. MUI_60 "uint8 Char/Text Input|"
  299. MUI_70 "uint16 Cycle Options|"
  300. MUI_80 "uint16 ParentChild Select|"
  301. MUI_18 "Parent/Child List|"
  302. MUI_20 "Array Edit")
  303. MUI_XYA("GC", 5, 25, 0)
  304. MUI_XYA("GC", 5, 37, 1)
  305. MUI_XYA("GC", 5, 49, 2)
  306. MUI_XYA("GC", 5, 61, 3)
  307. MUI_FORM(10)
  308. MUI_STYLE(1)
  309. MUI_LABEL(5,10, "Goto Buttons")
  310. MUI_XY("HR", 0,13)
  311. MUI_STYLE(0)
  312. MUI_DATA("GP",
  313. MUI_11 "btn_goto_wm_fi|"
  314. MUI_12 "btn_goto_w1_pi|"
  315. MUI_13 "btn_goto_w2_fi|"
  316. MUI_1 "Back to Main Menu"
  317. )
  318. MUI_XYA("GC", 5, 25, 0)
  319. MUI_XYA("GC", 5, 37, 1)
  320. MUI_XYA("GC", 5, 49, 2)
  321. MUI_XYA("GC", 5, 61, 3)
  322. MUI_FORM(11)
  323. MUI_STYLE(2)
  324. MUI_LABEL(1,5, "mui_u8g2_btn_goto_wm_fi")
  325. MUI_LABEL(1,12, "MUIF_GOTO, MUIF_BUTTON")
  326. MUI_LABEL(1,19, "MUI_GOTO, MUI_XYAT")
  327. MUI_LABEL(1,25, "Centered button, jumps to form")
  328. MUI_XY("HR", 0,26)
  329. MUI_STYLE(0)
  330. MUI_GOTO(64, 42, 10, "Button")
  331. MUI_GOTO(64, 59, 10, " Ok ")
  332. MUI_FORM(12)
  333. MUI_STYLE(2)
  334. MUI_LABEL(1,5, "mui_u8g2_btn_goto_w1_pi")
  335. MUI_LABEL(1,12, "MUIF_GOTO, MUIF_BUTTON")
  336. MUI_LABEL(1,19, "MUI_GOTO, MUI_XYAT")
  337. MUI_LABEL(1,25, "Full width button without frame")
  338. MUI_XY("HR", 0,26)
  339. MUI_STYLE(0)
  340. MUI_XYAT("G1", 1, 42, 10, "Button")
  341. MUI_GOTO(64, 59, 10, " Ok ")
  342. MUI_FORM(13)
  343. MUI_STYLE(2)
  344. MUI_LABEL(1,5, "mui_u8g2_btn_goto_w2_fi")
  345. MUI_LABEL(1,12, "MUIF_GOTO, MUIF_BUTTON")
  346. MUI_LABEL(1,19, "MUI_GOTO, MUI_XYAT")
  347. MUI_LABEL(1,25, "Centered half display width button")
  348. MUI_XY("HR", 0,26)
  349. MUI_STYLE(0)
  350. MUI_XYAT("G2", 32, 42, 10, "Btn 1")
  351. MUI_XYAT("G2", 96, 42, 10, "Btn 2")
  352. MUI_GOTO(64, 59, 10, " Ok ")
  353. MUI_FORM(20)
  354. MUI_STYLE(1)
  355. MUI_LABEL(5,10, "uint8 Number")
  356. MUI_XY("HR", 0,13)
  357. MUI_STYLE(0)
  358. MUI_DATA("GP",
  359. MUI_21 "u8_min_max_wm_mse_pi|"
  360. MUI_21 "u8_min_max_wm_mse_pi 2|"
  361. MUI_22 "u8_min_max_wm_mud_pi|"
  362. MUI_23 "u8_min_max_wm_mse_pf|"
  363. MUI_24 "u8_min_max_wm_mud_pf|"
  364. MUI_254 "2nd Back to Main Menu|"
  365. MUI_1 "Back to Main Menu" )
  366. MUI_XYA("GC", 5, 25, 0)
  367. MUI_XYA("GC", 5, 37, 1)
  368. MUI_XYA("GC", 5, 49, 2)
  369. MUI_XYA("GC", 5, 61, 3)
  370. MUI_FORM(21)
  371. MUI_STYLE(2)
  372. MUI_LABEL(1,5, "mui_u8g2_u8_min_max_wm_mse_pi")
  373. MUI_LABEL(1,12, "MUIF_U8G2_U8_MIN_MAX")
  374. MUI_LABEL(1,19, "MUI_XY")
  375. MUI_LABEL(1,25, "Input for uint8_t number")
  376. MUI_XY("HR", 0,26)
  377. MUI_STYLE(0)
  378. MUI_LABEL(1,40, "Number: ")
  379. MUI_XY("N0",70, 40)
  380. //MUI_GOTO(64, 59, 20, " Ok ")
  381. MUI_XYT("BK", 64, 59, " Ok ")
  382. MUI_FORM(22)
  383. MUI_STYLE(2)
  384. MUI_LABEL(1,5, "mui_u8g2_u8_min_max_wm_mud_pi")
  385. MUI_LABEL(1,12, "MUIF_U8G2_U8_MIN_MAX")
  386. MUI_LABEL(1,19, "MUI_XY")
  387. MUI_LABEL(1,25, "Input for uint8_t number")
  388. MUI_XY("HR", 0,26)
  389. MUI_STYLE(0)
  390. MUI_LABEL(1,40, "Number: ")
  391. MUI_XY("N1",70, 40)
  392. //MUI_GOTO(64, 59, 20, " Ok ")
  393. MUI_XYT("BK", 64, 59, " Ok ")
  394. MUI_FORM(23)
  395. MUI_STYLE(2)
  396. MUI_LABEL(1,5, "mui_u8g2_u8_min_max_wm_mse_pf")
  397. MUI_LABEL(1,12, "MUIF_U8G2_U8_MIN_MAX")
  398. MUI_LABEL(1,19, "MUI_XY")
  399. MUI_LABEL(1,25, "Input for uint8_t number")
  400. MUI_XY("HR", 0,26)
  401. MUI_STYLE(0)
  402. MUI_LABEL(1,40, "Number: ")
  403. MUI_XY("N2",70, 40)
  404. //MUI_GOTO(64, 59, 20, " Ok ")
  405. MUI_XYT("BK", 64, 59, " Ok ")
  406. MUI_FORM(24)
  407. MUI_STYLE(2)
  408. MUI_LABEL(1,5, "mui_u8g2_u8_min_max_wm_mud_pf")
  409. MUI_LABEL(1,12, "MUIF_U8G2_U8_MIN_MAX")
  410. MUI_LABEL(1,19, "MUI_XY")
  411. MUI_LABEL(1,25, "Input for uint8_t number")
  412. MUI_XY("HR", 0,26)
  413. MUI_STYLE(0)
  414. MUI_LABEL(1,40, "Number: ")
  415. MUI_XY("N3",70, 40)
  416. //MUI_GOTO(64, 59, 20, " Ok ")
  417. MUI_XYT("BK", 64, 59, " Ok ")
  418. MUI_FORM(90)
  419. MUI_STYLE(1)
  420. MUI_LABEL(5,10, "int8 Number")
  421. MUI_XY("HR", 0,13)
  422. MUI_STYLE(0)
  423. MUI_DATA("GP",
  424. MUI_91 "s8_min_max_wm_mse_pi|"
  425. MUI_92 "s8_min_max_wm_mud_pi|"
  426. MUI_93 "s8_min_max_wm_mse_pf|"
  427. MUI_94 "s8_min_max_wm_mud_pf|"
  428. MUI_1 "Back to Main Menu" )
  429. MUI_XYA("GC", 5, 25, 0)
  430. MUI_XYA("GC", 5, 37, 1)
  431. MUI_XYA("GC", 5, 49, 2)
  432. MUI_XYA("GC", 5, 61, 3)
  433. MUI_FORM(91)
  434. MUI_STYLE(2)
  435. MUI_LABEL(1,5, "mui_u8g2_s8_min_max_wm_mse_pi")
  436. MUI_LABEL(1,12, "MUIF_U8G2_S8_MIN_MAX")
  437. MUI_LABEL(1,19, "MUI_XY")
  438. MUI_LABEL(1,25, "Input for int8_t number")
  439. MUI_XY("HR", 0,26)
  440. MUI_STYLE(0)
  441. MUI_LABEL(1,40, "Number: ")
  442. MUI_XY("M0",70, 40)
  443. //MUI_GOTO(64, 59, 20, " Ok ")
  444. MUI_XYT("BK", 64, 59, " Ok ")
  445. MUI_FORM(92)
  446. MUI_STYLE(2)
  447. MUI_LABEL(1,5, "mui_u8g2_s8_min_max_wm_mud_pi")
  448. MUI_LABEL(1,12, "MUIF_U8G2_S8_MIN_MAX")
  449. MUI_LABEL(1,19, "MUI_XY")
  450. MUI_LABEL(1,25, "Input for int8_t number")
  451. MUI_XY("HR", 0,26)
  452. MUI_STYLE(0)
  453. MUI_LABEL(1,40, "Number: ")
  454. MUI_XY("M1",70, 40)
  455. //MUI_GOTO(64, 59, 20, " Ok ")
  456. MUI_XYT("BK", 64, 59, " Ok ")
  457. MUI_FORM(93)
  458. MUI_STYLE(2)
  459. MUI_LABEL(1,5, "mui_u8g2_s8_min_max_wm_mse_pf")
  460. MUI_LABEL(1,12, "MUIF_U8G2_S8_MIN_MAX")
  461. MUI_LABEL(1,19, "MUI_XY")
  462. MUI_LABEL(1,25, "Input for int8_t number")
  463. MUI_XY("HR", 0,26)
  464. MUI_STYLE(0)
  465. MUI_LABEL(1,40, "Number: ")
  466. MUI_XY("M2",70, 40)
  467. //MUI_GOTO(64, 59, 20, " Ok ")
  468. MUI_XYT("BK", 64, 59, " Ok ")
  469. MUI_FORM(94)
  470. MUI_STYLE(2)
  471. MUI_LABEL(1,5, "mui_u8g2_s8_min_max_wm_mud_pf")
  472. MUI_LABEL(1,12, "MUIF_U8G2_S8_MIN_MAX")
  473. MUI_LABEL(1,19, "MUI_XY")
  474. MUI_LABEL(1,25, "Input for int8_t number")
  475. MUI_XY("HR", 0,26)
  476. MUI_STYLE(0)
  477. MUI_LABEL(1,40, "Number: ")
  478. MUI_XY("M3",70, 40)
  479. //MUI_GOTO(64, 59, 20, " Ok ")
  480. MUI_XYT("BK", 64, 59, " Ok ")
  481. MUI_FORM(30)
  482. MUI_STYLE(1)
  483. MUI_LABEL(5,10, "uint8 Checkbox")
  484. MUI_XY("HR", 0,13)
  485. MUI_STYLE(0)
  486. MUI_DATA("GP",
  487. MUI_31 "u8_chkbox_wm_pi|"
  488. MUI_32 "u8_radio_wm_pi|"
  489. MUI_1 "Back to Main Menu" )
  490. MUI_XYA("GC", 5, 25, 0)
  491. MUI_XYA("GC", 5, 37, 1)
  492. MUI_XYA("GC", 5, 49, 2)
  493. MUI_XYA("GC", 5, 61, 3)
  494. MUI_FORM(31)
  495. MUI_STYLE(2)
  496. MUI_LABEL(1,5, "mui_u8g2_u8_chkbox_wm_pi")
  497. MUI_LABEL(1,12, "MUIF_VARIABLE")
  498. MUI_LABEL(1,19, "MUI_XY")
  499. MUI_LABEL(1,25, "Checkbox, values 0 and 1, uint8_t)")
  500. MUI_XY("HR", 0,26)
  501. MUI_STYLE(0)
  502. MUI_LABEL(1,40, "Checkbox 1: ")
  503. MUI_XY("C1",66, 40)
  504. MUI_LABEL(1,55, "Checkbox 2: ")
  505. MUI_XY("C2",66, 55)
  506. MUI_STYLE(3)
  507. //MUI_GOTO(110, 54, 30, "\x31")
  508. MUI_XYT("BK", 110, 54, "\x31")
  509. MUI_FORM(32)
  510. MUI_STYLE(2)
  511. MUI_LABEL(1,5, "mui_u8g2_u8_radio_wm_pi")
  512. MUI_LABEL(1,12, "MUIF_VARIABLE")
  513. MUI_LABEL(1,19, "MUI_XYA, MUI_XYAT")
  514. MUI_LABEL(1,25, "Radio buttons, assign arg to variable")
  515. MUI_XY("HR", 0,26)
  516. MUI_STYLE(0)
  517. MUI_XYAT("RB", 1, 40, 1, "Radio 1")
  518. MUI_XYAT("RB", 1, 55, 2, "Radio 2")
  519. MUI_STYLE(3)
  520. //MUI_GOTO(110, 54, 30, "\x31")
  521. MUI_XYT("BK", 110, 54, "\x31")
  522. MUI_FORM(40)
  523. MUI_STYLE(1)
  524. MUI_LABEL(5,10, "uint8 Cycle Options")
  525. MUI_XY("HR", 0,13)
  526. MUI_STYLE(0)
  527. MUI_DATA("GP",
  528. MUI_41 "u8_opt_line_wa_mse_pi|"
  529. MUI_42 "u8_opt_line_wa_mud_pi|"
  530. MUI_1 "Back to Main Menu" )
  531. MUI_XYA("GC", 5, 25, 0)
  532. MUI_XYA("GC", 5, 37, 1)
  533. MUI_XYA("GC", 5, 49, 2)
  534. MUI_XYA("GC", 5, 61, 3)
  535. MUI_FORM(41)
  536. MUI_STYLE(2)
  537. MUI_LABEL(1,5, "mui_u8g2_u8_opt_line_wa_mse_pi")
  538. MUI_LABEL(1,12, "MUIF_VARIABLE")
  539. MUI_LABEL(1,19, "MUI_XYAT")
  540. MUI_LABEL(1,25, "Options forward cycle")
  541. MUI_XY("HR", 0,26)
  542. MUI_STYLE(0)
  543. MUI_LABEL(5,40, "Fruit:")
  544. MUI_XYAT("O1",60, 40, 60, "Banana|Apple|Melon|Cranberry")
  545. MUI_STYLE(0)
  546. MUI_GOTO(64, 59, 40, " Ok ")
  547. MUI_FORM(42)
  548. MUI_STYLE(2)
  549. MUI_LABEL(1,5, "mui_u8g2_u8_opt_line_wa_mud_pi")
  550. MUI_LABEL(1,12, "MUIF_VARIABLE")
  551. MUI_LABEL(1,19, "MUI_XYAT")
  552. MUI_LABEL(1,25, "Options forward+backward cycle")
  553. MUI_XY("HR", 0,26)
  554. MUI_STYLE(0)
  555. MUI_LABEL(5,40, "Fruit:")
  556. MUI_XYAT("O2",60, 40, 60, "Banana|Apple|Melon|Cranberry")
  557. MUI_STYLE(0)
  558. MUI_GOTO(64, 59, 40, " Ok ")
  559. MUI_FORM(50)
  560. MUI_STYLE(1)
  561. MUI_LABEL(5,10, "uint8 ParentChild Select")
  562. MUI_XY("HR", 0,13)
  563. MUI_STYLE(0)
  564. MUI_DATA("GP",
  565. MUI_51 "u8_opt_radio_child_w1_mse_pi|"
  566. MUI_53 "u8_opt_child_wm_mse_pi|"
  567. MUI_1 "Back to Main Menu" )
  568. MUI_XYA("GC", 5, 25, 0)
  569. MUI_XYA("GC", 5, 37, 1)
  570. MUI_XYA("GC", 5, 49, 2)
  571. //MUI_XYA("GC", 5, 61, 3)
  572. MUI_FORM(51)
  573. MUI_STYLE(2)
  574. MUI_LABEL(1,5, "..._u8_opt_parent_wm_mse_pi")
  575. MUI_LABEL(1,12, "MUIF_VARIABLE")
  576. MUI_LABEL(1,19, "MUI_XYAT")
  577. MUI_LABEL(1,25, "Parent: Show selected option")
  578. MUI_XY("HR", 0,26)
  579. MUI_STYLE(0)
  580. MUI_LABEL(5,40, "Color:")
  581. MUI_XYAT("P1",60, 40, 52, "red|orange|yellow|green|cyan|azure|blue|violet|magenta|rose")
  582. MUI_STYLE(0)
  583. MUI_GOTO(64, 59, 50, " Ok ")
  584. MUI_FORM(52)
  585. MUI_STYLE(2)
  586. MUI_LABEL(1,5, "..._u8_opt_radio_child_w1_mse_pi")
  587. MUI_LABEL(1,12, "MUIF_VARIABLE")
  588. MUI_LABEL(1,19, "MUI_XYA")
  589. MUI_LABEL(1,25, "Child: Show selectable options")
  590. MUI_XY("HR", 0,26)
  591. MUI_STYLE(0)
  592. MUI_XYA("ca", 5, 38, 0)
  593. MUI_XYA("ca", 5, 49, 1)
  594. MUI_XYA("ca", 5, 60, 2)
  595. MUI_FORM(53)
  596. MUI_STYLE(2)
  597. MUI_LABEL(1,5, "..._u8_opt_parent_wm_mse_pi")
  598. MUI_LABEL(1,12, "MUIF_VARIABLE")
  599. MUI_LABEL(1,19, "MUI_XYAT")
  600. MUI_LABEL(1,25, "Parent: Show selected option")
  601. MUI_XY("HR", 0,26)
  602. MUI_STYLE(0)
  603. MUI_LABEL(15,42, "We need:")
  604. MUI_STYLE(4)
  605. MUI_XYAT("P2",80, 49, 54, "\x30|\x31|\x32|\x33|\x34|\x35|\x36|\x37|\x38|\x39|\x40|\x41|\x42|\x43")
  606. MUI_STYLE(0)
  607. MUI_GOTO(64, 59, 50, " Ok ")
  608. MUI_FORM(54)
  609. MUI_STYLE(2)
  610. MUI_LABEL(1,5, "..._u8_opt_child_wm_mse_pi")
  611. MUI_LABEL(1,12, "MUIF_VARIABLE")
  612. MUI_LABEL(1,19, "MUI_XYA")
  613. MUI_LABEL(1,25, "Child: Show selectable options")
  614. MUI_XY("HR", 0,26)
  615. MUI_STYLE(4)
  616. MUI_XYA("cf", 3, 53, 0)
  617. MUI_XYA("cf", 28, 53, 1)
  618. MUI_XYA("cf", 53, 53, 2)
  619. MUI_XYA("cf", 78, 53, 3)
  620. MUI_XYA("cf", 103, 53, 4)
  621. MUI_FORM(60)
  622. MUI_STYLE(1)
  623. MUI_LABEL(5,10, "uint8 Char/Text Input")
  624. MUI_XY("HR", 0,13)
  625. MUI_STYLE(0)
  626. MUI_DATA("GP",
  627. MUI_61 "u8_char_wm_mud_pi|"
  628. MUI_1 "Back to Main Menu" )
  629. MUI_XYA("GC", 5, 25, 0)
  630. MUI_XYA("GC", 5, 37, 1)
  631. MUI_XYA("GC", 5, 49, 2)
  632. MUI_XYA("GC", 5, 61, 3)
  633. MUI_FORM(61)
  634. MUI_STYLE(2)
  635. MUI_LABEL(1,5, "mui_u8g2_u8_char_wm_mud_pi")
  636. MUI_LABEL(1,12, "MUIF_VARIABLE")
  637. MUI_LABEL(1,19, "MUI_XYAT")
  638. MUI_LABEL(1,25, "4x Char Input")
  639. MUI_XY("HR", 0,26)
  640. MUI_STYLE(0)
  641. MUI_LABEL(5,40, "Text:")
  642. MUI_STYLE(5)
  643. MUI_XY("T0",40, 40)
  644. MUI_XY("T1",48, 40)
  645. MUI_XY("T2",56, 40)
  646. MUI_XY("T3",64, 40)
  647. MUI_STYLE(0)
  648. MUI_GOTO(64, 59, 60, " Ok ")
  649. MUI_FORM(70)
  650. MUI_STYLE(1)
  651. MUI_LABEL(5,10, "uint16 Cycle Options")
  652. MUI_XY("HR", 0,13)
  653. MUI_STYLE(0)
  654. MUI_DATA("GP",
  655. MUI_71 "u16_list_line_wa_mse_pi|"
  656. MUI_72 "u16_list_line_wa_mud_pi|"
  657. MUI_1 "Back to Main Menu" )
  658. MUI_XYA("GC", 5, 25, 0)
  659. MUI_XYA("GC", 5, 37, 1)
  660. MUI_XYA("GC", 5, 49, 2)
  661. MUI_XYA("GC", 5, 61, 3)
  662. MUI_FORM(71)
  663. MUI_STYLE(2)
  664. MUI_LABEL(1,5, "mui_u8g2_u16_list_line_wa_mse_pi")
  665. MUI_LABEL(1,12, "MUIF_U8G2_U16_LIST")
  666. MUI_LABEL(1,19, "MUI_XYA")
  667. MUI_LABEL(1,25, "Cycle through options")
  668. MUI_XY("HR", 0,26)
  669. MUI_STYLE(0)
  670. MUI_LABEL(5,40, "Animal:")
  671. MUI_XYA("A1",45, 40, 50)
  672. MUI_GOTO(64, 59, 70, " Ok ")
  673. MUI_FORM(72)
  674. MUI_STYLE(2)
  675. MUI_LABEL(1,5, "mui_u8g2_u16_list_line_wa_mud_pi")
  676. MUI_LABEL(1,12, "MUIF_U8G2_U16_LIST")
  677. MUI_LABEL(1,19, "MUI_XYA")
  678. MUI_LABEL(1,25, "Cycle through options")
  679. MUI_XY("HR", 0,26)
  680. MUI_STYLE(0)
  681. MUI_LABEL(5,40, "Animal:")
  682. MUI_XYA("A2",45, 40, 50)
  683. MUI_GOTO(64, 59, 70, " Ok ")
  684. //uint8_t mui_u8g2_u16_list_parent_wm_pi(mui_t *ui, uint8_t msg); /* MUIF_U8G2_U16_LIST, MUI_XYA, arg=subform */
  685. //uint8_t mui_u8g2_u16_list_child_w1_pi(mui_t *ui, uint8_t msg); /* MUIF_U8G2_U16_LIST, MUI_XYA, arg=sub element number */
  686. MUI_FORM(80)
  687. MUI_STYLE(1)
  688. MUI_LABEL(0,10, "uint8 ParentChild Select")
  689. MUI_XY("HR", 0,13)
  690. MUI_STYLE(6)
  691. MUI_DATA("GP",
  692. MUI_81 "u16_list_parent_wm_mse_pi|"
  693. MUI_1 "Back to Main Menu" )
  694. MUI_XYA("GC", 0, 25, 0)
  695. MUI_XYA("GC", 0, 37, 1)
  696. MUI_XYA("GC", 0, 49, 2)
  697. //MUI_XYA("GC", 5, 61, 3)
  698. MUI_FORM(81)
  699. MUI_STYLE(2)
  700. MUI_LABEL(1,5, "..._u16_list_parent_wm_mse_pi")
  701. MUI_LABEL(1,12, "MUIF_U8G2_U16_LIST")
  702. MUI_LABEL(1,19, "MUI_XYA")
  703. MUI_LABEL(1,25, "Parent: Show selected option")
  704. MUI_XY("HR", 0,26)
  705. MUI_STYLE(0)
  706. MUI_LABEL(5,40, "Animal:")
  707. MUI_XYA("AP",50, 40, 82) /* jump to sub form 19 */
  708. MUI_GOTO(64, 59, 80, " Ok ")
  709. MUI_FORM(82)
  710. MUI_STYLE(2)
  711. MUI_LABEL(1,5, "...u16_list_child_w1_mse_pi")
  712. MUI_LABEL(1,12, "MUIF_U8G2_U16_LIST")
  713. MUI_LABEL(1,19, "MUI_XYA")
  714. MUI_LABEL(1,25, "Child: Show selectable options")
  715. MUI_XY("HR", 0,26)
  716. MUI_STYLE(0)
  717. MUI_XYA("AC", 5, 38, 0)
  718. MUI_XYA("AC", 5, 49, 1)
  719. MUI_XYA("AC", 5, 60, 2)
  720. /*
  721. MUIF_VARIABLE("P1",&color_input,mui_u8g2_u8_opt_parent_wm_pi),
  722. MUIF_VARIABLE("c1",&color_input,mui_u8g2_u8_opt_radio_child_w1_pi),
  723. MUIF_VARIABLE("P2",&food_input,mui_u8g2_u8_opt_parent_wm_pi),
  724. MUIF_VARIABLE("ca",&food_input,mui_u8g2_u8_opt_child_wm_pi),
  725. MUI_LABEL(5,24, "Color:")
  726. MUI_XYAT("IC",80, 24, 12, "red|orange|yellow|green|cyan|azure|blue|violet|magenta|rose")
  727. MUI_LABEL(5,42, "We need:")
  728. MUI_STYLE(3)
  729. MUI_XYAT("ID",80, 49, 21, "\x30|\x31|\x32|\x33|\x34|\x35|\x36|\x37|\x38|\x39|\x40|\x41|\x42|\x43")
  730. */
  731. ;
  732. muif_t muif_list_old[] MUI_PROGMEM = {
  733. /* normal text style */
  734. MUIF_STYLE(0, mui_style_helv_r_08),
  735. /* bold text style */
  736. MUIF_STYLE(1, mui_style_helv_b_08),
  737. /* monospaced font */
  738. MUIF_STYLE(2, mui_style_monospaced),
  739. /* food and drink */
  740. MUIF_STYLE(3, mui_style_streamline_food_drink),
  741. /* horizontal line (hrule) */
  742. MUIF_RO("HR", mui_hrule),
  743. /* Goto Form Button where the width is equal to the size of the text, spaces can be used to extend the size */
  744. //MUIF("G1",MUIF_CFLAG_IS_CURSOR_SELECTABLE,0,mui_u8g2_btn_goto_wm_fi),
  745. MUIF_BUTTON("G1", mui_u8g2_btn_goto_wm_fi),
  746. /* input for a number between 0 to 9 */
  747. //MUIF("IN",MUIF_CFLAG_IS_CURSOR_SELECTABLE,&number_input,mui_u8g2_u8_value_0_9_wm_mse_pi),
  748. //MUIF("IN",MUIF_CFLAG_IS_CURSOR_SELECTABLE, (void *)((mui_u8g2_u8_min_max_t [] ) {{ &number_input COMMA 1 COMMA 8 } } ) , mui_u8g2_u8_min_max_wm_mse_pi),
  749. MUIF_U8G2_U8_MIN_MAX("IN", &number_input, 0, 9, mui_u8g2_u8_min_max_wm_mse_pf),
  750. /* input for a number between 0 to 100 */
  751. //MUIF("IH",MUIF_CFLAG_IS_CURSOR_SELECTABLE,&number_input2,mui_u8g2_u8_value_0_100_wm_mud_pi),
  752. MUIF_U8G2_U8_MIN_MAX("IH", &number_input2, 0, 100, mui_u8g2_u8_min_max_wm_mud_pf),
  753. /* input for text with four chars */
  754. /*
  755. MUIF("T0",MUIF_CFLAG_IS_CURSOR_SELECTABLE,text_input+0,mui_u8g2_u8_char_wm_mud_pi),
  756. MUIF("T1",MUIF_CFLAG_IS_CURSOR_SELECTABLE,text_input+1,mui_u8g2_u8_char_wm_mud_pi),
  757. MUIF("T2",MUIF_CFLAG_IS_CURSOR_SELECTABLE,text_input+2,mui_u8g2_u8_char_wm_mud_pi),
  758. MUIF("T3",MUIF_CFLAG_IS_CURSOR_SELECTABLE,text_input+3,mui_u8g2_u8_char_wm_mud_pi),
  759. */
  760. MUIF_VARIABLE("T0", text_input+0, mui_u8g2_u8_char_wm_mud_pi),
  761. MUIF_VARIABLE("T1", text_input+1, mui_u8g2_u8_char_wm_mud_pi),
  762. MUIF_VARIABLE("T2", text_input+2, mui_u8g2_u8_char_wm_mud_pi),
  763. MUIF_VARIABLE("T3", text_input+3, mui_u8g2_u8_char_wm_mud_pi),
  764. /* input for a fruit (0..3), implements a selection, where the user can cycle through the options */
  765. MUIF_VARIABLE("IF",&fruit_input,mui_u8g2_u8_opt_line_wa_mse_pi),
  766. MUIF_VARIABLE("IG",&fruit_input2,mui_u8g2_u8_opt_line_wa_mud_pi),
  767. /* checkbox */
  768. //MUIF("CB",MUIF_CFLAG_IS_CURSOR_SELECTABLE,&checkbox_input,mui_u8g2_u8_chkbox_wm_pi),
  769. MUIF_VARIABLE("CB",&checkbox_input,mui_u8g2_u8_chkbox_wm_pi),
  770. /* the following two fields belong together and implement a single selection combo box to select a color */
  771. //MUIF("IC",MUIF_CFLAG_IS_CURSOR_SELECTABLE,&color_input,mui_u8g2_u8_opt_parent_wa_mse_pi),
  772. MUIF_VARIABLE("IC",&color_input,mui_u8g2_u8_opt_parent_wm_pi),
  773. MUIF_VARIABLE("OC",&color_input,mui_u8g2_u8_opt_radio_child_w1_pi),
  774. MUIF_VARIABLE("ID",&food_input,mui_u8g2_u8_opt_parent_wm_pi),
  775. MUIF_VARIABLE("OD",&food_input,mui_u8g2_u8_opt_child_wm_pi),
  776. /* radio button style */
  777. //MUIF("RS",MUIF_CFLAG_IS_CURSOR_SELECTABLE,&direction_input,mui_u8g2_u8_radio_wm_pi),
  778. MUIF_VARIABLE("RS",&direction_input,mui_u8g2_u8_radio_wm_pi),
  779. MUIF_U8G2_U16_LIST("L1", &list_selection, NULL, list_get_str, list_get_cnt, mui_u8g2_u16_list_line_wa_mse_pi),
  780. MUIF_U8G2_U16_LIST("L2", &list_selection2, NULL, list_get_str, list_get_cnt, mui_u8g2_u16_list_line_wa_mud_pi),
  781. MUIF_U8G2_U16_LIST("LP", &list_selection3, NULL, list_get_str, list_get_cnt, mui_u8g2_u16_list_parent_wm_pi),
  782. MUIF_U8G2_U16_LIST("LC", &list_selection3, NULL, list_get_str, list_get_cnt, mui_u8g2_u16_list_child_w1_pi),
  783. MUIF_U8G2_U16_LIST("LG", &list_selection4, NULL, menu_get_str, menu_get_cnt, mui_u8g2_u16_list_goto_w1_pi),
  784. /* MUI_GOTO uses the fixed ".G" id and is intended for goto buttons. This is a full display width style button */
  785. MUIF_GOTO(mui_u8g2_btn_goto_w1_pi),
  786. /* MUI_LABEL uses the fixed ".L" id and is used to place read only text on a form */
  787. //MUIF(".L",0,0,mui_u8g2_draw_text),
  788. MUIF_LABEL(mui_u8g2_draw_text),
  789. /* array example */
  790. MUIF_U8G2_U8_MIN_MAX("AP", &array_pos, 0, 3, muif_array_pos_selection),
  791. MUIF_U8G2_U8_MIN_MAX("AF", &led_off_time, 0, 20, mui_u8g2_u8_min_max_wm_mse_pi),
  792. MUIF_U8G2_U8_MIN_MAX("AN", &led_on_time, 0, 20, mui_u8g2_u8_min_max_wm_mse_pi),
  793. /* button for the minimal example */
  794. MUIF("BN", MUIF_CFLAG_IS_CURSOR_SELECTABLE, 0, mui_u8g2_btn_exit_wm_fi),
  795. /* Leave the menu system */
  796. MUIF("LV",MUIF_CFLAG_IS_CURSOR_SELECTABLE,&exit_code,mui_u8g2_btn_exit_wm_fi)
  797. };
  798. /*
  799. The form definition string (fds) defines all forms and the fields on those forms.
  800. A new form always starts with MUI_FORM(u). The form ends with the next MUI_FORM() or the end of the fds.
  801. Inside the form use fields or the style command (MUI_STYLE)
  802. The fields are define with
  803. MUI_XY(id, x, y) Field 'id' without extra argument or text placed at the specified xy position
  804. MUI_XYT(id, x, y, text) Field 'id' with the specified test at position xy
  805. MUI_XYA(id, x, y, a) Field 'id' with argument 'a' at position xy
  806. MUI_XYAT(id, x, y, a, text) Field 'id' with argument and text placed at position xy
  807. MUI_LABEL(x,y,text) Field '.L' (usually some readonly text) placed at position xy
  808. MUI_GOTO(x,y,n,text) Field '.G', usually a button placed at xy, which activates form n
  809. Note:
  810. MUI_LABEL(x,y,text) is the same as MUI_XYT(".L", x, y, text)
  811. MUI_GOTO(x,y,text) is the same as MUI_XYAT(".G", x, y, n, text)
  812. */
  813. fds_t fds_old[] =
  814. /* top level main menu */
  815. MUI_FORM(0)
  816. MUI_STYLE(1)
  817. MUI_LABEL(5,10, "Main Menu 1/3")
  818. MUI_XY("HR", 0,13)
  819. MUI_STYLE(0)
  820. MUI_GOTO(5,25,10, "Enter a number")
  821. MUI_GOTO(5,37,11, "Parent/Child Selection")
  822. MUI_GOTO(5,49,13, "Checkbox")
  823. MUI_GOTO(5,61,1, "More...")
  824. MUI_FORM(1)
  825. MUI_STYLE(1)
  826. MUI_LABEL(5,10, "Main Menu 2/3")
  827. MUI_XY("HR", 0,13)
  828. MUI_STYLE(0)
  829. MUI_GOTO(5,25,14, "Radio Selection")
  830. MUI_GOTO(5,37,15, "Text Input")
  831. MUI_GOTO(5,49,16, "Single Line Selection")
  832. MUI_GOTO(5,61,2, "More...")
  833. MUI_FORM(2)
  834. MUI_STYLE(1)
  835. MUI_LABEL(5,10, "Main Menu 3/3")
  836. MUI_XY("HR", 0,13)
  837. MUI_STYLE(0)
  838. MUI_GOTO(5,25,17, "List Line Selection")
  839. MUI_GOTO(5,37,18, "Parent/Child List")
  840. MUI_GOTO(5,49,20, "Array Edit")
  841. MUI_GOTO(5,61,3, "Alternative Menu")
  842. MUI_FORM(3)
  843. MUI_STYLE(1)
  844. MUI_LABEL(5,10, "Alternative Menu")
  845. MUI_XY("HR", 0,13)
  846. MUI_STYLE(0)
  847. MUI_XYA("LG", 5, 25, 0)
  848. MUI_XYA("LG", 5, 37, 1)
  849. MUI_XYA("LG", 5, 49, 2)
  850. MUI_XYA("LG", 5, 61, 3)
  851. /* number entry demo */
  852. MUI_FORM(10)
  853. MUI_STYLE(1)
  854. MUI_LABEL(5,10, "Number Menu")
  855. MUI_XY("HR", 0,13)
  856. MUI_STYLE(0)
  857. MUI_LABEL(5,27, "Number [mse]:")
  858. MUI_XY("IN",76, 27)
  859. MUI_LABEL(5,41, "Number [mud]:")
  860. MUI_XY("IH",76, 41)
  861. MUI_XYAT("G1",64, 59, 0, " OK ")
  862. /* parent / child selection */
  863. MUI_FORM(11)
  864. MUI_STYLE(1)
  865. MUI_LABEL(5,10, "Parent/Child Selection")
  866. MUI_XY("HR", 0,13)
  867. MUI_STYLE(0)
  868. MUI_LABEL(5,24, "Color:")
  869. MUI_XYAT("IC",80, 24, 12, "red|orange|yellow|green|cyan|azure|blue|violet|magenta|rose") /* jump to sub form 12 */
  870. MUI_LABEL(5,42, "We need:")
  871. MUI_STYLE(3)
  872. MUI_XYAT("ID",80, 49, 21, "\x30|\x31|\x32|\x33|\x34|\x35|\x36|\x37|\x38|\x39|\x40|\x41|\x42|\x43")
  873. MUI_STYLE(0)
  874. MUI_XYAT("G1",64, 60, 0, " OK ")
  875. /* combo box color selection */
  876. MUI_FORM(12)
  877. MUI_STYLE(1)
  878. MUI_LABEL(5,10, "Color Selection")
  879. MUI_XY("HR", 0,13)
  880. MUI_STYLE(0)
  881. MUI_XYA("OC", 5, 30, 0) /* takeover the selection text from calling field ("red") */
  882. MUI_XYA("OC", 5, 42, 1) /* takeover the selection text from calling field ("green") */
  883. MUI_XYA("OC", 5, 54, 2) /* */
  884. /* no ok required, clicking on the selection, will jump back */
  885. /* Checkbox demo */
  886. MUI_FORM(13)
  887. MUI_STYLE(1)
  888. MUI_LABEL(5,10, "Checkbox Menu")
  889. MUI_XY("HR", 0,13)
  890. MUI_STYLE(0)
  891. MUI_LABEL(5,30, "Checkbox:")
  892. MUI_XY("CB",60, 30)
  893. MUI_XYAT("G1",64, 59, 0, " OK ")
  894. /* Radio selection demo */
  895. MUI_FORM(14)
  896. MUI_STYLE(1)
  897. MUI_LABEL(5,10, "Radio Selection Menu")
  898. MUI_XY("HR", 0,13)
  899. MUI_STYLE(0)
  900. MUI_XYAT("RS",10, 28,0,"North")
  901. MUI_XYAT("RS",10, 40,1,"South")
  902. MUI_XYAT("RS",65, 28,2,"East")
  903. MUI_XYAT("RS",65, 40,3,"West")
  904. MUI_XYAT("G1",64, 59, 1, " OK ")
  905. /* text demo */
  906. MUI_FORM(15)
  907. MUI_STYLE(1)
  908. MUI_LABEL(5,10, "Enter Text Menu")
  909. MUI_XY("HR", 0,13)
  910. MUI_STYLE(0)
  911. MUI_LABEL(5,30, "Text:")
  912. MUI_STYLE(2)
  913. MUI_XY("T0",40, 30)
  914. MUI_XY("T1",48, 30)
  915. MUI_XY("T2",56, 30)
  916. MUI_XY("T3",64, 30)
  917. MUI_STYLE(0)
  918. MUI_XYAT("G1",64, 59, 1, " OK ")
  919. /* single line selection */
  920. MUI_FORM(16)
  921. MUI_STYLE(1)
  922. MUI_LABEL(5,10, "Single Line Selection")
  923. MUI_XY("HR", 0,13)
  924. MUI_STYLE(0)
  925. MUI_LABEL(5,29, "Fruit [mse]:")
  926. MUI_XYAT("IF",60, 29, 60, "Banana|Apple|Melon|Cranberry")
  927. MUI_LABEL(5,43, "Fruit [mud]:")
  928. MUI_XYAT("IG",60, 43, 60, "Banana|Apple|Melon|Cranberry")
  929. MUI_XYAT("G1",64, 59, 1, " OK ")
  930. /* long list example with list callback functions */
  931. MUI_FORM(17)
  932. MUI_STYLE(1)
  933. MUI_LABEL(5,10, "List Line Selection")
  934. MUI_XY("HR", 0,13)
  935. MUI_STYLE(0)
  936. MUI_LABEL(5,29, "List [mse]:")
  937. MUI_XYA("L1",60, 29, 60)
  938. MUI_LABEL(5,43, "List [mud]:")
  939. MUI_XYA("L2",60, 43, 60)
  940. MUI_XYAT("G1",64, 59, 2, " OK ")
  941. /* parent / child selection */
  942. MUI_FORM(18)
  943. MUI_STYLE(1)
  944. MUI_LABEL(5,10, "Parent/Child List")
  945. MUI_XY("HR", 0,13)
  946. MUI_STYLE(0)
  947. MUI_LABEL(5,29, "Animal:")
  948. MUI_XYA("LP",50, 29, 19) /* jump to sub form 19 */
  949. MUI_XYAT("G1",64, 59, 2, " OK ")
  950. /* combo box color selection */
  951. MUI_FORM(19)
  952. MUI_STYLE(1)
  953. MUI_LABEL(5,10, "Animal Selection")
  954. MUI_XY("HR", 0,13)
  955. MUI_STYLE(0)
  956. MUI_XYA("LC", 5, 30, 0) /* takeover the selection text from calling field ("red") */
  957. MUI_XYA("LC", 5, 42, 1) /* takeover the selection text from calling field ("green") */
  958. MUI_XYA("LC", 5, 54, 2) /* */
  959. /* no ok required, clicking on the selection, will jump back */
  960. MUI_FORM(20)
  961. MUI_STYLE(1)
  962. MUI_LABEL(5,10, "Array Edit")
  963. MUI_XY("HR", 0,13)
  964. MUI_STYLE(0)
  965. MUI_LABEL(5,24, "Position:")
  966. MUI_XY("AP",76, 24)
  967. MUI_LABEL(5,35, "LED off:")
  968. MUI_XY("AF",76, 35)
  969. MUI_LABEL(5,46, "LED on:")
  970. MUI_XY("AN",76, 46)
  971. MUI_XYAT("G1",64, 59, 2, " OK ")
  972. /* combo box Food & Drink Selection, called from form 11 */
  973. MUI_FORM(21)
  974. MUI_STYLE(1)
  975. MUI_LABEL(5,10, "Food & Drink Selection")
  976. MUI_XY("HR", 0,13)
  977. MUI_STYLE(3)
  978. MUI_XYA("OD", 3, 45, 0)
  979. MUI_XYA("OD", 28, 45, 1)
  980. MUI_XYA("OD", 53, 45, 2)
  981. MUI_XYA("OD", 78, 45, 3)
  982. MUI_XYA("OD", 103, 45, 4)
  983. /* minimal example */
  984. MUI_FORM(200)
  985. MUI_STYLE(0)
  986. MUI_XYT("BN",64, 30, " Select Me ")
  987. MUI_FORM(201)
  988. MUI_STYLE(0)
  989. MUI_LABEL(5,12, "Countdown Time")
  990. MUI_LABEL(5,30, "Seconds:")
  991. MUI_XY("IN",60, 30)
  992. MUI_XYT("LV",64, 59, " OK ")
  993. ;
  994. int screenshot_n = 0;
  995. void do_screenshot(void)
  996. {
  997. char s[4096];
  998. u8x8_SaveBitmapTGA(u8g2_GetU8x8(&u8g2), "screenshot.tga");
  999. sprintf( s,
  1000. "convert -border 4 -bordercolor 'rgb(255,190,40)'"
  1001. " -fill 'rgb(255,170,0)' -opaque white"
  1002. " -filter point -resize 200%%"
  1003. " screenshot.tga pic%04d.png", screenshot_n);
  1004. system(s);
  1005. screenshot_n++;
  1006. /*
  1007. gif animation:
  1008. convert -delay 40 -loop 0 pic*.png animation.gif
  1009. */
  1010. }
  1011. int main(void)
  1012. {
  1013. int x, y;
  1014. int k;
  1015. u8g2_SetupBuffer_SDL_128x64_4(&u8g2, &u8g2_cb_r0);
  1016. u8x8_InitDisplay(u8g2_GetU8x8(&u8g2));
  1017. u8x8_SetPowerSave(u8g2_GetU8x8(&u8g2), 0);
  1018. u8x8_ConnectBitmapToU8x8(u8g2_GetU8x8(&u8g2)); /* connect to bitmap */
  1019. u8g2_SetFontMode(&u8g2, 1);
  1020. mui_Init(&ui, &u8g2, fds, muif_list, sizeof(muif_list)/sizeof(muif_t));
  1021. //mui_GotoForm(&ui, 201, 0);
  1022. mui_GotoForm(&ui, 1, 0);
  1023. //puts(fds);
  1024. x = 4; // use as height for the box
  1025. y = 0;
  1026. for(;;)
  1027. {
  1028. u8g2_SetFontRefHeightExtendedText(&u8g2);
  1029. u8g2_FirstPage(&u8g2);
  1030. do
  1031. {
  1032. mui_Draw(&ui);
  1033. } while( u8g2_NextPage(&u8g2) );
  1034. do_screenshot();
  1035. // printf("mui_GetCurrentCursorFocusPosition=%d\n", mui_GetCurrentCursorFocusPosition(&ui));
  1036. do
  1037. {
  1038. k = u8g_sdl_get_key();
  1039. } while( k < 0 );
  1040. if ( k == 273 ) y -= 1;
  1041. if ( k == 274 ) y += 1;
  1042. if ( k == 276 ) x -= 1;
  1043. if ( k == 275 ) x += 1;
  1044. /*
  1045. if ( k == 'e' ) y -= 1;
  1046. if ( k == 'x' ) y += 1;
  1047. if ( k == 's' ) x -= 1;
  1048. if ( k == 'd' ) x += 1;
  1049. */
  1050. if ( k == 'q' ) break;
  1051. if ( k == 'n' )
  1052. {
  1053. mui_NextField(&ui);
  1054. }
  1055. if ( k == 'p' )
  1056. {
  1057. mui_PrevField(&ui);
  1058. }
  1059. if ( k == 's' )
  1060. {
  1061. mui_SendSelect(&ui);
  1062. }
  1063. if ( k == 't' )
  1064. {
  1065. puts("screenshot");
  1066. do_screenshot();
  1067. }
  1068. if ( x < 0 )
  1069. x = 0;
  1070. }
  1071. return 0;
  1072. }