diff options
Diffstat (limited to 'src/frontend/mame/ui/cheatopt.cpp')
-rw-r--r-- | src/frontend/mame/ui/cheatopt.cpp | 192 |
1 files changed, 109 insertions, 83 deletions
diff --git a/src/frontend/mame/ui/cheatopt.cpp b/src/frontend/mame/ui/cheatopt.cpp index e6fd1fe9dc0..c8457a1403b 100644 --- a/src/frontend/mame/ui/cheatopt.cpp +++ b/src/frontend/mame/ui/cheatopt.cpp @@ -9,101 +9,107 @@ *********************************************************************/ #include "emu.h" -#include "cheat.h" -#include "mame.h" +#include "ui/cheatopt.h" #include "ui/ui.h" -#include "ui/menu.h" -#include "ui/cheatopt.h" + +#include "cheat.h" +#include "mame.h" namespace ui { // itemrefs for key menu items -#define ITEMREF_CHEATS_RESET_ALL ((void *) 0x0001) -#define ITEMREF_CHEATS_RELOAD_ALL ((void *) 0x0002) -#define ITEMREF_CHEATS_FIRST_ITEM ((void *) 0x0003) +#define ITEMREF_CHEATS_ENABLE ((void *) 0x0001) +#define ITEMREF_CHEATS_RESET_ALL ((void *) 0x0002) +#define ITEMREF_CHEATS_RELOAD_ALL ((void *) 0x0003) +#define ITEMREF_CHEATS_FIRST_ITEM ((void *) 0x0004) /*------------------------------------------------- menu_cheat - handle the cheat menu -------------------------------------------------*/ -void menu_cheat::handle() +bool menu_cheat::handle(event const *ev) { - /* process the menu */ - const event *menu_event = process(PROCESS_LR_REPEAT); + if (!ev || !ev->itemref) + return false; + bool changed = false; - /* handle events */ - if (menu_event != nullptr && menu_event->itemref != nullptr) - { - bool changed = false; - - /* clear cheat comment on any movement or keypress */ - machine().popmessage(); + // clear cheat comment on any movement or keypress + machine().popmessage(); - /* handle reset all + reset all cheats for reload all option */ - if ((menu_event->itemref == ITEMREF_CHEATS_RESET_ALL || menu_event->itemref == ITEMREF_CHEATS_RELOAD_ALL) && menu_event->iptkey == IPT_UI_SELECT) + if (ev->itemref == ITEMREF_CHEATS_ENABLE) + { + if ((ev->iptkey == IPT_UI_LEFT) || (ev->iptkey == IPT_UI_RIGHT) || (ev->iptkey == IPT_UI_CLEAR)) { - for (auto &curcheat : mame_machine_manager::instance()->cheat().entries()) - if (curcheat->select_default_state()) - changed = true; + // handle global enable toggle + mame_machine_manager::instance()->cheat().set_enable(ev->iptkey == IPT_UI_RIGHT || (ev->iptkey == IPT_UI_CLEAR), false); + changed = true; } - - /* handle individual cheats */ - else if (menu_event->itemref >= ITEMREF_CHEATS_FIRST_ITEM) + } + if ((ev->itemref == ITEMREF_CHEATS_RESET_ALL || ev->itemref == ITEMREF_CHEATS_RELOAD_ALL) && ev->iptkey == IPT_UI_SELECT) + { + // handle reset all + reset all cheats for reload all option + for (auto &curcheat : mame_machine_manager::instance()->cheat().entries()) + if (curcheat->select_default_state()) + changed = true; + } + else if (ev->itemref >= ITEMREF_CHEATS_FIRST_ITEM) + { + // handle individual cheats + cheat_entry *curcheat = reinterpret_cast<cheat_entry *>(ev->itemref); + const char *string; + switch (ev->iptkey) { - cheat_entry *curcheat = reinterpret_cast<cheat_entry *>(menu_event->itemref); - const char *string; - switch (menu_event->iptkey) - { - /* if selected, activate a oneshot */ - case IPT_UI_SELECT: - changed = curcheat->activate(); - break; - - /* if cleared, reset to default value */ - case IPT_UI_CLEAR: - changed = curcheat->select_default_state(); - break; - - /* left decrements */ - case IPT_UI_LEFT: - changed = curcheat->select_previous_state(); - break; - - /* right increments */ - case IPT_UI_RIGHT: - changed = curcheat->select_next_state(); - break; - - /* bring up display comment if one exists */ - case IPT_UI_DISPLAY_COMMENT: - case IPT_UI_UP: - case IPT_UI_DOWN: - string = curcheat->comment(); - if (string != nullptr && string[0] != 0) - machine().popmessage(_("Cheat Comment:\n%s"), string); - break; - } + // if selected, activate a oneshot + case IPT_UI_SELECT: + changed = curcheat->activate(); + break; + + // if cleared, reset to default value + case IPT_UI_CLEAR: + changed = curcheat->select_default_state(); + break; + + // left decrements + case IPT_UI_LEFT: + changed = curcheat->select_previous_state(); + break; + + // right increments + case IPT_UI_RIGHT: + changed = curcheat->select_next_state(); + break; + + // bring up display comment if one exists + case IPT_UI_DISPLAY_COMMENT: + case IPT_UI_UP: + case IPT_UI_DOWN: + string = curcheat->comment(); + if (string && *string) + machine().popmessage(_("Cheat Comment:\n%s"), string); + break; } + } - /* handle reload all */ - if (menu_event->itemref == ITEMREF_CHEATS_RELOAD_ALL && menu_event->iptkey == IPT_UI_SELECT) - { - /* re-init cheat engine and thus reload cheats/cheats have already been turned off by here */ - mame_machine_manager::instance()->cheat().reload(); - - /* display the reloaded cheats */ - reset(reset_options::REMEMBER_REF); - machine().popmessage(_("All cheats reloaded")); - } + // handle reload all + if (ev->itemref == ITEMREF_CHEATS_RELOAD_ALL && ev->iptkey == IPT_UI_SELECT) + { + // re-init cheat engine and thus reload cheats/cheats have already been turned off by here + mame_machine_manager::instance()->cheat().reload(); - /* if things changed, update */ - if (changed) - reset(reset_options::REMEMBER_REF); + // display the reloaded cheats + machine().popmessage(_("All cheats reloaded")); + changed = true; } + + // if things changed, update + if (changed) + reset(reset_options::REMEMBER_REF); + + return false; // always triggers an item reset if the menu needs to be redrawn } @@ -113,16 +119,25 @@ void menu_cheat::handle() menu_cheat::menu_cheat(mame_ui_manager &mui, render_container &container) : menu(mui, container) { + set_heading(_("Cheat Options")); + set_process_flags(PROCESS_LR_REPEAT); } -void menu_cheat::populate(float &customtop, float &custombottom) +void menu_cheat::menu_activated() { - /* iterate over cheats */ - std::string text; - std::string subtext; + reset(reset_options::REMEMBER_REF); +} + +void menu_cheat::populate() +{ + const bool empty = mame_machine_manager::instance()->cheat().entries().empty(); + + // iterate over cheats + if (!empty) + { + std::string text; + std::string subtext; - // add cheats - if (!mame_machine_manager::instance()->cheat().entries().empty()) { for (auto &curcheat : mame_machine_manager::instance()->cheat().entries()) { uint32_t flags; @@ -132,16 +147,27 @@ void menu_cheat::populate(float &customtop, float &custombottom) else item_append(text, subtext, flags, curcheat.get()); } + } + else + { + // indicate that none were found + item_append(_("[no cheats found]"), FLAG_DISABLE, nullptr); + } - /* add a separator */ - item_append(menu_item_type::SEPARATOR); + item_append(menu_item_type::SEPARATOR); - /* add a reset all option */ - item_append(_("Reset All"), "", 0, (void *)ITEMREF_CHEATS_RESET_ALL); + if (!empty) + { + // add global enable toggle + item_append_on_off(_("Enable Cheats"), mame_machine_manager::instance()->cheat().enabled(), 0, (void *)ITEMREF_CHEATS_ENABLE); + item_append(menu_item_type::SEPARATOR); - /* add a reload all cheats option */ - item_append(_("Reload All"), "", 0, (void *)ITEMREF_CHEATS_RELOAD_ALL); + // add a reset all option + item_append(_("Reset All"), 0, (void *)ITEMREF_CHEATS_RESET_ALL); } + + // add a reload all cheats option + item_append(_("Reload All"), 0, (void *)ITEMREF_CHEATS_RELOAD_ALL); } menu_cheat::~menu_cheat() |