TGUI  1.0-beta
Loading...
Searching...
No Matches
ListBox.hpp
1
2//
3// TGUI - Texus' Graphical User Interface
4// Copyright (C) 2012-2022 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_LIST_BOX_HPP
27#define TGUI_LIST_BOX_HPP
28
29
30#include <TGUI/CopiedSharedPtr.hpp>
31#include <TGUI/Widgets/Scrollbar.hpp>
32#include <TGUI/Renderers/ListBoxRenderer.hpp>
33#include <TGUI/Text.hpp>
34
36
37namespace tgui
38{
42 class TGUI_API ListBox : public Widget
43 {
44 public:
45
46 using Ptr = std::shared_ptr<ListBox>;
47 using ConstPtr = std::shared_ptr<const ListBox>;
48
49 static constexpr const char StaticWidgetType[] = "ListBox";
50
51
55 enum class TextAlignment
56 {
57 Left,
58 Center,
59 Right
60 };
61
62
70 ListBox(const char* typeName = StaticWidgetType, bool initRenderer = true);
71
72
80
81
90 static ListBox::Ptr copy(const ListBox::ConstPtr& listBox);
91
92
98 const ListBoxRenderer* getSharedRenderer() const;
99
106
107
114 void setSize(const Layout2d& size) override;
115 using Widget::setSize;
116
117
128 std::size_t addItem(const String& itemName, const String& id = "");
129
130
145 bool setSelectedItem(const String& itemName);
146
147
163
164
178 bool setSelectedItemByIndex(std::size_t index);
179
180
186
187
200 bool removeItem(const String& itemName);
201
202
215 bool removeItemById(const String& id);
216
217
231 bool removeItemByIndex(std::size_t index);
232
233
239
240
251 String getItemById(const String& id) const;
252
253
261 String getItemByIndex(std::size_t index) const;
262
263
273 int getIndexById(const String& id) const;
274
275
283 String getIdByIndex(std::size_t index) const;
284
285
294
295
304
305
313
314
328 bool changeItem(const String& originalValue, const String& newValue);
329
330
344 bool changeItemById(const String& id, const String& newValue);
345
346
358 bool changeItemByIndex(std::size_t index, const String& newValue);
359
360
367 std::size_t getItemCount() const;
368
369
376 std::vector<String> getItems() const;
377
378
387 std::vector<String> getItemIds() const;
388
389
402 void setItemData(std::size_t index, Any data);
403
404
411 template <typename T>
412 T getItemData(std::size_t index) const
413 {
414 if (index < m_items.size())
415 return AnyCast<T>(m_items[index].data);
416 else
417 throw std::bad_cast();
418 }
419
428 void setItemHeight(unsigned int itemHeight);
429
430
437 unsigned int getItemHeight() const;
438
439
449 void setMaximumItems(std::size_t maximumItems = 0);
450
451
459 std::size_t getMaximumItems() const;
460
461
470 void setAutoScroll(bool autoScroll);
471
472
477 bool getAutoScroll() const;
478
479
488
489
496
497
505 bool contains(const String& item) const;
506
507
515 bool containsId(const String& id) const;
516
517
523 void setScrollbarValue(unsigned int value);
524
525
531 unsigned int getScrollbarValue() const;
532
533
540 bool isMouseOnWidget(Vector2f pos) const override;
541
545 void leftMousePressed(Vector2f pos) override;
546
550 void leftMouseReleased(Vector2f pos) override;
551
555 void mouseMoved(Vector2f pos) override;
556
560 bool mouseWheelScrolled(float delta, Vector2f pos) override;
561
565 void mouseNoLongerOnWidget() override;
566
570 void leftMouseButtonNoLongerDown() override;
571
575 void keyPressed(const Event::KeyEvent& event) override;
576
577
585 void draw(BackendRenderTarget& target, RenderStates states) const override;
586
587
589 protected:
590
600 Signal& getSignal(String signalName) override;
601
602
609 void rendererChanged(const String& property) override;
610
611
615 std::unique_ptr<DataIO::Node> save(SavingRenderersMap& renderers) const override;
616
617
621 void load(const std::unique_ptr<DataIO::Node>& node, const LoadingRenderersMap& renderers) override;
622
623
627 void updateTextSize() override;
628
629
631 // Returns the size without the borders
633 Vector2f getInnerSize() const;
634
635
637 // Updates the position of the items and the scrollbar
639 void updateItemPositions();
640
641
643 // Update the colors and text style of the selected and hovered items
645 void updateSelectedAndHoveringItemColorsAndStyle();
646
647
649 // Update the color and text style of all the items
651 void updateItemColorsAndStyle();
652
653
655 // Update on which item the mouse is standing
657 void updateHoveringItem(int item);
658
659
661 // Update which item is selected
663 void updateSelectedItem(int item);
664
665
667 // Checks whether the scrollbar value was changed and emit the onScroll event if it did
669 void triggerOnScroll();
670
671
673 // This function is called every frame with the time passed since the last frame.
675 bool updateTime(Duration elapsedTime) override;
676
677
679 // Makes a copy of the widget
681 Widget::Ptr clone() const override;
682
683
685 public:
686
687 SignalItem onItemSelect = {"ItemSelected"};
688 SignalItem onMousePress = {"MousePressed"};
689 SignalItem onMouseRelease = {"MouseReleased"};
690 SignalItem onDoubleClick = {"DoubleClicked"};
691 SignalUInt onScroll = {"Scrolled"};
692
693
695 protected:
696
697 struct Item
698 {
699 Text text;
700 Any data;
701 String id;
702 };
703
704 std::vector<Item> m_items;
705
706 // What is the index of the selected item?
707 // This is also used by combo box, so it can't just be changed to a pointer!
708 int m_selectedItem = -1;
709
710 int m_hoveringItem = -1;
711
712 unsigned int m_itemHeight = 0;
713
714 // This will store the maximum number of items in the list box (zero by default, meaning that there is no limit)
715 std::size_t m_maxItems = 0;
716
717 // When there are too many items a scrollbar will be shown
719 unsigned int m_lastScrollbarValue = 0;
720
721 // Will be set to true after the first click, but gets reset to false when the second click does not occur soon after
722 bool m_possibleDoubleClick = false;
723
724 bool m_autoScroll = true;
725 ListBox::TextAlignment m_textAlignment = ListBox::TextAlignment::Left;
726
727 Sprite m_spriteBackground;
728
729 // Cached renderer properties
730 Borders m_bordersCached;
731 Borders m_paddingCached;
732 Color m_borderColorCached;
733 Color m_backgroundColorCached;
734 Color m_backgroundColorHoverCached;
735 Color m_selectedBackgroundColorCached;
736 Color m_selectedBackgroundColorHoverCached;
737 Color m_textColorCached;
738 Color m_textColorHoverCached;
739 Color m_selectedTextColorCached;
740 Color m_selectedTextColorHoverCached;
741 TextStyles m_textStyleCached;
742 TextStyles m_selectedTextStyleCached;
743
745 };
746
748}
749
751
752#endif // TGUI_LIST_BOX_HPP
Base class for render targets.
Definition: BackendRenderTarget.hpp:48
Wrapper for colors.
Definition: Color.hpp:63
Definition: CopiedSharedPtr.hpp:40
Wrapper for durations.
Definition: Duration.hpp:52
Class to store the position or size of a widget.
Definition: Layout.hpp:284
Definition: ListBoxRenderer.hpp:37
List box widget.
Definition: ListBox.hpp:43
std::vector< String > getItemIds() const
Returns a copy of the item ids in the list box.
bool changeItem(const String &originalValue, const String &newValue)
Changes an item with name originalValue to newValue.
void setItemHeight(unsigned int itemHeight)
Changes the height of the items in the list box.
std::size_t getItemCount() const
Returns the amount of items in the list box.
bool changeItemByIndex(std::size_t index, const String &newValue)
Changes the name of an item at the given index to newValue.
bool changeItemById(const String &id, const String &newValue)
Changes the name of an item with the given id to newValue.
unsigned int getScrollbarValue() const
Returns the thumb position of the scrollbar.
unsigned int getItemHeight() const
Returns the height of the items in the list box.
std::vector< String > getItems() const
Returns a copy of the items in the list box.
static ListBox::Ptr copy(const ListBox::ConstPtr &listBox)
Makes a copy of another list box.
TextAlignment
The horizontal text alignment.
Definition: ListBox.hpp:56
void setItemData(std::size_t index, Any data)
Store some user data with the item.
String getItemById(const String &id) const
Returns the item name of the item with the given id.
void updateTextSize() override
Called when the text size is changed (either by setTextSize or via the renderer)
void deselectItem()
Deselects the selected item.
std::shared_ptr< const ListBox > ConstPtr
Shared constant widget pointer.
Definition: ListBox.hpp:47
void setMaximumItems(std::size_t maximumItems=0)
Changes the maximum items that the list box can contain.
void draw(BackendRenderTarget &target, RenderStates states) const override
Draw the widget to a render target.
void setTextAlignment(TextAlignment alignment)
Changes the horizontal text alignment.
String getSelectedItemId() const
Gets the id of the selected item.
static ListBox::Ptr create()
Creates a new list box widget.
bool contains(const String &item) const
Returns whether the list box contains the given item.
void removeAllItems()
Removes all items from the list.
TextAlignment getTextAlignment() const
Gets the current horizontal text alignment.
bool removeItemByIndex(std::size_t index)
Removes the item from the list box.
ListBoxRenderer * getRenderer()
Returns the renderer, which gives access to functions that determine how the widget is displayed.
Signal & getSignal(String signalName) override
Retrieves a signal based on its name.
void load(const std::unique_ptr< DataIO::Node > &node, const LoadingRenderersMap &renderers) override
Loads the widget from a tree of nodes.
bool removeItemById(const String &id)
Removes the item that were added with the given id.
T getItemData(std::size_t index) const
Returns user data stored in the item.
Definition: ListBox.hpp:412
String getIdByIndex(std::size_t index) const
Returns the id of the item at the given index.
bool setSelectedItemById(const String &id)
Selects an item in the list box.
bool setSelectedItem(const String &itemName)
Selects an item in the list box.
void setScrollbarValue(unsigned int value)
Changes the thumb position of the scrollbar.
Widget::Ptr clone() const override
Makes a copy of the widget if you don't know its exact type.
bool removeItem(const String &itemName)
Removes the item from the list with the given name.
void setSize(const Layout2d &size) override
Changes the size of the list box.
bool containsId(const String &id) const
Returns whether the list box contains an item with the given id.
String getItemByIndex(std::size_t index) const
Returns the item name of the item at the given index.
std::size_t addItem(const String &itemName, const String &id="")
Adds an item to the list.
bool getAutoScroll() const
Returns whether the list box scrolls to the bottom when a new item is added.
bool isMouseOnWidget(Vector2f pos) const override
Returns whether the mouse position (which is relative to the parent widget) lies on top of the widget...
int getSelectedItemIndex() const
Gets the index of the selected item.
void rendererChanged(const String &property) override
Function called when one of the properties of the renderer is changed.
void setAutoScroll(bool autoScroll)
Changes whether the list box scrolls to the bottom when a new item is added.
std::size_t getMaximumItems() const
Returns the maximum items that the list box can contain.
std::shared_ptr< ListBox > Ptr
Shared widget pointer.
Definition: ListBox.hpp:46
bool setSelectedItemByIndex(std::size_t index)
Selects an item in the list box.
ListBoxRenderer * getSharedRenderer()
Returns the renderer, which gives access to functions that determine how the widget 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.
int getIndexById(const String &id) const
Returns the index of the item with the given id.
String getSelectedItem() const
Returns the currently selected item.
Definition: Outline.hpp:39
Signal to which the user can subscribe to get callbacks from.
Definition: Signal.hpp:555
Signal to which the user can subscribe to get callbacks from.
Definition: Signal.hpp:58
Definition: Sprite.hpp:45
Wrapper class to store strings.
Definition: String.hpp:79
Wrapper for text styles.
Definition: TextStyle.hpp:58
Definition: Text.hpp:48
The parent class for every widget.
Definition: Widget.hpp:70
std::shared_ptr< Widget > Ptr
Shared widget pointer.
Definition: Widget.hpp:73
Namespace that contains all TGUI functions and classes.
Definition: AbsoluteOrRelativeValue.hpp:36
KeyPressed event parameters.
Definition: Event.hpp:167
Definition: ListBox.hpp:698
States used for drawing.
Definition: RenderStates.hpp:39