summaryrefslogtreecommitdiffstats
path: root/src/frontend/mame/ui/utils.h
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2017-08-18 18:26:26 +1000
committer Vas Crabb <vas@vastheman.com>2017-08-18 18:26:26 +1000
commit73107179b5ca721336688d2a867a0be91279c7b7 (patch)
tree0b5b1ab73f7d416643357d0fe9bc8644751073b7 /src/frontend/mame/ui/utils.h
parent3f39b31287504d2a8b935290bf735be286f9d8b5 (diff)
clean up some of the UI filter stuff, show list descriptions rather than names when choosing list to filter on (nw)
Diffstat (limited to 'src/frontend/mame/ui/utils.h')
-rw-r--r--src/frontend/mame/ui/utils.h39
1 files changed, 34 insertions, 5 deletions
diff --git a/src/frontend/mame/ui/utils.h b/src/frontend/mame/ui/utils.h
index 4aa9b9ef9aa..9d52f8acf8c 100644
--- a/src/frontend/mame/ui/utils.h
+++ b/src/frontend/mame/ui/utils.h
@@ -79,7 +79,36 @@ struct ui_software_info
namespace ui {
-struct s_filter; // FIXME: this is declared in custmenu.h, it shouldn't be
+class software_filter_data
+{
+public:
+ std::vector<std::string> const &regions() const { return m_regions; }
+ std::vector<std::string> const &publishers() const { return m_publishers; }
+ std::vector<std::string> const &years() const { return m_years; }
+ std::vector<std::string> const &device_types() const { return m_device_types; }
+ std::vector<std::string> const &list_names() const { return m_list_names; }
+ std::vector<std::string> const &list_descriptions() const { return m_list_descriptions; }
+
+ // adding entries
+ void add_region(std::string const &longname);
+ void add_publisher(std::string const &publisher);
+ void add_year(std::string const &year);
+ void add_device_type(std::string const &device_type);
+ void add_list(std::string const &name, std::string const &description);
+ void finalise();
+
+ // use heuristics to extract meaningful parts from software list fields
+ static std::string extract_region(std::string const &longname);
+ static std::string extract_publisher(std::string const &publisher);
+
+private:
+ std::vector<std::string> m_regions;
+ std::vector<std::string> m_publishers;
+ std::vector<std::string> m_years;
+ std::vector<std::string> m_device_types;
+ std::vector<std::string> m_list_names, m_list_descriptions;
+};
+
template <class Impl, typename Entry>
class filter_base
@@ -200,8 +229,8 @@ public:
virtual type get_type() const = 0;
virtual std::string adorned_display_name(type n) const = 0;
- static ptr create(type n, s_filter const &data) { return create(n, data, nullptr, nullptr, 0); }
- static ptr create(emu_file &file, s_filter const &data) { return create(file, data, 0); }
+ static ptr create(type n, software_filter_data const &data) { return create(n, data, nullptr, nullptr, 0); }
+ static ptr create(emu_file &file, software_filter_data const &data) { return create(file, data, 0); }
static char const *config_name(type n);
static char const *display_name(type n);
@@ -211,8 +240,8 @@ public:
protected:
software_filter();
- static ptr create(type n, s_filter const &data, char const *value, emu_file *file, unsigned indent);
- static ptr create(emu_file &file, s_filter const &data, unsigned indent);
+ static ptr create(type n, software_filter_data const &data, char const *value, emu_file *file, unsigned indent);
+ static ptr create(emu_file &file, software_filter_data const &data, unsigned indent);
};
DECLARE_ENUM_INCDEC_OPERATORS(software_filter::type)