mirror of
https://github.com/OpenMW/openmw.git
synced 2025-10-24 19:56:37 +00:00
Add helper function for toggling controller focus on lists
This commit is contained in:
parent
2dc1d8fed7
commit
e3a9b71bb9
8 changed files with 38 additions and 37 deletions
|
|
@ -488,9 +488,9 @@ namespace MWGui
|
|||
if (mButtons.size() == 2 && mControllerFocus == 0)
|
||||
return true;
|
||||
|
||||
mButtons[mControllerFocus]->setStateSelected(false);
|
||||
setControllerFocus(mButtons, mControllerFocus, false);
|
||||
mControllerFocus = wrap(mControllerFocus - 1, mButtons.size());
|
||||
mButtons[mControllerFocus]->setStateSelected(true);
|
||||
setControllerFocus(mButtons, mControllerFocus, true);
|
||||
}
|
||||
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN)
|
||||
{
|
||||
|
|
@ -499,9 +499,9 @@ namespace MWGui
|
|||
if (mButtons.size() == 2 && mControllerFocus == mButtons.size() - 1)
|
||||
return true;
|
||||
|
||||
mButtons[mControllerFocus]->setStateSelected(false);
|
||||
setControllerFocus(mButtons, mControllerFocus, false);
|
||||
mControllerFocus = wrap(mControllerFocus + 1, mButtons.size());
|
||||
mButtons[mControllerFocus]->setStateSelected(true);
|
||||
setControllerFocus(mButtons, mControllerFocus, true);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
@ -709,15 +709,15 @@ namespace MWGui
|
|||
}
|
||||
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_LEFT)
|
||||
{
|
||||
mButtons[mControllerFocus]->setStateSelected(false);
|
||||
setControllerFocus(mButtons, mControllerFocus, false);
|
||||
mControllerFocus = wrap(mControllerFocus - 1, mButtons.size());
|
||||
mButtons[mControllerFocus]->setStateSelected(true);
|
||||
setControllerFocus(mButtons, mControllerFocus, true);
|
||||
}
|
||||
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_RIGHT)
|
||||
{
|
||||
mButtons[mControllerFocus]->setStateSelected(false);
|
||||
setControllerFocus(mButtons, mControllerFocus, false);
|
||||
mControllerFocus = wrap(mControllerFocus + 1, mButtons.size());
|
||||
mButtons[mControllerFocus]->setStateSelected(true);
|
||||
setControllerFocus(mButtons, mControllerFocus, true);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -182,15 +182,15 @@ namespace MWGui
|
|||
onCancel(mCancelButton);
|
||||
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_UP)
|
||||
{
|
||||
mButtons[mControllerFocus]->setStateSelected(false);
|
||||
setControllerFocus(mButtons, mControllerFocus, false);
|
||||
mControllerFocus = wrap(mControllerFocus - 1, mButtons.size());
|
||||
mButtons[mControllerFocus]->setStateSelected(true);
|
||||
setControllerFocus(mButtons, mControllerFocus, true);
|
||||
}
|
||||
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN)
|
||||
{
|
||||
mButtons[mControllerFocus]->setStateSelected(false);
|
||||
setControllerFocus(mButtons, mControllerFocus, false);
|
||||
mControllerFocus = wrap(mControllerFocus + 1, mButtons.size());
|
||||
mButtons[mControllerFocus]->setStateSelected(true);
|
||||
setControllerFocus(mButtons, mControllerFocus, true);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -461,9 +461,9 @@ namespace MWGui
|
|||
if (mButtons.size() == 2 && mControllerFocus == 0)
|
||||
return true;
|
||||
|
||||
mButtons[mControllerFocus]->setStateSelected(false);
|
||||
setControllerFocus(mButtons, mControllerFocus, false);
|
||||
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)
|
||||
{
|
||||
|
|
@ -472,9 +472,9 @@ namespace MWGui
|
|||
if (mButtons.size() == 2 && mControllerFocus == mButtons.size() - 1)
|
||||
return true;
|
||||
|
||||
mButtons[mControllerFocus]->setStateSelected(false);
|
||||
setControllerFocus(mButtons, mControllerFocus, false);
|
||||
mControllerFocus = wrap(mControllerFocus + 1, mButtons.size());
|
||||
mButtons[mControllerFocus]->setStateSelected(true);
|
||||
setControllerFocus(mButtons, mControllerFocus, true);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -121,7 +121,7 @@ namespace MWGui
|
|||
|
||||
if (Settings::gui().mControllerMenus)
|
||||
{
|
||||
mButtons[mControllerFocus]->setStateSelected(true);
|
||||
setControllerFocus(mButtons, mControllerFocus, true);
|
||||
mControllerButtons.a = "#{sSelect}";
|
||||
mControllerButtons.b = "#{sBack}";
|
||||
mControllerButtons.x = "#{sDone}";
|
||||
|
|
@ -574,22 +574,16 @@ namespace MWGui
|
|||
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_UP ||
|
||||
arg.button == SDL_CONTROLLER_BUTTON_DPAD_LEFT)
|
||||
{
|
||||
mButtons[mControllerFocus]->setStateSelected(false);
|
||||
if (mControllerFocus == 0)
|
||||
mControllerFocus = mButtons.size() - 1;
|
||||
else
|
||||
mControllerFocus--;
|
||||
mButtons[mControllerFocus]->setStateSelected(true);
|
||||
setControllerFocus(mButtons, mControllerFocus, false);
|
||||
mControllerFocus = wrap(mControllerFocus - 1, mButtons.size());
|
||||
setControllerFocus(mButtons, mControllerFocus, true);
|
||||
}
|
||||
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN ||
|
||||
arg.button == SDL_CONTROLLER_BUTTON_DPAD_RIGHT)
|
||||
{
|
||||
mButtons[mControllerFocus]->setStateSelected(false);
|
||||
if (mControllerFocus == mButtons.size() - 1)
|
||||
mControllerFocus = 0;
|
||||
else
|
||||
mControllerFocus++;
|
||||
mButtons[mControllerFocus]->setStateSelected(true);
|
||||
setControllerFocus(mButtons, mControllerFocus, false);
|
||||
mControllerFocus = wrap(mControllerFocus + 1, mButtons.size());
|
||||
setControllerFocus(mButtons, mControllerFocus, true);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -263,18 +263,18 @@ namespace MWGui
|
|||
if (mTrainingButtons.size() <= 1)
|
||||
return true;
|
||||
|
||||
mTrainingButtons[mControllerFocus]->setStateSelected(false);
|
||||
setControllerFocus(mTrainingButtons, mControllerFocus, false);
|
||||
mControllerFocus = wrap(mControllerFocus - 1, mTrainingButtons.size());
|
||||
mTrainingButtons[mControllerFocus]->setStateSelected(true);
|
||||
setControllerFocus(mTrainingButtons, mControllerFocus, true);
|
||||
}
|
||||
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN)
|
||||
{
|
||||
if (mTrainingButtons.size() <= 1)
|
||||
return true;
|
||||
|
||||
mTrainingButtons[mControllerFocus]->setStateSelected(false);
|
||||
setControllerFocus(mTrainingButtons, mControllerFocus, false);
|
||||
mControllerFocus = wrap(mControllerFocus + 1, mTrainingButtons.size());
|
||||
mTrainingButtons[mControllerFocus]->setStateSelected(true);
|
||||
setControllerFocus(mTrainingButtons, mControllerFocus, true);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
|
|||
|
|
@ -270,18 +270,18 @@ namespace MWGui
|
|||
if (mDestinationButtons.size() <= 1)
|
||||
return true;
|
||||
|
||||
mDestinationButtons[mControllerFocus]->setStateSelected(false);
|
||||
setControllerFocus(mDestinationButtons, mControllerFocus, false);
|
||||
mControllerFocus = wrap(mControllerFocus - 1, mDestinationButtons.size());
|
||||
mDestinationButtons[mControllerFocus]->setStateSelected(true);
|
||||
setControllerFocus(mDestinationButtons, mControllerFocus, true);
|
||||
}
|
||||
else if (arg.button == SDL_CONTROLLER_BUTTON_DPAD_DOWN)
|
||||
{
|
||||
if (mDestinationButtons.size() <= 1)
|
||||
return true;
|
||||
|
||||
mDestinationButtons[mControllerFocus]->setStateSelected(false);
|
||||
setControllerFocus(mDestinationButtons, mControllerFocus, false);
|
||||
mControllerFocus = wrap(mControllerFocus + 1, mDestinationButtons.size());
|
||||
mDestinationButtons[mControllerFocus]->setStateSelected(true);
|
||||
setControllerFocus(mDestinationButtons, mControllerFocus, true);
|
||||
}
|
||||
|
||||
// Scroll the list to keep the active item in view
|
||||
|
|
|
|||
|
|
@ -25,6 +25,12 @@ int MWGui::wrap(int index, int max)
|
|||
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)
|
||||
: Layout(parLayout)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ namespace MWGui
|
|||
class DragAndDrop;
|
||||
|
||||
int wrap(int index, int max);
|
||||
void setControllerFocus(std::vector<MyGUI::Button*> buttons, int index, bool selected);
|
||||
|
||||
struct ControllerButtonStr
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue