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_ITEM_DROP_INFO_H_
8 #define MYGUI_ITEM_DROP_INFO_H_
9 
10 #include "MyGUI_Prerequest.h"
11 #include "MyGUI_Macros.h"
12 
13 namespace MyGUI
14 {
15 
16 	struct MYGUI_EXPORT DDItemState
17 	{
18 		enum Enum
19 		{
20 			None,
21 			Start, /**< start drag */
22 			End, /**< end drag (drop) */
23 			Miss, /**< drag DDContainer over empty space or widgets that don't have drag'n'drop */
24 			Accept, /**< drag DDContainer over another DDContainer that accept dropping on it */
25 			Refuse /**< drag DDContainer over another DDContainer that refuse dropping on it */
26 		};
27 
28 		DDItemState(Enum _value = None) :
mValueDDItemState29 			mValue(_value)
30 		{
31 		}
32 
33 		friend bool operator == (DDItemState const& a, DDItemState const& b)
34 		{
35 			return a.mValue == b.mValue;
36 		}
37 
38 		friend bool operator != (DDItemState const& a, DDItemState const& b)
39 		{
40 			return a.mValue != b.mValue;
41 		}
42 
getValueDDItemState43 		int getValue() const
44 		{
45 			return mValue;
46 		}
47 
48 	private:
49 		Enum mValue;
50 	};
51 
52 	// структура информации об индексах дропа
53 	/** Inormation about drag'n'drop indexes */
54 	struct MYGUI_EXPORT DDItemInfo
55 	{
DDItemInfoDDItemInfo56 		DDItemInfo() :
57 			sender(nullptr),
58 			sender_index(ITEM_NONE),
59 			receiver(nullptr),
60 			receiver_index(ITEM_NONE)
61 		{
62 		}
63 
DDItemInfoDDItemInfo64 		DDItemInfo(DDContainer* _sender, size_t _sender_index, DDContainer* _receiver, size_t _receiver_index) :
65 			sender(_sender),
66 			sender_index(_sender_index),
67 			receiver(_receiver),
68 			receiver_index(_receiver_index)
69 		{
70 		}
71 
setDDItemInfo72 		void set(DDContainer* _sender, size_t _sender_index, DDContainer* _receiver, size_t _receiver_index)
73 		{
74 			sender = _sender;
75 			sender_index = _sender_index;
76 			receiver = _receiver;
77 			receiver_index = _receiver_index;
78 		}
79 
resetDDItemInfo80 		void reset()
81 		{
82 			sender = nullptr;
83 			sender_index = ITEM_NONE;
84 			receiver = nullptr;
85 			receiver_index = ITEM_NONE;
86 		}
87 
88 		/** DDContainer that send this event (container from which we started drag) */
89 		DDContainer* sender;
90 		/** Index of sender container */
91 		size_t sender_index;
92 
93 		/** DDContainer that receive dragged widget (container to which we want to drop) */
94 		DDContainer* receiver;
95 		/** Index of receiver container */
96 		size_t receiver_index;
97 	};
98 
99 	struct MYGUI_EXPORT DDWidgetState
100 	{
DDWidgetStateDDWidgetState101 		DDWidgetState(size_t _index) :
102 			index(_index),
103 			update(true),
104 			accept(false),
105 			refuse(false)
106 		{
107 		}
108 
109 		/** Index of element */
110 		size_t index;
111 		/** State and internal data changed */
112 		bool update;
113 		/** Is widget accept drop */
114 		bool accept;
115 		/** Is widget refuse drop */
116 		bool refuse;
117 	};
118 
119 } // namespace MyGUI
120 
121 #endif // MYGUI_ITEM_DROP_INFO_H_
122