My Marlin configs for Fabrikator Mini and CTC i3 Pro B
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

draw_dialog.cpp 28KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701
  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. /**
  23. * draw_dialog.cpp
  24. */
  25. #include "../../../../inc/MarlinConfigPre.h"
  26. #if HAS_TFT_LVGL_UI
  27. #include "draw_ui.h"
  28. #include <lv_conf.h>
  29. //#include "../lvgl/src/lv_objx/lv_imgbtn.h"
  30. //#include "../lvgl/src/lv_objx/lv_img.h"
  31. //#include "../lvgl/src/lv_core/lv_disp.h"
  32. //#include "../lvgl/src/lv_core/lv_refr.h"
  33. #include "../../../../sd/cardreader.h"
  34. #include "../../../../gcode/queue.h"
  35. #include "../../../../module/temperature.h"
  36. #include "../../../../module/planner.h"
  37. #include "../../../../gcode/gcode.h"
  38. #include "../../../../inc/MarlinConfig.h"
  39. #if ENABLED(POWER_LOSS_RECOVERY)
  40. #include "../../../../feature/powerloss.h"
  41. #endif
  42. #if ENABLED(PARK_HEAD_ON_PAUSE)
  43. #include "../../../../feature/pause.h"
  44. #endif
  45. extern lv_group_t * g;
  46. static lv_obj_t * scr;
  47. static lv_obj_t * tempText1;
  48. static lv_obj_t * filament_bar;
  49. extern uint8_t sel_id;
  50. extern bool once_flag, gcode_preview_over;
  51. extern int upload_result ;
  52. extern uint32_t upload_time;
  53. extern uint32_t upload_size;
  54. extern uint8_t temperature_change_frequency;
  55. static void btn_ok_event_cb(lv_obj_t * btn, lv_event_t event) {
  56. if (event == LV_EVENT_CLICKED) {
  57. // nothing to do
  58. }
  59. else if (event == LV_EVENT_RELEASED) {
  60. if (uiCfg.dialogType == DIALOG_TYPE_PRINT_FILE) {
  61. #if HAS_GCODE_PREVIEW
  62. preview_gcode_prehandle(list_file.file_name[sel_id]);
  63. #endif
  64. reset_print_time();
  65. start_print_time();
  66. uiCfg.print_state = WORKING;
  67. lv_clear_dialog();
  68. lv_draw_printing();
  69. #if ENABLED(SDSUPPORT)
  70. if (!gcode_preview_over) {
  71. char *cur_name;
  72. cur_name = strrchr(list_file.file_name[sel_id], '/');
  73. SdFile file, *curDir;
  74. card.endFilePrint();
  75. const char * const fname = card.diveToFile(true, curDir, cur_name);
  76. if (!fname) return;
  77. if (file.open(curDir, fname, O_READ)) {
  78. gCfgItems.curFilesize = file.fileSize();
  79. file.close();
  80. update_spi_flash();
  81. }
  82. card.openFileRead(cur_name);
  83. if (card.isFileOpen()) {
  84. feedrate_percentage = 100;
  85. //saved_feedrate_percentage = feedrate_percentage;
  86. planner.flow_percentage[0] = 100;
  87. planner.e_factor[0] = planner.flow_percentage[0] * 0.01f;
  88. #if HAS_MULTI_EXTRUDER
  89. planner.flow_percentage[1] = 100;
  90. planner.e_factor[1] = planner.flow_percentage[1] * 0.01f;
  91. #endif
  92. card.startFileprint();
  93. #if ENABLED(POWER_LOSS_RECOVERY)
  94. recovery.prepare();
  95. #endif
  96. once_flag = false;
  97. }
  98. }
  99. #endif
  100. }
  101. else if (uiCfg.dialogType == DIALOG_TYPE_STOP) {
  102. wait_for_heatup = false;
  103. stop_print_time();
  104. lv_clear_dialog();
  105. lv_draw_ready_print();
  106. #if ENABLED(SDSUPPORT)
  107. //card.endFilePrint();
  108. //wait_for_heatup = false;
  109. uiCfg.print_state = IDLE;
  110. card.flag.abort_sd_printing = true;
  111. //queue.clear();
  112. //quickstop_stepper();
  113. //print_job_timer.stop();
  114. //thermalManager.disable_all_heaters();
  115. //#if ENABLED(POWER_LOSS_RECOVERY)
  116. // recovery.purge();
  117. //#endif
  118. //queue.enqueue_now_P(PSTR("G91\nG1 Z10\nG90\nG28 X0 Y0"));
  119. //queue.inject_P(PSTR("G91\nG1 Z10\nG90\nG28 X0 Y0\nM84\nM107"));
  120. #endif
  121. }
  122. else if (uiCfg.dialogType == DIALOG_TYPE_FINISH_PRINT) {
  123. clear_cur_ui();
  124. lv_draw_ready_print();
  125. }
  126. #if ENABLED(ADVANCED_PAUSE_FEATURE)
  127. else if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_WAITING
  128. || uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_INSERT
  129. || uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_HEAT
  130. ) {
  131. wait_for_user = false;
  132. }
  133. else if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_OPTION) {
  134. pause_menu_response = PAUSE_RESPONSE_EXTRUDE_MORE;
  135. }
  136. else if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_RESUME) {
  137. clear_cur_ui();
  138. draw_return_ui();
  139. }
  140. #endif
  141. else if (uiCfg.dialogType == DIALOG_STORE_EEPROM_TIPS) {
  142. gcode.process_subcommands_now_P(PSTR("M500"));
  143. clear_cur_ui();
  144. draw_return_ui();
  145. }
  146. else if (uiCfg.dialogType == DIALOG_READ_EEPROM_TIPS) {
  147. gcode.process_subcommands_now_P(PSTR("M501"));
  148. clear_cur_ui();
  149. draw_return_ui();
  150. }
  151. else if (uiCfg.dialogType == DIALOG_REVERT_EEPROM_TIPS) {
  152. gcode.process_subcommands_now_P(PSTR("M502"));
  153. clear_cur_ui();
  154. draw_return_ui();
  155. }
  156. else if (uiCfg.dialogType == DIALOG_WIFI_CONFIG_TIPS) {
  157. uiCfg.configWifi = 1;
  158. clear_cur_ui();
  159. draw_return_ui();
  160. }
  161. else if (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_HEAT_LOAD_COMPLETED) {
  162. uiCfg.filament_heat_completed_load = 1;
  163. }
  164. else if (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_HEAT_UNLOAD_COMPLETED) {
  165. uiCfg.filament_heat_completed_unload = 1;
  166. }
  167. else if (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_LOAD_COMPLETED
  168. || uiCfg.dialogType == DIALOG_TYPE_FILAMENT_UNLOAD_COMPLETED
  169. ) {
  170. clear_cur_ui();
  171. draw_return_ui();
  172. }
  173. }
  174. }
  175. static void btn_cancel_event_cb(lv_obj_t * btn, lv_event_t event) {
  176. if (event == LV_EVENT_CLICKED) {
  177. // nothing to do
  178. }
  179. else if (event == LV_EVENT_RELEASED) {
  180. if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_OPTION) {
  181. #if ENABLED(ADVANCED_PAUSE_FEATURE)
  182. pause_menu_response = PAUSE_RESPONSE_RESUME_PRINT;
  183. #endif
  184. }
  185. else if ((uiCfg.dialogType == DIALOG_TYPE_FILAMENT_LOAD_HEAT)
  186. || (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_UNLOAD_HEAT)
  187. || (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_HEAT_LOAD_COMPLETED)
  188. || (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_HEAT_UNLOAD_COMPLETED)
  189. ) {
  190. thermalManager.temp_hotend[uiCfg.curSprayerChoose].target= uiCfg.desireSprayerTempBak;
  191. clear_cur_ui();
  192. draw_return_ui();
  193. }
  194. else if ((uiCfg.dialogType == DIALOG_TYPE_FILAMENT_LOADING)
  195. || (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_UNLOADING)
  196. ) {
  197. queue.enqueue_one_P(PSTR("M410"));
  198. uiCfg.filament_rate = 0;
  199. uiCfg.filament_loading_completed = 0;
  200. uiCfg.filament_unloading_completed = 0;
  201. uiCfg.filament_loading_time_flg = 0;
  202. uiCfg.filament_loading_time_cnt = 0;
  203. uiCfg.filament_unloading_time_flg = 0;
  204. uiCfg.filament_unloading_time_cnt = 0;
  205. thermalManager.temp_hotend[uiCfg.curSprayerChoose].target = uiCfg.desireSprayerTempBak;
  206. clear_cur_ui();
  207. draw_return_ui();
  208. }
  209. else {
  210. clear_cur_ui();
  211. draw_return_ui();
  212. }
  213. }
  214. }
  215. void lv_draw_dialog(uint8_t type) {
  216. lv_obj_t * btnOk = NULL;
  217. lv_obj_t * btnCancel = NULL;
  218. if (disp_state_stack._disp_state[disp_state_stack._disp_index] != DIALOG_UI) {
  219. disp_state_stack._disp_index++;
  220. disp_state_stack._disp_state[disp_state_stack._disp_index] = DIALOG_UI;
  221. }
  222. disp_state = DIALOG_UI;
  223. uiCfg.dialogType = type;
  224. scr = lv_obj_create(NULL, NULL);
  225. lv_obj_set_style(scr, &tft_style_scr);
  226. lv_scr_load(scr);
  227. lv_obj_clean(scr);
  228. lv_obj_t * title = lv_label_create(scr, NULL);
  229. lv_obj_set_style(title, &tft_style_label_rel);
  230. lv_obj_set_pos(title, TITLE_XPOS, TITLE_YPOS);
  231. lv_label_set_text(title, creat_title_text());
  232. lv_refr_now(lv_refr_get_disp_refreshing());
  233. static lv_style_t style_btn_rel; // A variable to store the released style
  234. lv_style_copy(&style_btn_rel, &lv_style_plain); // Initialize from a built-in style
  235. style_btn_rel.body.border.color = lv_color_hex3(0x269);
  236. style_btn_rel.body.border.width = 1;
  237. style_btn_rel.body.main_color = lv_color_hex3(0xADF);
  238. style_btn_rel.body.grad_color = lv_color_hex3(0x46B);
  239. style_btn_rel.body.shadow.width = 4;
  240. style_btn_rel.body.shadow.type = LV_SHADOW_BOTTOM;
  241. style_btn_rel.body.radius = LV_RADIUS_CIRCLE;
  242. style_btn_rel.text.color = lv_color_hex3(0xDEF);
  243. style_btn_rel.text.font = &TERN(HAS_SPI_FLASH_FONT, gb2312_puhui32, lv_font_roboto_22);
  244. static lv_style_t style_btn_pr; // A variable to store the pressed style
  245. lv_style_copy(&style_btn_pr, &style_btn_rel); // Initialize from the released style
  246. style_btn_pr.body.border.color = lv_color_hex3(0x46B);
  247. style_btn_pr.body.main_color = lv_color_hex3(0x8BD);
  248. style_btn_pr.body.grad_color = lv_color_hex3(0x24A);
  249. style_btn_pr.body.shadow.width = 2;
  250. style_btn_pr.text.color = lv_color_hex3(0xBCD);
  251. style_btn_pr.text.font = &TERN(HAS_SPI_FLASH_FONT, gb2312_puhui32, lv_font_roboto_22);
  252. lv_obj_t *labelDialog = lv_label_create(scr, NULL);
  253. lv_obj_set_style(labelDialog, &tft_style_label_rel);
  254. if (uiCfg.dialogType == DIALOG_TYPE_FINISH_PRINT || uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_RESUME) {
  255. btnOk = lv_btn_create(scr, NULL); // Add a button the current screen
  256. lv_obj_set_pos(btnOk, BTN_OK_X + 90, BTN_OK_Y); // Set its position
  257. lv_obj_set_size(btnOk, 100, 50); // Set its size
  258. lv_obj_set_event_cb(btnOk, btn_ok_event_cb);
  259. lv_btn_set_style(btnOk, LV_BTN_STYLE_REL, &style_btn_rel); // Set the button's released style
  260. lv_btn_set_style(btnOk, LV_BTN_STYLE_PR, &style_btn_pr); // Set the button's pressed style
  261. lv_obj_t *labelOk = lv_label_create(btnOk, NULL); // Add a label to the button
  262. lv_label_set_text(labelOk, print_file_dialog_menu.confirm); // Set the labels text
  263. }
  264. else if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_WAITING
  265. || uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_INSERT
  266. || uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_HEAT
  267. ) {
  268. btnOk = lv_btn_create(scr, NULL); // Add a button the current screen
  269. lv_obj_set_pos(btnOk, BTN_OK_X + 90, BTN_OK_Y); // Set its position
  270. lv_obj_set_size(btnOk, 100, 50); // Set its size
  271. lv_obj_set_event_cb(btnOk, btn_ok_event_cb);
  272. lv_btn_set_style(btnOk, LV_BTN_STYLE_REL, &style_btn_rel); // Set the button's released style
  273. lv_btn_set_style(btnOk, LV_BTN_STYLE_PR, &style_btn_pr); // Set the button's pressed style
  274. lv_obj_t *labelOk = lv_label_create(btnOk, NULL); // Add a label to the button
  275. lv_label_set_text(labelOk, print_file_dialog_menu.confirm); // Set the labels text
  276. }
  277. else if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_PAUSING
  278. || uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_CHANGING
  279. || uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_UNLOAD
  280. || uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_LOAD
  281. || uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_PURGE
  282. || uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_RESUME
  283. || uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_HEATING
  284. ) {
  285. // nothing to do
  286. }
  287. else if (uiCfg.dialogType == WIFI_ENABLE_TIPS) {
  288. btnCancel = lv_btn_create(scr, NULL);
  289. lv_obj_set_pos(btnCancel, BTN_OK_X+90, BTN_OK_Y);
  290. lv_obj_set_size(btnCancel, 100, 50);
  291. lv_obj_set_event_cb(btnCancel, btn_cancel_event_cb);
  292. lv_btn_set_style(btnCancel, LV_BTN_STYLE_REL, &style_btn_rel);
  293. lv_btn_set_style(btnCancel, LV_BTN_STYLE_PR, &style_btn_pr);
  294. lv_obj_t *labelCancel = lv_label_create(btnCancel, NULL);
  295. lv_label_set_text(labelCancel, print_file_dialog_menu.cancle);
  296. }
  297. else if (uiCfg.dialogType == DIALOG_TRANSFER_NO_DEVICE) {
  298. btnCancel = lv_btn_create(scr, NULL);
  299. lv_obj_set_pos(btnCancel, BTN_OK_X+90, BTN_OK_Y);
  300. lv_obj_set_size(btnCancel, 100, 50);
  301. lv_obj_set_event_cb(btnCancel, btn_cancel_event_cb);
  302. lv_btn_set_style(btnCancel, LV_BTN_STYLE_REL, &style_btn_rel);
  303. lv_btn_set_style(btnCancel, LV_BTN_STYLE_PR, &style_btn_pr);
  304. lv_obj_t *labelCancel = lv_label_create(btnCancel, NULL);
  305. lv_label_set_text(labelCancel, print_file_dialog_menu.cancle);
  306. }
  307. #if ENABLED(USE_WIFI_FUNCTION)
  308. else if (uiCfg.dialogType == DIALOG_TYPE_UPLOAD_FILE) {
  309. if (upload_result == 2) {
  310. btnCancel = lv_btn_create(scr, NULL);
  311. lv_obj_set_pos(btnCancel, BTN_OK_X+90, BTN_OK_Y);
  312. lv_obj_set_size(btnCancel, 100, 50);
  313. lv_obj_set_event_cb(btnCancel, btn_cancel_event_cb);
  314. lv_btn_set_style(btnCancel, LV_BTN_STYLE_REL, &style_btn_rel);
  315. lv_btn_set_style(btnCancel, LV_BTN_STYLE_PR, &style_btn_pr);
  316. lv_obj_t *labelCancel = lv_label_create(btnCancel, NULL);
  317. lv_label_set_text(labelCancel, print_file_dialog_menu.cancle);
  318. }
  319. else if (upload_result == 3) {
  320. btnOk = lv_btn_create(scr, NULL);
  321. lv_obj_set_pos(btnOk, BTN_OK_X+90, BTN_OK_Y);
  322. lv_obj_set_size(btnOk, 100, 50);
  323. lv_obj_set_event_cb(btnOk, btn_ok_event_cb);
  324. lv_btn_set_style(btnOk, LV_BTN_STYLE_REL, &style_btn_rel);
  325. lv_btn_set_style(btnOk, LV_BTN_STYLE_PR, &style_btn_pr);
  326. lv_obj_t *labelOk = lv_label_create(btnOk, NULL);
  327. lv_label_set_text(labelOk, print_file_dialog_menu.confirm);
  328. }
  329. }
  330. #endif //USE_WIFI_FUNCTION
  331. else if (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_LOAD_HEAT
  332. || uiCfg.dialogType == DIALOG_TYPE_FILAMENT_UNLOAD_HEAT
  333. ) {
  334. btnCancel = lv_btn_create(scr, NULL);
  335. lv_obj_set_pos(btnCancel, BTN_OK_X+90, BTN_OK_Y);
  336. lv_obj_set_size(btnCancel, 100, 50);
  337. lv_obj_set_event_cb(btnCancel, btn_cancel_event_cb);
  338. lv_btn_set_style(btnCancel, LV_BTN_STYLE_REL, &style_btn_rel);
  339. lv_btn_set_style(btnCancel, LV_BTN_STYLE_PR, &style_btn_pr);
  340. lv_obj_t *labelCancel = lv_label_create(btnCancel, NULL);
  341. lv_label_set_text(labelCancel, print_file_dialog_menu.cancle);
  342. tempText1 = lv_label_create(scr, NULL);
  343. lv_obj_set_style(tempText1, &tft_style_label_rel);
  344. filament_sprayer_temp();
  345. }
  346. else if (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_LOAD_COMPLETED
  347. || uiCfg.dialogType == DIALOG_TYPE_FILAMENT_UNLOAD_COMPLETED
  348. ) {
  349. btnOk = lv_btn_create(scr, NULL);
  350. lv_obj_set_pos(btnOk, BTN_OK_X+90, BTN_OK_Y);
  351. lv_obj_set_size(btnOk, 100, 50);
  352. lv_obj_set_event_cb(btnOk, btn_ok_event_cb);
  353. lv_btn_set_style(btnOk, LV_BTN_STYLE_REL, &style_btn_rel);
  354. lv_btn_set_style(btnOk, LV_BTN_STYLE_PR, &style_btn_pr);
  355. lv_obj_t *labelOk = lv_label_create(btnOk, NULL);
  356. lv_label_set_text(labelOk, print_file_dialog_menu.confirm);
  357. }
  358. else if (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_LOADING
  359. || uiCfg.dialogType == DIALOG_TYPE_FILAMENT_UNLOADING
  360. ) {
  361. btnCancel = lv_btn_create(scr, NULL);
  362. lv_obj_set_pos(btnCancel, BTN_OK_X+90, BTN_OK_Y);
  363. lv_obj_set_size(btnCancel, 100, 50);
  364. lv_obj_set_event_cb(btnCancel, btn_cancel_event_cb);
  365. lv_btn_set_style(btnCancel, LV_BTN_STYLE_REL, &style_btn_rel);
  366. lv_btn_set_style(btnCancel, LV_BTN_STYLE_PR, &style_btn_pr);
  367. lv_obj_t *labelCancel = lv_label_create(btnCancel, NULL);
  368. lv_label_set_text(labelCancel, print_file_dialog_menu.cancle);
  369. filament_bar = lv_bar_create(scr, NULL);
  370. lv_obj_set_pos(filament_bar, (TFT_WIDTH-400)/2, ((TFT_HEIGHT - titleHeight)-40)/2);
  371. lv_obj_set_size(filament_bar, 400, 25);
  372. lv_bar_set_style(filament_bar, LV_BAR_STYLE_INDIC, &lv_bar_style_indic);
  373. lv_bar_set_anim_time(filament_bar, 1000);
  374. lv_bar_set_value(filament_bar, 0, LV_ANIM_ON);
  375. }
  376. else {
  377. btnOk = lv_btn_create(scr, NULL); // Add a button the current screen
  378. lv_obj_set_pos(btnOk, BTN_OK_X, BTN_OK_Y); // Set its position
  379. lv_obj_set_size(btnOk, 100, 50); // Set its size
  380. lv_obj_set_event_cb(btnOk, btn_ok_event_cb);
  381. lv_btn_set_style(btnOk, LV_BTN_STYLE_REL, &style_btn_rel); // Set the button's released style
  382. lv_btn_set_style(btnOk, LV_BTN_STYLE_PR, &style_btn_pr); // Set the button's pressed style
  383. lv_obj_t *labelOk = lv_label_create(btnOk, NULL); // Add a label to the button
  384. btnCancel = lv_btn_create(scr, NULL); // Add a button the current screen
  385. lv_obj_set_pos(btnCancel, BTN_CANCEL_X, BTN_CANCEL_Y); // Set its position
  386. lv_obj_set_size(btnCancel, 100, 50); // Set its size
  387. lv_obj_set_event_cb(btnCancel, btn_cancel_event_cb);
  388. lv_btn_set_style(btnCancel, LV_BTN_STYLE_REL, &style_btn_rel); // Set the button's released style
  389. lv_btn_set_style(btnCancel, LV_BTN_STYLE_PR, &style_btn_pr); // Set the button's pressed style
  390. lv_obj_t *labelCancel = lv_label_create(btnCancel, NULL); // Add a label to the button
  391. if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_OPTION) {
  392. lv_label_set_text(labelOk, pause_msg_menu.purgeMore); // Set the labels text
  393. lv_label_set_text(labelCancel, pause_msg_menu.continuePrint);
  394. }
  395. else {
  396. lv_label_set_text(labelOk, print_file_dialog_menu.confirm); // Set the labels text
  397. lv_label_set_text(labelCancel, print_file_dialog_menu.cancle);
  398. }
  399. }
  400. if (uiCfg.dialogType == DIALOG_TYPE_PRINT_FILE) {
  401. lv_label_set_text(labelDialog, print_file_dialog_menu.print_file);
  402. lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
  403. lv_obj_t *labelFile = lv_label_create(scr, NULL);
  404. lv_obj_set_style(labelFile, &tft_style_label_rel);
  405. lv_label_set_text(labelFile, list_file.long_name[sel_id]);
  406. lv_obj_align(labelFile, NULL, LV_ALIGN_CENTER, 0, -60);
  407. }
  408. else if (uiCfg.dialogType == DIALOG_TYPE_STOP) {
  409. lv_label_set_text(labelDialog, print_file_dialog_menu.cancle_print);
  410. lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
  411. }
  412. else if (uiCfg.dialogType == DIALOG_TYPE_FINISH_PRINT) {
  413. lv_label_set_text(labelDialog, print_file_dialog_menu.print_finish);
  414. lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
  415. }
  416. else if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_PAUSING) {
  417. lv_label_set_text(labelDialog, pause_msg_menu.pausing);
  418. lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
  419. }
  420. else if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_CHANGING) {
  421. lv_label_set_text(labelDialog, pause_msg_menu.changing);
  422. lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
  423. }
  424. else if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_UNLOAD) {
  425. lv_label_set_text(labelDialog, pause_msg_menu.unload);
  426. lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
  427. }
  428. else if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_WAITING) {
  429. lv_label_set_text(labelDialog, pause_msg_menu.waiting);
  430. lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
  431. }
  432. else if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_INSERT) {
  433. lv_label_set_text(labelDialog, pause_msg_menu.insert);
  434. lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
  435. }
  436. else if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_LOAD) {
  437. lv_label_set_text(labelDialog, pause_msg_menu.load);
  438. lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
  439. }
  440. else if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_PURGE) {
  441. lv_label_set_text(labelDialog, pause_msg_menu.purge);
  442. lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
  443. }
  444. else if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_RESUME) {
  445. lv_label_set_text(labelDialog, pause_msg_menu.resume);
  446. lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
  447. }
  448. else if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_HEAT) {
  449. lv_label_set_text(labelDialog, pause_msg_menu.heat);
  450. lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
  451. }
  452. else if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_HEATING) {
  453. lv_label_set_text(labelDialog, pause_msg_menu.heating);
  454. lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
  455. }
  456. else if (uiCfg.dialogType == DIALOG_PAUSE_MESSAGE_OPTION) {
  457. lv_label_set_text(labelDialog, pause_msg_menu.option);
  458. lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
  459. }
  460. else if (uiCfg.dialogType == DIALOG_STORE_EEPROM_TIPS) {
  461. lv_label_set_text(labelDialog, eeprom_menu.storeTips);
  462. lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
  463. }
  464. else if (uiCfg.dialogType == DIALOG_READ_EEPROM_TIPS) {
  465. lv_label_set_text(labelDialog, eeprom_menu.readTips);
  466. lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
  467. }
  468. else if (uiCfg.dialogType == DIALOG_REVERT_EEPROM_TIPS) {
  469. lv_label_set_text(labelDialog, eeprom_menu.revertTips);
  470. lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
  471. }
  472. else if (uiCfg.dialogType == DIALOG_WIFI_CONFIG_TIPS) {
  473. lv_label_set_text(labelDialog, machine_menu.wifiConfigTips);
  474. lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
  475. }
  476. else if (uiCfg.dialogType == WIFI_ENABLE_TIPS) {
  477. lv_label_set_text(labelDialog, print_file_dialog_menu.wifi_enable_tips);
  478. lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
  479. }
  480. else if (uiCfg.dialogType == DIALOG_TRANSFER_NO_DEVICE) {
  481. lv_label_set_text(labelDialog, DIALOG_UPDATE_NO_DEVICE_EN);
  482. lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
  483. }
  484. #if ENABLED(USE_WIFI_FUNCTION)
  485. else if (uiCfg.dialogType == DIALOG_TYPE_UPLOAD_FILE) {
  486. if (upload_result == 1) {
  487. lv_label_set_text(labelDialog, DIALOG_UPLOAD_ING_EN);
  488. lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
  489. }
  490. else if (upload_result == 2) {
  491. lv_label_set_text(labelDialog, DIALOG_UPLOAD_ERROR_EN);
  492. lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
  493. }
  494. else if (upload_result == 3) {
  495. char buf[200];
  496. int _index = 0;
  497. ZERO(buf);
  498. strcpy(buf, DIALOG_UPLOAD_FINISH_EN);
  499. _index = strlen(buf);
  500. buf[_index] = '\n';
  501. _index++;
  502. strcat(buf, DIALOG_UPLOAD_SIZE_EN);
  503. _index = strlen(buf);
  504. buf[_index] = ':';
  505. _index++;
  506. sprintf(&buf[_index], " %d KBytes\n", (int)(upload_size / 1024));
  507. strcat(buf, DIALOG_UPLOAD_TIME_EN);
  508. _index = strlen(buf);
  509. buf[_index] = ':';
  510. _index++;
  511. sprintf(&buf[_index], " %d s\n", (int)upload_time);
  512. strcat(buf, DIALOG_UPLOAD_SPEED_EN);
  513. _index = strlen(buf);
  514. buf[_index] = ':';
  515. _index++;
  516. sprintf(&buf[_index], " %d KBytes/s\n", (int)(upload_size / upload_time / 1024));
  517. lv_label_set_text(labelDialog, buf);
  518. lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
  519. }
  520. }
  521. #endif //USE_WIFI_FUNCTION
  522. else if (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_LOAD_HEAT) {
  523. lv_label_set_text(labelDialog, filament_menu.filament_dialog_load_heat);
  524. lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
  525. }
  526. else if (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_HEAT_LOAD_COMPLETED) {
  527. lv_label_set_text(labelDialog, filament_menu.filament_dialog_load_heat_confirm);
  528. lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
  529. }
  530. else if (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_UNLOAD_HEAT) {
  531. lv_label_set_text(labelDialog, filament_menu.filament_dialog_unload_heat);
  532. lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
  533. }
  534. else if (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_HEAT_UNLOAD_COMPLETED) {
  535. lv_label_set_text(labelDialog, filament_menu.filament_dialog_unload_heat_confirm);
  536. lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
  537. }
  538. else if (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_LOAD_COMPLETED) {
  539. lv_label_set_text(labelDialog, filament_menu.filament_dialog_load_completed);
  540. lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
  541. }
  542. else if (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_UNLOAD_COMPLETED) {
  543. lv_label_set_text(labelDialog, filament_menu.filament_dialog_unload_completed);
  544. lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -20);
  545. }
  546. else if (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_LOADING) {
  547. lv_label_set_text(labelDialog, filament_menu.filament_dialog_loading);
  548. lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -70);
  549. }
  550. else if (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_UNLOADING) {
  551. lv_label_set_text(labelDialog, filament_menu.filament_dialog_unloading);
  552. lv_obj_align(labelDialog, NULL, LV_ALIGN_CENTER, 0, -70);
  553. }
  554. #if HAS_ROTARY_ENCODER
  555. if (gCfgItems.encoder_enable) {
  556. if (btnOk) lv_group_add_obj(g, btnOk);
  557. if (btnCancel) lv_group_add_obj(g, btnCancel);
  558. }
  559. #endif
  560. }
  561. void filament_sprayer_temp() {
  562. char buf[20] = {0};
  563. public_buf_l[0] = '\0';
  564. if (uiCfg.curSprayerChoose < 1)
  565. strcat(public_buf_l, preheat_menu.ext1);
  566. else
  567. strcat(public_buf_l, preheat_menu.ext2);
  568. sprintf(buf, preheat_menu.value_state, (int)thermalManager.temp_hotend[uiCfg.curSprayerChoose].celsius, (int)thermalManager.temp_hotend[uiCfg.curSprayerChoose].target);
  569. strcat_P(public_buf_l, PSTR(": "));
  570. strcat(public_buf_l, buf);
  571. lv_label_set_text(tempText1, public_buf_l);
  572. lv_obj_align(tempText1, NULL, LV_ALIGN_CENTER, 0, -50);
  573. }
  574. void filament_dialog_handle() {
  575. if ((temperature_change_frequency == 1)
  576. && ((uiCfg.dialogType == DIALOG_TYPE_FILAMENT_LOAD_HEAT)
  577. || (uiCfg.dialogType == DIALOG_TYPE_FILAMENT_UNLOAD_HEAT))
  578. ) {
  579. filament_sprayer_temp();
  580. temperature_change_frequency = 0;
  581. }
  582. if (uiCfg.filament_heat_completed_load == 1) {
  583. uiCfg.filament_heat_completed_load = 0;
  584. lv_clear_dialog();
  585. lv_draw_dialog(DIALOG_TYPE_FILAMENT_LOADING);
  586. planner.synchronize();
  587. uiCfg.filament_loading_time_flg = 1;
  588. uiCfg.filament_loading_time_cnt = 0;
  589. ZERO(public_buf_m);
  590. sprintf_P(public_buf_m,PSTR("T%d\nG91\nG1 E%d F%d\nG90"),uiCfg.curSprayerChoose,gCfgItems.filamentchange_load_length,gCfgItems.filamentchange_load_speed);
  591. queue.inject_P(PSTR(public_buf_m));
  592. //gcode.process_subcommands_now_P(PSTR(public_buf_m));
  593. }
  594. if (uiCfg.filament_heat_completed_unload == 1) {
  595. uiCfg.filament_heat_completed_unload = 0;
  596. lv_clear_dialog();
  597. lv_draw_dialog(DIALOG_TYPE_FILAMENT_UNLOADING);
  598. planner.synchronize();
  599. uiCfg.filament_unloading_time_flg = 1;
  600. uiCfg.filament_unloading_time_cnt = 0;
  601. ZERO(public_buf_m);
  602. sprintf_P(public_buf_m,PSTR("T%d\nG91\nG1 E-%d F%d\nG90"),uiCfg.curSprayerChoose,gCfgItems.filamentchange_unload_length,gCfgItems.filamentchange_unload_speed);
  603. queue.inject_P(PSTR(public_buf_m));
  604. }
  605. if (((abs((int)((int)thermalManager.temp_hotend[uiCfg.curSprayerChoose].celsius - gCfgItems.filament_limit_temper)) <= 1)
  606. || ((int)thermalManager.temp_hotend[uiCfg.curSprayerChoose].celsius > gCfgItems.filament_limit_temper))
  607. && (uiCfg.filament_load_heat_flg == 1)
  608. ) {
  609. uiCfg.filament_load_heat_flg = 0;
  610. lv_clear_dialog();
  611. lv_draw_dialog(DIALOG_TYPE_FILAMENT_HEAT_LOAD_COMPLETED);
  612. }
  613. if (uiCfg.filament_loading_completed == 1) {
  614. uiCfg.filament_rate = 0;
  615. uiCfg.filament_loading_completed = 0;
  616. lv_clear_dialog();
  617. lv_draw_dialog(DIALOG_TYPE_FILAMENT_LOAD_COMPLETED);
  618. }
  619. if (((abs((int)((int)thermalManager.temp_hotend[uiCfg.curSprayerChoose].celsius - gCfgItems.filament_limit_temper)) <= 1)
  620. || ((int)thermalManager.temp_hotend[uiCfg.curSprayerChoose].celsius > gCfgItems.filament_limit_temper))
  621. && (uiCfg.filament_unload_heat_flg == 1)
  622. ) {
  623. uiCfg.filament_unload_heat_flg = 0;
  624. lv_clear_dialog();
  625. lv_draw_dialog(DIALOG_TYPE_FILAMENT_HEAT_UNLOAD_COMPLETED);
  626. }
  627. if (uiCfg.filament_unloading_completed == 1) {
  628. uiCfg.filament_rate = 0;
  629. uiCfg.filament_unloading_completed = 0;
  630. lv_clear_dialog();
  631. lv_draw_dialog(DIALOG_TYPE_FILAMENT_UNLOAD_COMPLETED);
  632. }
  633. if ( uiCfg.dialogType == DIALOG_TYPE_FILAMENT_LOADING
  634. || uiCfg.dialogType == DIALOG_TYPE_FILAMENT_UNLOADING
  635. ) lv_filament_setbar();
  636. }
  637. void lv_filament_setbar() {
  638. lv_bar_set_value(filament_bar, uiCfg.filament_rate, LV_ANIM_ON);
  639. }
  640. void lv_clear_dialog() {
  641. #if HAS_ROTARY_ENCODER
  642. if (gCfgItems.encoder_enable) lv_group_remove_all_objs(g);
  643. #endif
  644. lv_obj_del(scr);
  645. }
  646. #endif // HAS_TFT_LVGL_UI