98fd49d11670d5651dd3d349e52aa34518bf8a07
[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  * 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
36 int createGraphicObject(int _iType)
37 {
38     return CallGraphicController::askGraphicObject(getScilabJavaVM(), _iType);
39 }
40
41 int cloneGraphicObject(int _sId)
42 {
43     return CallGraphicController::cloneGraphicObject(getScilabJavaVM(), _sId);
44 }
45
46 int createDataObject(int _sId, int _iType)
47 {
48     return DataController::createDataObject(_sId, _iType);
49 }
50
51 void buildFigureMenuBar(int _sFigureId)
52 {
53     CallGraphicController::buildFigureMenuBar(getScilabJavaVM(), _sFigureId);
54 }
55
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
61 int cloneGraphicContext(int sourceIdentifier, int destIdentifier)
62 {
63     return Builder::cloneGraphicContext(getScilabJavaVM(), sourceIdentifier, destIdentifier);
64 }
65
66 int cloneFontContext(int sourceIdentifier, int destIdentifier)
67 {
68     return Builder::cloneFontContext(getScilabJavaVM(), sourceIdentifier, destIdentifier);
69 }
70
71 int createHiddenLabel(int parent)
72 {
73     return Builder::createHiddenLabel(getScilabJavaVM(), parent);
74 }
75
76 BOOL isAxesRedrawing(int subWin)
77 {
78     return booltoBOOL(Builder::isAxesRedrawing(getScilabJavaVM(), subWin));
79 }
80
81 int createLabel(int parent, int type)
82 {
83     return Builder::createLabel(getScilabJavaVM(), parent, type);
84 }
85
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
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         setGraphicObjectProperty(id, __GO_USER_DATA__, pUserData, jni_int_vector, iUserDataSize);
162     }
163
164     //clone gda user_data is needed
165     getGraphicObjectProperty(getAxesModel(), __GO_USER_DATA_SIZE__, jni_int, (void**)&piUserDataSize);
166     if (iUserDataSize != 0)
167     {
168         int* pUserData = NULL;
169         getGraphicObjectProperty(getAxesModel(), __GO_USER_DATA__, jni_int_vector, (void**)&pUserData);
170         setGraphicObjectProperty(getCurrentSubWin(), __GO_USER_DATA__, pUserData, jni_int_vector, iUserDataSize);
171     }
172
173     return id;
174 }
175
176 void cloneMenus(int model, int newParent)
177 {
178     Builder::cloneMenus(getScilabJavaVM(), model, newParent);
179 }
180
181 int cloneAxesModel(int parent)
182 {
183     int id = Builder::cloneAxesModel(getScilabJavaVM(), parent);
184     int iUserDataSize = 0;
185     int* piUserDataSize = &iUserDataSize;
186
187     //clone user_data is needed
188     getGraphicObjectProperty(getAxesModel(), __GO_USER_DATA_SIZE__, jni_int, (void**)&piUserDataSize);
189     if (iUserDataSize != 0)
190     {
191         int* pUserData = NULL;
192         getGraphicObjectProperty(getAxesModel(), __GO_USER_DATA__, jni_int_vector, (void**)&pUserData);
193         setGraphicObjectProperty(id, __GO_USER_DATA__, pUserData, jni_int_vector, iUserDataSize);
194     }
195
196     return id;
197 }
198
199 int createSubWin(int parent)
200 {
201     int id = 0;
202     int iUserDataSize = 0;
203     int* piUserDataSize = &iUserDataSize;
204
205     id = Builder::createSubWin(getScilabJavaVM(), parent);
206
207     //clone user_data is needed
208     getGraphicObjectProperty(getAxesModel(), __GO_USER_DATA_SIZE__, jni_int, (void**)&piUserDataSize);
209     if (iUserDataSize != 0)
210     {
211         int* pUserData = NULL;
212         getGraphicObjectProperty(getAxesModel(), __GO_USER_DATA__, jni_int_vector, (void**)&pUserData);
213         setGraphicObjectProperty(id, __GO_USER_DATA__, pUserData, jni_int_vector, iUserDataSize);
214     }
215
216     return id;
217 }
218
219 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)
220 {
221     return Builder::createText(getScilabJavaVM(), iParentsubwinUID, text, nbRow * nbCol, nbRow, nbCol, x, y, autoSize == TRUE,
222                                userSize, userSize == NULL ? 0 : 2,
223                                centerPos,
224                                foreground != NULL ? *foreground : 0, foreground != NULL,
225                                background != NULL ? *background : 0, background != NULL,
226                                isboxed == TRUE, isline == TRUE, isfilled == TRUE, align);
227 }
228
229 int createArc(int parent, double x, double y, double h, double w, double start, double end, int* foreground, int* background, BOOL filled, BOOL line)
230 {
231     return Builder::createArc(getScilabJavaVM(), parent, x, y, h, w, start, end,
232                               foreground != NULL ? *foreground : 0, foreground != NULL,
233                               background != NULL ? *background : 0, background != NULL,
234                               filled == TRUE, line == TRUE);
235 }
236
237 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)
238 {
239     return Builder::createAxis(getScilabJavaVM(), parent, dir, tics, vx, nx, vy, ny, subint, format, fontSize, textColor, ticsColor, seg == TRUE);
240 }
241
242 int createCompound(int parent, int* children, int childrenCount)
243 {
244     return Builder::createCompound(getScilabJavaVM(), parent, children, childrenCount);
245 }
246
247 int createCompoundSeq(int parent, int childrenCount)
248 {
249     return Builder::createCompoundSeq(getScilabJavaVM(), parent, childrenCount);
250 }
251
252 int createFec(int parent, double* zminmax, int zminmaxsize, int* colminmax, int colminmaxSize, int* colout, int coloutSize, BOOL with_mesh)
253 {
254     return Builder::createFec(getScilabJavaVM(), parent, zminmax, zminmaxsize, colminmax, colminmaxSize, colout, coloutSize, with_mesh == TRUE);
255 }
256
257 int createGrayplot(int parent, int type, double* pvecx, int pvecxSize, int n1, int n2)
258 {
259     return Builder::createGrayplot(getScilabJavaVM(), parent, type, pvecx, pvecxSize, n1, n2);
260 }
261
262 int createPolyline(int parent, BOOL closed, int plot, int* foreground, int* background, int backgroundSize,
263                    int* mark_style, int* mark_foreground, int* mark_background, BOOL isline, BOOL isfilled, BOOL ismark, BOOL isinterp)
264 {
265     bool isForeground       = foreground != NULL;
266     bool isMarkStyle        = mark_style != NULL;
267     bool isMarkForeground   = mark_foreground != NULL;
268     bool isMarkBackground   = mark_background != NULL;
269
270     return Builder::createPolyline(getScilabJavaVM(), parent, closed == TRUE, plot,
271                                    isForeground ? *foreground : 0, isForeground,
272                                    background, backgroundSize,
273                                    isMarkStyle ? *mark_style : 0, isMarkStyle,
274                                    isMarkForeground ? *mark_foreground : 0, isMarkForeground,
275                                    isMarkBackground ? *mark_background : 0, isMarkBackground,
276                                    isline == TRUE, isfilled == TRUE, ismark == TRUE, isinterp == TRUE);
277 }
278
279 int createLegend(int parent, char** text, int iTextSize, int* handles, int iHandlesSize)
280 {
281     return Builder::createLegend(getScilabJavaVM(), parent, text, iTextSize, handles, iHandlesSize);
282 }
283
284 int createSegs(int parent, double* vx, int vxSize, double* vy, int vySize, double* vz, int vzSize, int* style, int styleSize, double arsize)
285 {
286     return Builder::createSegs(getScilabJavaVM(), parent, vx, vxSize, vy, vySize, vz, vzSize, vzSize != 0, style, styleSize, arsize);
287 }
288
289 int createChamp(int parent, double* vx, int vxSize, double* vy, int vySize, double* vfx, int vfxSize, double* vfy, int vfySize, double arsize, BOOL typeofchamp)
290 {
291     return Builder::createChamp(getScilabJavaVM(), parent, vx, vxSize, vy, vySize, vfx, vfxSize, vfy, vfySize, arsize, typeofchamp == TRUE);
292 }
293
294 int createSurface(int parent, int typeof3d, int colorFlag, int colorMode)
295 {
296     return Builder::createSurface(getScilabJavaVM(), parent, typeof3d, colorFlag, colorMode);
297 }
298
299 void initSubWinTo3d(int subwin, char* legend, int* flag, double alpha, double theta,
300                     double* ebox, double* x, int xSize, double* y, int ySize, double* z, int zSize)
301 {
302     Builder::initSubWinTo3d(getScilabJavaVM(), subwin, legend, legend != NULL, flag, 3, alpha, theta,
303                             ebox, 6, x, xSize, y, ySize, z, zSize);
304 }
305
306 int createLight(int parent, int type, BOOL visible, double* pos, double* dir, double* ambient, double* diffuse, double* specular)
307 {
308     return Builder::createLight(getScilabJavaVM(), parent, type, visible == TRUE,
309                                 pos, pos == NULL ? 0 : 3,
310                                 dir, dir == NULL ? 0 : 3,
311                                 ambient, ambient == NULL ? 0 : 3,
312                                 diffuse, diffuse == NULL ? 0 : 3,
313                                 specular, specular == NULL ? 0 : 3);
314 }
315
316 int xmlload(char* xmlfile)
317 {
318     return CallXmlLoader::Load(getScilabJavaVM(), xmlfile);
319 }
320
321 int xmldomload(char* xmlfile)
322 {
323     return CallXmlLoader::DomLoad(getScilabJavaVM(), xmlfile);
324 }
325
326 char* xmlsave(int id, char* xmlfile, BOOL isReverse)
327 {
328     return CallXmlLoader::Save(getScilabJavaVM(), id, xmlfile, isReverse == 1);
329 }