From 9bdcb9ce52d3407ab9f46768ec0d26c2b6c3e61e Mon Sep 17 00:00:00 2001 From: etabeta78 Date: Tue, 6 Jan 2015 18:52:33 +0100 Subject: (MESS) ui: fixed for real the wrong confirmation menu being prompted when leaving file creation. also, better backspace support in the file creation menu (so that it work on Mac too). nw. --- src/emu/imagedev/floppy.c | 4 ++-- src/emu/ui/filesel.c | 12 +++++++----- src/emu/ui/filesel.h | 5 ++++- src/emu/ui/imgcntrl.c | 12 ++++++++---- src/emu/ui/imgcntrl.h | 6 +++++- 5 files changed, 26 insertions(+), 13 deletions(-) diff --git a/src/emu/imagedev/floppy.c b/src/emu/imagedev/floppy.c index 6155f59fcbd..1c27941dadb 100644 --- a/src/emu/imagedev/floppy.c +++ b/src/emu/imagedev/floppy.c @@ -980,8 +980,8 @@ void ui_menu_control_floppy_image::handle() break; case ui_menu_select_rw::WRITE_OTHER: - ui_menu::stack_push(auto_alloc_clear(machine(), ui_menu_file_create(machine(), container, image, current_directory, current_file))); - state = CREATE_FILE; + ui_menu::stack_push(auto_alloc_clear(machine(), ui_menu_file_create(machine(), container, image, current_directory, current_file, &create_ok))); + state = CHECK_CREATE; break; case -1: diff --git a/src/emu/ui/filesel.c b/src/emu/ui/filesel.c index d017b7f1bc7..1ac5efe0d2a 100644 --- a/src/emu/ui/filesel.c +++ b/src/emu/ui/filesel.c @@ -54,7 +54,7 @@ static void input_character(char *buffer, size_t buffer_length, unicode_char uni { size_t buflen = strlen(buffer); - if ((unichar == 8) && (buflen > 0)) + if ((unichar == 8 || unichar == 0x7f) && (buflen > 0)) { *(char *)utf8_previous_char(&buffer[buflen]) = 0; } @@ -65,7 +65,6 @@ static void input_character(char *buffer, size_t buffer_length, unicode_char uni } } - //------------------------------------------------- // extra_text_draw_box - generically adds header // or footer text @@ -220,12 +219,14 @@ static int is_valid_filename_char(unicode_char unichar) // ctor //------------------------------------------------- -ui_menu_file_create::ui_menu_file_create(running_machine &machine, render_container *container, device_image_interface *image, astring ¤t_directory, astring ¤t_file) +ui_menu_file_create::ui_menu_file_create(running_machine &machine, render_container *container, device_image_interface *image, astring ¤t_directory, astring ¤t_file, bool *ok) : ui_menu(machine, container), m_current_directory(current_directory), m_current_file(current_file) { m_image = image; + m_ok = ok; + *m_ok = true; } @@ -328,12 +329,13 @@ void ui_menu_file_create::handle() reset(UI_MENU_RESET_REMEMBER_POSITION); } break; + case IPT_UI_CANCEL: + *m_ok = false; + break; } } } - - /*************************************************************************** FILE SELECTOR MENU ***************************************************************************/ diff --git a/src/emu/ui/filesel.h b/src/emu/ui/filesel.h index f32e87cf7b7..d06b8853e41 100644 --- a/src/emu/ui/filesel.h +++ b/src/emu/ui/filesel.h @@ -34,7 +34,7 @@ private: class ui_menu_file_create : public ui_menu { public: - ui_menu_file_create(running_machine &machine, render_container *container, device_image_interface *image, astring ¤t_directory, astring ¤t_file); + ui_menu_file_create(running_machine &machine, render_container *container, device_image_interface *image, astring ¤t_directory, astring ¤t_file, bool *ok); virtual ~ui_menu_file_create(); virtual void populate(); virtual void handle(); @@ -46,6 +46,9 @@ private: astring & m_current_file; const image_device_format * m_current_format; char m_filename_buffer[1024]; + +protected: + bool * m_ok; }; diff --git a/src/emu/ui/imgcntrl.c b/src/emu/ui/imgcntrl.c index 09848dcedc3..87d9add75f0 100644 --- a/src/emu/ui/imgcntrl.c +++ b/src/emu/ui/imgcntrl.c @@ -276,8 +276,8 @@ void ui_menu_control_device_image::handle() break; case ui_menu_file_selector::R_CREATE: - ui_menu::stack_push(auto_alloc_clear(machine(), ui_menu_file_create(machine(), container, image, current_directory, current_file))); - state = CREATE_FILE; + ui_menu::stack_push(auto_alloc_clear(machine(), ui_menu_file_create(machine(), container, image, current_directory, current_file, &create_ok))); + state = CHECK_CREATE; break; case ui_menu_file_selector::R_SOFTLIST: @@ -309,12 +309,16 @@ void ui_menu_control_device_image::handle() break; } - case CREATE_CONFIRM: { + case CREATE_CONFIRM: state = create_confirmed ? DO_CREATE : START_FILE; handle(); break; - } + case CHECK_CREATE: + state = create_ok ? CREATE_FILE : START_FILE; + handle(); + break; + case DO_CREATE: { astring path; zippath_combine(path, current_directory, current_file); diff --git a/src/emu/ui/imgcntrl.h b/src/emu/ui/imgcntrl.h index 3e09b2cc52c..98cfcda51c0 100644 --- a/src/emu/ui/imgcntrl.h +++ b/src/emu/ui/imgcntrl.h @@ -25,7 +25,9 @@ public: protected: enum { - START_FILE, START_OTHER_PART, START_SOFTLIST, SELECT_PARTLIST, SELECT_ONE_PART, SELECT_OTHER_PART, SELECT_FILE, CREATE_FILE, CREATE_CONFIRM, DO_CREATE, SELECT_SOFTLIST, + START_FILE, START_OTHER_PART, START_SOFTLIST, + SELECT_PARTLIST, SELECT_ONE_PART, SELECT_OTHER_PART, + SELECT_FILE, CREATE_FILE, CREATE_CONFIRM, CHECK_CREATE, DO_CREATE, SELECT_SOFTLIST, LAST_ID }; @@ -39,6 +41,8 @@ protected: // methods virtual void hook_load(astring filename, bool softlist); + bool create_ok; + private: // instance variables bool create_confirmed; -- cgit v1.2.3