// get selected software and/or driver //------------------------------------------------- // get selected software and/or driver //------------------------------------------------- protected override void get_selection(out ui_software_info software, out ui_system_info system) { if (m_populated_favorites) { software = (ui_software_info)get_selection_ptr(); system = software != null?m_persistent_data.systems()[driver_list.find(software.driver.name)] : null; } else { software = null; system = (ui_system_info)get_selection_ptr(); } }
void populate_list(bool copydesc) { m_systems.reserve(driver_list.total()); std.unordered_set <string> manufacturers; std.unordered_set <string> years; for (int x = 0; x < (int)driver_list.total(); ++x) { game_driver driver = driver_list.driver((size_t)x); ui_system_info ins = new ui_system_info(driver, x, false); m_systems.emplace_back(ins); if (driver != ___empty.driver____empty) { if ((driver.flags & machine_flags.type.IS_BIOS_ROOT) != 0) { ++m_bios_count; } if ((driver.parent.Length >= 1 && driver.parent[0] != '0') || (driver.parent.Length >= 2 && driver.parent[1] != 0)) //if ((driver.parent[0] != '0') || driver.parent[1]) { var parentindex = driver_list.find(driver.parent); if (copydesc) { if (0 <= parentindex) { game_driver parentdriver = driver_list.driver((size_t)parentindex); ins.is_clone = (parentdriver.flags & machine_flags.type.IS_BIOS_ROOT) == 0; ins.parent = parentdriver.type.fullname(); } else { ins.is_clone = false; ins.parent = driver.parent; } } else { ins.is_clone = (0 <= parentindex) && (driver_list.driver((size_t)parentindex).flags & machine_flags.type.IS_BIOS_ROOT) == 0; } } if (copydesc) { ins.description = driver.type.fullname(); } m_filter_data.add_manufacturer(driver.manufacturer); m_filter_data.add_year(driver.year); } } }
menu_dats_view(mame_ui_manager mui, render_container container, ui_system_info system = null) : base(mui, container) { throw new emu_unimplemented(); }
//------------------------------------------------- // populate search list //------------------------------------------------- void populate_search() { // ensure search list is populated if (m_searchlist.empty()) { var sorted = m_persistent_data.sorted_list(); m_searchlist.reserve(sorted.size()); foreach (ui_system_info info in sorted) { m_searchlist.emplace_back(new std.pair <double, ui_system_info>(1.0, info)); } } // keep track of what we matched against string ucs_search = ustr_from_utf8(normalize_unicode(m_search, unicode_normalization_form.D, true)); //const std::u32string ucs_search(ustr_from_utf8(normalize_unicode(m_search, unicode_normalization_form::D, true))); // check available search data if (m_persistent_data.is_available(system_list.available.AVAIL_UCS_SHORTNAME)) { m_searched_fields |= (unsigned)system_list.available.AVAIL_UCS_SHORTNAME; } if (m_persistent_data.is_available(system_list.available.AVAIL_UCS_DESCRIPTION)) { m_searched_fields |= (unsigned)system_list.available.AVAIL_UCS_DESCRIPTION; } if (m_persistent_data.is_available(system_list.available.AVAIL_UCS_MANUF_DESC)) { m_searched_fields |= (unsigned)system_list.available.AVAIL_UCS_MANUF_DESC; } if (m_persistent_data.is_available(system_list.available.AVAIL_UCS_DFLT_DESC)) { m_searched_fields |= (unsigned)system_list.available.AVAIL_UCS_DFLT_DESC; } if (m_persistent_data.is_available(system_list.available.AVAIL_UCS_MANUF_DFLT_DESC)) { m_searched_fields |= (unsigned)system_list.available.AVAIL_UCS_MANUF_DFLT_DESC; } for (int i = 0; i < m_searchlist.Count; i++) //for (std::pair<double, std::reference_wrapper<ui_system_info const> > &info : m_searchlist) { var info = m_searchlist[i]; m_searchlist[i] = std.make_pair(1.0, info.second); ui_system_info sys = info.second; // match shortnames if ((m_searched_fields & (unsigned)system_list.available.AVAIL_UCS_SHORTNAME) != 0) { m_searchlist[i] = std.make_pair(util.edit_distance(ucs_search, sys.ucs_shortname), info.second); } // match reading if (info.first != 0 && !sys.ucs_reading_description.empty()) { m_searchlist[i] = std.make_pair(std.min(util.edit_distance(ucs_search, sys.ucs_reading_description), info.first), info.second); // match "<manufacturer> <reading>" if (info.first != 0) { m_searchlist[i] = std.make_pair(std.min(util.edit_distance(ucs_search, sys.ucs_manufacturer_reading_description), info.first), info.second); } } // match descriptions if (info.first != 0 && (m_searched_fields & (unsigned)system_list.available.AVAIL_UCS_DESCRIPTION) != 0) { m_searchlist[i] = std.make_pair(std.min(util.edit_distance(ucs_search, sys.ucs_description), info.first), info.second); } // match "<manufacturer> <description>" if (info.first != 0 && (m_searched_fields & (unsigned)system_list.available.AVAIL_UCS_MANUF_DESC) != 0) { m_searchlist[i] = std.make_pair(std.min(util.edit_distance(ucs_search, sys.ucs_manufacturer_description), info.first), info.second); } // match default description if (info.first != 0 && (m_searched_fields & (unsigned)system_list.available.AVAIL_UCS_DFLT_DESC) != 0 && !sys.ucs_default_description.empty()) { m_searchlist[i] = std.make_pair(std.min(util.edit_distance(ucs_search, sys.ucs_default_description), info.first), info.second); // match "<manufacturer> <default description>" if (info.first != 0 && (m_searched_fields & (unsigned)system_list.available.AVAIL_UCS_MANUF_DFLT_DESC) != 0) { m_searchlist[i] = std.make_pair(std.min(util.edit_distance(ucs_search, sys.ucs_manufacturer_default_description), info.first), info.second); } } } // sort according to edit distance //std::stable_sort( // m_searchlist.begin(), // m_searchlist.end()); // [] (auto const &lhs, auto const &rhs) { return lhs.first < rhs.first; }); m_searchlist.Sort((lhs, rhs) => { return(lhs.first.CompareTo(rhs.first)); }); }
protected override string make_software_description(ui_software_info software, ui_system_info system) { // first line is system return(string_format(__("System: {0}"), system.description)); //return string_format(_("System: %1$-.100s"), system->description); }