6de158736f152ba7823aeab21c7202049ca519b4
[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-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 }
21
22 #include "CallGraphicController.hxx"
23 #include "DataController.hxx"
24
25 using namespace org_scilab_modules_graphic_objects;
26
27 void getGraphicObjectProperty(char const* _pstID, int _iName, _ReturnType_ _returnType, void **_pvData)
28 {
29     // do not perform anything if the id is undefined
30     if (_pstID == NULL)
31     {
32         return;
33     }
34
35     /* All the Data model properties have the DATA_MODEL prefix */
36     if (_iName == __GO_DATA_MODEL__
37         || _iName == __GO_DATA_MODEL_COORDINATES__
38         || _iName == __GO_DATA_MODEL_X__
39         || _iName == __GO_DATA_MODEL_Y__
40         || _iName == __GO_DATA_MODEL_Z__
41         || _iName == __GO_DATA_MODEL_X_COORDINATES_SHIFT__
42         || _iName == __GO_DATA_MODEL_Y_COORDINATES_SHIFT__
43         || _iName == __GO_DATA_MODEL_Z_COORDINATES_SHIFT__
44         || _iName == __GO_DATA_MODEL_X_COORDINATES_SHIFT_SET__
45         || _iName == __GO_DATA_MODEL_Y_COORDINATES_SHIFT_SET__
46         || _iName == __GO_DATA_MODEL_Z_COORDINATES_SHIFT_SET__
47         || _iName == __GO_DATA_MODEL_NUM_ELEMENTS__
48         || _iName == __GO_DATA_MODEL_NUM_ELEMENTS_ARRAY__
49         || _iName == __GO_DATA_MODEL_NUM_VERTICES_PER_GON__
50         || _iName == __GO_DATA_MODEL_NUM_GONS__
51         || _iName == __GO_DATA_MODEL_Z_COORDINATES_SET__
52         || _iName == __GO_DATA_MODEL_COLORS__
53         || _iName == __GO_DATA_MODEL_NUM_COLORS__
54         || _iName == __GO_DATA_MODEL_NUM_VERTICES__
55         || _iName == __GO_DATA_MODEL_NUM_INDICES__
56         || _iName == __GO_DATA_MODEL_INDICES__
57         || _iName == __GO_DATA_MODEL_VALUES__
58         || _iName == __GO_DATA_MODEL_FEC_TRIANGLES__
59         || _iName == __GO_DATA_MODEL_NUM_X__
60         || _iName == __GO_DATA_MODEL_NUM_Y__
61         || _iName == __GO_DATA_MODEL_NUM_Z__
62         || _iName == __GO_DATA_MODEL_GRID_SIZE__
63         || _iName == __GO_DATA_MODEL_X_DIMENSIONS__
64         || _iName == __GO_DATA_MODEL_Y_DIMENSIONS__
65         || _iName == __GO_DATA_MODEL_MATPLOT_BOUNDS__
66         || _iName == __GO_DATA_MODEL_MATPLOT_TYPE__
67                )
68     {
69         DataController::getGraphicObjectProperty(_pstID, _iName, _pvData);
70         return;
71     }
72
73     try
74     {
75         switch (_returnType)
76         {
77             case jni_string:
78             {
79                 *(_pvData) = CallGraphicController::getGraphicObjectPropertyAsString(getScilabJavaVM(), _pstID, _iName);
80                 return;
81             }
82             case jni_string_vector:
83             {
84                 *_pvData = CallGraphicController::getGraphicObjectPropertyAsStringVector(getScilabJavaVM(), _pstID, _iName);
85                 return;
86             }
87             case jni_double:
88             {
89                 ((double *)*_pvData)[0] = (double)CallGraphicController::getGraphicObjectPropertyAsDouble(getScilabJavaVM(), _pstID, _iName);
90                 return;
91             }
92             case jni_double_vector:
93             {
94                 *_pvData = CallGraphicController::getGraphicObjectPropertyAsDoubleVector(getScilabJavaVM(), _pstID, _iName);
95                 return;
96             }
97             case jni_bool:
98             {
99                 ((int *)*_pvData)[0] = (int)CallGraphicController::getGraphicObjectPropertyAsBoolean(getScilabJavaVM(), _pstID, _iName);
100                 return;
101             }
102             case jni_bool_vector:
103             {
104                 *_pvData = CallGraphicController::getGraphicObjectPropertyAsBooleanVector(getScilabJavaVM(), _pstID, _iName);
105                 return;
106             }
107             case jni_int:
108             {
109                 ((int *)*_pvData)[0] = CallGraphicController::getGraphicObjectPropertyAsInteger(getScilabJavaVM(), _pstID, _iName);
110                 return;
111             }
112             case jni_int_vector:
113             {
114                 *_pvData = CallGraphicController::getGraphicObjectPropertyAsIntegerVector(getScilabJavaVM(), _pstID, _iName);
115                 return;
116             }
117             default:
118                 *_pvData = NULL;
119                 return;
120         }
121     }
122     catch (std::exception &e)
123     {
124         e.what();
125         // If we have an exception, return null to scilab to manage error.
126         *_pvData = NULL;
127         return;
128     }
129
130 }
131
132
133 void releaseGraphicObjectProperty(int _iName, void * _pvData, enum _ReturnType_ _returnType, int numElements)
134 {
135
136     /* All the Data model properties have the DATA_MODEL prefix */
137     if (_iName == __GO_DATA_MODEL__)
138     {
139         // passed by reference, do not free them
140         return;
141     }
142
143     switch (_returnType)
144     {
145         case jni_string:
146         {
147             delete[] (char*) _pvData;
148             return;
149         }
150         case jni_string_vector:
151         {
152             char** data = (char**) _pvData;
153             for (int i = 0; i < numElements; ++i)
154             {
155                 delete[] data[i];
156             }
157             delete[] data;
158             return;
159         }
160         case jni_double:
161         {
162             // passed by value
163             return;
164         }
165         case jni_double_vector:
166         {
167             delete[] (double*) _pvData;
168             return;
169         }
170         case jni_bool:
171         {
172             // passed by value
173             return;
174         }
175         case jni_bool_vector:
176         {
177             delete[] (int*) _pvData;
178             return;
179         }
180         case jni_int:
181         {
182             // passed by value
183             return;
184         }
185         case jni_int_vector:
186         {
187             delete[] (int*) _pvData;
188             return;
189         }
190         default:
191             return;
192     }
193
194 }
195