From 1134b895a2f3d4695bce8261b881a402b4245015 Mon Sep 17 00:00:00 2001 From: zoltanvb <101990835+zoltanvb@users.noreply.github.com> Date: Sat, 4 Feb 2023 17:18:21 +0100 Subject: [PATCH] Ozone footer enhancement: Scan button (#14949) Display Scan button in footer when it is applicable. --- intl/msg_hash_us.h | 4 ++ menu/drivers/ozone.c | 87 +++++++++++++++++++++++++++++++++++++++----- msg_hash.h | 1 + 3 files changed, 82 insertions(+), 10 deletions(-) diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index 145e33a2e4..653e93f02b 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -7666,6 +7666,10 @@ MSG_HASH( MENU_ENUM_SUBLABEL_MANUAL_CONTENT_SCAN_LIST, "Configurable scan based on content file names. Does not require content to match the database." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_SCAN_ENTRY, + "Scan" + ) /* Import Content > Scan File */ diff --git a/menu/drivers/ozone.c b/menu/drivers/ozone.c index ce30dc813c..2ff4cfc020 100644 --- a/menu/drivers/ozone.c +++ b/menu/drivers/ozone.c @@ -494,6 +494,7 @@ struct ozone_handle ozone_footer_label_t metadata_toggle; ozone_footer_label_t help; ozone_footer_label_t clear; + ozone_footer_label_t scan; } footer_labels; struct @@ -7676,6 +7677,24 @@ static bool ozone_clear_available(ozone_handle_t *ozone, size_t current_selectio return false; } +static bool ozone_scan_available(ozone_handle_t *ozone, size_t current_selection) +{ + menu_entry_t last_entry; + + MENU_ENTRY_INITIALIZE(last_entry); + menu_entry_get(&last_entry, 0, current_selection, NULL, true); + + switch (last_entry.type) + { + case FILE_TYPE_DIRECTORY: + return true; + case FILE_TYPE_CARCHIVE: + case FILE_TYPE_PLAIN: + return true; + } + return false; +} + static bool ozone_is_current_entry_settings(size_t current_selection) { menu_entry_t last_entry; @@ -8703,6 +8722,10 @@ static void ozone_cache_footer_labels(ozone_handle_t *ozone) &ozone->footer_labels.clear, MENU_ENUM_LABEL_VALUE_CLEAR_SETTING); + ozone_cache_footer_label(ozone, + &ozone->footer_labels.scan, + MENU_ENUM_LABEL_VALUE_SCAN_ENTRY); + /* Record current language setting */ ozone->footer_labels_language = *msg_hash_get_uint(MSG_HASH_USER_LANGUAGE); } @@ -10238,6 +10261,10 @@ static void ozone_draw_footer( bool clear_setting_enabled = !thumbnail_cycle_enabled && ozone_clear_available(ozone, menu_navigation_get_selection()); + bool scan_enabled = + !thumbnail_cycle_enabled && + !clear_setting_enabled && + ozone_scan_available(ozone, menu_navigation_get_selection()); bool reset_to_default_available = !fullscreen_thumbnails_available && ozone_is_current_entry_settings(menu_navigation_get_selection()); @@ -10252,13 +10279,14 @@ static void ozone_draw_footer( * > From right to left, these are ordered: * - ok * - back - * - search - * - cycle thumbnails - * - clear settings (mutually exclusive with cycle) - * - toggle fullscreen thumbs (playlists only) - * - reset to default (non-playlist only) - * - toggle metadata (playlists only) - * - help (non-playlist only) */ + * - (X) search + * - (Y) cycle thumbnails (playlists only) + * - (Y) clear settings (keybinds only) + * - (Y) scan entry (certain file types only) + * - (Start) toggle fullscreen thumbs (playlists only) + * - (Start) reset to default (settings only) + * - (Select) toggle metadata (playlists only) + * - (Select) help (non-playlist only) */ float ok_x = (float)video_width - footer_margin - ozone->footer_labels.ok.width - icon_size - icon_padding; float back_x = ok_x @@ -10272,9 +10300,12 @@ static void ozone_draw_footer( float clear_x = (clear_setting_enabled) ? cycle_x - ozone->footer_labels.clear.width - icon_size - (2.0f * icon_padding) : cycle_x; - float reset_to_default_x = (reset_to_default_available) - ? clear_x - ozone->footer_labels.reset_to_default.width - icon_size - (2.0f * icon_padding) + float scan_x = (scan_enabled) + ? clear_x - ozone->footer_labels.scan.width - icon_size - (2.0f * icon_padding) : clear_x; + float reset_to_default_x = (reset_to_default_available) + ? scan_x - ozone->footer_labels.reset_to_default.width - icon_size - (2.0f * icon_padding) + : scan_x; float help_x = (help_available) ? reset_to_default_x - ozone->footer_labels.help.width - icon_size - (2.0f * icon_padding) : reset_to_default_x; @@ -10487,8 +10518,27 @@ static void ozone_draw_footer( 1.0f, col, mymat); - } + /* > Scan entry */ + if (scan_enabled) + ozone_draw_icon( + p_disp, + userdata, + video_width, + video_height, + icon_size, + icon_size, + ozone->icons_textures[OZONE_ENTRIES_ICONS_TEXTURE_INPUT_BTN_L], + scan_x, + icon_y, + video_width, + video_height, + 0.0f, + 1.0f, + col, + mymat); + } + if (dispctx->blend_end) dispctx->blend_end(userdata); } @@ -10637,6 +10687,23 @@ static void ozone_draw_footer( 1.0f, false); + /* > Scan entry */ + if (scan_enabled) + gfx_display_draw_text( + ozone->fonts.footer.font, + ozone->footer_labels.scan.str, + scan_x + icon_size + icon_padding_half, + footer_text_y, + video_width, + video_height, + ozone->theme->text_rgba, + TEXT_ALIGN_LEFT, + 1.0f, + false, + 1.0f, + false); + + /* Core title or Switch icon */ if (menu_core_enable) { diff --git a/msg_hash.h b/msg_hash.h index df27832a32..339559528c 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -2920,6 +2920,7 @@ enum msg_hash_enums MENU_LABEL(CUSTOM_RATIO), MENU_LABEL(HELP), MENU_ENUM_LABEL_VALUE_CLEAR_SETTING, + MENU_ENUM_LABEL_VALUE_SCAN_ENTRY, MENU_LABEL(CHEAT_DATABASE_PATH), MENU_LABEL(CURSOR_DIRECTORY), MENU_LABEL(OSK_OVERLAY_DIRECTORY),