axmol/extensions/fairygui/GTree.h

74 lines
2.1 KiB
C++

#ifndef __GTREE_H__
#define __GTREE_H__
#include "FairyGUIMacros.h"
#include "GList.h"
#include "GTreeNode.h"
#include "cocos2d.h"
NS_FGUI_BEGIN
class GList;
class GComponent;
class GTree : public GList
{
public:
typedef std::function<void(GTreeNode* node, GComponent* obj)> TreeNodeRenderFunction;
typedef std::function<void(GTreeNode* node, bool expand)> TreeNodeWillExpandFunction;
GTree();
virtual ~GTree();
CREATE_FUNC(GTree);
int getIndent() const { return _indent; }
void setIndent(int value) { _indent = value; }
int getClickToExpand() const { return _clickToExpand; }
void setClickToExpand(int value) { _clickToExpand = value; }
GTreeNode* getRootNode() const { return _rootNode; }
GTreeNode* getSelectedNode() const;
void getSelectedNodes(std::vector<GTreeNode*>& result) const;
void selectNode(GTreeNode* node, bool scrollItToView = false);
void unselectNode(GTreeNode* node);
void expandAll(GTreeNode* folderNode);
void collapseAll(GTreeNode* folderNode);
TreeNodeRenderFunction treeNodeRender;
TreeNodeWillExpandFunction treeNodeWillExpand;
protected:
virtual void handleInit() override;
virtual void setup_beforeAdd(ByteBuffer* buffer, int beginPos) override;
virtual void readItems(ByteBuffer* buffer) override;
virtual void dispatchItemEvent(GObject* item, EventContext* context) override;
private:
void createCell(GTreeNode* node);
void afterInserted(GTreeNode* node);
int getInsertIndexForNode(GTreeNode* node);
void afterRemoved(GTreeNode* node);
void afterExpanded(GTreeNode* node);
void afterCollapsed(GTreeNode* node);
void afterMoved(GTreeNode* node);
int checkChildren(GTreeNode* folderNode, int index);
void hideFolderNode(GTreeNode* folderNode);
void removeNode(GTreeNode* node);
int getFolderEndIndex(int startIndex, int level);
void onCellTouchBegin(EventContext* context);
void onExpandedStateChanged(EventContext* context);
int _indent;
GTreeNode* _rootNode;
int _clickToExpand;
bool _expandedStatusInEvt;
friend class GTreeNode;
};
NS_FGUI_END
#endif