Make demo_selection_listbox inherit from listbox

This commit is contained in:
Kp 2020-12-27 22:03:09 +00:00
parent c7f5e91007
commit 165d8c9d1c

View file

@ -834,6 +834,17 @@ int DoMenu()
namespace { namespace {
struct demo_selection_listbox : listbox
{
demo_selection_listbox(unsigned nitems, PHYSFSX_uncounted_list &&physfs_list_strings, grs_canvas &canvas) :
listbox(0, nitems, const_cast<const char **>(physfs_list_strings.get()), menu_title{TXT_SELECT_DEMO}, canvas, 1),
physfs_list_storage(std::move(physfs_list_strings))
{
}
PHYSFSX_uncounted_list physfs_list_storage;
virtual window_event_result callback_handler(const d_event &, window_event_result default_return_value) override;
};
static window_event_result demo_menu_keycommand( listbox *lb,const d_event &event ) static window_event_result demo_menu_keycommand( listbox *lb,const d_event &event )
{ {
const char **items = listbox_get_items(*lb); const char **items = listbox_get_items(*lb);
@ -886,26 +897,24 @@ static window_event_result demo_menu_keycommand( listbox *lb,const d_event &even
} }
break; break;
} }
return window_event_result::ignored; return window_event_result::ignored;
} }
static window_event_result demo_menu_handler(listbox *lb, const d_event &event, char **items) window_event_result demo_selection_listbox::callback_handler(const d_event &event, window_event_result)
{ {
switch (event.type) switch (event.type)
{ {
case EVENT_KEY_COMMAND: case EVENT_KEY_COMMAND:
return demo_menu_keycommand(lb, event); return demo_menu_keycommand(this, event);
case EVENT_NEWMENU_SELECTED: case EVENT_NEWMENU_SELECTED:
{ {
auto &citem = static_cast<const d_select_event &>(event).citem; auto &citem = static_cast<const d_select_event &>(event).citem;
if (citem < 0) if (citem < 0)
return window_event_result::ignored; // shouldn't happen return window_event_result::ignored; // shouldn't happen
newdemo_start_playback(items[citem]); newdemo_start_playback(item[citem]);
return window_event_result::handled; // stay in demo selector return window_event_result::handled; // stay in demo selector
} }
case EVENT_WINDOW_CLOSE: case EVENT_WINDOW_CLOSE:
PHYSFS_freeList(items);
break; break;
default: default:
break; break;
@ -928,12 +937,8 @@ int select_demo()
for (NumItems = 0; list[NumItems] != NULL; NumItems++) {} for (NumItems = 0; list[NumItems] != NULL; NumItems++) {}
// Sort by name auto lb = window_create<demo_selection_listbox>(NumItems, std::move(list), grd_curscreen->sc_canvas);
qsort(list.get(), NumItems, sizeof(char *), string_array_sort_func); (void)lb;
auto clist = const_cast<const char **>(list.get());
newmenu_listbox1(menu_title{TXT_SELECT_DEMO}, NumItems, clist, 1, 0, demo_menu_handler, list.release());
return 1; return 1;
} }