fix storing of userdata address on 64 bits version
[scilab.git] / scilab / modules / graphic_objects / src / cpp / createGraphicObject.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 "createGraphicObject.h"
16 #include "getScilabJavaVM.h"
17 #include "getGraphicObjectProperty.h"
18 #include "setGraphicObjectProperty.h"
19 #include "FigureModel.h"
20 #include "AxesModel.h"
21 #include "CurrentSubwin.h"
22 #include "api_scilab.h"
23 }
24
25 #include "CallGraphicController.hxx"
26 #include "CallXmlLoader.hxx"
27 #include "Builder.hxx"
28 #include "DataController.hxx"
29
30 using namespace org_scilab_modules_graphic_objects_builder;
31 using namespace org_scilab_modules_graphic_objects;
32
33 int createGraphicObject(int _iType)
34 {
35     return CallGraphicController::askGraphicObject(getScilabJavaVM(), _iType);
36 }
37
38 int cloneGraphicObject(int _sId)
39 {
40     return CallGraphicController::cloneGraphicObject(getScilabJavaVM(), _sId);
41 }
42
43 int createDataObject(int _sId, int _iType)
44 {
45     return DataController::createDataObject(_sId, _iType);
46 }
47
48 void buildFigureMenuBar(int _sFigureId)
49 {
50     CallGraphicController::buildFigureMenuBar(getScilabJavaVM(), _sFigureId);
51 }
52
53 int createRect(int iParentsubwinUID, double x, double y, double height, double width, int foreground, int background, int isfilled, int isline)
54 {
55     return Builder::createRect(getScilabJavaVM(), iParentsubwinUID, x, y, height, width, foreground, background, isfilled, isline);
56 }
57
58 int cloneGraphicContext(int sourceIdentifier, int destIdentifier)
59 {
60     return Builder::cloneGraphicContext(getScilabJavaVM(), sourceIdentifier, destIdentifier);
61 }
62
63 int cloneFontContext(int sourceIdentifier, int destIdentifier)
64 {
65     return Builder::cloneFontContext(getScilabJavaVM(), sourceIdentifier, destIdentifier);
66 }
67
68 int createHiddenLabel(int parent)
69 {
70     return Builder::createHiddenLabel(getScilabJavaVM(), parent);
71 }
72
73 BOOL isAxesRedrawing(int subWin)
74 {
75     return booltoBOOL(Builder::isAxesRedrawing(getScilabJavaVM(), subWin));
76 }
77
78 int createLabel(int parent, int type)
79 {
80     return Builder::createLabel(getScilabJavaVM(), parent, type);
81 }
82
83 int createNewFigureWithAxes()
84 {
85     int iUserDataSize = 0;
86     int* piUserDataSize = &iUserDataSize;
87     int id = 0;
88     int on = 1;
89     int off = 0;
90
91     id = Builder::createNewFigureWithAxes(getScilabJavaVM());
92
93     //clone user_data is needed
94     getGraphicObjectProperty(getFigureModel(), __GO_USER_DATA_SIZE__, jni_int, (void**)&piUserDataSize);
95     if (iUserDataSize != 0)
96     {
97         int* pUserData = NULL;
98
99         getGraphicObjectProperty(getFigureModel(), __GO_USER_DATA__, jni_int_vector, (void**)&pUserData);
100
101         if(sizeof(void*) == 4) //32 bits
102         {
103             increaseValRef(NULL, (int*)*(int*)pUserData);
104         }
105         else //64 bits
106         {
107             increaseValRef(NULL, (int*)*(long long*)pUserData);
108         }
109
110         setGraphicObjectProperty(id, __GO_USER_DATA__, pUserData, jni_int_vector, iUserDataSize);
111     }
112
113     //clone gda user_data is needed
114     getGraphicObjectProperty(getAxesModel(), __GO_USER_DATA_SIZE__, jni_int, (void**)&piUserDataSize);
115     if (iUserDataSize != 0)
116     {
117         int* pUserData = NULL;
118         getGraphicObjectProperty(getAxesModel(), __GO_USER_DATA__, jni_int_vector, (void**)&pUserData);
119         setGraphicObjectProperty(getCurrentSubWin(), __GO_USER_DATA__, pUserData, jni_int_vector, iUserDataSize);
120     }
121
122     setGraphicObjectProperty(id, __GO_MENUBAR_VISIBLE__, (void*)&off, jni_bool, 1);
123     setGraphicObjectProperty(id, __GO_TOOLBAR_VISIBLE__, (void*)&off, jni_bool, 1);
124     setGraphicObjectProperty(id, __GO_INFOBAR_VISIBLE__, (void*)&off, jni_bool, 1);
125
126     setGraphicObjectProperty(id, __GO_MENUBAR_VISIBLE__, (void*)&on, jni_bool, 1);
127     setGraphicObjectProperty(id, __GO_TOOLBAR_VISIBLE__, (void*)&on, jni_bool, 1);
128     setGraphicObjectProperty(id, __GO_INFOBAR_VISIBLE__, (void*)&on, jni_bool, 1);
129
130     return id;
131 }
132
133 int createFigure(int iDockable, int iMenubarType, int iToolbarType, int iDefaultAxes, int iVisible)
134 {
135     int id = 0;
136     int iUserDataSize = 0;
137     int* piUserDataSize = &iUserDataSize;
138
139     id = Builder::createFigure(getScilabJavaVM(), iDockable != 0, iMenubarType, iToolbarType, iDefaultAxes != 0, iVisible != 0);
140
141     //clone gdf user_data is needed
142     getGraphicObjectProperty(getFigureModel(), __GO_USER_DATA_SIZE__, jni_int, (void**)&piUserDataSize);
143     if (iUserDataSize != 0)
144     {
145         int* pUserData = NULL;
146         getGraphicObjectProperty(getFigureModel(), __GO_USER_DATA__, jni_int_vector, (void**)&pUserData);
147         setGraphicObjectProperty(id, __GO_USER_DATA__, pUserData, jni_int_vector, iUserDataSize);
148     }
149
150     //clone gda user_data is needed
151     getGraphicObjectProperty(getAxesModel(), __GO_USER_DATA_SIZE__, jni_int, (void**)&piUserDataSize);
152     if (iUserDataSize != 0)
153     {
154         int* pUserData = NULL;
155         getGraphicObjectProperty(getAxesModel(), __GO_USER_DATA__, jni_int_vector, (void**)&pUserData);
156         setGraphicObjectProperty(getCurrentSubWin(), __GO_USER_DATA__, pUserData, jni_int_vector, iUserDataSize);
157     }
158
159     return id;
160 }
161
162 void cloneMenus(int model, int newParent)
163 {
164     Builder::cloneMenus(getScilabJavaVM(), model, newParent);
165 }
166
167 int cloneAxesModel(int parent)
168 {
169     int id = Builder::cloneAxesModel(getScilabJavaVM(), parent);
170     int iUserDataSize = 0;
171     int* piUserDataSize = &iUserDataSize;
172
173     //clone user_data is needed
174     getGraphicObjectProperty(getAxesModel(), __GO_USER_DATA_SIZE__, jni_int, (void**)&piUserDataSize);
175     if (iUserDataSize != 0)
176     {
177         int* pUserData = NULL;
178         getGraphicObjectProperty(getAxesModel(), __GO_USER_DATA__, jni_int_vector, (void**)&pUserData);
179         setGraphicObjectProperty(id, __GO_USER_DATA__, pUserData, jni_int_vector, iUserDataSize);
180     }
181
182     return id;
183 }
184
185 int createSubWin(int parent)
186 {
187     int id = 0;
188     int iUserDataSize = 0;
189     int* piUserDataSize = &iUserDataSize;
190
191     id = Builder::createSubWin(getScilabJavaVM(), parent);
192
193     //clone user_data is needed
194     getGraphicObjectProperty(getAxesModel(), __GO_USER_DATA_SIZE__, jni_int, (void**)&piUserDataSize);
195     if (iUserDataSize != 0)
196     {
197         int* pUserData = NULL;
198         getGraphicObjectProperty(getAxesModel(), __GO_USER_DATA__, jni_int_vector, (void**)&pUserData);
199         setGraphicObjectProperty(id, __GO_USER_DATA__, pUserData, jni_int_vector, iUserDataSize);
200     }
201
202     return id;
203 }
204
205 int createText(int iParentsubwinUID, char** text, int nbRow, int nbCol, double x, double y, BOOL autoSize, double* userSize, int  centerPos, int *foreground, int *background, BOOL isboxed, BOOL isline, BOOL isfilled, int align)
206 {
207     return Builder::createText(getScilabJavaVM(), iParentsubwinUID, text, nbRow * nbCol, nbRow, nbCol, x, y, autoSize == TRUE,
208                                userSize, userSize == NULL ? 0 : 2,
209                                centerPos,
210                                foreground != NULL ? *foreground : 0, foreground != NULL,
211                                background != NULL ? *background : 0, background != NULL,
212                                isboxed == TRUE, isline == TRUE, isfilled == TRUE, align);
213 }
214
215 int createArc(int parent, double x, double y, double h, double w, double start, double end, int* foreground, int* background, BOOL filled, BOOL line)
216 {
217     return Builder::createArc(getScilabJavaVM(), parent, x, y, h, w, start, end,
218                               foreground != NULL ? *foreground : 0, foreground != NULL,
219                               background != NULL ? *background : 0, background != NULL,
220                               filled == TRUE, line == TRUE);
221 }
222
223 int createAxis(int parent, int dir, int tics, double* vx, int nx, double* vy, int ny, int subint, char* format, int fontSize, int textColor, int ticsColor, BOOL seg)
224 {
225     return Builder::createAxis(getScilabJavaVM(), parent, dir, tics, vx, nx, vy, ny, subint, format, fontSize, textColor, ticsColor, seg == TRUE);
226 }
227
228 int createCompound(int parent, int* children, int childrenCount)
229 {
230     return Builder::createCompound(getScilabJavaVM(), parent, children, childrenCount);
231 }
232
233 int createCompoundSeq(int parent, int childrenCount)
234 {
235     return Builder::createCompoundSeq(getScilabJavaVM(), parent, childrenCount);
236 }
237
238 int createFec(int parent, double* zminmax, int zminmaxsize, int* colminmax, int colminmaxSize, int* colout, int coloutSize, BOOL with_mesh)
239 {
240     return Builder::createFec(getScilabJavaVM(), parent, zminmax, zminmaxsize, colminmax, colminmaxSize, colout, coloutSize, with_mesh == TRUE);
241 }
242
243 int createGrayplot(int parent, int type, double* pvecx, int pvecxSize, int n1, int n2)
244 {
245     return Builder::createGrayplot(getScilabJavaVM(), parent, type, pvecx, pvecxSize, n1, n2);
246 }
247
248 int createPolyline(int parent, BOOL closed, int plot, int* foreground, int* background, int backgroundSize,
249                    int* mark_style, int* mark_foreground, int* mark_background, BOOL isline, BOOL isfilled, BOOL ismark, BOOL isinterp)
250 {
251     bool isForeground       = foreground != NULL;
252     bool isMarkStyle        = mark_style != NULL;
253     bool isMarkForeground   = mark_foreground != NULL;
254     bool isMarkBackground   = mark_background != NULL;
255
256     return Builder::createPolyline(getScilabJavaVM(), parent, closed == TRUE, plot,
257                                    isForeground ? *foreground : 0, isForeground,
258                                    background, backgroundSize,
259                                    isMarkStyle ? *mark_style : 0, isMarkStyle,
260                                    isMarkForeground ? *mark_foreground : 0, isMarkForeground,
261                                    isMarkBackground ? *mark_background : 0, isMarkBackground,
262                                    isline == TRUE, isfilled == TRUE, ismark == TRUE, isinterp == TRUE);
263 }
264
265 int createLegend(int parent, char** text, int iTextSize, int* handles, int iHandlesSize)
266 {
267     return Builder::createLegend(getScilabJavaVM(), parent, text, iTextSize, handles, iHandlesSize);
268 }
269
270 int createSegs(int parent, double* vx, int vxSize, double* vy, int vySize, double* vz, int vzSize, int* style, int styleSize, double arsize)
271 {
272     return Builder::createSegs(getScilabJavaVM(), parent, vx, vxSize, vy, vySize, vz, vzSize, vzSize != 0, style, styleSize, arsize);
273 }
274
275 int createChamp(int parent, double* vx, int vxSize, double* vy, int vySize, double* vfx, int vfxSize, double* vfy, int vfySize, double arsize, BOOL typeofchamp)
276 {
277     return Builder::createChamp(getScilabJavaVM(), parent, vx, vxSize, vy, vySize, vfx, vfxSize, vfy, vfySize, arsize, typeofchamp == TRUE);
278 }
279
280 int createSurface(int parent, int typeof3d, int colorFlag, int colorMode)
281 {
282     return Builder::createSurface(getScilabJavaVM(), parent, typeof3d, colorFlag, colorMode);
283 }
284
285 void initSubWinTo3d(int subwin, char* legend, int* flag, double alpha, double theta,
286                     double* ebox, double* x, int xSize, double* y, int ySize, double* z, int zSize)
287 {
288     Builder::initSubWinTo3d(getScilabJavaVM(), subwin, legend, legend != NULL, flag, 3, alpha, theta,
289                             ebox, 6, x, xSize, y, ySize, z, zSize);
290 }
291
292 int createLight(int parent, int type, BOOL visible, double* pos, double* dir, double* ambient, double* diffuse, double* specular)
293 {
294     return Builder::createLight(getScilabJavaVM(), parent, type, visible == TRUE,
295                                 pos, pos == NULL ? 0 : 3,
296                                 dir, dir == NULL ? 0 : 3,
297                                 ambient, ambient == NULL ? 0 : 3,
298                                 diffuse, diffuse == NULL ? 0 : 3,
299                                 specular, specular == NULL ? 0 : 3);
300 }
301
302 int xmlload(char* xmlfile)
303 {
304     return CallXmlLoader::Load(getScilabJavaVM(), xmlfile);
305 }
306
307 int xmldomload(char* xmlfile)
308 {
309     return CallXmlLoader::DomLoad(getScilabJavaVM(), xmlfile);
310 }
311
312 char* xmlsave(int id, char* xmlfile, BOOL isReverse)
313 {
314     return CallXmlLoader::Save(getScilabJavaVM(), id, xmlfile, isReverse == 1);
315 }