diff options
author | 2016-07-02 13:12:10 -0400 | |
---|---|---|
committer | 2016-07-02 14:24:18 -0400 | |
commit | 1d08c0c6fe935400ecdc701086813277e491ebe8 (patch) | |
tree | 7b40952c3f2eb65ea8e069e0862c984e106fd50e | |
parent | d67695e724bdb7225c6701371545d4fbc16078ef (diff) |
Changed menu_file_selector to use std::string for its filename buffer
-rw-r--r-- | src/frontend/mame/ui/filesel.cpp | 26 | ||||
-rw-r--r-- | src/frontend/mame/ui/filesel.h | 2 |
2 files changed, 13 insertions, 15 deletions
diff --git a/src/frontend/mame/ui/filesel.cpp b/src/frontend/mame/ui/filesel.cpp index 5fc81b38495..87429ac7218 100644 --- a/src/frontend/mame/ui/filesel.cpp +++ b/src/frontend/mame/ui/filesel.cpp @@ -679,34 +679,33 @@ void menu_file_selector::handle() } // reset the char buffer when pressing IPT_UI_SELECT - if (m_filename_buffer[0] != '\0') - memset(m_filename_buffer, '\0', ARRAY_LENGTH(m_filename_buffer)); + m_filename.clear(); } else if (event->iptkey == IPT_SPECIAL) { - auto const buflen = std::strlen(m_filename_buffer); bool update_selected = false; if ((event->unichar == 8) || (event->unichar == 0x7f)) { // if it's a backspace and we can handle it, do so + auto const buflen = m_filename.size(); if (0 < buflen) { - *const_cast<char *>(utf8_previous_char(&m_filename_buffer[buflen])) = 0; + auto buffer_oldend = m_filename.c_str() + buflen; + auto buffer_newend = utf8_previous_char(buffer_oldend); + m_filename.resize(buffer_newend - m_filename.c_str()); update_selected = true; - ui().popup_time(ERROR_MESSAGE_TIME, "%s", m_filename_buffer); + ui().popup_time(ERROR_MESSAGE_TIME, "%s", m_filename.c_str()); } } else if (event->is_char_printable()) { // if it's any other key and we're not maxed out, update - if (event->append_char(m_filename_buffer, buflen)) - { - update_selected = true; + m_filename += utf8_from_uchar(event->unichar); + update_selected = true; - ui().popup_time(ERROR_MESSAGE_TIME, "%s", m_filename_buffer); - } + ui().popup_time(ERROR_MESSAGE_TIME, "%s", m_filename.c_str()); } if (update_selected) @@ -719,9 +718,9 @@ void menu_file_selector::handle() if (cur_selected != &entry) { int match = 0; - for (int i = 0; i < ARRAY_LENGTH(m_filename_buffer); i++) + for (int i = 0; i < m_filename.size(); i++) { - if (core_strnicmp(entry.basename.c_str(), m_filename_buffer, i) == 0) + if (core_strnicmp(entry.basename.c_str(), m_filename.c_str(), i) == 0) match = i; } @@ -743,8 +742,7 @@ void menu_file_selector::handle() else if (event->iptkey == IPT_UI_CANCEL) { // reset the char buffer also in this case - if (m_filename_buffer[0] != '\0') - memset(m_filename_buffer, '\0', ARRAY_LENGTH(m_filename_buffer)); + m_filename.clear(); } } } diff --git a/src/frontend/mame/ui/filesel.h b/src/frontend/mame/ui/filesel.h index f4ae00883bd..c18af7fecba 100644 --- a/src/frontend/mame/ui/filesel.h +++ b/src/frontend/mame/ui/filesel.h @@ -99,7 +99,7 @@ private: int * m_result; std::vector<file_selector_entry> m_entrylist; std::string m_hover_directory; - char m_filename_buffer[1024]; + std::string m_filename; // methods int compare_entries(const file_selector_entry *e1, const file_selector_entry *e2); |