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:
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)
|
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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue