diff --git a/common/main/newmenu.h b/common/main/newmenu.h index f25eaa1ad..aa0764d52 100644 --- a/common/main/newmenu.h +++ b/common/main/newmenu.h @@ -101,6 +101,12 @@ static inline int newmenu_do( const char * title, const char * subtitle, int nit return newmenu_do2( title, subtitle, nitems, item, subfunction, userdata, 0, NULL ); } +template +static inline int newmenu_do(const char *title, const char *subtitle, array &items, typename newmenu_subfunction_t::type subfunction, T *userdata) +{ + return newmenu_do(title, subtitle, items.size(), &items.front(), subfunction, userdata); +} + // Same as above, only you can pass through what item is initially selected. template static inline int newmenu_do1( const char * title, const char * subtitle, int nitems, newmenu_item * item, typename newmenu_subfunction_t::type subfunction, T *userdata, int citem ) diff --git a/d2x-rebirth/main/escort.cpp b/d2x-rebirth/main/escort.cpp index cb44c762b..fced5486b 100644 --- a/d2x-rebirth/main/escort.cpp +++ b/d2x-rebirth/main/escort.cpp @@ -351,7 +351,7 @@ void change_guidebot_name() array m{ nm_item_input(text), }; - item = newmenu_do(NULL, "Enter Guide-bot name:", m.size(), &m[0], unused_newmenu_subfunction, unused_newmenu_userdata ); + item = newmenu_do(NULL, "Enter Guide-bot name:", m, unused_newmenu_subfunction, unused_newmenu_userdata ); if (item != -1) { PlayerCfg.GuidebotName = PlayerCfg.GuidebotNameReal = text; diff --git a/similar/main/gamecntl.cpp b/similar/main/gamecntl.cpp index e43736b0a..a0dee143e 100644 --- a/similar/main/gamecntl.cpp +++ b/similar/main/gamecntl.cpp @@ -533,7 +533,7 @@ static int HandleDemoKey(int key) nm_item_input(filename), }; filename[0] = '\0'; - c = newmenu_do( NULL, NULL, m.size(), m.data(), unused_newmenu_subfunction, unused_newmenu_userdata); + c = newmenu_do( NULL, NULL, m, unused_newmenu_subfunction, unused_newmenu_userdata); if (c == -2) break; strcat(filename, DEMO_EXT); @@ -542,7 +542,7 @@ static int HandleDemoKey(int key) nm_item_text("strip how many bytes"), nm_item_input(num), }; - c = newmenu_do( NULL, NULL, m.size(), m.data(), unused_newmenu_subfunction, unused_newmenu_userdata); + c = newmenu_do( NULL, NULL, m, unused_newmenu_subfunction, unused_newmenu_userdata); if (c == -2) break; how_many = atoi(num); @@ -1339,7 +1339,7 @@ static window_event_result HandleTestKey(int key) array m{ nm_item_input(text), }; - item = newmenu_do( NULL, "Briefing to play?", m.size(), &m[0], unused_newmenu_subfunction, unused_newmenu_userdata); + item = newmenu_do( NULL, "Briefing to play?", m, unused_newmenu_subfunction, unused_newmenu_userdata); if (item != -1) { do_briefing_screens(text,1); } @@ -1601,7 +1601,7 @@ static window_event_result FinalCheats(int key) array m{ nm_item_input(text), }; - item = newmenu_do( NULL, TXT_WARP_TO_LEVEL, m.size(), &m[0], unused_newmenu_subfunction, unused_newmenu_userdata); + item = newmenu_do( NULL, TXT_WARP_TO_LEVEL, m, unused_newmenu_subfunction, unused_newmenu_userdata); if (item != -1) { new_level_num = atoi(m[0].text); if (new_level_num!=0 && new_level_num>=0 && new_level_num<=Last_level) { diff --git a/similar/main/gamesave.cpp b/similar/main/gamesave.cpp index 5b861ef4f..67b815e8e 100644 --- a/similar/main/gamesave.cpp +++ b/similar/main/gamesave.cpp @@ -1421,7 +1421,7 @@ int get_level_name() nm_item_input(Current_level_name.next()), }; - return newmenu_do( NULL, "Enter mine name", m.size(), m.data(), unused_newmenu_subfunction, unused_newmenu_userdata ) >= 0; + return newmenu_do( NULL, "Enter mine name", m, unused_newmenu_subfunction, unused_newmenu_userdata ) >= 0; } #endif diff --git a/similar/main/gameseq.cpp b/similar/main/gameseq.cpp index 2f5eccfcc..3166a81af 100644 --- a/similar/main/gameseq.cpp +++ b/similar/main/gameseq.cpp @@ -958,7 +958,7 @@ static void do_screen_message(const char *msg) array nm_message_items{ nm_item_menu(TXT_OK), }; - newmenu_do( NULL, msg, nm_message_items.size(), &nm_message_items[0], draw_endlevel_background, static_cast(&background)); + newmenu_do( NULL, msg, nm_message_items, draw_endlevel_background, static_cast(&background)); gr_free_bitmap_data(background); } diff --git a/similar/main/kmatrix.cpp b/similar/main/kmatrix.cpp index 228893563..916a569b4 100644 --- a/similar/main/kmatrix.cpp +++ b/similar/main/kmatrix.cpp @@ -278,7 +278,7 @@ static window_event_result kmatrix_handler(window *wind,const d_event &event, km nm_item_menu(TXT_YES), nm_item_menu(TXT_NO), }; - choice = newmenu_do( NULL, TXT_ABORT_GAME, nm_message_items.size(), &nm_message_items[0], km->network ? multi_endlevel_poll2 : unused_newmenu_subfunction, unused_newmenu_userdata ); + choice = newmenu_do( NULL, TXT_ABORT_GAME, nm_message_items, km->network ? multi_endlevel_poll2 : unused_newmenu_subfunction, unused_newmenu_userdata ); } if (choice==0) diff --git a/similar/main/menu.cpp b/similar/main/menu.cpp index c6873ae9c..1b0242e26 100644 --- a/similar/main/menu.cpp +++ b/similar/main/menu.cpp @@ -206,7 +206,7 @@ try_again: nm_item_input(text.buffer()), }; Newmenu_allowed_chars = playername_allowed_chars; - x = newmenu_do( NULL, TXT_ENTER_PILOT_NAME, m.size(), &m[0], unused_newmenu_subfunction, unused_newmenu_userdata ); + x = newmenu_do( NULL, TXT_ENTER_PILOT_NAME, m, unused_newmenu_subfunction, unused_newmenu_userdata ); } Newmenu_allowed_chars = NULL; @@ -829,7 +829,7 @@ int do_new_game_menu() nm_item_text(info_text), nm_item_input(num_text), }; - choice = newmenu_do( NULL, TXT_SELECT_START_LEV, m.size(), m.data(), unused_newmenu_subfunction, unused_newmenu_userdata ); + choice = newmenu_do( NULL, TXT_SELECT_START_LEV, m, unused_newmenu_subfunction, unused_newmenu_userdata ); if (choice==-1 || m[1].text[0]==0) return 0; @@ -1394,7 +1394,7 @@ static int select_file_handler(listbox *menu,const d_event &event, browser *b) array m{ nm_item_input(text), }; - rval = newmenu_do( NULL, "Enter drive letter", m.size(), &m[0], unused_newmenu_subfunction, unused_newmenu_userdata ); + rval = newmenu_do( NULL, "Enter drive letter", m, unused_newmenu_subfunction, unused_newmenu_userdata ); text[1] = '\0'; snprintf(newpath, sizeof(char)*PATH_MAX, "%s:%s", text, sep); if (!rval && text[0]) diff --git a/similar/main/multi.cpp b/similar/main/multi.cpp index 44aab371f..546401f4c 100644 --- a/similar/main/multi.cpp +++ b/similar/main/multi.cpp @@ -1472,7 +1472,7 @@ multi_send_message_dialog(void) array m{ nm_item_input(Network_message), }; - choice = newmenu_do( NULL, TXT_SEND_MESSAGE, m.size(), &m[0], unused_newmenu_subfunction, unused_newmenu_userdata ); + choice = newmenu_do( NULL, TXT_SEND_MESSAGE, m, unused_newmenu_subfunction, unused_newmenu_userdata ); if ((choice > -1) && (Network_message[0])) { Network_message_reciever = 100; diff --git a/similar/main/net_udp.cpp b/similar/main/net_udp.cpp index 37caf8440..31f99b22f 100644 --- a/similar/main/net_udp.cpp +++ b/similar/main/net_udp.cpp @@ -3865,7 +3865,7 @@ static int net_udp_wait_for_sync(void) while (choice > -1) { timer_update(); - choice=newmenu_do( NULL, TXT_WAIT, m.size(), m.data(), net_udp_sync_poll, unused_newmenu_userdata ); + choice=newmenu_do( NULL, TXT_WAIT, m, net_udp_sync_poll, unused_newmenu_userdata ); } if (Network_status != NETSTAT_PLAYING) @@ -3918,7 +3918,7 @@ static int net_udp_wait_for_requests(void) Players[Player_num].connected = CONNECT_PLAYING; menu: - choice = newmenu_do(NULL, TXT_WAIT, m.size(), m.data(), net_udp_request_poll, unused_newmenu_userdata); + choice = newmenu_do(NULL, TXT_WAIT, m, net_udp_request_poll, unused_newmenu_userdata); if (choice == -1) { @@ -5388,7 +5388,7 @@ int net_udp_show_game_info() nm_item_menu("JOIN GAME"), nm_item_menu("GAME INFO"), }; - c = newmenu_do("WELCOME", rinfo, nm_message_items.size(), &nm_message_items[0], show_game_info_handler, netgame); + c = newmenu_do("WELCOME", rinfo, nm_message_items, show_game_info_handler, netgame); if (c==0) return 1; //else if (c==1) diff --git a/similar/main/newdemo.cpp b/similar/main/newdemo.cpp index e14a6c3dd..587128157 100644 --- a/similar/main/newdemo.cpp +++ b/similar/main/newdemo.cpp @@ -3724,13 +3724,13 @@ try_again: array m{ nm_item_input(filename), }; - exit = newmenu_do( NULL, TXT_SAVE_DEMO_AS, m.size(), &m[0], unused_newmenu_subfunction, unused_newmenu_userdata ); + exit = newmenu_do( NULL, TXT_SAVE_DEMO_AS, m, unused_newmenu_subfunction, unused_newmenu_userdata ); } else if (nd_record_v_no_space == 2) { array m{ nm_item_text(TXT_DEMO_SAVE_NOSPACE), nm_item_input(filename), }; - exit = newmenu_do( NULL, NULL, m.size(), m.data(), unused_newmenu_subfunction, unused_newmenu_userdata ); + exit = newmenu_do( NULL, NULL, m, unused_newmenu_subfunction, unused_newmenu_userdata ); } Newmenu_allowed_chars = NULL; diff --git a/similar/main/scores.cpp b/similar/main/scores.cpp index d701e6a62..f54b0be99 100644 --- a/similar/main/scores.cpp +++ b/similar/main/scores.cpp @@ -243,7 +243,7 @@ void scores_maybe_add_player(int abort_flag) nm_item_text(TXT_COOL_SAYING), nm_item_input(text1), }; - newmenu_do( TXT_HIGH_SCORE, TXT_YOU_PLACED_1ST, m.size(), m.data(), unused_newmenu_subfunction, unused_newmenu_userdata ); + newmenu_do( TXT_HIGH_SCORE, TXT_YOU_PLACED_1ST, m, unused_newmenu_subfunction, unused_newmenu_userdata ); strncpy( scores.cool_saying, text1.data(), COOL_MESSAGE_LEN ); if (strlen(scores.cool_saying)<1) sprintf( scores.cool_saying, "No Comment" );