diff --git a/src/emu/ui/datfile.h b/src/emu/ui/datfile.h index 66d76d17501..7b38599ba21 100644 --- a/src/emu/ui/datfile.h +++ b/src/emu/ui/datfile.h @@ -31,7 +31,6 @@ public: void load_software_info(std::string &softlist, std::string &buffer, std::string &softname, std::string &parentname); void command_sub_menu(const game_driver *drv, std::vector &menuitems); void reset_run() { first_run = true; } - bool has_software(std::string &softlist, std::string &softname, std::string &parentname); std::string rev_history() const { return m_history_rev; } std::string rev_mameinfo() const { return m_mame_rev; } @@ -45,9 +44,11 @@ public: bool has_command(const game_driver *driver) { return (m_cmdidx.find(driver) != m_cmdidx.end()); } bool has_sysinfo(const game_driver *driver) { return (m_sysidx.find(driver) != m_sysidx.end()); } bool has_story(const game_driver *driver) { return (m_storyidx.find(driver) != m_storyidx.end()); } + bool has_software(std::string &softlist, std::string &softname, std::string &parentname); - bool has_data(const game_driver *d) + bool has_data(const game_driver *a = nullptr) { + const game_driver *d = (a != nullptr) ? a : &machine().system(); return (has_history(d) || has_mameinfo(d) || has_messinfo(d) || has_command(d) || has_sysinfo(d) || has_story(d)); } private: diff --git a/src/emu/ui/datmenu.cpp b/src/emu/ui/datmenu.cpp index 6c240311c62..93c776f3e51 100644 --- a/src/emu/ui/datmenu.cpp +++ b/src/emu/ui/datmenu.cpp @@ -99,10 +99,7 @@ void ui_menu_dats_view::handle() void ui_menu_dats_view::populate() { machine().pause(); - if (!issoft) - get_data(); - else - get_data_sw(); + (issoft == true) ? get_data_sw() : get_data(); item_append(MENU_SEPARATOR_ITEM, nullptr, (MENU_FLAG_UI_DATS | MENU_FLAG_LEFT_ARROW | MENU_FLAG_RIGHT_ARROW), nullptr); customtop = 2.0f * machine().ui().get_line_height() + 4.0f * UI_BOX_TB_BORDER; @@ -119,12 +116,7 @@ void ui_menu_dats_view::custom_render(void *selectedref, float top, float bottom ui_manager &mui = machine().ui(); float maxwidth = origx2 - origx1; float width; - std::string driver; - - if (issoft) - driver = m_swinfo->longname; - else - driver = m_driver->description; + std::string driver = (issoft == true) ? m_swinfo->longname : m_driver->description; mui.draw_text_full(container, driver.c_str(), 0.0f, 0.0f, 1.0f, JUSTIFY_CENTER, WRAP_TRUNCATE, DRAW_NONE, ARGB_WHITE, ARGB_BLACK, &width, nullptr); @@ -251,7 +243,6 @@ void ui_menu_dats_view::get_data() { std::string tempbuf(buffer.substr(xstart[x], xend[x] - xstart[x])); item_append(tempbuf.c_str(), nullptr, (MENU_FLAG_UI_DATS | MENU_FLAG_DISABLE), (void *)(FPTR)(x + 1)); - } } @@ -276,7 +267,6 @@ void ui_menu_dats_view::get_data_sw() { std::string tempbuf(buffer.substr(xstart[x], xend[x] - xstart[x])); item_append(tempbuf.c_str(), nullptr, (MENU_FLAG_UI_DATS | MENU_FLAG_DISABLE), (void *)(FPTR)(x + 1)); - } } diff --git a/src/emu/ui/mainmenu.cpp b/src/emu/ui/mainmenu.cpp index 66381a3df1f..0cf449e8f84 100644 --- a/src/emu/ui/mainmenu.cpp +++ b/src/emu/ui/mainmenu.cpp @@ -132,7 +132,7 @@ void ui_menu_main::populate() item_append(_("Cheat"), nullptr, 0, (void *)CHEAT); // add dats menu - if (machine().ui().options().enabled_dats() && machine().datfile().has_data(&machine().system())) + if (machine().ui().options().enabled_dats() && machine().datfile().has_data()) item_append(_("External DAT View"), nullptr, 0, (void *)EXTERNAL_DATS); item_append(MENU_SEPARATOR_ITEM, nullptr, 0, nullptr); diff --git a/src/emu/ui/selgame.cpp b/src/emu/ui/selgame.cpp index d0996d65d59..dcc9e1d2d68 100644 --- a/src/emu/ui/selgame.cpp +++ b/src/emu/ui/selgame.cpp @@ -299,10 +299,31 @@ void ui_menu_select_game::handle() } // Infos - else if (ui_globals::rpanel == RP_INFOS && ui_globals::curdats_view > UI_FIRST_LOAD) + else if (ui_globals::rpanel == RP_INFOS) { - ui_globals::curdats_view--; - topline_datsview = 0; + if (!isfavorite()) + { + const game_driver *drv = (const game_driver *)m_event->itemref; + if ((FPTR)drv > skip_main_items && ui_globals::curdats_view > UI_FIRST_LOAD) + { + ui_globals::curdats_view--; + topline_datsview = 0; + } + } + else + { + ui_software_info *drv = (ui_software_info *)m_event->itemref; + if (drv->startempty == 1 && ui_globals::curdats_view > UI_FIRST_LOAD) + { + ui_globals::curdats_view--; + topline_datsview = 0; + } + else if ((FPTR)drv > skip_main_items && ui_globals::cur_sw_dats_view > 0) + { + ui_globals::cur_sw_dats_view--; + topline_datsview = 0; + } + } } } @@ -318,10 +339,31 @@ void ui_menu_select_game::handle() } // Infos - else if (ui_globals::rpanel == RP_INFOS && ui_globals::curdats_view < UI_LAST_LOAD) + else if (ui_globals::rpanel == RP_INFOS) { - ui_globals::curdats_view++; - topline_datsview = 0; + if (!isfavorite()) + { + const game_driver *drv = (const game_driver *)m_event->itemref; + if ((FPTR)drv > skip_main_items && ui_globals::curdats_view < UI_LAST_LOAD) + { + ui_globals::curdats_view++; + topline_datsview = 0; + } + } + else + { + ui_software_info *drv = (ui_software_info *)m_event->itemref; + if (drv->startempty == 1 && ui_globals::curdats_view < UI_LAST_LOAD) + { + ui_globals::curdats_view++; + topline_datsview = 0; + } + else if ((FPTR)drv > skip_main_items && ui_globals::cur_sw_dats_view < 1) + { + ui_globals::cur_sw_dats_view++; + topline_datsview = 0; + } + } } } @@ -363,13 +405,15 @@ void ui_menu_select_game::handle() } else { - ui_software_info *swinfo = (ui_software_info *)m_event->itemref; - if ((FPTR)swinfo > skip_main_items && machine().datfile().has_data(swinfo->driver)) + ui_software_info *ui_swinfo = (ui_software_info *)m_event->itemref; + datfile_manager &mdat = machine().datfile(); + + if ((FPTR)ui_swinfo > skip_main_items) { - if (swinfo->startempty == 1) - ui_menu::stack_push(global_alloc_clear(machine(), container, swinfo->driver)); - else - ui_menu::stack_push(global_alloc_clear(machine(), container, swinfo)); + if (ui_swinfo->startempty == 1 && mdat.has_history(ui_swinfo->driver)) + ui_menu::stack_push(global_alloc_clear(machine(), container, ui_swinfo->driver)); + else if (mdat.has_software(ui_swinfo->listname, ui_swinfo->shortname, ui_swinfo->parentname) || !ui_swinfo->usage.empty()) + ui_menu::stack_push(global_alloc_clear(machine(), container, ui_swinfo)); } } } diff --git a/src/emu/ui/selsoft.cpp b/src/emu/ui/selsoft.cpp index 04cfaa375f9..3bf2e237553 100644 --- a/src/emu/ui/selsoft.cpp +++ b/src/emu/ui/selsoft.cpp @@ -242,14 +242,12 @@ void ui_menu_select_software::handle() else if (m_event->iptkey == IPT_UI_DATS && machine().ui().options().enabled_dats()) { ui_software_info *ui_swinfo = (ui_software_info *)m_event->itemref; + datfile_manager &mdat = machine().datfile(); - if ((FPTR)ui_swinfo > 1 && machine().datfile().has_data(ui_swinfo->driver)) - { - if (ui_swinfo->startempty == 1) - ui_menu::stack_push(global_alloc_clear(machine(), container, ui_swinfo->driver)); - else - ui_menu::stack_push(global_alloc_clear(machine(), container, ui_swinfo)); - } + if (ui_swinfo->startempty == 1 && mdat.has_history(ui_swinfo->driver)) + ui_menu::stack_push(global_alloc_clear(machine(), container, ui_swinfo->driver)); + else if (mdat.has_software(ui_swinfo->listname, ui_swinfo->shortname, ui_swinfo->parentname) || !ui_swinfo->usage.empty()) + ui_menu::stack_push(global_alloc_clear(machine(), container, ui_swinfo)); } // handle UI_LEFT_PANEL