summaryrefslogtreecommitdiffstatshomepage
path: root/src/frontend/mame/ui/selmenu.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/frontend/mame/ui/selmenu.h')
-rw-r--r--src/frontend/mame/ui/selmenu.h94
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;