diff --git a/include/dbg/debug_menu_entries.h b/include/dbg/debug_menu_entries.h new file mode 100644 index 0000000..b820d7e --- /dev/null +++ b/include/dbg/debug_menu_entries.h @@ -0,0 +1,13 @@ +#ifndef _DEBUG_MENU_ENTRIES_H +#define _DEBUG_MENU_ENTRIES_H + +#include "typeDefs.h" + +class vertical_menu; + +/** + * @brief This function constructs the actual debug menu entries and fills the provided menu with them. + */ +void fill_debug_menu_with_entries(vertical_menu &menu, u16 *charset); + +#endif \ No newline at end of file diff --git a/source/dbg/debug_menu.cpp b/source/dbg/debug_menu.cpp index 44fb3c2..69fd559 100644 --- a/source/dbg/debug_menu.cpp +++ b/source/dbg/debug_menu.cpp @@ -1,89 +1,12 @@ #include "dbg/debug_menu.h" #include "dbg/debug_menu_functions.h" -#include "pokemon_data.h" -#include "text_engine.h" +#include "dbg/debug_menu_entries.h" #include "sprite_data.h" #include "background_engine.h" #include "vertical_menu_cursor_handler.h" #include -static const option_data toggle_options[2] = { - { - .text = "Off", - .value = 0 - }, - { - .text = "On", - .value = 1 - } -}; - -static const option_data custom_options[] = { - { - .text = "One", - .value = 1 - }, - { - .text = "Two", - .value = 2 - }, - { - .text = "Three", - .value = 3 - } -}; - -/** - * @brief This helper function makes it easy to define a multiple choice debug row. - */ -static debug_menu_row_widget define_debug_choice_row(const u16 *charset, const char *labelText, on_execute_callback option_activate_callback, const option_data *options_metadata, u8 num_options, bool should_delete_options, u8 default_option_index) -{ - const debug_menu_row_data row_data = { - .charset = charset, - .labelText = labelText, - .option_section = { - .num_options = num_options, - .options = options_metadata, - .on_option_activate = option_activate_callback, - .selected_option_index = default_option_index, - .should_delete_on_destruct = should_delete_options - }, - .on_execute = nullptr, - .user_param = 0 - }; - return debug_menu_row_widget(row_data); -} - -/** - * @brief This helper function makes it easy to define a toggle row. - */ -static debug_menu_row_widget define_toggle_row(const u16 *charset, const char* labelText, on_execute_callback on_toggle_callback, bool default_value) -{ - return define_debug_choice_row(charset, labelText, on_toggle_callback, toggle_options, 2, false, default_value ? 1 : 0); -} - -/** - * @brief This helper function makes it easy to define a row that executes a function when you select it and press A. - */ -static debug_menu_row_widget define_executable_row(const u16 *charset, const char* labelText, on_execute_callback on_execute, unsigned user_param) -{ - const debug_menu_row_data row_data = { - .charset = charset, - .labelText = labelText, - .option_section = { - .num_options = 0, - .options = nullptr, - .on_option_activate = nullptr, - .selected_option_index = 0, - .should_delete_on_destruct = false - }, - .on_execute = on_execute, - .user_param = user_param - }; - return debug_menu_row_widget(row_data); -} - void show_debug_menu() { u16 charset[256]; @@ -98,11 +21,6 @@ void show_debug_menu() obj_unhide(toggle_arrow_left, 0); - debug_menu_row_widget row_widget_default_off = define_toggle_row(charset, "Def_Off", dbg_menu_print_number, false); - debug_menu_row_widget row_widget_default_on = define_toggle_row(charset, "Def_On", dbg_menu_print_number, true); - debug_menu_row_widget row_widget_custom_options = define_debug_choice_row(charset, "Custom", dbg_menu_print_number, custom_options, 3, false, 1); - debug_menu_row_widget row_widget_executable = define_executable_row(charset, "Exec", dbg_menu_print_number, 128); - const vertical_menu_settings menu_settings = { .x = 20, .y = 0, @@ -121,14 +39,8 @@ void show_debug_menu() vertical_menu_cursor_handler cursor_handler(cursor_offset_x, cursor_offset_y); vertical_menu debug_menu(menu_settings); - i_item_widget* item_widgets[] = { - &row_widget_default_off, - &row_widget_default_on, - &row_widget_custom_options, - &row_widget_executable - }; debug_menu.set_state_changed_handler(&cursor_handler); - debug_menu.add_item_widgets(item_widgets, sizeof(item_widgets) / sizeof(item_widgets[0])); + fill_debug_menu_with_entries(debug_menu, charset); debug_menu.show(); debug_menu.run(); diff --git a/source/dbg/debug_menu_entries.cpp b/source/dbg/debug_menu_entries.cpp new file mode 100644 index 0000000..d890f5c --- /dev/null +++ b/source/dbg/debug_menu_entries.cpp @@ -0,0 +1,97 @@ +#include "dbg/debug_menu.h" +#include "dbg/debug_menu_entries.h" +#include "dbg/debug_menu_functions.h" +#include "vertical_menu.h" + +static const option_data toggle_options[2] = { + { + .text = "Off", + .value = 0 + }, + { + .text = "On", + .value = 1 + } +}; + +static const option_data custom_options[] = { + { + .text = "One", + .value = 1 + }, + { + .text = "Two", + .value = 2 + }, + { + .text = "Three", + .value = 3 + } +}; + +/** + * @brief This helper function makes it easy to define a multiple choice debug row. + */ +static debug_menu_row_widget define_debug_choice_row(const u16 *charset, const char *labelText, on_execute_callback option_activate_callback, const option_data *options_metadata, u8 num_options, bool should_delete_options, u8 default_option_index) +{ + const debug_menu_row_data row_data = { + .charset = charset, + .labelText = labelText, + .option_section = { + .num_options = num_options, + .options = options_metadata, + .on_option_activate = option_activate_callback, + .selected_option_index = default_option_index, + .should_delete_on_destruct = should_delete_options + }, + .on_execute = nullptr, + .user_param = 0 + }; + return debug_menu_row_widget(row_data); +} + +/** + * @brief This helper function makes it easy to define a toggle row. + */ +static debug_menu_row_widget define_toggle_row(const u16 *charset, const char* labelText, on_execute_callback on_toggle_callback, bool default_value) +{ + return define_debug_choice_row(charset, labelText, on_toggle_callback, toggle_options, 2, false, default_value ? 1 : 0); +} + +/** + * @brief This helper function makes it easy to define a row that executes a function when you select it and press A. + */ +static debug_menu_row_widget define_executable_row(const u16 *charset, const char* labelText, on_execute_callback on_execute, unsigned user_param) +{ + const debug_menu_row_data row_data = { + .charset = charset, + .labelText = labelText, + .option_section = { + .num_options = 0, + .options = nullptr, + .on_option_activate = nullptr, + .selected_option_index = 0, + .should_delete_on_destruct = false + }, + .on_execute = on_execute, + .user_param = user_param + }; + return debug_menu_row_widget(row_data); +} + +void fill_debug_menu_with_entries(vertical_menu &menu, u16 *charset) +{ + debug_menu_row_widget row_widget_default_off = define_toggle_row(charset, "Def_Off", dbg_menu_print_number, false); + debug_menu_row_widget row_widget_default_on = define_toggle_row(charset, "Def_On", dbg_menu_print_number, true); + debug_menu_row_widget row_widget_custom_options = define_debug_choice_row(charset, "Custom", dbg_menu_print_number, custom_options, 3, false, 1); + debug_menu_row_widget row_widget_executable = define_executable_row(charset, "Exec", dbg_menu_print_number, 128); + + i_item_widget* item_widgets[] = { + &row_widget_default_off, + &row_widget_default_on, + &row_widget_custom_options, + &row_widget_executable + }; + + menu.add_item_widgets(item_widgets, sizeof(item_widgets) / sizeof(item_widgets[0])); +} \ No newline at end of file