summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/ui/swlist.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/ui/swlist.c')
-rw-r--r--src/emu/ui/swlist.c98
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;
}
- }
- }
-
}