Mercurial > foo_out_sdl
diff foosdk/sdk/foobar2000/SDK/mainmenu.cpp @ 1:20d02a178406 default tip
*: check in everything else
yay
| author | Paper <paper@tflc.us> |
|---|---|
| date | Mon, 05 Jan 2026 02:15:46 -0500 |
| parents | |
| children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/foosdk/sdk/foobar2000/SDK/mainmenu.cpp Mon Jan 05 02:15:46 2026 -0500 @@ -0,0 +1,70 @@ +#include "foobar2000-sdk-pch.h" +#include "menu_helpers.h" + +bool mainmenu_commands::g_execute_dynamic(const GUID & p_guid, const GUID & p_subGuid,service_ptr_t<service_base> p_callback) { + mainmenu_commands::ptr ptr; t_uint32 index; + if (!menu_item_resolver::g_resolve_main_command(p_guid, ptr, index)) return false; + mainmenu_commands_v2::ptr v2; + if (!ptr->service_query_t(v2)) return false; + if (!v2->is_command_dynamic(index)) return false; + bool rv = false; + fb2k::crashOnException([&] { + rv = v2->dynamic_execute(index, p_subGuid, p_callback);; + }, "mainmenu_commands::dynamic_execute"); + return rv; +} +bool mainmenu_commands::g_execute(const GUID & p_guid,service_ptr_t<service_base> p_callback) { + mainmenu_commands::ptr ptr; t_uint32 index; + if (!menu_item_resolver::g_resolve_main_command(p_guid, ptr, index)) return false; + fb2k::crashOnException( [&] { + ptr->execute(index, p_callback); + }, "mainmenu_commands::execute"); + return true; +} + +bool mainmenu_commands::g_find_by_name(const char * p_name,GUID & p_guid) { + pfc::string8_fastalloc temp; + for( auto ptr : enumerate() ) { + const t_uint32 count = ptr->get_command_count(); + for(t_uint32 n=0;n<count;n++) { + ptr->get_name(n,temp); + if (stricmp_utf8(temp,p_name) == 0) { + p_guid = ptr->get_command(n); + return true; + } + } + } + return false; + +} + + +static bool dynamic_execute_recur(mainmenu_node::ptr node, const GUID & subID, service_ptr_t<service_base> callback) { + switch(node->get_type()) { + case mainmenu_node::type_command: + if (subID == node->get_guid()) { + node->execute(callback); return true; + } + break; + case mainmenu_node::type_group: + { + const t_size total = node->get_children_count(); + for(t_size walk = 0; walk < total; ++walk) { + if (dynamic_execute_recur(node->get_child(walk), subID, callback)) return true; + } + } + break; + } + return false; +} + +bool mainmenu_commands_v2::is_command_dynamic(t_uint32 index) { + (void)index; return false; +} +mainmenu_node::ptr mainmenu_commands_v2::dynamic_instantiate(t_uint32 index) { + (void)index; uBugCheck(); +} + +bool mainmenu_commands_v2::dynamic_execute(t_uint32 index, const GUID & subID, service_ptr_t<service_base> callback) { + return dynamic_execute_recur(dynamic_instantiate(index), subID, callback); +}
