Ejemplo n.º 1
0
void ui_menu_file_manager::populate()
{
	std::string buffer, tmp_inst, tmp_name;
	bool first_entry = true;
	std::string prev_owner;

	if (!m_warnings.empty())
	{
		item_append(m_warnings.c_str(), NULL, MENU_FLAG_DISABLE, NULL);
		item_append("", NULL, MENU_FLAG_DISABLE, NULL);
	}

	// cycle through all devices for this system
	device_iterator iter(machine().root_device());
	tagmap_t<UINT8> devtags;
	for (device_t *dev = iter.first(); dev != NULL; dev = iter.next())
	{
		bool tag_appended = false;
		if (devtags.add(dev->tag(), 1, FALSE) == TMERR_DUPLICATE)
			continue;

		// check whether it owns an image interface
		image_interface_iterator subiter(*dev);
		if (subiter.count() > 0)
		{
			// if so, cycle through all its image interfaces
			image_interface_iterator subiter(*dev);
			for (device_image_interface *scan = subiter.first(); scan != NULL; scan = subiter.next())
			{
				// if it is a children device, and not something further down the device tree, we want it in the menu!
				if (strcmp(scan->device().owner()->tag(), dev->tag()) == 0)
					if (devtags.add(scan->device().tag(), 1, FALSE) != TMERR_DUPLICATE)
					{
						// check whether we already had some devices with the same owner: if not, output the owner tag!
						if (!tag_appended)
						{
							if (first_entry)
								first_entry = false;
							else
								item_append(MENU_SEPARATOR_ITEM, NULL, 0, NULL);
							strprintf(buffer, "[root%s]", dev->tag());
							item_append(buffer.c_str(), NULL, 0, NULL);
							tag_appended = true;
						}
						// finally, append the image interface to the menu
						fill_image_line(scan, tmp_inst, tmp_name);
						item_append(tmp_inst.c_str(), tmp_name.c_str(), 0, (void *)scan);
					}
			}
		}
	}
	item_append(MENU_SEPARATOR_ITEM, NULL, 0, NULL);
	item_append("Reset",  NULL, 0, (void *)1);

	custombottom = machine().ui().get_line_height() + 3.0f * UI_BOX_TB_BORDER;
}
Ejemplo n.º 2
0
void menu_file_manager::populate(float &customtop, float &custombottom)
{
	std::string tmp_inst, tmp_name;
	bool first_entry = true;

	if (!m_warnings.empty())
	{
		item_append(m_warnings, "", FLAG_DISABLE, nullptr);
		item_append("", "", FLAG_DISABLE, nullptr);
	}

	// cycle through all devices for this system
	std::unordered_set<std::string> devtags;
	for (device_t &dev : device_iterator(machine().root_device()))
	{
		bool tag_appended = false;
		if (!devtags.insert(dev.tag()).second)
			continue;

		// check whether it owns an image interface
		image_interface_iterator subiter(dev);
		if (subiter.first() != nullptr)
		{
			// if so, cycle through all its image interfaces
			for (device_image_interface &scan : subiter)
			{
				if (!scan.user_loadable())
					continue;

				// if it is a children device, and not something further down the device tree, we want it in the menu!
				if (strcmp(scan.device().owner()->tag(), dev.tag()) == 0)
					if (devtags.insert(scan.device().tag()).second)
					{
						// check whether we already had some devices with the same owner: if not, output the owner tag!
						if (!tag_appended)
						{
							if (first_entry)
								first_entry = false;
							else
								item_append(menu_item_type::SEPARATOR);
							item_append(string_format("[root%s]", dev.tag()), "", 0, nullptr);
							tag_appended = true;
						}
						// finally, append the image interface to the menu
						fill_image_line(&scan, tmp_inst, tmp_name);
						item_append(tmp_inst, tmp_name, 0, (void *)&scan);
					}
			}
		}
	}
	item_append(menu_item_type::SEPARATOR);
	item_append("Reset", "", 0, (void *)1);

	custombottom = ui().get_line_height() + 3.0f * UI_BOX_TB_BORDER;
}