Cleanup: remove redundant, invalid info from headers
[blender.git] / intern / ghost / intern / GHOST_EventDragnDrop.h
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  *
16  * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
17  * All rights reserved.
18  */
19
20 /** \file ghost/intern/GHOST_EventDragnDrop.h
21  *  \ingroup GHOST
22  */
23
24
25 #ifndef __GHOST_EVENTDRAGNDROP_H__
26 #define __GHOST_EVENTDRAGNDROP_H__
27
28 #include "GHOST_Event.h"
29 extern "C" {
30 #include "IMB_imbuf.h"
31 #include "IMB_imbuf_types.h"
32 };
33
34 /**
35  * Drag & drop event
36  *
37  * The dragging sequence is performed in four phases:
38  *
39  * <li> Start sequence (GHOST_kEventDraggingEntered) that tells a drag'n'drop operation has started.
40  * Already gives the object data type, and the entering mouse location
41  *
42  * <li> Update mouse position (GHOST_kEventDraggingUpdated) sent upon each mouse move until the drag'n'drop operation
43  * stops, to give the updated mouse position. Useful to highlight a potential destination, and update the status
44  * (through GHOST_setAcceptDragOperation) telling if the object can be dropped at
45  * the current cursor position.
46  *
47  * <li> Abort drag'n'drop sequence (GHOST_kEventDraggingExited) sent when the user moved the mouse outside the window.
48  *
49  * <li> Send the dropped data (GHOST_kEventDraggingDropDone)
50  *
51  * <li> Outside of the normal sequence, dropped data can be sent (GHOST_kEventDraggingDropOnIcon).
52  * This can happen when the user drops an object on the application icon.
53  * (Also used in OSX to pass the filename of the document the user doubled-clicked in the finder)
54  *
55  * <br><br>Note that the mouse positions are given in Blender coordinates (y=0 at bottom)
56  *
57  * <br>Currently supported object types :
58  * <li>UTF-8 string
59  * <li>array of strings representing filenames (GHOST_TStringArray)
60  * <li>bitmap ImBuf
61  */
62 class GHOST_EventDragnDrop : public GHOST_Event
63 {
64 public:
65         /**
66          * Constructor.
67          * \param time      The time this event was generated.
68          * \param type      The type of this event.
69          * \param dataType  The type of the drop candidate object
70          * \param window    The window where the event occurred
71          * \param x         The x-coordinate of the location the cursor was at at the time of the event.
72          * \param y         The y-coordinate of the location the cursor was at at the time of the event.
73          * \param data      The "content" dropped in the window
74          */
75         GHOST_EventDragnDrop(GHOST_TUns64 time,
76                              GHOST_TEventType type,
77                              GHOST_TDragnDropTypes dataType,
78                              GHOST_IWindow *window,
79                              int x, int y, GHOST_TEventDataPtr data)
80                 : GHOST_Event(time, type, window)
81         {
82                 m_dragnDropEventData.x = x;
83                 m_dragnDropEventData.y = y;
84                 m_dragnDropEventData.dataType = dataType;
85                 m_dragnDropEventData.data = data;
86                 m_data = &m_dragnDropEventData;
87         }
88
89         ~GHOST_EventDragnDrop()
90         {
91                 //Free the dropped object data
92                 if (m_dragnDropEventData.data == NULL)
93                         return;
94
95                 switch (m_dragnDropEventData.dataType) {
96                         case GHOST_kDragnDropTypeBitmap:
97                                 IMB_freeImBuf((ImBuf *)m_dragnDropEventData.data);
98                                 break;
99                         case GHOST_kDragnDropTypeFilenames:
100                         {
101                                 GHOST_TStringArray *strArray = (GHOST_TStringArray *)m_dragnDropEventData.data;
102                                 int i;
103
104                                 for (i = 0; i < strArray->count; i++)
105                                         free(strArray->strings[i]);
106
107                                 free(strArray->strings);
108                                 free(strArray);
109                         }
110                         break;
111                         case GHOST_kDragnDropTypeString:
112                                 free(m_dragnDropEventData.data);
113                                 break;
114
115                         default:
116                                 break;
117                 }
118         }
119
120
121
122 protected:
123         /** The x,y-coordinates of the cursor position. */
124         GHOST_TEventDragnDropData m_dragnDropEventData;
125 };
126
127 #endif // __GHOST_EVENTDRAGNDROP_H__