Remove xor (Space Sheriff Gavan) graphic object attribute.
[scilab.git] / scilab / modules / graphics / sci_gateway / c / sci_xset.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 "gw_graphics.h"
20 #include "stack-c.h"
21 #include "GetProperty.h"
22 #include "SetProperty.h"
23 #include "DrawObjects.h"
24 #include "InitObjects.h"
25 #include "XsetXgetParameters.h"
26 #include "Format.h"
27 #include "ObjectSelection.h"
28 #include "msgs.h"
29 #include "localization.h"
30 #include "Scierror.h"
31 #include "DrawingBridge.h"
32 #include "HandleManagement.h"
33
34 #include "BuildObjects.h"
35 #include "graphicObjectProperties.h"
36 #include "setGraphicObjectProperty.h"
37 #include "FigureList.h"
38 #include "CurrentFigure.h"
39 #include "CurrentSubwin.h"
40 #include "AxesModel.h"
41 /*--------------------------------------------------------------------------*/
42 int xsetg(char * str,char * str1,int lx0,int lx1) ;
43 /*--------------------------------------------------------------------------*/
44 int sci_xset( char *fname, unsigned long fname_len )
45 {
46     int m1,n1,l1,m2,n2,l2, xm[5],xn[5],x[5], i, v;
47     int lr;
48     double  xx[5];
49     sciPointObj *subwin = NULL;
50     char * subwinUID = NULL;
51     BOOL keyFound = FALSE ;
52
53     if (Rhs <= 0)
54     {
55         sci_demo(fname, fname_len);
56         return 0;
57     }
58
59     CheckRhs(1,6);
60     CheckLhs(0,1);
61
62     GetRhsVar(1,STRING_DATATYPE,&m1,&n1,&l1);
63
64     for ( i = 0 ; i < NUMSETFONC ; i++ )
65     {
66         if ( strcmp(cstk(l1),KeyTab_[i]) == 0 )
67         {
68             keyFound = TRUE ;
69             break ;
70         }
71     }
72
73     if ( !keyFound )
74     {
75         Scierror(999, _("%s: Unrecognized input argument: '%s'.\n"), fname, cstk(l1));
76         return 0;
77     }
78
79     /* Allan CORNET Avril 2004 */
80     /* Bloque la commande xset('window') sans numero de fenetre */
81     if (Rhs == 1 && (strcmp(cstk(l1),"window") == 0) )
82     {
83         Scierror(999, _("%s : '%s' must be set\n"),fname, "window-number");
84         return 0;
85     }
86
87     if (Rhs == 2 && VarType(2) != sci_matrix)
88     {
89         /* second argument is not a scalar it must be a string */
90         GetRhsVar(2,STRING_DATATYPE,&m2,&n2,&l2);
91         xsetg(cstk(l1),cstk(l2),m1,m2);
92         LhsVar(1)=0;
93         PutLhsVar();
94         return 0;
95     }
96
97     if (Rhs == 1 && strcmp(cstk(l1),"default") == 0)
98     {
99         /* first treatment for xsetg : then we continue */
100         xsetg(cstk(l1),"void",m1,4L);
101     }
102
103     for ( i = 2 ; i <= Rhs ; i++ )
104     {
105         GetRhsVar(i,MATRIX_OF_DOUBLE_DATATYPE,&xm[i-2],&xn[i-2],&lr);
106         x[i - 2] = (int)  *stk(lr);
107         xx[i - 2] = *stk(lr);
108     }
109     if (strcmp(cstk(l1),"wdim") == 0 || strcmp(cstk(l1),"wpdim") == 0) {
110         /* Xwindows limits dimensions to 2^16 */
111         if ( (x[0]>65535)||(x[1]>65535)) {
112             x[0]=Min(x[0],65535);
113             x[1]=Min(x[1],65535);
114             i = 106;
115             v=0;
116             C2F(msgs)(&i,&v);
117         }
118     }
119
120     if (strcmp(cstk(l1),"clipping") == 0)
121     {
122         int clipState = 2;
123         if (Rhs != 5)
124         {
125             Scierror(999, _("%s: Wrong number of input argument %d expected.\n"),fname, 5);
126             return -1;
127         }
128         subwinUID = getOrCreateDefaultSubwin();
129         setGraphicObjectProperty(subwinUID, __GO_CLIP_BOX__, xx, jni_double_vector, 4);
130         setGraphicObjectProperty(subwinUID, __GO_CLIP_STATE__, &clipState, jni_int, 1);
131     }
132     else if ( strcmp(cstk(l1),"colormap") == 0)
133     {
134         char *pFigureUID = NULL;
135         getOrCreateDefaultSubwin();
136         pFigureUID = getCurrentFigure();
137         setGraphicObjectProperty(pFigureUID, __GO_COLORMAP__, stk(lr), jni_double_vector, *xm*(*xn));
138     }
139     else if ( strcmp(cstk(l1),"mark size") == 0)
140     {
141         int markSize = (int) xx[0];
142         int markSizeUnit = 1; /* force switch to tabulated mode : old syntax / 0 : point, 1 : tabulated */
143         char *subwinUID = getOrCreateDefaultSubwin();
144
145         setGraphicObjectProperty(subwinUID, __GO_MARK_SIZE_UNIT__, &markSizeUnit, jni_int, 1);
146         setGraphicObjectProperty(subwinUID, __GO_MARK_SIZE__, &markSize, jni_int, 1);
147     }
148     else if ( strcmp(cstk(l1),"mark") == 0)
149     {
150         int markStyle = (int) xx[0];
151         int markSize = (int) xx[1];
152         int markSizeUnit = 1; /* force switch to tabulated mode : old syntax / 0 : point, 1 : tabulated */
153         char *subwinUID = getOrCreateDefaultSubwin();
154         setGraphicObjectProperty(subwinUID, __GO_MARK_SIZE_UNIT__, &markSizeUnit, jni_int, 1); /* force switch to tabulated mode : old syntax */
155         setGraphicObjectProperty(subwinUID, __GO_MARK_STYLE__, &markStyle, jni_int, 1);
156         setGraphicObjectProperty(subwinUID, __GO_MARK_SIZE__, &markSize, jni_int, 1);
157     }
158     else if ( strcmp(cstk(l1),"font size") == 0) {
159         double defaultSubwinFontSize = sciGetFontSize(getAxesModel());
160         double fontSize = xx[0];
161         // set also the default subwin font size in order
162         // to have the right font size for labels if they are created
163         sciSetFontSize(getAxesModel(), fontSize);
164         subwin = sciGetCurrentSubWin();
165
166         // restore previous font size
167         sciSetFontSize(getAxesModel(), defaultSubwinFontSize);
168
169         sciSetFontSize(subwin, fontSize);
170         sciSetFontSize(sciGetParent(subwin), fontSize);
171         forceRedraw(subwin);
172     }  
173     else if( strcmp(cstk(l1),"default") == 0 )
174     {
175         sciPointObj * pfigure = sciGetCurrentFigure();
176
177
178         /*special treatement for xset default and old_style off F.Leray 23.09.04 */
179         /* mimic clf(gcf(),'reset') behaviour here */
180         sciClearFigure(sciGetCurrentFigure());
181
182         ResetFigureToDefaultValues(pfigure);
183     }
184     else if( strcmp(cstk(l1),"clipgrf") == 0 ) {
185         /* special treatement for xset("cligrf") */
186         sciPointObj * psubwin = sciGetCurrentSubWin();
187         sciSetIsClipping(psubwin,0);
188         forceRedraw(psubwin);
189     }
190     else if( strcmp(cstk(l1),"clipoff") == 0 ) {
191         /* special treatement for xset("clipoff") */
192         sciPointObj * psubwin = sciGetCurrentSubWin();
193         sciSetIsClipping(psubwin,-1);
194         forceRedraw(psubwin);
195     }
196     else if( strcmp(cstk(l1),"hidden3d") == 0 ) {
197         /* special treatement for xset("hidden3d") */
198         sciPointObj * psubwin = sciGetCurrentSubWin();
199         pSUBWIN_FEATURE(psubwin)->hiddencolor = x[0];
200         forceRedraw(psubwin);
201     }
202     else if ( strcmp(cstk(l1),"font") == 0) {
203         int defaultSubwinFontStyle = sciGetFontStyle(getAxesModel());
204         double defaultSubwinFontSize = sciGetFontSize(getAxesModel());
205         int fontStyle = x[0];
206         double fontSize = x[1];
207
208         // set also the default subwin font size in order
209         // to have the right font size for labels if they are created
210         sciSetFontStyle(getAxesModel(), fontStyle);
211         sciSetFontSize(getAxesModel(), fontSize);
212         subwin = sciGetCurrentSubWin();
213
214         // restore previous font size
215         sciSetFontStyle(getAxesModel(), defaultSubwinFontStyle);
216         sciSetFontSize(getAxesModel(), defaultSubwinFontSize);
217
218         sciSetFontStyle(subwin, fontStyle);
219         sciSetFontSize(subwin,  fontSize);
220         sciSetFontStyle(sciGetParent(subwin), fontStyle);
221         sciSetFontSize(sciGetParent(subwin), fontSize);
222         forceRedraw(subwin);
223     }
224     else if ( strcmp(cstk(l1),"window") == 0 || strcmp(cstk(l1),"figure") == 0 )
225     {
226         // Find if window already exists, if not create a new one
227         if (getObjectFromHandle(x[0]) == NULL)
228         {
229             int iID = x[0];
230             char *pFigureUID = createNewFigureWithAxes();
231             setGraphicObjectProperty(pFigureUID, __GO_ID__, &iID, jni_int, 1);
232             setCurrentFigure(pFigureUID);
233         }
234     }
235     else
236     {
237         subwin = NULL;
238         if (( strcmp(cstk(l1),"foreground") == 0) || (strcmp(cstk(l1),"color") == 0) ||( strcmp(cstk(l1),"pattern") == 0) ) {
239             sciSetForeground(subwin, x[0]);
240             if (sciGetSons((sciPointObj *) subwin) == (sciSons *)NULL) {/* added SS 20.04.04 */
241                 /* if subwin is empty, set also the ticscolor and fontforeground */
242                 pSUBWIN_FEATURE (subwin)->axes.ticscolor= x[0];
243                 sciSetFontForeground(subwin,x[0]);
244             }
245             forceRedraw(subwin);
246         }
247         else if ( strcmp(cstk(l1),"background") == 0) {
248             sciSetBackground(subwin, x[0]);
249             forceRedraw(subwin);
250         }
251         else if ( strcmp(cstk(l1),"thickness") == 0) {
252             sciSetLineWidth(subwin, x[0]);
253             sciSetLineWidth(sciGetParent(subwin), x[0]);
254             forceRedraw(subwin);
255         }
256         else if ( strcmp(cstk(l1),"line style") == 0) {
257             int lineStyle = (int) x[0];
258             setGraphicObjectProperty(getOrCreateDefaultSubwin(), __GO_LINE_STYLE__, &lineStyle, jni_int, 1);
259         }
260         else if ( strcmp(cstk(l1),"mark") == 0) {
261             sciSetIsMark(subwin,1);                  /* A REVOIR F.Leray 21.01.05 */
262             sciSetIsMark(sciGetParent(subwin),1);
263             sciSetMarkStyle(subwin,x[0]);
264             sciSetMarkStyle(sciGetParent(subwin),x[0]);
265             forceRedraw(subwin);
266         }
267         else if ( strcmp(cstk(l1),"colormap") == 0) {
268             sciSetColormap(sciGetParent(subwin), stk(lr),xm[0], xn[0]);
269         }
270         else if ( strcmp(cstk(l1),"dashes") == 0) {
271             sciSetLineStyle(subwin, x[0]);
272             sciSetLineStyle(sciGetParent(subwin), x[0]);
273             forceRedraw(subwin);
274         }
275         else if ( strcmp(cstk(l1),"auto clear") == 0) {
276             if ( x[0] == 1 )
277             {
278                 sciSetAddPlot(subwin, TRUE);
279                 sciSetAddPlot(sciGetParent(subwin), TRUE);
280             }
281             else
282             {
283                 sciSetAddPlot(subwin, FALSE);
284                 sciSetAddPlot(sciGetParent(subwin), FALSE);
285             }
286             forceRedraw(subwin);
287         }
288         else if ( strcmp(cstk(l1),"auto scale") == 0) {
289             if ( x[0] == 1 )
290             {
291                 sciSetAutoScale(subwin, TRUE);
292                 sciSetAutoScale(sciGetParent(subwin), TRUE);
293             }
294             else
295             {
296                 sciSetAutoScale(subwin, FALSE);
297                 sciSetAutoScale(sciGetParent(subwin), FALSE);
298             }
299             forceRedraw(subwin);
300         }
301         else if ( strcmp(cstk(l1),"wresize") == 0) {
302             if ( x[0] == 1 )
303             {
304                 sciSetResize(subwin, TRUE);
305                 sciSetResize(sciGetParent(subwin), TRUE);
306             }
307             else
308             {
309                 sciSetResize(subwin, FALSE);
310                 sciSetResize(sciGetParent(subwin), FALSE);
311             }
312             forceRedraw(subwin);
313         }
314         else if ( strcmp(cstk(l1),"wpos") == 0) {
315             sciSetScreenPosition(sciGetParent(subwin), x[0], x[1]);
316         }
317         else if ( strcmp(cstk(l1),"wpdim") == 0) {
318             sciSetWindowDim(sciGetParent(subwin), x[0], x[1] ) ;
319         }
320         else if ( strcmp(cstk(l1),"wdim") == 0) {
321             sciSetDimension(sciGetParent(subwin), x[0], x[1] ) ;
322
323         } /*Ajout A.Djalel le 10/11/03 */
324         else if ( strcmp(cstk(l1),"pixmap") == 0) {
325             sciSetPixmapMode(sciGetParent(subwin), x[0]);
326         }
327         else if ( strcmp(cstk(l1),"wshow") == 0) { /* a supprimer ce n'est pas une propriete mais une action */
328             showPixmap(sciGetParentFigure(subwin));
329         }
330         else if (strcmp(cstk(l1),"viewport") == 0) {
331             int viewport[4] = {x[0], x[1], 0, 0};
332             sciSetViewport(sciGetParentFigure(subwin), viewport);
333         }
334         else if (strcmp(cstk(l1),"wwpc") == 0) {
335             // clear pixmap
336             clearPixmap(sciGetParentFigure(subwin));
337         }
338         else if(strcmp(cstk(l1),"line mode") == 0)
339         {
340             if (x[0] == 0)
341             {
342                 sciSetIsLine(subwin, FALSE);
343             }
344             else
345             {
346                 sciSetIsLine(subwin, TRUE);
347             }
348             forceRedraw(subwin);
349         }
350         else
351         {
352             Scierror(999, _("%s: Unrecognized input argument: '%s'.\n"), fname, cstk(l1));
353             return 0;
354         }
355
356         if(strcmp(cstk(l1),"window") != 0 && strcmp(cstk(l1),"wshow") != 0)
357         {
358             // for wshow redraw already done
359             sciRedrawFigure();
360         }
361     }
362
363     LhsVar(1)=0;
364     PutLhsVar();
365     return 0;
366 }
367 /*--------------------------------------------------------------------------*/
368 int xsetg(char * str,char * str1,int lx0,int lx1)
369 {
370     if ( strcmp(str,"fpf") == 0)
371     {
372         strcpy(getFPF(),str1);
373     }
374     else if ( strcmp(str,"auto clear")==0)
375     {
376         sciPointObj * subwin = sciGetFirstTypedSelectedSon(sciGetCurrentFigure(), SCI_SUBWIN);
377         if (strcmp(str1,"on")==0 )
378         {
379             sciSetAddPlot( subwin,FALSE);
380         }
381         else{
382             sciSetAddPlot( subwin,TRUE);
383         }
384         forceRedraw(subwin);
385     }
386     else if ( strcmp(str,"default")==0)
387     {
388         getFPF()[0]='\0';
389     }
390     else
391     {
392         Scierror(999, _("%s: Unrecognized input argument '%s'.\n"),"xset(arg,<string>)",str);
393         return -1;
394     }
395     return 0;
396 }
397 /*--------------------------------------------------------------------------*/