1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-10-25 07:26:36 +00:00

Add helper function for toggling controller focus on lists

This commit is contained in:
Andrew Lanzone 2025-05-31 19:43:28 -07:00
parent 2dc1d8fed7
commit e3a9b71bb9
8 changed files with 38 additions and 37 deletions

View file

@ -488,9 +488,9 @@ namespace MWGui
if (mButtons.size() == 2 && mControllerFocus == 0) if (mButtons.size() == 2 && mControllerFocus == 0)
return true; return true;
mButtons[mControllerFocus]->setStateSelected(false); setControllerFocus(mButtons, mControllerFocus, false);
mControllerFocus = wrap(mControllerFocus - 1, mButtons.size()); mControllerFocus = wrap(mControllerFocus - 1, mButtons.size());
mButtons[mControllerFocus]->setStateSelected(true); setControllerFocus(mButtons, mControllerFocus, true);
} }
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN) else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN)
{ {
@ -499,9 +499,9 @@ namespace MWGui
if (mButtons.size() == 2 && mControllerFocus == mButtons.size() - 1) if (mButtons.size() == 2 && mControllerFocus == mButtons.size() - 1)
return true; return true;
mButtons[mControllerFocus]->setStateSelected(false); setControllerFocus(mButtons, mControllerFocus, false);
mControllerFocus = wrap(mControllerFocus + 1, mButtons.size()); mControllerFocus = wrap(mControllerFocus + 1, mButtons.size());
mButtons[mControllerFocus]->setStateSelected(true); setControllerFocus(mButtons, mControllerFocus, true);
} }
return true; return true;
@ -709,15 +709,15 @@ namespace MWGui
} }
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_LEFT) else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_LEFT)
{ {
mButtons[mControllerFocus]->setStateSelected(false); setControllerFocus(mButtons, mControllerFocus, false);
mControllerFocus = wrap(mControllerFocus - 1, mButtons.size()); mControllerFocus = wrap(mControllerFocus - 1, mButtons.size());
mButtons[mControllerFocus]->setStateSelected(true); setControllerFocus(mButtons, mControllerFocus, true);
} }
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_RIGHT) else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_RIGHT)
{ {
mButtons[mControllerFocus]->setStateSelected(false); setControllerFocus(mButtons, mControllerFocus, false);
mControllerFocus = wrap(mControllerFocus + 1, mButtons.size()); mControllerFocus = wrap(mControllerFocus + 1, mButtons.size());
mButtons[mControllerFocus]->setStateSelected(true); setControllerFocus(mButtons, mControllerFocus, true);
} }
return true; return true;
} }

View file

@ -182,15 +182,15 @@ namespace MWGui
onCancel(mCancelButton); onCancel(mCancelButton);
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_UP) else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_UP)
{ {
mButtons[mControllerFocus]->setStateSelected(false); setControllerFocus(mButtons, mControllerFocus, false);
mControllerFocus = wrap(mControllerFocus - 1, mButtons.size()); mControllerFocus = wrap(mControllerFocus - 1, mButtons.size());
mButtons[mControllerFocus]->setStateSelected(true); setControllerFocus(mButtons, mControllerFocus, true);
} }
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN) else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN)
{ {
mButtons[mControllerFocus]->setStateSelected(false); setControllerFocus(mButtons, mControllerFocus, false);
mControllerFocus = wrap(mControllerFocus + 1, mButtons.size()); mControllerFocus = wrap(mControllerFocus + 1, mButtons.size());
mButtons[mControllerFocus]->setStateSelected(true); setControllerFocus(mButtons, mControllerFocus, true);
} }
return true; return true;

View file

@ -461,9 +461,9 @@ namespace MWGui
if (mButtons.size() == 2 && mControllerFocus == 0) if (mButtons.size() == 2 && mControllerFocus == 0)
return true; return true;
mButtons[mControllerFocus]->setStateSelected(false); setControllerFocus(mButtons, mControllerFocus, false);
mControllerFocus = wrap(mControllerFocus - 1, mButtons.size()); mControllerFocus = wrap(mControllerFocus - 1, mButtons.size());
mButtons[mControllerFocus]->setStateSelected(true); setControllerFocus(mButtons, mControllerFocus, true);
} }
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN || arg.button == SDL_CONTROLLER_BUTTON_DPAD_RIGHT) else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN || arg.button == SDL_CONTROLLER_BUTTON_DPAD_RIGHT)
{ {
@ -472,9 +472,9 @@ namespace MWGui
if (mButtons.size() == 2 && mControllerFocus == mButtons.size() - 1) if (mButtons.size() == 2 && mControllerFocus == mButtons.size() - 1)
return true; return true;
mButtons[mControllerFocus]->setStateSelected(false); setControllerFocus(mButtons, mControllerFocus, false);
mControllerFocus = wrap(mControllerFocus + 1, mButtons.size()); mControllerFocus = wrap(mControllerFocus + 1, mButtons.size());
mButtons[mControllerFocus]->setStateSelected(true); setControllerFocus(mButtons, mControllerFocus, true);
} }
return true; return true;

View file

@ -121,7 +121,7 @@ namespace MWGui
if (Settings::gui().mControllerMenus) if (Settings::gui().mControllerMenus)
{ {
mButtons[mControllerFocus]->setStateSelected(true); setControllerFocus(mButtons, mControllerFocus, true);
mControllerButtons.a = "#{sSelect}"; mControllerButtons.a = "#{sSelect}";
mControllerButtons.b = "#{sBack}"; mControllerButtons.b = "#{sBack}";
mControllerButtons.x = "#{sDone}"; mControllerButtons.x = "#{sDone}";
@ -574,22 +574,16 @@ namespace MWGui
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_UP || else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_UP ||
arg.button == SDL_CONTROLLER_BUTTON_DPAD_LEFT) arg.button == SDL_CONTROLLER_BUTTON_DPAD_LEFT)
{ {
mButtons[mControllerFocus]->setStateSelected(false); setControllerFocus(mButtons, mControllerFocus, false);
if (mControllerFocus == 0) mControllerFocus = wrap(mControllerFocus - 1, mButtons.size());
mControllerFocus = mButtons.size() - 1; setControllerFocus(mButtons, mControllerFocus, true);
else
mControllerFocus--;
mButtons[mControllerFocus]->setStateSelected(true);
} }
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN || else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN ||
arg.button == SDL_CONTROLLER_BUTTON_DPAD_RIGHT) arg.button == SDL_CONTROLLER_BUTTON_DPAD_RIGHT)
{ {
mButtons[mControllerFocus]->setStateSelected(false); setControllerFocus(mButtons, mControllerFocus, false);
if (mControllerFocus == mButtons.size() - 1) mControllerFocus = wrap(mControllerFocus + 1, mButtons.size());
mControllerFocus = 0; setControllerFocus(mButtons, mControllerFocus, true);
else
mControllerFocus++;
mButtons[mControllerFocus]->setStateSelected(true);
} }
return true; return true;

View file

@ -263,18 +263,18 @@ namespace MWGui
if (mTrainingButtons.size() <= 1) if (mTrainingButtons.size() <= 1)
return true; return true;
mTrainingButtons[mControllerFocus]->setStateSelected(false); setControllerFocus(mTrainingButtons, mControllerFocus, false);
mControllerFocus = wrap(mControllerFocus - 1, mTrainingButtons.size()); mControllerFocus = wrap(mControllerFocus - 1, mTrainingButtons.size());
mTrainingButtons[mControllerFocus]->setStateSelected(true); setControllerFocus(mTrainingButtons, mControllerFocus, true);
} }
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN) else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN)
{ {
if (mTrainingButtons.size() <= 1) if (mTrainingButtons.size() <= 1)
return true; return true;
mTrainingButtons[mControllerFocus]->setStateSelected(false); setControllerFocus(mTrainingButtons, mControllerFocus, false);
mControllerFocus = wrap(mControllerFocus + 1, mTrainingButtons.size()); mControllerFocus = wrap(mControllerFocus + 1, mTrainingButtons.size());
mTrainingButtons[mControllerFocus]->setStateSelected(true); setControllerFocus(mTrainingButtons, mControllerFocus, true);
} }
return true; return true;

View file

@ -270,18 +270,18 @@ namespace MWGui
if (mDestinationButtons.size() <= 1) if (mDestinationButtons.size() <= 1)
return true; return true;
mDestinationButtons[mControllerFocus]->setStateSelected(false); setControllerFocus(mDestinationButtons, mControllerFocus, false);
mControllerFocus = wrap(mControllerFocus - 1, mDestinationButtons.size()); mControllerFocus = wrap(mControllerFocus - 1, mDestinationButtons.size());
mDestinationButtons[mControllerFocus]->setStateSelected(true); setControllerFocus(mDestinationButtons, mControllerFocus, true);
} }
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN) else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN)
{ {
if (mDestinationButtons.size() <= 1) if (mDestinationButtons.size() <= 1)
return true; return true;
mDestinationButtons[mControllerFocus]->setStateSelected(false); setControllerFocus(mDestinationButtons, mControllerFocus, false);
mControllerFocus = wrap(mControllerFocus + 1, mDestinationButtons.size()); mControllerFocus = wrap(mControllerFocus + 1, mDestinationButtons.size());
mDestinationButtons[mControllerFocus]->setStateSelected(true); setControllerFocus(mDestinationButtons, mControllerFocus, true);
} }
// Scroll the list to keep the active item in view // Scroll the list to keep the active item in view

View file

@ -25,6 +25,12 @@ int MWGui::wrap(int index, int max)
return index; return index;
} }
void MWGui::setControllerFocus(std::vector<MyGUI::Button*> buttons, int index, bool focused)
{
if (index >= 0 && index < buttons.size())
buttons[index]->setStateSelected(focused);
}
WindowBase::WindowBase(std::string_view parLayout) WindowBase::WindowBase(std::string_view parLayout)
: Layout(parLayout) : Layout(parLayout)
{ {

View file

@ -15,6 +15,7 @@ namespace MWGui
class DragAndDrop; class DragAndDrop;
int wrap(int index, int max); int wrap(int index, int max);
void setControllerFocus(std::vector<MyGUI::Button*> buttons, int index, bool selected);
struct ControllerButtonStr struct ControllerButtonStr
{ {