Add LCOV remarkers to increase line coverage rate
[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                 //LCOV_EXCL_START
93                 MAPS_LOGE("OUT_OF_MEMORY(0x%08x)", MAPS_ERROR_OUT_OF_MEMORY);
94                 return MAPS_ERROR_OUT_OF_MEMORY;
95                 //LCOV_EXCL_STOP
96         }
97
98         e->event_type = MAPS_VIEW_EVENT_GESTURE;
99         e->gesture_type = MAPS_VIEW_GESTURE_SCROLL;
100         e->action_type = MAPS_VIEW_ACTION_NONE;
101
102         *event = (maps_view_event_data_h) e;
103         return MAPS_ERROR_NONE;
104 }
105
106 EXPORT_API int maps_view_event_data_destroy(maps_view_event_data_h event)
107 {
108         if (!maps_condition_check_maps_feature())
109                 return MAPS_ERROR_NOT_SUPPORTED;
110         if (!event)
111                 return MAPS_ERROR_INVALID_PARAMETER;
112
113         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
114         if (e->center)
115                 maps_coordinates_destroy(e->center);
116         g_slice_free(maps_view_event_data_s, e);
117         return MAPS_ERROR_NONE;
118 }
119
120 //LCOV_EXCL_START
121 EXPORT_API int maps_view_event_data_clone(const maps_view_event_data_h origin, maps_view_event_data_h *cloned)
122 {
123         if (!maps_condition_check_maps_feature())
124                 return MAPS_ERROR_NOT_SUPPORTED;
125         if (!origin || !cloned)
126                 return MAPS_ERROR_INVALID_PARAMETER;
127
128         int error = MAPS_ERROR_NONE;
129         do {
130                 error = _maps_view_event_data_create(cloned);
131                 if (!(*cloned) || (error != MAPS_ERROR_NONE))
132                         break;
133
134                 maps_view_event_data_s *e = (maps_view_event_data_s *) origin;
135
136                 error = _maps_view_event_data_set_type(*cloned, e->event_type);
137                 if (error != MAPS_ERROR_NONE)
138                         break;
139
140                 error = _maps_view_event_data_set_gesture_type(*cloned, e->gesture_type);
141                 error = _maps_view_event_data_set_action_type(*cloned, e->action_type);
142                 error = _maps_view_event_data_set_center(*cloned, e->center);
143                 error = _maps_view_event_data_set_delta(*cloned, e->delta_x, e->delta_y);
144                 error = _maps_view_event_data_set_position(*cloned, e->x, e->y);
145                 error = _maps_view_event_data_set_fingers(*cloned, e->fingers);
146                 error = _maps_view_event_data_set_zoom_factor(*cloned, e->zoom_factor);
147                 error = _maps_view_event_data_set_rotation_angle(*cloned, e->rotation_angle);
148                 error = _maps_view_event_data_set_object(*cloned, e->object);
149
150                 return MAPS_ERROR_NONE;
151         } while (false);
152
153         maps_view_event_data_destroy(*cloned);
154         *cloned = NULL;
155         return error;
156 }
157
158 /*----------------------------------------------------------------------------*/
159
160 int _maps_view_event_data_set_type(maps_view_event_data_h event, maps_view_event_type_e event_type)
161 {
162         if (!event)
163                 return MAPS_ERROR_INVALID_PARAMETER;
164         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
165         e->event_type = event_type;
166         return MAPS_ERROR_NONE;
167 }
168
169 int _maps_view_event_data_set_center(maps_view_event_data_h event, maps_coordinates_h center)
170 {
171         if (!event || !center)
172                 return MAPS_ERROR_INVALID_PARAMETER;
173         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
174         if (e->center)
175                 maps_coordinates_destroy(e->center); //LCOV_EXCL_LINE
176         return maps_coordinates_clone(center, &e->center);
177 }
178
179 int _maps_view_event_data_set_delta(maps_view_event_data_h event, int delta_x, int delta_y)
180 {
181         if (!event)
182                 return MAPS_ERROR_INVALID_PARAMETER;
183         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
184         e->delta_x = delta_x;
185         e->delta_y = delta_y;
186         return MAPS_ERROR_NONE;
187 }
188
189 int _maps_view_event_data_set_position(maps_view_event_data_h event, int x, int y)
190 {
191         if (!event)
192                 return MAPS_ERROR_INVALID_PARAMETER;
193         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
194         e->x = x;
195         e->y = y;
196         return MAPS_ERROR_NONE;
197 }
198
199 int _maps_view_event_data_set_coordinates(maps_view_event_data_h event, maps_coordinates_h coordinates)
200 {
201         if (!event || !coordinates)
202                 return MAPS_ERROR_INVALID_PARAMETER;
203         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
204         if (e->coordinates)
205                 maps_coordinates_destroy(e->coordinates);
206         return maps_coordinates_clone(coordinates, &e->coordinates);
207 }
208
209 int _maps_view_event_data_set_fingers(maps_view_event_data_h event, int fingers)
210 {
211         if (!event)
212                 return MAPS_ERROR_INVALID_PARAMETER;
213         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
214         e->fingers = fingers;
215         return MAPS_ERROR_NONE;
216 }
217
218 int _maps_view_event_data_set_gesture_type(maps_view_event_data_h event, maps_view_gesture_e gesture_type)
219 {
220         if (!event)
221                 return MAPS_ERROR_INVALID_PARAMETER;
222         if ((gesture_type < MAPS_VIEW_GESTURE_NONE) || (gesture_type > MAPS_VIEW_GESTURE_LONG_PRESS))
223                 return MAPS_ERROR_INVALID_PARAMETER;
224         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
225         e->gesture_type = gesture_type;
226         return MAPS_ERROR_NONE;
227 }
228
229 int _maps_view_event_data_set_action_type(maps_view_event_data_h event, maps_view_action_e action_type)
230 {
231         if (!event)
232                 return MAPS_ERROR_INVALID_PARAMETER;
233         if ((action_type < MAPS_VIEW_ACTION_NONE) || (action_type > MAPS_VIEW_ACTION_ROTATE))
234                 return MAPS_ERROR_INVALID_PARAMETER;
235         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
236         e->action_type = action_type;
237         return MAPS_ERROR_NONE;
238 }
239
240 int _maps_view_event_data_set_zoom_factor(maps_view_event_data_h event, double zoom_factor)
241 {
242         if (!event)
243                 return MAPS_ERROR_INVALID_PARAMETER;
244         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
245         e->zoom_factor = zoom_factor;
246         return MAPS_ERROR_NONE;
247 }
248
249 int _maps_view_event_data_set_rotation_angle(maps_view_event_data_h event, double rotation_angle)
250 {
251         if (!event)
252                 return MAPS_ERROR_INVALID_PARAMETER;
253         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
254         e->rotation_angle = rotation_angle;
255         return MAPS_ERROR_NONE;
256 }
257
258 int _maps_view_event_data_set_object(maps_view_event_data_h event, maps_view_object_h object)
259 {
260         if (!event)
261                 return MAPS_ERROR_INVALID_PARAMETER;
262         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
263         e->object = object;
264         return MAPS_ERROR_NONE;
265 }
266
267
268 /*----------------------------------------------------------------------------*/
269
270 EXPORT_API int maps_view_event_data_get_type(const maps_view_event_data_h event, maps_view_event_type_e *event_type)
271 {
272         if (!maps_condition_check_maps_feature())
273                 return MAPS_ERROR_NOT_SUPPORTED;
274         if (!event || !event_type)
275                 return MAPS_ERROR_INVALID_PARAMETER;
276         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
277         *event_type = e->event_type;
278         return MAPS_ERROR_NONE;
279 }
280
281 EXPORT_API int maps_view_event_data_get_gesture_type(const maps_view_event_data_h event, maps_view_gesture_e *gesture_type)
282 {
283         if (!maps_condition_check_maps_feature())
284                 return MAPS_ERROR_NOT_SUPPORTED;
285         if (!event || !gesture_type)
286                 return MAPS_ERROR_INVALID_PARAMETER;
287         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
288         if ((e->event_type != MAPS_VIEW_EVENT_GESTURE) && (e->event_type != MAPS_VIEW_EVENT_OBJECT))
289                 return MAPS_ERROR_INVALID_PARAMETER;
290         *gesture_type = e->gesture_type;
291         return MAPS_ERROR_NONE;
292 }
293
294 EXPORT_API int maps_view_event_data_get_action_type(const maps_view_event_data_h event, maps_view_action_e *action_type)
295 {
296         if (!maps_condition_check_maps_feature())
297                 return MAPS_ERROR_NOT_SUPPORTED;
298         if (!event || !action_type)
299                 return MAPS_ERROR_INVALID_PARAMETER;
300         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
301         if (e->event_type != MAPS_VIEW_EVENT_ACTION)
302                 return MAPS_ERROR_INVALID_PARAMETER;
303         *action_type = e->action_type;
304         return MAPS_ERROR_NONE;
305 }
306
307 EXPORT_API int maps_view_event_data_get_center(const maps_view_event_data_h event, maps_coordinates_h *center)
308 {
309         if (!maps_condition_check_maps_feature())
310                 return MAPS_ERROR_NOT_SUPPORTED;
311         if (!event || !center)
312                 return MAPS_ERROR_INVALID_PARAMETER;
313         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
314         if (e->event_type != MAPS_VIEW_EVENT_ACTION)
315                 return MAPS_ERROR_INVALID_PARAMETER;
316         if (!e->center)
317                 return MAPS_ERROR_NOT_FOUND;
318         return maps_coordinates_clone(e->center, center);
319 }
320
321 EXPORT_API int maps_view_event_data_get_delta(const maps_view_event_data_h event, int *delta_x, int *delta_y)
322 {
323         if (!maps_condition_check_maps_feature())
324                 return MAPS_ERROR_NOT_SUPPORTED;
325         if (!event || !delta_x || !delta_y)
326                 return MAPS_ERROR_INVALID_PARAMETER;
327         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
328         if (e->event_type != MAPS_VIEW_EVENT_ACTION)
329                 return MAPS_ERROR_INVALID_PARAMETER;
330         *delta_x = e->delta_x;
331         *delta_y = e->delta_y;
332         return MAPS_ERROR_NONE;
333 }
334
335 EXPORT_API int maps_view_event_data_get_position(const maps_view_event_data_h event, int *x, int* y)
336 {
337         if (!maps_condition_check_maps_feature())
338                 return MAPS_ERROR_NOT_SUPPORTED;
339         if (!event || !x || !y)
340                 return MAPS_ERROR_INVALID_PARAMETER;
341         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
342         if (e->event_type != MAPS_VIEW_EVENT_GESTURE && e->event_type != MAPS_VIEW_EVENT_OBJECT)
343                 return MAPS_ERROR_INVALID_PARAMETER;
344         *x = e->x;
345         *y = e->y;
346         return MAPS_ERROR_NONE;
347 }
348
349 EXPORT_API int maps_view_event_data_get_coordinates(const maps_view_event_data_h event, maps_coordinates_h *coordinates)
350 {
351         if (!maps_condition_check_maps_feature())
352                 return MAPS_ERROR_NOT_SUPPORTED;
353         if (!event || !coordinates)
354                 return MAPS_ERROR_INVALID_PARAMETER;
355         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
356         if (e->event_type != MAPS_VIEW_EVENT_GESTURE)
357                 return MAPS_ERROR_INVALID_OPERATION;
358         if (!e->coordinates)
359                 return MAPS_ERROR_NOT_FOUND;
360         return maps_coordinates_clone(e->coordinates, coordinates);
361 }
362
363 EXPORT_API int maps_view_event_data_get_fingers(const maps_view_event_data_h event, int *fingers)
364 {
365         if (!maps_condition_check_maps_feature())
366                 return MAPS_ERROR_NOT_SUPPORTED;
367         if (!event || !fingers)
368                 return MAPS_ERROR_INVALID_PARAMETER;
369         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
370         if (e->event_type != MAPS_VIEW_EVENT_GESTURE)
371                 return MAPS_ERROR_INVALID_PARAMETER;
372         *fingers = e->fingers;
373         return MAPS_ERROR_NONE;
374 }
375
376 EXPORT_API int maps_view_event_data_get_zoom_factor(const maps_view_event_data_h event, double *zoom_factor)
377 {
378         if (!maps_condition_check_maps_feature())
379                 return MAPS_ERROR_NOT_SUPPORTED;
380         if (!event || !zoom_factor)
381                 return MAPS_ERROR_INVALID_PARAMETER;
382         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
383         if ((e->event_type != MAPS_VIEW_EVENT_GESTURE) && (e->event_type != MAPS_VIEW_EVENT_ACTION))
384                 return MAPS_ERROR_INVALID_PARAMETER;
385         *zoom_factor = e->zoom_factor;
386         return MAPS_ERROR_NONE;
387 }
388
389 EXPORT_API int maps_view_event_data_get_rotation_angle(const maps_view_event_data_h event, double *rotation_angle)
390 {
391         if (!maps_condition_check_maps_feature())
392                 return MAPS_ERROR_NOT_SUPPORTED;
393         if (!event || !rotation_angle)
394                 return MAPS_ERROR_INVALID_PARAMETER;
395         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
396         if ((e->event_type != MAPS_VIEW_EVENT_GESTURE) && (e->event_type != MAPS_VIEW_EVENT_ACTION))
397                 return MAPS_ERROR_INVALID_PARAMETER;
398         *rotation_angle = e->rotation_angle;
399         return MAPS_ERROR_NONE;
400 }
401
402 EXPORT_API int maps_view_event_data_get_object(const maps_view_event_data_h event, maps_view_object_h *object)
403 {
404         if (!maps_condition_check_maps_feature())
405                 return MAPS_ERROR_NOT_SUPPORTED;
406         if (!event || !object)
407                 return MAPS_ERROR_INVALID_PARAMETER;
408         maps_view_event_data_s *e = (maps_view_event_data_s *) event;
409         if (e->event_type != MAPS_VIEW_EVENT_OBJECT)
410                 return MAPS_ERROR_INVALID_PARAMETER;
411         *object = e->object;
412         return MAPS_ERROR_NONE;
413 }
414 //LCOV_EXCL_STOP