// text for main top/bottom panels protected override void make_topbox_text(out string line0, out string line1, out string line2) { line0 = ""; line1 = ""; line2 = ""; line0 = string_format(__("{0} {1} ( {2} / {3} machines ({4} BIOS) )"), emulator_info.get_appname(), bare_build_version, m_available_items, (driver_list.total() - 1), m_persistent_data.bios_count()); if (m_populated_favorites) { line1 = line1.clear_(); } else { machine_filter it = m_persistent_data.filter_data().get_current_filter(); string filter = it != null?it.filter_text() : null; if (filter != null) { line1 = string_format(__("{0}: {1} - Search: {2}_"), it.display_name(), filter, m_search); // %1$s: %2$s - Search: %3$s_ } else { line1 = string_format(__("Search: {0}_"), m_search); // %1$s_ } } line2 = line2.clear_(); }
//------------------------------------------------- // load custom filters info from file //------------------------------------------------- void load_custom_filters() { emu_file file = new emu_file(ui().options().ui_path(), OPEN_FLAG_READ); if (!file.open(util.string_format("custom_{0}_filter.ini", emulator_info.get_configname()))) { machine_filter flt = machine_filter.create(file, m_persistent_data.filter_data()); if (flt != null) { m_persistent_data.filter_data().set_filter(flt); // not emplace/insert - could replace bogus filter from ui.ini line } file.close(); } }
protected override void populate(ref float customtop, ref float custombottom) { foreach (var icon in m_icons) // TODO: why is this here? maybe better on resize or setting change? { icon.second().texture = null; //icon.second().texture.reset(); } set_switch_image(); bool have_prev_selected = false; int old_item_selected = -1; if (!isfavorite()) { if (m_populated_favorites) { m_prev_selected = null; } m_populated_favorites = false; m_displaylist.clear(); machine_filter flt = m_persistent_data.filter_data().get_current_filter(); // if search is not empty, find approximate matches if (!string.IsNullOrEmpty(m_search)) { populate_search(); if (flt != null) { for (int i = 0; i < m_searchlist.Count && MAX_VISIBLE_SEARCH > m_displaylist.size(); i++) //for (auto it = m_searchlist.begin(); (m_searchlist.end() != it) && (MAX_VISIBLE_SEARCH > m_displaylist.size()); ++it) { var it = m_searchlist[i]; if (flt.apply(it.second)) { m_displaylist.emplace_back(it.second); } } } else { //std.transform( // m_searchlist.begin(), // std.next(m_searchlist.begin(), std.min(m_searchlist.size(), MAX_VISIBLE_SEARCH)), // std.back_inserter(m_displaylist), // [] (auto const &entry) { return entry.second; }); foreach (var it in m_searchlist) { m_displaylist.Add(it.second); } } } else { // if filter is set on category, build category list var sorted = m_persistent_data.sorted_list(); if (flt == null) { foreach (ui_system_info sysinfo in sorted) { m_displaylist.emplace_back(sysinfo); } } else { foreach (ui_system_info sysinfo in sorted) { if (flt.apply(sysinfo)) { m_displaylist.emplace_back(sysinfo); } } } } // iterate over entries int curitem = 0; foreach (ui_system_info elem in m_displaylist) { have_prev_selected = have_prev_selected || (elem == m_prev_selected); if ((old_item_selected == -1) && (elem.driver.name == reselect_last.driver())) { old_item_selected = curitem; } item_append(elem.description, elem.is_clone ? FLAG_INVERT : 0, elem); curitem++; } } else { // populate favorites list if (!m_populated_favorites) { m_prev_selected = null; } m_populated_favorites = true; m_search = ""; //m_search.clear(); int curitem = 0; mame_machine_manager.instance().favorite().apply_sorted( (info) => //[this, &have_prev_selected, &old_item_selected, curitem = 0] (ui_software_info const &info) mutable { have_prev_selected = have_prev_selected || (info == (ui_software_info)m_prev_selected); if (info.startempty != 0) { if (old_item_selected == -1 && info.shortname == reselect_last.driver()) { old_item_selected = curitem; } bool cloneof = std.strcmp(info.driver.parent, "0") != 0; if (cloneof) { int cx = driver_list.find(info.driver.parent); if ((0 <= cx) && ((driver_list.driver((size_t)cx).flags & machine_flags.type.IS_BIOS_ROOT) != 0)) { cloneof = false; } } item_append(info.longname, cloneof ? FLAG_INVERT : 0, info); } else { if (old_item_selected == -1 && info.shortname == reselect_last.driver()) { old_item_selected = curitem; } item_append(info.longname, info.devicetype, info.parentname.empty() ? 0 : FLAG_INVERT, info); } curitem++; }); } // add special items if (stack_has_special_main_menu()) { item_append(menu_item_type.SEPARATOR, 0); item_append(__("Configure Options"), 0, CONF_OPTS); item_append(__("Configure Machine"), 0, CONF_MACHINE); skip_main_items = 3; if (m_prev_selected != null && !have_prev_selected) { m_prev_selected = item(0).ref_(); } } else { skip_main_items = 0; } // configure the custom rendering customtop = 3.0f * ui().get_line_height() + 5.0f * ui().box_tb_border(); custombottom = 4.0f * ui().get_line_height() + 3.0f * ui().box_tb_border(); // reselect prior game launched, if any if (old_item_selected != -1) { set_selected_index(old_item_selected); if (ui_globals.visible_main_lines == 0) { top_line = (selected_index() != 0) ? selected_index() - 1 : 0; } else { top_line = selected_index() - (ui_globals.visible_main_lines / 2); } if (reselect_last.software().empty()) { reselect_last.reset(); } } else { reselect_last.reset(); } }