From 3df75188f3b4bdff9463bbf16eebfae84c2b8733 Mon Sep 17 00:00:00 2001 From: Scott Lahteine Date: Wed, 23 Apr 2025 12:57:53 -0500 Subject: [PATCH] =?UTF-8?q?=F0=9F=9A=B8=20Fix=20TFT=20GLCD=20"Select=20fro?= =?UTF-8?q?m=20Media"=20glitch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Marlin/src/lcd/marlinui.cpp | 2 +- Marlin/src/lcd/menu/menu.h | 1 + Marlin/src/lcd/menu/menu_media.cpp | 45 +++++++++++++++++------------- 3 files changed, 27 insertions(+), 21 deletions(-) diff --git a/Marlin/src/lcd/marlinui.cpp b/Marlin/src/lcd/marlinui.cpp index 384bf65211..7f78d21bf3 100644 --- a/Marlin/src/lcd/marlinui.cpp +++ b/Marlin/src/lcd/marlinui.cpp @@ -1114,7 +1114,7 @@ void MarlinUI::init() { #if MARLINUI_SCROLL_NAME // If scrolling of long file names is enabled and we are in the sd card menu, // cause a refresh to occur until all the text has scrolled into view. - if (currentScreen == menu_media && filename_scroll_max && !lcd_status_update_delay--) { + if (currentScreen == menu_media_filelist && filename_scroll_max && !lcd_status_update_delay--) { lcd_status_update_delay = ++filename_scroll_pos >= filename_scroll_max ? 12 : 4; // Long delay at end and start if (filename_scroll_pos > filename_scroll_max) filename_scroll_pos = 0; refresh(LCDVIEW_REDRAW_NOW); diff --git a/Marlin/src/lcd/menu/menu.h b/Marlin/src/lcd/menu/menu.h index 92a2d506f5..80a84af1ba 100644 --- a/Marlin/src/lcd/menu/menu.h +++ b/Marlin/src/lcd/menu/menu.h @@ -211,6 +211,7 @@ void menu_main(); void menu_move(); #if HAS_MEDIA + void menu_media_filelist(); void menu_media(); #endif diff --git a/Marlin/src/lcd/menu/menu_media.cpp b/Marlin/src/lcd/menu/menu_media.cpp index fe00bf3710..8633551672 100644 --- a/Marlin/src/lcd/menu/menu_media.cpp +++ b/Marlin/src/lcd/menu/menu_media.cpp @@ -45,7 +45,7 @@ void lcd_sd_updir() { void MarlinUI::reselect_last_file() { if (sd_encoder_position == 0xFFFF) return; - goto_screen(menu_media, sd_encoder_position, sd_top_line, sd_items); + goto_screen(menu_media_filelist, sd_encoder_position, sd_top_line, sd_items); sd_encoder_position = 0xFFFF; defer_status_screen(); } @@ -101,6 +101,29 @@ class MenuItem_sdfolder : public MenuItem_sdbase { } }; +#if HAS_MULTI_VOLUME + void menu_media_select() { + START_MENU(); + BACK_ITEM_F(TERN1(BROWSE_MEDIA_ON_INSERT, screen_history_depth) ? GET_TEXT_F(MSG_MAIN_MENU) : GET_TEXT_F(MSG_BACK)); + #if ENABLED(VOLUME_SD_ONBOARD) + ACTION_ITEM(MSG_SD_CARD, []{ card.changeMedia(&card.media_driver_sdcard); card.mount(); ui.goto_screen(menu_media_filelist); }); + #endif + #if ENABLED(VOLUME_USB_FLASH_DRIVE) + ACTION_ITEM(MSG_USB_DISK, []{ card.changeMedia(&card.media_driver_usbFlash); card.mount(); ui.goto_screen(menu_media_filelist); }); + #endif + END_MENU(); + } +#endif + +/** + * "Select From Media" menu item. Depending on single or multiple drives: + * - menu_media_filelist - List files on the current media + * - menu_media_select - Select one of the attached drives, then go to the file list + */ +void menu_media() { + ui.goto_screen(TERN(HAS_MULTI_VOLUME, menu_media_select, menu_media_filelist)); +} + void menu_media_filelist() { ui.encoder_direction_menus(); @@ -113,7 +136,7 @@ void menu_media_filelist() { START_MENU(); #if HAS_MULTI_VOLUME - ACTION_ITEM(MSG_BACK, []{ ui.goto_screen(menu_media); }); + ACTION_ITEM(MSG_BACK, []{ ui.goto_screen(menu_media_select); }); #else BACK_ITEM_F(TERN1(BROWSE_MEDIA_ON_INSERT, screen_history_depth) ? GET_TEXT_F(MSG_MAIN_MENU) : GET_TEXT_F(MSG_BACK)); #endif @@ -141,22 +164,4 @@ void menu_media_filelist() { END_MENU(); } -#if HAS_MULTI_VOLUME - void menu_media_select() { - START_MENU(); - BACK_ITEM_F(TERN1(BROWSE_MEDIA_ON_INSERT, screen_history_depth) ? GET_TEXT_F(MSG_MAIN_MENU) : GET_TEXT_F(MSG_BACK)); - #if ENABLED(VOLUME_SD_ONBOARD) - ACTION_ITEM(MSG_SD_CARD, []{ card.changeMedia(&card.media_driver_sdcard); card.mount(); ui.goto_screen(menu_media_filelist); }); - #endif - #if ENABLED(VOLUME_USB_FLASH_DRIVE) - ACTION_ITEM(MSG_USB_DISK, []{ card.changeMedia(&card.media_driver_usbFlash); card.mount(); ui.goto_screen(menu_media_filelist); }); - #endif - END_MENU(); - } -#endif - -void menu_media() { - TERN(HAS_MULTI_VOLUME, menu_media_select, menu_media_filelist)(); -} - #endif // HAS_MARLINUI_MENU && HAS_MEDIA