From d0162765cdd23c2cb015118b75c87689a839de40 Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Fri, 5 Feb 2016 14:24:17 +0100 Subject: [PATCH] Keep ui options separate from emulator ini file. (nw) TODO: Need fixing saving of some core settings that could be changed by UI --- src/emu/emuopts.cpp | 2 +- src/emu/emuopts.h | 11 +++++----- src/emu/machine.cpp | 7 +++--- src/emu/ui/auditmenu.cpp | 2 +- src/emu/ui/custmenu.cpp | 4 ++-- src/emu/ui/custui.cpp | 10 ++++----- src/emu/ui/datfile.cpp | 5 +++-- src/emu/ui/dirmenu.cpp | 2 +- src/emu/ui/inifile.cpp | 9 ++++---- src/emu/ui/mainmenu.cpp | 12 +++++----- src/emu/ui/menu.cpp | 16 +++++++------- src/emu/ui/optsmenu.cpp | 12 +++++----- src/emu/ui/optsmenu.h | 2 +- src/emu/ui/selgame.cpp | 32 +++++++++++++-------------- src/emu/ui/selsoft.cpp | 12 +++++----- src/emu/ui/ui.cpp | 47 ++++++++++++++++++++++++++++++---------- src/emu/ui/ui.h | 8 +++++-- 17 files changed, 111 insertions(+), 82 deletions(-) diff --git a/src/emu/emuopts.cpp b/src/emu/emuopts.cpp index 64e0856761b..9081f996e6d 100644 --- a/src/emu/emuopts.cpp +++ b/src/emu/emuopts.cpp @@ -202,7 +202,7 @@ const options_entry emu_options::s_option_entries[] = //------------------------------------------------- emu_options::emu_options() -: ui_options() +: core_options() , m_coin_impulse(0) , m_joystick_contradictory(false) , m_sleep(true) diff --git a/src/emu/emuopts.h b/src/emu/emuopts.h index 05baaab650f..dc5acbb7849 100644 --- a/src/emu/emuopts.h +++ b/src/emu/emuopts.h @@ -13,8 +13,7 @@ #ifndef __EMUOPTS_H__ #define __EMUOPTS_H__ -#include "ui/moptions.h" - +#include "options.h" //************************************************************************** // CONSTANTS @@ -27,7 +26,8 @@ enum OPTION_PRIORITY_CMDLINE = OPTION_PRIORITY_HIGH, // INI-based options are NORMAL priority, in increasing order: - OPTION_PRIORITY_MAME_INI = OPTION_PRIORITY_NORMAL, + OPTION_PRIORITY_INI = OPTION_PRIORITY_NORMAL, + OPTION_PRIORITY_MAME_INI, OPTION_PRIORITY_DEBUG_INI, OPTION_PRIORITY_ORIENTATION_INI, OPTION_PRIORITY_SYSTYPE_INI, @@ -35,8 +35,7 @@ enum OPTION_PRIORITY_SOURCE_INI, OPTION_PRIORITY_GPARENT_INI, OPTION_PRIORITY_PARENT_INI, - OPTION_PRIORITY_DRIVER_INI, - OPTION_PRIORITY_INI + OPTION_PRIORITY_DRIVER_INI }; // core options @@ -202,7 +201,7 @@ struct game_driver; class software_part; -class emu_options : public ui_options +class emu_options : public core_options { static const UINT32 OPTION_FLAG_DEVICE = 0x80000000; diff --git a/src/emu/machine.cpp b/src/emu/machine.cpp index 500a03ba9af..21cc7a54812 100644 --- a/src/emu/machine.cpp +++ b/src/emu/machine.cpp @@ -231,12 +231,13 @@ void running_machine::start() // init the osd layer m_manager.osd().init(*this); - // start the inifile manager - m_inifile = std::make_unique(*this); - // create the video manager m_video = std::make_unique(*this); m_ui = std::make_unique(*this); + m_ui->init(); + + // start the inifile manager + m_inifile = std::make_unique(*this); // initialize the base time (needed for doing record/playback) ::time(&m_base_time); diff --git a/src/emu/ui/auditmenu.cpp b/src/emu/ui/auditmenu.cpp index 2cf482d4f8b..8b98f0d70a2 100644 --- a/src/emu/ui/auditmenu.cpp +++ b/src/emu/ui/auditmenu.cpp @@ -173,7 +173,7 @@ void ui_menu_audit::populate() void ui_menu_audit::save_available_machines() { // attempt to open the output file - emu_file file(machine().options().ui_path(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); + emu_file file(machine().ui().options().ui_path(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); if (file.open(emulator_info::get_configname(), "_avail.ini") == FILERR_NONE) { // generate header diff --git a/src/emu/ui/custmenu.cpp b/src/emu/ui/custmenu.cpp index 1162ced015b..45ca407a84b 100644 --- a/src/emu/ui/custmenu.cpp +++ b/src/emu/ui/custmenu.cpp @@ -272,7 +272,7 @@ void ui_menu_custom_filter::custom_render(void *selectedref, float top, float bo void ui_menu_custom_filter::save_custom_filters() { // attempt to open the output file - emu_file file(machine().options().ui_path(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); + emu_file file(machine().ui().options().ui_path(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); if (file.open("custom_", emulator_info::get_configname(), "_filter.ini") == FILERR_NONE) { // generate custom filters info @@ -587,7 +587,7 @@ void ui_menu_swcustom_filter::custom_render(void *selectedref, float top, float void ui_menu_swcustom_filter::save_sw_custom_filters() { // attempt to open the output file - emu_file file(machine().options().ui_path(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); + emu_file file(machine().ui().options().ui_path(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); if (file.open("custom_", m_driver->name, "_filter.ini") == FILERR_NONE) { // generate custom filters info diff --git a/src/emu/ui/custui.cpp b/src/emu/ui/custui.cpp index 70176cf4708..b03f51f9122 100644 --- a/src/emu/ui/custui.cpp +++ b/src/emu/ui/custui.cpp @@ -140,10 +140,10 @@ void ui_menu_custom_ui::custom_render(void *selectedref, float top, float bottom ui_menu_font_ui::ui_menu_font_ui(running_machine &machine, render_container *container) : ui_menu(machine, container) { - emu_options &moptions = machine.options(); + ui_options &moptions = machine.ui().options(); #ifdef UI_WINDOWS - std::string name(moptions.ui_font()); + std::string name(machine.options().ui_font()); list(); m_bold = (strreplace(name, "[B]", "") + strreplace(name, "[b]", "") > 0); @@ -163,7 +163,7 @@ ui_menu_font_ui::ui_menu_font_ui(running_machine &machine, render_container *con m_info_size = moptions.infos_size(); m_font_size = moptions.font_rows(); - for (emu_options::entry *f_entry = moptions.first(); f_entry != nullptr; f_entry = f_entry->next()) + for (ui_options::entry *f_entry = moptions.first(); f_entry != nullptr; f_entry = f_entry->next()) { const char *name = f_entry->name(); if (name && strlen(name) && !strcmp(OPTION_INFOS_SIZE, f_entry->name())) @@ -225,7 +225,7 @@ void ui_menu_font_ui::list() ui_menu_font_ui::~ui_menu_font_ui() { std::string error_string; - emu_options &moptions = machine().options(); + ui_options &moptions = machine().ui().options(); #ifdef UI_WINDOWS std::string name(m_fonts[m_actual]); @@ -655,7 +655,7 @@ void ui_menu_colors_ui::custom_render(void *selectedref, float top, float bottom void ui_menu_colors_ui::restore_colors() { - emu_options options; + ui_options options; for (int index = 1; index < MUI_RESTORE; index++) m_color_table[index].color = rgb_t((UINT32)strtoul(options.value(m_color_table[index].option), nullptr, 16)); } diff --git a/src/emu/ui/datfile.cpp b/src/emu/ui/datfile.cpp index b71b326f5e0..5e8af15b335 100644 --- a/src/emu/ui/datfile.cpp +++ b/src/emu/ui/datfile.cpp @@ -10,6 +10,7 @@ #include "emu.h" #include "drivenum.h" +#include "ui/ui.h" #include "ui/datfile.h" #include "ui/utils.h" @@ -56,7 +57,7 @@ bool datfile_manager::first_run = true; //------------------------------------------------- datfile_manager::datfile_manager(running_machine &machine) : m_machine(machine) { - if (machine.options().enabled_dats() && first_run) + if (machine.ui().options().enabled_dats() && first_run) { first_run = false; if (parseopen("mameinfo.dat")) @@ -539,7 +540,7 @@ bool datfile_manager::parseopen(const char *filename) // MAME core file parsing functions fail in recognizing UNICODE chars in UTF-8 without BOM, // so it's better and faster use standard C fileio functions. - emu_file file(machine().options().history_path(), OPEN_FLAG_READ); + emu_file file(machine().ui().options().history_path(), OPEN_FLAG_READ); if (file.open(filename) != FILERR_NONE) return false; diff --git a/src/emu/ui/dirmenu.cpp b/src/emu/ui/dirmenu.cpp index e606732e2db..a180997aa8a 100644 --- a/src/emu/ui/dirmenu.cpp +++ b/src/emu/ui/dirmenu.cpp @@ -326,7 +326,7 @@ ui_menu_directory::ui_menu_directory(running_machine &machine, render_container ui_menu_directory::~ui_menu_directory() { - save_game_options(machine()); + save_ui_options(machine()); ui_globals::reset = true; } diff --git a/src/emu/ui/inifile.cpp b/src/emu/ui/inifile.cpp index 05c5a887933..1c92b43a4d6 100644 --- a/src/emu/ui/inifile.cpp +++ b/src/emu/ui/inifile.cpp @@ -9,6 +9,7 @@ ***************************************************************************/ #include "emu.h" +#include "ui/ui.h" #include "ui/inifile.h" #include "softlist.h" #include "drivenum.h" @@ -38,7 +39,7 @@ inifile_manager::inifile_manager(running_machine &machine) void inifile_manager::directory_scan() { // open extra INIs folder - file_enumerator path(machine().options().extraini_path()); + file_enumerator path(machine().ui().options().extraini_path()); const osd_directory_entry *dir; // loop into folder's file @@ -149,7 +150,7 @@ bool inifile_manager::parseopen(const char *filename) // MAME core file parsing functions fail in recognizing UNICODE chars in UTF-8 without BOM, // so it's better and faster use standard C fileio functions. - emu_file file(machine().options().extraini_path(), OPEN_FLAG_READ); + emu_file file(machine().ui().options().extraini_path(), OPEN_FLAG_READ); if (file.open(filename) != FILERR_NONE) return false; @@ -357,7 +358,7 @@ bool favorite_manager::isgame_favorite(ui_software_info &swinfo) void favorite_manager::parse_favorite() { - emu_file file(machine().options().ui_path(), OPEN_FLAG_READ); + emu_file file(machine().ui().options().ui_path(), OPEN_FLAG_READ); if (file.open(favorite_filename) == FILERR_NONE) { char readbuf[1024]; @@ -416,7 +417,7 @@ void favorite_manager::parse_favorite() void favorite_manager::save_favorite_games() { // attempt to open the output file - emu_file file(machine().options().ui_path(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); + emu_file file(machine().ui().options().ui_path(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); if (file.open(favorite_filename) == FILERR_NONE) { if (m_list.empty()) diff --git a/src/emu/ui/mainmenu.cpp b/src/emu/ui/mainmenu.cpp index 1bc023f7562..9ea41a3963d 100644 --- a/src/emu/ui/mainmenu.cpp +++ b/src/emu/ui/mainmenu.cpp @@ -137,11 +137,11 @@ void ui_menu_main::populate() item_append("Cheat", nullptr, 0, (void *)CHEAT); /* add history menu */ - if (machine().options().enabled_dats()) + if (machine().ui().options().enabled_dats()) item_append("History Info", nullptr, 0, (void *)HISTORY); // add software history menu - if ((machine().system().flags & MACHINE_TYPE_ARCADE) == 0 && machine().options().enabled_dats()) + if ((machine().system().flags & MACHINE_TYPE_ARCADE) == 0 && machine().ui().options().enabled_dats()) { image_interface_iterator iter(machine().root_device()); for (device_image_interface *image = iter.first(); image != nullptr; image = iter.next()) @@ -156,7 +156,7 @@ void ui_menu_main::populate() } /* add mameinfo / messinfo menu */ - if (machine().options().enabled_dats()) + if (machine().ui().options().enabled_dats()) { if ((machine().system().flags & MACHINE_TYPE_ARCADE) != 0) item_append("MameInfo", nullptr, 0, (void *)MAMEINFO); @@ -165,15 +165,15 @@ void ui_menu_main::populate() } /* add sysinfo menu */ - if ((machine().system().flags & MACHINE_TYPE_ARCADE) == 0 && machine().options().enabled_dats()) + if ((machine().system().flags & MACHINE_TYPE_ARCADE) == 0 && machine().ui().options().enabled_dats()) item_append("SysInfo", nullptr, 0, (void *)SYSINFO); /* add command list menu */ - if ((machine().system().flags & MACHINE_TYPE_ARCADE) != 0 && machine().options().enabled_dats()) + if ((machine().system().flags & MACHINE_TYPE_ARCADE) != 0 && machine().ui().options().enabled_dats()) item_append("Commands Info", nullptr, 0, (void *)COMMAND); /* add story menu */ - if ((machine().system().flags & MACHINE_TYPE_ARCADE) != 0 && machine().options().enabled_dats()) + if ((machine().system().flags & MACHINE_TYPE_ARCADE) != 0 && machine().ui().options().enabled_dats()) item_append("Mamescores", nullptr, 0, (void *)STORYINFO); item_append(MENU_SEPARATOR_ITEM, nullptr, 0, nullptr); diff --git a/src/emu/ui/menu.cpp b/src/emu/ui/menu.cpp index d86f69fc4e2..a8ba0d75b04 100644 --- a/src/emu/ui/menu.cpp +++ b/src/emu/ui/menu.cpp @@ -465,7 +465,7 @@ void ui_menu::draw(bool customonly, bool noimage, bool noinput) float mouse_x = -1, mouse_y = -1; bool history_flag = ((item[0].flags & MENU_FLAG_UI_HISTORY) != 0); - if (machine().options().use_background_image() && &machine().system() == &GAME_NAME(___empty) && bgrnd_bitmap->valid() && !noimage) + if (machine().ui().options().use_background_image() && &machine().system() == &GAME_NAME(___empty) && bgrnd_bitmap->valid() && !noimage) container->add_quad(0.0f, 0.0f, 1.0f, 1.0f, ARGB_WHITE, bgrnd_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); // compute the width and height of the full menu @@ -1305,7 +1305,7 @@ void ui_menu::init_ui(running_machine &machine) bgrnd_bitmap = std::make_unique(0, 0); bgrnd_texture = mrender.texture_alloc(render_texture::hq_scale); - emu_options &mopt = machine.options(); + ui_options &mopt = machine.ui().options(); if (mopt.use_background_image() && &machine.system() == &GAME_NAME(___empty)) { emu_file backgroundfile(".", OPEN_FLAG_READ); @@ -1372,7 +1372,7 @@ void ui_menu::draw_select_game(bool noinput) ui_manager &mui = machine().ui(); // draw background image if available - if (machine().options().use_background_image() && bgrnd_bitmap->valid()) + if (machine().ui().options().use_background_image() && bgrnd_bitmap->valid()) container->add_quad(0.0f, 0.0f, 1.0f, 1.0f, ARGB_WHITE, bgrnd_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); hover = item.size() + 1; @@ -2207,7 +2207,7 @@ void ui_menu::arts_render_images(bitmap_argb32 *tmp_bitmap, float origx1, float int dest_yPixel = tmp_bitmap->height(); // force 4:3 ratio min - if (machine().options().forced_4x3_snapshot() && ratioI < 0.75f && ui_globals::curimage_view == SNAPSHOT_VIEW) + if (machine().ui().options().forced_4x3_snapshot() && ratioI < 0.75f && ui_globals::curimage_view == SNAPSHOT_VIEW) { // smaller ratio will ensure that the image fits in the view dest_yPixel = tmp_bitmap->width() * 0.75f; @@ -2217,7 +2217,7 @@ void ui_menu::arts_render_images(bitmap_argb32 *tmp_bitmap, float origx1, float dest_yPixel *= ratio; } // resize the bitmap if necessary - else if (ratioW < 1 || ratioH < 1 || (machine().options().enlarge_snaps() && !no_available)) + else if (ratioW < 1 || ratioH < 1 || (machine().ui().options().enlarge_snaps() && !no_available)) { // smaller ratio will ensure that the image fits in the view ratio = MIN(ratioW, ratioH); @@ -2336,9 +2336,9 @@ void ui_menu::draw_icon(int linenum, void *selectedref, float x0, float y0) } // get search path - path_iterator path(machine().options().icons_directory()); + path_iterator path(machine().ui().options().icons_directory()); std::string curpath; - std::string searchstr(machine().options().icons_directory()); + std::string searchstr(machine().ui().options().icons_directory()); // iterate over path and add path for zipped formats while (path.next(curpath)) @@ -2446,7 +2446,7 @@ void ui_menu::draw_palette_menu() float gutter_width = lr_arrow_width * 1.3f; int itemnum, linenum; - if (machine().options().use_background_image() && machine().options().system() == nullptr && bgrnd_bitmap->valid()) + if (machine().ui().options().use_background_image() && machine().options().system() == nullptr && bgrnd_bitmap->valid()) container->add_quad(0.0f, 0.0f, 1.0f, 1.0f, ARGB_WHITE, bgrnd_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); // compute the width and height of the full menu diff --git a/src/emu/ui/optsmenu.cpp b/src/emu/ui/optsmenu.cpp index 82cf7b8d42c..1884547d8c5 100644 --- a/src/emu/ui/optsmenu.cpp +++ b/src/emu/ui/optsmenu.cpp @@ -39,7 +39,7 @@ ui_menu_game_options::ui_menu_game_options(running_machine &machine, render_cont ui_menu_game_options::~ui_menu_game_options() { ui_menu::menu_stack->reset(UI_MENU_RESET_SELECT_FIRST); - save_game_options(machine()); + save_ui_options(machine()); ui_globals::switch_image = true; } @@ -323,20 +323,20 @@ void ui_menu_game_options::custom_render(void *selectedref, float top, float bot } //------------------------------------------------- -// save game options +// save ui options //------------------------------------------------- -void save_game_options(running_machine &machine) +void save_ui_options(running_machine &machine) { // attempt to open the output file emu_file file(machine.options().ini_path(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); - if (file.open(emulator_info::get_configname(), ".ini") == FILERR_NONE) + if (file.open("ui.ini") == FILERR_NONE) { // generate the updated INI - std::string initext = machine.options().output_ini(); + std::string initext = machine.ui().options().output_ini(); file.puts(initext.c_str()); file.close(); } else - machine.popmessage("**Error to save %s.ini**", emulator_info::get_configname()); + machine.popmessage("**Error to save ui.ini**", emulator_info::get_configname()); } diff --git a/src/emu/ui/optsmenu.h b/src/emu/ui/optsmenu.h index 6900bfec769..b62e5712de9 100644 --- a/src/emu/ui/optsmenu.h +++ b/src/emu/ui/optsmenu.h @@ -43,6 +43,6 @@ private: }; // save options to file -void save_game_options(running_machine &machine); +void save_ui_options(running_machine &machine); #endif /* __UI_OPTSMENU_H__ */ diff --git a/src/emu/ui/selgame.cpp b/src/emu/ui/selgame.cpp index 208c61b795d..10a53dfae9b 100644 --- a/src/emu/ui/selgame.cpp +++ b/src/emu/ui/selgame.cpp @@ -108,7 +108,7 @@ bool sort_game_list(const game_driver *x, const game_driver *y) ui_menu_select_game::ui_menu_select_game(running_machine &machine, render_container *container, const char *gamename) : ui_menu(machine, container) { std::string error_string, last_filter, sub_filter; - emu_options &moptions = machine.options(); + ui_options &moptions = machine.ui().options(); // load drivers cache load_cache_info(); @@ -185,7 +185,7 @@ ui_menu_select_game::~ui_menu_select_game() std::string error_string, last_driver; const game_driver *driver = nullptr; ui_software_info *swinfo = nullptr; - emu_options &mopt = machine().options(); + ui_options &mopt = machine().ui().options(); if (main_filters::actual == FILTER_FAVORITE_GAME) swinfo = (selected >= 0 && selected < item.size()) ? (ui_software_info *)item[selected].ref : nullptr; else @@ -208,7 +208,7 @@ ui_menu_select_game::~ui_menu_select_game() mopt.set_value(OPTION_LAST_USED_FILTER, filter.c_str(), OPTION_PRIORITY_CMDLINE, error_string); mopt.set_value(OPTION_LAST_USED_MACHINE, last_driver.c_str(), OPTION_PRIORITY_CMDLINE, error_string); mopt.set_value(OPTION_HIDE_PANELS, ui_globals::panels_status, OPTION_PRIORITY_CMDLINE, error_string); - save_game_options(machine()); + save_ui_options(machine()); } //------------------------------------------------- @@ -218,7 +218,7 @@ ui_menu_select_game::~ui_menu_select_game() void ui_menu_select_game::handle() { bool check_filter = false; - bool enabled_dats = machine().options().enabled_dats(); + bool enabled_dats = machine().ui().options().enabled_dats(); // if i have to load datfile, performe an hard reset if (ui_globals::reset) @@ -1023,7 +1023,7 @@ void ui_menu_select_game::inkey_select(const ui_menu_event *m_event) } std::vector biosname; - if (!machine().options().skip_bios_menu() && has_multiple_bios(driver, biosname)) + if (!machine().ui().options().skip_bios_menu() && has_multiple_bios(driver, biosname)) ui_menu::stack_push(global_alloc_clear(machine(), container, biosname, (void *)driver, false, false)); else { @@ -1051,7 +1051,7 @@ void ui_menu_select_game::inkey_select(const ui_menu_event *m_event) void ui_menu_select_game::inkey_select_favorite(const ui_menu_event *m_event) { ui_software_info *ui_swinfo = (ui_software_info *)m_event->itemref; - emu_options &mopt = machine().options(); + ui_options &mopt = machine().ui().options(); // special case for configure options if ((FPTR)ui_swinfo == 1) @@ -1064,7 +1064,7 @@ void ui_menu_select_game::inkey_select_favorite(const ui_menu_event *m_event) else if (ui_swinfo->startempty == 1) { // audit the game first to see if we're going to work - driver_enumerator enumerator(mopt, *ui_swinfo->driver); + driver_enumerator enumerator(machine().options(), *ui_swinfo->driver); enumerator.next(); media_auditor auditor(enumerator); media_auditor::summary summary = auditor.audit_media(AUDIT_VALIDATE_FAST); @@ -1097,7 +1097,7 @@ void ui_menu_select_game::inkey_select_favorite(const ui_menu_event *m_event) else { // first validate - driver_enumerator drv(mopt, *ui_swinfo->driver); + driver_enumerator drv(machine().options(), *ui_swinfo->driver); media_auditor auditor(drv); drv.next(); software_list_device *swlist = software_list_device::find_by_name(drv.config(), ui_swinfo->listname.c_str()); @@ -1541,7 +1541,7 @@ void ui_menu_select_game::general_info(const game_driver *driver, std::string &b strcatprintf(buffer, "Requires CHD: %s\n", (driver_cache[idx].b_chd ? "Yes" : "No")); // audit the game first to see if we're going to work - if (machine().options().info_audit()) + if (machine().ui().options().info_audit()) { driver_enumerator enumerator(machine().options(), *driver); enumerator.next(); @@ -1569,7 +1569,7 @@ void ui_menu_select_game::general_info(const game_driver *driver, std::string &b void ui_menu_select_game::inkey_export() { std::string filename("exported"); - emu_file infile(machine().options().ui_path(), OPEN_FLAG_READ); + emu_file infile(machine().ui().options().ui_path(), OPEN_FLAG_READ); if (infile.open(filename.c_str(), ".xml") == FILERR_NONE) for (int seq = 0; ; ++seq) { @@ -1583,7 +1583,7 @@ void ui_menu_select_game::inkey_export() } // attempt to open the output file - emu_file file(machine().options().ui_path(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); + emu_file file(machine().ui().options().ui_path(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); if (file.open(filename.c_str(), ".xml") == FILERR_NONE) { FILE *pfile; @@ -1625,7 +1625,7 @@ void ui_menu_select_game::inkey_export() void ui_menu_select_game::save_cache_info() { // attempt to open the output file - emu_file file(machine().options().ui_path(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); + emu_file file(machine().ui().options().ui_path(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS); if (file.open("info_", emulator_info::get_configname(), ".ini") == FILERR_NONE) { @@ -1716,7 +1716,7 @@ void ui_menu_select_game::load_cache_info() driver_cache.resize(driver_list::total() + 1); // try to load driver cache - emu_file file(machine().options().ui_path(), OPEN_FLAG_READ); + emu_file file(machine().ui().options().ui_path(), OPEN_FLAG_READ); if (file.open("info_", emulator_info::get_configname(), ".ini") != FILERR_NONE) { save_cache_info(); @@ -1788,7 +1788,7 @@ void ui_menu_select_game::load_cache_info() bool ui_menu_select_game::load_available_machines() { // try to load available drivers from file - emu_file file(machine().options().ui_path(), OPEN_FLAG_READ); + emu_file file(machine().ui().options().ui_path(), OPEN_FLAG_READ); if (file.open(emulator_info::get_configname(), "_avail.ini") != FILERR_NONE) return false; @@ -1840,7 +1840,7 @@ bool ui_menu_select_game::load_available_machines() void ui_menu_select_game::load_custom_filters() { // attempt to open the output file - emu_file file(machine().options().ui_path(), OPEN_FLAG_READ); + emu_file file(machine().ui().options().ui_path(), OPEN_FLAG_READ); if (file.open("custom_", emulator_info::get_configname(), "_filter.ini") == FILERR_NONE) { char buffer[MAX_CHAR_INFO]; @@ -2066,7 +2066,7 @@ void ui_menu_select_game::infos_render(void *selectedref, float origx1, float or static std::string buffer; std::vector xstart; std::vector xend; - float text_size = machine().options().infos_size(); + float text_size = machine().ui().options().infos_size(); const game_driver *driver = nullptr; ui_software_info *soft = nullptr; bool is_favorites = ((item[0].flags & MENU_FLAG_UI_FAVORITE) != 0); diff --git a/src/emu/ui/selsoft.cpp b/src/emu/ui/selsoft.cpp index e4b71a6a809..88cbd8cb2d0 100644 --- a/src/emu/ui/selsoft.cpp +++ b/src/emu/ui/selsoft.cpp @@ -213,7 +213,7 @@ void ui_menu_select_software::handle() } // handle UI_HISTORY - else if (m_event->iptkey == IPT_UI_HISTORY && machine().options().enabled_dats()) + else if (m_event->iptkey == IPT_UI_HISTORY && machine().ui().options().enabled_dats()) { ui_software_info *ui_swinfo = (ui_software_info *)m_event->itemref; @@ -817,7 +817,7 @@ void ui_menu_select_software::custom_render(void *selectedref, float top, float void ui_menu_select_software::inkey_select(const ui_menu_event *m_event) { ui_software_info *ui_swinfo = (ui_software_info *)m_event->itemref; - emu_options &mopt = machine().options(); + ui_options &mopt = machine().ui().options(); if (ui_swinfo->startempty == 1) { @@ -925,7 +925,7 @@ void ui_menu_select_software::inkey_special(const ui_menu_event *m_event) void ui_menu_select_software::load_sw_custom_filters() { // attempt to open the output file - emu_file file(machine().options().ui_path(), OPEN_FLAG_READ); + emu_file file(machine().ui().options().ui_path(), OPEN_FLAG_READ); if (file.open("custom_", m_driver->name, "_filter.ini") == FILERR_NONE) { char buffer[MAX_CHAR_INFO]; @@ -1417,7 +1417,7 @@ void ui_menu_select_software::infos_render(void *selectedref, float origx1, floa static std::string buffer; std::vector xstart; std::vector xend; - float text_size = machine().options().infos_size(); + float text_size = machine().ui().options().infos_size(); ui_software_info *soft = ((FPTR)selectedref > 2) ? (ui_software_info *)selectedref : nullptr; static ui_software_info *oldsoft = nullptr; static int old_sw_view = -1; @@ -1876,7 +1876,7 @@ void ui_bios_selection::handle() { // process the menu const ui_menu_event *event = process(0); - emu_options &moptions = machine().options(); + ui_options &moptions = machine().ui().options(); if (event != nullptr && event->iptkey == IPT_UI_SELECT && event->itemref != nullptr) for (auto & elem : m_bios) if ((void*)&elem.name == event->itemref) @@ -1905,7 +1905,7 @@ void ui_bios_selection::handle() ui_software_info *ui_swinfo = (ui_software_info *)m_driver; std::string error; machine().options().set_value("bios", elem.id, OPTION_PRIORITY_CMDLINE, error); - driver_enumerator drivlist(moptions, *ui_swinfo->driver); + driver_enumerator drivlist(machine().options(), *ui_swinfo->driver); drivlist.next(); software_list_device *swlist = software_list_device::find_by_name(drivlist.config(), ui_swinfo->listname.c_str()); software_info *swinfo = swlist->find(ui_swinfo->shortname.c_str()); diff --git a/src/emu/ui/ui.cpp b/src/emu/ui/ui.cpp index a20da75a68e..b549a51e80f 100644 --- a/src/emu/ui/ui.cpp +++ b/src/emu/ui/ui.cpp @@ -159,6 +159,24 @@ static INT32 slider_crossoffset(running_machine &machine, void *arg, std::string INLINE FUNCTIONS ***************************************************************************/ +//------------------------------------------------- +// load ui options +//------------------------------------------------- + +static void load_ui_options(running_machine &machine) +{ + // parse the file + std::string error; + // attempt to open the output file + emu_file file(machine.options().ini_path(), OPEN_FLAG_READ); + if (file.open("ui.ini") == FILERR_NONE) + { + bool result = machine.ui().options().parse_ini_file((core_file&)file, OPTION_PRIORITY_MAME_INI, OPTION_PRIORITY_DRIVER_INI, error); + if (!result) + osd_printf_error("**Error to load ui.ini**"); + } +} + //------------------------------------------------- // is_breakable_char - is a given unicode // character a possible line break? @@ -248,9 +266,14 @@ static const UINT32 mouse_bitmap[32*32] = ui_manager::ui_manager(running_machine &machine) : m_machine(machine) { +} + +void ui_manager::init() +{ + load_ui_options(machine()); // initialize the other UI bits - ui_menu::init(machine); - ui_gfx_init(machine); + ui_menu::init(machine()); + ui_gfx_init(machine()); // reset instance variables m_font = nullptr; @@ -265,23 +288,23 @@ ui_manager::ui_manager(running_machine &machine) m_mouse_arrow_texture = nullptr; m_load_save_hold = false; - get_font_rows(&machine); - decode_ui_color(0, &machine); + get_font_rows(&machine()); + decode_ui_color(0, &machine()); // more initialization set_handler(handler_messagebox, 0); m_non_char_keys_down = std::make_unique((ARRAY_LENGTH(non_char_keys) + 7) / 8); - m_mouse_show = machine.system().flags & MACHINE_CLICKABLE_ARTWORK ? true : false; + m_mouse_show = machine().system().flags & MACHINE_CLICKABLE_ARTWORK ? true : false; // request a callback upon exiting - machine.add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(ui_manager::exit), this)); + machine().add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(ui_manager::exit), this)); // retrieve options - m_use_natural_keyboard = machine.options().natural_keyboard(); - bitmap_argb32 *ui_mouse_bitmap = auto_alloc(machine, bitmap_argb32(32, 32)); + m_use_natural_keyboard = machine().options().natural_keyboard(); + bitmap_argb32 *ui_mouse_bitmap = auto_alloc(machine(), bitmap_argb32(32, 32)); UINT32 *dst = &ui_mouse_bitmap->pix32(0); memcpy(dst,mouse_bitmap,32*32*sizeof(UINT32)); - m_mouse_arrow_texture = machine.render().texture_alloc(); + m_mouse_arrow_texture = machine().render().texture_alloc(); m_mouse_arrow_texture->set_bitmap(*ui_mouse_bitmap, ui_mouse_bitmap->cliprect(), TEXFORMAT_ARGB32); } @@ -2729,10 +2752,10 @@ rgb_t decode_ui_color(int id, running_machine *machine) static rgb_t color[ARRAY_LENGTH(s_color_list)]; if (machine != nullptr) { - emu_options option; + ui_options option; for (int x = 0; x < ARRAY_LENGTH(s_color_list); x++) { const char *o_default = option.value(s_color_list[x]); - const char *s_option = machine->options().value(s_color_list[x]); + const char *s_option = machine->ui().options().value(s_color_list[x]); int len = strlen(s_option); if (len != 8) color[x] = rgb_t((UINT32)strtoul(o_default, nullptr, 16)); @@ -2751,5 +2774,5 @@ int get_font_rows(running_machine *machine) { static int value; - return ((machine != nullptr) ? value = machine->options().font_rows() : value); + return ((machine != nullptr) ? value = machine->ui().options().font_rows() : value); } diff --git a/src/emu/ui/ui.h b/src/emu/ui/ui.h index 7153dae430b..5a07a0800b5 100644 --- a/src/emu/ui/ui.h +++ b/src/emu/ui/ui.h @@ -14,7 +14,7 @@ #define __USRINTRF_H__ #include "render.h" - +#include "moptions.h" /*************************************************************************** CONSTANTS @@ -116,10 +116,13 @@ public: // construction/destruction ui_manager(running_machine &machine); + void init(); + // getters running_machine &machine() const { return m_machine; } bool single_step() const { return m_single_step; } - + ui_options &options() { return m_ui_options; } + // setters void set_single_step(bool single_step) { m_single_step = single_step; } @@ -193,6 +196,7 @@ private: render_texture * m_mouse_arrow_texture; bool m_mouse_show; bool m_load_save_hold; + ui_options m_ui_options; // text generators std::string &disclaimer_string(std::string &buffer);