6fa17a1c23de5031e3e6718309d41febd7f02ef5
[scilab.git] / scilab / modules / graphics / sci_gateway / c / sci_xget.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2006 - INRIA - Fabrice Leray
4  * Copyright (C) 2006 - INRIA - Jean-Baptiste Silvy
5  *
6  * This file must be used under the terms of the CeCILL.
7  * This source file is licensed as described in the file COPYING, which
8  * you should have received as part of this distribution.  The terms
9  * are also available at
10  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
11  *
12  */
13
14 /*------------------------------------------------------------------------*/
15 /* file: sci_xset.c                                                       */
16 /* desc : interface for xset routine                                      */
17 /*------------------------------------------------------------------------*/
18
19 #include "api_common.h"
20 #include "api_double.h"
21
22 #include "gw_graphics.h"
23 #include "stack-c.h"
24 #include "XsetXgetParameters.h"
25 #include "GetProperty.h"
26 #include "Format.h"
27 #include "Scierror.h"
28 #include "ObjectSelection.h"
29 #include "localization.h"
30 #include "returnProperty.h"
31 #include "HandleManagement.h"
32 #include "CurrentSubwin.h"
33 #include "getGraphicObjectProperty.h"
34 #include "graphicObjectProperties.h"
35 #include "BuildObjects.h"
36
37 #include "getHandleProperty.h"
38 #include "CurrentFigure.h"
39 /*--------------------------------------------------------------------------*/
40 int xgetg( char * str, char * str1, int * len,int  lx0,int lx1);
41 /*--------------------------------------------------------------------------*/
42 int sci_xget(char *fname,unsigned long fname_len)
43 {
44   int flagx=0,x1[10],x2=0, m1,n1,l1,m2,n2,l2,l3,i ;
45   int one = 1;
46   int two = 2;
47   BOOL keyFound = FALSE ;
48
49   if ( Rhs <= 0 )
50   {
51     sci_demo(fname, fname_len);
52     return 0;
53   }
54
55   CheckRhs(1,2);
56   CheckLhs(0,1);
57
58   GetRhsVar(1,STRING_DATATYPE,&m1,&n1,&l1);
59
60   /* check if key is valid */
61   for (i=0; i < NUMSETFONC ; i++)
62   {
63     if ( strcmp(cstk(l1),KeyTab_[i]) == 0 )
64     {
65       keyFound = TRUE ;
66       break ;
67     }
68   }
69
70   if ( !keyFound )
71   {
72     Scierror(999, _("%s: Unrecognized input argument: '%s'.\n"), fname, cstk(l1));
73     return -1;
74   }
75
76   if (Rhs == 2) {
77     GetRhsVar(2,MATRIX_OF_DOUBLE_DATATYPE,&m2,&n2,&l2);
78     CheckScalar(2,m2,n2);
79     flagx = (int)  *stk(l2); }
80   else
81     flagx = 0;
82
83   if ( strcmp(cstk(l1),"fpf") == 0 || strcmp(cstk(l1),"auto clear") == 0)
84   {
85     int bufl;
86     /*     special case for global variables set */
87     xgetg( cstk(l1),C2F(cha1).buf,&bufl,m1,bsiz);
88     CreateVar(Rhs+1,STRING_DATATYPE,&bufl,&one,&l3);
89     strncpy(cstk(l3),C2F(cha1).buf,bufl);
90     LhsVar(1)=Rhs+1;
91         PutLhsVar();
92     return 0;
93   }
94   else if ( strcmp(cstk(l1),"colormap") == 0)
95   {
96       char *pobjUID = NULL;
97       // Force figure creation if none exists.
98       getOrCreateDefaultSubwin();
99       pobjUID = getCurrentFigure();
100       get_color_map_property(pobjUID);
101       LhsVar(1) = Rhs+1;
102       PutLhsVar();
103       return 0;
104   }
105   else if ( strcmp(cstk(l1),"mark") == 0)
106   {
107     char *pobjUID = getOrCreateDefaultSubwin();
108     int iMarkStyle = 0;
109     int* piMarkStyle = &iMarkStyle;
110     int iMarkSize = 0;
111     int* piMarkSize = &iMarkSize;
112     double pdblResult[2];
113
114     getGraphicObjectProperty(pobjUID, __GO_MARK_STYLE__, jni_int, &piMarkStyle);
115     getGraphicObjectProperty(pobjUID, __GO_MARK_SIZE__, jni_int, &piMarkSize);
116     pdblResult[0] = iMarkStyle;
117     pdblResult[1] = iMarkSize;
118
119     createMatrixOfDouble(pvApiCtx, Lhs + 1, 1, 2, pdblResult);
120     LhsVar(1)=Rhs+1;
121     PutLhsVar();
122     return 0;
123   }
124   else if ( strcmp(cstk(l1),"mark size") == 0)
125   {
126       char *pobjUID = getOrCreateDefaultSubwin();
127       get_mark_size_property(pobjUID);
128
129       LhsVar(1)=Rhs+1;
130       PutLhsVar();
131       return 0;
132   }
133   else if ( strcmp(cstk(l1),"line style") == 0)
134   {
135       get_line_style_property(getOrCreateDefaultSubwin());
136
137       LhsVar(1)=Rhs+1;
138       PutLhsVar();
139       return 0;
140   }
141   else if(strcmp(cstk(l1),"clipping") == 0)
142   {
143       double *clipBox;
144       char* pobjUID = getOrCreateDefaultSubwin();
145
146       getGraphicObjectProperty(pobjUID, __GO_CLIP_BOX__, jni_double_vector, &clipBox);
147
148       createMatrixOfDouble(pvApiCtx, Lhs + 1, 1, 4, clipBox);
149       LhsVar(1)=Rhs+1;
150       PutLhsVar();
151       return 0;
152   }
153   else if(strcmp(cstk(l1),"font")==0)
154   {
155       char *pobjUID = getOrCreateDefaultSubwin();
156       double dblFontSize = 0;
157       double* pdblFontSize = &dblFontSize;
158       int iFontStyle = 0;
159       int* piFontStyle = &iFontStyle;
160       double pdblResult[2];
161
162       getGraphicObjectProperty(pobjUID, __GO_FONT_SIZE__, jni_double, &pdblFontSize);
163       getGraphicObjectProperty(pobjUID, __GO_FONT_STYLE__, jni_int, &piFontStyle);
164
165       pdblResult[0] = dblFontSize;
166       pdblResult[1] = iFontStyle;
167
168       createMatrixOfDouble(pvApiCtx, Lhs + 1, 1, 2, pdblResult);
169       LhsVar(1)=Rhs+1;
170       PutLhsVar();
171       return 0;
172   }
173   else if(strcmp(cstk(l1),"font size")==0)
174   {
175       double dblFontSize = 0;
176       double* pdblFontSize = &dblFontSize;
177       getGraphicObjectProperty(getOrCreateDefaultSubwin(), __GO_FONT_SIZE__, jni_double, &pdblFontSize);
178
179       createScalarDouble(pvApiCtx, Rhs + 1, dblFontSize);
180       LhsVar(1)=Rhs+1;
181       PutLhsVar();
182       return 0;
183   }
184   else
185   {
186     int i2;
187     sciPointObj *psubwin = NULL;
188     x2=0;
189
190     if(strcmp(cstk(l1),"dashes")==0)
191     {
192         int iLineStyle = 0;
193         int* piLineStyle = &iLineStyle;
194
195         getGraphicObjectProperty(getOrCreateDefaultSubwin(), __GO_LINE_STYLE__, jni_int, &piLineStyle);
196         createScalarDouble(pvApiCtx, Rhs + 1, iLineStyle);
197         LhsVar(1)=Rhs+1;
198         PutLhsVar();
199         return 0;
200     }
201     else if(strcmp(cstk(l1),"hidden3d")==0){
202       x1[0] = pSUBWIN_FEATURE(psubwin)->hiddencolor;
203       x2 = 1;
204     }
205     else if(strcmp(cstk(l1),"window")==0 || strcmp(cstk(l1),"figure") == 0)
206     {
207         int iFigureId = 0;
208         int* piFigureId = &iFigureId;
209
210         getOrCreateDefaultSubwin();
211         getGraphicObjectProperty(getCurrentFigure(), __GO_ID__, jni_int, &piFigureId);
212         createScalarDouble(pvApiCtx, Rhs + 1, iFigureId);
213         LhsVar(1)=Rhs+1;
214         PutLhsVar();
215         return 0;
216     }
217     else if(strcmp(cstk(l1),"thickness") == 0)
218     {
219       x1[0] = (int) sciGetLineWidth(sciGetCurrentSubWin());
220       x2 = 1;
221     }
222     else if(strcmp(cstk(l1),"wdim") == 0 || strcmp(cstk(l1),"wpdim") == 0)
223     {
224         int piFigureSize[2];
225         double pdblFigureSize[2];
226
227         getOrCreateDefaultSubwin();
228         getGraphicObjectProperty(getCurrentFigure(), __GO_SIZE__, jni_int_vector, (void **) &piFigureSize);
229         pdblFigureSize[0] = piFigureSize[0];
230         pdblFigureSize[1] = piFigureSize[1];
231
232         createMatrixOfDouble(pvApiCtx, Lhs + 1, 1, 2, pdblFigureSize);
233         LhsVar(1)=Rhs+1;
234         PutLhsVar();
235         return 0;
236     }
237     else if(strcmp(cstk(l1),"wpos") == 0)
238     {
239         int piFigurePosition[2];
240         double pdblFigurePosition[2];
241
242         getOrCreateDefaultSubwin();
243         getGraphicObjectProperty(getCurrentFigure(), __GO_POSITION__, jni_int_vector, (void **) &piFigurePosition);
244         pdblFigurePosition[0] = piFigurePosition[0];
245         pdblFigurePosition[1] = piFigurePosition[1];
246
247         createMatrixOfDouble(pvApiCtx, Lhs + 1, 1, 2, pdblFigurePosition);
248         LhsVar(1)=Rhs+1;
249         PutLhsVar();
250         return 0;
251     }
252     else if(strcmp(cstk(l1),"viewport") == 0)
253     {
254       int* viewport;
255       double pdblViewport[2];
256
257       getOrCreateDefaultSubwin();
258       getGraphicObjectProperty(getCurrentFigure(), __GO_VIEWPORT__, jni_int_vector, &viewport);
259       pdblViewport[0] = viewport[0];
260       pdblViewport[1] = viewport[1];
261
262       createMatrixOfDouble(pvApiCtx, Lhs + 1, 1, 2, pdblViewport);
263       LhsVar(1)=Rhs+1;
264       PutLhsVar();
265       return 0;
266     }
267     else if(strcmp(cstk(l1),"alufunction") == 0)
268     {
269       x1[0] = sciGetXorMode(sciGetCurrentFigure());
270       x2 = 1;
271     }
272     else if(strcmp(cstk(l1),"background") == 0)
273     {
274       x1[0] = sciGetBackground(sciGetCurrentSubWin());
275       x2 = 1;
276     }
277     else if(   strcmp(cstk(l1),"color") == 0
278             || strcmp(cstk(l1),"foreground") == 0
279             || strcmp(cstk(l1),"pattern") == 0)
280     {
281       x1[0] = sciGetForeground(sciGetCurrentSubWin());
282       x2 = 1;
283     }
284     else if(strcmp(cstk(l1),"lastpattern") == 0)
285     {
286       x1[0] = sciGetNumColors(sciGetCurrentFigure());
287       x2 = 1;
288     }
289     else if(strcmp(cstk(l1),"line mode") == 0)
290     {
291       if (sciGetIsLine(sciGetCurrentSubWin()))
292       {
293         x1[0] = 1;
294       }
295       else
296       {
297         x1[0] = 0;
298       }
299       x2 = 1;
300     }
301     else if(strcmp(cstk(l1),"pixmap") == 0)
302     {
303       if (sciGetPixmapMode(sciGetCurrentFigure()))
304       {
305         x1[0] = 1;
306       }
307       else
308       {
309         x1[0] = 0;
310       }
311       x2 = 1;
312     }
313     else if(strcmp(cstk(l1),"white") == 0)
314     {
315       x1[0] = sciGetNumColors(sciGetCurrentFigure()) + 2;
316       x2 = 1;
317     }
318     else if(strcmp(cstk(l1),"wresize") == 0)
319     {
320       x1[0] = sciGetResize(sciGetCurrentFigure());
321       x2 = 1;
322     }
323     else if( strcmp(cstk(l1),"clipgrf") == 0 )
324     {
325       /* special treatement for xset("cligrf") */
326       if (sciGetIsClipping(sciGetCurrentSubWin()) == 0)
327       {
328         x1[0] = 1;
329       }
330       else
331       {
332         x1[0] = 0;
333       }
334       x2 = 1;
335     }
336     else if( strcmp(cstk(l1),"clipoff") == 0 )
337     {
338       /* special treatement for xset("cligrf") */
339       if (sciGetIsClipping(sciGetCurrentSubWin()) == -1)
340       {
341         x1[0] = 1;
342       }
343       else
344       {
345         x1[0] = 0;
346       }
347       x2 = 1;
348     }
349     else
350     {
351       Scierror(999, _("%s: Unrecognized input argument: '%s'.\n"), fname, cstk(l1));
352                         return -1;
353     }
354     if (x2 > 0) {
355       CreateVar(Rhs+1,MATRIX_OF_DOUBLE_DATATYPE,&one,&x2,&l3);
356       for (i2 = 0 ; i2 < x2 ; ++i2) *stk(l3 + i2 ) = (double) x1[i2];
357     }
358     else {
359       x2=0;
360       CreateVar(Rhs+1,MATRIX_OF_DOUBLE_DATATYPE,&x2,&x2,&l3);
361     }
362     LhsVar(1)=Rhs+1;
363   }
364         PutLhsVar();
365   return 0;
366 }
367 /*--------------------------------------------------------------------------*/
368 int xgetg( char * str, char * str1, int * len,int  lx0,int lx1)
369 {
370   if ( strcmp(str,"fpf") == 0)
371   {
372     strncpy(str1,getFPF(),32);
373     *len= (int) strlen(str1);
374   }
375   else if ( strcmp(str,"auto clear")==0)
376   {
377     int autoclear;
378     sciPointObj * subwin = sciGetFirstTypedSelectedSon( sciGetCurrentFigure(), SCI_SUBWIN ) ;
379     autoclear = !(sciGetAddPlot(subwin));
380     if (autoclear == 1)
381     {
382       strncpy(str1,"on",2);
383       *len=2;
384     }
385     else
386     {
387       strncpy(str1,"off",3);
388       *len=3;
389     }
390   }
391   return 0;
392 }
393 /*--------------------------------------------------------------------------*/