Files
CosmicEngine/lib/All/JoltPhysics/TestFramework/UI/UIComboBox.cpp

89 lines
2.0 KiB
C++

// Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
// SPDX-FileCopyrightText: 2021 Jorrit Rouwe
// SPDX-License-Identifier: MIT
#include <TestFramework.h>
#include <UI/UIComboBox.h>
#include <UI/UIManager.h>
JPH_IMPLEMENT_RTTI_VIRTUAL(UIComboBox)
{
JPH_ADD_BASE_CLASS(UIComboBox, UIElement)
}
void UIComboBox::CopyTo(UIElement *ioElement) const
{
UIElement::CopyTo(ioElement);
UIComboBox *element = StaticCast<UIComboBox>(ioElement);
element->mCurrentItem = mCurrentItem;
element->mItems = mItems;
element->mPreviousButton = mPreviousButton;
element->mNextButton = mNextButton;
element->mStaticText = mStaticText;
element->mItemChangedAction = mItemChangedAction;
}
bool UIComboBox::HandleUIEvent(EUIEvent inEvent, UIElement *inSender)
{
if (inEvent == EVENT_BUTTON_DOWN)
{
if (inSender == mPreviousButton)
{
SetItemInternal(mCurrentItem - 1);
return true;
}
else if (inSender == mNextButton)
{
SetItemInternal(mCurrentItem + 1);
return true;
}
}
return UIElement::HandleUIEvent(inEvent, inSender);
}
void UIComboBox::AutoLayout()
{
UIElement::AutoLayout();
// Position previous button
mPreviousButton->SetRelativeX(0);
mPreviousButton->SetRelativeY((GetHeight() - mPreviousButton->GetHeight()) / 2);
// Position static text
mStaticText->SetRelativeX((GetWidth() - mStaticText->GetWidth()) / 2);
mStaticText->SetRelativeY((GetHeight() - mStaticText->GetHeight()) / 2);
// Position next button
mNextButton->SetRelativeX(GetWidth() - mNextButton->GetWidth());
mNextButton->SetRelativeY((GetHeight() - mNextButton->GetHeight()) / 2);
}
void UIComboBox::SetItemInternal(int inItem)
{
int old_item = mCurrentItem;
if (inItem < 0)
mCurrentItem = 0;
else if (inItem > int(mItems.size()) - 1)
mCurrentItem = int(mItems.size()) - 1;
else
mCurrentItem = inItem;
if (mCurrentItem != old_item)
{
if (mItemChangedAction)
mItemChangedAction(mCurrentItem);
UpdateStaticText();
}
}
void UIComboBox::UpdateStaticText()
{
if (mStaticText != nullptr)
mStaticText->SetText(mItems[mCurrentItem]);
}