TGUI  1.6.1
Loading...
Searching...
No Matches
ListBox.hpp
1
2//
3// TGUI - Texus' Graphical User Interface
4// Copyright (C) 2012-2024 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#ifndef TGUI_LIST_BOX_HPP
26#define TGUI_LIST_BOX_HPP
27
28#include <TGUI/Widgets/Scrollbar.hpp>
29#include <TGUI/Renderers/ListBoxRenderer.hpp>
30#include <TGUI/Text.hpp>
31
33
34TGUI_MODULE_EXPORT namespace tgui
35{
39 class TGUI_API ListBox : public Widget, public ScrollbarChildInterface
40 {
41 public:
42
43 using Ptr = std::shared_ptr<ListBox>;
44 using ConstPtr = std::shared_ptr<const ListBox>;
45
46 static constexpr const char StaticWidgetType[] = "ListBox";
47
51 using TextAlignment TGUI_DEPRECATED("Use tgui::HorizontalAlignment instead") = HorizontalAlignment;
52
60 ListBox(const char* typeName = StaticWidgetType, bool initRenderer = true);
61
67 TGUI_NODISCARD static ListBox::Ptr create();
68
76 TGUI_NODISCARD static ListBox::Ptr copy(const ListBox::ConstPtr& listBox);
77
82 TGUI_NODISCARD ListBoxRenderer* getSharedRenderer() override;
83 TGUI_NODISCARD const ListBoxRenderer* getSharedRenderer() const override;
84
90 TGUI_NODISCARD ListBoxRenderer* getRenderer() override;
91
97 void setSize(const Layout2d& size) override;
98 using Widget::setSize;
99
110 std::size_t addItem(const String& itemName, const String& id = "");
111
121 void addMultipleItems(const std::vector<String>& itemNames);
122
136 bool setSelectedItem(const String& itemName);
137
152
165 bool setSelectedItemByIndex(std::size_t index);
166
171
183 bool removeItem(const String& itemName);
184
196 bool removeItemById(const String& id);
197
210 bool removeItemByIndex(std::size_t index);
211
216
226 TGUI_NODISCARD String getItemById(const String& id) const;
227
235 TGUI_NODISCARD String getItemByIndex(std::size_t index) const;
236
246 TGUI_NODISCARD int getIndexById(const String& id) const;
247
255 TGUI_NODISCARD String getIdByIndex(std::size_t index) const;
256
263 TGUI_NODISCARD String getSelectedItem() const;
264
271 TGUI_NODISCARD String getSelectedItemId() const;
272
278 TGUI_NODISCARD int getSelectedItemIndex() const;
279
285 TGUI_NODISCARD int getHoveredItemIndex() const;
286
299 bool changeItem(const String& originalValue, const String& newValue);
300
313 bool changeItemById(const String& id, const String& newValue);
314
325 bool changeItemByIndex(std::size_t index, const String& newValue);
326
332 TGUI_NODISCARD std::size_t getItemCount() const;
333
339 TGUI_NODISCARD std::vector<String> getItems() const;
340
348 TGUI_NODISCARD std::vector<String> getItemIds() const;
349
362 void setItemData(std::size_t index, Any data);
363
370 template <typename DataType>
371 TGUI_NODISCARD DataType getItemData(std::size_t index) const
372 {
373 if (index < m_items.size())
374 return AnyCast<DataType>(m_items[index].data);
375 else
376 throw std::bad_cast();
377 }
378
386 void setItemHeight(unsigned int itemHeight);
387
393 TGUI_NODISCARD unsigned int getItemHeight() const;
394
403 void setMaximumItems(std::size_t maximumItems = 0);
404
411 TGUI_NODISCARD std::size_t getMaximumItems() const;
412
420 void setAutoScroll(bool autoScroll);
421
426 TGUI_NODISCARD bool getAutoScroll() const;
427
436
442 TGUI_NODISCARD HorizontalAlignment getTextAlignment() const;
443
451 TGUI_NODISCARD bool contains(const String& item) const;
452
460 TGUI_NODISCARD bool containsId(const String& id) const;
461
467 TGUI_DEPRECATED("Use getScrollbar()->setValue(value) instead") void setScrollbarValue(unsigned int value);
468
474 TGUI_DEPRECATED("Use getScrollbar()->getValue() instead") TGUI_NODISCARD unsigned int getScrollbarValue() const;
475
483 TGUI_DEPRECATED("Use getScrollbar()->getMaxValue() instead") TGUI_NODISCARD unsigned int getScrollbarMaxValue() const;
484
490 TGUI_NODISCARD bool isMouseOnWidget(Vector2f pos) const override;
491
495 bool leftMousePressed(Vector2f pos) override;
496
500 void leftMouseReleased(Vector2f pos) override;
501
505 void mouseMoved(Vector2f pos) override;
506
510 bool scrolled(float delta, Vector2f pos, bool touch) override;
511
515 void mouseNoLongerOnWidget() override;
516
520 void leftMouseButtonNoLongerDown() override;
521
525 void keyPressed(const Event::KeyEvent& event) override;
526
536 bool canHandleKeyPress(const Event::KeyEvent& event) override;
537
544 void draw(BackendRenderTarget& target, RenderStates states) const override;
545
547 protected:
548
558 TGUI_NODISCARD Signal& getSignal(String signalName) override;
559
565 void rendererChanged(const String& property) override;
566
570 TGUI_NODISCARD std::unique_ptr<DataIO::Node> save(SavingRenderersMap& renderers) const override;
571
575 void load(const std::unique_ptr<DataIO::Node>& node, const LoadingRenderersMap& renderers) override;
576
580 void updateTextSize() override;
581
585 void scrollbarValueChanged() override;
586
588 // Returns the size without the borders
590 TGUI_NODISCARD Vector2f getInnerSize() const;
591
593 // Updates the position of the items and the scrollbar
595 void updateItemPositions();
596
598 // Update the colors and text style of the selected and hovered items
600 void updateSelectedAndHoveringItemColorsAndStyle();
601
603 // Update the color and text style of all the items
605 void updateItemColorsAndStyle();
606
608 // Update on which item the mouse is standing
610 void updateHoveringItem(int item);
611
613 // Update which item is selected
615 void updateSelectedItem(int item);
616
618 // Checks whether the scrollbar value was changed and emit the onScroll event if it did
620 void triggerOnScroll();
621
623 // Adds an item to the list. Called from both addItem and addMultipleItems
625 void addItemImpl(const String& itemName, const String& id);
626
628 // This function is called every frame with the time passed since the last frame.
630 bool updateTime(Duration elapsedTime) override;
631
633 // Makes a copy of the widget
635 TGUI_NODISCARD Widget::Ptr clone() const override;
636
638 public:
639
640 SignalItem onItemSelect = {"ItemSelected"};
641 SignalItem onMousePress = {"MousePressed"};
642 SignalItem onMouseRelease = {"MouseReleased"};
643 SignalItem onDoubleClick = {"DoubleClicked"};
644 SignalUInt onScroll = {"Scrolled"};
645
647 protected:
648
649 struct Item
650 {
651 Text text;
652 Any data;
653 String id;
654 };
655
656 std::vector<Item> m_items;
657
658 // What is the index of the selected item?
659 // This is also used by combo box, so it can't just be changed to a pointer!
660 int m_selectedItem = -1;
661
662 int m_hoveringItem = -1;
663
664 unsigned int m_itemHeight = 0;
665
666 // This will store the maximum number of items in the list box (zero by default, meaning that there is no limit)
667 std::size_t m_maxItems = 0;
668
669 // When there are too many items a scrollbar will be shown
670 unsigned int m_lastScrollbarValue = 0;
671
672 // Will be set to true after the first click, but gets reset to false when the second click does not occur soon after
673 bool m_possibleDoubleClick = false;
674
675 bool m_autoScroll = true;
676 HorizontalAlignment m_textAlignment = HorizontalAlignment::Left;
677
678 Sprite m_spriteBackground;
679
680 // Cached renderer properties
681 Borders m_bordersCached;
682 Borders m_paddingCached;
683 Color m_borderColorCached;
684 Color m_backgroundColorCached;
685 Color m_backgroundColorHoverCached;
686 Color m_selectedBackgroundColorCached;
687 Color m_selectedBackgroundColorHoverCached;
688 Color m_textColorCached;
689 Color m_textColorHoverCached;
690 Color m_selectedTextColorCached;
691 Color m_selectedTextColorHoverCached;
692 TextStyles m_textStyleCached;
693 TextStyles m_selectedTextStyleCached;
694
696 };
697
699}
700
702
703#endif // TGUI_LIST_BOX_HPP
Base class for render targets.
Definition BackendRenderTarget.hpp:46
Wrapper for colors.
Definition Color.hpp:73
Wrapper for durations.
Definition Duration.hpp:55
Class to store the position or size of a widget.
Definition Layout.hpp:323
Definition ListBoxRenderer.hpp:35
List box widget.
Definition ListBox.hpp:40
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.
DataType getItemData(std::size_t index) const
Returns user data stored in the item.
Definition ListBox.hpp:371
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.
void setTextAlignment(HorizontalAlignment alignment)
Changes the horizontal text alignment.
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.
HorizontalAlignment getTextAlignment() const
Gets the current horizontal text alignment.
static ListBox::Ptr copy(const ListBox::ConstPtr &listBox)
Makes a copy of another list box.
void addMultipleItems(const std::vector< String > &itemNames)
Adds multiple items to the list.
ListBoxRenderer * getRenderer() override
Returns the renderer, which gives access to functions that determine how the widget is displayed.
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 deselectItem()
Deselects the selected item.
ListBoxRenderer * getSharedRenderer() override
Returns the renderer, which gives access to functions that determine how the widget is displayed.
std::shared_ptr< const ListBox > ConstPtr
Shared constant widget pointer.
Definition ListBox.hpp:44
void setMaximumItems(std::size_t maximumItems=0)
Changes the maximum items that the list box can contain.
int getHoveredItemIndex() const
Gets the index of the item below the mouse cursor.
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.
bool removeItemByIndex(std::size_t index)
Removes the item from the list box.
bool removeItemById(const String &id)
Removes the item that were added with the given id.
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.
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.
int getSelectedItemIndex() const
Gets the index of the selected item.
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:43
bool setSelectedItemByIndex(std::size_t index)
Selects an item in the list box.
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:38
Base class for widgets with a single scrollbar.
Definition Scrollbar.hpp:586
Signal to which the user can subscribe to get callbacks from.
Definition Signal.hpp:522
Signal to which the user can subscribe to get callbacks from.
Definition Signal.hpp:61
Definition Sprite.hpp:47
Wrapper class to store strings.
Definition String.hpp:96
Wrapper for text styles.
Definition TextStyle.hpp:55
Backend-independent wrapper around the backend-specific text class.
Definition Text.hpp:48
The parent class for every widget.
Definition Widget.hpp:83
Namespace that contains all TGUI functions and classes.
Definition AbsoluteOrRelativeValue.hpp:38
HorizontalAlignment
The horizontal alignment.
Definition Layout.hpp:62
Definition Event.hpp:38
Definition ListBox.hpp:650
States used for drawing.
Definition RenderStates.hpp:38