26#ifndef TGUI_LIST_VIEW_HPP
27#define TGUI_LIST_VIEW_HPP
30#include <TGUI/CopiedSharedPtr.hpp>
31#include <TGUI/Widgets/Scrollbar.hpp>
32#include <TGUI/Renderers/ListViewRenderer.hpp>
33#include <TGUI/Text.hpp>
49 typedef std::shared_ptr<ListView>
Ptr;
50 typedef std::shared_ptr<const ListView>
ConstPtr;
64 std::vector<Text> texts;
72 float designWidth = 0;
73 float maxItemWidth = 0;
86 ListView(
const char* typeName =
"ListView",
bool initRenderer =
true);
271 std::size_t
addItem(
const std::vector<String>& item);
295 void insertItem(std::size_t index,
const std::vector<String>& item);
313 bool changeItem(std::size_t index,
const std::vector<String>& item);
419 template <
typename T>
422 if (index < m_items.size())
423 return AnyCast<T>(m_items[index].data);
425 throw std::bad_cast();
511 void sort(std::size_t index,
const std::function<
bool(
const String&,
const String&)>& cmp);
756 void leftMousePressed(
Vector2f pos)
override;
761 void leftMouseReleased(
Vector2f pos)
override;
766 void rightMousePressed(
Vector2f pos)
override;
771 void mouseMoved(
Vector2f pos)
override;
776 bool mouseWheelScrolled(
float delta,
Vector2f pos)
override;
781 void mouseNoLongerOnWidget()
override;
786 void leftMouseButtonNoLongerDown()
override;
829 std::unique_ptr<DataIO::Node>
save(SavingRenderersMap& renderers)
const override;
835 void load(
const std::unique_ptr<DataIO::Node>& node,
const LoadingRenderersMap& renderers)
override;
865 virtual void setItemColor(std::size_t index,
const Color& color);
871 float calculateAutoColumnWidth(
const Text& text);
877 void updateSelectedAndhoveredItemColors();
883 void updateItemColors();
889 void updateHeaderTextsColor();
895 void updateHoveredItem(
int item);
901 void updateSelectedItem(
int item);
907 void selectRangeFromEvent(std::size_t item);
914 bool updateLastColumnMaxItemWidth();
921 bool updateLastColumnMaxItemWidthWithNewItem(
const Item& item);
928 bool updateLastColumnMaxItemWidthWithModifiedItem(
const Item& modifiedItem,
float oldDesiredWidthInLastColumn);
934 void addSelectedItem(
int item);
940 void removeSelectedItem(std::size_t item);
946 void updateHoveredItemByMousePos(
Vector2f mousePos);
952 unsigned int getTotalSeparatorWidth()
const;
958 float getItemTotalWidth(
const Item& item, std::size_t columnIndex)
const;
965 int getColumnIndexBelowMouse(
float mouseLeft);
971 void updateScrollbars();
976 void updateVerticalScrollbarMaximum();
981 void updateHorizontalScrollbarMaximum();
993 void drawColumn(
BackendRenderTarget& target,
RenderStates states, std::size_t firstItem, std::size_t lastItem, std::size_t column,
float columnWidth)
const;
999 bool updateTime(
Duration elapsedTime)
override;
1026 std::vector<Column> m_columns;
1027 std::vector<Item> m_items;
1028 std::set<std::size_t> m_selectedItems;
1030 int m_hoveredItem = -1;
1031 int m_firstSelectedItemIndex = -1;
1032 int m_focusedItemIndex = -1;
1034 float m_requestedHeaderHeight = 0;
1035 unsigned int m_itemHeight = 0;
1036 unsigned int m_headerTextSize = 0;
1037 unsigned int m_headerSeparatorHeight = 0;
1038 unsigned int m_separatorWidth = 1;
1039 unsigned int m_gridLinesWidth = 1;
1040 unsigned int m_iconCount = 0;
1041 float m_maxIconWidth = 0;
1042 float m_maxItemWidth = 0;
1043 bool m_headerVisible =
true;
1044 bool m_showHorizontalGridLines =
false;
1045 bool m_showVerticalGridLines =
true;
1046 bool m_expandLastColumn =
false;
1047 bool m_multiSelect =
false;
1055 int m_mouseOnHeaderIndex = -1;
1056 int m_possibleDoubleClick =
false;
1057 bool m_autoScroll =
true;
1062 Color m_borderColorCached;
1063 Color m_separatorColorCached;
1064 Color m_gridLinesColorCached;
1065 Color m_headerTextColorCached;
1066 Color m_headerBackgroundColorCached;
1067 Color m_backgroundColorCached;
1068 Color m_backgroundColorHoverCached;
1069 Color m_selectedBackgroundColorCached;
1070 Color m_selectedBackgroundColorHoverCached;
1071 Color m_textColorCached;
1072 Color m_textColorHoverCached;
1073 Color m_selectedTextColorCached;
1074 Color m_selectedTextColorHoverCached;
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: ListViewRenderer.hpp:37
List view widget.
Definition: ListView.hpp:46
Signal & getSignal(String signalName) override
Retrieves a signal based on its name.
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.
std::shared_ptr< ListView > Ptr
Shared widget pointer.
Definition: ListView.hpp:49
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.
T getItemData(std::size_t index) const
Returns user data stored in the item.
Definition: ListView.hpp:420
std::size_t addColumn(const String &text, float width=0, ColumnAlignment alignment=ColumnAlignment::Left)
Adds a column.
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.
void removeAllItems()
Removes all items from the list.
void setColumnAlignment(std::size_t columnIndex, ColumnAlignment alignment)
Changes the text alignment within a column.
ColumnAlignment getColumnAlignment(std::size_t columnIndex) const
Returns the current text alignment within a column.
void setColumnWidth(std::size_t index, float width)
Changes the width of a column.
String getItem(std::size_t index) const
Retrieves an item in the list.
static ListView::Ptr copy(ListView::ConstPtr listView)
Makes a copy of another list view.
std::shared_ptr< const ListView > ConstPtr
Shared constant widget pointer.
Definition: ListView.hpp:50
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 setColumnText(std::size_t index, const String &text)
Changes the text of a column.
unsigned int getHorizontalScrollbarValue() const
Returns the thumb position of the horizontal scrollbar.
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.
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 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.
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.
ColumnAlignment
The text alignment for all texts within a column.
Definition: ListView.hpp:56
static ListView::Ptr create()
Creates a new list view widget.
std::size_t getItemCount() const
Returns the amount of items in the list view.
void load(const std::unique_ptr< DataIO::Node > &node, const LoadingRenderersMap &renderers) override
Loads the widget from a tree of nodes.
ListViewRenderer * getSharedRenderer()
Returns the renderer, which gives access to functions that determine how the widget is displayed.
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.
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 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.
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.
bool removeItem(std::size_t index)
Removes the item from the list view.
float getCurrentHeaderHeight() const
Returns the height of the header or 0 if no header row is shown.
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 setGridLinesWidth(unsigned int width)
Changes the width of the grid lines.
ListViewRenderer * getRenderer()
Returns the renderer, which gives access to functions that determine how the widget is displayed.
Definition: Outline.hpp:39
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
Definition: Texture.hpp:52
Namespace that contains all TGUI functions and classes.
Definition: AbsoluteOrRelativeValue.hpp:36
KeyPressed event parameters.
Definition: Event.hpp:167
Definition: ListView.hpp:70
Definition: ListView.hpp:63
States used for drawing.
Definition: RenderStates.hpp:39