From ae727d2cc640fef650d6c76694b83b159d3065ba Mon Sep 17 00:00:00 2001 From: Vas Crabb Date: Mon, 14 Jan 2019 04:55:29 +1100 Subject: UI cleanup continues: * Fix crash on builds with fewer than 16 drivers * Fix "available" filter in internal UI * Get rid of some UI globals that shouldn't be global * Better encapsulation in UI * Clean up favourites manager - in particular kill hidden state and O(n) walks * This breaks adding systems/software to favourites from the main tab menu --- src/frontend/mame/ui/utils.cpp | 298 +++++++++++++++++++---------------------- 1 file changed, 136 insertions(+), 162 deletions(-) (limited to 'src/frontend/mame/ui/utils.cpp') diff --git a/src/frontend/mame/ui/utils.cpp b/src/frontend/mame/ui/utils.cpp index f82435d3864..baebce20bb3 100644 --- a/src/frontend/mame/ui/utils.cpp +++ b/src/frontend/mame/ui/utils.cpp @@ -98,26 +98,6 @@ constexpr char const *SOFTWARE_FILTER_NAMES[software_filter::COUNT] = { -//------------------------------------------------- -// static filter data -//------------------------------------------------- - -std::mutex f_filter_data_mutex; -std::condition_variable f_filter_data_condition; -std::atomic f_mnfct_finalised(false), f_year_finalised(false); -std::vector f_mnfct_ui, f_year_ui; -std::unordered_set f_mnfct_tmp, f_year_tmp; - -std::string trim_manufacturer(std::string const &mfg) -{ - size_t const found(mfg.find('(')); - if ((found != std::string::npos) && (found > 0)) - return mfg.substr(0, found - 1); - else - return mfg; -} - - //------------------------------------------------- // base implementation for simple filters //------------------------------------------------- @@ -664,7 +644,7 @@ template class available_machine_filter_impl : public simple_filter_impl_base { public: - available_machine_filter_impl(char const *value, emu_file *file, unsigned indent) { } + available_machine_filter_impl(machine_filter_data const &data, char const *value, emu_file *file, unsigned indent) { } virtual bool apply(ui_system_info const &system) const override { return system.available; } }; @@ -674,7 +654,7 @@ template class working_machine_filter_impl : public simple_filter_impl_base { public: - working_machine_filter_impl(char const *value, emu_file *file, unsigned indent) { } + working_machine_filter_impl(machine_filter_data const &data, char const *value, emu_file *file, unsigned indent) { } virtual bool apply(ui_system_info const &system) const override { return !(system.driver->flags & machine_flags::NOT_WORKING); } }; @@ -684,7 +664,7 @@ template class mechanical_machine_filter_impl : public simple_filter_impl_base { public: - mechanical_machine_filter_impl(char const *value, emu_file *file, unsigned indent) { } + mechanical_machine_filter_impl(machine_filter_data const &data, char const *value, emu_file *file, unsigned indent) { } virtual bool apply(ui_system_info const &system) const override { return system.driver->flags & machine_flags::MECHANICAL; } }; @@ -694,7 +674,7 @@ template class bios_machine_filter_impl : public simple_filter_impl_base { public: - bios_machine_filter_impl(char const *value, emu_file *file, unsigned indent) { } + bios_machine_filter_impl(machine_filter_data const &data, char const *value, emu_file *file, unsigned indent) { } virtual bool apply(ui_system_info const &system) const override { return system.driver->flags & machine_flags::IS_BIOS_ROOT; } }; @@ -704,7 +684,7 @@ template class parents_machine_filter_impl : public simple_filter_impl_base { public: - parents_machine_filter_impl(char const *value, emu_file *file, unsigned indent) { } + parents_machine_filter_impl(machine_filter_data const &data, char const *value, emu_file *file, unsigned indent) { } virtual bool apply(ui_system_info const &system) const override { @@ -719,7 +699,7 @@ template class chd_machine_filter_impl : public simple_filter_impl_base { public: - chd_machine_filter_impl(char const *value, emu_file *file, unsigned indent) { } + chd_machine_filter_impl(machine_filter_data const &data, char const *value, emu_file *file, unsigned indent) { } virtual bool apply(ui_system_info const &system) const override { @@ -737,7 +717,7 @@ template class save_machine_filter_impl : public simple_filter_impl_base { public: - save_machine_filter_impl(char const *value, emu_file *file, unsigned indent) { } + save_machine_filter_impl(machine_filter_data const &data, char const *value, emu_file *file, unsigned indent) { } virtual bool apply(ui_system_info const &system) const override { return system.driver->flags & machine_flags::SUPPORTS_SAVE; } }; @@ -747,7 +727,7 @@ template class vertical_machine_filter_impl : public simple_filter_impl_base { public: - vertical_machine_filter_impl(char const *value, emu_file *file, unsigned indent) { } + vertical_machine_filter_impl(machine_filter_data const &data, char const *value, emu_file *file, unsigned indent) { } virtual bool apply(ui_system_info const &system) const override { return system.driver->flags & machine_flags::SWAP_XY; } }; @@ -761,8 +741,8 @@ public: class manufacturer_machine_filter : public choice_filter_impl_base { public: - manufacturer_machine_filter(char const *value, emu_file *file, unsigned indent) - : choice_filter_impl_base(c_mnfct::ui(), value) + manufacturer_machine_filter(machine_filter_data const &data, char const *value, emu_file *file, unsigned indent) + : choice_filter_impl_base(data.manufacturers(), value) { } @@ -773,7 +753,7 @@ public: else if (!selection_valid()) return false; - std::string const name(trim_manufacturer(system.driver->manufacturer)); + std::string const name(machine_filter_data::extract_manufacturer(system.driver->manufacturer)); return !name.empty() && (selection_text() == name); } }; @@ -782,8 +762,8 @@ public: class year_machine_filter : public choice_filter_impl_base { public: - year_machine_filter(char const *value, emu_file *file, unsigned indent) - : choice_filter_impl_base(c_year::ui(), value) + year_machine_filter(machine_filter_data const &data, char const *value, emu_file *file, unsigned indent) + : choice_filter_impl_base(data.years(), value) { } @@ -800,7 +780,10 @@ template