diff --git a/Marlin/Configuration_adv.h b/Marlin/Configuration_adv.h index 0951dfaa6d..fa7323a666 100644 --- a/Marlin/Configuration_adv.h +++ b/Marlin/Configuration_adv.h @@ -1193,6 +1193,8 @@ //#define MENU_ADDAUTOSTART // Add a menu option to run auto#.g files + //#define BROWSE_MEDIA_ON_INSERT // Open the file browser when media is inserted + #define EVENT_GCODE_SD_ABORT "G28XY" // G-code to run on SD Abort Print (e.g., "G28XY" or "G27") #if ENABLED(PRINTER_EVENT_LEDS) diff --git a/Marlin/src/feature/password/password.h b/Marlin/src/feature/password/password.h index 97c3174557..1382d6df40 100644 --- a/Marlin/src/feature/password/password.h +++ b/Marlin/src/feature/password/password.h @@ -47,7 +47,7 @@ public: static void start_over(); static void digit_entered(); - static void set_password_done(); + static void set_password_done(const bool with_set=true); static void menu_password_report(); static void remove_password(); diff --git a/Marlin/src/gcode/gcode.h b/Marlin/src/gcode/gcode.h index ddd48a389d..3fbb88829e 100644 --- a/Marlin/src/gcode/gcode.h +++ b/Marlin/src/gcode/gcode.h @@ -769,12 +769,8 @@ private: #if ENABLED(PASSWORD_FEATURE) static void M510(); - #if ENABLED(PASSWORD_UNLOCK_GCODE) - static void M511(); - #endif - #if ENABLED(PASSWORD_CHANGE_GCODE) - static void M512(); - #endif + TERN_(PASSWORD_UNLOCK_GCODE, static void M511()); + TERN_(PASSWORD_CHANGE_GCODE, static void M512()); #endif TERN_(SDSUPPORT, static void M524()); diff --git a/Marlin/src/lcd/marlinui.cpp b/Marlin/src/lcd/marlinui.cpp index 13c85be787..9d0ebe27e4 100644 --- a/Marlin/src/lcd/marlinui.cpp +++ b/Marlin/src/lcd/marlinui.cpp @@ -30,6 +30,10 @@ #include "../feature/host_actions.h" #endif +#if ENABLED(BROWSE_MEDIA_ON_INSERT, PASSWORD_ON_SD_PRINT_MENU) + #include "../feature/password/password.h" +#endif + // All displays share the MarlinUI class #include "marlinui.h" MarlinUI ui; @@ -1620,7 +1624,12 @@ void MarlinUI::update() { if (status) { if (old_status < 2) { TERN_(EXTENSIBLE_UI, ExtUI::onMediaInserted()); // ExtUI response - set_status_P(GET_TEXT(MSG_MEDIA_INSERTED)); + #if ENABLED(BROWSE_MEDIA_ON_INSERT) + quick_feedback(); + goto_screen(MEDIA_MENU_GATEWAY); + #else + set_status_P(GET_TEXT(MSG_MEDIA_INSERTED)); + #endif } } else { diff --git a/Marlin/src/lcd/marlinui.h b/Marlin/src/lcd/marlinui.h index 6ce59132bf..3311f55ed5 100644 --- a/Marlin/src/lcd/marlinui.h +++ b/Marlin/src/lcd/marlinui.h @@ -322,6 +322,7 @@ public: #endif #if ENABLED(SDSUPPORT) + #define MEDIA_MENU_GATEWAY TERN(PASSWORD_ON_SD_PRINT_MENU, password.media_gatekeeper, menu_media) static void media_changed(const uint8_t old_stat, const uint8_t stat); #endif diff --git a/Marlin/src/lcd/menu/menu_item.h b/Marlin/src/lcd/menu/menu_item.h index 3ebe38235d..6430021223 100644 --- a/Marlin/src/lcd/menu/menu_item.h +++ b/Marlin/src/lcd/menu/menu_item.h @@ -354,6 +354,7 @@ class MenuItem_bool : public MenuEditItemBase { #define MENU_ITEM_P(TYPE, PLABEL, V...) _MENU_ITEM_P(TYPE, false, PLABEL, ##V) #define MENU_ITEM(TYPE, LABEL, V...) MENU_ITEM_P(TYPE, GET_TEXT(LABEL), ##V) +#define BACK_ITEM_P(PLABEL) MENU_ITEM_P(back, PLABEL) #define BACK_ITEM(LABEL) MENU_ITEM(back, LABEL) #define ACTION_ITEM_N_S_P(N, S, PLABEL, ACTION) MENU_ITEM_N_S_P(function, N, S, PLABEL, ACTION) diff --git a/Marlin/src/lcd/menu/menu_main.cpp b/Marlin/src/lcd/menu/menu_main.cpp index 992303b791..bb65ce61e2 100644 --- a/Marlin/src/lcd/menu/menu_main.cpp +++ b/Marlin/src/lcd/menu/menu_main.cpp @@ -141,7 +141,7 @@ void menu_main() { if (card_detected) { if (!card_open) { - SUBMENU(MSG_MEDIA_MENU, TERN(PASSWORD_ON_SD_PRINT_MENU, password.media_gatekeeper, menu_media)); + SUBMENU(MSG_MEDIA_MENU, MEDIA_MENU_GATEWAY); #if PIN_EXISTS(SD_DETECT) GCODES_ITEM(MSG_CHANGE_MEDIA, M21_STR); #else @@ -248,7 +248,7 @@ void menu_main() { #else GCODES_ITEM(MSG_RELEASE_MEDIA, PSTR("M22")); #endif - SUBMENU(MSG_MEDIA_MENU, TERN(PASSWORD_ON_SD_PRINT_MENU, password.media_gatekeeper, menu_media)); + SUBMENU(MSG_MEDIA_MENU, MEDIA_MENU_GATEWAY); } } else { diff --git a/Marlin/src/lcd/menu/menu_media.cpp b/Marlin/src/lcd/menu/menu_media.cpp index 93ecc49d98..59cb2baa23 100644 --- a/Marlin/src/lcd/menu/menu_media.cpp +++ b/Marlin/src/lcd/menu/menu_media.cpp @@ -104,6 +104,8 @@ class MenuItem_sdfolder : public MenuItem_sdbase { } }; +extern uint8_t screen_history_depth; + void menu_media() { ui.encoder_direction_menus(); @@ -115,7 +117,7 @@ void menu_media() { #endif START_MENU(); - BACK_ITEM(MSG_MAIN); + BACK_ITEM_P(TERN1(BROWSE_MEDIA_ON_INSERT, screen_history_depth) ? GET_TEXT(MSG_MAIN) : GET_TEXT(MSG_BACK)); if (card.flag.workDirIsRoot) { #if !PIN_EXISTS(SD_DETECT) ACTION_ITEM(MSG_REFRESH, []{ encoderTopLine = 0; card.mount(); }); diff --git a/Marlin/src/lcd/menu/menu_password.cpp b/Marlin/src/lcd/menu/menu_password.cpp index c3924b5686..c58931cf2e 100644 --- a/Marlin/src/lcd/menu/menu_password.cpp +++ b/Marlin/src/lcd/menu/menu_password.cpp @@ -152,19 +152,17 @@ void Password::menu_password_report() { END_SCREEN(); } -void Password::set_password_done() { - is_set = true; +void Password::set_password_done(const bool with_set/*=true*/) { + is_set = with_set; value = value_entry; ui.completion_feedback(true); ui.goto_screen(menu_password_report); } void Password::remove_password() { - is_set = false; string[0] = '0'; string[1] = '\0'; - ui.completion_feedback(true); - ui.goto_screen(menu_password_report); + set_password_done(false); } //