ui: simplified Image Information code and made it fully display for

systems with many image devices. [Fabio Priuli]

out of whatsnew: compare old and new with a system like smssdisp
to see what the "fully display" refers to ;-)
This commit is contained in:
etabeta78 2015-01-12 22:46:22 +01:00
parent e0f73c58ae
commit d40ca7e901
2 changed files with 35 additions and 117 deletions

View File

@ -42,9 +42,12 @@ ui_menu_image_info::~ui_menu_image_info()
void ui_menu_image_info::populate()
{
astring tempstring;
image_info_astring(machine(), tempstring);
item_append(tempstring, NULL, MENU_FLAG_MULTILINE, NULL);
item_append(machine().system().description, NULL, MENU_FLAG_DISABLE, NULL);
item_append("", NULL, MENU_FLAG_DISABLE, NULL);
image_interface_iterator iter(machine().root_device());
for (device_image_interface *image = iter.first(); image != NULL; image = iter.next())
image_info(image);
}
@ -60,129 +63,44 @@ void ui_menu_image_info::handle()
//-------------------------------------------------
// stripspace
// image_info - display image info for a specific
// image interface device
//-------------------------------------------------
static char *stripspace(const char *src)
void ui_menu_image_info::image_info(device_image_interface *image)
{
static char buff[512];
if( src )
if (image->exists())
{
char *dst;
while( *src && isspace(*src) )
src++;
strcpy(buff, src);
dst = buff + strlen(buff);
while( dst >= buff && isspace(*--dst) )
*dst = '\0';
return buff;
}
return NULL;
}
// display device type and filename
item_append(image->brief_instance_name(), image->basename(), 0, NULL);
//-------------------------------------------------
// strip_extension
//-------------------------------------------------
static char *strip_extension(const char *filename)
{
char *newname;
char *c;
// NULL begets NULL
if (!filename)
return NULL;
// allocate space for it
newname = (char *) malloc(strlen(filename) + 1);
if (!newname)
return NULL;
// copy in the name
strcpy(newname, filename);
// search backward for a period, failing if we hit a slash or a colon
for (c = newname + strlen(newname) - 1; c >= newname; c--)
{
// if we hit a period, NULL terminate and break
if (*c == '.')
// if image has been loaded through softlist, let's add some more info
if (image->software_entry())
{
*c = 0;
break;
}
astring string;
// if we hit a slash or colon just stop
if (*c == '\\' || *c == '/' || *c == ':')
break;
}
return newname;
}
//-------------------------------------------------
// image_info_astring - populate an allocated
// string with the image info text
//-------------------------------------------------
void ui_menu_image_info::image_info_astring(running_machine &machine, astring &string)
{
string.printf("%s\n\n", machine.system().description);
#if 0
if (mess_ram_size > 0)
{
char buf2[RAM_STRING_BUFLEN];
string.catprintf("RAM: %s\n\n", ram_string(buf2, mess_ram_size));
}
#endif
image_interface_iterator iter(machine.root_device());
for (device_image_interface *image = iter.first(); image != NULL; image = iter.next())
{
const char *name = image->filename();
if (name != NULL)
{
const char *base_filename;
const char *info;
char *base_filename_noextension;
base_filename = image->basename();
base_filename_noextension = strip_extension(base_filename);
// display device type and filename
string.catprintf("%s: %s\n", image->device().name(), base_filename);
// display long filename, if present and doesn't correspond to name
info = image->longname();
if (info && (!base_filename_noextension || core_stricmp(info, base_filename_noextension)))
string.catprintf("%s\n", info);
// display manufacturer, if available
info = image->manufacturer();
if (info != NULL)
{
string.catprintf("%s", info);
info = stripspace(image->year());
if (info && *info)
string.catprintf(", %s", info);
string.catprintf("\n");
}
// display long filename
item_append(image->longname(), "", MENU_FLAG_DISABLE, NULL);
// display manufacturer and year
string.catprintf("%s, %s", image->manufacturer(), image->year());
item_append(string, "", MENU_FLAG_DISABLE, NULL);
// display supported information, if available
switch(image->supported()) {
case SOFTWARE_SUPPORTED_NO : string.catprintf("Not supported\n"); break;
case SOFTWARE_SUPPORTED_PARTIAL : string.catprintf("Partially supported\n"); break;
default : break;
switch (image->supported())
{
case SOFTWARE_SUPPORTED_NO:
item_append("Not supported", "", MENU_FLAG_DISABLE, NULL);
break;
case SOFTWARE_SUPPORTED_PARTIAL:
item_append("Partially supported", "", MENU_FLAG_DISABLE, NULL);
break;
default:
break;
}
if (base_filename_noextension != NULL)
free(base_filename_noextension);
}
else
{
string.catprintf("%s: ---\n", image->device().name());
}
}
else
item_append(image->brief_instance_name(), "[empty]", 0, NULL);
item_append("", NULL, MENU_FLAG_DISABLE, NULL);
}

View File

@ -23,7 +23,7 @@ public:
virtual void handle();
private:
void image_info_astring(running_machine &machine, astring &string);
void image_info(device_image_interface *image);
};
#endif // __UI_IMGINFO_H__