diff options
Diffstat (limited to 'src/emu/ui/swlist.c')
-rw-r--r-- | src/emu/ui/swlist.c | 98 |
1 files changed, 29 insertions, 69 deletions
diff --git a/src/emu/ui/swlist.c b/src/emu/ui/swlist.c index 454ebb06a97..3eaf3908830 100644 --- a/src/emu/ui/swlist.c +++ b/src/emu/ui/swlist.c @@ -56,23 +56,19 @@ ui_menu_software_parts::~ui_menu_software_parts() void ui_menu_software_parts::populate() { - for (const software_part *swpart = software_find_part(m_info, NULL, NULL); swpart != NULL; swpart = software_part_next(swpart)) + for (const software_part *swpart = m_info->first_part(); swpart != NULL; swpart = swpart->next()) { - if (softlist_contain_interface(m_interface, swpart->interface_)) + if (swpart->matches_interface(m_interface)) { software_part_menu_entry *entry = (software_part_menu_entry *) m_pool_alloc(sizeof(*entry)); // check if the available parts have specific part_id to be displayed (e.g. "Map Disc", "Bonus Disc", etc.) // if not, we simply display "part_name"; if yes we display "part_name (part_id)" - astring menu_part_name(swpart->name); - if (software_part_get_feature(swpart, "part_id") != NULL) - { - menu_part_name.cat(" ("); - menu_part_name.cat(software_part_get_feature(swpart, "part_id")); - menu_part_name.cat(")"); - } + astring menu_part_name(swpart->name()); + if (swpart->feature("part_id") != NULL) + menu_part_name.cat(" (").cat(swpart->feature("part_id")).cat(")"); entry->type = T_ENTRY; entry->part = swpart; - item_append(m_info->shortname, menu_part_name.cstr(), 0, entry); + item_append(m_info->shortname(), menu_part_name.cstr(), 0, entry); } } @@ -113,7 +109,7 @@ void ui_menu_software_parts::handle() // ctor //------------------------------------------------- -ui_menu_software_list::ui_menu_software_list(running_machine &machine, render_container *container, const software_list_device *swlist, const char *interface, astring &result) +ui_menu_software_list::ui_menu_software_list(running_machine &machine, render_container *container, software_list_device *swlist, const char *interface, astring &result) : ui_menu(machine, container), m_result(result) { m_swlist = swlist; @@ -181,17 +177,17 @@ ui_menu_software_list::entry_info *ui_menu_software_list::append_software_entry( bool entry_updated = FALSE; // check if at least one of the parts has the correct interface and add a menu entry only in this case - for (const software_part *swpart = software_find_part(swinfo, NULL, NULL); swpart != NULL; swpart = software_part_next(swpart)) + for (const software_part *swpart = swinfo->first_part(); swpart != NULL; swpart = swpart->next()) { - if ((softlist_contain_interface(m_interface, swpart->interface_)) && is_software_compatible(swpart, m_swlist)) + if (swpart->matches_interface(m_interface) && swpart->is_compatible(*m_swlist)) { entry_updated = TRUE; // allocate a new entry entry = (entry_info *) m_pool_alloc(sizeof(*entry)); memset(entry, 0, sizeof(*entry)); - entry->short_name = pool_strdup(swinfo->shortname); - entry->long_name = pool_strdup(swinfo->longname); + entry->short_name = pool_strdup(swinfo->shortname()); + entry->long_name = pool_strdup(swinfo->longname()); break; } } @@ -219,16 +215,9 @@ ui_menu_software_list::entry_info *ui_menu_software_list::append_software_entry( void ui_menu_software_list::populate() { - const software_list *list = software_list_open(machine().options(), m_swlist->list_name(), false, NULL); - // build up the list of entries for the menu - if (list) - { - for (const software_info *swinfo = software_list_find(list, "*", NULL); swinfo != NULL; swinfo = software_list_find(list, "*", swinfo)) - append_software_entry(swinfo); - - software_list_close(list); - } + for (const software_info *swinfo = m_swlist->first_software_info(); swinfo != NULL; swinfo = swinfo->next()) + append_software_entry(swinfo); // add an entry to change ordering item_append("Switch Item Ordering", NULL, 0, (void *)1); @@ -378,7 +367,7 @@ void ui_menu_software_list::handle() // ctor //------------------------------------------------- -ui_menu_software::ui_menu_software(running_machine &machine, render_container *container, const char *interface, const software_list_device **result) +ui_menu_software::ui_menu_software(running_machine &machine, render_container *container, const char *interface, software_list_device **result) : ui_menu(machine, container) { m_interface = interface; @@ -401,68 +390,39 @@ ui_menu_software::~ui_menu_software() void ui_menu_software::populate() { - bool haveCompatible = false; + bool have_compatible = false; // Add original software lists for this system software_list_device_iterator iter(machine().config().root_device()); - for (const software_list_device *swlist = iter.first(); swlist != NULL; swlist = iter.next()) - { - if (swlist->list_type() == SOFTWARE_LIST_ORIGINAL_SYSTEM) - { - const software_list *list = software_list_open(machine().options(), swlist->list_name(), false, NULL); - - if (list && m_interface) + for (software_list_device *swlistdev = iter.first(); swlistdev != NULL; swlistdev = iter.next()) + if (swlistdev->list_type() == SOFTWARE_LIST_ORIGINAL_SYSTEM) + if (swlistdev->first_software_info() != NULL && m_interface != NULL) { bool found = false; - for (const software_info *swinfo = software_list_find(list, "*", NULL); swinfo != NULL; swinfo = software_list_find(list, "*", swinfo)) - { - const software_part *part = software_find_part(swinfo, NULL, NULL); - if (softlist_contain_interface(m_interface, part->interface_)) + for (const software_info *swinfo = swlistdev->first_software_info(); swinfo != NULL; swinfo = swinfo->next()) + if (swinfo->first_part()->matches_interface(m_interface)) found = true; - } if (found) - { - item_append(list->description, NULL, 0, (void *)swlist); - } - - software_list_close(list); + item_append(swlistdev->description(), NULL, 0, (void *)swlistdev); } - } - } // add compatible software lists for this system - for (const software_list_device *swlist = iter.first(); swlist != NULL; swlist = iter.next()) - { - if (swlist->list_type() == SOFTWARE_LIST_COMPATIBLE_SYSTEM) - { - const software_list *list = software_list_open(machine().options(), swlist->list_name(), false, NULL); - - if (list && m_interface) + for (software_list_device *swlistdev = iter.first(); swlistdev != NULL; swlistdev = iter.next()) + if (swlistdev->list_type() == SOFTWARE_LIST_COMPATIBLE_SYSTEM) + if (swlistdev->first_software_info() != NULL && m_interface != NULL) { bool found = false; - for (const software_info *swinfo = software_list_find(list, "*", NULL); swinfo != NULL; swinfo = software_list_find(list, "*", swinfo)) - { - const software_part *part = software_find_part(swinfo, NULL, NULL); - if (softlist_contain_interface(m_interface, part->interface_)) - { + for (const software_info *swinfo = swlistdev->first_software_info(); swinfo != NULL; swinfo = swinfo->next()) + if (swinfo->first_part()->matches_interface(m_interface)) found = true; - } - } - if (found) { - if (!haveCompatible) + if (!have_compatible) item_append("[compatible lists]", NULL, MENU_FLAG_DISABLE, NULL); - - item_append(list->description, NULL, 0, (void *)swlist); + item_append(swlistdev->description(), NULL, 0, (void *)swlistdev); } - - haveCompatible = true; - software_list_close(list); + have_compatible = true; } - } - } - } |