Add newmenu_do helper for array<newmenu_item, N>

This commit is contained in:
Kp 2015-01-18 01:58:32 +00:00
parent 69bb51a850
commit c6664a45a6
11 changed files with 24 additions and 18 deletions

View file

@ -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 <std::size_t N, typename T>
static inline int newmenu_do(const char *title, const char *subtitle, array<newmenu_item, N> &items, typename newmenu_subfunction_t<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 <typename T>
static inline int newmenu_do1( const char * title, const char * subtitle, int nitems, newmenu_item * item, typename newmenu_subfunction_t<T>::type subfunction, T *userdata, int citem )

View file

@ -351,7 +351,7 @@ void change_guidebot_name()
array<newmenu_item, 1> 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;

View file

@ -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<newmenu_item, 1> 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<newmenu_item, 1> 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) {

View file

@ -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

View file

@ -958,7 +958,7 @@ static void do_screen_message(const char *msg)
array<newmenu_item, 1> 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<grs_bitmap *>(&background));
newmenu_do( NULL, msg, nm_message_items, draw_endlevel_background, static_cast<grs_bitmap *>(&background));
gr_free_bitmap_data(background);
}

View file

@ -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)

View file

@ -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<newmenu_item, 1> 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])

View file

@ -1472,7 +1472,7 @@ multi_send_message_dialog(void)
array<newmenu_item, 1> 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;

View file

@ -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)

View file

@ -3724,13 +3724,13 @@ try_again:
array<newmenu_item, 1> 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<newmenu_item, 2> 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;

View file

@ -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" );