4095c569c22c2b31f0a8150a3232861235172c3c
[scilab.git] / scilab / modules / graphic_objects / src / cpp / getGraphicObjectProperty.cpp
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2010-2010 - DIGITEO - Bruno JOFRET
4  *
5  *  This file must be used under the terms of the CeCILL.
6  *  This source file is licensed as described in the file COPYING, which
7  *  you should have received as part of this distribution.  The terms
8  *  are also available at
9  *  http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
10  *
11  */
12
13 extern "C"
14 {
15 #include <stdlib.h>
16 #include <string.h>
17 #include "getGraphicObjectProperty.h"
18 #include "graphicObjectProperties.h"
19 #include "getScilabJavaVM.h"
20 #include <stdio.h>
21 }
22
23 #include "CallGraphicController.hxx"
24 #include "DataController.hxx"
25
26 using namespace org_scilab_modules_graphic_objects;
27
28 void getGraphicObjectProperty(int iUID, int _iName, _ReturnType_ _returnType, void **_pvData)
29 {
30     // do not perform anything if the id is undefined
31     if (iUID == 0)
32     {
33         return;
34     }
35
36     /* All the Data model properties have the DATA_MODEL prefix */
37     if (_iName == __GO_DATA_MODEL__
38             || _iName == __GO_DATA_MODEL_COORDINATES__
39             || _iName == __GO_DATA_MODEL_X__
40             || _iName == __GO_DATA_MODEL_Y__
41             || _iName == __GO_DATA_MODEL_Z__
42             || _iName == __GO_DATA_MODEL_X_COORDINATES_SHIFT__
43             || _iName == __GO_DATA_MODEL_Y_COORDINATES_SHIFT__
44             || _iName == __GO_DATA_MODEL_Z_COORDINATES_SHIFT__
45             || _iName == __GO_DATA_MODEL_X_COORDINATES_SHIFT_SET__
46             || _iName == __GO_DATA_MODEL_Y_COORDINATES_SHIFT_SET__
47             || _iName == __GO_DATA_MODEL_Z_COORDINATES_SHIFT_SET__
48             || _iName == __GO_DATA_MODEL_NUM_ELEMENTS__
49             || _iName == __GO_DATA_MODEL_NUM_ELEMENTS_ARRAY__
50             || _iName == __GO_DATA_MODEL_NUM_VERTICES_PER_GON__
51             || _iName == __GO_DATA_MODEL_NUM_GONS__
52             || _iName == __GO_DATA_MODEL_Z_COORDINATES_SET__
53             || _iName == __GO_DATA_MODEL_COLORS__
54             || _iName == __GO_DATA_MODEL_NUM_COLORS__
55             || _iName == __GO_DATA_MODEL_NUM_VERTICES__
56             || _iName == __GO_DATA_MODEL_NUM_INDICES__
57             || _iName == __GO_DATA_MODEL_INDICES__
58             || _iName == __GO_DATA_MODEL_VALUES__
59             || _iName == __GO_DATA_MODEL_FEC_TRIANGLES__
60             || _iName == __GO_DATA_MODEL_NUM_X__
61             || _iName == __GO_DATA_MODEL_NUM_Y__
62             || _iName == __GO_DATA_MODEL_NUM_Z__
63             || _iName == __GO_DATA_MODEL_GRID_SIZE__
64             || _iName == __GO_DATA_MODEL_X_DIMENSIONS__
65             || _iName == __GO_DATA_MODEL_Y_DIMENSIONS__
66             || _iName == __GO_DATA_MODEL_MATPLOT_BOUNDS__
67             || _iName == __GO_DATA_MODEL_MATPLOT_TYPE__
68             || _iName == __GO_DATA_MODEL_MATPLOT_DATA_INFOS__
69             || _iName == __GO_DATA_MODEL_MATPLOT_DATA_TYPE__
70             || _iName == __GO_DATA_MODEL_MATPLOT_DATA_ORDER__
71             || _iName == __GO_DATA_MODEL_MATPLOT_GL_TYPE__
72             || _iName == __GO_DATA_MODEL_MATPLOT_IMAGE_TYPE__
73             || _iName == __GO_DATA_MODEL_MATPLOT_IMAGE_DATA__
74             || _iName == __GO_DATA_MODEL_MATPLOT_IMAGE_DATASIZE__
75             || _iName == __GO_DATA_MODEL_DISPLAY_FUNCTION__
76             || _iName == __GO_DATA_MODEL_DISPLAY_FUNCTION_SIZE__
77        )
78     {
79         DataController::getGraphicObjectProperty(iUID, _iName, _pvData);
80         return;
81     }
82
83     try
84     {
85         switch (_returnType)
86         {
87             case jni_string:
88             {
89                 *(_pvData) = CallGraphicController::getGraphicObjectPropertyAsString(getScilabJavaVM(), iUID, _iName);
90                 return;
91             }
92             case jni_string_vector:
93             {
94                 *_pvData = CallGraphicController::getGraphicObjectPropertyAsStringVector(getScilabJavaVM(), iUID, _iName);
95                 return;
96             }
97             case jni_double:
98             {
99                 double * ret = CallGraphicController::getGraphicObjectPropertyAsDoubleVector(getScilabJavaVM(), iUID, _iName);
100                 if (ret == NULL)
101                 {
102                     *_pvData = NULL;
103                 }
104                 else
105                 {
106                     ((double *)*_pvData)[0] = *ret;
107                     delete[] ret;
108                 }
109
110                 return;
111             }
112             case jni_double_vector:
113             {
114                 *_pvData = CallGraphicController::getGraphicObjectPropertyAsDoubleVector(getScilabJavaVM(), iUID, _iName);
115                 return;
116             }
117             case jni_bool:
118             {
119                 int * ret = CallGraphicController::getGraphicObjectPropertyAsBooleanVector(getScilabJavaVM(), iUID, _iName);
120                 if (ret == NULL)
121                 {
122                     *_pvData = NULL;
123                 }
124                 else
125                 {
126                     ((int *)*_pvData)[0] = *ret;
127                     delete[] ret;
128                 }
129
130                 return;
131             }
132             case jni_bool_vector:
133             {
134                 *_pvData = CallGraphicController::getGraphicObjectPropertyAsBooleanVector(getScilabJavaVM(), iUID, _iName);
135                 return;
136             }
137             case jni_int:
138             {
139                 int * ret = CallGraphicController::getGraphicObjectPropertyAsIntegerVector(getScilabJavaVM(), iUID, _iName);
140                 if (ret == NULL)
141                 {
142                     *_pvData = NULL;
143                 }
144                 else
145                 {
146                     ((int *)*_pvData)[0] = *ret;
147                     delete[] ret;
148                 }
149
150                 return;
151             }
152             case jni_int_vector:
153             {
154                 *_pvData = CallGraphicController::getGraphicObjectPropertyAsIntegerVector(getScilabJavaVM(), iUID, _iName);
155                 return;
156             }
157             default:
158                 *_pvData = NULL;
159                 return;
160         }
161     }
162     catch (std::exception &e)
163     {
164         e.what();
165         // If we have an exception, return null to scilab to manage error.
166         *_pvData = NULL;
167         return;
168     }
169
170 }
171
172
173 void releaseGraphicObjectProperty(int _iName, void * _pvData, enum _ReturnType_ _returnType, int numElements)
174 {
175
176     /* All the Data model properties have the DATA_MODEL prefix */
177     if (_iName == __GO_DATA_MODEL__
178             || _iName == __GO_DATA_MODEL_COORDINATES__
179             || _iName == __GO_DATA_MODEL_X__
180             || _iName == __GO_DATA_MODEL_Y__
181             || _iName == __GO_DATA_MODEL_Z__
182             || _iName == __GO_DATA_MODEL_X_COORDINATES_SHIFT__
183             || _iName == __GO_DATA_MODEL_Y_COORDINATES_SHIFT__
184             || _iName == __GO_DATA_MODEL_Z_COORDINATES_SHIFT__
185             || _iName == __GO_DATA_MODEL_X_COORDINATES_SHIFT_SET__
186             || _iName == __GO_DATA_MODEL_Y_COORDINATES_SHIFT_SET__
187             || _iName == __GO_DATA_MODEL_Z_COORDINATES_SHIFT_SET__
188             || _iName == __GO_DATA_MODEL_NUM_ELEMENTS__
189             || _iName == __GO_DATA_MODEL_NUM_ELEMENTS_ARRAY__
190             || _iName == __GO_DATA_MODEL_NUM_VERTICES_PER_GON__
191             || _iName == __GO_DATA_MODEL_NUM_GONS__
192             || _iName == __GO_DATA_MODEL_Z_COORDINATES_SET__
193             || _iName == __GO_DATA_MODEL_COLORS__
194             || _iName == __GO_DATA_MODEL_NUM_COLORS__
195             || _iName == __GO_DATA_MODEL_NUM_VERTICES__
196             || _iName == __GO_DATA_MODEL_NUM_INDICES__
197             || _iName == __GO_DATA_MODEL_INDICES__
198             || _iName == __GO_DATA_MODEL_VALUES__
199             || _iName == __GO_DATA_MODEL_FEC_TRIANGLES__
200             || _iName == __GO_DATA_MODEL_NUM_X__
201             || _iName == __GO_DATA_MODEL_NUM_Y__
202             || _iName == __GO_DATA_MODEL_NUM_Z__
203             || _iName == __GO_DATA_MODEL_GRID_SIZE__
204             || _iName == __GO_DATA_MODEL_X_DIMENSIONS__
205             || _iName == __GO_DATA_MODEL_Y_DIMENSIONS__
206             || _iName == __GO_DATA_MODEL_MATPLOT_BOUNDS__
207             || _iName == __GO_DATA_MODEL_MATPLOT_TYPE__
208             || _iName == __GO_DATA_MODEL_MATPLOT_DATA_INFOS__
209             || _iName == __GO_DATA_MODEL_MATPLOT_DATA_TYPE__
210             || _iName == __GO_DATA_MODEL_MATPLOT_DATA_ORDER__
211             || _iName == __GO_DATA_MODEL_MATPLOT_GL_TYPE__
212             || _iName == __GO_DATA_MODEL_MATPLOT_IMAGE_TYPE__
213             || _iName == __GO_DATA_MODEL_MATPLOT_IMAGE_DATA__
214             || _iName == __GO_DATA_MODEL_MATPLOT_IMAGE_DATASIZE__
215        )
216     {
217         // passed by reference, do not free them
218         return;
219     }
220
221     switch (_returnType)
222     {
223         case jni_string:
224         {
225             delete[] (char*) _pvData;
226             return;
227         }
228         case jni_string_vector:
229         {
230             char** data = (char**) _pvData;
231             for (int i = 0; i < numElements; ++i)
232             {
233                 delete[] data[i];
234             }
235             delete[] data;
236             return;
237         }
238         case jni_double:
239         {
240             // passed by value
241             return;
242         }
243         case jni_double_vector:
244         {
245             delete[] (double*) _pvData;
246             return;
247         }
248         case jni_bool:
249         {
250             // passed by value
251             return;
252         }
253         case jni_bool_vector:
254         {
255             delete[] (int*) _pvData;
256             return;
257         }
258         case jni_int:
259         {
260             // passed by value
261             return;
262         }
263         case jni_int_vector:
264         {
265             delete[] (int*) _pvData;
266             return;
267         }
268         default:
269             return;
270     }
271
272 }
273