1 /*
2  * This source file is part of MyGUI. For the latest info, see http://mygui.info/
3  * Distributed under the MIT License
4  * (See accompanying file COPYING.MIT or copy at http://opensource.org/licenses/MIT)
5  */
6 
7 #ifndef MYGUI_I_LAYER_NODE_H_
8 #define MYGUI_I_LAYER_NODE_H_
9 
10 #include "MyGUI_Prerequest.h"
11 #include "MyGUI_Enumerator.h"
12 #include "MyGUI_IObject.h"
13 #include "MyGUI_IRenderTarget.h"
14 #include "MyGUI_Types.h"
15 
16 namespace MyGUI
17 {
18 
19 	class ILayer;
20 	class ILayerItem;
21 	class ILayerNode;
22 
23 	class RenderItem;
24 
25 	typedef std::vector<ILayerNode*> VectorILayerNode;
26 	typedef Enumerator<VectorILayerNode> EnumeratorILayerNode;
27 
28 	class MYGUI_EXPORT ILayerNode :
29 		public IObject
30 	{
31 		MYGUI_RTTI_DERIVED( ILayerNode )
32 
33 	public:
34 		// леер, которому мы принадлежим
35 		virtual ILayer* getLayer() const = 0;
36 
37 		// возвращает отца или nullptr
38 		virtual ILayerNode* getParent() const = 0;
39 
40 		// создаем дочерний нод
41 		virtual ILayerNode* createChildItemNode() = 0;
42 		// удаляем дочерний нод
43 		virtual void destroyChildItemNode(ILayerNode* _node) = 0;
44 
45 		// поднимаем дочерний нод
46 		virtual void upChildItemNode(ILayerNode* _node) = 0;
47 
48 		// список детей
49 		virtual EnumeratorILayerNode getEnumerator() const = 0;
50 
51 		virtual size_t getLayerNodeCount() const = 0;
52 
53 		virtual ILayerNode* getLayerNodeAt(size_t _index) const = 0;
54 
55 		// добавляем айтем к ноду
56 		virtual void attachLayerItem(ILayerItem* _item) = 0;
57 		// удаляем айтем из нода
58 		virtual void detachLayerItem(ILayerItem* _root) = 0;
59 
60 		// добавляет саб айтем и возвращает рендер айтем
61 		virtual RenderItem* addToRenderItem(ITexture* _texture, bool _firstQueue, bool _separate) = 0;
62 		// необходимо обновление нода
63 		virtual void outOfDate(RenderItem* _item) = 0;
64 
65 		// возвращает виджет по позиции
66 		virtual ILayerItem* getLayerItemByPoint(int _left, int _top) const = 0;
67 
68 		// рисует леер
69 		virtual void renderToTarget(IRenderTarget* _target, bool _update) = 0;
70 
71 		virtual void resizeView(const IntSize& _viewSize) = 0;
72 
73 		virtual float getNodeDepth() = 0;
74 	};
75 
76 } // namespace MyGUI
77 
78 #endif // MYGUI_I_LAYER_NODE_H_
79