#pragma once #include "Element.hpp" #include #include namespace GUIStuff { typedef std::vector TreeListingObjIndexList; } bool operator<(const GUIStuff::TreeListingObjIndexList& a, const GUIStuff::TreeListingObjIndexList& b); namespace GUIStuff { class GUIManager; class TreeListing : public Element { public: static constexpr float ENTRY_HEIGHT = 25.0f; static constexpr float ICON_SIZE = 25.0f; struct ObjInfo { TreeListingObjIndexList objIndex; bool isDirectory = false; bool isOpen = false; }; struct DirectoryInfo { size_t dirSize; bool isOpen; }; struct Data { std::set* selectedIndices = nullptr; std::function(const TreeListingObjIndexList& objIndex)> dirInfo; std::function setDirectoryOpen; std::function drawNonDirectoryObjIconGUI; std::function drawObjGUI; std::function onDoubleClick; std::function onSelectChange; std::function& objIndices, const TreeListingObjIndexList& newObjIndex)> moveObj; }; TreeListing(GUIManager& gui); void layout(const Clay_ElementId& id, const Data& newDisplayData); private: void recursive_visible_flattened_obj_list(std::vector& objs, const TreeListingObjIndexList& objIndex); std::vector flattenedIndexList; Data d; }; }