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