25#ifndef TGUI_LIST_VIEW_HPP
26#define TGUI_LIST_VIEW_HPP
28#include <TGUI/Widgets/Scrollbar.hpp>
29#include <TGUI/Renderers/ListViewRenderer.hpp>
30#include <TGUI/Text.hpp>
48 using Ptr = std::shared_ptr<ListView>;
49 using ConstPtr = std::shared_ptr<const ListView>;
60 std::vector<Text> texts;
68 float designWidth = 0;
69 float widestItemWidth = 0;
70 std::size_t widestItemIndex = std::numeric_limits<std::size_t>::max();
73 bool autoResize =
false;
74 bool expanded =
false;
84 explicit ListView(
const char* typeName =
StaticWidgetType,
bool initRenderer =
true);
330 std::size_t
addItem(
const std::vector<String>& item);
353 void insertItem(std::size_t index,
const std::vector<String>& item);
371 bool changeItem(std::size_t index,
const std::vector<String>& item);
472 template <
typename DataType>
475 if (index < m_items.size())
476 return AnyCast<DataType>(m_items[index].data);
477 throw std::bad_cast();
522 TGUI_NODISCARD std::vector<String>
getItemRow(std::size_t index)
const;
539 TGUI_NODISCARD std::vector<String>
getItems()
const;
546 TGUI_NODISCARD std::vector<std::vector<String>>
getItemRows()
const;
559 void sort(std::size_t index,
const std::function<
bool(
const String&,
const String&)>& cmp);
688 TGUI_DEPRECATED(
"Use setColumnAutoExpanded and setColumnAutoResize instead") void
setExpandLastColumn(
bool expand);
697 TGUI_DEPRECATED(
"Use ColumnAutoExpanded and ColumnAutoResize setters and getters instead") TGUI_NODISCARD
bool getExpandLastColumn() const;
820 void leftMouseReleased(Vector2f pos) override;
825 void rightMousePressed(Vector2f pos) override;
830 void mouseMoved(Vector2f pos) override;
835 bool scrolled(
float delta, Vector2f pos,
bool touch) override;
840 void mouseNoLongerOnWidget() override;
845 void leftMouseButtonNoLongerDown() override;
850 void keyPressed(const
Event::KeyEvent& event) override;
895 TGUI_NODISCARD std::unique_ptr<DataIO::Node>
save(SavingRenderersMap& renderers) const override;
900 void load(const std::unique_ptr<DataIO::Node>& node, const LoadingRenderersMap& renderers) override;
928 TGUI_NODISCARD Vector2f getInnerSize() const;
933 TGUI_NODISCARD
Text createText(const
String& caption);
938 TGUI_NODISCARD
Text createHeaderText(const
String& caption);
943 virtual
void setItemColor(std::
size_t index, const
Color& color);
948 TGUI_NODISCARD static
float calculateAutoColumnWidth(const
Text& text);
953 void updateSelectedAndhoveredItemColors();
958 void updateItemColors();
963 void updateHeaderTextsColor();
968 void updateHoveredItem(
int item);
973 void updateSelectedItem(
int item);
978 void selectRangeFromEvent(std::
size_t item);
983 bool updateWidestItemInColumn(std::
size_t columnIndex);
988 bool updateWidestItemInColumn(std::
size_t columnIndex, std::
size_t itemIndex);
993 bool updateWidestItem();
998 bool updateWidestItem(std::
size_t itemIndex);
1004 void incrementWidestItemIndices(std::
size_t itemIndex);
1010 void updateColumnWidths();
1015 bool hasExpandedColumn() const;
1020 void addSelectedItem(
int item);
1025 void removeSelectedItem(std::
size_t item);
1030 void updateHoveredItemByMousePos(Vector2f mousePos);
1035 TGUI_NODISCARD
unsigned int getTotalSeparatorWidth() const;
1040 TGUI_NODISCARD
float getItemTotalWidth(const
Item& item, std::
size_t columnIndex) const;
1046 TGUI_NODISCARD
int getColumnIndexBelowMouse(
float mouseLeft);
1053 TGUI_NODISCARD
bool findBorderBelowMouse(Vector2f pos, std::
size_t& columnIndex) const;
1058 void updateScrollbars();
1063 void updateVerticalScrollbarMaximum();
1073 void drawColumn(
BackendRenderTarget& target,
RenderStates states, std::
size_t firstItem, std::
size_t lastItem, std::
size_t column,
float columnWidth) const;
1078 bool updateTime(
Duration elapsedTime) override;
1102 std::vector<Column> m_columns;
1103 std::vector<Item> m_items;
1104 std::set<std::size_t> m_selectedItems;
1106 int m_hoveredItem = -1;
1107 int m_firstSelectedItemIndex = -1;
1108 int m_focusedItemIndex = -1;
1110 float m_requestedHeaderHeight = 0;
1111 unsigned int m_itemHeight = 0;
1112 unsigned int m_headerTextSize = 0;
1113 unsigned int m_headerSeparatorHeight = 0;
1114 unsigned int m_separatorWidth = 1;
1115 unsigned int m_gridLinesWidth = 1;
1116 unsigned int m_iconCount = 0;
1117 float m_maxIconWidth = 0;
1118 float m_widestItemWidth = 0;
1119 std::size_t m_widestItemIndex = std::numeric_limits<std::size_t>::max();
1120 bool m_headerVisible =
true;
1121 bool m_showHorizontalGridLines =
false;
1122 bool m_showVerticalGridLines =
true;
1123 bool m_expandLastColumn =
false;
1124 bool m_multiSelect =
false;
1125 bool m_resizableColumns =
false;
1126 Vector2f m_fixedIconSize;
1128 std::size_t m_resizingColumn = 0;
1129 float m_resizingColumnLastMouseX = 0;
1131 int m_mouseOnHeaderIndex = -1;
1132 int m_possibleDoubleClick =
false;
1133 bool m_autoScroll =
true;
1135 Sprite m_spriteHeaderBackground;
1136 Sprite m_spriteBackground;
1139 Borders m_bordersCached;
1140 Borders m_paddingCached;
1141 Color m_borderColorCached;
1142 Color m_separatorColorCached;
1143 Color m_gridLinesColorCached;
1144 Color m_headerTextColorCached;
1145 Color m_headerBackgroundColorCached;
1146 Color m_backgroundColorCached;
1147 Color m_backgroundColorHoverCached;
1148 Color m_selectedBackgroundColorCached;
1149 Color m_selectedBackgroundColorHoverCached;
1150 Color m_textColorCached;
1151 Color m_textColorHoverCached;
1152 Color m_selectedTextColorCached;
1153 Color m_selectedTextColorHoverCached;
Base class for render targets.
Definition BackendRenderTarget.hpp:46
Wrapper for colors.
Definition Color.hpp:71
Type
List of available cursors.
Definition Cursor.hpp:48
@ Arrow
Arrow cursor (default).
Definition Cursor.hpp:49
Wrapper for durations.
Definition Duration.hpp:53
Class to store the position or size of a widget.
Definition Layout.hpp:321
Definition ListViewRenderer.hpp:35
Signal & getSignal(String signalName) override
Retrieves a signal based on its name.
bool scrolled(float delta, Vector2f pos, bool touch) override
Called by the parent on scroll event (either from mouse wheel of from two finger scrolling on a touch...
void updateTextSize() override
Called when the text size is changed (either by setTextSize or via the renderer).
void setShowVerticalGridLines(bool showGridLines)
Changes whether lines are drawn between columns.
bool isMouseOnWidget(Vector2f pos) const override
Returns whether the mouse position (which is relative to the parent widget) lies on top of the widget...
Scrollbar::Policy getVerticalScrollbarPolicy() const
Returns when the vertical scrollbar should be displayed.
void setSelectedItems(const std::set< std::size_t > &indices)
Selects items in the list view.
bool getShowHorizontalGridLines() const
Returns whether lines are drawn between items.
String getColumnText(std::size_t index) const
Returns the text of a column.
void setHeaderTextSize(unsigned int textSize)
Changes the text size of the header caption.
bool changeItem(std::size_t index, const std::vector< String > &item)
Changes an item with values for multiple columns to the list.
unsigned int getVerticalScrollbarValue() const
Returns the thumb position of the vertical scrollbar.
void setHorizontalScrollbarPolicy(Scrollbar::Policy policy)
Changes when the horizontal scrollbar should be displayed.
unsigned int getHorizontalScrollbarMaxValue() const
Returns the maximum thumb position of the horizontal scrollbar.
void removeAllItems()
Removes all items from the list.
bool getColumnAutoResize(std::size_t index) const
Returns whether the column width depends on the widest item added to that column.
HorizontalAlignment ColumnAlignment
The text alignment for all texts within a column.
Definition ListView.hpp:56
void setColumnWidth(std::size_t index, float width)
Changes the width of a column.
SignalInt onHeaderClick
The header was clicked. Optional parameter: column index.
Definition ListView.hpp:1097
String getItem(std::size_t index) const
Retrieves an item in the list.
unsigned int getSeparatorWidth() const
Returns the width of the column separator.
void setSize(const Layout2d &size) override
Changes the size of the list view.
void setHeaderVisible(bool showHeader)
Changes whether the header is shown.
void insertItem(std::size_t index, const String &text)
Inserts an item into the list.
std::vector< String > getItemRow(std::size_t index) const
Retrieves the values of all columns for an item in the list.
void setResizableColumns(bool resizable)
Changes whether the user can resize the columns by dragging the border between columns.
bool canHandleKeyPress(const Event::KeyEvent &event) override
Called by the parent of the widget to check if keyPressed would process the event.
void setColumnText(std::size_t index, const String &text)
Changes the text of a column.
std::shared_ptr< ListView > Ptr
Shared widget pointer.
Definition ListView.hpp:48
unsigned int getHorizontalScrollbarValue() const
Returns the thumb position of the horizontal scrollbar.
static ListView::Ptr copy(const ListView::ConstPtr &listView)
Makes a copy of another list view.
String getItemCell(std::size_t rowIndex, std::size_t columnIndex) const
Retrieves the value for a cell in the list.
void setVerticalScrollbarValue(unsigned int value)
Changes the thumb position of the vertical scrollbar.
bool getExpandLastColumn() const
Returns whether the last column is expanded to fill the list view (if all columns fit inside the list...
float getHeaderHeight() const
Returns the height of the header row.
std::size_t getColumnCount() const
Returns the amount of columns in the list view.
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.
unsigned int getGridLinesWidth() const
Returns the width of the grid lines.
void sort(std::size_t index, const std::function< bool(const String &, const String &)> &cmp)
Sort items.
std::size_t addColumn(const String &text, float width=0, HorizontalAlignment alignment=HorizontalAlignment::Left)
Adds a column.
Vector2f getFixedIconSize() const
Returns to which size all icons should be scaled.
void setHorizontalScrollbarValue(unsigned int value)
Changes the thumb position of the horizontal scrollbar.
void insertMultipleItems(std::size_t index, const std::vector< std::vector< String > > &items)
Inserts multiple items into the list.
bool getHeaderVisible() const
Returns whether the header is shown.
bool getColumnExpanded(std::size_t index) const
Returns whether the column is expanded to fill the list view (if all columns fit inside the list view...
bool changeSubItem(std::size_t index, std::size_t column, const String &item)
Changes the caption of a single value in the item.
int getSelectedItemIndex() const
Gets the index of the selected item.
std::size_t addItem(const String &text)
Adds an item to the list.
unsigned int getItemHeight() const
Returns the height of the items in the list view.
void insertItem(std::size_t index, const std::vector< String > &item)
Inserts an item into the list.
void setItemIcon(std::size_t index, const Texture &texture)
Sets a small icon in front of the item.
float getColumnWidth(std::size_t index) const
Returns the width of a column.
bool getResizableColumns() const
Returns whether the user can resize the columns by dragging the border between columns.
ListViewRenderer * getSharedRenderer() override
Returns the renderer, which gives access to functions that determine how the widget is displayed.
void setVerticalScrollbarPolicy(Scrollbar::Policy policy)
Changes when the vertical scrollbar should be displayed.
void setFixedIconSize(Vector2f iconSize)
Sets a size to which all icons should be scaled.
SignalInt onItemSelect
Definition ListView.hpp:1093
bool leftMousePressed(Vector2f pos) override
Called by the parent when the left mouse button goes down on top of the widget.
float getColumnDesignWidth(std::size_t index) const
Returns the original width of a column (the value passed to addColumn or the last setColumnWidth call...
void setColumnAlignment(std::size_t columnIndex, HorizontalAlignment alignment)
Changes the text alignment within a column.
HorizontalAlignment getColumnAlignment(std::size_t columnIndex) const
Returns the current text alignment within a column.
DataType getItemData(std::size_t index) const
Returns user data stored in the item.
Definition ListView.hpp:473
void mouseEnteredWidget() override
This function is called when the mouse enters the widget.
static ListView::Ptr create()
Creates a new list view widget.
std::size_t getItemCount() const
Returns the amount of items in the list view.
static constexpr const char StaticWidgetType[]
Type name of the widget.
Definition ListView.hpp:51
int getHoveredItemIndex() const
Gets the index of the item below the mouse cursor.
ListViewRenderer * getRenderer() override
Returns the renderer, which gives access to functions that determine how the widget is displayed.
void load(const std::unique_ptr< DataIO::Node > &node, const LoadingRenderersMap &renderers) override
Loads the widget from a tree of nodes.
bool getAutoScroll() const
Returns whether the list view scrolls to the bottom when a new item is added.
void setHeaderHeight(float height)
Changes the height of the header row.
void setShowHorizontalGridLines(bool showGridLines)
Changes whether lines are drawn between items.
void draw(BackendRenderTarget &target, RenderStates states) const override
Draw the widget to a render target.
std::shared_ptr< const ListView > ConstPtr
Shared constant widget pointer.
Definition ListView.hpp:49
void deselectItems()
Deselects the selected items.
void addMultipleItems(const std::vector< std::vector< String > > &items)
Adds multiple items to the list.
void setExpandLastColumn(bool expand)
Changes whether the last column is expanded to fill the list view (if all columns fit inside the list...
void setAutoScroll(bool autoScroll)
Changes whether the list view scrolls to the bottom when a new item is added.
std::size_t addItem(const std::vector< String > &item)
Adds an item with values for multiple columns to the list.
Widget::Ptr clone() const override
Makes a copy of the widget if you don't know its exact type.
std::vector< std::vector< String > > getItemRows() const
Returns a list of all column values for all items in the list view.
std::set< std::size_t > getSelectedItemIndices() const
Gets the indices of the selected items.
void setItemHeight(unsigned int itemHeight)
Changes the height of the items in the list view.
void scrollbarPolicyChanged(Orientation orientation) override
Called when the policy of one of the scrollbars has been changed calling either getVerticalScrollbar(...
void setSelectedItem(std::size_t index)
Selects an item in the list view.
void setSeparatorWidth(unsigned int width)
Changes the width of the column separator.
bool getMultiSelect() const
Returns multi selection of the items is allowed.
void setHeaderSeparatorHeight(unsigned int height)
Changes the height of the separator between the header and the items.
unsigned int getVerticalScrollbarMaxValue() const
Returns the maximum thumb position of the vertical scrollbar.
void setItemData(std::size_t index, Any data)
Store some user data with the item.
std::vector< String > getItems() const
Returns a list of the texts in the first column for all items in the list view.
unsigned int getHeaderTextSize() const
Returns the text size of the header caption.
Texture getItemIcon(std::size_t index) const
Gets the icon displayed in front of the item.
Scrollbar::Policy getHorizontalScrollbarPolicy() const
Returns when the horizontal scrollbar should be displayed.
void setMultiSelect(bool multiSelect)
Allow multi selection of the items.
void removeAllColumns()
Removes all columns.
SignalInt onDoubleClick
An item was double clicked. Optional parameter: selected item index.
Definition ListView.hpp:1095
bool removeItem(std::size_t index)
Removes the item from the list view.
void mouseLeftWidget() override
This function is called when the mouse leaves the widget.
float getCurrentHeaderHeight() const
Returns the height of the header or 0 if no header row is shown.
void setColumnAutoResize(std::size_t index, bool autoResize)
Changes whether the column width depends on the widest item added to that column.
void rendererChanged(const String &property) override
Function called when one of the properties of the renderer is changed.
bool getShowVerticalGridLines() const
Returns whether lines are drawn between items.
unsigned int getHeaderSeparatorHeight() const
Returns the height of the separator between the header and the items.
void setColumnExpanded(std::size_t index, bool expand)
Changes whether a column is expanded to fill the list view (if all columns fit inside the list view).
void setGridLinesWidth(unsigned int width)
Changes the width of the grid lines.
SignalInt onRightClick
Right mouse pressed. Optional parameter: index of item below mouse (-1 when not on top of item).
Definition ListView.hpp:1096
Signal to which the user can subscribe to get callbacks from.
Definition Signal.hpp:59
Wrapper class to store strings.
Definition String.hpp:93
Backend-independent wrapper around the backend-specific text class.
Definition Text.hpp:53
Texture wrapper that internally reuses resources when multiple Texture objects are loaded from the sa...
Definition Texture.hpp:52
Namespace that contains all TGUI functions and classes.
Definition AbsoluteOrRelativeValue.hpp:36
SignalTyped< int > SignalInt
Signal with one "int" as optional unbound parameter.
Definition Signal.hpp:421
HorizontalAlignment
The horizontal alignment.
Definition Layout.hpp:60
@ Left
Align to the left side.
Definition Layout.hpp:61
Orientation
Orientation of the object.
Definition Layout.hpp:50
Definition ListView.hpp:66
Definition ListView.hpp:59
States used for drawing.
Definition RenderStates.hpp:38