5c1fda0b981132f5ab79eb3877b895f4bdc33590
[platform/core/api/maps-service.git] / src / api / maps_view_event_data.cpp
1 /* Copyright (c) 2010-2014 Samsung Electronics Co., Ltd. All rights reserved.
2  *
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 #include <glib.h>
18 #include "maps_error.h"
19 #include "maps_view_event_data.h"
20 #include "maps_util.h"
21 #include "maps_condition.h"
22
23 /*
24  * This represents visual event object information
25  */
26 typedef struct _maps_view_event_data_s {
27         maps_view_event_type_e event_type;
28
29         /* Applicable for set_center action */
30         maps_coordinates_h center;
31
32         /* Applicable for gesture */
33         int x;
34         int y;
35         maps_coordinates_h coordinates;
36
37         /* Applicable for center move */
38         int delta_x;
39         int delta_y;
40
41         /* Applicable for gestures */
42         int fingers;
43
44         /* Applicable for gestures, object */
45         maps_view_gesture_e gesture_type;
46
47         /* Applicable for action */
48         maps_view_action_e action_type;
49
50         /* Applicable for zoom */
51         double zoom_factor;
52
53         /* Applicable for rotation */
54         double rotation_angle;
55
56         /* Applicable for object event */
57         maps_view_object_h object;
58 } maps_view_event_data_s;
59
60 /*----------------------------------------------------------------------------*/
61
62 int _maps_view_event_data_set_type(const maps_view_event_data_h event, maps_view_event_type_e event_type);
63
64 int _maps_view_event_data_set_gesture_type(const maps_view_event_data_h event, maps_view_gesture_e gesture_type);
65
66 int _maps_view_event_data_set_action_type(const maps_view_event_data_h event, maps_view_action_e action_type);
67
68 int _maps_view_event_data_set_center(const maps_view_event_data_h event, const maps_coordinates_h center);
69
70 int _maps_view_event_data_set_delta(const maps_view_event_data_h event, int delta_x, int delta_y);
71
72 int _maps_view_event_data_set_position(const maps_view_event_data_h event, int x, int y);
73
74 int _maps_view_event_data_set_fingers(const maps_view_event_data_h event, int fingers);
75
76 int _maps_view_event_data_set_zoom_factor(const maps_view_event_data_h event, double zoom_factor);
77
78 int _maps_view_event_data_set_rotation_angle(const maps_view_event_data_h event, double rotation_angle);
79
80 int _maps_view_event_data_set_object(const maps_view_event_data_h event, const maps_view_object_h object);
81
82
83 /*----------------------------------------------------------------------------*/
84
85 int _maps_view_event_data_create(maps_view_event_data_h *event)
86 {
87         if (!event)
88                 return MAPS_ERROR_INVALID_PARAMETER;
89
90         maps_view_event_data_s *e = g_slice_new0(maps_view_event_data_s);
91         if (!e) {
92                 MAPS_LOGE("OUT_OF_MEMORY(0x%08x)", MAPS_ERROR_OUT_OF_MEMORY);
93                 return MAPS_ERROR_OUT_OF_MEMORY;
94         }
95
96         e->event_type = MAPS_VIEW_EVENT_GESTURE;
97         e->gesture_type = MAPS_VIEW_GESTURE_SCROLL;
98         e->action_type = MAPS_VIEW_ACTION_NONE;
99
100         *event = (maps_view_event_data_h) e;
101         return MAPS_ERROR_NONE;
102 }
103
104 EXPORT_API int maps_view_event_data_destroy(maps_view_event_data_h event)
105 {
106         if (!maps_condition_check_maps_feature())
107                 return MAPS_ERROR_NOT_SUPPORTED;
108         if (!event)
109                 return MAPS_ERROR_INVALID_PARAMETER;
110
111         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
112         if (e->center)
113                 maps_coordinates_destroy(e->center);
114         g_slice_free(maps_view_event_data_s, e);
115         return MAPS_ERROR_NONE;
116 }
117
118 EXPORT_API int maps_view_event_data_clone(const maps_view_event_data_h origin, maps_view_event_data_h *cloned)
119 {
120         if (!maps_condition_check_maps_feature())
121                 return MAPS_ERROR_NOT_SUPPORTED;
122         if (!origin || !cloned)
123                 return MAPS_ERROR_INVALID_PARAMETER;
124
125         int error = MAPS_ERROR_NONE;
126         do {
127                 error = _maps_view_event_data_create(cloned);
128                 if (!(*cloned) || (error != MAPS_ERROR_NONE))
129                         break;
130
131                 maps_view_event_data_s *e = (maps_view_event_data_s *) origin;
132
133                 error = _maps_view_event_data_set_type(*cloned, e->event_type);
134                 if (error != MAPS_ERROR_NONE)
135                         break;
136
137                 error = _maps_view_event_data_set_gesture_type(*cloned, e->gesture_type);
138                 error = _maps_view_event_data_set_action_type(*cloned, e->action_type);
139                 error = _maps_view_event_data_set_center(*cloned, e->center);
140                 error = _maps_view_event_data_set_delta(*cloned, e->delta_x, e->delta_y);
141                 error = _maps_view_event_data_set_position(*cloned, e->x, e->y);
142                 error = _maps_view_event_data_set_fingers(*cloned, e->fingers);
143                 error = _maps_view_event_data_set_zoom_factor(*cloned, e->zoom_factor);
144                 error = _maps_view_event_data_set_rotation_angle(*cloned, e->rotation_angle);
145                 error = _maps_view_event_data_set_object(*cloned, e->object);
146
147                 return MAPS_ERROR_NONE;
148         } while (false);
149
150         maps_view_event_data_destroy(*cloned);
151         *cloned = NULL;
152         return error;
153 }
154
155 /*----------------------------------------------------------------------------*/
156
157 int _maps_view_event_data_set_type(maps_view_event_data_h event, maps_view_event_type_e event_type)
158 {
159         if (!event)
160                 return MAPS_ERROR_INVALID_PARAMETER;
161         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
162         e->event_type = event_type;
163         return MAPS_ERROR_NONE;
164 }
165
166 int _maps_view_event_data_set_center(maps_view_event_data_h event, maps_coordinates_h center)
167 {
168         if (!event || !center)
169                 return MAPS_ERROR_INVALID_PARAMETER;
170         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
171         if (e->center)
172                 maps_coordinates_destroy(e->center);
173         return maps_coordinates_clone(center, &e->center);
174 }
175
176 int _maps_view_event_data_set_delta(maps_view_event_data_h event, int delta_x, int delta_y)
177 {
178         if (!event)
179                 return MAPS_ERROR_INVALID_PARAMETER;
180         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
181         e->delta_x = delta_x;
182         e->delta_y = delta_y;
183         return MAPS_ERROR_NONE;
184 }
185
186 int _maps_view_event_data_set_position(maps_view_event_data_h event, int x, int y)
187 {
188         if (!event)
189                 return MAPS_ERROR_INVALID_PARAMETER;
190         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
191         e->x = x;
192         e->y = y;
193         return MAPS_ERROR_NONE;
194 }
195
196 int _maps_view_event_data_set_coordinates(maps_view_event_data_h event, maps_coordinates_h coordinates)
197 {
198         if (!event || !coordinates)
199                 return MAPS_ERROR_INVALID_PARAMETER;
200         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
201         if (e->coordinates)
202                 maps_coordinates_destroy(e->coordinates);
203         return maps_coordinates_clone(coordinates, &e->coordinates);
204 }
205
206 int _maps_view_event_data_set_fingers(maps_view_event_data_h event, int fingers)
207 {
208         if (!event)
209                 return MAPS_ERROR_INVALID_PARAMETER;
210         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
211         e->fingers = fingers;
212         return MAPS_ERROR_NONE;
213 }
214
215 int _maps_view_event_data_set_gesture_type(maps_view_event_data_h event, maps_view_gesture_e gesture_type)
216 {
217         if (!event)
218                 return MAPS_ERROR_INVALID_PARAMETER;
219         if ((gesture_type < MAPS_VIEW_GESTURE_NONE) || (gesture_type > MAPS_VIEW_GESTURE_LONG_PRESS))
220                 return MAPS_ERROR_INVALID_PARAMETER;
221         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
222         e->gesture_type = gesture_type;
223         return MAPS_ERROR_NONE;
224 }
225
226 int _maps_view_event_data_set_action_type(maps_view_event_data_h event, maps_view_action_e action_type)
227 {
228         if (!event)
229                 return MAPS_ERROR_INVALID_PARAMETER;
230         if ((action_type < MAPS_VIEW_ACTION_NONE) || (action_type > MAPS_VIEW_ACTION_ROTATE))
231                 return MAPS_ERROR_INVALID_PARAMETER;
232         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
233         e->action_type = action_type;
234         return MAPS_ERROR_NONE;
235 }
236
237 int _maps_view_event_data_set_zoom_factor(maps_view_event_data_h event, double zoom_factor)
238 {
239         if (!event)
240                 return MAPS_ERROR_INVALID_PARAMETER;
241         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
242         e->zoom_factor = zoom_factor;
243         return MAPS_ERROR_NONE;
244 }
245
246 int _maps_view_event_data_set_rotation_angle(maps_view_event_data_h event, double rotation_angle)
247 {
248         if (!event)
249                 return MAPS_ERROR_INVALID_PARAMETER;
250         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
251         e->rotation_angle = rotation_angle;
252         return MAPS_ERROR_NONE;
253 }
254
255 int _maps_view_event_data_set_object(maps_view_event_data_h event, maps_view_object_h object)
256 {
257         if (!event)
258                 return MAPS_ERROR_INVALID_PARAMETER;
259         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
260         e->object = object;
261         return MAPS_ERROR_NONE;
262 }
263
264
265 /*----------------------------------------------------------------------------*/
266
267 EXPORT_API int maps_view_event_data_get_type(const maps_view_event_data_h event, maps_view_event_type_e *event_type)
268 {
269         if (!maps_condition_check_maps_feature())
270                 return MAPS_ERROR_NOT_SUPPORTED;
271         if (!event || !event_type)
272                 return MAPS_ERROR_INVALID_PARAMETER;
273         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
274         *event_type = e->event_type;
275         return MAPS_ERROR_NONE;
276 }
277
278 EXPORT_API int maps_view_event_data_get_gesture_type(const maps_view_event_data_h event, maps_view_gesture_e *gesture_type)
279 {
280         if (!maps_condition_check_maps_feature())
281                 return MAPS_ERROR_NOT_SUPPORTED;
282         if (!event || !gesture_type)
283                 return MAPS_ERROR_INVALID_PARAMETER;
284         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
285         if ((e->event_type != MAPS_VIEW_EVENT_GESTURE) && (e->event_type != MAPS_VIEW_EVENT_OBJECT))
286                 return MAPS_ERROR_INVALID_PARAMETER;
287         *gesture_type = e->gesture_type;
288         return MAPS_ERROR_NONE;
289 }
290
291 EXPORT_API int maps_view_event_data_get_action_type(const maps_view_event_data_h event, maps_view_action_e *action_type)
292 {
293         if (!maps_condition_check_maps_feature())
294                 return MAPS_ERROR_NOT_SUPPORTED;
295         if (!event || !action_type)
296                 return MAPS_ERROR_INVALID_PARAMETER;
297         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
298         if (e->event_type != MAPS_VIEW_EVENT_ACTION)
299                 return MAPS_ERROR_INVALID_PARAMETER;
300         *action_type = e->action_type;
301         return MAPS_ERROR_NONE;
302 }
303
304 EXPORT_API int maps_view_event_data_get_center(const maps_view_event_data_h event, maps_coordinates_h *center)
305 {
306         if (!maps_condition_check_maps_feature())
307                 return MAPS_ERROR_NOT_SUPPORTED;
308         if (!event || !center)
309                 return MAPS_ERROR_INVALID_PARAMETER;
310         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
311         if (e->event_type != MAPS_VIEW_EVENT_ACTION)
312                 return MAPS_ERROR_INVALID_PARAMETER;
313         if (!e->center)
314                 return MAPS_ERROR_NOT_FOUND;
315         return maps_coordinates_clone(e->center, center);
316 }
317
318 EXPORT_API int maps_view_event_data_get_delta(const maps_view_event_data_h event, int *delta_x, int *delta_y)
319 {
320         if (!maps_condition_check_maps_feature())
321                 return MAPS_ERROR_NOT_SUPPORTED;
322         if (!event || !delta_x || !delta_y)
323                 return MAPS_ERROR_INVALID_PARAMETER;
324         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
325         if (e->event_type != MAPS_VIEW_EVENT_ACTION)
326                 return MAPS_ERROR_INVALID_PARAMETER;
327         *delta_x = e->delta_x;
328         *delta_y = e->delta_y;
329         return MAPS_ERROR_NONE;
330 }
331
332 EXPORT_API int maps_view_event_data_get_position(const maps_view_event_data_h event, int *x, int* y)
333 {
334         if (!maps_condition_check_maps_feature())
335                 return MAPS_ERROR_NOT_SUPPORTED;
336         if (!event || !x || !y)
337                 return MAPS_ERROR_INVALID_PARAMETER;
338         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
339         if (e->event_type != MAPS_VIEW_EVENT_GESTURE && e->event_type != MAPS_VIEW_EVENT_OBJECT)
340                 return MAPS_ERROR_INVALID_PARAMETER;
341         *x = e->x;
342         *y = e->y;
343         return MAPS_ERROR_NONE;
344 }
345
346 EXPORT_API int maps_view_event_data_get_coordinates(const maps_view_event_data_h event, maps_coordinates_h *coordinates)
347 {
348         if (!maps_condition_check_maps_feature())
349                 return MAPS_ERROR_NOT_SUPPORTED;
350         if (!event || !coordinates)
351                 return MAPS_ERROR_INVALID_PARAMETER;
352         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
353         if (e->event_type != MAPS_VIEW_EVENT_GESTURE)
354                 return MAPS_ERROR_INVALID_OPERATION;
355         if (!e->coordinates)
356                 return MAPS_ERROR_NOT_FOUND;
357         return maps_coordinates_clone(e->coordinates, coordinates);
358 }
359
360 EXPORT_API int maps_view_event_data_get_fingers(const maps_view_event_data_h event, int *fingers)
361 {
362         if (!maps_condition_check_maps_feature())
363                 return MAPS_ERROR_NOT_SUPPORTED;
364         if (!event || !fingers)
365                 return MAPS_ERROR_INVALID_PARAMETER;
366         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
367         if (e->event_type != MAPS_VIEW_EVENT_GESTURE)
368                 return MAPS_ERROR_INVALID_PARAMETER;
369         *fingers = e->fingers;
370         return MAPS_ERROR_NONE;
371 }
372
373 EXPORT_API int maps_view_event_data_get_zoom_factor(const maps_view_event_data_h event, double *zoom_factor)
374 {
375         if (!maps_condition_check_maps_feature())
376                 return MAPS_ERROR_NOT_SUPPORTED;
377         if (!event || !zoom_factor)
378                 return MAPS_ERROR_INVALID_PARAMETER;
379         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
380         if ((e->event_type != MAPS_VIEW_EVENT_GESTURE) && (e->event_type != MAPS_VIEW_EVENT_ACTION))
381                 return MAPS_ERROR_INVALID_PARAMETER;
382         *zoom_factor = e->zoom_factor;
383         return MAPS_ERROR_NONE;
384 }
385
386 EXPORT_API int maps_view_event_data_get_rotation_angle(const maps_view_event_data_h event, double *rotation_angle)
387 {
388         if (!maps_condition_check_maps_feature())
389                 return MAPS_ERROR_NOT_SUPPORTED;
390         if (!event || !rotation_angle)
391                 return MAPS_ERROR_INVALID_PARAMETER;
392         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
393         if ((e->event_type != MAPS_VIEW_EVENT_GESTURE) && (e->event_type != MAPS_VIEW_EVENT_ACTION))
394                 return MAPS_ERROR_INVALID_PARAMETER;
395         *rotation_angle = e->rotation_angle;
396         return MAPS_ERROR_NONE;
397 }
398
399 EXPORT_API int maps_view_event_data_get_object(const maps_view_event_data_h event, maps_view_object_h *object)
400 {
401         if (!maps_condition_check_maps_feature())
402                 return MAPS_ERROR_NOT_SUPPORTED;
403         if (!event || !object)
404                 return MAPS_ERROR_INVALID_PARAMETER;
405         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
406         if (e->event_type != MAPS_VIEW_EVENT_OBJECT)
407                 return MAPS_ERROR_INVALID_PARAMETER;
408         *object = e->object;
409         return MAPS_ERROR_NONE;
410 }