TGUI  0.9.5
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 typedef std::shared_ptr<ListBox> Ptr;
47 typedef std::shared_ptr<const ListBox> ConstPtr;
48
49
53 enum class TextAlignment
54 {
55 Left,
56 Center,
57 Right
58 };
59
60
68 ListBox(const char* typeName = "ListBox", bool initRenderer = true);
69
70
78
79
89
90
96 const ListBoxRenderer* getSharedRenderer() const;
97
104 const ListBoxRenderer* getRenderer() const;
105
106
113 void setPosition(const Layout2d& position) override;
114 using Widget::setPosition;
115
116
123 void setSize(const Layout2d& size) override;
124 using Widget::setSize;
125
126
137 std::size_t addItem(const String& itemName, const String& id = "");
138
139
154 bool setSelectedItem(const String& itemName);
155
156
172
173
187 bool setSelectedItemByIndex(std::size_t index);
188
189
195
196
209 bool removeItem(const String& itemName);
210
211
224 bool removeItemById(const String& id);
225
226
240 bool removeItemByIndex(std::size_t index);
241
242
248
249
260 String getItemById(const String& id) const;
261
262
270 String getItemByIndex(std::size_t index) const;
271
272
282 int getIndexById(const String& id) const;
283
284
292 String getIdByIndex(std::size_t index) const;
293
294
303
304
313
314
322
323
337 bool changeItem(const String& originalValue, const String& newValue);
338
339
353 bool changeItemById(const String& id, const String& newValue);
354
355
367 bool changeItemByIndex(std::size_t index, const String& newValue);
368
369
376 std::size_t getItemCount() const;
377
378
385 std::vector<String> getItems() const;
386
387
396 std::vector<String> getItemIds() const;
397
398
411 void setItemData(std::size_t index, Any data);
412
413
420 template <typename T>
421 T getItemData(std::size_t index) const
422 {
423 if (index < m_items.size())
424 return AnyCast<T>(m_items[index].data);
425 else
426 throw std::bad_cast();
427 }
428
437 void setItemHeight(unsigned int itemHeight);
438
439
446 unsigned int getItemHeight() const;
447
448
460 void setTextSize(unsigned int textSize) override;
461
462
472 void setMaximumItems(std::size_t maximumItems = 0);
473
474
482 std::size_t getMaximumItems() const;
483
484
493 void setAutoScroll(bool autoScroll);
494
495
500 bool getAutoScroll() const;
501
502
511
512
519
520
528 bool contains(const String& item) const;
529
530
538 bool containsId(const String& id) const;
539
540
546 void setScrollbarValue(unsigned int value);
547
548
554 unsigned int getScrollbarValue() const;
555
556
563 bool isMouseOnWidget(Vector2f pos) const override;
564
568 void leftMousePressed(Vector2f pos) override;
569
573 void leftMouseReleased(Vector2f pos) override;
574
578 void mouseMoved(Vector2f pos) override;
579
583 bool mouseWheelScrolled(float delta, Vector2f pos) override;
584
588 void mouseNoLongerOnWidget() override;
589
593 void leftMouseButtonNoLongerDown() override;
594
598 void keyPressed(const Event::KeyEvent& event) override;
599
600
608 void draw(BackendRenderTargetBase& target, RenderStates states) const override;
609
610
612 protected:
613
623 Signal& getSignal(String signalName) override;
624
625
632 void rendererChanged(const String& property) override;
633
634
638 std::unique_ptr<DataIO::Node> save(SavingRenderersMap& renderers) const override;
639
640
644 void load(const std::unique_ptr<DataIO::Node>& node, const LoadingRenderersMap& renderers) override;
645
646
648 // Returns the size without the borders
650 Vector2f getInnerSize() const;
651
652
654 // Update the colors and text style of the selected and hovered items
656 void updateSelectedAndHoveringItemColorsAndStyle();
657
658
660 // Update the color and text style of all the items
662 void updateItemColorsAndStyle();
663
664
666 // Update on which item the mouse is standing
668 void updateHoveringItem(int item);
669
670
672 // Update which item is selected
674 void updateSelectedItem(int item);
675
676
678 // Checks whether the scrollbar value was changed and emit the onScroll event if it did
680 void triggerOnScroll();
681
682
684 // This function is called every frame with the time passed since the last frame.
686 bool updateTime(Duration elapsedTime) override;
687
688
690 // Makes a copy of the widget
692 Widget::Ptr clone() const override
693 {
694 return std::make_shared<ListBox>(*this);
695 }
696
697
699 public:
700
701 SignalItem onItemSelect = {"ItemSelected"};
702 SignalItem onMousePress = {"MousePressed"};
703 SignalItem onMouseRelease = {"MouseReleased"};
704 SignalItem onDoubleClick = {"DoubleClicked"};
705 SignalUInt onScroll = {"Scrolled"};
706
707
709 protected:
710
711 struct Item
712 {
713 Text text;
714 Any data;
715 String id;
716 };
717
718 std::vector<Item> m_items;
719
720 // What is the index of the selected item?
721 // This is also used by combo box, so it can't just be changed to a pointer!
722 int m_selectedItem = -1;
723
724 int m_hoveringItem = -1;
725
726 // The size must be stored
727 unsigned int m_itemHeight = 0;
728 unsigned int m_requestedTextSize = 0;
729
730 // This will store the maximum number of items in the list box (zero by default, meaning that there is no limit)
731 std::size_t m_maxItems = 0;
732
733 // When there are too many items a scrollbar will be shown
735 unsigned int m_lastScrollbarValue = 0;
736
737 // Will be set to true after the first click, but gets reset to false when the second click does not occur soon after
738 bool m_possibleDoubleClick = false;
739
740 bool m_autoScroll = true;
741 ListBox::TextAlignment m_textAlignment = ListBox::TextAlignment::Left;
742
743 Sprite m_spriteBackground;
744
745 // Cached renderer properties
746 Borders m_bordersCached;
747 Borders m_paddingCached;
748 Color m_borderColorCached;
749 Color m_backgroundColorCached;
750 Color m_backgroundColorHoverCached;
751 Color m_selectedBackgroundColorCached;
752 Color m_selectedBackgroundColorHoverCached;
753 Color m_textColorCached;
754 Color m_textColorHoverCached;
755 Color m_selectedTextColorCached;
756 Color m_selectedTextColorHoverCached;
757 TextStyles m_textStyleCached;
758 TextStyles m_selectedTextStyleCached;
759
761 };
762
764}
765
767
768#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:262
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.
void setTextSize(unsigned int textSize) override
Changes the text size of the items.
std::shared_ptr< ListBox > Ptr
Shared widget pointer.
Definition ListBox.hpp:46
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.
TextAlignment
The horizontal text alignment.
Definition ListBox.hpp:54
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.
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.
static ListBox::Ptr copy(ListBox::ConstPtr listBox)
Makes a copy of another list box.
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 draw(BackendRenderTargetBase &target, RenderStates states) const override
Draw the widget to a render target.
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:421
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.
Definition ListBox.hpp:692
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.
void setPosition(const Layout2d &position) override
Sets the position of the widget.
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: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:79
Wrapper for text styles.
Definition TextStyle.hpp:58
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
Namespace that contains all TGUI functions and classes.
Definition AbsoluteOrRelativeValue.hpp:36
KeyPressed event parameters.
Definition Event.hpp:167
Definition ListBox.hpp:712
States used for drawing.
Definition RenderStates.hpp:39