Пример #1
0
        // 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_();
        }
Пример #2
0
        //-------------------------------------------------
        //  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();
            }
        }
Пример #3
0
        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();
            }
        }