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