diff --git a/src/emu/ui/imgcntrl.c b/src/emu/ui/imgcntrl.c index 16f88210005..d16cdf5638f 100644 --- a/src/emu/ui/imgcntrl.c +++ b/src/emu/ui/imgcntrl.c @@ -237,16 +237,25 @@ void ui_menu_control_device_image::handle() case SELECT_OTHER_PART: switch(submenu_result) { - case ui_menu_software_parts::T_ENTRY: { + case ui_menu_software_parts::T_ENTRY: load_software_part(); break; - } case ui_menu_software_parts::T_FMGR: state = START_FILE; handle(); break; + case ui_menu_software_parts::T_EMPTY: + image->unload(); + ui_menu::stack_pop(machine()); + break; + + case ui_menu_software_parts::T_SWLIST: + state = START_SOFTLIST; + handle(); + break; + case -1: // return to system ui_menu::stack_pop(machine()); break; diff --git a/src/emu/ui/swlist.c b/src/emu/ui/swlist.c index c864ff560e5..95c4a489098 100644 --- a/src/emu/ui/swlist.c +++ b/src/emu/ui/swlist.c @@ -30,13 +30,13 @@ // ctor //------------------------------------------------- -ui_menu_software_parts::ui_menu_software_parts(running_machine &machine, render_container *container, const software_info *info, const char *interface, const software_part **part, bool opt_fmgr, int *result) +ui_menu_software_parts::ui_menu_software_parts(running_machine &machine, render_container *container, const software_info *info, const char *interface, const software_part **part, bool other_opt, int *result) : ui_menu(machine, container) { m_info = info; m_interface = interface; m_selected_part = part; - m_opt_fmgr = opt_fmgr; + m_other_opt = other_opt; m_result = result; } @@ -56,6 +56,25 @@ ui_menu_software_parts::~ui_menu_software_parts() void ui_menu_software_parts::populate() { + if (m_other_opt) + { + software_part_menu_entry *entry1 = (software_part_menu_entry *) m_pool_alloc(sizeof(*entry1)); + entry1->type = T_EMPTY; + entry1->part = 0; + item_append("[empty slot]", 0, 0, entry1); + + software_part_menu_entry *entry2 = (software_part_menu_entry *) m_pool_alloc(sizeof(*entry2)); + entry2->type = T_FMGR; + entry2->part = 0; + item_append("[file manager]", 0, 0, entry2); + + + software_part_menu_entry *entry3 = (software_part_menu_entry *) m_pool_alloc(sizeof(*entry3)); + entry3->type = T_SWLIST; + entry3->part = 0; + item_append("[software list]", 0, 0, entry3); + } + for (const software_part *swpart = m_info->first_part(); swpart != NULL; swpart = swpart->next()) { if (swpart->matches_interface(m_interface)) @@ -71,14 +90,6 @@ void ui_menu_software_parts::populate() item_append(m_info->shortname(), menu_part_name.cstr(), 0, entry); } } - - if (m_opt_fmgr) - { - software_part_menu_entry *entry = (software_part_menu_entry *) m_pool_alloc(sizeof(*entry)); - entry->type = T_FMGR; - entry->part = 0; - item_append("[file manager]", 0, 0, entry); - } } diff --git a/src/emu/ui/swlist.h b/src/emu/ui/swlist.h index 1d0edc80d1e..8d234e11ee8 100644 --- a/src/emu/ui/swlist.h +++ b/src/emu/ui/swlist.h @@ -16,8 +16,8 @@ class ui_menu_software_parts : public ui_menu { public: - enum { T_ENTRY, T_FMGR }; - ui_menu_software_parts(running_machine &machine, render_container *container, const software_info *info, const char *interface, const software_part **part, bool opt_fmgr, int *result); + enum { T_EMPTY, T_FMGR, T_SWLIST, T_ENTRY, }; + ui_menu_software_parts(running_machine &machine, render_container *container, const software_info *info, const char *interface, const software_part **part, bool other_opt, int *result); virtual ~ui_menu_software_parts(); virtual void populate(); virtual void handle(); @@ -32,7 +32,7 @@ private: const software_info * m_info; const char * m_interface; const software_part ** m_selected_part; - bool m_opt_fmgr; + bool m_other_opt; int * m_result; };