diff options
author | 2017-12-13 21:01:10 -0700 | |
---|---|---|
committer | 2017-12-13 21:01:10 -0700 | |
commit | 54155441e9ba9941e85d80c4834a66376a11e791 (patch) | |
tree | aa44bdaf0035cbe188d64c447f225f10f7d76d8d /src/frontend/mame/ui/filesel.cpp | |
parent | f537428e5a40ba6dde8ca9bf0fe9ae6b1f189ac4 (diff) |
Revert "Merge branch 'master' of https://github.com/mamedev/mame"
This reverts commit f537428e5a40ba6dde8ca9bf0fe9ae6b1f189ac4, reversing
changes made to 0d70d798107d4e4e8fb9f230410aeb1e888d65c5.
Diffstat (limited to 'src/frontend/mame/ui/filesel.cpp')
-rw-r--r-- | src/frontend/mame/ui/filesel.cpp | 142 |
1 files changed, 77 insertions, 65 deletions
diff --git a/src/frontend/mame/ui/filesel.cpp b/src/frontend/mame/ui/filesel.cpp index c64dcc5001e..256834c5de1 100644 --- a/src/frontend/mame/ui/filesel.cpp +++ b/src/frontend/mame/ui/filesel.cpp @@ -47,15 +47,14 @@ namespace ui { menu_file_selector::menu_file_selector(mame_ui_manager &mui, render_container &container, device_image_interface *image, std::string ¤t_directory, std::string ¤t_file, bool has_empty, bool has_softlist, bool has_create, menu_file_selector::result &result) : menu(mui, container) - , m_image(image) , m_current_directory(current_directory) , m_current_file(current_file) - , m_has_empty(has_empty) - , m_has_softlist(has_softlist) - , m_has_create(has_create) , m_result(result) { - (void)m_image; + m_image = image; + m_has_empty = has_empty; + m_has_softlist = has_softlist; + m_has_create = has_create; } @@ -177,9 +176,7 @@ int menu_file_selector::compare_entries(const file_selector_entry *e1, const fil //------------------------------------------------- menu_file_selector::file_selector_entry &menu_file_selector::append_entry( - file_selector_entry_type entry_type, - const std::string &entry_basename, - const std::string &entry_fullpath) + file_selector_entry_type entry_type, const std::string &entry_basename, const std::string &entry_fullpath) { return append_entry(entry_type, std::string(entry_basename), std::string(entry_fullpath)); } @@ -191,9 +188,7 @@ menu_file_selector::file_selector_entry &menu_file_selector::append_entry( //------------------------------------------------- menu_file_selector::file_selector_entry &menu_file_selector::append_entry( - file_selector_entry_type entry_type, - std::string &&entry_basename, - std::string &&entry_fullpath) + file_selector_entry_type entry_type, std::string &&entry_basename, std::string &&entry_fullpath) { // allocate a new entry file_selector_entry entry; @@ -202,41 +197,47 @@ menu_file_selector::file_selector_entry &menu_file_selector::append_entry( entry.fullpath = std::move(entry_fullpath); // find the end of the list - return *m_entrylist.emplace(m_entrylist.end(), std::move(entry)); + m_entrylist.emplace_back(std::move(entry)); + return m_entrylist[m_entrylist.size() - 1]; } //------------------------------------------------- -// append_dirent_entry - appends +// append_entry_menu_item - appends // a menu item for a file selector entry //------------------------------------------------- menu_file_selector::file_selector_entry *menu_file_selector::append_dirent_entry(const osd::directory::entry *dirent) { + std::string buffer; file_selector_entry_type entry_type; - switch (dirent->type) + file_selector_entry *entry; + + switch(dirent->type) { - case osd::directory::entry::entry_type::FILE: - entry_type = SELECTOR_ENTRY_TYPE_FILE; - break; + case osd::directory::entry::entry_type::FILE: + entry_type = SELECTOR_ENTRY_TYPE_FILE; + break; - case osd::directory::entry::entry_type::DIR: - entry_type = SELECTOR_ENTRY_TYPE_DIRECTORY; - break; + case osd::directory::entry::entry_type::DIR: + entry_type = SELECTOR_ENTRY_TYPE_DIRECTORY; + break; - default: - // exceptional case; do not add a menu item - return nullptr; + default: + // exceptional case; do not add a menu item + return nullptr; } // determine the full path - std::string buffer = util::zippath_combine(m_current_directory, dirent->name); + buffer = util::zippath_combine(m_current_directory, dirent->name); // create the file selector entry - return &append_entry( - entry_type, - dirent->name, - std::move(buffer)); + entry = &append_entry( + entry_type, + dirent->name, + std::move(buffer)); + + return entry; } @@ -289,51 +290,64 @@ void menu_file_selector::append_entry_menu_item(const file_selector_entry *entry void menu_file_selector::populate(float &customtop, float &custombottom) { + util::zippath_directory *directory = nullptr; + osd_file::error err; + const osd::directory::entry *dirent; + const file_selector_entry *entry; 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); // clear out the menu entries m_entrylist.clear(); - // open the directory - util::zippath_directory *directory = nullptr; - osd_file::error const err = util::zippath_opendir(m_current_directory, &directory); - - // add the "[empty slot]" entry if available if (m_has_empty) + { + // add the "[empty slot]" entry append_entry(SELECTOR_ENTRY_TYPE_EMPTY, "", ""); + } - // add the "[create]" entry if (m_has_create && !util::zippath_is_zip(directory)) + { + // add the "[create]" entry append_entry(SELECTOR_ENTRY_TYPE_CREATE, "", ""); + } - // add and select the "[software list]" entry if available if (m_has_softlist) - selected_entry = &append_entry(SELECTOR_ENTRY_TYPE_SOFTWARE_LIST, "", ""); + { + // add the "[software list]" entry + entry = &append_entry(SELECTOR_ENTRY_TYPE_SOFTWARE_LIST, "", ""); + selected_entry = entry; + } // add the drives - int i = 0; - for (char const *volume_name = osd_get_volume_name(i); volume_name; volume_name = osd_get_volume_name(++i)) - append_entry(SELECTOR_ENTRY_TYPE_DRIVE, volume_name, volume_name); + i = 0; + while((volume_name = osd_get_volume_name(i))!=nullptr) + { + append_entry(SELECTOR_ENTRY_TYPE_DRIVE, + volume_name, volume_name); + i++; + } // mark first filename entry - std::size_t const first = m_entrylist.size() + 1; + first = m_entrylist.size() + 1; // build the menu for each item - if (osd_file::error::NONE != err) - { - osd_printf_verbose("menu_file_selector::populate: error opening directory '%s' (%d)\n", m_current_directory.c_str(), int(err)); - } - else + if (err == osd_file::error::NONE) { - for (osd::directory::entry const *dirent = util::zippath_readdir(directory); dirent; dirent = util::zippath_readdir(directory)) + while((dirent = util::zippath_readdir(directory)) != nullptr) { // append a dirent entry - file_selector_entry const *entry = append_dirent_entry(dirent); - if (entry) + entry = append_dirent_entry(dirent); + + if (entry != nullptr) { // set the selected item to be the first non-parent directory or file - if (!selected_entry && strcmp(dirent->name, "..")) + if ((selected_entry == nullptr) && strcmp(dirent->name, "..")) selected_entry = entry; // do we have to select this file? @@ -342,31 +356,29 @@ void menu_file_selector::populate(float &customtop, float &custombottom) } } } - if (directory) - util::zippath_closedir(directory); // sort the menu entries - 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] (file_selector_entry const &x, file_selector_entry const &y) - { - std::wstring const xstr = wstring_from_utf8(x.basename); - std::wstring const ystr = wstring_from_utf8(y.basename); - return coll.compare(xstr.data(), xstr.data()+xstr.size(), ystr.data(), ystr.data()+ystr.size()) < 0; - }); + 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](file_selector_entry const &x, file_selector_entry const &y) + { + std::wstring xstr = wstring_from_utf8(x.basename); + std::wstring ystr = wstring_from_utf8(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 (file_selector_entry const &entry : m_entrylist) + for (auto &entry : m_entrylist) append_entry_menu_item(&entry); // set the selection (if we have one) - if (selected_entry) - set_selection((void *)selected_entry); + if (selected_entry != nullptr) + set_selection((void *) selected_entry); // set up custom render proc customtop = ui().get_line_height() + 3.0f * UI_BOX_TB_BORDER; + + if (directory != nullptr) + util::zippath_closedir(directory); } @@ -414,7 +426,7 @@ void menu_file_selector::handle() if (err != osd_file::error::NONE) { // this path is problematic; present the user with an error and bail - ui().popup_time(1, _("Error accessing %s"), entry->fullpath); + ui().popup_time(1, "Error accessing %s", entry->fullpath); break; } m_current_directory.assign(entry->fullpath); |