// license:BSD-3-Clause // copyright-holders:Maurizio Petrarota /*************************************************************************** ui/utils.h Internal UI user interface. ***************************************************************************/ #pragma once #ifndef __UI_UTILS_H__ #define __UI_UTILS_H__ #define MAX_CHAR_INFO 256 #define MAX_CUST_FILTER 8 // GLOBAL ENUMERATORS enum { FILTER_FIRST = 0, FILTER_ALL = FILTER_FIRST, FILTER_AVAILABLE, FILTER_UNAVAILABLE, FILTER_WORKING, FILTER_NOT_WORKING, FILTER_MECHANICAL, FILTER_NOT_MECHANICAL, FILTER_CATEGORY, FILTER_FAVORITE, FILTER_BIOS, FILTER_PARENT, FILTER_CLONES, FILTER_MANUFACTURER, FILTER_YEAR, FILTER_SAVE, FILTER_NOSAVE, FILTER_CHD, FILTER_NOCHD, FILTER_VERTICAL, FILTER_HORIZONTAL, FILTER_CUSTOM, FILTER_LAST = FILTER_CUSTOM }; enum { FIRST_VIEW = 0, SNAPSHOT_VIEW = FIRST_VIEW, CABINETS_VIEW, CPANELS_VIEW, PCBS_VIEW, FLYERS_VIEW, TITLES_VIEW, ENDS_VIEW, ARTPREV_VIEW, BOSSES_VIEW, LOGOS_VIEW, VERSUS_VIEW, GAMEOVER_VIEW, HOWTO_VIEW, SCORES_VIEW, SELECT_VIEW, MARQUEES_VIEW, LAST_VIEW = MARQUEES_VIEW }; enum { RP_FIRST = 0, RP_IMAGES = RP_FIRST, RP_INFOS, RP_LAST = RP_INFOS }; enum { SHOW_PANELS = 0, HIDE_LEFT_PANEL, HIDE_RIGHT_PANEL, HIDE_BOTH }; enum { UI_FIRST_LOAD = 0, UI_GENERAL_LOAD = UI_FIRST_LOAD, UI_HISTORY_LOAD, UI_MAMEINFO_LOAD, UI_SYSINFO_LOAD, UI_MESSINFO_LOAD, UI_COMMAND_LOAD, UI_GINIT_LOAD, UI_STORY_LOAD, UI_LAST_LOAD = UI_STORY_LOAD }; enum { UI_SW_FIRST = 0, UI_SW_ALL = UI_SW_FIRST, UI_SW_AVAILABLE, UI_SW_UNAVAILABLE, UI_SW_PARENTS, UI_SW_CLONES, UI_SW_YEARS, UI_SW_PUBLISHERS, UI_SW_SUPPORTED, UI_SW_PARTIAL_SUPPORTED, UI_SW_UNSUPPORTED, UI_SW_REGION, UI_SW_TYPE, UI_SW_LIST, UI_SW_CUSTOM, UI_SW_LAST = UI_SW_CUSTOM }; enum { HOVER_DAT_UP = -1000, HOVER_DAT_DOWN, HOVER_UI_LEFT, HOVER_UI_RIGHT, HOVER_ARROW_UP, HOVER_ARROW_DOWN, HOVER_B_FAV, HOVER_B_EXPORT, HOVER_B_DATS, HOVER_RPANEL_ARROW, HOVER_LPANEL_ARROW, HOVER_FILTER_FIRST, HOVER_FILTER_LAST = (HOVER_FILTER_FIRST) + 1 + FILTER_LAST, HOVER_SW_FILTER_FIRST, HOVER_SW_FILTER_LAST = (HOVER_SW_FILTER_FIRST) + 1 + UI_SW_LAST, HOVER_RP_FIRST, HOVER_RP_LAST = (HOVER_RP_FIRST) + 1 + RP_LAST }; // GLOBAL STRUCTURES struct ui_software_info { ui_software_info() {} ui_software_info(std::string sname, std::string lname, std::string pname, std::string y, std::string pub, UINT8 s, std::string pa, const game_driver *d, std::string li, std::string i, std::string is, UINT8 em, std::string plong, std::string u, std::string de, bool av) { shortname = sname; longname = lname; parentname = pname; year = y; publisher = pub; supported = s; part = pa; driver = d; listname = li; interface = i; instance = is; startempty = em; parentlongname = plong; usage = u; devicetype = de; available = av; } std::string shortname; std::string longname; std::string parentname; std::string year; std::string publisher; UINT8 supported = 0; std::string part; const game_driver *driver = nullptr; std::string listname; std::string interface; std::string instance; UINT8 startempty = 0; std::string parentlongname; std::string usage; std::string devicetype; bool available = false; bool operator==(const ui_software_info& r) { if (shortname == r.shortname && longname == r.longname && parentname == r.parentname && year == r.year && publisher == r.publisher && supported == r.supported && part == r.part && driver == r.driver && listname == r.listname && interface == r.interface && instance == r.instance && startempty == r.startempty && parentlongname == r.parentlongname && usage == r.usage && devicetype == r.devicetype) return true; return false; } }; // Manufacturers struct c_mnfct { static void set(const char *str); static std::string getname(const char *str); static std::vector ui; static std::unordered_map uimap; static UINT16 actual; }; // Years struct c_year { static void set(const char *str); static std::vector ui; static UINT16 actual; }; // GLOBAL CLASS struct ui_globals { static UINT8 curimage_view, curdats_view, cur_sw_dats_view, rpanel; static bool switch_image, redraw_icon, default_image, reset; static int visible_main_lines, visible_sw_lines; static UINT16 panels_status; static bool has_icons; }; #define main_struct(name) \ struct name##_filters \ { \ static UINT16 actual; \ static const char *text[]; \ static size_t length; \ }; main_struct(main); main_struct(sw); // Custom filter struct custfltr { static UINT16 main; static UINT16 numother; static UINT16 other[MAX_CUST_FILTER]; static UINT16 mnfct[MAX_CUST_FILTER]; static UINT16 screen[MAX_CUST_FILTER]; static UINT16 year[MAX_CUST_FILTER]; }; // Software custom filter struct sw_custfltr { static UINT16 main; static UINT16 numother; static UINT16 other[MAX_CUST_FILTER]; static UINT16 mnfct[MAX_CUST_FILTER]; static UINT16 year[MAX_CUST_FILTER]; static UINT16 region[MAX_CUST_FILTER]; static UINT16 type[MAX_CUST_FILTER]; static UINT16 list[MAX_CUST_FILTER]; }; // GLOBAL FUNCTIONS int fuzzy_substring(std::string needle, std::string haystack); char* chartrimcarriage(char str[]); const char* strensure(const char* s); int getprecisionchr(const char* s); std::vector tokenize(const std::string &text, char sep); #endif /* __UI_UTILS_H__ */