TGUI  0.9.1
ComboBox.hpp
1 //
3 // TGUI - Texus' Graphical User Interface
4 // Copyright (C) 2012-2021 Bruno Van de Velde (vdv_b@tgui.eu)
5 //
6 // This software is provided 'as-is', without any express or implied warranty.
7 // In no event will the authors be held liable for any damages arising from the use of this software.
8 //
9 // Permission is granted to anyone to use this software for any purpose,
10 // including commercial applications, and to alter it and redistribute it freely,
11 // subject to the following restrictions:
12 //
13 // 1. The origin of this software must not be misrepresented;
14 // you must not claim that you wrote the original software.
15 // If you use this software in a product, an acknowledgment
16 // in the product documentation would be appreciated but is not required.
17 //
18 // 2. Altered source versions must be plainly marked as such,
19 // and must not be misrepresented as being the original software.
20 //
21 // 3. This notice may not be removed or altered from any source distribution.
22 //
24 
25 
26 #ifndef TGUI_COMBO_BOX_HPP
27 #define TGUI_COMBO_BOX_HPP
28 
29 
30 #include <TGUI/Widgets/ListBox.hpp>
31 #include <TGUI/Renderers/ComboBoxRenderer.hpp>
32 
34 
35 namespace tgui
36 {
40  class TGUI_API ComboBox : public Widget
41  {
42  public:
43 
45  enum class ExpandDirection
46  {
47  Down,
48  Up,
49  Automatic
50  };
51 
52  public:
53 
54  typedef std::shared_ptr<ComboBox> Ptr;
55  typedef std::shared_ptr<const ComboBox> ConstPtr;
56 
57 
65  ComboBox(const char* typeName = "ComboBox", bool initRenderer = true);
66 
67 
69  // Copy constructor
71  ComboBox(const ComboBox& other);
72 
74  // Move constructor
76  ComboBox(ComboBox&& other);
77 
79  // Copy assignment operator
81  ComboBox& operator= (const ComboBox& other);
82 
84  // Move assignment operator
86  ComboBox& operator= (ComboBox&& other);
87 
88 
96 
97 
107 
108 
114  const ComboBoxRenderer* getSharedRenderer() const;
115 
122  const ComboBoxRenderer* getRenderer() const;
123 
124 
133  void setSize(const Layout2d& size) override;
134  using Widget::setSize;
135 
136 
144  void setEnabled(bool enabled) override;
145 
146 
158  void setItemsToDisplay(std::size_t nrOfItemsInListToDisplay);
159 
160 
172  std::size_t getItemsToDisplay() const;
173 
174 
185  std::size_t addItem(const String& itemName, const String& id = "");
186 
187 
206  bool setSelectedItem(const String& itemName);
207 
208 
227  bool setSelectedItemById(const String& id);
228 
229 
243  bool setSelectedItemByIndex(std::size_t index);
244 
245 
252  void deselectItem();
253 
254 
267  bool removeItem(const String& itemName);
268 
269 
282  bool removeItemById(const String& id);
283 
284 
298  bool removeItemByIndex(std::size_t index);
299 
300 
306 
307 
318  String getItemById(const String& id) const;
319 
320 
329 
330 
339 
340 
347  int getSelectedItemIndex() const;
348 
349 
363  bool changeItem(const String& originalValue, const String& newValue);
364 
365 
379  bool changeItemById(const String& id, const String& newValue);
380 
381 
393  bool changeItemByIndex(std::size_t index, const String& newValue);
394 
395 
402  std::size_t getItemCount() const;
403 
404 
411  std::vector<String> getItems() const;
412 
413 
422  std::vector<String> getItemIds() const;
423 
424 
434  void setMaximumItems(std::size_t maximumItems = 0);
435 
436 
444  std::size_t getMaximumItems() const;
445 
446 
455  void setTextSize(unsigned int textSize) override;
456 
457 
464  unsigned int getTextSize() const override;
465 
466 
472  void setDefaultText(const String& defaultText);
473 
474 
480  const String& getDefaultText() const;
481 
482 
488 
489 
495 
496 
501  bool contains(const String& item) const;
502 
503 
508  bool containsId(const String& id) const;
509 
510 
516  void setChangeItemOnScroll(bool changeOnScroll);
517 
518 
524  bool getChangeItemOnScroll() const;
525 
526 
532  void setParent(Container* parent) override;
533 
534 
541  bool isMouseOnWidget(Vector2f pos) const override;
542 
546  void leftMousePressed(Vector2f pos) override;
547 
551  bool mouseWheelScrolled(float delta, Vector2f pos) override;
552 
553 
561  void draw(BackendRenderTargetBase& target, RenderStates states) const override;
562 
563 
565  protected:
566 
576  Signal& getSignal(String signalName) override;
577 
578 
585  void rendererChanged(const String& property) override;
586 
587 
591  std::unique_ptr<DataIO::Node> save(SavingRenderersMap& renderers) const override;
592 
593 
597  void load(const std::unique_ptr<DataIO::Node>& node, const LoadingRenderersMap& renderers) override;
598 
599 
601  // Returns the size without the borders
603  Vector2f getInnerSize() const;
604 
605 
607  // Update the height of the internal list box
609  void updateListBoxHeight();
610 
611 
613  // Shows the list of items.
615  void showListBox();
616 
617 
619  // Hides the list of items.
621  void hideListBox();
622 
623 
625  // Initialize the internal list box
627  void initListBox();
628 
629 
631  // Makes a copy of the widget
633  Widget::Ptr clone() const override
634  {
635  return std::make_shared<ComboBox>(*this);
636  }
637 
638 
640  public:
641 
642  SignalItem onItemSelect = {"ItemSelected"};
643 
644 
646  protected:
647 
648  // The number of items to display. If there is a scrollbar then you can scroll to see the other.
649  // If there is no scrollbar then this will be the maximum amount of items.
650  std::size_t m_nrOfItemsToDisplay = 0;
651 
652  // Internally a list box is used to store all items
653  ListBox::Ptr m_listBox = ListBox::create();
654 
655  Text m_text;
656  Text m_defaultText;
657 
658  int m_previousSelectedItemIndex = -1;
659  bool m_changeItemOnScroll = false;
660 
661  ExpandDirection m_expandDirection = ExpandDirection::Automatic;
662 
663  Sprite m_spriteBackground;
664  Sprite m_spriteBackgroundDisabled;
665  Sprite m_spriteArrow;
666  Sprite m_spriteArrowHover;
667  Sprite m_spriteArrowDisabled;
668 
669  // Cached renderer properties
670  Borders m_bordersCached;
671  Padding m_paddingCached;
672  Color m_borderColorCached;
673  Color m_backgroundColorCached;
674  Color m_backgroundColorDisabledCached;
675  Color m_arrowColorCached;
676  Color m_arrowColorHoverCached;
677  Color m_arrowColorDisabledCached;
678  Color m_arrowBackgroundColorCached;
679  Color m_arrowBackgroundColorHoverCached;
680  Color m_arrowBackgroundColorDisabledCached;
681  Color m_textColorCached;
682  Color m_textColorDisabledCached;
683 
685  };
686 
688 }
689 
691 
692 #endif // TGUI_COMBO_BOX_HPP
693 
Base class for render targets.
Definition: BackendRenderTarget.hpp:48
Wrapper for colors.
Definition: Color.hpp:52
Definition: ComboBoxRenderer.hpp:37
Combo box widget.
Definition: ComboBox.hpp:41
static ComboBox::Ptr create()
Creates a new combo box widget.
std::vector< String > getItemIds() const
Returns a copy of the item ids in the combo box.
bool removeItemById(const String &id)
Removes the item that were added with the given id.
Signal & getSignal(String signalName) override
Retrieves a signal based on its name.
bool contains(const String &item) const
Returns whether the combo box contains the given item.
void setSize(const Layout2d &size) override
Changes the size of the combo box.
std::size_t getItemCount() const
Returns the amount of items in the combo box.
bool setSelectedItemByIndex(std::size_t index)
Selects an item in the list.
String getSelectedItemId() const
Gets the id of the selected item.
String getSelectedItem() const
Returns the currently selected item.
bool getChangeItemOnScroll() const
Returns whether the mouse wheel can be used to change the selected item while the list is closed.
bool setSelectedItem(const String &itemName)
Selects an item from the list.
ComboBoxRenderer * getSharedRenderer()
Returns the renderer, which gives access to functions that determine how the widget is displayed.
bool changeItemByIndex(std::size_t index, const String &newValue)
Changes the name of an item at the given index to newValue.
ExpandDirection
The side where the list will be displayed.
Definition: ComboBox.hpp:46
void setTextSize(unsigned int textSize) override
Changes the text size of the items.
void setDefaultText(const String &defaultText)
Changes the default text of the combo box. This is the text drawn when no item is selected.
bool changeItem(const String &originalValue, const String &newValue)
Changes an item with name originalValue to newValue.
void setChangeItemOnScroll(bool changeOnScroll)
Changes whether the mouse wheel can be used to change the selected item while the list is closed.
bool removeItem(const String &itemName)
Removes the item from the list with the given name.
std::shared_ptr< ComboBox > Ptr
Shared widget pointer.
Definition: ComboBox.hpp:54
Widget::Ptr clone() const override
Makes a copy of the widget if you don't know its exact type.
Definition: ComboBox.hpp:633
bool containsId(const String &id) const
Returns whether the combo box contains an item with the given id.
int getSelectedItemIndex() const
Gets the index of the selected item.
void removeAllItems()
Removes all items from the list.
void setExpandDirection(ExpandDirection direction)
Changes the side where the list is displayed.
std::unique_ptr< DataIO::Node > save(SavingRenderersMap &renderers) const override
Saves the widget as a tree node in order to save it to a file.
void deselectItem()
Deselects the selected item.
void setItemsToDisplay(std::size_t nrOfItemsInListToDisplay)
Changes the number of items that are displayed in the list.
unsigned int getTextSize() const override
Returns the text size of the items.
std::size_t getMaximumItems() const
Returns the maximum items that the combo box can contain.
void load(const std::unique_ptr< DataIO::Node > &node, const LoadingRenderersMap &renderers) override
Loads the widget from a tree of nodes.
void setEnabled(bool enabled) override
Enables or disables the widget.
std::size_t addItem(const String &itemName, const String &id="")
Adds an item to the list, so that it can be selected later.
void rendererChanged(const String &property) override
Function called when one of the properties of the renderer is changed.
ComboBoxRenderer * getRenderer()
Returns the renderer, which gives access to functions that determine how the widget is displayed.
bool isMouseOnWidget(Vector2f pos) const override
Returns whether the mouse position (which is relative to the parent widget) lies on top of the widget...
static ComboBox::Ptr copy(ComboBox::ConstPtr comboBox)
Makes a copy of another combo box.
void setMaximumItems(std::size_t maximumItems=0)
Changes the maximum items that the combo box can contain.
std::size_t getItemsToDisplay() const
Returns the number of items that are displayed in the list.
std::vector< String > getItems() const
Returns a copy of the items in the combo box.
bool setSelectedItemById(const String &id)
Selects an item from the list.
String getItemById(const String &id) const
Returns the item name of the item with the given id.
const String & getDefaultText() const
Returns the default text of the combo box. This is the text drawn when no item is selected.
std::shared_ptr< const ComboBox > ConstPtr
Shared constant widget pointer.
Definition: ComboBox.hpp:55
ExpandDirection getExpandDirection() const
Returns the side where the list is displayed.
void draw(BackendRenderTargetBase &target, RenderStates states) const override
Draw the widget to a render target.
bool removeItemByIndex(std::size_t index)
Removes the item from the list.
bool changeItemById(const String &id, const String &newValue)
Changes the name of an item with the given id to newValue.
Container widget.
Definition: Container.hpp:47
Class to store the position or size of a widget.
Definition: Layout.hpp:262
std::shared_ptr< ListBox > Ptr
Shared widget pointer.
Definition: ListBox.hpp:46
static ListBox::Ptr create()
Creates a new list box widget.
Definition: Outline.hpp:39
Signal to which the user can subscribe to get callbacks from.
Definition: Signal.hpp:556
Signal to which the user can subscribe to get callbacks from.
Definition: Signal.hpp:58
Definition: Sprite.hpp:49
Wrapper class to store strings.
Definition: String.hpp:74
Definition: Text.hpp:44
The parent class for every widget.
Definition: Widget.hpp:70
std::shared_ptr< Widget > Ptr
Shared widget pointer.
Definition: Widget.hpp:73
virtual void setSize(const Layout2d &size)
Changes the size of the widget.
Namespace that contains all TGUI functions and classes.
Definition: AbsoluteOrRelativeValue.hpp:36
States used for drawing.
Definition: RenderStates.hpp:39