diff options
Diffstat (limited to 'src/frontend/mame/ui/selmenu.h')
-rw-r--r-- | src/frontend/mame/ui/selmenu.h | 94 |
1 files changed, 87 insertions, 7 deletions
diff --git a/src/frontend/mame/ui/selmenu.h b/src/frontend/mame/ui/selmenu.h index 6bd63b4355c..6556f5afdc0 100644 --- a/src/frontend/mame/ui/selmenu.h +++ b/src/frontend/mame/ui/selmenu.h @@ -41,11 +41,38 @@ protected: rightbottom }; + class reselect_last + { + public: + static std::string const &driver() { return s_driver; } + static std::string const &software() { return s_software; } + static std::string const &swlist() { return s_swlist; } + + static void reselect(bool value) { s_reselect = value; } + static bool get() { return s_reselect; } + static void reset(); + + static void set_driver(std::string const &name); + static void set_driver(game_driver const &driver) { set_driver(driver.name); } + static void set_software(game_driver const &driver, ui_software_info const &swinfo); + + private: + static std::string s_driver, s_software, s_swlist; + static bool s_reselect; + }; + menu_select_launch(mame_ui_manager &mui, render_container &container, bool is_swlist); focused_menu get_focus() const { return m_focus; } void set_focus(focused_menu focus) { m_focus = focus; } + bool dismiss_error(); + void set_error(reset_options ropt, std::string &&message); + + void launch_system(game_driver const &driver) { launch_system(ui(), driver, nullptr, nullptr, nullptr); } + void launch_system(game_driver const &driver, ui_software_info const &swinfo) { launch_system(ui(), driver, &swinfo, nullptr, nullptr); } + void launch_system(game_driver const &driver, ui_software_info const &swinfo, std::string const &part) { launch_system(ui(), driver, &swinfo, &part, nullptr); } + virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; // handlers @@ -55,16 +82,61 @@ protected: void draw_common_arrow(float origx1, float origy1, float origx2, float origy2, int current, int dmin, int dmax, float title); void draw_info_arrow(int ub, float origx1, float origx2, float oy1, float line_height, float text_size, float ud_arrow_width); + bool draw_error_text(); + + template <typename T> bool select_bios(T const &driver, bool inlist); + bool select_part(software_info const &info, ui_software_info const &ui_info); + int visible_items; void *m_prev_selected; int m_total_lines; int m_topline_datsview; // right box top line - bool m_ui_error; private: using bitmap_vector = std::vector<bitmap_argb32>; using texture_ptr_vector = std::vector<texture_ptr>; + using s_parts = std::unordered_map<std::string, std::string>; + using s_bios = std::vector<std::pair<std::string, int>>; + + class software_parts : public menu + { + public: + software_parts(mame_ui_manager &mui, render_container &container, s_parts &&parts, ui_software_info const &ui_info); + virtual ~software_parts() override; + + protected: + virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; + + private: + virtual void populate(float &customtop, float &custombottom) override; + virtual void handle() override; + + ui_software_info const &m_uiinfo; + s_parts const m_parts; + }; + + class bios_selection : public menu + { + public: + bios_selection(mame_ui_manager &mui, render_container &container, s_bios &&biosname, game_driver const &driver, bool inlist); + bios_selection(mame_ui_manager &mui, render_container &container, s_bios &&biosname, ui_software_info const &swinfo, bool inlist); + virtual ~bios_selection() override; + + protected: + virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override; + + private: + bios_selection(mame_ui_manager &mui, render_container &container, s_bios &&biosname, void const *driver, bool software, bool inlist); + + virtual void populate(float &customtop, float &custombottom) override; + virtual void handle() override; + + void const *m_driver; + bool m_software, m_inlist; + s_bios m_bios; + }; + class cache { public: @@ -117,12 +189,6 @@ private: // draw left panel virtual float draw_left_panel(float x1, float y1, float x2, float y2) = 0; - game_driver const *m_info_driver; - ui_software_info const *m_info_software; - int m_info_view; - std::vector<std::string> m_items_list; - std::string m_info_buffer; - // draw infos void infos_render(float x1, float y1, float x2, float y2); virtual void general_info(const game_driver *driver, std::string &buffer) = 0; @@ -178,9 +244,23 @@ private: virtual std::string make_driver_description(game_driver const &driver) const = 0; virtual std::string make_software_description(ui_software_info const &software) const = 0; + static void launch_system(mame_ui_manager &mui, game_driver const &driver, ui_software_info const *swinfo, std::string const *part, int const *bios); + static bool select_part(mame_ui_manager &mui, render_container &container, software_info const &info, ui_software_info const &ui_info); + static bool has_multiple_bios(ui_software_info const &swinfo, s_bios &biosname); + static bool has_multiple_bios(game_driver const &driver, s_bios &biosname); + // cleanup function static void exit(running_machine &machine); + bool m_ui_error; + std::string m_error_text; + + game_driver const *m_info_driver; + ui_software_info const *m_info_software; + int m_info_view; + std::vector<std::string> m_items_list; + std::string m_info_buffer; + cache_ptr m_cache; bool m_is_swlist; focused_menu m_focus; |