My Marlin configs for Fabrikator Mini and CTC i3 Pro B
Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

draw_language.cpp 15KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401
  1. /**
  2. * Marlin 3D Printer Firmware
  3. * Copyright (c) 2020 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
  4. *
  5. * Based on Sprinter and grbl.
  6. * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
  7. *
  8. * This program is free software: you can redistribute it and/or modify
  9. * it under the terms of the GNU General Public License as published by
  10. * the Free Software Foundation, either version 3 of the License, or
  11. * (at your option) any later version.
  12. *
  13. * This program is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License
  19. * along with this program. If not, see <https://www.gnu.org/licenses/>.
  20. *
  21. */
  22. #include "../../../../inc/MarlinConfigPre.h"
  23. #if HAS_TFT_LVGL_UI
  24. #include "draw_ui.h"
  25. #include <lv_conf.h>
  26. //#include "../lvgl/src/lv_objx/lv_imgbtn.h"
  27. //#include "../lvgl/src/lv_objx/lv_img.h"
  28. //#include "../lvgl/src/lv_core/lv_disp.h"
  29. //#include "../lvgl/src/lv_core/lv_refr.h"
  30. #include "../../../../inc/MarlinConfig.h"
  31. #include <string.h>
  32. //static lv_obj_t *buttonMoveZ,*buttonTest,*buttonZ0,*buttonStop,*buttonReturn;
  33. #define ID_CN 1
  34. #define ID_T_CN 2
  35. #define ID_EN 3
  36. #define ID_RU 4
  37. #define ID_ES 5
  38. #define ID_FR 6
  39. #define ID_IT 7
  40. #define ID_L_RETURN 8
  41. #define SELECTED 1
  42. #define UNSELECTED 0
  43. static void disp_language(uint8_t language, uint8_t state);
  44. extern lv_group_t * g;
  45. static lv_obj_t * scr;
  46. static lv_obj_t *buttonCN, *buttonT_CN, *buttonEN, *buttonRU;
  47. static lv_obj_t *buttonES, *buttonFR, *buttonIT, *buttonBack;
  48. static void event_handler(lv_obj_t * obj, lv_event_t event) {
  49. switch (obj->mks_obj_id) {
  50. case ID_CN:
  51. if (event == LV_EVENT_CLICKED) {
  52. // nothing to do
  53. }
  54. else if (event == LV_EVENT_RELEASED) {
  55. disp_language(gCfgItems.language, UNSELECTED);
  56. lv_imgbtn_set_src(buttonCN, LV_BTN_STATE_REL, "F:/bmp_simplified_cn_sel.bin");
  57. lv_imgbtn_set_src(buttonCN, LV_BTN_STATE_PR, "F:/bmp_simplified_cn_sel.bin");
  58. lv_obj_refresh_ext_draw_pad(buttonCN);
  59. gCfgItems.language = LANG_SIMPLE_CHINESE;
  60. update_spi_flash();
  61. disp_language_init();
  62. }
  63. break;
  64. case ID_T_CN:
  65. if (event == LV_EVENT_CLICKED) {
  66. // nothing to do
  67. }
  68. else if (event == LV_EVENT_RELEASED) {
  69. disp_language(gCfgItems.language, UNSELECTED);
  70. lv_imgbtn_set_src(buttonT_CN, LV_BTN_STATE_REL, "F:/bmp_traditional_cn_sel.bin");
  71. lv_imgbtn_set_src(buttonT_CN, LV_BTN_STATE_PR, "F:/bmp_traditional_cn_sel.bin");
  72. lv_obj_refresh_ext_draw_pad(buttonT_CN);
  73. gCfgItems.language = LANG_COMPLEX_CHINESE;
  74. update_spi_flash();
  75. disp_language_init();
  76. }
  77. break;
  78. case ID_EN:
  79. if (event == LV_EVENT_CLICKED) {
  80. // nothing to do
  81. }
  82. else if (event == LV_EVENT_RELEASED) {
  83. disp_language(gCfgItems.language, UNSELECTED);
  84. lv_imgbtn_set_src(buttonEN, LV_BTN_STATE_REL, "F:/bmp_english_sel.bin");
  85. lv_imgbtn_set_src(buttonEN, LV_BTN_STATE_PR, "F:/bmp_english_sel.bin");
  86. lv_obj_refresh_ext_draw_pad(buttonEN);
  87. gCfgItems.language = LANG_ENGLISH;
  88. update_spi_flash();
  89. disp_language_init();
  90. }
  91. break;
  92. case ID_RU:
  93. if (event == LV_EVENT_CLICKED) {
  94. // nothing to do
  95. }
  96. else if (event == LV_EVENT_RELEASED) {
  97. disp_language(gCfgItems.language, UNSELECTED);
  98. lv_imgbtn_set_src(buttonRU, LV_BTN_STATE_REL, "F:/bmp_russian_sel.bin");
  99. lv_imgbtn_set_src(buttonRU, LV_BTN_STATE_PR, "F:/bmp_russian_sel.bin");
  100. lv_obj_refresh_ext_draw_pad(buttonRU);
  101. gCfgItems.language = LANG_RUSSIAN;
  102. update_spi_flash();
  103. disp_language_init();
  104. }
  105. break;
  106. case ID_ES:
  107. if (event == LV_EVENT_CLICKED) {
  108. // nothing to do
  109. }
  110. else if (event == LV_EVENT_RELEASED) {
  111. disp_language(gCfgItems.language, UNSELECTED);
  112. lv_imgbtn_set_src(buttonES, LV_BTN_STATE_REL, "F:/bmp_spanish_sel.bin");
  113. lv_imgbtn_set_src(buttonES, LV_BTN_STATE_PR, "F:/bmp_spanish_sel.bin");
  114. lv_obj_refresh_ext_draw_pad(buttonES);
  115. gCfgItems.language = LANG_SPANISH;
  116. update_spi_flash();
  117. disp_language_init();
  118. }
  119. break;
  120. case ID_FR:
  121. if (event == LV_EVENT_CLICKED) {
  122. // nothing to do
  123. }
  124. else if (event == LV_EVENT_RELEASED) {
  125. disp_language(gCfgItems.language, UNSELECTED);
  126. lv_imgbtn_set_src(buttonFR, LV_BTN_STATE_REL, "F:/bmp_french_sel.bin");
  127. lv_imgbtn_set_src(buttonFR, LV_BTN_STATE_PR, "F:/bmp_french_sel.bin");
  128. lv_obj_refresh_ext_draw_pad(buttonFR);
  129. gCfgItems.language = LANG_FRENCH;
  130. update_spi_flash();
  131. disp_language_init();
  132. }
  133. break;
  134. case ID_IT:
  135. if (event == LV_EVENT_CLICKED) {
  136. // nothing to do
  137. }
  138. else if (event == LV_EVENT_RELEASED) {
  139. disp_language(gCfgItems.language, UNSELECTED);
  140. lv_imgbtn_set_src(buttonIT, LV_BTN_STATE_REL, "F:/bmp_italy_sel.bin");
  141. lv_imgbtn_set_src(buttonIT, LV_BTN_STATE_PR, "F:/bmp_italy_sel.bin");
  142. lv_obj_refresh_ext_draw_pad(buttonIT);
  143. gCfgItems.language = LANG_ITALY;
  144. update_spi_flash();
  145. disp_language_init();
  146. }
  147. break;
  148. case ID_L_RETURN:
  149. if (event == LV_EVENT_CLICKED) {
  150. }
  151. else if (event == LV_EVENT_RELEASED) {
  152. buttonCN = NULL;
  153. buttonT_CN = NULL;
  154. buttonEN = NULL;
  155. buttonRU = NULL;
  156. buttonES = NULL;
  157. buttonFR = NULL;
  158. buttonFR = NULL;
  159. buttonIT = NULL;
  160. buttonBack = NULL;
  161. lv_clear_language();
  162. lv_draw_set();
  163. }
  164. break;
  165. }
  166. }
  167. static void disp_language(uint8_t language, uint8_t state) {
  168. uint16_t id;
  169. lv_obj_t *obj;
  170. public_buf_l[0] = '\0';
  171. switch (language) {
  172. case LANG_SIMPLE_CHINESE:
  173. id = ID_CN;
  174. strcpy_P(public_buf_l, PSTR("F:/bmp_simplified_cn"));
  175. obj = buttonCN;
  176. break;
  177. case LANG_COMPLEX_CHINESE:
  178. id = ID_T_CN;
  179. strcpy_P(public_buf_l, PSTR("F:/bmp_traditional_cn"));
  180. obj = buttonT_CN;
  181. break;
  182. case LANG_ENGLISH:
  183. id = ID_EN;
  184. strcpy_P(public_buf_l, PSTR("F:/bmp_english"));
  185. obj = buttonEN;
  186. break;
  187. case LANG_RUSSIAN:
  188. id = ID_RU;
  189. strcpy_P(public_buf_l, PSTR("F:/bmp_russian"));
  190. obj = buttonRU;
  191. break;
  192. case LANG_SPANISH:
  193. id = ID_ES;
  194. strcpy_P(public_buf_l, PSTR("F:/bmp_spanish"));
  195. obj = buttonES;
  196. break;
  197. case LANG_FRENCH:
  198. id = ID_FR;
  199. strcpy_P(public_buf_l, PSTR("F:/bmp_french"));
  200. obj = buttonFR;
  201. break;
  202. case LANG_ITALY:
  203. id = ID_IT;
  204. strcpy_P(public_buf_l, PSTR("F:/bmp_italy"));
  205. obj = buttonIT;
  206. break;
  207. default:
  208. id = ID_CN;
  209. strcpy_P(public_buf_l, PSTR("F:/bmp_simplified_cn"));
  210. obj = buttonCN;
  211. break;
  212. }
  213. if (state == SELECTED) strcat_P(public_buf_l, PSTR("_sel"));
  214. strcat_P(public_buf_l, PSTR(".bin"));
  215. lv_obj_set_event_cb_mks(obj, event_handler, id, NULL, 0);
  216. lv_imgbtn_set_src(obj, LV_BTN_STATE_REL, public_buf_l);
  217. lv_imgbtn_set_src(obj, LV_BTN_STATE_PR, public_buf_l);
  218. if (state == UNSELECTED) lv_obj_refresh_ext_draw_pad(obj);
  219. }
  220. void lv_draw_language(void) {
  221. if (disp_state_stack._disp_state[disp_state_stack._disp_index] != LANGUAGE_UI) {
  222. disp_state_stack._disp_index++;
  223. disp_state_stack._disp_state[disp_state_stack._disp_index] = LANGUAGE_UI;
  224. }
  225. disp_state = LANGUAGE_UI;
  226. scr = lv_obj_create(NULL, NULL);
  227. // static lv_style_t tool_style;
  228. lv_obj_set_style(scr, &tft_style_scr);
  229. lv_scr_load(scr);
  230. lv_obj_clean(scr);
  231. lv_obj_t * title = lv_label_create(scr, NULL);
  232. lv_obj_set_style(title, &tft_style_label_rel);
  233. lv_obj_set_pos(title, TITLE_XPOS, TITLE_YPOS);
  234. lv_label_set_text(title, creat_title_text());
  235. lv_refr_now(lv_refr_get_disp_refreshing());
  236. // Create image buttons
  237. buttonCN = lv_imgbtn_create(scr, NULL);
  238. buttonT_CN = lv_imgbtn_create(scr, NULL);
  239. buttonEN = lv_imgbtn_create(scr, NULL);
  240. buttonRU = lv_imgbtn_create(scr, NULL);
  241. buttonES = lv_imgbtn_create(scr, NULL);
  242. buttonFR = lv_imgbtn_create(scr, NULL);
  243. buttonIT = lv_imgbtn_create(scr, NULL);
  244. buttonBack = lv_imgbtn_create(scr, NULL);
  245. lv_obj_set_event_cb_mks(buttonCN, event_handler, ID_CN, NULL, 0);
  246. lv_imgbtn_set_src(buttonCN, LV_BTN_STATE_REL, "F:/bmp_simplified_cn.bin");
  247. lv_imgbtn_set_src(buttonCN, LV_BTN_STATE_PR, "F:/bmp_simplified_cn.bin");
  248. lv_imgbtn_set_style(buttonCN, LV_BTN_STATE_PR, &tft_style_label_pre);
  249. lv_imgbtn_set_style(buttonCN, LV_BTN_STATE_REL, &tft_style_label_rel);
  250. lv_obj_clear_protect(buttonCN, LV_PROTECT_FOLLOW);
  251. #if 1
  252. lv_obj_set_event_cb_mks(buttonT_CN, event_handler, ID_T_CN, NULL, 0);
  253. lv_imgbtn_set_src(buttonT_CN, LV_BTN_STATE_REL, "F:/bmp_traditional_cn.bin");
  254. lv_imgbtn_set_src(buttonT_CN, LV_BTN_STATE_PR, "F:/bmp_traditional_cn.bin");
  255. lv_imgbtn_set_style(buttonT_CN, LV_BTN_STATE_PR, &tft_style_label_pre);
  256. lv_imgbtn_set_style(buttonT_CN, LV_BTN_STATE_REL, &tft_style_label_rel);
  257. lv_obj_set_event_cb_mks(buttonEN, event_handler, ID_EN, NULL, 0);
  258. lv_imgbtn_set_src(buttonEN, LV_BTN_STATE_REL, "F:/bmp_english.bin");
  259. lv_imgbtn_set_src(buttonEN, LV_BTN_STATE_PR, "F:/bmp_english.bin");
  260. lv_imgbtn_set_style(buttonEN, LV_BTN_STATE_PR, &tft_style_label_pre);
  261. lv_imgbtn_set_style(buttonEN, LV_BTN_STATE_REL, &tft_style_label_rel);
  262. lv_obj_set_event_cb_mks(buttonRU, event_handler, ID_RU, NULL, 0);
  263. lv_imgbtn_set_src(buttonRU, LV_BTN_STATE_REL, "F:/bmp_russian.bin");
  264. lv_imgbtn_set_src(buttonRU, LV_BTN_STATE_PR, "F:/bmp_russian.bin");
  265. lv_imgbtn_set_style(buttonRU, LV_BTN_STATE_PR, &tft_style_label_pre);
  266. lv_imgbtn_set_style(buttonRU, LV_BTN_STATE_REL, &tft_style_label_rel);
  267. lv_obj_set_event_cb_mks(buttonES, event_handler, ID_ES, NULL, 0);
  268. lv_imgbtn_set_src(buttonES, LV_BTN_STATE_REL, "F:/bmp_spanish.bin");
  269. lv_imgbtn_set_src(buttonES, LV_BTN_STATE_PR, "F:/bmp_spanish.bin");
  270. lv_imgbtn_set_style(buttonES, LV_BTN_STATE_PR, &tft_style_label_pre);
  271. lv_imgbtn_set_style(buttonES, LV_BTN_STATE_REL, &tft_style_label_rel);
  272. lv_obj_set_event_cb_mks(buttonFR, event_handler, ID_FR, NULL, 0);
  273. lv_imgbtn_set_src(buttonFR, LV_BTN_STATE_REL, "F:/bmp_french.bin");
  274. lv_imgbtn_set_src(buttonFR, LV_BTN_STATE_PR, "F:/bmp_french.bin");
  275. lv_imgbtn_set_style(buttonFR, LV_BTN_STATE_PR, &tft_style_label_pre);
  276. lv_imgbtn_set_style(buttonFR, LV_BTN_STATE_REL, &tft_style_label_rel);
  277. lv_obj_set_event_cb_mks(buttonIT, event_handler, ID_IT, NULL, 0);
  278. lv_imgbtn_set_src(buttonIT, LV_BTN_STATE_REL, "F:/bmp_italy.bin");
  279. lv_imgbtn_set_src(buttonIT, LV_BTN_STATE_PR, "F:/bmp_italy.bin");
  280. lv_imgbtn_set_style(buttonIT, LV_BTN_STATE_PR, &tft_style_label_pre);
  281. lv_imgbtn_set_style(buttonIT, LV_BTN_STATE_REL, &tft_style_label_rel);
  282. lv_obj_set_event_cb_mks(buttonBack, event_handler, ID_L_RETURN, NULL, 0);
  283. lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_REL, "F:/bmp_return.bin");
  284. lv_imgbtn_set_src(buttonBack, LV_BTN_STATE_PR, "F:/bmp_return.bin");
  285. lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_PR, &tft_style_label_pre);
  286. lv_imgbtn_set_style(buttonBack, LV_BTN_STATE_REL, &tft_style_label_rel);
  287. #endif // if 1
  288. lv_obj_set_pos(buttonCN, INTERVAL_V, titleHeight);
  289. lv_obj_set_pos(buttonT_CN, BTN_X_PIXEL + INTERVAL_V * 2, titleHeight);
  290. lv_obj_set_pos(buttonEN, BTN_X_PIXEL * 2 + INTERVAL_V * 3, titleHeight);
  291. lv_obj_set_pos(buttonRU, BTN_X_PIXEL * 3 + INTERVAL_V * 4, titleHeight);
  292. lv_obj_set_pos(buttonES, INTERVAL_V, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
  293. lv_obj_set_pos(buttonFR, BTN_X_PIXEL + INTERVAL_V * 2, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
  294. lv_obj_set_pos(buttonIT, BTN_X_PIXEL * 2 + INTERVAL_V * 3, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
  295. lv_obj_set_pos(buttonBack, BTN_X_PIXEL * 3 + INTERVAL_V * 4, BTN_Y_PIXEL + INTERVAL_H + titleHeight);
  296. // Create labels on the image buttons
  297. lv_btn_set_layout(buttonCN, LV_LAYOUT_OFF);
  298. lv_btn_set_layout(buttonT_CN, LV_LAYOUT_OFF);
  299. lv_btn_set_layout(buttonEN, LV_LAYOUT_OFF);
  300. lv_btn_set_layout(buttonRU, LV_LAYOUT_OFF);
  301. lv_btn_set_layout(buttonES, LV_LAYOUT_OFF);
  302. lv_btn_set_layout(buttonFR, LV_LAYOUT_OFF);
  303. lv_btn_set_layout(buttonIT, LV_LAYOUT_OFF);
  304. lv_btn_set_layout(buttonBack, LV_LAYOUT_OFF);
  305. lv_obj_t *label_CN = lv_label_create(buttonCN, NULL);
  306. lv_obj_t *label_T_CN = lv_label_create(buttonT_CN, NULL);
  307. lv_obj_t *label_EN = lv_label_create(buttonEN, NULL);
  308. lv_obj_t *label_RU = lv_label_create(buttonRU, NULL);
  309. lv_obj_t *label_ES = lv_label_create(buttonES, NULL);
  310. lv_obj_t *label_FR = lv_label_create(buttonFR, NULL);
  311. lv_obj_t *label_IT = lv_label_create(buttonIT, NULL);
  312. lv_obj_t *label_Back = lv_label_create(buttonBack, NULL);
  313. disp_language(gCfgItems.language, SELECTED);
  314. if (gCfgItems.multiple_language) {
  315. lv_label_set_text(label_CN, language_menu.chinese_s);
  316. lv_obj_align(label_CN, buttonCN, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
  317. lv_label_set_text(label_T_CN, language_menu.chinese_t);
  318. lv_obj_align(label_T_CN, buttonT_CN, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
  319. lv_label_set_text(label_EN, language_menu.english);
  320. lv_obj_align(label_EN, buttonEN, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
  321. lv_label_set_text(label_RU, language_menu.russian);
  322. lv_obj_align(label_RU, buttonRU, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
  323. lv_label_set_text(label_ES, language_menu.spanish);
  324. lv_obj_align(label_ES, buttonES, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
  325. lv_label_set_text(label_FR, language_menu.french);
  326. lv_obj_align(label_FR, buttonFR, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
  327. lv_label_set_text(label_IT, language_menu.italy);
  328. lv_obj_align(label_IT, buttonIT, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
  329. lv_label_set_text(label_Back, common_menu.text_back);
  330. lv_obj_align(label_Back, buttonBack, LV_ALIGN_IN_BOTTOM_MID, 0, BUTTON_TEXT_Y_OFFSET);
  331. }
  332. #if HAS_ROTARY_ENCODER
  333. if (gCfgItems.encoder_enable) {
  334. lv_group_add_obj(g, buttonCN);
  335. lv_group_add_obj(g, buttonT_CN);
  336. lv_group_add_obj(g, buttonEN);
  337. lv_group_add_obj(g, buttonRU);
  338. lv_group_add_obj(g, buttonES);
  339. lv_group_add_obj(g, buttonFR);
  340. lv_group_add_obj(g, buttonIT);
  341. lv_group_add_obj(g, buttonBack);
  342. }
  343. #endif
  344. }
  345. void lv_clear_language() {
  346. #if HAS_ROTARY_ENCODER
  347. if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
  348. #endif
  349. lv_obj_del(scr);
  350. }
  351. #endif // HAS_TFT_LVGL_UI