diff --git a/Marlin/ultralcd.cpp b/Marlin/ultralcd.cpp index 7d14983ac..1abf8ec25 100644 --- a/Marlin/ultralcd.cpp +++ b/Marlin/ultralcd.cpp @@ -4538,6 +4538,24 @@ void kill_screen(const char* lcd_msg) { END_SCREEN(); } + FORCE_INLINE screenFunc_t ap_message_screen(const AdvancedPauseMessage message) { + switch (message) { + case ADVANCED_PAUSE_MESSAGE_INIT: return lcd_advanced_pause_init_message; + case ADVANCED_PAUSE_MESSAGE_UNLOAD: return lcd_advanced_pause_unload_message; + case ADVANCED_PAUSE_MESSAGE_INSERT: return lcd_advanced_pause_insert_message; + case ADVANCED_PAUSE_MESSAGE_LOAD: return lcd_advanced_pause_load_message; + case ADVANCED_PAUSE_MESSAGE_PURGE: return lcd_advanced_pause_purge_message; + case ADVANCED_PAUSE_MESSAGE_RESUME: return lcd_advanced_pause_resume_message; + case ADVANCED_PAUSE_MESSAGE_CLICK_TO_HEAT_NOZZLE: return lcd_advanced_pause_heat_nozzle; + case ADVANCED_PAUSE_MESSAGE_WAIT_FOR_NOZZLES_TO_HEAT: return lcd_advanced_pause_wait_for_nozzles_to_heat; + case ADVANCED_PAUSE_MESSAGE_OPTION: advanced_pause_menu_response = ADVANCED_PAUSE_RESPONSE_WAIT_FOR; + return lcd_advanced_pause_option_menu; + case ADVANCED_PAUSE_MESSAGE_STATUS: + default: break; + } + return NULL; + } + void lcd_advanced_pause_show_message( const AdvancedPauseMessage message, const AdvancedPauseMode mode/*=ADVANCED_PAUSE_MODE_PAUSE_PRINT*/, @@ -4545,48 +4563,13 @@ void kill_screen(const char* lcd_msg) { ) { advanced_pause_mode = mode; hotend_status_extruder = extruder; - switch (message) { - case ADVANCED_PAUSE_MESSAGE_INIT: - defer_return_to_status = true; - lcd_goto_screen(lcd_advanced_pause_init_message); - break; - case ADVANCED_PAUSE_MESSAGE_UNLOAD: - defer_return_to_status = true; - lcd_goto_screen(lcd_advanced_pause_unload_message); - break; - case ADVANCED_PAUSE_MESSAGE_INSERT: - defer_return_to_status = true; - lcd_goto_screen(lcd_advanced_pause_insert_message); - break; - case ADVANCED_PAUSE_MESSAGE_LOAD: - defer_return_to_status = true; - lcd_goto_screen(lcd_advanced_pause_load_message); - break; - case ADVANCED_PAUSE_MESSAGE_PURGE: - defer_return_to_status = true; - lcd_goto_screen(lcd_advanced_pause_purge_message); - break; - case ADVANCED_PAUSE_MESSAGE_CLICK_TO_HEAT_NOZZLE: - defer_return_to_status = true; - lcd_goto_screen(lcd_advanced_pause_heat_nozzle); - break; - case ADVANCED_PAUSE_MESSAGE_WAIT_FOR_NOZZLES_TO_HEAT: - defer_return_to_status = true; - lcd_goto_screen(lcd_advanced_pause_wait_for_nozzles_to_heat); - break; - case ADVANCED_PAUSE_MESSAGE_OPTION: - defer_return_to_status = true; - advanced_pause_menu_response = ADVANCED_PAUSE_RESPONSE_WAIT_FOR; - lcd_goto_screen(lcd_advanced_pause_option_menu); - break; - case ADVANCED_PAUSE_MESSAGE_RESUME: - defer_return_to_status = true; - lcd_goto_screen(lcd_advanced_pause_resume_message); - break; - case ADVANCED_PAUSE_MESSAGE_STATUS: - lcd_return_to_status(); - break; + const screenFunc_t next_screen = ap_message_screen(message); + if (next_screen) { + defer_return_to_status = true; + lcd_goto_screen(next_screen); } + else + lcd_return_to_status(); } #endif // ADVANCED_PAUSE_FEATURE