summaryrefslogtreecommitdiffstatshomepage
path: root/src/frontend
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2019-11-18 21:11:00 +1100
committer Vas Crabb <vas@vastheman.com>2019-11-18 21:11:00 +1100
commitbc4906f99155d58ad7b0f5e896e00dcf21bc9d45 (patch)
tree867aa4b3f67ccf2db6b85575d3f8d70b7ae7350f /src/frontend
parentf1c02b33e1f61dc878cf3496ceec483986db5215 (diff)
UI updates:
* Hook up focus next/focus prev on system/software selection menus (Tab and LShift-Tab, respectively by default) * Allow joystick buttons to be used to change focus on system/software selection menus * Fixed bug that allowed focus to move to hidden panels (nw) Second attempt at doing this, and it worked fine. Must've been in bad mental health when I tried and failed to do this back in May
Diffstat (limited to 'src/frontend')
-rw-r--r--src/frontend/mame/ui/selgame.cpp4
-rw-r--r--src/frontend/mame/ui/selmenu.cpp96
-rw-r--r--src/frontend/mame/ui/selmenu.h2
-rw-r--r--src/frontend/mame/ui/selsoft.cpp4
4 files changed, 76 insertions, 30 deletions
diff --git a/src/frontend/mame/ui/selgame.cpp b/src/frontend/mame/ui/selgame.cpp
index 6e9bbf917fe..b9b4ce4187d 100644
--- a/src/frontend/mame/ui/selgame.cpp
+++ b/src/frontend/mame/ui/selgame.cpp
@@ -373,10 +373,6 @@ void menu_select_game::handle()
m_filter_highlight = machine_filter::LAST;
break;
- case IPT_UI_CONFIGURE:
- inkey_navigation();
- break;
-
case IPT_UI_EXPORT:
inkey_export();
break;
diff --git a/src/frontend/mame/ui/selmenu.cpp b/src/frontend/mame/ui/selmenu.cpp
index 75b06a0cef3..823412314ae 100644
--- a/src/frontend/mame/ui/selmenu.cpp
+++ b/src/frontend/mame/ui/selmenu.cpp
@@ -715,7 +715,7 @@ void menu_select_launch::custom_render(void *selectedref, float top, float botto
}
-void menu_select_launch::inkey_navigation()
+void menu_select_launch::rotate_focus(int dir)
{
switch (get_focus())
{
@@ -723,28 +723,31 @@ void menu_select_launch::inkey_navigation()
if (selected_index() <= m_available_items)
{
m_prev_selected = get_selection_ref();
- set_selected_index(m_available_items + 1);
+ if ((0 < dir) || (ui_globals::panels_status == HIDE_BOTH))
+ set_selected_index(m_available_items + 1);
+ else if (ui_globals::panels_status == HIDE_RIGHT_PANEL)
+ set_focus(focused_menu::LEFT);
+ else
+ set_focus(focused_menu::RIGHTBOTTOM);
}
else
{
- if (ui_globals::panels_status != HIDE_LEFT_PANEL)
- set_focus(focused_menu::LEFT);
-
- else if (ui_globals::panels_status == HIDE_BOTH)
- {
- for (int x = 0; x < item_count(); ++x)
- if (item(x).ref == m_prev_selected)
- set_selected_index(x);
- }
- else
- {
+ if ((0 > dir) || (ui_globals::panels_status == HIDE_BOTH))
+ select_prev();
+ else if (ui_globals::panels_status == HIDE_LEFT_PANEL)
set_focus(focused_menu::RIGHTTOP);
- }
+ else
+ set_focus(focused_menu::LEFT);
}
break;
case focused_menu::LEFT:
- if (ui_globals::panels_status != HIDE_RIGHT_PANEL)
+ if (0 > dir)
+ {
+ set_focus(focused_menu::MAIN);
+ set_selected_index(m_available_items + 1);
+ }
+ else if (ui_globals::panels_status != HIDE_RIGHT_PANEL)
{
set_focus(focused_menu::RIGHTTOP);
}
@@ -756,12 +759,31 @@ void menu_select_launch::inkey_navigation()
break;
case focused_menu::RIGHTTOP:
- set_focus(focused_menu::RIGHTBOTTOM);
+ if (0 < dir)
+ {
+ set_focus(focused_menu::RIGHTBOTTOM);
+ }
+ else if (ui_globals::panels_status != HIDE_LEFT_PANEL)
+ {
+ set_focus(focused_menu::LEFT);
+ }
+ else
+ {
+ set_focus(focused_menu::MAIN);
+ set_selected_index(m_available_items + 1);
+ }
break;
case focused_menu::RIGHTBOTTOM:
- set_focus(focused_menu::MAIN);
- select_prev();
+ if (0 > dir)
+ {
+ set_focus(focused_menu::RIGHTTOP);
+ }
+ else
+ {
+ set_focus(focused_menu::MAIN);
+ select_prev();
+ }
break;
}
}
@@ -1486,6 +1508,20 @@ void menu_select_launch::handle_keys(uint32_t flags, int &iptkey)
set_selected_index(top_line = m_available_items - 1);
}
+ // focus next rotates throw targets forward
+ if (exclusive_input_pressed(iptkey, IPT_UI_FOCUS_NEXT, 12))
+ {
+ if (!m_ui_error)
+ rotate_focus(1);
+ }
+
+ // focus next rotates throw targets forward
+ if (exclusive_input_pressed(iptkey, IPT_UI_FOCUS_PREV, 12))
+ {
+ if (!m_ui_error)
+ rotate_focus(-1);
+ }
+
// pause enables/disables pause
if (!m_ui_error && !ignorepause && exclusive_input_pressed(iptkey, IPT_UI_PAUSE, 0))
{
@@ -1504,9 +1540,28 @@ void menu_select_launch::handle_keys(uint32_t flags, int &iptkey)
{
for (int code = IPT_UI_FIRST + 1; code < IPT_UI_LAST; code++)
{
- if (m_ui_error || code == IPT_UI_CONFIGURE || (code == IPT_UI_LEFT && ignoreleft) || (code == IPT_UI_RIGHT && ignoreright) || (code == IPT_UI_PAUSE && ignorepause))
+ if (m_ui_error)
continue;
+ switch (code)
+ {
+ case IPT_UI_FOCUS_NEXT:
+ case IPT_UI_FOCUS_PREV:
+ continue;
+ case IPT_UI_LEFT:
+ if (ignoreleft)
+ continue;
+ break;
+ case IPT_UI_RIGHT:
+ if (ignoreright)
+ continue;
+ break;
+ case IPT_UI_PAUSE:
+ if (ignorepause)
+ continue;
+ break;
+ }
+
if (exclusive_input_pressed(iptkey, code, 0))
break;
}
@@ -1680,9 +1735,8 @@ void menu_select_launch::handle_events(uint32_t flags, event &ev)
// translate CHAR events into specials
case ui_event::IME_CHAR:
- if (exclusive_input_pressed(ev.iptkey, IPT_UI_CONFIGURE, 0))
+ if (exclusive_input_pressed(ev.iptkey, IPT_UI_FOCUS_NEXT, 0) || exclusive_input_pressed(ev.iptkey, IPT_UI_FOCUS_PREV, 0))
{
- ev.iptkey = IPT_UI_CONFIGURE;
stop = true;
}
else if (m_ui_error)
diff --git a/src/frontend/mame/ui/selmenu.h b/src/frontend/mame/ui/selmenu.h
index 01d98aa8be0..e3d532e9cc3 100644
--- a/src/frontend/mame/ui/selmenu.h
+++ b/src/frontend/mame/ui/selmenu.h
@@ -123,7 +123,6 @@ protected:
virtual void custom_render(void *selectedref, float top, float bottom, float x, float y, float x2, float y2) override;
// handlers
- void inkey_navigation();
virtual void inkey_export() = 0;
void inkey_dats();
@@ -250,6 +249,7 @@ private:
}
}
}
+ void rotate_focus(int dir);
void draw_toolbar(float x1, float y1, float x2, float y2);
void draw_star(float x0, float y0);
diff --git a/src/frontend/mame/ui/selsoft.cpp b/src/frontend/mame/ui/selsoft.cpp
index 6f2ecd5ee4f..4133f238e08 100644
--- a/src/frontend/mame/ui/selsoft.cpp
+++ b/src/frontend/mame/ui/selsoft.cpp
@@ -203,10 +203,6 @@ void menu_select_software::handle()
m_filter_highlight = software_filter::LAST;
break;
- case IPT_UI_CONFIGURE:
- inkey_navigation();
- break;
-
case IPT_UI_DATS:
inkey_dats();
break;