summaryrefslogtreecommitdiffstatshomepage
path: root/src/frontend/mame/ui/inifile.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/frontend/mame/ui/inifile.h')
-rw-r--r--src/frontend/mame/ui/inifile.h90
1 files changed, 36 insertions, 54 deletions
diff --git a/src/frontend/mame/ui/inifile.h b/src/frontend/mame/ui/inifile.h
index 68adca3c917..49344fd01eb 100644
--- a/src/frontend/mame/ui/inifile.h
+++ b/src/frontend/mame/ui/inifile.h
@@ -1,5 +1,5 @@
// license:BSD-3-Clause
-// copyright-holders:Maurizio Petrarota, Vas Crabb
+// copyright-holders:Maurizio Petrarota
/***************************************************************************
ui/inifile.h
@@ -7,6 +7,7 @@
UI INIs file manager.
***************************************************************************/
+
#ifndef MAME_FRONTEND_UI_INIFILE_H
#define MAME_FRONTEND_UI_INIFILE_H
@@ -14,10 +15,6 @@
#include "ui/utils.h"
-#include <functional>
-#include <set>
-#include <tuple>
-#include <type_traits>
#include <unordered_set>
@@ -31,7 +28,7 @@ class inifile_manager
{
public:
// construction/destruction
- inifile_manager(ui_options &options);
+ inifile_manager(running_machine &machine, ui_options &moptions);
// load systems from category
void load_ini_category(size_t file, size_t category, std::unordered_set<game_driver const *> &result) const;
@@ -62,67 +59,52 @@ class favorite_manager
{
public:
// construction/destruction
- favorite_manager(ui_options &options);
+ favorite_manager(running_machine &machine, ui_options &moptions);
+
+ // favorites comparator
+ struct ci_less
+ {
+ bool operator() (const std::string &s1, const std::string &s2) const
+ {
+ return (core_stricmp(s1.c_str(), s2.c_str()) < 0);
+ }
+ };
+
+ // favorite indices
+ std::multimap<std::string, ui_software_info, ci_less> m_list;
+
+ // getters
+ running_machine &machine() const { return m_machine; }
// add
- void add_favorite_system(game_driver const &driver);
- void add_favorite_software(ui_software_info const &swinfo);
- void add_favorite(running_machine &machine);
+ void add_favorite_game();
+ void add_favorite_game(const game_driver *driver);
+ void add_favorite_game(ui_software_info &swinfo);
// check
- bool is_favorite_system(game_driver const &driver) const;
- bool is_favorite_software(ui_software_info const &swinfo) const;
- bool is_favorite_system_software(ui_software_info const &swinfo) const;
- bool is_favorite(running_machine &machine) const;
+ bool isgame_favorite();
+ bool isgame_favorite(const game_driver *driver);
+ bool isgame_favorite(ui_software_info const &swinfo);
- // remove
- void remove_favorite_system(game_driver const &driver);
- void remove_favorite_software(ui_software_info const &swinfo);
- void remove_favorite(running_machine &machine);
+ // save
+ void save_favorite_games();
- // walk
- template <typename T> void apply(T &&action)
- {
- for (auto const &item : m_favorites)
- action(item);
- }
- template <typename T> void apply_sorted(T &&action)
- {
- update_sorted();
- for (auto const &item : m_sorted)
- action(item.get());
- }
+ // remove
+ void remove_favorite_game();
+ void remove_favorite_game(ui_software_info const &swinfo);
private:
- using running_software_key = std::tuple<game_driver const &, char const *, std::string const &>;
-
- struct favorite_compare
- {
- using is_transparent = std::true_type;
-
- bool operator()(ui_software_info const &lhs, ui_software_info const &rhs) const;
- bool operator()(ui_software_info const &lhs, game_driver const &rhs) const;
- bool operator()(game_driver const &lhs, ui_software_info const &rhs) const;
- bool operator()(ui_software_info const &lhs, running_software_key const &rhs) const;
- bool operator()(running_software_key const &lhs, ui_software_info const &rhs) const;
- };
+ const char *favorite_filename = "favorites.ini";
- using favorites_set = std::set<ui_software_info, favorite_compare>;
- using sorted_favorites = std::vector<std::reference_wrapper<ui_software_info const> >;
+ // current
+ std::multimap<std::string, ui_software_info>::iterator m_current;
- // implementation
- template <typename T> static void apply_running_machine(running_machine &machine, T &&action);
- template <typename T> void add_impl(T &&key);
- template <typename T> bool check_impl(T const &key) const;
- template <typename T> bool remove_impl(T const &key);
- void update_sorted();
- void save_favorites();
+ // parse file ui_favorite
+ void parse_favorite();
// internal state
+ running_machine &m_machine; // reference to our machine
ui_options &m_options;
- favorites_set m_favorites;
- sorted_favorites m_sorted;
- bool m_need_sort;
};
#endif // MAME_FRONTEND_UI_INIFILE_H