diff options
Diffstat (limited to 'src/frontend/mame/ui/filesel.cpp')
-rw-r--r-- | src/frontend/mame/ui/filesel.cpp | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/frontend/mame/ui/filesel.cpp b/src/frontend/mame/ui/filesel.cpp index 114fa317c74..2efe4e0e24f 100644 --- a/src/frontend/mame/ui/filesel.cpp +++ b/src/frontend/mame/ui/filesel.cpp @@ -22,7 +22,8 @@ #include "zippath.h" #include <cstring> - +#include <locale> +#include <codecvt> namespace ui { /*************************************************************************** @@ -297,6 +298,7 @@ void menu_file_selector::populate(float &customtop, float &custombottom) const file_selector_entry *selected_entry = nullptr; int i; const char *volume_name; + uint8_t first; // open the directory err = util::zippath_opendir(m_current_directory, &directory); @@ -332,6 +334,9 @@ void menu_file_selector::populate(float &customtop, float &custombottom) i++; } + // mark first filename entry + first = m_entrylist.size() + 1; + // build the menu for each item if (err == osd_file::error::NONE) { @@ -353,6 +358,16 @@ void menu_file_selector::populate(float &customtop, float &custombottom) } } + // sort the menu entries + std::wstring_convert<std::codecvt_utf8<wchar_t>> conv; + const std::collate<wchar_t>& coll = std::use_facet<std::collate<wchar_t>>(std::locale()); + std::sort(m_entrylist.begin()+first, m_entrylist.end(), [&coll, &conv](file_selector_entry const &x, file_selector_entry const &y) + { + std::wstring xstr = conv.from_bytes(x.basename); + std::wstring ystr = conv.from_bytes(y.basename); + return coll.compare(xstr.data(), xstr.data()+xstr.size(), ystr.data(), ystr.data()+ystr.size()) < 0; + } ); + // append all of the menu entries for (auto &entry : m_entrylist) append_entry_menu_item(&entry); |