diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/files_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/files_screen.cpp index f7c7035761fd..e4e067fe00a8 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/files_screen.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/cocoa_press/files_screen.cpp @@ -111,20 +111,17 @@ void FilesScreen::drawFileButton(int x, int y, int w, int h, const char *filenam cmd.cmd(COLOR_RGB(is_highlighted ? fg_action : bg_color)); cmd.font(font_medium).rectangle(bx, by, bw, bh); cmd.cmd(COLOR_RGB(is_highlighted ? normal_btn.rgb : bg_text_enabled)); - #if ENABLED(SCROLL_LONG_FILENAMES) - if (is_highlighted) { - cmd.cmd(SAVE_CONTEXT()); - cmd.cmd(SCISSOR_XY(x,y)); - cmd.cmd(SCISSOR_SIZE(w,h)); - cmd.cmd(MACRO(0)); - cmd.text(bx, by, bw, bh, filename, OPT_CENTERY | OPT_NOFIT); - } else - #endif - draw_text_with_ellipsis(cmd, bx,by, bw - (is_dir ? 20 : 0), bh, filename, OPT_CENTERY, font_medium); - if (is_dir && !is_highlighted) cmd.text(bx, by, bw, bh, F("> "), OPT_CENTERY | OPT_RIGHTX); - #if ENABLED(SCROLL_LONG_FILENAMES) - if (is_highlighted) cmd.cmd(RESTORE_CONTEXT()); - #endif + if (TERN0(SCROLL_LONG_FILENAMES, is_highlighted)) { + cmd.cmd(SAVE_CONTEXT()); + cmd.cmd(SCISSOR_XY(x,y)); + cmd.cmd(SCISSOR_SIZE(w,h)); + cmd.cmd(MACRO(0)); + cmd.text(bx, by, bw, bh, filename, OPT_CENTERY | OPT_NOFIT); + } + else + draw_text_with_ellipsis(cmd, bx, by, bw - (is_dir ? 20 : 0), bh, filename, OPT_CENTERY, font_medium); + if (is_dir && !is_highlighted) cmd.text(bx, by, bw, bh, F("> "), OPT_CENTERY | OPT_RIGHTX); + if (TERN0(SCROLL_LONG_FILENAMES, is_highlighted)) cmd.cmd(RESTORE_CONTEXT()); } void FilesScreen::drawFileList() { @@ -136,11 +133,9 @@ void FilesScreen::drawFileList() { uint16_t fileIndex = mydata.cur_page * FILES_PER_PAGE; for (uint8_t i = 0; i < FILES_PER_PAGE; i++, fileIndex++) { - if (files.seek(fileIndex)) { - drawFileButton(files.filename(), getTagForLine(i), files.isDir(), false); - mydata.flags.is_empty = false; - } else - break; + if (!files.seek(fileIndex)) break; + drawFileButton(files.filename(), getTagForLine(i), files.isDir(), false); + mydata.flags.is_empty = false; } } diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_extui.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_extui.cpp index 93a83e21f8ab..0035ee66fe4a 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_extui.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_extui.cpp @@ -78,6 +78,8 @@ namespace ExtUI { void onPrintTimerStarted() { InterfaceSoundsScreen::playEventSound(InterfaceSoundsScreen::PRINTING_STARTED); + current_screen.forget(); + PUSH_SCREEN(StatusScreen); } void onPrintTimerStopped() { InterfaceSoundsScreen::playEventSound(InterfaceSoundsScreen::PRINTING_FINISHED); @@ -118,9 +120,18 @@ namespace ExtUI { if (msg) ConfirmUserRequestAlertBox::show(msg); else - ConfirmUserRequestAlertBox::hide(); + ConfirmUserRequestAlertBox::show("Press Resume to Continue"); } + #if ENABLED(ADVANCED_PAUSE_FEATURE) + void filament_load_prompt(const char * const msg) { + if (msg) + FilamentPromptBox::show(); + else + FilamentPromptBox::hide(); + } + #endif + // For fancy LCDs include an icon ID, message, and translated button title void onUserConfirmRequired(const int icon, const char * const cstr, FSTR_P const fBtn) { onUserConfirmRequired(cstr); diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/event_loop.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/event_loop.cpp index dd2e477d9f2c..6e0d841ed7fc 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/event_loop.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/ftdi_eve_lib/extended/event_loop.cpp @@ -21,6 +21,7 @@ ****************************************************************************/ #include "ftdi_extended.h" +#include "../../screens.h" #if ENABLED(FTDI_EXTENDED) using namespace FTDI; @@ -32,6 +33,7 @@ enum { tiny_timer_t touch_timer; UIData::flags_t UIData::flags; uint8_t pressed_tag = UNPRESSED; +uint8_t lastPauseMsgState = 0; uint8_t UIData::get_persistent_data_mask() { // A bit mask for flags that should be stored to the EEPROM. @@ -117,6 +119,31 @@ namespace FTDI { return; } + #if ENABLED(ADVANCED_PAUSE_FEATURE) + if (ExtUI::awaitingUserConfirm() && (lastPauseMsgState != ExtUI::pauseModeStatus)) { + //SERIAL_ECHOLNPGM("Calling Pause Screen : ", lastPauseMsgState); + switch (ExtUI::pauseModeStatus) { + case PAUSE_MESSAGE_PARKING: ExtUI::onStatusChanged(GET_TEXT_F(MSG_PAUSE_PRINT_PARKING)); break; + case PAUSE_MESSAGE_CHANGING: ExtUI::onStatusChanged(GET_TEXT_F(MSG_FILAMENT_CHANGE_INIT)); break; + case PAUSE_MESSAGE_UNLOAD: ExtUI::onStatusChanged(GET_TEXT_F(MSG_FILAMENT_CHANGE_UNLOAD)); break; + case PAUSE_MESSAGE_WAITING: ExtUI::onStatusChanged(GET_TEXT_F(MSG_ADVANCED_PAUSE_WAITING)); break; + case PAUSE_MESSAGE_INSERT: ExtUI::onStatusChanged(GET_TEXT_F(MSG_FILAMENT_CHANGE_INSERT)); break; + case PAUSE_MESSAGE_LOAD: ExtUI::onStatusChanged(GET_TEXT_F(MSG_FILAMENT_CHANGE_LOAD)); break; + case PAUSE_MESSAGE_PURGE: ExtUI::onStatusChanged(GET_TEXT_F(TERN(ADVANCED_PAUSE_CONTINUOUS_PURGE, MSG_FILAMENT_CHANGE_CONT_PURGE, MSG_FILAMENT_CHANGE_PURGE))); break; + case PAUSE_MESSAGE_RESUME: ExtUI::onStatusChanged(GET_TEXT_F(MSG_FILAMENT_CHANGE_RESUME)); break; + case PAUSE_MESSAGE_HEAT: ExtUI::onStatusChanged(GET_TEXT_F(MSG_FILAMENT_CHANGE_HEAT)); break; + case PAUSE_MESSAGE_HEATING: ExtUI::onStatusChanged(GET_TEXT_F(MSG_FILAMENT_CHANGE_HEATING)); break; + case PAUSE_MESSAGE_OPTION: FilamentPromptBox::show(); break; + case PAUSE_MESSAGE_STATUS: break; + default: ExtUI::onUserConfirmRequired(PSTR("Confirm Continue")); break; + } + } + else if (!ExtUI::awaitingUserConfirm() && !ExtUI::isPrintingPaused() && !ExtUI::getHostKeepaliveIsPaused()) { + ConfirmUserRequestAlertBox::hide(); + FilamentPromptBox::hide(); + } + #endif // ADVANCED_PAUSE_FEATURE + const uint8_t tag = CLCD::get_tag(); switch (pressed_tag) { diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/about_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/about_screen.cpp index 698f0d47b794..065f89adefc5 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/about_screen.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/about_screen.cpp @@ -5,6 +5,7 @@ /**************************************************************************** * Written By Mark Pelletier 2017 - Aleph Objects, Inc. * * Written By Marcio Teixeira 2018 - Aleph Objects, Inc. * + * Written By Brian Kahl 2023 - FAME3D * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -22,11 +23,12 @@ #include "../config.h" #include "../screens.h" +#include "../../ui_api.h" #ifdef FTDI_ABOUT_SCREEN #define GRID_COLS 4 -#define GRID_ROWS 8 +#define GRID_ROWS 30 using namespace FTDI; using namespace Theme; @@ -43,74 +45,63 @@ void AboutScreen::onRedraw(draw_mode_t) { .cmd(CLEAR(true,true,true)) .cmd(COLOR_RGB(bg_text_enabled)) .tag(0); - - #define HEADING_POS BTN_POS(1,1), BTN_SIZE(4,2) - #define FW_VERS_POS BTN_POS(1,3), BTN_SIZE(4,1) - #define FW_INFO_POS BTN_POS(1,4), BTN_SIZE(4,1) - #define LICENSE_POS BTN_POS(1,5), BTN_SIZE(4,3) - #define STATS_POS BTN_POS(1,8), BTN_SIZE(2,1) - #define BACK_POS BTN_POS(3,8), BTN_SIZE(2,1) - - char about_str[1 - + strlen_P(GET_TEXT(MSG_ABOUT_TOUCH_PANEL_2)) - #ifdef TOOLHEAD_NAME - + strlen_P(TOOLHEAD_NAME) - #endif - ]; - #ifdef TOOLHEAD_NAME - // If MSG_ABOUT_TOUCH_PANEL_2 has %s, substitute in the toolhead name. - // But this is optional, so squelch the compiler warning here. - #pragma GCC diagnostic push - #pragma GCC diagnostic ignored "-Wformat-extra-args" - sprintf_P(about_str, GET_TEXT(MSG_ABOUT_TOUCH_PANEL_2), TOOLHEAD_NAME); - #pragma GCC diagnostic pop - #else - strcpy_P(about_str, GET_TEXT(MSG_ABOUT_TOUCH_PANEL_2)); + #ifdef LULZBOT_LCD_MACHINE_NAME + draw_text_box(cmd, BTN_POS(1,1), BTN_SIZE(4,6), F( + #if ENABLED(LULZBOT_LONG_BED) + "" LULZBOT_LCD_MACHINE_NAME " \nWith Long Bed" + #elif ENABLED(LULZBOT_LONG_BED_V2) + "" LULZBOT_LCD_MACHINE_NAME " \nWith Long Bed V2" + #elif ENABLED(LULZBOT_BLTouch) && NONE(LULZBOT_LONG_BED_V2, TAZProV2) + "" LULZBOT_LCD_MACHINE_NAME " \nWith BLTouch" + #else + "" LULZBOT_LCD_MACHINE_NAME "\n" + #endif + ), OPT_CENTER, font_xxlarge); #endif - draw_text_box(cmd, HEADING_POS, - #ifdef MACHINE_NAME - F(MACHINE_NAME) - #else - GET_TEXT_F(MSG_ABOUT_TOUCH_PANEL_1) - #endif - , OPT_CENTER, font_xlarge - ); - #if ALL(TOUCH_UI_DEVELOPER_MENU, FTDI_DEVELOPER_MENU) + #ifdef LULZBOT_LCD_MACHINE_NAME cmd.tag(3); + draw_text_box(cmd, BTN_POS(1,7), BTN_SIZE(4,3), F( + "Firmware:" + ), OPT_CENTER, font_xlarge); + + draw_text_box(cmd, BTN_POS(1,10), BTN_SIZE(4,2), F( + "" LULZBOT_M115_EXTRUDER_TYPE "" + ), OPT_CENTER, font_xlarge); #endif - draw_text_box(cmd, FW_VERS_POS, - #ifdef TOUCH_UI_VERSION - F(TOUCH_UI_VERSION) - #else - FPSTR(getFirmwareName_str()) - #endif - , OPT_CENTER, font_medium); - cmd.tag(0); - draw_text_box(cmd, FW_INFO_POS, about_str, OPT_CENTER, font_medium); - draw_text_box(cmd, LICENSE_POS, GET_TEXT_F(MSG_LICENSE), OPT_CENTER, font_tiny); - - cmd.font(font_medium); - #if ALL(PRINTCOUNTER, FTDI_STATISTICS_SCREEN) - cmd.colors(normal_btn) - .tag(2).button(STATS_POS, GET_TEXT_F(MSG_INFO_STATS_MENU)); + + #if ENABLED(SHOW_TOOL_HEAD_ID) + draw_text_box(cmd, BTN_POS(1,13), BTN_SIZE(4,3), F( + "Tool Head:" + ), OPT_CENTER, font_xlarge); #endif - cmd.colors(action_btn) - .tag(1).button(BACK_POS, GET_TEXT_F(MSG_BUTTON_DONE)); + + draw_text_box(cmd, BTN_POS(1,19), BTN_SIZE(4,3), F( + "Version:" + ), OPT_CENTER, font_xlarge); + + draw_text_box(cmd, BTN_POS(1,22), BTN_SIZE(4,2), F( + "Marlin " SHORT_BUILD_VERSION "" + ), OPT_CENTER, font_xlarge); + + + cmd.font(font_medium).colors(normal_btn).tag(1).button(BTN_POS(1,24), BTN_SIZE(4,3), GET_TEXT_F(MSG_INFO_PRINTER_STATS_MENU)); + + cmd.font(font_medium).colors(action_btn).tag(2).button(BTN_POS(1,27), BTN_SIZE(4,3), GET_TEXT_F(MSG_BUTTON_DONE)); + } bool AboutScreen::onTouchEnd(uint8_t tag) { - switch (tag) { - case 1: GOTO_PREVIOUS(); break; + switch(tag) { + default: return false; #if ALL(PRINTCOUNTER, FTDI_STATISTICS_SCREEN) - case 2: GOTO_SCREEN(StatisticsScreen); break; + case 1: GOTO_SCREEN(StatisticsScreen); break; #endif + case 2: GOTO_PREVIOUS(); return true; #if ALL(TOUCH_UI_DEVELOPER_MENU, FTDI_DEVELOPER_MENU) case 3: GOTO_SCREEN(DeveloperMenu); break; #endif - default: return false; } - return true; } -#endif // FTDI_ABOUT_SCREEN +#endif // EXTENSIBLE_UI diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/advanced_settings_menu.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/advanced_settings_menu.cpp index 4745ff99dc55..e4cf0b379ca2 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/advanced_settings_menu.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/advanced_settings_menu.cpp @@ -5,6 +5,7 @@ /**************************************************************************** * Written By Mark Pelletier 2017 - Aleph Objects, Inc. * * Written By Marcio Teixeira 2018 - Aleph Objects, Inc. * + * Written By Brian Kahl 2023 - FAME3D. * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -43,21 +44,21 @@ void AdvancedSettingsMenu::onRedraw(draw_mode_t what) { #define GRID_ROWS 8 #endif #define GRID_COLS 2 - #define RESTORE_DEFAULTS_POS BTN_POS(1,1), BTN_SIZE(2,1) - #define DISPLAY_POS BTN_POS(1,2), BTN_SIZE(1,1) - #define INTERFACE_POS BTN_POS(2,2), BTN_SIZE(1,1) - #define ZPROBE_ZOFFSET_POS BTN_POS(1,3), BTN_SIZE(1,1) - #define STEPS_PER_MM_POS BTN_POS(2,3), BTN_SIZE(1,1) - #define FILAMENT_POS BTN_POS(1,4), BTN_SIZE(1,1) - #define VELOCITY_POS BTN_POS(2,4), BTN_SIZE(1,1) - #define TMC_CURRENT_POS BTN_POS(1,5), BTN_SIZE(1,1) - #define ACCELERATION_POS BTN_POS(2,5), BTN_SIZE(1,1) - #define ENDSTOPS_POS BTN_POS(1,6), BTN_SIZE(1,1) - #define JERK_POS BTN_POS(2,6), BTN_SIZE(1,1) - #define CASE_LIGHT_POS BTN_POS(1,7), BTN_SIZE(1,1) - #define BACKLASH_POS BTN_POS(2,7), BTN_SIZE(1,1) - #define OFFSETS_POS BTN_POS(1,8), BTN_SIZE(1,1) - #define TMC_HOMING_THRS_POS BTN_POS(2,8), BTN_SIZE(1,1) + #define RESTORE_DEFAULTS_POS BTN_POS(1,8), BTN_SIZE(2,1) + #define DISPLAY_POS BTN_POS(2,7), BTN_SIZE(1,1) + #define INTERFACE_POS BTN_POS(1,7), BTN_SIZE(1,1) + #define ZPROBE_ZOFFSET_POS BTN_POS(1,1), BTN_SIZE(1,1) + #define STEPS_PER_MM_POS BTN_POS(1,2), BTN_SIZE(1,1) + #define FILAMENT_POS BTN_POS(1,3), BTN_SIZE(1,1) + #define VELOCITY_POS BTN_POS(2,1), BTN_SIZE(1,1) + #define TMC_CURRENT_POS BTN_POS(2,5), BTN_SIZE(1,1) + #define ACCELERATION_POS BTN_POS(2,2), BTN_SIZE(1,1) + #define ENDSTOPS_POS BTN_POS(1,5), BTN_SIZE(1,1) + #define JERK_POS BTN_POS(2,3), BTN_SIZE(1,1) + #define FLOW_POS BTN_POS(1,6), BTN_SIZE(1,1) + #define BACKLASH_POS BTN_POS(2,4), BTN_SIZE(1,1) + #define OFFSETS_POS BTN_POS(1,4), BTN_SIZE(1,1) + #define TMC_HOMING_THRS_POS BTN_POS(2,6), BTN_SIZE(1,1) #if ANY(HAS_MULTI_HOTEND, SENSORLESS_HOMING) #define BACK_POS BTN_POS(1,9), BTN_SIZE(2,1) #else @@ -67,7 +68,7 @@ void AdvancedSettingsMenu::onRedraw(draw_mode_t what) { #define GRID_COLS 3 #define GRID_ROWS 6 #define ZPROBE_ZOFFSET_POS BTN_POS(1,1), BTN_SIZE(1,1) - #define CASE_LIGHT_POS BTN_POS(1,4), BTN_SIZE(1,1) + #define FLOW_POS BTN_POS(1,4), BTN_SIZE(1,1) #define STEPS_PER_MM_POS BTN_POS(2,1), BTN_SIZE(1,1) #define TMC_CURRENT_POS BTN_POS(3,1), BTN_SIZE(1,1) #define TMC_HOMING_THRS_POS BTN_POS(3,2), BTN_SIZE(1,1) @@ -89,14 +90,16 @@ void AdvancedSettingsMenu::onRedraw(draw_mode_t what) { cmd.colors(normal_btn) .font(Theme::font_medium) .enabled(ENABLED(HAS_BED_PROBE)) - .tag(2) .button(ZPROBE_ZOFFSET_POS, GET_TEXT_F(MSG_ZPROBE_ZOFFSET)) - .enabled(ENABLED(CASE_LIGHT_ENABLE)) - .tag(16).button(CASE_LIGHT_POS, GET_TEXT_F(MSG_CASE_LIGHT)) + .tag(2) .button(ZPROBE_ZOFFSET_POS, GET_TEXT_F(MSG_ZOFFSET)) + .tag(16).button(FLOW_POS, GET_TEXT_F(MSG_FLOW)) .tag(3) .button(STEPS_PER_MM_POS, GET_TEXT_F(MSG_STEPS_PER_MM)) .enabled(ENABLED(HAS_TRINAMIC_CONFIG)) .tag(13).button(TMC_CURRENT_POS, GET_TEXT_F(MSG_TMC_CURRENT)) - .enabled(ENABLED(SENSORLESS_HOMING)) - .tag(14).button(TMC_HOMING_THRS_POS, GET_TEXT_F(MSG_TMC_HOMING_THRS)) + #if ENABLED(SENSORLESS_HOMING) + .tag(14).button(TMC_HOMING_THRS_POS, GET_TEXT_F(MSG_TMC_HOMING_THRS)) + #else + .tag(17).button(TMC_HOMING_THRS_POS, GET_TEXT_F(MSG_CLEAN_NOZZLE)) + #endif .enabled(ENABLED(HAS_MULTI_HOTEND)) .tag(4) .button(OFFSETS_POS, GET_TEXT_F(MSG_OFFSETS_MENU)) .enabled(ANY(LIN_ADVANCE, FILAMENT_RUNOUT_SENSOR)) @@ -119,14 +122,14 @@ bool AdvancedSettingsMenu::onTouchEnd(uint8_t tag) { switch (tag) { case 1: SaveSettingsDialogBox::promptToSaveSettings(); break; #if HAS_BED_PROBE - case 2: GOTO_SCREEN(ZOffsetScreen); break; + case 2: GOTO_SCREEN(ZOffsetScreen); break; #endif - case 3: GOTO_SCREEN(StepsScreen); break; + case 3: GOTO_SCREEN(StepsScreen); break; #if HAS_MULTI_HOTEND - case 4: GOTO_SCREEN(NozzleOffsetScreen); break; + case 4: GOTO_SCREEN(NozzleOffsetScreen); break; #endif - case 5: GOTO_SCREEN(MaxVelocityScreen); break; - case 6: GOTO_SCREEN(DefaultAccelerationScreen); break; + case 5: GOTO_SCREEN(MaxVelocityScreen); break; + case 6: GOTO_SCREEN(DefaultAccelerationScreen); break; case 7: GOTO_SCREEN(TERN(HAS_JUNCTION_DEVIATION, JunctionDeviationScreen, JerkScreen)); break; #if ENABLED(BACKLASH_GCODE) case 8: GOTO_SCREEN(BacklashCompensationScreen); break; @@ -144,9 +147,14 @@ bool AdvancedSettingsMenu::onTouchEnd(uint8_t tag) { case 14: GOTO_SCREEN(StepperBumpSensitivityScreen); break; #endif case 15: GOTO_SCREEN(DisplayTuningScreen); break; - #if ENABLED(CASE_LIGHT_ENABLE) - case 16: GOTO_SCREEN(CaseLightScreen); break; - #endif + case 16: GOTO_SCREEN(FlowPercentScreen); break; + case 17: + GOTO_SCREEN(StatusScreen); + #ifndef CLEAN_SCRIPT + #define CLEAN_SCRIPT "G12" + #endif + injectCommands(F(CLEAN_SCRIPT)); + break; default: return false; } return true; diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/alert_dialog_box.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/alert_dialog_box.cpp index 86b4eb175a6a..b929085dc4e0 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/alert_dialog_box.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/alert_dialog_box.cpp @@ -38,7 +38,7 @@ void AlertDialogBox::onEntry() { void AlertDialogBox::onRedraw(draw_mode_t what) { if (what & FOREGROUND) { - drawOkayButton(); + drawDoneButton(); } } diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/base_numeric_adjustment_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/base_numeric_adjustment_screen.cpp index ce3066ae41f2..4a0a45ee03ba 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/base_numeric_adjustment_screen.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/base_numeric_adjustment_screen.cpp @@ -33,7 +33,7 @@ constexpr static BaseNumericAdjustmentScreenData &mydata = screen_data.BaseNumer #if ENABLED(TOUCH_UI_PORTRAIT) #define GRID_COLS 13 - #define GRID_ROWS 10 + #define GRID_ROWS (8+EXTRUDERS) #define LAYOUT_FONT font_small #else #define GRID_COLS 18 @@ -57,7 +57,7 @@ BaseNumericAdjustmentScreen::widgets_t::widgets_t(draw_mode_t what) : _what(what cmd.font(font_medium); _button(cmd, 1, #if ENABLED(TOUCH_UI_PORTRAIT) - BTN_POS(1,10), BTN_SIZE(13,1), + BTN_POS(1,GRID_ROWS), BTN_SIZE(13,1), #else BTN_POS(15,7), BTN_SIZE(4,1), #endif diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/change_filament_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/change_filament_screen.cpp index 17ec975692ea..8c687ce05d4c 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/change_filament_screen.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/change_filament_screen.cpp @@ -5,6 +5,7 @@ /**************************************************************************** * Written By Mark Pelletier 2017 - Aleph Objects, Inc. * * Written By Marcio Teixeira 2018 - Aleph Objects, Inc. * + * Written By Brian Kahl 2023 - FAME3D. * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -33,22 +34,20 @@ using namespace Theme; constexpr static ChangeFilamentScreenData &mydata = screen_data.ChangeFilamentScreen; #ifdef TOUCH_UI_PORTRAIT - #define GRID_COLS 2 - #define GRID_ROWS 11 - #define E_TEMP_POS BTN_POS(2,7), BTN_SIZE(1,1) - #define E_TEMP_LBL_POS BTN_POS(1,7), BTN_SIZE(1,1) - #define UNLD_LABL_POS BTN_POS(1,8), BTN_SIZE(1,1) - #define LOAD_LABL_POS BTN_POS(2,8), BTN_SIZE(1,1) - #define UNLD_MOMN_POS BTN_POS(1,9), BTN_SIZE(1,1) - #define LOAD_MOMN_POS BTN_POS(2,9), BTN_SIZE(1,1) - #define UNLD_CONT_POS BTN_POS(1,10), BTN_SIZE(1,1) - #define LOAD_CONT_POS BTN_POS(2,10), BTN_SIZE(1,1) - #define BACK_POS BTN_POS(1,11), BTN_SIZE(2,1) + #define GRID_COLS 4 + #define GRID_ROWS 10 + #define E0_TEMP_POS BTN_POS(1,2), BTN_SIZE(2,1) + #define E1_TEMP_POS BTN_POS(3,2), BTN_SIZE(2,1) + #define UNLD_LABL_POS BTN_POS(3,7), BTN_SIZE(2,2) + #define LOAD_LABL_POS BTN_POS(1,7), BTN_SIZE(2,2) + #define FILAMENT_SWAP_POS BTN_POS(1,9), BTN_SIZE(4,1) + #define BACK_POS BTN_POS(1,10), BTN_SIZE(4,1) #else #define GRID_COLS 4 #define GRID_ROWS 6 - #define E_TEMP_POS BTN_POS(3,2), BTN_SIZE(2,1) - #define E_TEMP_LBL_POS BTN_POS(3,1), BTN_SIZE(2,1) + #define E0_TEMP_POS BTN_POS(2,2), BTN_SIZE(1,1) + #define E1_TEMP_POS BTN_POS(3,2), BTN_SIZE(1,1) + #define FILAMENT_SWAP_POS BTN_POS(1,9), BTN_SIZE(4,1) #define UNLD_LABL_POS BTN_POS(3,3), BTN_SIZE(1,1) #define LOAD_LABL_POS BTN_POS(4,3), BTN_SIZE(1,1) #define UNLD_MOMN_POS BTN_POS(3,4), BTN_SIZE(1,1) @@ -57,22 +56,34 @@ constexpr static ChangeFilamentScreenData &mydata = screen_data.ChangeFilamentSc #define LOAD_CONT_POS BTN_POS(4,5), BTN_SIZE(1,1) #define BACK_POS BTN_POS(3,6), BTN_SIZE(2,1) #endif -#define REMOVAL_TEMP_LBL_POS BTN_POS(1,3), BTN_SIZE(2,1) -#define GRADIENT_POS BTN_POS(1,4), BTN_SIZE(1,3) -#define LOW_TEMP_POS BTN_POS(2,6), BTN_SIZE(1,1) -#define MED_TEMP_POS BTN_POS(2,5), BTN_SIZE(1,1) -#define HIG_TEMP_POS BTN_POS(2,4), BTN_SIZE(1,1) -#define HEATING_LBL_POS BTN_POS(1,6), BTN_SIZE(1,1) -#define CAUTION_LBL_POS BTN_POS(1,4), BTN_SIZE(1,1) -#define HOT_LBL_POS BTN_POS(1,6), BTN_SIZE(1,1) -#define E_SEL_LBL_POS BTN_POS(1,1), BTN_SIZE(2,1) -#define E1_SEL_POS BTN_POS(1,2), BTN_SIZE(1,1) -#define E2_SEL_POS BTN_POS(2,2), BTN_SIZE(1,1) +#define GROUP_1_POS BTN_POS(1,3), BTN_SIZE(4,1) +#define GROUP_1_LABL_POS BTN_POS(1,3), BTN_SIZE(3,1) +#define GROUP_1_TEMP_POS BTN_POS(4,3), BTN_SIZE(1,1) +#define GROUP_2_POS BTN_POS(1,4), BTN_SIZE(4,1) +#define GROUP_2_LABL_POS BTN_POS(1,4), BTN_SIZE(3,1) +#define GROUP_2_TEMP_POS BTN_POS(4,4), BTN_SIZE(1,1) +#define GROUP_3_POS BTN_POS(1,5), BTN_SIZE(4,1) +#define GROUP_3_LABL_POS BTN_POS(1,5), BTN_SIZE(3,1) +#define GROUP_3_TEMP_POS BTN_POS(4,5), BTN_SIZE(1,1) +#define GROUP_4_POS BTN_POS(1,6), BTN_SIZE(4,1) +#define GROUP_4_LABL_POS BTN_POS(1,6), BTN_SIZE(3,1) +#define GROUP_4_TEMP_POS BTN_POS(4,6), BTN_SIZE(1,1) +#define E1_SEL_POS BTN_POS(1,1), BTN_SIZE(2,1) +#define E2_SEL_POS BTN_POS(3,1), BTN_SIZE(2,1) #define COOL_TEMP 40 #define LOW_TEMP 180 -#define MED_TEMP 200 -#define HIGH_TEMP 220 +#define MED_TEMP 220 +#define HIGH_TEMP 240 +#define GROUP_1_TEMP 180 +#define GROUP_2_TEMP 200 +#define GROUP_3_TEMP 220 +#define GROUP_4_TEMP 240 + +#define _ICON_POS(x,y,w,h) x, y, w/3, h +#define _TEXT_POS(x,y,w,h) x + w/3, y, w - w/3, h +#define ICON_POS(pos) _ICON_POS(pos) +#define TEXT_POS(pos) _TEXT_POS(pos) /****************** COLOR SCALE ***********************/ @@ -144,95 +155,161 @@ void ChangeFilamentScreen::onRedraw(draw_mode_t what) { .cmd(CLEAR(true,true,true)) .cmd(COLOR_RGB(bg_text_enabled)) .tag(0) - .font(TERN(TOUCH_UI_PORTRAIT, font_large, font_medium)) - .text(E_SEL_LBL_POS, GET_TEXT_F(MSG_EXTRUDER_SELECTION)) - .text(E_TEMP_LBL_POS, GET_TEXT_F(MSG_CURRENT_TEMPERATURE)) - .text(REMOVAL_TEMP_LBL_POS, GET_TEXT_F(MSG_REMOVAL_TEMPERATURE)); - drawTempGradient(GRADIENT_POS); + .font(TERN(TOUCH_UI_PORTRAIT, font_large, font_medium)); } if (what & FOREGROUND) { - char str[15]; + char e0_str[20], e1_str[20]; const extruder_t e = getExtruder(); - if (isHeaterIdle(e)) - format_temp_and_idle(str, getActualTemp_celsius(e)); + if (isHeaterIdle(H0)) + format_temp_and_idle(e0_str, getActualTemp_celsius(H0)); else - format_temp_and_temp(str, getActualTemp_celsius(e), getTargetTemp_celsius(e)); + format_temp_and_temp(e0_str, getActualTemp_celsius(H0), getTargetTemp_celsius(H0)); + + #if HAS_MULTI_EXTRUDER + if (isHeaterIdle(H1)) + format_temp_and_idle(e1_str, getActualTemp_celsius(H1)); + else + format_temp_and_temp(e1_str, getActualTemp_celsius(H1), getTargetTemp_celsius(H1)); + #else + strcpy_P(e1_str, PSTR("N/A")); + #endif + - const rgb_t tcol = getWarmColor(getActualTemp_celsius(e), COOL_TEMP, LOW_TEMP, MED_TEMP, HIGH_TEMP); - cmd.cmd(COLOR_RGB(tcol)) - .tag(15) - .rectangle(E_TEMP_POS) - .cmd(COLOR_RGB(tcol.luminance() > 128 ? 0x000000 : 0xFFFFFF)) + if (getTargetTemp_celsius(H0) > 0) { + cmd.cmd(COLOR_RGB(temp_button)); + } + else { + cmd.cmd(COLOR_RGB(gray_color_1)); + } + cmd.tag(15) + .rectangle(E0_TEMP_POS) .font(font_medium) - .text(E_TEMP_POS, str) + .colors(normal_btn) + .text(TEXT_POS(E0_TEMP_POS), e0_str) .colors(normal_btn); - const bool t_ok = getActualTemp_celsius(e) > getSoftenTemp() - 10; - - if (mydata.t_tag && !t_ok) - cmd.text(HEATING_LBL_POS, GET_TEXT_F(MSG_HEATING)); - else if (getActualTemp_celsius(e) > 100) { - cmd.cmd(COLOR_RGB(0xFF0000)) - .text(CAUTION_LBL_POS, GET_TEXT_F(MSG_CAUTION)) - .colors(normal_btn) - .text(HOT_LBL_POS, GET_TEXT_F(MSG_HOT)); + if DISABLED(HAS_MULTI_HOTEND) { + cmd.font(font_small).cmd(COLOR_RGB(gray_color_1)); } + else if (getTargetTemp_celsius(H1) > 0) { + cmd.font(font_medium).cmd(COLOR_RGB(temp_button)); + } + else { + cmd.font(font_medium).cmd(COLOR_RGB(gray_color_1)); + } + cmd.tag(15) + .rectangle(E1_TEMP_POS) + .colors(normal_btn) + .text(TEXT_POS(E1_TEMP_POS), e1_str) + .colors(normal_btn); + + cmd.tag(5) + .cmd (BITMAP_SOURCE(Extruder_Icon_Info)) + .cmd (BITMAP_LAYOUT(Extruder_Icon_Info)) + .cmd (BITMAP_SIZE (Extruder_Icon_Info)) + .icon(ICON_POS(E0_TEMP_POS), Extruder_Icon_Info, icon_scale) + .icon(ICON_POS(E1_TEMP_POS), Extruder_Icon_Info, icon_scale); + + const bool t_ok = getActualTemp_celsius(e) > getSoftenTemp() - 30; #define TOG_STYLE(A) colors(A ? action_btn : normal_btn) const bool tog2 = mydata.t_tag == 2; const bool tog3 = mydata.t_tag == 3; const bool tog4 = mydata.t_tag == 4; + const bool tog5 = mydata.t_tag == 5; const bool tog10 = mydata.e_tag == 10; #if HAS_MULTI_HOTEND const bool tog11 = mydata.e_tag == 11; #endif cmd.TOG_STYLE(tog10) - .tag(10).button (E1_SEL_POS, F("1")) + .tag(10).font(font_large).button (E1_SEL_POS, F("Extruder 1")) #if HOTENDS < 2 - .enabled(false) + .tag(0).fgcolor(gray_color_1) #else - .TOG_STYLE(tog11) + .TOG_STYLE(tog11).tag(11) #endif - .tag(11).button (E2_SEL_POS, F("2")); + .button (E2_SEL_POS, F("Extruder 2")); if (!t_ok) reset_menu_timeout(); const bool tog7 = mydata.repeat_tag == 7; const bool tog8 = mydata.repeat_tag == 8; + cmd.colors(normal_btn) + .font(font_medium) + .tag(0) + .button(GROUP_1_POS, F(""), OPT_FLAT) + .button(GROUP_2_POS, F(""), OPT_FLAT) + .button(GROUP_3_POS, F(""), OPT_FLAT) + .button(GROUP_4_POS, F(""), OPT_FLAT); { char str[30]; - format_temp(str, LOW_TEMP); - cmd.tag(2) .TOG_STYLE(tog2).button (LOW_TEMP_POS, str); + format_temp(str, GROUP_1_TEMP); + cmd.tag(2) .TOG_STYLE(tog2).button (GROUP_1_TEMP_POS, F( STRINGIFY(GROUP_1_TEMP))); - format_temp(str, MED_TEMP); - cmd.tag(3) .TOG_STYLE(tog3).button (MED_TEMP_POS, str); + format_temp(str, GROUP_2_TEMP); + cmd.tag(3) .TOG_STYLE(tog3).button (GROUP_2_TEMP_POS, F( STRINGIFY(GROUP_2_TEMP))); - format_temp(str, HIGH_TEMP); - cmd.tag(4) .TOG_STYLE(tog4).button (HIG_TEMP_POS, str); + format_temp(str, GROUP_3_TEMP); + cmd.tag(4) .TOG_STYLE(tog4).button (GROUP_3_TEMP_POS, F( STRINGIFY(GROUP_3_TEMP))); + + format_temp(str, GROUP_4_TEMP); + cmd.tag(5) .TOG_STYLE(tog5).button (GROUP_4_TEMP_POS, F( STRINGIFY(GROUP_4_TEMP))); } + cmd.colors(normal_btn) + .font(font_medium) + .tag(0) + .text(GROUP_1_LABL_POS, F("PLA, PVA, PVB")) + .text(GROUP_2_LABL_POS, F("TPU, Flexibles")) + .text(GROUP_3_LABL_POS, F("ABS, PETg, ASA")) + .text(GROUP_4_LABL_POS, F("Nylon, PC")); + cmd.cmd(COLOR_RGB(t_ok ? bg_text_enabled : bg_text_disabled)) - .tag(0) .text (UNLD_LABL_POS, GET_TEXT_F(MSG_UNLOAD_FILAMENT)) - .text (LOAD_LABL_POS, GET_TEXT_F(MSG_LOAD_FILAMENT)) .colors(normal_btn) - .tag(5) .enabled(t_ok).button (UNLD_MOMN_POS, GET_TEXT_F(MSG_MOMENTARY)) - .tag(6) .enabled(t_ok).button (LOAD_MOMN_POS, GET_TEXT_F(MSG_MOMENTARY)) - .tag(7).TOG_STYLE(tog7).enabled(t_ok).button (UNLD_CONT_POS, GET_TEXT_F(MSG_CONTINUOUS)) - .tag(8).TOG_STYLE(tog8).enabled(t_ok).button (LOAD_CONT_POS, GET_TEXT_F(MSG_CONTINUOUS)) - .tag(1).colors(action_btn) .button (BACK_POS, GET_TEXT_F(MSG_BUTTON_DONE)); + .font(font_xlarge) + .tag(7).TOG_STYLE(tog7).enabled(t_ok).button (UNLD_LABL_POS, GET_TEXT_F(MSG_UNLOAD)) + .tag(8).TOG_STYLE(tog8).enabled(t_ok).button (LOAD_LABL_POS, GET_TEXT_F(MSG_LOAD)) + .font(font_medium) + .tag(1).colors(action_btn).button (BACK_POS, GET_TEXT_F(MSG_BUTTON_DONE)); + + if (ExtUI::isPrintingPaused()) { + cmd.colors(normal_btn) + .font(font_medium) + .tag(16).colors(normal_btn).button(FILAMENT_SWAP_POS, GET_TEXT_F(MSG_RESUME_PRINT)); + } + else { + #ifdef PARKING_COMMAND_GCODE + cmd.colors(normal_btn) + .font(font_medium) + .tag(17).colors(normal_btn).button(FILAMENT_SWAP_POS, GET_TEXT_F(MSG_FILAMENT_SWAP)); + #endif + } } } +void ChangeFilamentScreen::loadBitmaps() { + // Load the bitmaps for the status screen + using namespace Theme; + constexpr uint32_t base = ftdi_memory_map::RAM_G; + CLCD::mem_write_xbm(base + Extruder_Icon_Info.RAMG_offset, Extruder_Icon, sizeof(Extruder_Icon)); + + // Load fonts for internationalization + #if ENABLED(TOUCH_UI_USE_UTF8) + load_utf8_data(base + UTF8_FONT_OFFSET); + #endif +} + uint8_t ChangeFilamentScreen::getSoftenTemp() { switch (mydata.t_tag) { - case 2: return LOW_TEMP; - case 3: return MED_TEMP; - case 4: return HIGH_TEMP; + case 2: return GROUP_1_TEMP; + case 3: return GROUP_2_TEMP; + case 4: return GROUP_3_TEMP; + case 5: return GROUP_4_TEMP; default: return EXTRUDE_MINTEMP; } } @@ -257,19 +334,6 @@ void ChangeFilamentScreen::doPurge() { #endif } -bool ChangeFilamentScreen::onTouchStart(uint8_t tag) { - // Make the Momentary and Continuous buttons slightly more responsive - switch (tag) { - case 5: case 6: case 7: case 8: - #if FILAMENT_UNLOAD_PURGE_LENGTH > 0 - if (tag == 5 || tag == 7) doPurge(); - #endif - return ChangeFilamentScreen::onTouchHeld(tag); - default: - return false; - } -} - bool ChangeFilamentScreen::onTouchEnd(uint8_t tag) { using namespace ExtUI; switch (tag) { @@ -277,6 +341,7 @@ bool ChangeFilamentScreen::onTouchEnd(uint8_t tag) { case 2: case 3: case 4: + case 5: // Change temperature mydata.t_tag = tag; setTargetTemp_celsius(getSoftenTemp(), getExtruder()); @@ -290,8 +355,8 @@ bool ChangeFilamentScreen::onTouchEnd(uint8_t tag) { case 10: case 11: // Change extruder - mydata.e_tag = tag; - mydata.t_tag = 0; + mydata.e_tag = tag; + mydata.t_tag = 0; mydata.repeat_tag = 0; #if FILAMENT_UNLOAD_PURGE_LENGTH > 0 mydata.need_purge = true; @@ -299,6 +364,14 @@ bool ChangeFilamentScreen::onTouchEnd(uint8_t tag) { setActiveTool(getExtruder(), true); break; case 15: GOTO_SCREEN(TemperatureScreen); break; + case 16: + if (ExtUI::isPrintingPaused()) { + injectCommands(F("M117 Print Resumed")); resumePrint(); GOTO_SCREEN(StatusScreen); + } + break; + #ifdef PARKING_COMMAND_GCODE + case 17: injectCommands(F(PARKING_COMMAND_GCODE)); break; + #endif } return true; } @@ -309,7 +382,7 @@ bool ChangeFilamentScreen::onTouchHeld(uint8_t tag) { #define UI_INCREMENT_AXIS(axis) UI_INCREMENT(AxisPosition_mm, axis); #define UI_DECREMENT_AXIS(axis) UI_DECREMENT(AxisPosition_mm, axis); switch (tag) { - case 5: case 7: UI_DECREMENT_AXIS(getExtruder()); break; + case 7: UI_DECREMENT_AXIS(getExtruder()); break; case 6: case 8: UI_INCREMENT_AXIS(getExtruder()); break; default: return false; } diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/change_filament_screen.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/change_filament_screen.h index 42eaf25f4ae3..dd9da609f7ec 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/change_filament_screen.h +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/change_filament_screen.h @@ -40,11 +40,12 @@ class ChangeFilamentScreen : public BaseScreen, public CachedScreen. - * - */ +/***************************** + * custom_user_menu.cpp * + *****************************/ + +/**************************************************************************** + * Written By Brian Kahl 2023 - FAME3D. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 3 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * To view a copy of the GNU General Public License, go to the following * + * location: . * + ****************************************************************************/ #include "../config.h" #include "../screens.h" @@ -33,7 +32,7 @@ using namespace Theme; #define _USER_DESC(N) MAIN_MENU_ITEM_##N##_DESC #define _USER_GCODE(N) MAIN_MENU_ITEM_##N##_GCODE #define _USER_ITEM(N) .tag(_ITEM_TAG(N)).button(USER_ITEM_POS(N), _USER_DESC(N)) -#define _USER_ACTION(N) case _ITEM_TAG(N): injectCommands(F(_USER_GCODE(N))); TERN_(USER_SCRIPT_RETURN, GOTO_SCREEN(StatusScreen)); break; +#define _USER_ACTION(N) case _ITEM_TAG(N): injectCommands(F(_USER_GCODE(N))); TERN_(CUSTOM_MENU_MAIN_SCRIPT_RETURN, GOTO_SCREEN(StatusScreen)); break; void CustomUserMenus::onRedraw(draw_mode_t what) { if (what & BACKGROUND) { @@ -42,167 +41,127 @@ void CustomUserMenus::onRedraw(draw_mode_t what) { .cmd(CLEAR(true, true, true)); } - #if HAS_USER_ITEM(16, 17, 18, 19, 20) - #define _MORE_THAN_FIFTEEN 1 - #else - #define _MORE_THAN_FIFTEEN 0 - #endif - #if _MORE_THAN_FIFTEEN || HAS_USER_ITEM(11, 12, 13, 14, 15) - #define _MORE_THAN_TEN 1 - #else - #define _MORE_THAN_TEN 0 - #endif - #if ENABLED(TOUCH_UI_PORTRAIT) - #define GRID_COLS (1 + _MORE_THAN_TEN) - #define GRID_ROWS 11 - #define USER_ITEM_POS(N) BTN_POS((1+((N-1)/10)), ((N-1) % 10 + 1)), BTN_SIZE(1,1) - #define BACK_POS BTN_POS(1,11), BTN_SIZE(1,1) - #else - #if _MORE_THAN_TEN || HAS_USER_ITEM(6, 7, 8, 9, 10) - #define _MORE_THAN_FIVE 1 + #if defined(TOOLHEAD_Legacy_Universal) + #define GRID_ROWS 10 #else - #define _MORE_THAN_FIVE 0 + #define GRID_ROWS 7 #endif - #define GRID_COLS (1 + _MORE_THAN_FIVE + _MORE_THAN_TEN + _MORE_THAN_FIFTEEN) - #define GRID_ROWS 6 - #define USER_ITEM_POS(N) BTN_POS((1+((N-1)/5)), ((N-1) % 5 + 1)), BTN_SIZE(1,1) - #define BACK_POS BTN_POS(1,6), BTN_SIZE(GRID_COLS,1) + #define GRID_COLS 1 + #define TOOLHEAD_LABL_POS BTN_POS(1, 1), BTN_SIZE(GRID_COLS,1) + #define USER_ITEM_POS(N) BTN_POS(1, N), BTN_SIZE(GRID_COLS,1) + #define TOOLHEAD_SWAP_POS BTN_POS(1,GRID_ROWS-1), BTN_SIZE(GRID_COLS,1) + #define BACK_POS BTN_POS(1,GRID_ROWS), BTN_SIZE(GRID_COLS,1) + #else + #define GRID_ROWS 9 + #define GRID_COLS 1 + #define TOOLHEAD_LABL_POS BTN_POS(1, 1), BTN_SIZE(GRID_COLS,1) + #define USER_ITEM_POS(N) BTN_POS(1, N), BTN_SIZE(GRID_COLS,1) + #define TOOLHEAD_SWAP_POS BTN_POS(1,GRID_ROWS-1), BTN_SIZE(GRID_COLS,1) + #define BACK_POS BTN_POS(1,GRID_ROWS), BTN_SIZE(GRID_COLS,1) #endif +btn_colors thcolor[8] = {normal_btn}; + + +//.color(TH_color[1]) if (what & FOREGROUND) { CommandProcessor cmd; cmd.colors(normal_btn) .font(Theme::font_medium) - #if HAS_USER_ITEM(1) - _USER_ITEM(1) - #endif - #if HAS_USER_ITEM(2) - _USER_ITEM(2) - #endif - #if HAS_USER_ITEM(3) - _USER_ITEM(3) - #endif - #if HAS_USER_ITEM(4) - _USER_ITEM(4) - #endif - #if HAS_USER_ITEM(5) - _USER_ITEM(5) - #endif - #if HAS_USER_ITEM(6) - _USER_ITEM(6) - #endif - #if HAS_USER_ITEM(7) - _USER_ITEM(7) - #endif - #if HAS_USER_ITEM(8) - _USER_ITEM(8) - #endif - #if HAS_USER_ITEM(9) - _USER_ITEM(9) - #endif - #if HAS_USER_ITEM(10) - _USER_ITEM(10) - #endif - #if HAS_USER_ITEM(11) - _USER_ITEM(11) - #endif - #if HAS_USER_ITEM(12) - _USER_ITEM(12) - #endif - #if HAS_USER_ITEM(13) - _USER_ITEM(13) - #endif - #if HAS_USER_ITEM(14) - _USER_ITEM(14) - #endif - #if HAS_USER_ITEM(15) - _USER_ITEM(15) - #endif - #if HAS_USER_ITEM(16) - _USER_ITEM(16) - #endif - #if HAS_USER_ITEM(17) - _USER_ITEM(17) - #endif - #if HAS_USER_ITEM(18) - _USER_ITEM(18) - #endif - #if HAS_USER_ITEM(19) - _USER_ITEM(19) - #endif - #if HAS_USER_ITEM(20) - _USER_ITEM(20) + .tag(0).text(TOOLHEAD_LABL_POS, GET_TEXT_F(MSG_CUSTOM_MENU_MAIN_TITLE)); + cmd.colors(accent_btn) + .font(Theme::font_medium) + #if defined(MAIN_MENU_ITEM_1_DESC) + //_USER_ITEM(1) + .tag(_ITEM_TAG(11)).button(USER_ITEM_POS(1), MAIN_MENU_ITEM_1_DESC) + #endif + .colors(thcolor[1]) + #if defined(MAIN_MENU_ITEM_2_DESC) + //_USER_ITEM(2) + .tag(_ITEM_TAG(12)).button(USER_ITEM_POS(2), MAIN_MENU_ITEM_2_DESC) + #endif + .colors(thcolor[2]) + #if defined(MAIN_MENU_ITEM_3_DESC) + //_USER_ITEM(3) + .tag(_ITEM_TAG(13)).button(USER_ITEM_POS(3), MAIN_MENU_ITEM_3_DESC) + #endif + .colors(thcolor[3]) + #if defined(MAIN_MENU_ITEM_4_DESC) + //_USER_ITEM(4) + .tag(_ITEM_TAG(14)).button(USER_ITEM_POS(4), MAIN_MENU_ITEM_4_DESC) + #endif + .colors(thcolor[4]) + #if defined(MAIN_MENU_ITEM_5_DESC) + //_USER_ITEM(5) + .tag(_ITEM_TAG(15)).button(USER_ITEM_POS(5), MAIN_MENU_ITEM_5_DESC) + #endif + .colors(thcolor[5]) + #if defined(MAIN_MENU_ITEM_6_DESC) + //_USER_ITEM(6) + .tag(_ITEM_TAG(16)).button(USER_ITEM_POS(6), MAIN_MENU_ITEM_6_DESC) + #endif + .colors(thcolor[6]) + #if defined(MAIN_MENU_ITEM_7_DESC) + //_USER_ITEM(7) + .tag(_ITEM_TAG(17)).button(USER_ITEM_POS(7), MAIN_MENU_ITEM_7_DESC) + #endif + .colors(thcolor[7]) + #if defined(MAIN_MENU_ITEM_8_DESC) + //_USER_ITEM(8) + .tag(_ITEM_TAG(18)).button(USER_ITEM_POS(8), MAIN_MENU_ITEM_8_DESC) #endif - .colors(action_btn) - .tag(1).button(BACK_POS, GET_TEXT_F(MSG_BUTTON_DONE)); + + #if DISABLED(TOOLHEAD_Legacy_Universal) + #undef GRID_ROWS + #define GRID_ROWS 8 + #endif + #ifdef PARKING_COMMAND_GCODE + .tag(20).colors(normal_btn).button(TOOLHEAD_SWAP_POS, GET_TEXT_F(MSG_TOOL_HEAD_SWAP)) + #endif + .tag(1).colors(action_btn).button(BACK_POS, GET_TEXT_F(MSG_BUTTON_DONE)); } } bool CustomUserMenus::onTouchEnd(uint8_t tag) { switch (tag) { - #if HAS_USER_ITEM(1) - _USER_ACTION(1) - #endif - #if HAS_USER_ITEM(2) - _USER_ACTION(2) - #endif - #if HAS_USER_ITEM(3) - _USER_ACTION(3) + #if defined(MAIN_MENU_ITEM_1_DESC) + //_USER_ACTION(1) + case _ITEM_TAG(11): injectCommands_P(PSTR(MAIN_MENU_ITEM_1_GCODE));sound.play(chimes, PLAY_ASYNCHRONOUS); GOTO_SCREEN(StatusScreen); break; #endif - #if HAS_USER_ITEM(4) - _USER_ACTION(4) + #if defined(MAIN_MENU_ITEM_2_DESC) + //_USER_ACTION(2) + case _ITEM_TAG(12): injectCommands_P(PSTR(MAIN_MENU_ITEM_2_GCODE));sound.play(chimes, PLAY_ASYNCHRONOUS); GOTO_SCREEN(StatusScreen); break; #endif - #if HAS_USER_ITEM(5) - _USER_ACTION(5) + #if defined(MAIN_MENU_ITEM_3_DESC) + //_USER_ACTION(3) + case _ITEM_TAG(13): injectCommands_P(PSTR(MAIN_MENU_ITEM_3_GCODE));sound.play(chimes, PLAY_ASYNCHRONOUS); GOTO_SCREEN(StatusScreen); break; #endif - #if HAS_USER_ITEM(6) - _USER_ACTION(6) + #if defined(MAIN_MENU_ITEM_4_DESC) + //_USER_ACTION(4) + case _ITEM_TAG(14): injectCommands_P(PSTR(MAIN_MENU_ITEM_4_GCODE));sound.play(chimes, PLAY_ASYNCHRONOUS); GOTO_SCREEN(StatusScreen); break; #endif - #if HAS_USER_ITEM(7) - _USER_ACTION(7) + #if defined(MAIN_MENU_ITEM_5_DESC) + //_USER_ACTION(5) + case _ITEM_TAG(15): injectCommands_P(PSTR(MAIN_MENU_ITEM_5_GCODE));sound.play(chimes, PLAY_ASYNCHRONOUS); GOTO_SCREEN(StatusScreen); break; #endif - #if HAS_USER_ITEM(8) - _USER_ACTION(8) + #if defined(MAIN_MENU_ITEM_6_DESC) + //_USER_ACTION(6) + case _ITEM_TAG(16): injectCommands_P(PSTR(MAIN_MENU_ITEM_6_GCODE));sound.play(chimes, PLAY_ASYNCHRONOUS); GOTO_SCREEN(StatusScreen); break; #endif - #if HAS_USER_ITEM(9) - _USER_ACTION(9) + #if defined(MAIN_MENU_ITEM_7_DESC) + //_USER_ACTION(7) + case _ITEM_TAG(17): injectCommands_P(PSTR(MAIN_MENU_ITEM_7_GCODE));sound.play(chimes, PLAY_ASYNCHRONOUS); GOTO_SCREEN(StatusScreen);break; #endif - #if HAS_USER_ITEM(10) - _USER_ACTION(10) - #endif - #if HAS_USER_ITEM(11) - _USER_ACTION(11) - #endif - #if HAS_USER_ITEM(12) - _USER_ACTION(12) - #endif - #if HAS_USER_ITEM(13) - _USER_ACTION(13) - #endif - #if HAS_USER_ITEM(14) - _USER_ACTION(14) - #endif - #if HAS_USER_ITEM(15) - _USER_ACTION(15) - #endif - #if HAS_USER_ITEM(16) - _USER_ACTION(16) - #endif - #if HAS_USER_ITEM(17) - _USER_ACTION(17) - #endif - #if HAS_USER_ITEM(18) - _USER_ACTION(18) - #endif - #if HAS_USER_ITEM(19) - _USER_ACTION(19) - #endif - #if HAS_USER_ITEM(20) - _USER_ACTION(20) + #if defined(MAIN_MENU_ITEM_8_DESC) + //_USER_ACTION(8) + case _ITEM_TAG(18): injectCommands_P(PSTR(MAIN_MENU_ITEM_8_GCODE));sound.play(chimes, PLAY_ASYNCHRONOUS); GOTO_SCREEN(StatusScreen);break; #endif case 1: GOTO_PREVIOUS(); break; + #ifdef PARKING_COMMAND_GCODE + case 20: injectCommands(F(PARKING_COMMAND_GCODE)); break; + #endif default: return false; } return true; diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/dialog_box_base_class.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/dialog_box_base_class.cpp index ea177bfdc1d5..2886e4cf5582 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/dialog_box_base_class.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/dialog_box_base_class.cpp @@ -5,6 +5,7 @@ /**************************************************************************** * Written By Mark Pelletier 2017 - Aleph Objects, Inc. * * Written By Marcio Teixeira 2018 - Aleph Objects, Inc. * + * Written By Brian Kahl 2023 - FAME3D. * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -48,8 +49,33 @@ template void DialogBoxBaseClass::drawMessage(PGM_P const, const int16_t); void DialogBoxBaseClass::drawYesNoButtons(uint8_t default_btn) { CommandProcessor cmd; cmd.font(font_medium) - .colors(default_btn == 1 ? action_btn : normal_btn).tag(1).button(BTN_POS(1,8), BTN_SIZE(1,1), GET_TEXT_F(MSG_YES)) - .colors(default_btn == 2 ? action_btn : normal_btn).tag(2).button(BTN_POS(2,8), BTN_SIZE(1,1), GET_TEXT_F(MSG_NO)); + .colors(default_btn == 1 ? action_btn : action_btn).tag(1).button(BTN_POS(2,8), BTN_SIZE(1,1), GET_TEXT_F(MSG_YES)) + .colors(default_btn == 2 ? action_btn : normal_btn).tag(2).button(BTN_POS(1,8), BTN_SIZE(1,1), GET_TEXT_F(MSG_NO)); +} + +void DialogBoxBaseClass::drawStartPrintButtons(uint8_t default_btn) { + #undef GRID_COLS + #undef GRID_ROWS + #define GRID_COLS 1 + #define GRID_ROWS 13 + + CommandProcessor cmd; + + cmd.cmd(CMD_DLSTART) + .cmd(CLEAR_COLOR_RGB(bg_color)) + .cmd(CLEAR(true,true,true)) + .cmd(COLOR_RGB(bg_text_enabled)) + .tag(0); + draw_text_box(cmd, BTN_POS(1,2), BTN_SIZE(1,3), GET_TEXT_F(MSG_PRINT_COMPLETE), OPT_CENTER, font_xlarge); + draw_text_box(cmd, BTN_POS(1,5), BTN_SIZE(1,3), GET_TEXT_F(MSG_PRINT_AREA_CLEAR), OPT_CENTER, font_large); + cmd.font(font_large) + .colors(normal_btn).tag(1).button(BTN_POS(1,9), BTN_SIZE(1,2), GET_TEXT_F(MSG_START_NEXT_PRINT)) + .colors(action_btn).tag(2).button(BTN_POS(1,11), BTN_SIZE(1,2), GET_TEXT_F(MSG_MAIN_MENU)); + + #undef GRID_COLS + #undef GRID_ROWS + #define GRID_COLS 2 + #define GRID_ROWS 8 } void DialogBoxBaseClass::drawOkayButton() { @@ -58,6 +84,12 @@ void DialogBoxBaseClass::drawOkayButton() { .tag(1).button(BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXT_F(MSG_BUTTON_OKAY)); } +void DialogBoxBaseClass::drawDoneButton() { + CommandProcessor cmd; + cmd.font(font_medium) + .tag(1).colors(action_btn).button(BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXT_F(MSG_BUTTON_DONE)); +} + template void DialogBoxBaseClass::drawButton(T label) { CommandProcessor cmd; @@ -68,10 +100,17 @@ void DialogBoxBaseClass::drawButton(T label) { template void DialogBoxBaseClass::drawButton(const char *); template void DialogBoxBaseClass::drawButton(FSTR_P); +void DialogBoxBaseClass::drawFilamentButtons() { + CommandProcessor cmd; + cmd.font(font_medium) + .tag(1).button(BTN_POS(1,7), BTN_SIZE(2,1), GET_TEXT_F(MSG_FILAMENT_CHANGE_OPTION_PURGE)) + .tag(2).button(BTN_POS(1,8), BTN_SIZE(2,1), GET_TEXT_F(MSG_FILAMENT_CHANGE_OPTION_RESUME)); +} + bool DialogBoxBaseClass::onTouchEnd(uint8_t tag) { switch (tag) { - case 1: GOTO_PREVIOUS(); return true; - case 2: GOTO_PREVIOUS(); return true; + case 1: GOTO_SCREEN(StatusScreen); return true; + case 2: GOTO_SCREEN(StatusScreen); return true; default: return false; } } diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/dialog_box_base_class.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/dialog_box_base_class.h index fc05560b8cac..2bf22375a85b 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/dialog_box_base_class.h +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/dialog_box_base_class.h @@ -32,7 +32,10 @@ class DialogBoxBaseClass : public BaseScreen { template static void drawButton(T); static void drawYesNoButtons(uint8_t default_btn = 0); + static void drawStartPrintButtons(uint8_t default_btn = 0); static void drawOkayButton(); + static void drawDoneButton(); + static void drawFilamentButtons(); static void onRedraw(draw_mode_t) {} diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/feedrate_percent_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/feedrate_percent_screen.cpp index 80eb295f6481..6b5aa8c766d9 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/feedrate_percent_screen.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/feedrate_percent_screen.cpp @@ -27,11 +27,13 @@ using namespace FTDI; using namespace ExtUI; +using namespace Theme; void FeedratePercentScreen::onRedraw(draw_mode_t what) { widgets_t w(what); w.precision(0).units(GET_TEXT_F(MSG_UNITS_PERCENT)); + w.color(feedrate); w.heading(GET_TEXT_F(MSG_PRINT_SPEED)); w.adjuster(4, GET_TEXT_F(MSG_SPEED), getFeedrate_percent()); w.increments(); diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/filament_prompt_box.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/filament_prompt_box.cpp new file mode 100644 index 000000000000..146dbe457acf --- /dev/null +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/filament_prompt_box.cpp @@ -0,0 +1,72 @@ +/************************************** + * filament_prompt_box.cpp * + **************************************/ + +/**************************************************************************** + * Written By Mark Pelletier 2017 - Aleph Objects, Inc. * + * Written By Marcio Teixeira 2018 - Aleph Objects, Inc. * + * Written By Brian Kahl 2023 - FAME3D. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 3 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * To view a copy of the GNU General Public License, go to the following * + * location: . * + ****************************************************************************/ + +#include "../config.h" +#include "../screens.h" +#include "../screen_data.h" + +#ifdef FTDI_FILAMENT_PROMPT_BOX + +using namespace FTDI; + +// Need to be renamed to Filament Purge prompt? +void FilamentPromptBox::onRedraw(draw_mode_t mode) { + AlertDialogBox::onRedraw(mode); // Required for the GOTO_SCREEN function to work + //GET_TEXT_F(MSG_FILAMENT_CHANGE_PURGE_CONTINUE),GET_TEXT_F(MSG_FILAMENT_CHANGE_OPTION_PURGE), GET_TEXT_F(MSG_FILAMENT_CHANGE_OPTION_RESUME)) + drawMessage(GET_TEXT_F(MSG_FILAMENT_CHANGE_PURGE_CONTINUE)); + drawFilamentButtons(); +} + +bool FilamentPromptBox::onTouchEnd(uint8_t tag) { + switch (tag) { + case 1: + #if ENABLED(ADVANCED_PAUSE_FEATURE) + pause_menu_response = PAUSE_RESPONSE_EXTRUDE_MORE; + #endif + return true; + case 2: + #if ENABLED(ADVANCED_PAUSE_FEATURE) + pause_menu_response = PAUSE_RESPONSE_RESUME_PRINT; + #endif + GOTO_SCREEN(StatusScreen); + return true; + default: + return false; + } +} + +void FilamentPromptBox::show() { + drawMessage(GET_TEXT_F(MSG_FILAMENT_CHANGE_PURGE_CONTINUE)); + drawFilamentButtons(); + storeBackground(); + screen_data.AlertDialogBox.isError = false; + if (!AT_SCREEN(FilamentPromptBox)) + GOTO_SCREEN(FilamentPromptBox); +} + +void FilamentPromptBox::hide() { + if (AT_SCREEN(FilamentPromptBox)) + GOTO_PREVIOUS(); +} + +#endif // FTDI_FILAMENT_PROMPT_BOX diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/filament_prompt_box.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/filament_prompt_box.h new file mode 100644 index 000000000000..e75befe18121 --- /dev/null +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/filament_prompt_box.h @@ -0,0 +1,35 @@ +/************************************ + * filament_prompt_box.h * + ************************************/ + +/**************************************************************************** + * Written By Mark Pelletier 2017 - Aleph Objects, Inc. * + * Written By Marcio Teixeira 2018 - Aleph Objects, Inc. * + * Written By Brian Kahl 2023 - FAME3D. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 3 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * To view a copy of the GNU General Public License, go to the following * + * location: . * + ****************************************************************************/ + +#pragma once + +#define FTDI_FILAMENT_PROMPT_BOX +#define FTDI_FILAMENT_PROMPT_BOX_CLASS FilamentPromptBox + +class FilamentPromptBox : public AlertDialogBox { + public: + static void onRedraw(draw_mode_t); + static bool onTouchEnd(uint8_t); + static void hide(); + static void show(); +}; diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/filament_prompt_dialog_box.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/filament_prompt_dialog_box.cpp new file mode 100644 index 000000000000..5291c2a59074 --- /dev/null +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/filament_prompt_dialog_box.cpp @@ -0,0 +1,67 @@ +/************************ + * filament_prompt_dialog_box.cpp * + ************************/ + +/**************************************************************************** + * Written By Mark Pelletier 2017 - Aleph Objects, Inc. * + * Written By Marcio Teixeira 2018 - Aleph Objects, Inc. * + * Written By Brian Kahl 2023 - FAME3D. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 3 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * To view a copy of the GNU General Public License, go to the following * + * location: . * + ****************************************************************************/ + +#include "../config.h" +#include "../screens.h" +#include "../screen_data.h" + +#ifdef FTDI_FILAMENT_PROMPT_DIALOG_BOX + +constexpr static FilamentPromptDialogBoxData &mydata = screen_data.FilamentPromptDialogBox; + +using namespace FTDI; +using namespace Theme; + +void FilamentPromptDialogBox::onEntry() { + BaseScreen::onEntry(); + sound.play(mydata.isError ? sad_trombone : twinkle, PLAY_ASYNCHRONOUS); +} + +void FilamentPromptDialogBox::onRedraw(draw_mode_t what) { + if (what & FOREGROUND) { + drawMessage(GET_TEXT_F(MSG_FILAMENT_CHANGE_PURGE_CONTINUE)); + drawFilamentButtons(); + } +} + +void FilamentPromptDialogBox::show() { + drawMessage(GET_TEXT_F(MSG_FILAMENT_CHANGE_PURGE_CONTINUE)); + drawFilamentButtons(); + storeBackground(); + mydata.isError = false; + GOTO_SCREEN(FilamentPromptDialogBox); +} + +void FilamentPromptDialogBox::showError() { + drawMessage(GET_TEXT_F(MSG_FILAMENT_CHANGE_PURGE_CONTINUE)); + storeBackground(); + mydata.isError = true; + GOTO_SCREEN(FilamentPromptDialogBox); +} + +void FilamentPromptDialogBox::hide() { + if (AT_SCREEN(FilamentPromptDialogBox)) + GOTO_PREVIOUS(); +} + +#endif // FTDI_ALERT_DIALOG_BOX diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/filament_prompt_dialog_box.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/filament_prompt_dialog_box.h new file mode 100644 index 000000000000..857b35d80fa0 --- /dev/null +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/filament_prompt_dialog_box.h @@ -0,0 +1,40 @@ +/********************** + * filament_prompt_dialog_box.h * + **********************/ + +/**************************************************************************** + * Written By Mark Pelletier 2017 - Aleph Objects, Inc. * + * Written By Marcio Teixeira 2018 - Aleph Objects, Inc. * + * Written By Brian Kahl 2023 - FAME3D. * + * * + * This program is free software: you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation, either version 3 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * To view a copy of the GNU General Public License, go to the following * + * location: . * + ****************************************************************************/ + +#pragma once + +#define FTDI_FILAMENT_PROMPT_DIALOG_BOX +#define FTDI_FILAMENT_PROMPT_DIALOG_BOX_CLASS FilamentPromptDialogBox + +struct FilamentPromptDialogBoxData { + bool isError; +}; + +class FilamentPromptDialogBox : public DialogBoxBaseClass, public CachedScreen { + public: + static void onEntry(); + static void onRedraw(draw_mode_t); + static void show(); + static void showError(); + static void hide(); +}; diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/files_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/files_screen.cpp index 290c20f43e59..2dd7091389ed 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/files_screen.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/files_screen.cpp @@ -112,20 +112,16 @@ void FilesScreen::drawFileButton(int x, int y, int w, int h, const char *filenam cmd.font(font_medium).rectangle(bx, by, bw, bh); cmd.cmd(COLOR_RGB(is_highlighted ? normal_btn.rgb : bg_text_enabled)); if (TERN0(SCROLL_LONG_FILENAMES, is_highlighted)) { - #if ENABLED(SCROLL_LONG_FILENAMES) - cmd.cmd(SAVE_CONTEXT()); - cmd.cmd(SCISSOR_XY(x,y)); - cmd.cmd(SCISSOR_SIZE(w,h)); - cmd.cmd(MACRO(0)); - cmd.text(bx, by, bw, bh, filename, OPT_CENTERY | OPT_NOFIT); - #endif + cmd.cmd(SAVE_CONTEXT()); + cmd.cmd(SCISSOR_XY(x,y)); + cmd.cmd(SCISSOR_SIZE(w,h)); + cmd.cmd(MACRO(0)); + cmd.text(bx, by, bw, bh, filename, OPT_CENTERY | OPT_NOFIT); } else - draw_text_with_ellipsis(cmd, bx,by, bw - (is_dir ? 20 : 0), bh, filename, OPT_CENTERY, font_medium); + draw_text_with_ellipsis(cmd, bx, by, bw - (is_dir ? 20 : 0), bh, filename, OPT_CENTERY, font_medium); if (is_dir && !is_highlighted) cmd.text(bx, by, bw, bh, F("> "), OPT_CENTERY | OPT_RIGHTX); - #if ENABLED(SCROLL_LONG_FILENAMES) - if (is_highlighted) cmd.cmd(RESTORE_CONTEXT()); - #endif + if (TERN0(SCROLL_LONG_FILENAMES, is_highlighted)) cmd.cmd(RESTORE_CONTEXT()); } void FilesScreen::drawFileList() { @@ -174,7 +170,7 @@ void FilesScreen::drawFooter() { if (mydata.flags.is_root) cmd.tag(240).button(BTN2_POS, GET_TEXT_F(MSG_BUTTON_DONE)); else - cmd.tag(245).button(BTN2_POS, F("Up Dir")); + cmd.tag(245).button(BTN2_POS, F("Back")); cmd.enabled(has_selection) .colors(has_selection ? action_btn : normal_btn); @@ -220,7 +216,8 @@ bool FilesScreen::onTouchEnd(uint8_t tag) { GOTO_PREVIOUS(); return true; case 241: // Print highlighted file - ConfirmStartPrintDialogBox::show(getSelectedFileIndex()); + printFile(getSelectedShortFilename()); + GOTO_SCREEN(StatusScreen); return true; case 242: // Previous page if (mydata.cur_page > 0) { diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/flow_percent_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/flow_percent_screen.cpp index be350bd9a7f3..c0ca97d6e70c 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/flow_percent_screen.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/flow_percent_screen.cpp @@ -31,7 +31,7 @@ void FlowPercentScreen::onRedraw(draw_mode_t what) { widgets_t w(what); w.precision(0).units(GET_TEXT_F(MSG_UNITS_PERCENT)); - w.heading(GET_TEXT_F(MSG_FLOW)); + w.heading(GET_TEXT_F(MSG_FLOW_PERCENTAGE)); w.adjuster(4, GET_TEXT_F(MSG_FLOW), getFlow_percent(E0)); w.increments(); } diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/leveling_menu.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/leveling_menu.cpp index ee9eecf742fd..ce281c685bac 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/leveling_menu.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/leveling_menu.cpp @@ -5,6 +5,7 @@ /**************************************************************************** * Written By Mark Pelletier 2017 - Aleph Objects, Inc. * * Written By Marcio Teixeira 2018 - Aleph Objects, Inc. * + * Written By Brian Kahl 2023 - FAME3D. * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -40,12 +41,15 @@ using namespace Theme; #define LEVEL_AXIS_POS BTN_POS(1,2), BTN_SIZE(2,1) #define BED_MESH_TITLE_POS BTN_POS(1,3), BTN_SIZE(2,1) #define PROBE_BED_POS BTN_POS(1,4), BTN_SIZE(1,1) + #define ZOFFSET_POS BTN_POS(2,4), BTN_SIZE(1,1) #define TEST_MESH_POS BTN_POS(2,4), BTN_SIZE(1,1) #define SHOW_MESH_POS BTN_POS(1,5), BTN_SIZE(1,1) - #define EDIT_MESH_POS BTN_POS(2,5), BTN_SIZE(1,1) - #define BLTOUCH_TITLE_POS BTN_POS(1,6), BTN_SIZE(2,1) - #define BLTOUCH_RESET_POS BTN_POS(1,7), BTN_SIZE(1,1) - #define BLTOUCH_TEST_POS BTN_POS(2,7), BTN_SIZE(1,1) + #define EDIT_MESH_POS BTN_POS(2,4), BTN_SIZE(1,1) + #define BLTOUCH_TITLE_POS BTN_POS(1,5), BTN_SIZE(2,1) + #define BLTOUCH_RESET_POS BTN_POS(1,6), BTN_SIZE(1,1) + #define BLTOUCH_TEST_POS BTN_POS(2,6), BTN_SIZE(1,1) + #define BLTOUCH_DEPLOY_POS BTN_POS(1,7), BTN_SIZE(1,1) + #define BLTOUCH_STOW_POS BTN_POS(2,7), BTN_SIZE(1,1) #define BACK_POS BTN_POS(1,8), BTN_SIZE(2,1) #else #define GRID_COLS 3 @@ -54,12 +58,15 @@ using namespace Theme; #define LEVEL_AXIS_POS BTN_POS(1,2), BTN_SIZE(3,1) #define BED_MESH_TITLE_POS BTN_POS(1,3), BTN_SIZE(2,1) #define PROBE_BED_POS BTN_POS(1,4), BTN_SIZE(1,1) + #define ZOFFSET_POS BTN_POS(2,4), BTN_SIZE(1,1) #define TEST_MESH_POS BTN_POS(2,4), BTN_SIZE(1,1) #define SHOW_MESH_POS BTN_POS(1,5), BTN_SIZE(1,1) #define EDIT_MESH_POS BTN_POS(2,5), BTN_SIZE(1,1) #define BLTOUCH_TITLE_POS BTN_POS(3,3), BTN_SIZE(1,1) #define BLTOUCH_RESET_POS BTN_POS(3,4), BTN_SIZE(1,1) #define BLTOUCH_TEST_POS BTN_POS(3,5), BTN_SIZE(1,1) + #define BLTOUCH_DEPLOY_POS BTN_POS(1,7), BTN_SIZE(1,1) + #define BLTOUCH_STOW_POS BTN_POS(2,7), BTN_SIZE(1,1) #define BACK_POS BTN_POS(1,6), BTN_SIZE(3,1) #endif @@ -81,19 +88,24 @@ void LevelingMenu::onRedraw(draw_mode_t what) { .text(BLTOUCH_TITLE_POS, GET_TEXT_F(MSG_BLTOUCH)) #endif .font(font_medium).colors(normal_btn) - .enabled(ANY(Z_STEPPER_AUTO_ALIGN, MECHANICAL_GANTRY_CALIBRATION)) + .enabled(ANY(Z_STEPPER_AUTO_ALIGN, MECHANICAL_GANTRY_CALIBRATION,X_LEVEL_SEQUENCE)) .tag(2).button(LEVEL_AXIS_POS, GET_TEXT_F(MSG_LEVEL_X_AXIS)) .enabled(ENABLED(HAS_BED_PROBE)) .tag(3).button(PROBE_BED_POS, GET_TEXT_F(MSG_PROBE_BED)) + .tag(4).button(ZOFFSET_POS, GET_TEXT_F(MSG_ZOFFSET)) + #if DISABLED (AUTO_BED_LEVELING_BILINEAR) .enabled(ENABLED(HAS_MESH)) - .tag(4).button(SHOW_MESH_POS, GET_TEXT_F(MSG_MESH_VIEW)) + .tag(5).button(SHOW_MESH_POS, GET_TEXT_F(MSG_MESH_VIEW)) .enabled(ENABLED(HAS_MESH)) - .tag(5).button(EDIT_MESH_POS, GET_TEXT_F(MSG_EDIT_MESH)) + .tag(6).button(EDIT_MESH_POS, GET_TEXT_F(MSG_EDIT_MESH)) .enabled(ENABLED(G26_MESH_VALIDATION)) - .tag(6).button(TEST_MESH_POS, GET_TEXT_F(MSG_PRINT_TEST)) + .tag(7).button(TEST_MESH_POS, GET_TEXT_F(MSG_PRINT_TEST)) + #endif #if ENABLED(BLTOUCH) - .tag(7).button(BLTOUCH_RESET_POS, GET_TEXT_F(MSG_BLTOUCH_RESET)) - .tag(8).button(BLTOUCH_TEST_POS, GET_TEXT_F(MSG_BLTOUCH_SELFTEST)) + .tag(8).button(BLTOUCH_RESET_POS, GET_TEXT_F(MSG_BLTOUCH_RESET)) + .tag(9).button(BLTOUCH_TEST_POS, GET_TEXT_F(MSG_BLTOUCH_SELFTEST)) + .tag(10).button(BLTOUCH_DEPLOY_POS, GET_TEXT_F(MSG_BLTOUCH_DEPLOY)) + .tag(11).button(BLTOUCH_STOW_POS, GET_TEXT_F(MSG_BLTOUCH_STOW)) #endif .colors(action_btn) .tag(1).button(BACK_POS, GET_TEXT_F(MSG_BUTTON_DONE)); @@ -103,13 +115,13 @@ void LevelingMenu::onRedraw(draw_mode_t what) { bool LevelingMenu::onTouchEnd(uint8_t tag) { switch (tag) { case 1: GOTO_PREVIOUS(); break; - #if ANY(Z_STEPPER_AUTO_ALIGN, MECHANICAL_GANTRY_CALIBRATION) - case 2: SpinnerDialogBox::enqueueAndWait(F("G34")); break; + #if ANY(Z_STEPPER_AUTO_ALIGN, MECHANICAL_GANTRY_CALIBRATION, X_LEVEL_SEQUENCE) + case 2: SpinnerDialogBox::enqueueAndWait(F(LEVELING_COMMANDS)); break; #endif #if HAS_BED_PROBE case 3: #ifndef BED_LEVELING_COMMANDS - #define BED_LEVELING_COMMANDS "G29" + #define BED_LEVELING_COMMANDS "G28\nG29" #endif #if ENABLED(AUTO_BED_LEVELING_UBL) BedMeshViewScreen::doProbe(); @@ -118,19 +130,22 @@ bool LevelingMenu::onTouchEnd(uint8_t tag) { #endif break; #endif + case 4: GOTO_SCREEN(ZOffsetScreen); break; #if ENABLED(AUTO_BED_LEVELING_UBL) - case 4: BedMeshViewScreen::show(); break; - case 5: BedMeshEditScreen::show(); break; + case 5: BedMeshViewScreen::show(); break; + case 6: BedMeshEditScreen::show(); break; #endif #if ENABLED(G26_MESH_VALIDATION) - case 6: + case 7: GOTO_SCREEN(StatusScreen); injectCommands(F("G28\nM117 Heating...\nG26 R X0 Y0\nG27")); break; #endif #if ENABLED(BLTOUCH) - case 7: injectCommands(F("M280 P0 S60")); break; - case 8: SpinnerDialogBox::enqueueAndWait(F("M280 P0 S90\nG4 P100\nM280 P0 S120")); break; + case 8: injectCommands(F("M280 P0 S60")); break; + case 9: SpinnerDialogBox::enqueueAndWait(F("M280 P0 S90\nG4 P100\nM280 P0 S120")); break; + case 10: injectCommands(F("M401\nM140 S0")); break; + case 11: injectCommands(F("M402")); break; #endif default: return false; } diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/main_menu.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/main_menu.cpp index 137ddc59cff5..50a188c7e25b 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/main_menu.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/main_menu.cpp @@ -6,6 +6,7 @@ * Written By Mark Pelletier 2017 - Aleph Objects, Inc. * * Written By Marcio Teixeira 2018 - Aleph Objects, Inc. * * Written By Marcio Teixeira 2019 - Cocoa Press * + * Written By Brian Kahl 2023 - FAME3D. * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -38,39 +39,29 @@ void MainMenu::onRedraw(draw_mode_t what) { #if ENABLED(TOUCH_UI_PORTRAIT) #define GRID_COLS 2 - #define GRID_ROWS 8 - #define ABOUT_PRINTER_POS BTN_POS(1,1), BTN_SIZE(2,1) - #define ADVANCED_SETTINGS_POS BTN_POS(1,2), BTN_SIZE(2,1) - #if ENABLED(CUSTOM_MENU_MAIN) - #define FILAMENTCHANGE_POS BTN_POS(1,3), BTN_SIZE(1,1) - #define CUSTOM_MENU_POS BTN_POS(2,3), BTN_SIZE(1,1) - #else - #define FILAMENTCHANGE_POS BTN_POS(1,3), BTN_SIZE(2,1) - #endif + #define GRID_ROWS 7 + + #define MOVE_AXIS_POS BTN_POS(1,1), BTN_SIZE(1,1) + #define DISABLE_STEPPERS_POS BTN_POS(2,1), BTN_SIZE(1,1) + #define BACKLASH_POS BTN_POS(1,2), BTN_SIZE(1,1) + #define CLEAN_NOZZLE_POS BTN_POS(2,2), BTN_SIZE(1,1) + #define LEVELING_POS BTN_POS(1,3), BTN_SIZE(1,1) + #define Z_OFFSET_POS BTN_POS(2,3), BTN_SIZE(1,1) #define TEMPERATURE_POS BTN_POS(1,4), BTN_SIZE(2,1) - #define DISABLE_STEPPERS_POS BTN_POS(1,5), BTN_SIZE(2,1) - #define MOVE_AXIS_POS BTN_POS(1,6), BTN_SIZE(1,1) - #define LEVELING_POS BTN_POS(2,6), BTN_SIZE(1,1) - #define AUTO_HOME_POS BTN_POS(1,7), BTN_SIZE(1,1) - #define CLEAN_NOZZLE_POS BTN_POS(2,7), BTN_SIZE(1,1) - #define BACK_POS BTN_POS(1,8), BTN_SIZE(2,1) + #define ABOUT_PRINTER_POS BTN_POS(1,5), BTN_SIZE(2,1) + #define ADVANCED_SETTINGS_POS BTN_POS(1,6), BTN_SIZE(2,1) + #define BACK_POS BTN_POS(1,7), BTN_SIZE(2,1) #else #define GRID_COLS 6 #define GRID_ROWS 5 #define ADVANCED_SETTINGS_POS BTN_POS(1,1), BTN_SIZE(3,1) #define ABOUT_PRINTER_POS BTN_POS(4,1), BTN_SIZE(3,1) - #define AUTO_HOME_POS BTN_POS(1,2), BTN_SIZE(3,1) - #define CLEAN_NOZZLE_POS BTN_POS(4,2), BTN_SIZE(3,1) + #define BACKLASH_POS BTN_POS(1,2), BTN_SIZE(1,1) + #define CLEAN_NOZZLE_POS BTN_POS(2,2), BTN_SIZE(1,1) #define MOVE_AXIS_POS BTN_POS(1,3), BTN_SIZE(3,1) + #define Z_OFFSET_POS BTN_POS(2,3), BTN_SIZE(1,1) #define DISABLE_STEPPERS_POS BTN_POS(4,3), BTN_SIZE(3,1) - #if ENABLED(CUSTOM_MENU_MAIN) - #define TEMPERATURE_POS BTN_POS(1,4), BTN_SIZE(2,1) - #define FILAMENTCHANGE_POS BTN_POS(3,4), BTN_SIZE(2,1) - #define CUSTOM_MENU_POS BTN_POS(5,4), BTN_SIZE(2,1) - #else - #define TEMPERATURE_POS BTN_POS(1,4), BTN_SIZE(3,1) - #define FILAMENTCHANGE_POS BTN_POS(4,4), BTN_SIZE(3,1) - #endif + #define TEMPERATURE_POS BTN_POS(1,4), BTN_SIZE(2,1) #define LEVELING_POS BTN_POS(1,5), BTN_SIZE(3,1) #define BACK_POS BTN_POS(4,5), BTN_SIZE(3,1) #endif @@ -79,23 +70,20 @@ void MainMenu::onRedraw(draw_mode_t what) { CommandProcessor cmd; cmd.colors(normal_btn) .font(Theme::font_medium) - .tag( 2).button(AUTO_HOME_POS, GET_TEXT_F(MSG_AUTO_HOME)) - .enabled(ENABLED(NOZZLE_CLEAN_FEATURE)) - .tag( 3).button(CLEAN_NOZZLE_POS, GET_TEXT_F(MSG_CLEAN_NOZZLE)) - .tag( 4).button(MOVE_AXIS_POS, GET_TEXT_F(MSG_MOVE_AXIS)) - .tag( 5).button(DISABLE_STEPPERS_POS,GET_TEXT_F(MSG_DISABLE_STEPPERS)) - .tag( 6).button(TEMPERATURE_POS, GET_TEXT_F(MSG_TEMPERATURE)) - .enabled(DISABLED(TOUCH_UI_LULZBOT_BIO)) - .tag( 7).button(FILAMENTCHANGE_POS, GET_TEXT_F(MSG_FILAMENTCHANGE)) - .tag( 8).button(ADVANCED_SETTINGS_POS, GET_TEXT_F(MSG_ADVANCED_SETTINGS)) - .enabled(ENABLED(HAS_LEVELING)) - .tag( 9).button(LEVELING_POS, GET_TEXT_F(MSG_LEVELING)) - .tag(10).button(ABOUT_PRINTER_POS, GET_TEXT_F(MSG_INFO_MENU)) - #if ENABLED(CUSTOM_MENU_MAIN) - .tag(11).button(CUSTOM_MENU_POS, GET_TEXT_F(MSG_CUSTOM_COMMANDS)) - #endif + .tag(2).button(MOVE_AXIS_POS, GET_TEXT_F(MSG_MOVE_AXIS)) + .tag(3).button(DISABLE_STEPPERS_POS, F("")); + draw_text_box(cmd, DISABLE_STEPPERS_POS, F("Disable\nMotors"), OPT_CENTER, font_medium); + cmd.tag(4).button(BACKLASH_POS, GET_TEXT_F(MSG_BACKLASH)) + .tag(5).button(CLEAN_NOZZLE_POS, GET_TEXT_F(MSG_CLEAN_NOZZLE)) + .tag(6).button(TEMPERATURE_POS, GET_TEXT_F(MSG_TEMPERATURE)) + .enabled(DISABLED(TOUCH_UI_LULZBOT_BIO)) + .tag(7).button(ADVANCED_SETTINGS_POS, GET_TEXT_F(MSG_ADVANCED_SETTINGS)) + .enabled(ENABLED(HAS_LEVELING)) + .tag(8).button(LEVELING_POS, GET_TEXT_F(MSG_LEVELING)) + .tag(9).button(Z_OFFSET_POS, GET_TEXT_F(MSG_ZOFFSET)) + .tag(10).button(ABOUT_PRINTER_POS, GET_TEXT_F(MSG_INFO_MENU)) .colors(action_btn) - .tag(1).button(BACK_POS, GET_TEXT_F(MSG_BUTTON_DONE)); + .tag(1).button(BACK_POS, GET_TEXT_F(MSG_BUTTON_DONE)); } } @@ -104,31 +92,33 @@ bool MainMenu::onTouchEnd(uint8_t tag) { switch (tag) { case 1: SaveSettingsDialogBox::promptToSaveSettings(); break; - case 2: SpinnerDialogBox::enqueueAndWait(F("G28")); break; - #if ENABLED(NOZZLE_CLEAN_FEATURE) - case 3: - injectCommands(F("G12")); - GOTO_SCREEN(StatusScreen); break; + case 2: GOTO_SCREEN(MoveAxisScreen); break; + case 3: injectCommands(F("M84")); break; + #if ENABLED(BACKLASH_COMPENSATION) + case 4: GOTO_SCREEN(BacklashCompensationScreen); break; #endif - case 4: GOTO_SCREEN(MoveAxisScreen); break; case 5: - injectCommands(F("M84 E" - TERN_(DISABLE_IDLE_X, " X") - TERN_(DISABLE_IDLE_Y, " Y") - TERN_(DISABLE_IDLE_Z, " Z") - )); + GOTO_SCREEN(StatusScreen); + #ifndef CLEAN_SCRIPT + #define CLEAN_SCRIPT "G12" + #endif + injectCommands(F(CLEAN_SCRIPT)); break; - case 6: GOTO_SCREEN(TemperatureScreen); break; - case 7: GOTO_SCREEN(ChangeFilamentScreen); break; - case 8: GOTO_SCREEN(AdvancedSettingsMenu); break; + case 6: GOTO_SCREEN(TemperatureScreen); break; + case 7: GOTO_SCREEN(AdvancedSettingsMenu); break; #if HAS_LEVELING - case 9: GOTO_SCREEN(LevelingMenu); break; + case 8: GOTO_SCREEN(LevelingMenu); break; #endif - case 10: GOTO_SCREEN(AboutScreen); break; - #if ENABLED(CUSTOM_MENU_MAIN) - case 11: GOTO_SCREEN(CustomUserMenus); break; + #if ALL(HAS_LEVELING, HAS_BED_PROBE) + case 9: + #if EXTRUDERS > 1 + GOTO_SCREEN(NudgeNozzleScreen); + #else + GOTO_SCREEN(ZOffsetScreen); + #endif + break; #endif - + case 10: GOTO_SCREEN(AboutScreen); break; default: return false; } diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/move_axis_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/move_axis_screen.cpp index 95fe023cdaf6..bbb1d33098d5 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/move_axis_screen.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/move_axis_screen.cpp @@ -28,6 +28,7 @@ using namespace FTDI; using namespace ExtUI; +using namespace Theme; constexpr static MoveAxisScreenData &mydata = screen_data.MoveAxisScreen; @@ -42,9 +43,12 @@ void BaseMoveAxisScreen::onEntry() { } BaseNumericAdjustmentScreen::onEntry(); } +#define GRID_COLS 13 +#define GRID_ROWS (8+EXTRUDERS) void MoveAxisScreen::onRedraw(draw_mode_t what) { widgets_t w(what); + CommandProcessor cmd; w.precision(1); w.units(GET_TEXT_F(MSG_UNITS_MM)); w.heading( GET_TEXT_F(MSG_MOVE_AXIS)); @@ -70,6 +74,13 @@ void MoveAxisScreen::onRedraw(draw_mode_t what) { w.button(24, GET_TEXT_F(MSG_MOVE_Z_TO_TOP), !axis_should_home(Z_AXIS)); #endif w.increments(); + #ifdef PARKING_COMMAND_GCODE + if (!ExtUI::isPrinting()) { // making sure the Tool Head Swap Position is not avalible while printing + cmd.font(font_medium) + .colors(normal_btn) + .tag(25).button(BTN_POS(1,(7+EXTRUDERS)), BTN_SIZE(13,1), GET_TEXT_F(MSG_TOOL_HEAD_SWAP)); + } + #endif } bool BaseMoveAxisScreen::onTouchHeld(const uint8_t tag) { @@ -111,6 +122,9 @@ bool BaseMoveAxisScreen::onTouchHeld(const uint8_t tag) { #endif #endif case 23: SpinnerDialogBox::enqueueAndWait(F("G28")); break; + #ifdef PARKING_COMMAND_GCODE + case 25: injectCommands(F(PARKING_COMMAND_GCODE)); break; + #endif default: return false; } diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/nudge_nozzle_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/nudge_nozzle_screen.cpp index c1611100a98e..5688dd31af40 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/nudge_nozzle_screen.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/nudge_nozzle_screen.cpp @@ -32,6 +32,9 @@ using namespace ExtUI; constexpr static NudgeNozzleScreenData &mydata = screen_data.NudgeNozzleScreen; +#define GRID_COLS 13 +#define GRID_ROWS (9+EXTRUDERS) + void NudgeNozzleScreen::onEntry() { mydata.show_offsets = false; #if HAS_MULTI_EXTRUDER @@ -44,9 +47,10 @@ void NudgeNozzleScreen::onEntry() { void NudgeNozzleScreen::onRedraw(draw_mode_t what) { widgets_t w(what); + CommandProcessor cmd; w.precision(2, BaseNumericAdjustmentScreen::DEFAULT_MIDRANGE).units(GET_TEXT_F(MSG_UNITS_MM)); - w.heading(GET_TEXT_F(MSG_NUDGE_NOZZLE)); + w.heading(GET_TEXT_F(MSG_ZOFFSET)); #if ENABLED(BABYSTEP_XY) w.color(x_axis).adjuster(2, GET_TEXT_F(MSG_AXIS_X), mydata.rel.x / getAxisSteps_per_mm(X)); w.color(y_axis).adjuster(4, GET_TEXT_F(MSG_AXIS_Y), mydata.rel.y / getAxisSteps_per_mm(Y)); @@ -70,7 +74,7 @@ void NudgeNozzleScreen::onRedraw(draw_mode_t what) { dtostrf(getZOffset_mm(), 4, 2, str); strcat(str, " "); strcat_P(str, GET_TEXT(MSG_UNITS_MM)); - w.text_field(0, GET_TEXT_F(MSG_ZPROBE_ZOFFSET), str); + w.text_field(0, GET_TEXT_F(MSG_ZOFFSET), str); #endif #if HAS_MULTI_HOTEND @@ -79,6 +83,11 @@ void NudgeNozzleScreen::onRedraw(draw_mode_t what) { #endif } #endif + if (what & FOREGROUND) { + cmd.colors(normal_btn) + .font(font_medium) + .tag(10).colors(action_btn).button(BTN_POS(1,GRID_ROWS), BTN_SIZE(GRID_COLS,1), GET_TEXT_F(MSG_BUTTON_DONE)); + } } bool NudgeNozzleScreen::onTouchHeld(uint8_t tag) { @@ -100,6 +109,7 @@ bool NudgeNozzleScreen::onTouchHeld(uint8_t tag) { case 8: mydata.link_nozzles = !link; break; #endif case 9: mydata.show_offsets = !mydata.show_offsets; break; + case 10: GOTO_SCREEN(SaveSettingsDialogBox); break; default: return false; } #if HAS_MULTI_EXTRUDER || HAS_BED_PROBE diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/save_settings_dialog_box.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/save_settings_dialog_box.cpp index 496d004a20e1..4a35844b6331 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/save_settings_dialog_box.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/save_settings_dialog_box.cpp @@ -27,6 +27,8 @@ using namespace ExtUI; +using namespace Theme; + bool SaveSettingsDialogBox::needs_save = false; void SaveSettingsDialogBox::onRedraw(draw_mode_t) { @@ -39,7 +41,9 @@ bool SaveSettingsDialogBox::onTouchEnd(uint8_t tag) { switch (tag) { case 1: injectCommands(F("M500")); - AlertDialogBox::show(GET_TEXT_F(MSG_EEPROM_SAVED)); + sound.play(twinkle, PLAY_ASYNCHRONOUS); + GOTO_SCREEN(StatusScreen); + //AlertDialogBox::show(GET_TEXT_F(MSG_EEPROM_SAVED)); // Remove SaveSettingsDialogBox from the stack // so the alert box doesn't return to me. current_screen.forget(); diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/screens.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/screens.h index c200931eec51..a95932a88001 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/screens.h +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/screens.h @@ -33,6 +33,7 @@ enum { MENU_SCREEN_CACHE, TUNE_SCREEN_CACHE, ALERT_BOX_CACHE, + FILAMENT_PROMPT_BOX_CACHE, SPINNER_CACHE, ADVANCED_SETTINGS_SCREEN_CACHE, MOVE_AXIS_SCREEN_CACHE, @@ -101,6 +102,7 @@ enum { #define STATUS_SCREEN_DL_SIZE 4096 #define ALERT_BOX_DL_SIZE 3072 +#define FILAMENT_PROMPT_BOX_DL_SIZE 3072 #define SPINNER_DL_SIZE 3072 #define FILE_SCREEN_DL_SIZE 4160 #define PRINTING_SCREEN_DL_SIZE 2048 @@ -118,12 +120,14 @@ enum { #include "about_screen.h" #include "kill_screen.h" #include "alert_dialog_box.h" +#include "filament_prompt_dialog_box.h" #include "spinner_dialog_box.h" #include "restore_failsafe_dialog_box.h" #include "save_settings_dialog_box.h" #include "confirm_start_print_dialog_box.h" #include "confirm_abort_print_dialog_box.h" #include "confirm_user_request_alert_box.h" +#include "filament_prompt_box.h" #include "touch_calibration_screen.h" #include "touch_registers_screen.h" #include "change_filament_screen.h" @@ -140,6 +144,7 @@ enum { #include "endstop_state_screen.h" #include "display_tuning_screen.h" #include "media_player_screen.h" +#include "flow_percent_screen.h" #if ENABLED(PRINTCOUNTER) #include "statistics_screen.h" diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/statistics_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/statistics_screen.cpp index b6d9770e9d2d..19fc40dba957 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/statistics_screen.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/statistics_screen.cpp @@ -44,7 +44,7 @@ void StatisticsScreen::onRedraw(draw_mode_t what) { .tag(0) .font(Theme::font_medium) - .text(BTN_POS(1,1), BTN_SIZE(4,1), GET_TEXT_F(MSG_INFO_STATS_MENU)) + .text(BTN_POS(1,1), BTN_SIZE(4,1), GET_TEXT_F(MSG_INFO_PRINTER_STATS_MENU)) .font(Theme::font_small) .tag(0) .text(BTN_POS(1,2), BTN_SIZE(2,1), GET_TEXT_F(MSG_INFO_PRINT_COUNT), OPT_RIGHTX | OPT_CENTERY) diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/status_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/status_screen.cpp index aec3ad6836af..6d5ef85aa3e1 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/status_screen.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/status_screen.cpp @@ -5,6 +5,7 @@ /**************************************************************************** * Written By Mark Pelletier 2017 - Aleph Objects, Inc. * * Written By Marcio Teixeira 2018 - Aleph Objects, Inc. * + * Written By Brian Kahl 2023 - FAME3D. * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -30,48 +31,50 @@ using namespace FTDI; using namespace Theme; +using namespace ExtUI; -#define GRID_COLS 3 +#define GRID_COLS 9 #define GRID_ROWS 16 void StatusScreen::draw_axis_position(draw_mode_t what) { CommandProcessor cmd; #if ENABLED(TOUCH_UI_PORTRAIT) - #define X_LBL_POS BTN_POS(1, 9), BTN_SIZE(1,2) - #define Y_LBL_POS BTN_POS(1,11), BTN_SIZE(1,2) - #define Z_LBL_POS BTN_POS(1,13), BTN_SIZE(1,2) - #define X_VAL_POS BTN_POS(2, 9), BTN_SIZE(2,2) - #define Y_VAL_POS BTN_POS(2,11), BTN_SIZE(2,2) - #define Z_VAL_POS BTN_POS(2,13), BTN_SIZE(2,2) + #define X_LBL_POS BTN_POS(1,7), BTN_SIZE(2,2) + #define Y_LBL_POS BTN_POS(4,7), BTN_SIZE(2,2) + #define Z_LBL_POS BTN_POS(7,7), BTN_SIZE(2,2) + #define X_VAL_POS BTN_POS(2,7), BTN_SIZE(2,2) + #define Y_VAL_POS BTN_POS(5,7), BTN_SIZE(2,2) + #define Z_VAL_POS BTN_POS(8,7), BTN_SIZE(2,2) + #define ALL_VAL_POS BTN_POS(1,7), BTN_SIZE(9,2) #else - #define X_LBL_POS BTN_POS(1, 9), BTN_SIZE(1,2) - #define Y_LBL_POS BTN_POS(2, 9), BTN_SIZE(1,2) - #define Z_LBL_POS BTN_POS(3, 9), BTN_SIZE(1,2) - #define X_VAL_POS BTN_POS(1,11), BTN_SIZE(1,2) - #define Y_VAL_POS BTN_POS(2,11), BTN_SIZE(1,2) - #define Z_VAL_POS BTN_POS(3,11), BTN_SIZE(1,2) + #define X_LBL_POS BTN_POS(1, 9), BTN_SIZE(1, 2) + #define Y_LBL_POS BTN_POS(2, 9), BTN_SIZE(1, 2) + #define Z_LBL_POS BTN_POS(3, 9), BTN_SIZE(1, 2) + #define X_VAL_POS BTN_POS(1,11), BTN_SIZE(1, 2) + #define Y_VAL_POS BTN_POS(2,11), BTN_SIZE(1, 2) + #define Z_VAL_POS BTN_POS(3,11), BTN_SIZE(1, 2) + #define ALL_VAL_POS BTN_POS(1, 9), BTN_SIZE(3,11) #endif #define _UNION_POS(x1,y1,w1,h1,x2,y2,w2,h2) x1,y1,max(x1+w1,x2+w2)-x1,max(y1+h1,y2+h2)-y1 #define UNION_POS(p1, p2) _UNION_POS(p1, p2) if (what & BACKGROUND) { - cmd.tag(6) - .fgcolor(Theme::axis_label) - .font(Theme::font_large) - .button(UNION_POS(X_LBL_POS, X_VAL_POS), F(""), OPT_FLAT) - .button(UNION_POS(Y_LBL_POS, Y_VAL_POS), F(""), OPT_FLAT) - .button(UNION_POS(Z_LBL_POS, Z_VAL_POS), F(""), OPT_FLAT) + cmd.tag(0) + .colors(normal_btn) .font(Theme::font_medium) - .fgcolor(Theme::x_axis) .button(X_VAL_POS, F(""), OPT_FLAT) - .fgcolor(Theme::y_axis) .button(Y_VAL_POS, F(""), OPT_FLAT) - .fgcolor(Theme::z_axis) .button(Z_VAL_POS, F(""), OPT_FLAT) - .font(Theme::font_small) - .text ( X_LBL_POS, GET_TEXT_F(MSG_AXIS_X)) - .text ( Y_LBL_POS, GET_TEXT_F(MSG_AXIS_Y)) - .text ( Z_LBL_POS, GET_TEXT_F(MSG_AXIS_Z)) - .colors(normal_btn); + .text ( X_LBL_POS, GET_TEXT_F(MSG_AXIS_X)) + .text ( Y_LBL_POS, GET_TEXT_F(MSG_AXIS_Y)) + .text ( Z_LBL_POS, GET_TEXT_F(MSG_AXIS_Z)); + + if (!ExtUI::isOngoingPrintJob()) { + cmd.tag(6) + .button(X_VAL_POS, F(""), OPT_FLAT) + .button(Y_VAL_POS, F(""), OPT_FLAT) + .button(Z_VAL_POS, F(""), OPT_FLAT) + .button(ALL_VAL_POS, F("")); + } } if (what & FOREGROUND) { @@ -81,59 +84,72 @@ void StatusScreen::draw_axis_position(draw_mode_t what) { char z_str[15]; if (isAxisPositionKnown(X)) - format_position(x_str, getAxisPosition_mm(X)); + format_position(x_str, getAxisPosition_mm(X), 0); else strcpy_P(x_str, PSTR("?")); if (isAxisPositionKnown(Y)) - format_position(y_str, getAxisPosition_mm(Y)); + format_position(y_str, getAxisPosition_mm(Y), 0); else strcpy_P(y_str, PSTR("?")); if (isAxisPositionKnown(Z)) - format_position(z_str, getAxisPosition_mm(Z), 2); + format_position(z_str, getAxisPosition_mm(Z), 1); else strcpy_P(z_str, PSTR("?")); - cmd.tag(6) - .font(Theme::font_medium) - .text(X_VAL_POS, x_str) - .text(Y_VAL_POS, y_str) - .text(Z_VAL_POS, z_str); + if (!ExtUI::isOngoingPrintJob()) { + cmd.tag(6) + .colors(normal_text) + .font(Theme::font_medium) + .text(X_VAL_POS, x_str) + .text(Y_VAL_POS, y_str) + .text(Z_VAL_POS, z_str) + .text(X_LBL_POS, GET_TEXT_F(MSG_AXIS_X)) + .text(Y_LBL_POS, GET_TEXT_F(MSG_AXIS_Y)) + .text(Z_LBL_POS, GET_TEXT_F(MSG_AXIS_Z)); + } + else { + cmd.tag(0) + .colors(temp_btn) + .font(Theme::font_medium) + .text(X_VAL_POS, x_str) + .text(Y_VAL_POS, y_str) + .text(Z_VAL_POS, z_str) + .text(X_LBL_POS, GET_TEXT_F(MSG_AXIS_X)) + .text(Y_LBL_POS, GET_TEXT_F(MSG_AXIS_Y)) + .text(Z_LBL_POS, GET_TEXT_F(MSG_AXIS_Z)); + } } } #undef GRID_COLS -#define GRID_COLS TERN(TOUCH_UI_PORTRAIT, 8, 12) +#define GRID_COLS 6 void StatusScreen::draw_temperature(draw_mode_t what) { using namespace Theme; - #define TEMP_RECT_1 BTN_POS(1,1), BTN_SIZE(4,4) - #define TEMP_RECT_2 BTN_POS(1,1), BTN_SIZE(8,2) - #define NOZ_1_POS BTN_POS(1,1), BTN_SIZE(4,2) - #define NOZ_2_POS BTN_POS(5,1), BTN_SIZE(4,2) - #define BED_POS BTN_POS(1,3), BTN_SIZE(4,2) - #define FAN_POS BTN_POS(5,3), BTN_SIZE(4,2) - - #define _ICON_POS(x,y,w,h) x, y, w/4, h - #define _TEXT_POS(x,y,w,h) x + w/4, y, w - w/4, h + #define BACKGROUND_POS BTN_POS(1,1), BTN_SIZE(6,4) + #define TEMP_RECT_E0 BTN_POS(1,1), BTN_SIZE(3,2) + #define TEMP_RECT_E1 BTN_POS(4,1), BTN_SIZE(3,2) + #define TEMP_RECT_BED BTN_POS(1,3), BTN_SIZE(3,2) + #define NOZ_1_POS BTN_POS(1,1), BTN_SIZE(3,2) + #define NOZ_2_POS BTN_POS(4,1), BTN_SIZE(3,2) + #define BED_POS BTN_POS(1,3), BTN_SIZE(3,2) + #define FAN_POS BTN_POS(4,3), BTN_SIZE(3,2) + #define ALL_TEMP_POS BTN_POS(1,1), BTN_SIZE(6,4) + + #define _ICON_POS(x,y,w,h) x, y, w/3, h + #define _TEXT_POS(x,y,w,h) x + w/3, y, w - w/3, h #define ICON_POS(pos) _ICON_POS(pos) #define TEXT_POS(pos) _TEXT_POS(pos) CommandProcessor cmd; if (what & BACKGROUND) { - cmd.font(Theme::font_small) - .tag(5) - .fgcolor(temp) .button(TEMP_RECT_1, F(""), OPT_FLAT) - .button(TEMP_RECT_2, F(""), OPT_FLAT) - .fgcolor(fan_speed).button(FAN_POS, F(""), OPT_FLAT) - .tag(0); // Draw Extruder Bitmap on Extruder Temperature Button - - cmd.tag(5) + cmd.font(Theme::font_small).tag(5) .cmd (BITMAP_SOURCE(Extruder_Icon_Info)) .cmd (BITMAP_LAYOUT(Extruder_Icon_Info)) .cmd (BITMAP_SIZE (Extruder_Icon_Info)) @@ -147,7 +163,6 @@ void StatusScreen::draw_temperature(draw_mode_t what) { .icon(ICON_POS(BED_POS), Bed_Heat_Icon_Info, icon_scale); // Draw Fan Percent Bitmap on Bed Heat Button - cmd.cmd (BITMAP_SOURCE(Fan_Icon_Info)) .cmd (BITMAP_LAYOUT(Fan_Icon_Info)) .cmd (BITMAP_SIZE (Fan_Icon_Info)) @@ -178,15 +193,43 @@ void StatusScreen::draw_temperature(draw_mode_t what) { else format_temp_and_temp(e1_str, getActualTemp_celsius(H1), getTargetTemp_celsius(H1)); #else - strcpy_P(e1_str, PSTR("-")); + strcpy_P(e1_str, PSTR("N/A")); #endif - cmd.tag(5) - .font(font_medium) - .text(TEXT_POS(NOZ_1_POS), e0_str) - .text(TEXT_POS(NOZ_2_POS), e1_str) - .text(TEXT_POS(BED_POS), bed_str) - .text(TEXT_POS(FAN_POS), fan_str); + if (getTargetTemp_celsius(H0) > 0) { + cmd.fgcolor(temp_button); + } + else { + cmd.colors(normal_btn); + } + cmd.tag(5).font(font_medium).button(TEXT_POS(NOZ_1_POS), e0_str); + + if (getTargetTemp_celsius(BED) > 0) { + cmd.fgcolor(temp_button); + } + else { + cmd.colors(normal_btn); + } + cmd.tag(5).font(font_medium).button(TEXT_POS(BED_POS), bed_str); + + if (getActualFan_percent(FAN0) > 0) { + cmd.fgcolor(temp_button); + } + else { + cmd.colors(normal_btn); + } + cmd.tag(5).font(font_medium).button(TEXT_POS(FAN_POS), fan_str); + + if DISABLED(HAS_MULTI_HOTEND) { + cmd.font(font_xsmall).fgcolor(gray_color_1); + } + else if (getTargetTemp_celsius(H1) > 0) { + cmd.font(font_medium).fgcolor(temp_button); + } + else { + cmd.font(font_medium).colors(normal_btn); + } + cmd.tag(5).button(TEXT_POS(NOZ_2_POS), e1_str); } } @@ -206,21 +249,28 @@ void StatusScreen::draw_progress(draw_mode_t what) { CommandProcessor cmd; - #undef GRID_COLS + #undef GRID_COLS + #if ENABLED(TOUCH_UI_PORTRAIT) - #define GRID_COLS 3 - #define PROGRESSZONE_POS BTN_POS(1,5), BTN_SIZE(3,2) - #define TIME_POS_X BTN_X(1) - #define TIME_POS_W BTN_W(1) - #define REMAINING_POS_X BTN_X(2) - #define REMAINING_POS_W BTN_W(1) - #define PROGRESS_POS_X BTN_X(3) - #define PROGRESS_POS_W BTN_W(1) - #define PROGRESSZONE_FIRSTLINE_Y BTN_Y(5) - #define PROGRESSBAR_POS BTN_POS(1,6), BTN_SIZE(3,1) + #define GRID_COLS 2 + #define PROGRESSZONE_POS BTN_POS(1,9), BTN_SIZE(2,2) + #define PROGRESSZONE_POS_1 BTN_POS(1,9), BTN_SIZE(1,2) + #define PROGRESSZONE_POS_2 BTN_POS(2,9), BTN_SIZE(1,2) + #define TIME_POS_X BTN_X(1) + #define TIME_POS_W BTN_W(1) + //#define REMAINING_POS_X BTN_X(2) + //#define REMAINING_POS_W BTN_W(1) + #define PROGRESS_POS_X BTN_X(2) + #define PROGRESS_POS_W BTN_W(1) + #define PROGRESSZONE_FIRSTLINE_Y BTN_Y(9) + #define PROGRESSBAR_POS BTN_POS(1,8), BTN_SIZE(2,2) + #define CLEAR_PROGRESS_POS BTN_POS(0,6.75), BTN_SIZE(4,5) #else #define GRID_COLS 6 #define PROGRESSZONE_POS BTN_POS(5,1), BTN_SIZE(2,4) + #define PROGRESSZONE_POS_1 BTN_POS(1,9), BTN_SIZE(1,2) + #define PROGRESSZONE_POS_2 BTN_POS(2,9), BTN_SIZE(1,2) + #define CLEAR_PROGRESS_POS BTN_POS(0,6.75), BTN_SIZE(4,5) #if ENABLED(SHOW_REMAINING_TIME) #define TIME_POS BTN_POS(5,1), BTN_SIZE(1,2) #define REMAINING_POS BTN_POS(6,1), BTN_SIZE(1,2) @@ -231,82 +281,123 @@ void StatusScreen::draw_progress(draw_mode_t what) { #define PROGRESSBAR_POS BTN_POS(5,2), BTN_SIZE(2,2) #endif - if (what & BACKGROUND) { - cmd.tag(0).font(font_medium) - .fgcolor(progress).button(PROGRESSZONE_POS, F(""), OPT_FLAT); - } + if (ExtUI::isOngoingPrintJob()|| ExtUI::isPrintingPaused()) { - if (what & FOREGROUND) { - const uint32_t elapsed = getProgress_seconds_elapsed(); - char elapsed_str[10]; - _format_time(elapsed_str, elapsed); + if (what & FOREGROUND) { + cmd.colors(temp_btn) + .tag(0).button(CLEAR_PROGRESS_POS, F(""), OPT_FLAT); - #if ENABLED(SHOW_REMAINING_TIME) - const uint32_t remaining = getProgress_seconds_remaining(); - char remaining_str[10]; - _format_time(remaining_str, remaining); - #endif + const uint32_t elapsed = getProgress_seconds_elapsed(); + char elapsed_str[10]; + _format_time(elapsed_str, elapsed); + + #if ENABLED(SHOW_REMAINING_TIME) + const uint32_t remaining = getProgress_seconds_remaining(); + char remaining_str[10]; + _format_time(remaining_str, remaining); + #endif - const uint16_t current_progress = TERN(HAS_PRINT_PROGRESS_PERMYRIAD, getProgress_permyriad(), getProgress_percent() * 100); - constexpr uint16_t progress_range = 10000U; + const uint16_t current_progress = TERN(HAS_PRINT_PROGRESS_PERMYRIAD, getProgress_permyriad(), getProgress_percent() * 100); + constexpr uint16_t progress_range = 10000U; - const bool show_progress_bar = current_progress > 0 && current_progress < progress_range + 1; - if (show_progress_bar) { - cmd.tag(0).font(font_medium) - .bgcolor(progress) - .progress(PROGRESSBAR_POS, current_progress, progress_range, OPT_FLAT); - } + const bool show_progress_bar = current_progress < progress_range + 1; + if (show_progress_bar) { + cmd.tag(0).font(font_medium) + .bgcolor(progress) + .progress(PROGRESSBAR_POS, current_progress, progress_range, OPT_FLAT); + } - char progress_str[10]; - sprintf_P(progress_str, - #if ENABLED(PRINT_PROGRESS_SHOW_DECIMALS) - PSTR("%3d.%02d%%"), uint8_t(current_progress / 100), current_progress % 100 + char progress_str[10]; + sprintf_P(progress_str, + #if ENABLED(PRINT_PROGRESS_SHOW_DECIMALS) + PSTR("%3d.%02d%%"), uint8_t(current_progress / 100), current_progress % 100 + #else + PSTR("%3d%%"), uint8_t(current_progress / 100) + #endif + ); + + #if ENABLED(TOUCH_UI_PORTRAIT) + const uint16_t texts_pos_h = show_progress_bar ? (BTN_H(2)) : (BTN_H(2)); + cmd.font(font_medium) + .tag(0).text(TIME_POS_X, PROGRESSZONE_FIRSTLINE_Y, TIME_POS_W, texts_pos_h, elapsed_str) + #if ENABLED(SHOW_REMAINING_TIME) + .text(REMAINING_POS_X, PROGRESSZONE_FIRSTLINE_Y, REMAINING_POS_W, texts_pos_h, remaining_str) + #endif + .text(PROGRESS_POS_X, PROGRESSZONE_FIRSTLINE_Y, PROGRESS_POS_W, texts_pos_h, progress_str); #else - PSTR("%3d%%"), uint8_t(current_progress / 100) + cmd.font(font_medium) + .tag(0).text(TIME_POS, elapsed_str) + #if ENABLED(SHOW_REMAINING_TIME) + .text(REMAINING_POS, remaining_str) + #endif + .text(PROGRESS_POS, progress_str); #endif - ); - - #if ENABLED(TOUCH_UI_PORTRAIT) - const uint16_t texts_pos_h = show_progress_bar ? (BTN_H(1)) : (BTN_H(2)); - cmd.font(font_medium) - .tag(7).text(TIME_POS_X, PROGRESSZONE_FIRSTLINE_Y, TIME_POS_W, texts_pos_h, elapsed_str) - #if ENABLED(SHOW_REMAINING_TIME) - .text(REMAINING_POS_X, PROGRESSZONE_FIRSTLINE_Y, REMAINING_POS_W, texts_pos_h, remaining_str) - #endif - .text(PROGRESS_POS_X, PROGRESSZONE_FIRSTLINE_Y, PROGRESS_POS_W, texts_pos_h, progress_str); - #else - cmd.font(font_medium) - .tag(7).text(TIME_POS, elapsed_str) - #if ENABLED(SHOW_REMAINING_TIME) - .text(REMAINING_POS, remaining_str) - #endif - .text(PROGRESS_POS, progress_str); - #endif + } + } + else { + cmd.colors(normal_btn) + .font(font_medium) + .tag(9).button(PROGRESSZONE_POS_1, GET_TEXT_F(MSG_HOME_ALL)) + .tag(16).button(PROGRESSZONE_POS_2, GET_TEXT_F(MSG_PRESENT_BED)); } } void StatusScreen::draw_interaction_buttons(draw_mode_t what) { #undef GRID_COLS - #define GRID_COLS 4 + #define GRID_COLS 2 if (what & FOREGROUND) { using namespace ExtUI; #if ENABLED(TOUCH_UI_PORTRAIT) - #define MEDIA_BTN_POS BTN_POS(1,15), BTN_SIZE(2,2) - #define MENU_BTN_POS BTN_POS(3,15), BTN_SIZE(2,2) + #define TOOL_HEAD_POS BTN_POS(1,11), BTN_SIZE(1,2) + #define CHANGE_FILAMENT_POS BTN_POS(2,11), BTN_SIZE(1,2) + #define PREHEAT_POS BTN_POS(1,13), BTN_SIZE(1,2) + #define COOLDOWN_OFFSET_POS BTN_POS(2,13), BTN_SIZE(1,2) + #define MEDIA_BTN_POS BTN_POS(1,15), BTN_SIZE(1,2) + #define MENU_BTN_POS BTN_POS(2,15), BTN_SIZE(1,2) #else - #define MEDIA_BTN_POS BTN_POS(1,13), BTN_SIZE(2,4) - #define MENU_BTN_POS BTN_POS(3,13), BTN_SIZE(2,4) + #define TOOL_HEAD_POS BTN_POS(1,11), BTN_SIZE(1,2) + #define CHANGE_FILAMENT_POS BTN_POS(2,11), BTN_SIZE(1,2) + #define PREHEAT_POS BTN_POS(1,13), BTN_SIZE(1,2) + #define COOLDOWN_OFFSET_POS BTN_POS(2,13), BTN_SIZE(1,2) + #define MEDIA_BTN_POS BTN_POS(1,13), BTN_SIZE(1,4) + #define MENU_BTN_POS BTN_POS(2,13), BTN_SIZE(1,4) #endif const bool has_media = isMediaMounted() && !isPrintingFromMedia(); CommandProcessor cmd; + if (ExtUI::isOngoingPrintJob() || ExtUI::isPrintingPaused()) { + cmd.colors(normal_btn) + .font(font_medium) + .tag(!ExtUI::isPrintingPaused() ? 17 : 18) + .button(TOOL_HEAD_POS, !ExtUI::isPrintingPaused() ? GET_TEXT_F(MSG_BUTTON_PAUSE) : GET_TEXT_F(MSG_BUTTON_RESUME)) + .tag(!ExtUI::isPrintingPaused() ? 7 : 14) + .button(CHANGE_FILAMENT_POS, !ExtUI::isPrintingPaused() ? GET_TEXT_F(MSG_SPEED) : F("")); + #if ENABLED(FILAMENT_RUNOUT_SENSOR) + cmd.tag(8).button(PREHEAT_POS, GET_TEXT_F(MSG_SENSOR)); + #endif + if (ExtUI::isPrintingPaused()) + draw_text_box(cmd, CHANGE_FILAMENT_POS, F("Change\nFilament"), OPT_CENTER, font_medium); + } + else { + cmd.colors(normal_btn) + .font(font_medium) + .tag(14).button(CHANGE_FILAMENT_POS, F("")); + draw_text_box(cmd, CHANGE_FILAMENT_POS, F("Change\nFilament"), OPT_CENTER, font_medium); + cmd.colors(normal_btn) + .font(font_medium) + .tag(20).button(PREHEAT_POS, GET_TEXT_F(MSG_PREHEAT)); + cmd.enabled(ENABLED(CUSTOM_MENU_MAIN)).tag(10).button(TOOL_HEAD_POS, F("")); + draw_text_box(cmd, TOOL_HEAD_POS, F("" CUSTOM_MENU_MAIN_TITLE "\n "), OPT_CENTER, font_medium); + } + cmd.colors(normal_btn) .font(Theme::font_medium) + .tag(15).button(COOLDOWN_OFFSET_POS, isOngoingPrintJob() ? GET_TEXT_F(MSG_ZOFFSET) : GET_TEXT_F(MSG_COOLDOWN)) .colors(has_media ? action_btn : normal_btn) - .enabled(has_media && !isPrinting()) - .tag(3).button(MEDIA_BTN_POS, isPrinting() ? GET_TEXT_F(MSG_PRINTING) : GET_TEXT_F(MSG_BUTTON_MEDIA)) + .enabled(has_media || isOngoingPrintJob()) + .tag(isOngoingPrintJob() ? 19 : 3).button(MEDIA_BTN_POS, isOngoingPrintJob() ? GET_TEXT_F(MSG_BUTTON_CANCEL) : GET_TEXT_F(MSG_BUTTON_PRINT)) .colors(!has_media ? action_btn : normal_btn) .tag(4).button(MENU_BTN_POS, GET_TEXT_F(MSG_BUTTON_MENU)); } @@ -317,14 +408,14 @@ void StatusScreen::draw_status_message(draw_mode_t what, const char *message) { #define GRID_COLS 1 #if ENABLED(TOUCH_UI_PORTRAIT) - #define STATUS_POS BTN_POS(1,7), BTN_SIZE(1,2) + #define STATUS_POS BTN_POS(1,5), BTN_SIZE(1,2) #else #define STATUS_POS BTN_POS(1,5), BTN_SIZE(1,4) #endif if (what & BACKGROUND) { CommandProcessor cmd; - cmd.fgcolor(Theme::status_msg) + cmd.colors(temp_btn) .tag(0) .button(STATUS_POS, F(""), OPT_FLAT); @@ -380,6 +471,7 @@ void StatusScreen::loadBitmaps() { CLCD::mem_write_xbm(base + Extruder_Icon_Info.RAMG_offset, Extruder_Icon, sizeof(Extruder_Icon)); CLCD::mem_write_xbm(base + Bed_Heat_Icon_Info.RAMG_offset, Bed_Heat_Icon, sizeof(Bed_Heat_Icon)); CLCD::mem_write_xbm(base + Fan_Icon_Info.RAMG_offset, Fan_Icon, sizeof(Fan_Icon)); + CLCD::mem_write_pgm(base + Home_icon_Info.RAMG_offset, Home_icon, sizeof(Home_icon)); // Load fonts for internationalization #if ENABLED(TOUCH_UI_USE_UTF8) @@ -444,6 +536,48 @@ bool StatusScreen::onTouchEnd(uint8_t tag) { } break; case 7: GOTO_SCREEN(FeedratePercentScreen); break; + #if ENABLED(FILAMENT_RUNOUT_SENSOR) + case 8: GOTO_SCREEN(FilamentRunoutScreen); break; + #endif + case 9: injectCommands(F("G28")); break; + #if ENABLED(CUSTOM_MENU_MAIN) + case 10: GOTO_SCREEN(CustomUserMenus); break; + #endif + if (!ExtUI::isOngoingPrintJob()) { + case 11: injectCommands(F("G28X")); break; + case 12: injectCommands(F("G28Y")); break; + case 13: injectCommands(F("G28Z")); break; + } + case 14: GOTO_SCREEN(ChangeFilamentScreen); break; + #if ALL(HAS_LEVELING, HAS_BED_PROBE) + case 15: + if (ExtUI::isOngoingPrintJob()|| ExtUI::isPrintingPaused()) { + #if EXTRUDERS > 1 + GOTO_SCREEN(NudgeNozzleScreen); break; + #else + GOTO_SCREEN(ZOffsetScreen); break; + #endif + } + else { + coolDown(); + TERN_(HAS_HEATED_CHAMBER, setTargetTemp_celsius(0, CHAMBER)); + GOTO_SCREEN(StatusScreen); + break; + } + #endif + #ifdef PRESENT_BED_GCODE + case 16: injectCommands(F(PRESENT_BED_GCODE)); break; + #endif + case 17: injectCommands(F("M117 Print Paused")); pausePrint(); break; + case 18: injectCommands(F("M117 Print Resumed")); resumePrint(); break; + case 19: + GOTO_SCREEN(ConfirmAbortPrintDialogBox); + current_screen.forget(); + PUSH_SCREEN(StatusScreen); + break; + #ifdef PREHEAT_1_COMMAND + case 20: injectCommands_P(PSTR(PREHEAT_1_COMMAND)); break; + #endif default: return true; } diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/string_format.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/string_format.cpp index a952028277d2..bb6d958c80de 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/string_format.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/string_format.cpp @@ -91,7 +91,7 @@ void format_temp_and_material(char *str, const_celsius_float_t t1, const char *m void format_position(char *str, float p, uint8_t decimals) { dtostrf(p, 4 + decimals, decimals, str); strcat_P(str, PSTR(" ")); - strcat_P(str, GET_TEXT(MSG_UNITS_MM)); + //strcat_P(str, GET_TEXT(MSG_UNITS_MM)); } /** diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/temperature_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/temperature_screen.cpp index 04eb2acec6bc..38273a8623a4 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/temperature_screen.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/temperature_screen.cpp @@ -5,6 +5,7 @@ /**************************************************************************** * Written By Mark Pelletier 2017 - Aleph Objects, Inc. * * Written By Marcio Teixeira 2018 - Aleph Objects, Inc. * + * Written By Brian Kahl 2023 - FAME3D. * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -30,15 +31,16 @@ using namespace Theme; using namespace ExtUI; void TemperatureScreen::onRedraw(draw_mode_t what) { + CommandProcessor cmd; widgets_t w(what); #if TOUCH_UI_LCD_TEMP_SCALING == 10 w.precision(1, DEFAULT_MIDRANGE) #else w.precision(0, getTargetTemp_celsius(E0) == 0 ? DEFAULT_HIGHEST : DEFAULT_MIDRANGE) #endif - .color(temp).units(GET_TEXT_F(MSG_UNITS_C)); + .color(temp_button).units(GET_TEXT_F(MSG_UNITS_C)); w.heading(GET_TEXT_F(MSG_TEMPERATURE)); - w.button(30, GET_TEXT_F(MSG_COOLDOWN)); + //w.button(30, GET_TEXT_F(MSG_COOLDOWN)); #ifndef NO_TOOLHEAD_HEATER_GCODE #if ENABLED(TOUCH_UI_COCOA_PRESS) w.adjuster( 2, GET_TEXT_F(MSG_NOZZLE), getTargetTemp_celsius(E0)); @@ -67,10 +69,39 @@ void TemperatureScreen::onRedraw(draw_mode_t what) { w.adjuster( 22, GET_TEXT_F(MSG_CHAMBER), getTargetTemp_celsius(CHAMBER)); #endif #if HAS_FAN0 - w.color(fan_speed).units(GET_TEXT_F(MSG_UNITS_PERCENT)); + w.units(GET_TEXT_F(MSG_UNITS_PERCENT)); w.adjuster( 10, GET_TEXT_F(MSG_FAN_SPEED), getTargetFan_percent(FAN0)); #endif w.increments(); + + #define PREHEAT_1_POS BTN_POS(1,(5+EXTRUDERS)), BTN_SIZE(1,1) + #define PREHEAT_2_POS BTN_POS(2,(5+EXTRUDERS)), BTN_SIZE(1,1) + #define PREHEAT_3_POS BTN_POS(1,(6+EXTRUDERS)), BTN_SIZE(1,1) + #define COOLDOWN_POS BTN_POS(2,(6+EXTRUDERS)), BTN_SIZE(1,1) + #define TOOLHEAD_SWAP_POS BTN_POS(1,(7+EXTRUDERS)), BTN_SIZE(2,1) + + if (what & FOREGROUND) { + #define GRID_COLS 2 + #define GRID_ROWS (8+EXTRUDERS) + if (!ExtUI::isOngoingPrintJob()) { + cmd.font(Theme::font_medium) + .colors(normal_btn); + #ifdef PREHEAT_1_COMMAND + cmd.tag(31).button(PREHEAT_1_POS, GET_TEXT_F(MSG_PREHEAT_1)); + #endif + #ifdef PREHEAT_2_COMMAND + cmd.tag(32).button(PREHEAT_2_POS, GET_TEXT_F(MSG_PREHEAT_2)); + #endif + #ifdef PREHEAT_3_COMMAND + cmd.tag(33).button(PREHEAT_3_POS, GET_TEXT_F(MSG_PREHEAT_3)); + #endif + cmd.colors(cold_pull_btn) + .tag(30).button(COOLDOWN_POS, GET_TEXT_F(MSG_COOLDOWN)); + #ifdef PARKING_COMMAND_GCODE + cmd.colors(normal_btn).tag(35).button(TOOLHEAD_SWAP_POS, GET_TEXT_F(MSG_TOOL_HEAD_SWAP)); + #endif + } + } } bool TemperatureScreen::onTouchHeld(uint8_t tag) { @@ -103,7 +134,20 @@ bool TemperatureScreen::onTouchHeld(uint8_t tag) { case 30: coolDown(); TERN_(HAS_HEATED_CHAMBER, setTargetTemp_celsius(0, CHAMBER)); + GOTO_SCREEN(StatusScreen); break; + #ifdef PREHEAT_1_COMMAND + case 31: injectCommands_P(PSTR(PREHEAT_1_COMMAND)); GOTO_SCREEN(StatusScreen); break; + #endif + #ifdef PREHEAT_2_COMMAND + case 32: injectCommands_P(PSTR(PREHEAT_2_COMMAND)); GOTO_SCREEN(StatusScreen); break; + #endif + #ifdef PREHEAT_3COMMAND + case 33: injectCommands_P(PSTR(PREHEAT_3_COMMAND)); GOTO_SCREEN(StatusScreen); break; + #endif + #ifdef PARKING_COMMAND_GCODE + case 35: injectCommands(F(PARKING_COMMAND_GCODE)); break; + #endif default: return false; } diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/tune_menu.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/tune_menu.cpp index 259f6d5b89ef..bbe04c75c8d2 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/tune_menu.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/tune_menu.cpp @@ -5,6 +5,7 @@ /**************************************************************************** * Written By Mark Pelletier 2017 - Aleph Objects, Inc. * * Written By Marcio Teixeira 2018 - Aleph Objects, Inc. * + * Written By Brian Kahl 2023 - FAME3D. * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -31,7 +32,7 @@ using namespace FTDI; using namespace Theme; #define GRID_COLS 2 -#define GRID_ROWS TERN(TOUCH_UI_PORTRAIT, 9, 5) +#define GRID_ROWS TERN(TOUCH_UI_PORTRAIT, 7, 5) void TuneMenu::onRedraw(draw_mode_t what) { if (what & BACKGROUND) { @@ -41,55 +42,37 @@ void TuneMenu::onRedraw(draw_mode_t what) { } #if ENABLED(TOUCH_UI_PORTRAIT) - #define TEMPERATURE_POS BTN_POS(1,1), BTN_SIZE(2,1) - #define FIL_CHANGE_POS BTN_POS(1,2), BTN_SIZE(2,1) - #define FILAMENT_POS BTN_POS(1,3), BTN_SIZE(2,1) - #define NUDGE_NOZ_POS BTN_POS(1,4), BTN_SIZE(2,1) - #define SPEED_POS BTN_POS(1,5), BTN_SIZE(2,1) - #define PAUSE_POS BTN_POS(1,6), BTN_SIZE(2,1) - #define STOP_POS BTN_POS(1,7), BTN_SIZE(2,1) - #define CASE_LIGHT_POS BTN_POS(1,8), BTN_SIZE(2,1) - #define ADVANCED_SETTINGS_POS BTN_POS(1,9), BTN_SIZE(1,1) - #define BACK_POS BTN_POS(2,9), BTN_SIZE(1,1) + #define STOP_POS BTN_POS(1,1), BTN_SIZE(2,1) + #define PAUSE_POS BTN_POS(1,2), BTN_SIZE(2,1) + #define FLOW_POS BTN_POS(1,3), BTN_SIZE(2,1) + #define TEMPERATURE_POS BTN_POS(1,4), BTN_SIZE(2,1) + #define ABOUT_PRINTER_POS BTN_POS(1,5), BTN_SIZE(2,1) + #define ADVANCED_SETTINGS_POS BTN_POS(1,6), BTN_SIZE(2,1) + #define BACK_POS BTN_POS(1,7), BTN_SIZE(2,1) #else #define TEMPERATURE_POS BTN_POS(1,1), BTN_SIZE(1,1) - #define NUDGE_NOZ_POS BTN_POS(2,1), BTN_SIZE(1,1) - #define FIL_CHANGE_POS BTN_POS(1,2), BTN_SIZE(1,1) - #define SPEED_POS BTN_POS(2,2), BTN_SIZE(1,1) #define PAUSE_POS BTN_POS(1,3), BTN_SIZE(1,1) #define STOP_POS BTN_POS(2,3), BTN_SIZE(1,1) - #define FILAMENT_POS BTN_POS(1,4), BTN_SIZE(1,1) - #define CASE_LIGHT_POS BTN_POS(2,4), BTN_SIZE(1,1) + #define FLOW_POS BTN_POS(2,4), BTN_SIZE(1,1) #define ADVANCED_SETTINGS_POS BTN_POS(1,5), BTN_SIZE(1,1) + #define ABOUT_PRINTER_POS BTN_POS(1,5), BTN_SIZE(2,1) #define BACK_POS BTN_POS(2,5), BTN_SIZE(1,1) #endif if (what & FOREGROUND) { - const bool sdOrHostPrinting = ExtUI::isPrinting(); const bool sdOrHostPaused = ExtUI::isPrintingPaused(); CommandProcessor cmd; - cmd.colors(normal_btn) + cmd.colors(cancel_btn) .font(font_medium) - .tag(2).button(TEMPERATURE_POS, GET_TEXT_F(MSG_TEMPERATURE)) - .enabled(!sdOrHostPrinting || sdOrHostPaused) - .tag(3).button(FIL_CHANGE_POS, GET_TEXT_F(MSG_FILAMENTCHANGE)) - .enabled(ANY(LIN_ADVANCE, FILAMENT_RUNOUT_SENSOR)) - .tag(9).button(FILAMENT_POS, GET_TEXT_F(MSG_FILAMENT)) - #if ENABLED(BABYSTEPPING) && HAS_MULTI_HOTEND - .tag(4).button(NUDGE_NOZ_POS, GET_TEXT_F(MSG_NUDGE_NOZZLE)) - #elif ALL(HAS_LEVELING, HAS_BED_PROBE) - .tag(4).button(NUDGE_NOZ_POS, GET_TEXT_F(MSG_ZPROBE_ZOFFSET)) - #endif - .tag(5).button(SPEED_POS, GET_TEXT_F(MSG_PRINT_SPEED)) - .enabled(sdOrHostPrinting) - .tag(sdOrHostPaused ? 7 : 6) + .tag(2).button(STOP_POS, GET_TEXT_F(MSG_CANCEL_PRINT)) + .colors(normal_btn) + .tag(sdOrHostPaused ? 4 : 3) .button(PAUSE_POS, sdOrHostPaused ? GET_TEXT_F(MSG_RESUME_PRINT) : GET_TEXT_F(MSG_PAUSE_PRINT)) - .enabled(sdOrHostPrinting) - .tag(8).button(STOP_POS, GET_TEXT_F(MSG_STOP_PRINT)) - .enabled(ENABLED(CASE_LIGHT_ENABLE)) - .tag(10).button(CASE_LIGHT_POS, GET_TEXT_F(MSG_CASE_LIGHT)) - .tag(11).button(ADVANCED_SETTINGS_POS, GET_TEXT_F(MSG_ADVANCED_SETTINGS)) + .tag(5).button(FLOW_POS, GET_TEXT_F(MSG_FLOW)) + .tag(6).button(TEMPERATURE_POS, GET_TEXT_F(MSG_TEMPERATURE)) + .tag(7).button(ABOUT_PRINTER_POS, GET_TEXT_F(MSG_INFO_MENU)) + .tag(8).button(ADVANCED_SETTINGS_POS, GET_TEXT_F(MSG_ADVANCED_SETTINGS)) .tag(1).colors(action_btn) .button(BACK_POS, GET_TEXT_F(MSG_BUTTON_DONE)); } @@ -99,31 +82,18 @@ bool TuneMenu::onTouchEnd(uint8_t tag) { using namespace Theme; using namespace ExtUI; switch (tag) { - case 1: SaveSettingsDialogBox::promptToSaveSettings(); break; - case 2: GOTO_SCREEN(TemperatureScreen); break; - case 3: GOTO_SCREEN(ChangeFilamentScreen); break; - case 4: - #if ENABLED(BABYSTEPPING) && HAS_MULTI_HOTEND - GOTO_SCREEN(NudgeNozzleScreen); - #elif ALL(HAS_LEVELING, HAS_BED_PROBE) - GOTO_SCREEN(ZOffsetScreen); - #endif - break; - case 5: GOTO_SCREEN(FeedratePercentScreen); break; - case 6: pausePrint(); break; - case 7: resumePrint(); break; - case 8: + case 1: SaveSettingsDialogBox::promptToSaveSettings(); break; + case 2: GOTO_SCREEN(ConfirmAbortPrintDialogBox); current_screen.forget(); PUSH_SCREEN(StatusScreen); break; - #if ANY(LIN_ADVANCE, FILAMENT_RUNOUT_SENSOR) - case 9: GOTO_SCREEN(FilamentMenu); break; - #endif - #if ENABLED(CASE_LIGHT_ENABLE) - case 10: GOTO_SCREEN(CaseLightScreen); break; - #endif - case 11: GOTO_SCREEN(AdvancedSettingsMenu); break; + case 3: injectCommands(F("M117 Print Paused")); pausePrint(); break; + case 4: injectCommands(F("M117 Print Resumed")); resumePrint(); break; + case 5: GOTO_SCREEN(FlowPercentScreen); break; + case 6: GOTO_SCREEN(TemperatureScreen); break; + case 7: GOTO_SCREEN(AboutScreen); break; + case 8: GOTO_SCREEN(AdvancedSettingsMenu); break; default: return false; } @@ -131,24 +101,61 @@ bool TuneMenu::onTouchEnd(uint8_t tag) { } void TuneMenu::pausePrint() { + // sound.play(twinkle, PLAY_ASYNCHRONOUS); + + // if (ExtUI::isPrintingFromMedia()) + // ExtUI::pausePrint(); + // #ifdef ACTION_ON_PAUSE + // else hostui.pause(); + // #endif + + // This sound.play(twinkle, PLAY_ASYNCHRONOUS); + if (ExtUI::isPrintingFromMedia()) + { + SERIAL_ECHOLNPGM("Pause: isPrintingFromMedia"); ExtUI::pausePrint(); + } #ifdef ACTION_ON_PAUSE - else hostui.pause(); + else + { + SERIAL_ECHOLNPGM("Pause: hostui.pause"); + hostui.pause(); + } #endif GOTO_SCREEN(StatusScreen); } void TuneMenu::resumePrint() { + // This sound.play(twinkle, PLAY_ASYNCHRONOUS); - if (ExtUI::awaitingUserConfirm()) + + + // Something is wrong with this + if (ExtUI::awaitingUserConfirm() && ExtUI::isPrintingPaused()) + { + SERIAL_ECHOLNPGM("Resume: Awaiting User Confirm"); + #if ENABLED(ADVANCED_PAUSE_FEATURE) + ExtUI::setPauseMenuResponse(PAUSE_RESPONSE_RESUME_PRINT); + #endif + ExtUI::setUserConfirmed(); + } + if (ExtUI::isPrintingFromMedia()) + { ExtUI::setUserConfirmed(); - else if (ExtUI::isPrintingFromMedia()) + SERIAL_ECHOLNPGM("Resume: isPrintingFromMedia"); ExtUI::resumePrint(); + } #ifdef ACTION_ON_RESUME - else hostui.resume(); + else + { + SERIAL_ECHOLNPGM("Resume: hostui.resume"); + hostui.resume(); + } #endif + + // This works GOTO_SCREEN(StatusScreen); } diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/z_offset_screen.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/z_offset_screen.cpp index 1ba048b9ccfe..a4f0218cfe00 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/z_offset_screen.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/generic/z_offset_screen.cpp @@ -5,6 +5,7 @@ /**************************************************************************** * Written By Mark Pelletier 2017 - Aleph Objects, Inc. * * Written By Marcio Teixeira 2018 - Aleph Objects, Inc. * + * Written By Brian Kahl 2023 - FAME3D. * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -31,6 +32,8 @@ using namespace ExtUI; using namespace Theme; #define SHEET_THICKNESS 0.1 +#define GRID_COLS 13 +#define GRID_ROWS (9+EXTRUDERS) constexpr static ZOffsetScreenData &mydata = screen_data.ZOffsetScreen; @@ -48,12 +51,19 @@ void ZOffsetScreen::onExit() { void ZOffsetScreen::onRedraw(draw_mode_t what) { widgets_t w(what); + CommandProcessor cmd; + w.precision(2, BaseNumericAdjustmentScreen::DEFAULT_MIDRANGE).units(GET_TEXT_F(MSG_UNITS_MM)); - w.heading( GET_TEXT_F(MSG_ZPROBE_ZOFFSET)); - w.color(z_axis).adjuster(4, GET_TEXT_F(MSG_ZPROBE_ZOFFSET), getZOffset_mm()); + w.heading( GET_TEXT_F(MSG_ZOFFSET)); + w.color(z_axis).adjuster(4, GET_TEXT_F(MSG_ZOFFSET), getZOffset_mm()); w.increments(); - w.button(2, GET_TEXT_F(MSG_PROBE_WIZARD), !isPrinting() && !wizardRunning()); + //w.button(2, GET_TEXT_F(MSG_PROBE_WIZARD), !isPrinting() && !wizardRunning()); + if (what & FOREGROUND) { + cmd.colors(normal_btn) + .font(font_medium) + .tag(6).colors(action_btn).button(BTN_POS(1,GRID_ROWS), BTN_SIZE(GRID_COLS,1), GET_TEXT_F(MSG_BUTTON_DONE)); + } } void ZOffsetScreen::move(float mm, int16_t steps) { @@ -73,11 +83,11 @@ void ZOffsetScreen::runWizard() { setZOffset_mm(offset[Z_AXIS]); // Move above probe point char cmd[64], str[10]; - strcpy_P(cmd, PSTR("G28 Z\nG0 F1000 X")); - dtostrf(TERN(Z_SAFE_HOMING,Z_SAFE_HOMING_X_POINT,X_CENTER), 3, 1, str); + strcpy_P(cmd, PSTR("G28O\nG0 F1000 X")); + dtostrf(TERN(Z_SAFE_HOMING, Z_SAFE_HOMING_X_POINT, X_CENTER), 3, 1, str); strcat(cmd, str); strcat_P(cmd, PSTR("Y")); - dtostrf(TERN(Z_SAFE_HOMING,Z_SAFE_HOMING_Y_POINT,Y_CENTER), 3, 1, str); + dtostrf(TERN(Z_SAFE_HOMING, Z_SAFE_HOMING_Y_POINT, Y_CENTER), 3, 1, str); strcat(cmd, str); strcat_P(cmd, PSTR("Z")); dtostrf(SHEET_THICKNESS, 3, 1, str); @@ -101,6 +111,7 @@ bool ZOffsetScreen::onTouchHeld(uint8_t tag) { case 2: runWizard(); break; case 4: UI_DECREMENT(ZOffset_mm); move(-increment, -steps); break; case 5: UI_INCREMENT(ZOffset_mm); move( increment, steps); break; + case 6: GOTO_SCREEN(SaveSettingsDialogBox); break; default: return false; } diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/language/language_en.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/language/language_en.h index 6deb5b47587e..e7bbfc5a6b8b 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/language/language_en.h +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/language/language_en.h @@ -39,6 +39,7 @@ namespace Language_en { LSTR MSG_BUTTON_OKAY = u8"Okay"; LSTR MSG_BUTTON_MENU = u8"Menu"; LSTR MSG_BUTTON_MEDIA = u8"Media"; + LSTR MSG_BUTTON_USB = u8"USB"; LSTR MSG_BUTTON_OPEN = u8"Open"; LSTR MSG_CLEAN_NOZZLE = u8"Clean Nozzle"; LSTR MSG_VMAX_X = u8"Max X Speed"; @@ -65,7 +66,9 @@ namespace Language_en { LSTR MSG_HOME = u8"Home"; LSTR MSG_PRINT_STARTING = u8"Print starting"; LSTR MSG_PRINT_FINISHED = u8"Print finished"; + LSTR MSG_PRINT_COMPLETE = u8"Print Complete!"; LSTR MSG_PRINT_ERROR = u8"Print error"; + LSTR MSG_PRINT_AREA_CLEAR = u8"Please ensure print area is\nclear and ready to print."; LSTR MSG_ABOUT_TOUCH_PANEL_1 = u8"Color Touch Panel"; LSTR MSG_ABOUT_TOUCH_PANEL_2 = WEBSITE_URL; LSTR MSG_LICENSE = u8"This program is free software: you can redistribute it and/or modify it under the terms of " @@ -91,6 +94,7 @@ namespace Language_en { LSTR MSG_IDLE = u8"idle"; LSTR MSG_SET_MAXIMUM = u8"Set Maximum"; LSTR MSG_PRINT_SPEED = u8"Print Speed"; + LSTR MSG_SPEED = u8"Speed"; LSTR MSG_LINEAR_ADVANCE_K = u8"K"; LSTR MSG_LINEAR_ADVANCE_K1 = u8"K E1"; LSTR MSG_LINEAR_ADVANCE_K2 = u8"K E2"; @@ -106,6 +110,7 @@ namespace Language_en { LSTR MSG_CALIBRATION_WARNING = u8"For best results, unload the filament and clean the hotend prior to starting calibration. Continue?"; LSTR MSG_START_PRINT_CONFIRMATION = u8"Start printing %s?"; LSTR MSG_ABORT_WARNING = u8"Are you sure you want to cancel the print?"; + LSTR MSG_START_NEXT_PRINT = u8"Start Next Print"; LSTR MSG_EXTRUDER_SELECTION = u8"Extruder Selection"; LSTR MSG_CURRENT_TEMPERATURE = u8"Current Temp"; LSTR MSG_REMOVAL_TEMPERATURE = u8"Removal Temp"; @@ -113,6 +118,8 @@ namespace Language_en { LSTR MSG_HOT = u8"Hot!"; LSTR MSG_UNLOAD_FILAMENT = u8"Unload/Retract"; LSTR MSG_LOAD_FILAMENT = u8"Load/Extrude"; + LSTR MSG_LOAD = u8"Load"; + LSTR MSG_UNLOAD = u8"Unload"; LSTR MSG_MOMENTARY = u8"Momentary"; LSTR MSG_CONTINUOUS = u8"Continuous"; LSTR MSG_PRINT_MENU = u8"Print Menu"; diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/screen_data.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/screen_data.h index 7b0a0d25e9aa..14c18a7f411e 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/screen_data.h +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/screen_data.h @@ -62,6 +62,7 @@ union screen_data_t { DECL_DATA_IF_INCLUDED(FTDI_Z_OFFSET_SCREEN) DECL_DATA_IF_INCLUDED(FTDI_BASE_NUMERIC_ADJ_SCREEN) DECL_DATA_IF_INCLUDED(FTDI_ALERT_DIALOG_BOX) + DECL_DATA_IF_INCLUDED(FTDI_FILAMENT_PROMPT_DIALOG_BOX) DECL_DATA_IF_INCLUDED(COCOA_STATUS_SCREEN) DECL_DATA_IF_INCLUDED(COCOA_PREHEAT_SCREEN) DECL_DATA_IF_INCLUDED(COCOA_LOAD_CHOCOLATE_SCREEN) diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/screens.cpp b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/screens.cpp index b17ac9c7cbaa..044b5ac76986 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/screens.cpp +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/screens.cpp @@ -57,12 +57,14 @@ SCREEN_TABLE { DECL_SCREEN_IF_INCLUDED(FTDI_TUNE_MENU) DECL_SCREEN_IF_INCLUDED(FTDI_ADVANCED_SETTINGS_MENU) DECL_SCREEN_IF_INCLUDED(FTDI_ALERT_DIALOG_BOX) + DECL_SCREEN_IF_INCLUDED(FTDI_FILAMENT_PROMPT_DIALOG_BOX) DECL_SCREEN_IF_INCLUDED(FTDI_CONFIRM_USER_REQUEST_ALERT_BOX) DECL_SCREEN_IF_INCLUDED(FTDI_RESTORE_FAILSAFE_DIALOG_BOX) DECL_SCREEN_IF_INCLUDED(FTDI_SAVE_SETTINGS_DIALOG_BOX) DECL_SCREEN_IF_INCLUDED(FTDI_CONFIRM_START_PRINT_DIALOG_BOX) DECL_SCREEN_IF_INCLUDED(FTDI_CONFIRM_ABORT_PRINT_DIALOG_BOX) DECL_SCREEN_IF_INCLUDED(FTDI_CONFIRM_AUTO_CALIBRATION_DIALOG_BOX) + DECL_SCREEN_IF_INCLUDED(FTDI_FILAMENT_PROMPT_BOX) DECL_SCREEN_IF_INCLUDED(FTDI_CUSTOM_USER_MENUS) DECL_SCREEN_IF_INCLUDED(FTDI_SPINNER_DIALOG_BOX) DECL_SCREEN_IF_INCLUDED(FTDI_ABOUT_SCREEN) diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/theme/bitmaps.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/theme/bitmaps.h index a2729979c6bf..eb170a641c30 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/theme/bitmaps.h +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/theme/bitmaps.h @@ -279,6 +279,52 @@ namespace Theme { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }; + constexpr PROGMEM bitmap_info_t Home_icon_Info = { + .format = L1, + .linestride = 4, + .filter = BILINEAR, + .wrapx = BORDER, + .wrapy = BORDER, + .RAMG_offset = 8941, + .width = 32, + .height = 32, + }; + + constexpr PROGMEM unsigned char Home_icon[128] = { + 0x00, 0x7B, 0xF0, 0x00, + 0x00, 0x4F, 0xF8, 0x00, + 0x00, 0x4E, 0x1C, 0x00, + 0x00, 0x5C, 0x0E, 0x00, + 0x00, 0x78, 0x07, 0x00, + 0x00, 0x70, 0x03, 0x80, + 0x00, 0xE0, 0x01, 0xC0, + 0x01, 0xC0, 0x00, 0xE0, + 0x03, 0x80, 0x00, 0x70, + 0x07, 0x00, 0x00, 0x38, + 0x0E, 0x00, 0x00, 0x1C, + 0x1C, 0x00, 0x00, 0x0E, + 0x3C, 0x00, 0x00, 0x0F, + 0x3C, 0x00, 0x00, 0x0F, + 0x04, 0x00, 0x00, 0x08, + 0x04, 0x00, 0x00, 0x08, + 0x04, 0x00, 0x00, 0x08, + 0x04, 0x00, 0x00, 0x08, + 0x04, 0x00, 0x00, 0x08, + 0x04, 0x00, 0x00, 0x08, + 0x04, 0x00, 0x00, 0x08, + 0x04, 0x00, 0x00, 0x08, + 0x04, 0x00, 0x00, 0x08, + 0x04, 0x00, 0x00, 0x08, + 0x04, 0x00, 0x00, 0x08, + 0x04, 0x00, 0x00, 0x08, + 0x07, 0xFF, 0xFF, 0xF8, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00 + }; + constexpr PROGMEM uint32_t UTF8_FONT_OFFSET = 10000; constexpr PROGMEM uint32_t BACKGROUND_OFFSET = 40000; } // namespace Theme diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/theme/colors.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/theme/colors.h index 0e145e39f208..5ec5de13d241 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/theme/colors.h +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/theme/colors.h @@ -60,7 +60,7 @@ namespace Theme { // Shades of gray constexpr float gray_sat = 0.14; - constexpr uint32_t gray_color_0 = hsl_to_rgb(accent_hue, gray_sat, 0.15); // Darkest + constexpr uint32_t gray_color_0 = hsl_to_rgb(accent_hue, gray_sat, 0.10); // Darkest constexpr uint32_t gray_color_1 = hsl_to_rgb(accent_hue, gray_sat, 0.26); constexpr uint32_t gray_color_2 = hsl_to_rgb(accent_hue, gray_sat, 0.39); constexpr uint32_t gray_color_3 = hsl_to_rgb(accent_hue, gray_sat, 0.52); @@ -113,8 +113,10 @@ namespace Theme { constexpr uint32_t theme_darkest = gray_color_1; constexpr uint32_t theme_dark = gray_color_2; + constexpr uint32_t bg_dark_color = gray_color_0; constexpr uint32_t bg_color = gray_color_1; constexpr uint32_t axis_label = gray_color_2; + constexpr uint32_t bg_light_color = gray_color_3; constexpr uint32_t bg_text_enabled = 0xFFFFFF; constexpr uint32_t bg_text_disabled = gray_color_2; @@ -126,6 +128,7 @@ namespace Theme { constexpr uint32_t logo_bg_rgb = accent_color_4; constexpr uint32_t logo_fill_rgb = accent_color_3; constexpr uint32_t logo_stroke_rgb = 0x000000; + constexpr uint32_t lulzbot_accent = 0xA8A845; constexpr uint32_t bed_mesh_lines_rgb = 0xFFFFFF; constexpr uint32_t bed_mesh_shadow_rgb = 0x444444; @@ -154,6 +157,8 @@ namespace Theme { constexpr uint32_t e_axis = axis_label; constexpr uint32_t feedrate = axis_label; constexpr uint32_t other = axis_label; + constexpr uint32_t cold_pull = hsl_to_rgb(190, 0.5, 0.50); + constexpr uint32_t cancel = hsl_to_rgb( 25, 0.7, 0.50); // Status screen constexpr uint32_t progress = axis_label; @@ -162,8 +167,10 @@ namespace Theme { constexpr uint32_t fan_speed = hsl_to_rgb(240, 0.5, 0.13); constexpr uint32_t temp = hsl_to_rgb(343, 1.0, 0.23); #else - constexpr uint32_t fan_speed = hsl_to_rgb(204, 0.47, 0.41); - constexpr uint32_t temp = hsl_to_rgb(311, 0.51, 0.35); + constexpr uint32_t fan_speed = hsl_to_rgb(30, 0.85, 0.50); + constexpr uint32_t fan_speed_button = hsl_to_rgb(30, 0.85, 0.50); + constexpr uint32_t temp = hsl_to_rgb(accent_hue, accent_sat, 0.30); + constexpr uint32_t temp_button = hsl_to_rgb(accent_hue, accent_sat, 0.39); #endif constexpr uint32_t disabled_icon = gray_color_1; @@ -177,17 +184,29 @@ namespace Theme { constexpr uint32_t transformF = 0x8010D0; constexpr uint32_t transformVal = 0x104010; - constexpr btn_colors disabled_btn = {.bg = bg_color, .grad = fg_disabled, .fg = fg_disabled, .rgb = fg_disabled }; - constexpr btn_colors normal_btn = {.bg = fg_action, .grad = 0xFFFFFF, .fg = fg_normal, .rgb = 0xFFFFFF }; - constexpr btn_colors action_btn = {.bg = bg_color, .grad = 0xFFFFFF, .fg = fg_action, .rgb = 0xFFFFFF }; - constexpr btn_colors red_btn = {.bg = 0xFF5555, .grad = 0xFFFFFF, .fg = 0xFF0000, .rgb = 0xFFFFFF }; - constexpr btn_colors ui_slider = {.bg = theme_darkest, .grad = 0xFFFFFF, .fg = theme_dark, .rgb = accent_color_3 }; - constexpr btn_colors ui_toggle = {.bg = theme_darkest, .grad = 0xFFFFFF, .fg = theme_dark, .rgb = 0xFFFFFF }; + constexpr btn_colors disabled_btn = {.bg = bg_color, .grad = fg_disabled, .fg = fg_disabled, .rgb = fg_disabled }; + constexpr btn_colors normal_btn = {.bg = fg_action, .grad = 0xFFFFFF, .fg = fg_normal, .rgb = 0xFFFFFF }; + constexpr btn_colors accent_btn = {.bg = fg_action, .grad = 0xFFFFFF, .fg = lulzbot_accent, .rgb = 0xFFFFFF }; + constexpr btn_colors action_btn = {.bg = bg_color, .grad = 0xFFFFFF, .fg = fg_action, .rgb = 0xFFFFFF }; + constexpr btn_colors red_btn = {.bg = 0xFF5555, .grad = 0xFFFFFF, .fg = 0xFF0000, .rgb = 0xFFFFFF }; + constexpr btn_colors ui_slider = {.bg = theme_darkest, .grad = 0xFFFFFF, .fg = theme_dark, .rgb = accent_color_3 }; + constexpr btn_colors ui_toggle = {.bg = theme_darkest, .grad = 0xFFFFFF, .fg = theme_dark, .rgb = 0xFFFFFF }; + constexpr btn_colors text_x_axis_btn = {.bg = fg_action, .grad = 0xFFFFFF, .fg = fg_normal, .rgb = x_axis }; + constexpr btn_colors text_y_axis_btn = {.bg = fg_action, .grad = 0xFFFFFF, .fg = fg_normal, .rgb = y_axis }; + constexpr btn_colors text_z_axis_btn = {.bg = fg_action, .grad = 0xFFFFFF, .fg = fg_normal, .rgb = z_axis }; + constexpr btn_colors normal_text = {.bg = fg_action, .grad = fg_normal, .fg = fg_normal, .rgb = 0xFFFFFF }; + constexpr btn_colors text_x_axis = {.bg = fg_action, .grad = fg_normal, .fg = fg_normal, .rgb = x_axis }; + constexpr btn_colors text_y_axis = {.bg = fg_action, .grad = fg_normal, .fg = fg_normal, .rgb = y_axis }; + constexpr btn_colors text_z_axis = {.bg = fg_action, .grad = fg_normal, .fg = fg_normal, .rgb = z_axis }; + constexpr btn_colors cold_pull_btn = {.bg = fg_action, .grad = fg_normal, .fg = cold_pull, .rgb = 0xFFFFFF }; + constexpr btn_colors cancel_btn = {.bg = fg_action, .grad = fg_normal, .fg = cancel, .rgb = 0xFFFFFF }; + constexpr btn_colors temp_btn = {.bg = bg_color, .grad = fg_disabled, .fg = fg_disabled, .rgb = 0xFFFFFF }; + constexpr btn_colors temp_disabled_btn = {.bg = bg_color, .grad = bg_dark_color, .fg = bg_dark_color, .rgb = bg_light_color }; // Temperature color scale - const rgb_t cool_rgb ( 0, 0, 0); - const rgb_t low_rgb (128, 0, 0); - const rgb_t med_rgb (255, 128, 0); - const rgb_t high_rgb (255, 255, 128); + const rgb_t cool_rgb (100, 100, 80); + const rgb_t low_rgb (128, 50, 0); + const rgb_t med_rgb (200, 85, 0); + const rgb_t high_rgb (255, 85, 0); }; diff --git a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/theme/fonts.h b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/theme/fonts.h index 63ecdfcb3c7e..66bcd4ccbd62 100644 --- a/Marlin/src/lcd/extui/ftdi_eve_touch_ui/theme/fonts.h +++ b/Marlin/src/lcd/extui/ftdi_eve_touch_ui/theme/fonts.h @@ -31,6 +31,7 @@ namespace Theme { constexpr int16_t font_medium = 30; constexpr int16_t font_large = 30; constexpr int16_t font_xlarge = 31; + constexpr int16_t font_xxlarge = 31.5; #else constexpr int16_t font_tiny = 27; constexpr int16_t font_xsmall = 29; @@ -38,8 +39,10 @@ namespace Theme { constexpr int16_t font_medium = 30; constexpr int16_t font_large = 31; constexpr int16_t font_xlarge = 31; + constexpr int16_t font_xxlarge = 32; #endif constexpr float icon_scale = 1.0; + constexpr float icon_scale_lg = 2.0; #elif defined(TOUCH_UI_480x272) #if ENABLED(TOUCH_UI_PORTRAIT) constexpr int16_t font_tiny = 26; @@ -48,6 +51,7 @@ namespace Theme { constexpr int16_t font_medium = 27; constexpr int16_t font_large = 28; constexpr int16_t font_xlarge = 29; + constexpr int16_t font_xxlarge = 30; constexpr float icon_scale = 0.7; #else constexpr int16_t font_tiny = 26; @@ -56,6 +60,7 @@ namespace Theme { constexpr int16_t font_medium = 28; constexpr int16_t font_large = 30; constexpr int16_t font_xlarge = 30; + constexpr int16_t font_xxlarge = 31; constexpr float icon_scale = 0.6; #endif #elif defined(TOUCH_UI_320x240) @@ -66,6 +71,7 @@ namespace Theme { constexpr int16_t font_medium = 27; constexpr int16_t font_large = 27; constexpr int16_t font_xlarge = 28; + constexpr int16_t font_xxlarge = 29; constexpr float icon_scale = 0.6; #else constexpr int16_t font_tiny = 26; @@ -74,6 +80,7 @@ namespace Theme { constexpr int16_t font_medium = 27; constexpr int16_t font_large = 29; constexpr int16_t font_xlarge = 30; + constexpr int16_t font_xxlarge = 31; constexpr float icon_scale = 0.5; #endif #endif diff --git a/Marlin/src/lcd/extui/ui_api.cpp b/Marlin/src/lcd/extui/ui_api.cpp index d89a09d8ada2..77de555379f9 100644 --- a/Marlin/src/lcd/extui/ui_api.cpp +++ b/Marlin/src/lcd/extui/ui_api.cpp @@ -1188,6 +1188,10 @@ namespace ExtUI { return isPrinting() && (isPrintingFromMediaPaused() || print_job_timer.isPaused()); } + bool isOngoingPrintJob() { + return isPrintingFromMedia() || printJobOngoing(); + } + bool isMediaMounted() { return TERN0(HAS_MEDIA, card.isMounted()); } // Pause/Resume/Stop are implemented in MarlinUI diff --git a/Marlin/src/lcd/extui/ui_api.h b/Marlin/src/lcd/extui/ui_api.h index 638f8d88b8a5..6a775fa7c83b 100644 --- a/Marlin/src/lcd/extui/ui_api.h +++ b/Marlin/src/lcd/extui/ui_api.h @@ -465,6 +465,7 @@ namespace ExtUI { bool isPrintingFromMedia(); bool isPrinting(); bool isPrintingPaused(); + bool isOngoingPrintJob(); void printFile(const char *filename); void stopPrint(); diff --git a/Marlin/src/lcd/language/language_en.h b/Marlin/src/lcd/language/language_en.h index 5d49a6afee56..586e3bc34418 100644 --- a/Marlin/src/lcd/language/language_en.h +++ b/Marlin/src/lcd/language/language_en.h @@ -48,6 +48,22 @@ #define PREHEAT_1_LABEL "" #endif +#ifndef PREHEAT_2_LABEL + #define PREHEAT_2_LABEL "" +#endif + +#ifndef PREHEAT_3_LABEL + #define PREHEAT_3_LABEL "" +#endif + +#ifndef PREHEAT_4_LABEL + #define PREHEAT_4_LABEL "" +#endif + +#ifndef CUSTOM_MENU_MAIN_TITLE + #define CUSTOM_MENU_MAIN_TITLE "" +#endif + namespace LanguageNarrow_en { constexpr uint8_t CHARSIZE = 2; LSTR LANGUAGE = _UxGT("English"); @@ -84,6 +100,7 @@ namespace LanguageNarrow_en { LSTR MSG_Z_PROBE = _UxGT("Z Probe"); LSTR MSG_HOMING = _UxGT("Homing"); LSTR MSG_AUTO_HOME = _UxGT("Auto Home"); + LSTR MSG_HOME_ALL = _UxGT("Home All"); LSTR MSG_AUTO_HOME_A = _UxGT("Home @"); LSTR MSG_AUTO_HOME_X = _UxGT("Home X"); LSTR MSG_AUTO_HOME_Y = _UxGT("Home Y"); @@ -126,6 +143,10 @@ namespace LanguageNarrow_en { LSTR MSG_PREHEAT_1_BEDONLY = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" Bed"); LSTR MSG_PREHEAT_1_SETTINGS = _UxGT("Preheat ") PREHEAT_1_LABEL _UxGT(" Conf"); + LSTR MSG_PREHEAT_2 = _UxGT("Preheat ") PREHEAT_2_LABEL; + LSTR MSG_PREHEAT_3 = _UxGT("Preheat ") PREHEAT_3_LABEL; + LSTR MSG_PREHEAT_4 = PREHEAT_4_LABEL; + LSTR MSG_PREHEAT_M = _UxGT("Preheat $"); LSTR MSG_PREHEAT_M_H = _UxGT("Preheat $ ~"); LSTR MSG_PREHEAT_M_END = _UxGT("Preheat $ End"); @@ -136,6 +157,7 @@ namespace LanguageNarrow_en { LSTR MSG_PREHEAT_HOTEND = _UxGT("Preheat Hotend"); LSTR MSG_PREHEAT_CUSTOM = _UxGT("Preheat Custom"); + LSTR MSG_PREHEAT = _UxGT("Preheat"); LSTR MSG_COOLDOWN = _UxGT("Cooldown"); LSTR MSG_CUTTER_FREQUENCY = _UxGT("Frequency"); @@ -189,6 +211,9 @@ namespace LanguageNarrow_en { LSTR MSG_MESH_CANCEL = _UxGT("Mesh cancelled"); LSTR MSG_MESH_RESET = _UxGT("Mesh reset"); LSTR MSG_CUSTOM_COMMANDS = _UxGT("Custom Commands"); + LSTR MSG_CUSTOM_MENU_MAIN_TITLE = _UxGT(CUSTOM_MENU_MAIN_TITLE); + LSTR MSG_TOOL_HEAD_TH = _UxGT(CUSTOM_MENU_MAIN_TITLE" (TH)"); + LSTR MSG_PRESENT_BED = _UxGT("Present Bed"); LSTR MSG_M48_TEST = _UxGT("M48 Probe Test"); LSTR MSG_M48_POINT = _UxGT("M48 Point"); LSTR MSG_M48_OUT_OF_BOUNDS = _UxGT("Probe out of bounds"); @@ -343,6 +368,7 @@ namespace LanguageNarrow_en { LSTR MSG_CONTROLLER_FAN_AUTO_ON = _UxGT("Auto Mode"); LSTR MSG_CONTROLLER_FAN_SPEED = _UxGT("Active Speed"); LSTR MSG_CONTROLLER_FAN_DURATION = _UxGT("Idle Period"); + LSTR MSG_FLOW_PERCENTAGE = _UxGT("Set Flowrate Percentage"); LSTR MSG_FLOW = _UxGT("Flow"); LSTR MSG_FLOW_N = _UxGT("Flow ~"); LSTR MSG_CONTROL = _UxGT("Control"); @@ -515,6 +541,7 @@ namespace LanguageNarrow_en { LSTR MSG_ADVANCED_PAUSE = _UxGT("Advanced Pause"); LSTR MSG_RESUME_PRINT = _UxGT("Resume Print"); LSTR MSG_STOP_PRINT = _UxGT("Stop Print"); + LSTR MSG_CANCEL_PRINT = _UxGT("Cancel Print"); LSTR MSG_OUTAGE_RECOVERY = _UxGT("Power Outage"); LSTR MSG_RESUME_BED_TEMP = _UxGT("Resume Bed Temp"); LSTR MSG_HOST_START_PRINT = _UxGT("Host Start"); @@ -552,6 +579,8 @@ namespace LanguageNarrow_en { LSTR MSG_FILAMENT_SWAP_EXTRA = _UxGT("Swap Extra"); LSTR MSG_FILAMENT_PURGE_LENGTH = _UxGT("Purge Length"); LSTR MSG_TOOL_CHANGE = _UxGT("Tool Change"); + LSTR MSG_TOOL_HEAD_SWAP = _UxGT("Park For Tool Head Swap"); + LSTR MSG_FILAMENT_SWAP = _UxGT("Park For Filament Change"); LSTR MSG_TOOL_CHANGE_ZLIFT = _UxGT("Z Raise"); LSTR MSG_SINGLENOZZLE_PRIME_SPEED = _UxGT("Prime Speed"); LSTR MSG_SINGLENOZZLE_WIPE_RETRACT = _UxGT("Wipe Retract"); @@ -611,6 +640,7 @@ namespace LanguageNarrow_en { LSTR MSG_ZPROBE_YOFFSET = _UxGT("Probe Y Offset"); LSTR MSG_ZPROBE_ZOFFSET = _UxGT("Probe Z Offset"); LSTR MSG_ZPROBE_MARGIN = _UxGT("Probe Margin"); + LSTR MSG_ZOFFSET = _UxGT("Z Offset"); LSTR MSG_Z_FEED_RATE = _UxGT("Z Feed Rate"); LSTR MSG_ENABLE_HS_MODE = _UxGT("Enable HS mode"); LSTR MSG_MOVE_NOZZLE_TO_BED = _UxGT("Move Nozzle to Bed"); @@ -660,7 +690,8 @@ namespace LanguageNarrow_en { LSTR MSG_UBL_LEVELING = _UxGT("Unified Bed Leveling"); LSTR MSG_MESH_LEVELING = _UxGT("Mesh Leveling"); LSTR MSG_MESH_DONE = _UxGT("Mesh probing done"); - LSTR MSG_INFO_STATS_MENU = _UxGT("Printer Stats"); + LSTR MSG_INFO_PRINTER_STATS_MENU = _UxGT("Printer Stats"); + LSTR MSG_INFO_STATS_MENU = _UxGT("Stats"); LSTR MSG_RESET_STATS = _UxGT("Reset Print Stats?"); LSTR MSG_INFO_BOARD_MENU = _UxGT("Board Info"); LSTR MSG_INFO_THERMISTOR_MENU = _UxGT("Thermistors"); @@ -670,6 +701,7 @@ namespace LanguageNarrow_en { LSTR MSG_INFO_RUNAWAY_OFF = _UxGT("Runaway Watch: OFF"); LSTR MSG_INFO_RUNAWAY_ON = _UxGT("Runaway Watch: ON"); LSTR MSG_HOTEND_IDLE_TIMEOUT = _UxGT("Hotend Idle Timeout"); + LSTR MSG_BED_IDLE_TIMEOUT = _UxGT("Bed Idle Timeout"); LSTR MSG_HOTEND_IDLE_DISABLE = _UxGT("Disable Timeout"); LSTR MSG_HOTEND_IDLE_NOZZLE_TARGET = _UxGT("Nozzle Idle Temp"); LSTR MSG_HOTEND_IDLE_BED_TARGET = _UxGT("Bed Idle Temp"); @@ -718,6 +750,7 @@ namespace LanguageNarrow_en { LSTR MSG_FILAMENT_CHANGE_PURGE_CONTINUE = _UxGT("Purge or Continue?"); // ProUI LSTR MSG_FILAMENT_CHANGE_NOZZLE = _UxGT(" Nozzle: "); LSTR MSG_RUNOUT_SENSOR = _UxGT("Runout Sensor"); + LSTR MSG_SENSOR = _UxGT("Sensor"); LSTR MSG_RUNOUT_DISTANCE_MM = _UxGT("Runout Dist mm"); LSTR MSG_EXTRUDER_MIN_TEMP = _UxGT("Extruder Min Temp."); // ProUI LSTR MSG_FANCHECK = _UxGT("Fan Tacho Check");