mirror of
https://github.com/holub/mame
synced 2025-04-23 17:00:53 +03:00
This changes the various submenu results to be bonafide enums rather than just vanilla integers
This commit is contained in:
parent
44fbefc217
commit
411880ac67
@ -44,7 +44,7 @@ namespace ui {
|
||||
// ctor
|
||||
//-------------------------------------------------
|
||||
|
||||
menu_file_selector::menu_file_selector(mame_ui_manager &mui, render_container *container, device_image_interface *image, std::string ¤t_directory, std::string ¤t_file, bool has_empty, bool has_softlist, bool has_create, int *result)
|
||||
menu_file_selector::menu_file_selector(mame_ui_manager &mui, render_container *container, device_image_interface *image, std::string ¤t_directory, std::string ¤t_file, bool has_empty, bool has_softlist, bool has_create, menu_file_selector::result *result)
|
||||
: menu(mui, container)
|
||||
, m_current_directory(current_directory)
|
||||
, m_current_file(current_file)
|
||||
@ -391,18 +391,18 @@ void menu_file_selector::handle()
|
||||
{
|
||||
case SELECTOR_ENTRY_TYPE_EMPTY:
|
||||
// empty slot - unload
|
||||
*m_result = R_EMPTY;
|
||||
*m_result = result::EMPTY;
|
||||
menu::stack_pop(machine());
|
||||
break;
|
||||
|
||||
case SELECTOR_ENTRY_TYPE_CREATE:
|
||||
// create
|
||||
*m_result = R_CREATE;
|
||||
*m_result = result::CREATE;
|
||||
menu::stack_pop(machine());
|
||||
break;
|
||||
|
||||
case SELECTOR_ENTRY_TYPE_SOFTWARE_LIST:
|
||||
*m_result = R_SOFTLIST;
|
||||
*m_result = result::SOFTLIST;
|
||||
menu::stack_pop(machine());
|
||||
break;
|
||||
|
||||
@ -423,7 +423,7 @@ void menu_file_selector::handle()
|
||||
case SELECTOR_ENTRY_TYPE_FILE:
|
||||
// file
|
||||
m_current_file.assign(entry->fullpath);
|
||||
*m_result = R_FILE;
|
||||
*m_result = result::FILE;
|
||||
menu::stack_pop(machine());
|
||||
break;
|
||||
}
|
||||
@ -508,7 +508,7 @@ void menu_file_selector::handle()
|
||||
//-------------------------------------------------
|
||||
|
||||
menu_select_rw::menu_select_rw(mame_ui_manager &mui, render_container *container,
|
||||
bool can_in_place, int *result)
|
||||
bool can_in_place, result *result)
|
||||
: menu(mui, container)
|
||||
{
|
||||
m_can_in_place = can_in_place;
|
||||
@ -532,11 +532,11 @@ menu_select_rw::~menu_select_rw()
|
||||
void menu_select_rw::populate()
|
||||
{
|
||||
item_append(_("Select access mode"), "", FLAG_DISABLE, nullptr);
|
||||
item_append(_("Read-only"), "", 0, (void *)READONLY);
|
||||
item_append(_("Read-only"), "", 0, (void *) result::READONLY);
|
||||
if (m_can_in_place)
|
||||
item_append(_("Read-write"), "", 0, (void *)READWRITE);
|
||||
item_append(_("Read this image, write to another image"), "", 0, (void *)WRITE_OTHER);
|
||||
item_append(_("Read this image, write to diff"), "", 0, (void *)WRITE_DIFF);
|
||||
item_append(_("Read-write"), "", 0, (void *)result::READWRITE);
|
||||
item_append(_("Read this image, write to another image"), "", 0, (void *)result::WRITE_OTHER);
|
||||
item_append(_("Read this image, write to diff"), "", 0, (void *)result::WRITE_DIFF);
|
||||
}
|
||||
|
||||
|
||||
@ -550,7 +550,7 @@ void menu_select_rw::handle()
|
||||
const event *event = process(0);
|
||||
if (event != nullptr && event->iptkey == IPT_UI_SELECT)
|
||||
{
|
||||
*m_result = int(FPTR(event->itemref));
|
||||
*m_result = result(FPTR(event->itemref));
|
||||
menu::stack_pop(machine());
|
||||
}
|
||||
}
|
||||
|
@ -21,8 +21,16 @@ namespace ui {
|
||||
class menu_file_selector : public menu
|
||||
{
|
||||
public:
|
||||
enum { R_EMPTY, R_SOFTLIST, R_CREATE, R_FILE };
|
||||
menu_file_selector(mame_ui_manager &mui, render_container *container, device_image_interface *image, std::string ¤t_directory, std::string ¤t_file, bool has_empty, bool has_softlist, bool has_create, int *result);
|
||||
enum class result
|
||||
{
|
||||
INVALID = -1,
|
||||
EMPTY = 0x1000,
|
||||
SOFTLIST,
|
||||
CREATE,
|
||||
FILE
|
||||
};
|
||||
|
||||
menu_file_selector(mame_ui_manager &mui, render_container *container, device_image_interface *image, std::string ¤t_directory, std::string ¤t_file, bool has_empty, bool has_softlist, bool has_create, result *result);
|
||||
virtual ~menu_file_selector() override;
|
||||
virtual void populate() override;
|
||||
virtual void handle() override;
|
||||
@ -56,7 +64,7 @@ private:
|
||||
bool m_has_empty;
|
||||
bool m_has_softlist;
|
||||
bool m_has_create;
|
||||
int * m_result;
|
||||
result * m_result;
|
||||
std::vector<file_selector_entry> m_entrylist;
|
||||
std::string m_hover_directory;
|
||||
std::string m_filename;
|
||||
@ -75,9 +83,16 @@ private:
|
||||
class menu_select_rw : public menu
|
||||
{
|
||||
public:
|
||||
enum { READONLY, READWRITE, WRITE_OTHER, WRITE_DIFF };
|
||||
enum class result
|
||||
{
|
||||
INVALID = -1,
|
||||
READONLY = 0x3000,
|
||||
READWRITE,
|
||||
WRITE_OTHER,
|
||||
WRITE_DIFF
|
||||
};
|
||||
menu_select_rw(mame_ui_manager &mui, render_container *container,
|
||||
bool can_in_place, int *result);
|
||||
bool can_in_place, result *result);
|
||||
virtual ~menu_select_rw() override;
|
||||
virtual void populate() override;
|
||||
virtual void handle() override;
|
||||
@ -85,7 +100,7 @@ public:
|
||||
private:
|
||||
// internal state
|
||||
bool m_can_in_place;
|
||||
int * m_result;
|
||||
result * m_result;
|
||||
};
|
||||
|
||||
} // namespace ui
|
||||
|
@ -93,8 +93,8 @@ void menu_control_floppy_image::hook_load(std::string filename, bool softlist)
|
||||
else
|
||||
can_in_place = false;
|
||||
}
|
||||
submenu_result = -1;
|
||||
menu::stack_push<menu_select_rw>(ui(), container, can_in_place, &submenu_result);
|
||||
submenu_result.rw = menu_select_rw::result::INVALID;
|
||||
menu::stack_push<menu_select_rw>(ui(), container, can_in_place, &submenu_result.rw);
|
||||
state = SELECT_RW;
|
||||
}
|
||||
|
||||
@ -119,49 +119,49 @@ void menu_control_floppy_image::handle()
|
||||
if (!i->extension_matches(m_current_file.c_str()))
|
||||
format_array[total_usable++] = i;
|
||||
}
|
||||
submenu_result = -1;
|
||||
menu::stack_push<menu_select_format>(ui(), container, format_array, ext_match, total_usable, &submenu_result);
|
||||
submenu_result.i = -1;
|
||||
menu::stack_push<menu_select_format>(ui(), container, format_array, ext_match, total_usable, &submenu_result.i);
|
||||
|
||||
state = SELECT_FORMAT;
|
||||
break;
|
||||
}
|
||||
|
||||
case SELECT_FORMAT:
|
||||
if(submenu_result == -1) {
|
||||
if(submenu_result.i == -1) {
|
||||
state = START_FILE;
|
||||
handle();
|
||||
} else {
|
||||
output_filename = util::zippath_combine(m_current_directory.c_str(), m_current_file.c_str());
|
||||
output_format = format_array[submenu_result];
|
||||
output_format = format_array[submenu_result.i];
|
||||
do_load_create();
|
||||
menu::stack_pop(machine());
|
||||
}
|
||||
break;
|
||||
|
||||
case SELECT_RW:
|
||||
switch(submenu_result) {
|
||||
case menu_select_rw::READONLY:
|
||||
switch(submenu_result.rw) {
|
||||
case menu_select_rw::result::READONLY:
|
||||
do_load_create();
|
||||
menu::stack_pop(machine());
|
||||
break;
|
||||
|
||||
case menu_select_rw::READWRITE:
|
||||
case menu_select_rw::result::READWRITE:
|
||||
output_format = input_format;
|
||||
do_load_create();
|
||||
menu::stack_pop(machine());
|
||||
break;
|
||||
|
||||
case menu_select_rw::WRITE_DIFF:
|
||||
case menu_select_rw::result::WRITE_DIFF:
|
||||
machine().popmessage("Sorry, diffs are not supported yet\n");
|
||||
menu::stack_pop(machine());
|
||||
break;
|
||||
|
||||
case menu_select_rw::WRITE_OTHER:
|
||||
case menu_select_rw::result::WRITE_OTHER:
|
||||
menu::stack_push<menu_file_create>(ui(), container, image, m_current_directory, m_current_file, &create_ok);
|
||||
state = CHECK_CREATE;
|
||||
break;
|
||||
|
||||
case -1:
|
||||
case menu_select_rw::result::INVALID:
|
||||
state = START_FILE;
|
||||
break;
|
||||
}
|
||||
|
@ -35,11 +35,11 @@ namespace ui {
|
||||
|
||||
menu_control_device_image::menu_control_device_image(mame_ui_manager &mui, render_container *container, device_image_interface *_image)
|
||||
: menu(mui, container),
|
||||
submenu_result(0),
|
||||
create_ok(false),
|
||||
create_confirmed(false)
|
||||
{
|
||||
image = _image;
|
||||
submenu_result.i = -1;
|
||||
|
||||
if (image->software_list_name())
|
||||
sld = software_list_device::find_by_name(mui.machine().config(), image->software_list_name());
|
||||
@ -177,8 +177,8 @@ void menu_control_device_image::handle()
|
||||
{
|
||||
switch(state) {
|
||||
case START_FILE: {
|
||||
submenu_result = -1;
|
||||
menu::stack_push<menu_file_selector>(ui(), container, image, m_current_directory, m_current_file, true, image->image_interface()!=nullptr, image->is_creatable(), &submenu_result);
|
||||
submenu_result.filesel = menu_file_selector::result::INVALID;
|
||||
menu::stack_push<menu_file_selector>(ui(), container, image, m_current_directory, m_current_file, true, image->image_interface()!=nullptr, image->is_creatable(), &submenu_result.filesel);
|
||||
state = SELECT_FILE;
|
||||
break;
|
||||
}
|
||||
@ -190,8 +190,8 @@ void menu_control_device_image::handle()
|
||||
break;
|
||||
|
||||
case START_OTHER_PART: {
|
||||
submenu_result = -1;
|
||||
menu::stack_push<menu_software_parts>(ui(), container, swi, swp->interface(), &swp, true, &submenu_result);
|
||||
submenu_result.swparts = menu_software_parts::result::INVALID;
|
||||
menu::stack_push<menu_software_parts>(ui(), container, swi, swp->interface(), &swp, true, &submenu_result.swparts);
|
||||
state = SELECT_OTHER_PART;
|
||||
break;
|
||||
}
|
||||
@ -212,9 +212,9 @@ void menu_control_device_image::handle()
|
||||
state = START_SOFTLIST;
|
||||
else if(swi->has_multiple_parts(image->image_interface()))
|
||||
{
|
||||
submenu_result = -1;
|
||||
submenu_result.swparts = menu_software_parts::result::INVALID;
|
||||
swp = nullptr;
|
||||
menu::stack_push<menu_software_parts>(ui(), container, swi, image->image_interface(), &swp, false, &submenu_result);
|
||||
menu::stack_push<menu_software_parts>(ui(), container, swi, image->image_interface(), &swp, false, &submenu_result.swparts);
|
||||
state = SELECT_ONE_PART;
|
||||
}
|
||||
else
|
||||
@ -225,13 +225,13 @@ void menu_control_device_image::handle()
|
||||
break;
|
||||
|
||||
case SELECT_ONE_PART:
|
||||
switch(submenu_result) {
|
||||
case menu_software_parts::T_ENTRY: {
|
||||
switch(submenu_result.swparts) {
|
||||
case menu_software_parts::result::ENTRY: {
|
||||
load_software_part();
|
||||
break;
|
||||
}
|
||||
|
||||
case -1: // return to list
|
||||
default: // return to list
|
||||
state = SELECT_SOFTLIST;
|
||||
break;
|
||||
|
||||
@ -239,27 +239,27 @@ void menu_control_device_image::handle()
|
||||
break;
|
||||
|
||||
case SELECT_OTHER_PART:
|
||||
switch(submenu_result) {
|
||||
case menu_software_parts::T_ENTRY:
|
||||
switch(submenu_result.swparts) {
|
||||
case menu_software_parts::result::ENTRY:
|
||||
load_software_part();
|
||||
break;
|
||||
|
||||
case menu_software_parts::T_FMGR:
|
||||
case menu_software_parts::result::FMGR:
|
||||
state = START_FILE;
|
||||
handle();
|
||||
break;
|
||||
|
||||
case menu_software_parts::T_EMPTY:
|
||||
case menu_software_parts::result::EMPTY:
|
||||
image->unload();
|
||||
menu::stack_pop(machine());
|
||||
break;
|
||||
|
||||
case menu_software_parts::T_SWLIST:
|
||||
case menu_software_parts::result::SWLIST:
|
||||
state = START_SOFTLIST;
|
||||
handle();
|
||||
break;
|
||||
|
||||
case -1: // return to system
|
||||
case menu_software_parts::result::INVALID: // return to system
|
||||
menu::stack_pop(machine());
|
||||
break;
|
||||
|
||||
@ -267,27 +267,27 @@ void menu_control_device_image::handle()
|
||||
break;
|
||||
|
||||
case SELECT_FILE:
|
||||
switch(submenu_result) {
|
||||
case menu_file_selector::R_EMPTY:
|
||||
switch(submenu_result.filesel) {
|
||||
case menu_file_selector::result::EMPTY:
|
||||
image->unload();
|
||||
menu::stack_pop(machine());
|
||||
break;
|
||||
|
||||
case menu_file_selector::R_FILE:
|
||||
case menu_file_selector::result::FILE:
|
||||
hook_load(m_current_file, false);
|
||||
break;
|
||||
|
||||
case menu_file_selector::R_CREATE:
|
||||
case menu_file_selector::result::CREATE:
|
||||
menu::stack_push<menu_file_create>(ui(), container, image, m_current_directory, m_current_file, &create_ok);
|
||||
state = CHECK_CREATE;
|
||||
break;
|
||||
|
||||
case menu_file_selector::R_SOFTLIST:
|
||||
case menu_file_selector::result::SOFTLIST:
|
||||
state = START_SOFTLIST;
|
||||
handle();
|
||||
break;
|
||||
|
||||
case -1: // return to system
|
||||
default: // return to system
|
||||
menu::stack_pop(machine());
|
||||
break;
|
||||
}
|
||||
|
@ -14,6 +14,8 @@
|
||||
#define MAME_FRONTEND_UI_IMAGECNTRL_H
|
||||
|
||||
#include "ui/menu.h"
|
||||
#include "ui/filesel.h"
|
||||
#include "ui/swlist.h"
|
||||
|
||||
namespace ui {
|
||||
// ======================> menu_control_device_image
|
||||
@ -37,7 +39,17 @@ protected:
|
||||
// protected instance variables
|
||||
int state;
|
||||
device_image_interface *image;
|
||||
int submenu_result;
|
||||
|
||||
// this is a single union that contains all of the different types of
|
||||
// results we could get from child menus
|
||||
union
|
||||
{
|
||||
menu_file_selector::result filesel;
|
||||
menu_software_parts::result swparts;
|
||||
menu_select_rw::result rw;
|
||||
int i;
|
||||
} submenu_result;
|
||||
|
||||
std::string m_current_directory;
|
||||
std::string m_current_file;
|
||||
|
||||
|
@ -33,7 +33,7 @@ namespace ui {
|
||||
// ctor
|
||||
//-------------------------------------------------
|
||||
|
||||
menu_software_parts::menu_software_parts(mame_ui_manager &mui, render_container *container, const software_info *info, const char *interface, const software_part **part, bool other_opt, int *result)
|
||||
menu_software_parts::menu_software_parts(mame_ui_manager &mui, render_container *container, const software_info *info, const char *interface, const software_part **part, bool other_opt, result *result)
|
||||
: menu(mui, container)
|
||||
{
|
||||
m_info = info;
|
||||
@ -62,18 +62,18 @@ void 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->type = result::EMPTY;
|
||||
entry1->part = nullptr;
|
||||
item_append(_("[empty slot]"), "", 0, entry1);
|
||||
|
||||
software_part_menu_entry *entry2 = (software_part_menu_entry *) m_pool_alloc(sizeof(*entry2));
|
||||
entry2->type = T_FMGR;
|
||||
entry2->type = result::FMGR;
|
||||
entry2->part = nullptr;
|
||||
item_append(_("[file manager]"), "", 0, entry2);
|
||||
|
||||
|
||||
software_part_menu_entry *entry3 = (software_part_menu_entry *) m_pool_alloc(sizeof(*entry3));
|
||||
entry3->type = T_SWLIST;
|
||||
entry3->type = result::SWLIST;
|
||||
entry3->part = nullptr;
|
||||
item_append(_("[software list]"), "", 0, entry3);
|
||||
}
|
||||
@ -88,7 +88,7 @@ void menu_software_parts::populate()
|
||||
std::string menu_part_name(swpart.name());
|
||||
if (swpart.feature("part_id") != nullptr)
|
||||
menu_part_name.append(" (").append(swpart.feature("part_id")).append(")");
|
||||
entry->type = T_ENTRY;
|
||||
entry->type = result::ENTRY;
|
||||
entry->part = &swpart;
|
||||
item_append(m_info->shortname(), menu_part_name, 0, entry);
|
||||
}
|
||||
|
@ -20,15 +20,23 @@ namespace ui {
|
||||
class menu_software_parts : public menu
|
||||
{
|
||||
public:
|
||||
enum { T_EMPTY, T_FMGR, T_SWLIST, T_ENTRY };
|
||||
menu_software_parts(mame_ui_manager &mui, render_container *container, const software_info *info, const char *interface, const software_part **part, bool other_opt, int *result);
|
||||
enum class result
|
||||
{
|
||||
INVALID = -1,
|
||||
EMPTY = 0x2000,
|
||||
FMGR,
|
||||
SWLIST,
|
||||
ENTRY
|
||||
};
|
||||
|
||||
menu_software_parts(mame_ui_manager &mui, render_container *container, const software_info *info, const char *interface, const software_part **part, bool other_opt, result *result);
|
||||
virtual ~menu_software_parts() override;
|
||||
virtual void populate() override;
|
||||
virtual void handle() override;
|
||||
|
||||
private:
|
||||
struct software_part_menu_entry {
|
||||
int type;
|
||||
result type;
|
||||
const software_part *part;
|
||||
};
|
||||
|
||||
@ -37,7 +45,7 @@ private:
|
||||
const char * m_interface;
|
||||
const software_part ** m_selected_part;
|
||||
bool m_other_opt;
|
||||
int * m_result;
|
||||
result * m_result;
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user