UIComboBox.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. // Jolt Physics Library (https://github.com/jrouwe/JoltPhysics)
  2. // SPDX-FileCopyrightText: 2021 Jorrit Rouwe
  3. // SPDX-License-Identifier: MIT
  4. #pragma once
  5. #include <UI/UITexturedQuad.h>
  6. #include <UI/UIButton.h>
  7. /// Combo box with previous and next button
  8. class UIComboBox : public UIElement
  9. {
  10. public:
  11. JPH_DECLARE_RTTI_VIRTUAL(JPH_NO_EXPORT, UIComboBox)
  12. using ItemChangedAction = function<void(int)>;
  13. /// Properties
  14. void SetItems(const Array<String> &inItems) { mItems = inItems; }
  15. void SetCurrentItem(int inItem) { mCurrentItem = inItem; }
  16. void SetPreviousButton(UIButton *inPreviousButton) { mPreviousButton = inPreviousButton; }
  17. void SetNextButton(UIButton *inNextButton) { mNextButton = inNextButton; }
  18. void SetStaticText(UIStaticText *inStaticText) { mStaticText = inStaticText; UpdateStaticText(); }
  19. void SetItemChangedAction(ItemChangedAction inAction) { mItemChangedAction = inAction; }
  20. /// Cloning / copying
  21. virtual void CopyTo(UIElement *ioElement) const override;
  22. /// Event handling (returns true if the event has been handled)
  23. virtual bool HandleUIEvent(EUIEvent inEvent, UIElement *inSender) override;
  24. /// Calculate auto layout
  25. virtual void AutoLayout() override;
  26. protected:
  27. /// Internal function to update the current item
  28. void SetItemInternal(int inItem);
  29. /// Update static text box
  30. void UpdateStaticText();
  31. /// Properties
  32. Array<String> mItems;
  33. int mCurrentItem = 0;
  34. UIButton * mPreviousButton = nullptr;
  35. UIButton * mNextButton = nullptr;
  36. UIStaticText * mStaticText = nullptr;
  37. ItemChangedAction mItemChangedAction;
  38. };