TurtleBrains  0.3.5
High quality, portable, C++ framework for rapid 2D game development.
tbx_interface_dropdown.hpp
1 
9 #ifndef TurtleBrainsExpress_InterfaceDropdown_hpp
10 #define TurtleBrainsExpress_InterfaceDropdown_hpp
11 
12 #include <turtle_brains/express/interface/tbx_interface.hpp>
13 #include <turtle_brains/express/interface/tbx_interface_element.hpp>
14 #include <turtle_brains/express/interface/tbx_interface_handler_interface.hpp>
15 #include <turtle_brains/express/interface/tbx_interface_screen.hpp>
16 #include <turtle_brains/express/interface/tbx_interface_button.hpp>
17 #include <turtle_brains/graphics/tb_text.hpp>
18 #include <turtle_brains/graphics/tb_basic_shapes.hpp>
19 
20 #include <vector>
21 #include <functional>
22 
23 namespace TurtleBrainsExpress
24 {
25  namespace Interface
26  {
27  namespace Unstable
28  {
33  {
34  public:
35  typedef std::vector<tbCore::tbString> ItemContainer;
36 
37  Dropdown(const ItemContainer& itemNames, const size_t selectedIndex = 0);
38  virtual ~Dropdown(void) = 0;
39 
40  size_t GetSelectedIndex(void) const { return mSelectedIndex; }
41  void SetSelectedIndex(const size_t selectedIndex);
42 
43  protected:
44  virtual void OnHandleUserEvent(const UserEvent& userEvent) override;
45  virtual void OnHandleActiveUserEvent(const UserEvent& userEvent) override;
46  virtual void OnActivate(void) override;
47  virtual bool ContainsPointer(const Point& pointerPosition) const override;
48 
49  virtual void OnSelectionChange(const size_t selectedIndex) = 0;
50  virtual void OnStateChange(const State& newState) override;
51  virtual void OnHandleInterfaceEvent(const InterfaceEvent& interfaceEvent, const ElementHandle& elementHandle) override;
52 
53  const ItemContainer& GetItemNames(void) const { return mItemNames; }
54  size_t GetFocusedIndex(void) const { return mFocusedIndex; }
55  size_t GetVisibleItems(void) const { return mVisibleItems; }
56 
57  private:
58  ItemContainer mItemNames;
59  size_t mSelectedIndex;
60  size_t mFocusedIndex; //can be different than selected index (mouse over/highlighted)
61  size_t mVisibleItems;
62  bool mPressedWhileActive;
63  bool mTrulyContainsPointer;
64  };
65 
66  class SimpleDropdown : public Dropdown
67  {
68  public:
69  SimpleDropdown(const ItemContainer& itemNames, const size_t selectedIndex,
70  const tbGraphics::PixelSpace& width, const tbGraphics::PixelSpace& height);
71  virtual ~SimpleDropdown(void);
72 
73  protected:
74  virtual void OnSelectionChange(const size_t selectedIndex) override;
75 
76  private:
77  void RecreateActiveGraphics(const size_t selectedIndex);
78 
79  tbGraphics::Text mSelectedText; //When closed
80 
81  tbGraphics::BoxShape mDropdownBox;
82  tbGraphics::BoxShape mFocusedItemBox;
83  };
84 
85  };
86  }; /* namespace Interface */
87 }; /* namespace TurtleBrainsExpress */
88 
90 
91 #endif /* TurtleBrainsExpress_InterfaceDropdown_hpp */
A collection of objects and functions to express games quickly.
Definition: tbx_interface_dropdown.hpp:66
Definition: tbx_interface.hpp:18
Definition: tbx_interface_handler_interface.hpp:27
Definition: tbx_interface.hpp:58
tbCore::uint16 PixelSpace
Definition: tb_texture_manager.hpp:36
Definition: tb_text.hpp:42
Definition: tbx_interface_dropdown.hpp:32
Definition: tbx_interface_element.hpp:28
Definition: tb_basic_shapes.hpp:237