Polyphase Game Engine
Loading...
Searching...
No Matches
ListViewWidget.h
Go to the documentation of this file.
1#pragma once
2
5#include "AssetRef.h"
6
7class Scene;
9class ArrayWidget;
11
13{
14public:
15
17
18 virtual void Create() override;
19 virtual void Tick(float deltaTime) override;
20 virtual void PreRender() override;
21 virtual void GatherProperties(std::vector<Property>& props) override;
22
23 // Template
24 void SetItemTemplate(Scene* scene);
25 Scene* GetItemTemplate() const;
26
27 // Data Management
28 void SetData(const std::vector<Datum>& data);
29 void AddItem(const Datum& data, int32_t index = -1);
30 void RemoveItem(int32_t index);
31 void UpdateItem(int32_t index, const Datum& data);
32 void Clear();
33 int32_t GetItemCount() const;
34 Datum GetItemData(int32_t index) const;
35
36 // Layout
37 void SetSpacing(float spacing);
38 float GetSpacing() const;
39 void SetOrientation(ArrayOrientation orientation);
40 ArrayOrientation GetOrientation() const;
41
42 // Item sizing (0 = auto-size to content)
43 void SetItemWidth(float width);
44 float GetItemWidth() const;
45 void SetItemHeight(float height);
46 float GetItemHeight() const;
47
48 // Single selection
49 void SetSelectedIndex(int32_t index);
50 int32_t GetSelectedIndex() const;
51 Datum GetSelectedData() const;
52 void ClearSelection();
53
54 // Access
55 ScrollContainer* GetScrollContainer();
56 ArrayWidget* GetArrayWidget();
57 ListViewItemWidget* GetItem(int32_t index);
58
59 // Scroll control
60 void ScrollToItem(int32_t index);
61
62protected:
63
64 static bool HandlePropChange(Datum* datum, uint32_t index, const void* newValue);
65
66 void EnsureContainers();
67 void RebuildItems();
68 ListViewItemWidget* CreateItem(int32_t index, const Datum& data);
69 void DestroyItem(int32_t index);
70 void UpdateItemIndices();
71 void ApplyItemSize(ListViewItemWidget* item);
72
73 void FireItemGenerate(int32_t index, const Datum& data, ListViewItemWidget* item);
74 void FireItemUpdate(int32_t index, const Datum& data, ListViewItemWidget* item);
75 void FireSelectionChanged(int32_t index);
76
77 // Item event handlers (called by items)
78 friend class ListViewItemWidget;
79 void OnItemClicked(int32_t index);
80 void OnItemHoverEnter(int32_t index);
81 void OnItemHoverExit(int32_t index);
82
83 // Properties
85 float mSpacing = 0.0f;
87 float mItemWidth = 0.0f; // 0 = auto-size
88 float mItemHeight = 0.0f; // 0 = auto-size
89 int32_t mSelectedIndex = -1; // -1 = no selection
90
91 // Transient children
92 ScrollContainer* mScrollContainer = nullptr;
93 ArrayWidget* mArrayWidget = nullptr;
94
95 // Data & Items
96 std::vector<Datum> mData;
97 std::vector<ListViewItemWidget*> mItems;
98};
ArrayOrientation
Definition ArrayWidget.h:11
#define POLYPHASE_API
Definition PolyphaseAPI.h:31
Definition ArrayWidget.h:19
Definition AssetRef.h:18
Definition Datum.h:164
Definition ListViewItemWidget.h:8
Definition ListViewWidget.h:13
DECLARE_NODE(ListViewWidget, Widget)
std::vector< ListViewItemWidget * > mItems
Definition ListViewWidget.h:97
std::vector< Datum > mData
Definition ListViewWidget.h:96
SceneRef mItemTemplate
Definition ListViewWidget.h:84
virtual void Create()
Definition Node.cpp:220
virtual void Tick(float deltaTime)
Definition Node.cpp:558
Definition Scene.h:36
Definition ScrollContainer.h:28
Definition Widget.h:53
static bool HandlePropChange(Datum *datum, uint32_t index, const void *newValue)
Definition Widget.cpp:45
virtual void GatherProperties(std::vector< Property > &outProps) override
Definition Widget.cpp:115
virtual void PreRender()
Definition Widget.cpp:226