TGUI  1.3.0
Loading...
Searching...
No Matches
PanelListBox.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
26#ifndef TGUI_PANEL_LIST_BOX_HPP
27#define TGUI_PANEL_LIST_BOX_HPP
28
29#include <TGUI/Widgets/ScrollablePanel.hpp>
30#include <TGUI/Renderers/PanelListBoxRenderer.hpp>
31
33
34TGUI_MODULE_EXPORT namespace tgui
35{
36
40 class TGUI_API PanelListBox : public ScrollablePanel
41 {
42 public:
43 using Ptr = std::shared_ptr<PanelListBox>;
44 using ConstPtr = std::shared_ptr<const PanelListBox>;
45
46 static constexpr const char StaticWidgetType[] = "PanelListBox";
47
48
56 PanelListBox(const char* typeName = StaticWidgetType, bool initRenderer = true);
57
58
63 static Ptr create();
64
65
71 static Ptr copy(const ConstPtr& panelListBox);
72
73
78 TGUI_NODISCARD PanelListBoxRenderer* getSharedRenderer() override;
79 TGUI_NODISCARD const PanelListBoxRenderer* getSharedRenderer() const override;
80
81
87 TGUI_NODISCARD PanelListBoxRenderer* getRenderer() override;
88
89
94 void setSize(const Layout2d& size) override;
95 using ScrollablePanel::setSize;
96
97
104 Panel::Ptr addItem(const String& id = {}, int index = -1);
105
106
113 TGUI_NODISCARD Panel::Ptr getPanelTemplate() const;
114
115
122 TGUI_NODISCARD Layout getItemsWidth() const;
123
124
131 void setItemsHeight(const Layout& height);
132
133
140 TGUI_NODISCARD Layout getItemsHeight() const;
141
142
157 bool setSelectedItem(const Panel::Ptr& panelPtr);
158
159
175
176
190 bool setSelectedItemByIndex(std::size_t index);
191
192
198
199
212 bool removeItem(const Panel::Ptr& panelPtr);
213
214
227 bool removeItemById(const String& id);
228
229
243 bool removeItemByIndex(std::size_t index);
244
245
251
252
263 TGUI_NODISCARD Panel::Ptr getItemById(const String& id) const;
264
265
273 TGUI_NODISCARD Panel::Ptr getItemByIndex(std::size_t index) const;
274
275
285 int getIndexById(const String& id) const;
286
287
295 int getIndexByItem(const Panel::Ptr& panelPtr) const;
296
297
305 String getIdByIndex(std::size_t index) const;
306
307
315 TGUI_NODISCARD Panel::Ptr getSelectedItem() const;
316
317
325 TGUI_NODISCARD String getSelectedItemId() const;
326
327
334 TGUI_NODISCARD int getSelectedItemIndex() const;
335
336
343 TGUI_NODISCARD std::size_t getItemCount() const;
344
345
352 TGUI_NODISCARD std::vector<Panel::Ptr> getItems() const;
353
354
361 TGUI_NODISCARD std::vector<String> getItemIds() const;
362
363
371 void setMaximumItems(std::size_t maximumItems = 0);
372
373
381 TGUI_NODISCARD std::size_t getMaximumItems() const;
382
383
391 bool contains(const Panel::Ptr& panelPtr) const;
392
393
401 bool containsId(const String& id) const;
402
403
407 void mouseMoved(Vector2f pos) override;
408
409
413 void mouseNoLongerOnWidget() override;
414
415
419 bool leftMousePressed(Vector2f pos) override;
420
421
423 protected:
424
434 TGUI_NODISCARD Signal& getSignal(String signalName) override;
435
436
443 void rendererChanged(const String& property) override;
444
445
449 TGUI_NODISCARD std::unique_ptr<DataIO::Node> save(SavingRenderersMap& renderers) const override;
450
451
455 void load(const std::unique_ptr<DataIO::Node>& node, const LoadingRenderersMap& renderers) override;
456
457
459 // Updates the position of the items
461 void updateItemsPositions() const;
462
463
465 // Updates the size of the items
467 void updateItemsSize() const;
468
469
471 // Returns all items height
473 TGUI_NODISCARD float getAllItemsHeight() const;
474
475
477 // Returns height of the items
478 //
481 TGUI_NODISCARD float getItemsHeightUpToIndex(std::size_t index) const;
482
483
485 // Update which item is selected
487 void updateSelectedItem(int item);
488
489
491 // Update on which item the mouse is standing
493 void updateHoveringItem(int item);
494
495
497 // Update the colors and style of the selected and hovered items
499 void updateSelectedAndHoveringItemColorsAndStyle() const;
500
501
503 // Clear item style
504 //
507 void clearItemStyle(int item) const;
508
509
511 // Clear all items style
513 void clearAllItemsStyle() const;
514
515
517 // Makes a copy of the widget
519 TGUI_NODISCARD Widget::Ptr clone() const override;
520
521
523 public:
524
525 SignalPanelListBoxItem onItemSelect = {"ItemSelected"};
526
527
529 protected:
530 struct Item
531 {
532 Panel::Ptr panel;
533 String id;
534 };
535
536 std::vector<Item> m_items;
537 std::size_t m_maxItems;
538 Panel::Ptr m_panelTemplate;
539
540 int m_selectedItem;
541 int m_hoveringItem;
542
543 // Cached renderer properties
544 Color m_itemsBackgroundColorCached;
545 Color m_itemsBackgroundColorHoverCached;
546 Color m_selectedItemsBackgroundColorCached;
547 Color m_selectedItemsBackgroundColorHoverCached;
548
550 };
551
553}
554
556
557#endif // TGUI_PANEL_LIST_BOX_HPP
Wrapper for colors.
Definition Color.hpp:74
Class to store the position or size of a widget.
Definition Layout.hpp:328
Class to store the left, top, width or height of a widget.
Definition Layout.hpp:93
Definition PanelListBoxRenderer.hpp:38
List of panels, which can be flexible changed.
Definition PanelListBox.hpp:41
TGUI_NODISCARD PanelListBoxRenderer * getRenderer() override
Returns the renderer, which gives access to functions that determine how the widget is displayed.
TGUI_NODISCARD std::size_t getItemCount() const
Returns the amount of items in the panel list box.
TGUI_NODISCARD std::vector< Panel::Ptr > getItems() const
Returns a copy of the items in the list box.
bool removeItemById(const String &id)
Removes the item that were added with the given id.
bool setSelectedItemById(const String &id)
Selects an item in the panel list box.
TGUI_NODISCARD int getSelectedItemIndex() const
Gets the index of the selected item.
TGUI_NODISCARD Panel::Ptr getSelectedItem() const
Returns the currently selected item.
TGUI_NODISCARD Widget::Ptr clone() const override
Makes a copy of the widget if you don't know its exact type.
std::shared_ptr< PanelListBox > Ptr
Shared widget pointer.
Definition PanelListBox.hpp:43
void rendererChanged(const String &property) override
Function called when one of the properties of the renderer is changed.
bool setSelectedItem(const Panel::Ptr &panelPtr)
Selects an item in the panel list box.
bool leftMousePressed(Vector2f pos) override
Called by the parent when the left mouse button goes down on top of the widget.
TGUI_NODISCARD PanelListBoxRenderer * getSharedRenderer() override
Returns the renderer, which gives access to functions that determine how the widget is displayed.
String getIdByIndex(std::size_t index) const
Returns the id of the item at the given index.
TGUI_NODISCARD Panel::Ptr getPanelTemplate() const
Get panel template from which new elements are created.
Panel::Ptr addItem(const String &id={}, int index=-1)
Adds an item to the list.
TGUI_NODISCARD Signal & getSignal(String signalName) override
Retrieves a signal based on its name.
TGUI_NODISCARD String getSelectedItemId() const
Gets the id of the selected item.
bool containsId(const String &id) const
Returns whether the panel list box contains an item with the given id.
static Ptr copy(const ConstPtr &panelListBox)
Makes a copy of another panel list box.
TGUI_NODISCARD Panel::Ptr getItemByIndex(std::size_t index) const
Returns the item name of the item at the given index.
void load(const std::unique_ptr< DataIO::Node > &node, const LoadingRenderersMap &renderers) override
Loads the widget from a tree of nodes.
void setItemsHeight(const Layout &height)
Changes the height of the items in the list box.
TGUI_NODISCARD std::size_t getMaximumItems() const
Returns the maximum items that the list box can contain.
void clearItemStyle(int item) const
TGUI_NODISCARD float getItemsHeightUpToIndex(std::size_t index) const
TGUI_NODISCARD std::vector< String > getItemIds() const
Returns a vector of stored items ids.
void setMaximumItems(std::size_t maximumItems=0)
Changes the maximum items that the list box can contain.
std::shared_ptr< const PanelListBox > ConstPtr
Shared constant widget pointer.
Definition PanelListBox.hpp:44
TGUI_NODISCARD Layout getItemsWidth() const
Returns the width of the items in the list box.
static Ptr create()
Creates a new panel list box widget.
void deselectItem()
Deselects the selected item.
TGUI_NODISCARD Layout getItemsHeight() const
Returns the height of the items in the list box.
TGUI_NODISCARD Panel::Ptr getItemById(const String &id) const
Returns the item name of the item with the given id.
bool removeItem(const Panel::Ptr &panelPtr)
Removes the item from the panel list with the given pointer.
bool removeItemByIndex(std::size_t index)
Removes the item from the panel list box.
bool contains(const Panel::Ptr &panelPtr) const
Returns whether the panel list box contains the given item.
int getIndexByItem(const Panel::Ptr &panelPtr) const
Returns the index of the given item.
TGUI_NODISCARD 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 setSize(const Layout2d &size) override
Changes the size of the panel list box.
void removeAllItems()
Removes all items from the list.
bool setSelectedItemByIndex(std::size_t index)
Selects an item in the panel list box.
int getIndexById(const String &id) const
Returns the index of the item with the given id.
std::shared_ptr< Panel > Ptr
Shared widget pointer.
Definition Panel.hpp:44
Group of widgets that has a background color and optional borders.
Definition ScrollablePanel.hpp:46
Signal to which the user can subscribe to get callbacks from.
Definition Signal.hpp:675
Signal to which the user can subscribe to get callbacks from.
Definition Signal.hpp:62
Wrapper class to store strings.
Definition String.hpp:101
std::shared_ptr< Widget > Ptr
Shared widget pointer.
Definition Widget.hpp:87
Namespace that contains all TGUI functions and classes.
Definition AbsoluteOrRelativeValue.hpp:39
Definition PanelListBox.hpp:531