diff --git a/common/main/newmenu.h b/common/main/newmenu.h index 2bbeed735..1acac762d 100644 --- a/common/main/newmenu.h +++ b/common/main/newmenu.h @@ -502,7 +502,6 @@ int newmenu_get_citem(newmenu *menu); typedef cstring_tie<5> nm_messagebox_tie; -int nm_messagebox_str(menu_title title, const nm_messagebox_tie &tie, menu_subtitle str); int vnm_messagebox_aN(menu_title title, const nm_messagebox_tie &tie, const char *format, ...) __attribute_format_printf(3, 4); void nm_draw_background(grs_canvas &, int x1, int y1, int x2, int y2); @@ -530,6 +529,16 @@ void nm_draw_background(grs_canvas &, int x1, int y1, int x2, int y2); namespace dcx { +int nm_messagebox_str(menu_title title, const nm_messagebox_tie &tie, menu_subtitle str); + +struct messagebox_newmenu : + std::array, + newmenu +{ + messagebox_newmenu(const menu_title title, const menu_subtitle subtitle, const nm_messagebox_tie &tie, grs_canvas &canvas); + static adjusted_citem create_adjusted_citem(std::array &items, const nm_messagebox_tie &tie); +}; + struct listbox : listbox_layout, window { listbox(int citem, unsigned nitems, const char **item, menu_title title, grs_canvas &canvas, uint8_t allow_abort_flag); diff --git a/similar/main/newmenu.cpp b/similar/main/newmenu.cpp index 036fc0ea7..9e6e3c8c2 100644 --- a/similar/main/newmenu.cpp +++ b/similar/main/newmenu.cpp @@ -1657,13 +1657,25 @@ int (vnm_messagebox_aN)(const menu_title title, const nm_messagebox_tie &tie, co return nm_messagebox_str(title, tie, menu_subtitle{nm_text}); } +namespace dcx { + int nm_messagebox_str(const menu_title title, const nm_messagebox_tie &tie, const menu_subtitle subtitle) { - std::array items; + auto wind = window_create(title, subtitle, tie, grd_curscreen->sc_canvas); + return newmenu::process_until_closed(wind); +} + +messagebox_newmenu::messagebox_newmenu(const menu_title title, const menu_subtitle subtitle, const nm_messagebox_tie &tie, grs_canvas &canvas) : + newmenu(title, subtitle, menu_filename{nullptr}, tiny_mode_flag::normal, tab_processing_flag::ignore, create_adjusted_citem(*this, tie), canvas) +{ +} + +messagebox_newmenu::adjusted_citem messagebox_newmenu::create_adjusted_citem(std::array &items, const nm_messagebox_tie &tie) +{ auto &&item_range = partial_range(items, tie.count()); for (auto &&[i, s] : zip(item_range, tie)) nm_set_item_menu(i, s); - return newmenu_do2(title, subtitle, item_range, unused_newmenu_subfunction, unused_newmenu_userdata); + return adjusted_citem::create(item_range, 0); } // Example listbox callback function... @@ -1689,8 +1701,6 @@ int nm_messagebox_str(const menu_title title, const nm_messagebox_tie &tie, cons #define LB_ITEMS_ON_SCREEN 8 -namespace dcx { - listbox::listbox(int citem, unsigned nitems, const char **item, menu_title title, grs_canvas &canvas, uint8_t allow_abort_flag) : listbox_layout(citem, nitems, item, title), window(canvas, box_x - BORDERX, box_y - title_height - BORDERY, box_w + 2 * BORDERX, height + 2 * BORDERY), allow_abort_flag(allow_abort_flag)