summaryrefslogtreecommitdiffstats
path: root/src/frontend/mame/ui/filesel.cpp
diff options
context:
space:
mode:
author Nathan Woods <npwoods@mess.org>2016-07-02 13:12:10 -0400
committer Nathan Woods <npwoods@mess.org>2016-07-02 14:24:18 -0400
commit1d08c0c6fe935400ecdc701086813277e491ebe8 (patch)
tree7b40952c3f2eb65ea8e069e0862c984e106fd50e /src/frontend/mame/ui/filesel.cpp
parentd67695e724bdb7225c6701371545d4fbc16078ef (diff)
Changed menu_file_selector to use std::string for its filename buffer
Diffstat (limited to 'src/frontend/mame/ui/filesel.cpp')
-rw-r--r--src/frontend/mame/ui/filesel.cpp26
1 files changed, 12 insertions, 14 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();
}
}
}