Interface margins and axes bounds properties.
[scilab.git] / scilab / modules / graphics / src / c / SetProperty.c
1 /*------------------------------------------------------------------------
2  *    Graphic library 
3  *    Copyright INRIA
4  *    newGraph Library header
5  *    Matthieu PHILIPPE,   INRIA 2001-2002
6  *    Djalel ABDEMOUCHE,   INRIA 2002-2004
7  *    Fabrice Leray,       INRIA 2004-2006
8  *    Jean-Baptiste SILVY, INRIA 2005-xxxx
9  *    Comment:
10  *    -This file contains all functions used to SET the properties of graphics
11  *    objects.
12  *    - there are two kinds of functions : the sciInit*** which only set an object
13  *      property and sciSet*** which do the same work but check before if it is
14  *      necessary to do so.
15  *    - The returning status of each functions is as follow :
16  *      0 for correct execution, 1 if no change was made
17  *      and -1 if an error occured.
18  --------------------------------------------------------------------------*/
19
20
21 #include <stdio.h> 
22 #include <string.h>
23 #include <math.h>
24 #include <stdlib.h>
25 #include <stdarg.h>
26 #include <time.h>
27
28 #include "SetProperty.h"
29 #include "GetProperty.h"
30 #include "InitObjects.h"
31 #include "bcg.h"
32 #include "DrawObjects.h"
33 #include "BuildObjects.h"
34 #include "Xcall1.h"
35 #include "math_graphics.h" /* GET_NB_DIGITS */
36 #include "sciprint.h"
37 #include "../../gui/includes/GraphicWindow.h"
38 #include "CurrentObjectsManagement.h"
39 #include "ObjectSelection.h"
40 #include "BasicAlgos.h"
41
42 #include "SetJavaProperty.h"
43
44 #include "MALLOC.h"
45 #include "DrawingBridge.h"
46
47 /*------------------------------------------------------------------------------------*/
48 /* setSubWinAngles                                                                    */
49 /* Modify the viewing angles of a subwindow                                           */
50 /* for safer modifications prefer use Obj_RedrawNewAngle                              */
51 /*------------------------------------------------------------------------------------*/
52 int setSubWinAngles( sciPointObj *psubwin, double theta, double alpha )
53 {
54   /**dj20003***/
55   sciSubWindow * ppSubWin = pSUBWIN_FEATURE (psubwin) ;
56
57   ppSubWin->alpha = alpha ;
58   ppSubWin->theta = theta ;
59
60   if ((alpha == 0.0) && (theta == 270.0))
61   {
62     ppSubWin->is3d = FALSE ;
63     ppSubWin->project[2]= 0; /* no z to display */
64     return 0;
65   }
66  
67   ppSubWin->is3d  = TRUE  ;
68   if ((alpha == 0.0 ) || (alpha == 180.0 ) || (alpha == -180.0 ))  /* DJ.A 30/12 */
69   {
70     ppSubWin->project[2]= 0; /* no z to display */
71   }
72   else 
73   {
74     ppSubWin->project[2]= 1; /* z must be displayed */
75     if (    ((alpha == 90.0 ) || (alpha == 270.0 ) || (alpha == -90.0 ) || (alpha == -270.0 ))
76          && ((theta == 90.0 ) || (theta == -90.0 ) || (theta == 270.0 ) || (theta == -270.0 )))
77     {
78       ppSubWin->project[1]= 0; /* no y to display */
79     }
80     else
81     {
82       ppSubWin->project[1]= 1;
83       if (   ( (alpha == 90.0 ) || (alpha == 270.0 ) || (alpha == -90.0  ) || (alpha == -270.0 ))  
84           && ( (theta == 0.0  ) || (theta == 180.0 ) || (alpha == -180.0 ) ))
85       {
86         ppSubWin->project[0]= 0; /* BUG evreywhere when theta == 0 */
87       }
88       else
89       {
90         ppSubWin->project[0]= 1;
91       }
92     }
93   }
94   return 0 ;
95 }
96
97 /*------------------------------------------------------------------------------------*/
98 /* Obj_RedrawNewAngle                                                                 */
99 /* Modify the viewing angles of a subwindow and the one of its brothers id necessary  */
100 /*------------------------------------------------------------------------------------*/
101
102 void Obj_RedrawNewAngle( sciPointObj * pSubWin, double theta, double alpha )
103 {
104   /* check if all the axis must be turned */
105   sciPointObj * pParentFigure = sciGetParentFigure( pSubWin ) ;
106   if ( pFIGURE_FEATURE(pParentFigure)->rotstyle == 1 )
107   {
108     /* every axes has the same angles */
109     sciSons * subWins = sciGetSons( pParentFigure ) ;
110     
111     /* modify each axis */
112     while ( subWins != NULL )
113     {
114       sciPointObj * curSubWin = subWins->pointobj ;
115       if ( curSubWin->entitytype == SCI_SUBWIN )
116       {
117         setSubWinAngles( curSubWin, theta, alpha ) ;
118       }
119       subWins = subWins->pnext ;
120     }
121   }
122   else
123   {
124     /* modify angles only for this axes */
125     setSubWinAngles( pSubWin, theta, alpha ) ;
126   }
127 }
128
129
130
131
132
133 /**sciSetEntityType
134  * Sets the type of this Scilab graphic object (pobj)
135  */
136 int
137 sciSetEntityType (sciPointObj * pobj, sciEntityType value)
138 {
139   if (pobj != (sciPointObj *) NULL)
140   {
141     pobj->entitytype = value ;
142     return 0 ;
143   }
144   else
145   {
146     return -1 ;
147   }
148 }
149
150
151
152 /**sciSetColormap
153  * This function sets a colormap to the figure. It's the same for all sons. 
154  * Setting the colormap a must be a m x 3 double RGB matrix:  
155  * a[i] = RED, a[i+m] = GREEN, a[i+2*m] = BLUE 
156  */
157 int
158 sciSetColormap ( sciPointObj * pobj, double *rgbmat, integer m, integer n )
159 {
160   /*int k,old_m,m1;
161   int curWinIndex = sciGetNum( sciGetCurrentFigure() ) ;
162   double * cmap = NULL ;
163   int notSucceed = 0 ;
164   sciFigure * pFigure = NULL ;*/
165   int oldNbColors = sciGetNumColors(pobj) ;
166
167   if ( n != 3 )
168   {
169     Scierror(999, "colormap : number of columns must be 3.\n");
170     return -1 ;
171   }
172   
173   if ( SCI_FIGURE != sciGetEntityType(pobj) )
174   {
175     Scierror(999, "sciSetColormap Error: Object must be a SCI_FIGURE.\n");
176     return -1 ;
177   }
178   
179
180   pFIGURE_FEATURE(pobj)->numcolors = m ;
181
182   if ( pobj == getFigureModel() )
183   {
184     // colormap is stored in the object
185     FREE(pFIGURE_FEATURE(pobj)->pModelData->colorMap) ;
186     pFIGURE_FEATURE(pobj)->pModelData->colorMap = createDoubleArrayCopy(rgbmat, m * n ) ;
187     pFIGURE_FEATURE(pobj)->pModelData->numColors = m * n ;
188   }
189   else
190   {
191     sciSetJavaColormap( pobj, rgbmat, m * n ) ;
192     sciRecursiveUpdateBaW( pobj, oldNbColors, m ) ; /* missing line F.Leray */
193   }
194
195   return 0;
196 }
197
198
199 void sciRecursiveUpdateBaW(sciPointObj *pobj, int old_m, int m)
200 {
201   sciSons *psonstmp;
202   
203   sciSetNumColors (pobj,old_m);
204   
205
206   if((sciGetEntityType(pobj) != SCI_TEXT)        &&
207      (sciGetEntityType(pobj) != SCI_TITLE)       &&
208      (sciGetEntityType(pobj) != SCI_LEGEND)      &&
209      (sciGetEntityType(pobj) != SCI_AXES)        &&
210      (sciGetEntityType(pobj) != SCI_MENU)        &&
211      (sciGetEntityType(pobj) != SCI_MENUCONTEXT) &&
212      (sciGetEntityType(pobj) != SCI_STATUSB)    &&
213      (sciGetEntityType(pobj) != SCI_LABEL)      &&
214      (sciGetEntityType(pobj) != SCI_UIMENU) )
215     {
216       if(old_m +1 == sciGetForeground(pobj)) {   /* 0 => deals with Foreground */
217         sciSetNumColors (pobj,m);
218         sciUpdateBaW (pobj,0,-1); /* Black */
219         sciSetNumColors (pobj,old_m);
220       }
221       else  if(old_m +2 == sciGetForeground(pobj)) {  
222         sciSetNumColors (pobj,m);
223         sciUpdateBaW (pobj,0,-2); /* White */
224         sciSetNumColors (pobj,old_m);
225       }
226       if(old_m +1 == sciGetBackground(pobj)) { /* 1 => deals with Background */
227         sciSetNumColors (pobj,m);
228         sciUpdateBaW (pobj,1,-1);
229         sciSetNumColors (pobj,old_m);
230       }
231       else if(old_m +2 == sciGetBackground(pobj)) {
232         sciSetNumColors (pobj,m);
233         sciUpdateBaW (pobj,1,-2);
234         sciSetNumColors (pobj,old_m);
235       }
236     }
237   
238   if((sciGetEntityType(pobj) == SCI_TEXT)        ||
239      (sciGetEntityType(pobj) == SCI_TITLE)       ||
240      (sciGetEntityType(pobj) == SCI_LEGEND)      ||
241      (sciGetEntityType(pobj) == SCI_AXES)        ||
242      (sciGetEntityType(pobj) == SCI_MENU)        ||
243      (sciGetEntityType(pobj) == SCI_MENUCONTEXT) ||
244      (sciGetEntityType(pobj) == SCI_STATUSB)     ||
245      (sciGetEntityType(pobj) == SCI_SUBWIN)      ||
246      (sciGetEntityType(pobj) == SCI_FIGURE)      ||
247      (sciGetEntityType(pobj) == SCI_LABEL))
248     {
249       if(old_m +1 == sciGetFontForeground(pobj)) {
250         /* 2 => deals with FontForeground */
251         sciSetNumColors (pobj,m);
252         sciUpdateBaW (pobj,2,-1);   
253         sciSetNumColors (pobj,old_m);
254       }
255       else  if(old_m +2 == sciGetFontForeground(pobj)) {
256         sciSetNumColors (pobj,m);
257         sciUpdateBaW (pobj,2,-2);
258         sciSetNumColors (pobj,old_m);
259       }
260       
261       if(old_m +1 == sciGetFontBackground(pobj)) { /* 3 => deals with FontBackground */
262         sciSetNumColors (pobj,m);
263         sciUpdateBaW (pobj,3,-1);
264         sciSetNumColors (pobj,old_m);
265       }
266       else if(old_m +2 == sciGetFontBackground(pobj)) {
267         sciSetNumColors (pobj,m);
268         sciUpdateBaW (pobj,3,-2);
269         sciSetNumColors (pobj,old_m);
270       }
271     }
272
273
274   /* objects that can have marks */
275   if((sciGetEntityType(pobj) == SCI_FIGURE) ||
276      (sciGetEntityType(pobj) == SCI_SUBWIN) ||
277      (sciGetEntityType(pobj) == SCI_LEGEND) ||
278      (sciGetEntityType(pobj) == SCI_ARC) ||
279      (sciGetEntityType(pobj) == SCI_POLYLINE) ||
280      (sciGetEntityType(pobj) == SCI_RECTANGLE) ||
281      (sciGetEntityType(pobj) == SCI_SURFACE) ||
282      (sciGetEntityType(pobj) == SCI_AXES) ||
283      (sciGetEntityType(pobj) == SCI_SEGS))
284     {
285       if(old_m +1 == sciGetMarkForeground(pobj)) {   /* 4 => deals with MarkForeground */
286         sciSetNumColors (pobj,m);
287         sciUpdateBaW (pobj,4,-1); /* Black */
288         sciSetNumColors (pobj,old_m);
289       }
290       else  if(old_m +2 == sciGetMarkForeground(pobj)) {  
291         sciSetNumColors (pobj,m);
292         sciUpdateBaW (pobj,4,-2); /* White */
293         sciSetNumColors (pobj,old_m);
294       }
295       if(old_m +1 == sciGetMarkBackground(pobj)) { /* 5 => deals with MarkBackground */
296         sciSetNumColors (pobj,m);
297         sciUpdateBaW (pobj,5,-1);
298         sciSetNumColors (pobj,old_m);
299       }
300       else if(old_m +2 == sciGetMarkBackground(pobj)) {
301         sciSetNumColors (pobj,m);
302         sciUpdateBaW (pobj,5,-2);
303         sciSetNumColors (pobj,old_m);
304       }
305     }
306   
307   sciSetNumColors (pobj,m); /* Add F.Leray 25.06.04 */
308   
309   psonstmp = sciGetLastSons (pobj);
310   while (psonstmp != (sciSons *) NULL)
311     {
312       sciRecursiveUpdateBaW(psonstmp->pointobj, old_m, m);
313       psonstmp = psonstmp->pprev;
314     }
315 }
316
317
318 int  
319 sciUpdateBaW (sciPointObj * pobj, int flag, int value)
320 {
321   switch (flag)
322     {
323     case 0: /* Foreground*/
324       switch (sciGetEntityType (pobj))
325         {
326         case SCI_POLYLINE:
327         case SCI_FIGURE:
328         case SCI_SUBWIN: 
329         case SCI_ARC:
330         case SCI_SEGS: 
331         case SCI_FEC: 
332         case SCI_GRAYPLOT:
333         case SCI_RECTANGLE:
334         case SCI_SURFACE:
335         case SCI_LIGHT:
336         case SCI_AXES:
337         case SCI_MENU:
338         case SCI_MENUCONTEXT:
339         case SCI_STATUSB:
340         case SCI_LABEL: /* F.Leray 28.05.04 */
341         case SCI_TEXT:
342           sciSetForeground(pobj,value);
343           break;
344         case SCI_UIMENU:
345         case SCI_AGREG:
346         case SCI_TITLE:
347         case SCI_LEGEND:
348         case SCI_PANNER:                /* pas de context graphics */
349         case SCI_SBH:           /* pas de context graphics */
350         case SCI_SBV:           /* pas de context graphics */
351         default:
352           return -1;
353           break;
354         }
355       break;
356     case 1: /* Background*/
357       switch (sciGetEntityType (pobj))
358         {
359         case SCI_FIGURE:
360         case SCI_SUBWIN:
361         case SCI_ARC:
362         case SCI_SEGS: 
363         case SCI_FEC: 
364         case SCI_GRAYPLOT: 
365         case SCI_POLYLINE:
366         case SCI_RECTANGLE:
367         case SCI_SURFACE:
368         case SCI_LIGHT:
369         case SCI_AXES:
370         case SCI_MENU:
371         case SCI_MENUCONTEXT:
372         case SCI_STATUSB:
373         case SCI_LABEL: /* F.Leray 28.05.04 */
374         case SCI_TEXT:
375           sciSetBackground(pobj,value);
376           break;
377         case SCI_UIMENU:
378         case SCI_AGREG:
379         case SCI_TITLE:
380         case SCI_LEGEND:
381         case SCI_PANNER:                /* pas de context graphics */
382         case SCI_SBH:           /* pas de context graphics */
383         case SCI_SBV:           /* pas de context graphics */
384         default:
385           return -1;
386           break;
387         }
388       break;
389     case 2: /* FontForeground*/
390       switch (sciGetEntityType (pobj))
391         {
392         case SCI_AXES:
393         case SCI_MENU:
394         case SCI_MENUCONTEXT:
395         case SCI_STATUSB:
396         case SCI_TEXT:
397         case SCI_TITLE:
398         case SCI_LEGEND:
399         case SCI_FIGURE:
400         case SCI_SUBWIN:
401         case SCI_LABEL: /* F.Leray 28.05.04 */
402           sciSetFontForeground(pobj,value);
403           break;
404         default:
405           return -1;
406           break;
407         }
408       break;
409     case 3:
410       switch (sciGetEntityType (pobj))
411         {
412         case SCI_AXES:
413         case SCI_MENU:
414         case SCI_MENUCONTEXT:
415         case SCI_STATUSB:
416         case SCI_TEXT:
417         case SCI_TITLE:
418         case SCI_LEGEND:
419         case SCI_FIGURE:
420         case SCI_SUBWIN:
421         case SCI_LABEL: /* F.Leray 28.05.04 */
422           sciSetFontBackground(pobj,value);
423           break;
424         case SCI_UIMENU:
425         default:
426           return -1;
427           break;
428         }
429       break;
430     case 4: /* MarkForeground*/
431       switch (sciGetEntityType (pobj))
432         {
433         case SCI_FIGURE:
434         case SCI_SUBWIN: 
435         case SCI_LEGEND:
436         case SCI_ARC:
437         case SCI_POLYLINE:
438         case SCI_RECTANGLE:
439         case SCI_SURFACE:
440         case SCI_AXES:
441         case SCI_SEGS: 
442           sciSetMarkForeground(pobj,value); /* F.Leray 21.01.05 */
443           break;
444         case SCI_UIMENU:
445         default:
446           return -1;
447           break;
448         }
449       break;
450     case 5: /* MarkBackground*/
451       switch (sciGetEntityType (pobj))
452         {
453         case SCI_FIGURE:
454         case SCI_SUBWIN: 
455         case SCI_LEGEND:
456         case SCI_ARC:
457         case SCI_POLYLINE:
458         case SCI_RECTANGLE:
459         case SCI_SURFACE:
460         case SCI_AXES:
461         case SCI_SEGS: 
462           sciSetMarkBackground(pobj,value); /* F.Leray 21.01.05 */
463           break;
464         case SCI_UIMENU:
465         default:
466           return -1;
467           break;
468         }
469       break;
470       
471     default:
472       return -1;
473       break;
474     }
475   
476   return 0;
477 }
478
479 int sciInitNumColors( sciPointObj * pobj, int numcolors)
480 {
481
482   /* modified jb Silvy 06/2006 */
483   switch (sciGetEntityType (pobj))
484   {
485   case SCI_FIGURE:
486     if ( sciGetScilabXgc( pobj ) != NULL )
487     {
488       sciGetScilabXgc( pobj )->Numcolors = numcolors ;
489     }
490     pFIGURE_FEATURE(pobj)->numcolors = numcolors ;
491     return 0 ;
492   default:
493     return sciSetNumColors( sciGetParentFigure( pobj ), numcolors ) ;
494   }
495   return -1 ;
496 }
497
498 /**sciSetNumColors
499  * This function sets the number of the color defined in colormap
500  * param sciPointObj * pobj: the pointer to the entity
501  * param int numcolor: the number of the indexed color
502  * return 0 if ok, -1 if not
503  */
504 int
505 sciSetNumColors (sciPointObj * pobj, int numcolors)
506 {
507   if ( sciGetNumColors( pobj ) == numcolors )
508   {
509     /* nothing to do */
510     return 1 ;
511   }
512   return sciInitNumColors( pobj, numcolors ) ;
513   
514 }
515
516
517 /*** Adding F.Leray 31.03.04 for supporting -1 and -2 indexes.*/
518 /* retrieve the realindex inside the colormap from the handle color property */
519 /* -1 is actually m+1 and -2, m+2 */
520 int sciSetGoodIndex(sciPointObj * pobj, int colorindex) /* return colorindex or m (Default Black) or m+1 (Default White)*/
521 {
522   int m = sciGetNumColors (pobj);       /* the number of the color*/
523
524   if( colorindex == -1 ) /* Black */
525     return m + 1 ; /* modif. ici*/
526   else if( colorindex == -2 ) /* White */
527     return m + 2 ; /* modif. ici*/
528   else
529     return colorindex;
530 }
531
532 /**
533  * This function must be used to set the background of model objects.
534  */
535 int sciInitMdlBackground( sciPointObj * pobj, int colorIndex )
536 {
537   int m = sciGetNumColors(pobj); 
538   int goodIndex ;
539   if(colorIndex < -2 || colorIndex > m+2) return 0;
540
541   goodIndex = sciSetGoodIndex(pobj,colorIndex);
542
543   
544   /* code taken in void C2F(setbackground)(num, v2, v3, v4) from JPC */
545   if (sciGetScilabXgc (pobj)->CurColorStatus == 1)
546   {
547     /* COLORREF px;                           COLORREF ? "periWin-bgc"*/
548     sciGetScilabXgc (pobj)->NumBackground =
549       Max (0, Min (goodIndex - 1, m + 1));
550     C2F(dr)("xset","alufunction",&(sciGetScilabXgc (pobj)->CurDrawFunction),
551             PI0,PI0,PI0,PI0,PI0,PD0,PD0,PD0,PD0,0L,0L); 
552   }
553   return  sciInitBackground( pobj, colorIndex ) ;
554 }
555
556 int sciInitBackground( sciPointObj * pobj, int colorindex )
557 {
558   int m = sciGetNumColors(pobj); 
559   if(colorindex < -2 || colorindex > m+2) return 0;
560
561   colorindex = sciSetGoodIndex(pobj,colorindex);
562
563   switch (sciGetEntityType (pobj))
564   {
565   case SCI_FIGURE:
566     (sciGetGraphicContext(pobj))->backgroundcolor = Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
567     break;
568   case SCI_SUBWIN:
569     (sciGetGraphicContext(pobj))->backgroundcolor = Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
570     break;
571   case SCI_TEXT:
572     (sciGetGraphicContext(pobj))->backgroundcolor = Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
573     break;
574   case SCI_TITLE:
575     (sciGetFontContext (pobj))->backgroundcolor =       Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
576     break;
577   case SCI_LEGEND:
578     (sciGetFontContext(pobj))->backgroundcolor =        Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
579     break;
580   case SCI_ARC:
581     (sciGetGraphicContext(pobj))->backgroundcolor =     Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
582     break;
583   case SCI_POLYLINE:
584     (sciGetGraphicContext(pobj))->backgroundcolor =     Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
585     break;
586   case SCI_RECTANGLE:
587     (sciGetGraphicContext(pobj))->backgroundcolor =     Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
588     break;
589   case SCI_SURFACE:
590     (sciGetGraphicContext(pobj))->backgroundcolor =     Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
591     break;
592   case SCI_LIGHT:
593     (sciGetGraphicContext(pobj))->backgroundcolor =     Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
594     break;
595   case SCI_AXES:
596     (sciGetGraphicContext(pobj))->backgroundcolor =     Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
597     break;
598   case SCI_MENU:
599     (sciGetGraphicContext(pobj))->backgroundcolor =     Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
600     break;
601   case SCI_MENUCONTEXT:
602     (sciGetGraphicContext(pobj))->backgroundcolor =     Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
603     break;
604   case SCI_STATUSB:
605     (sciGetGraphicContext(pobj))->backgroundcolor =     Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
606     break; 
607   case SCI_LABEL: /* F.Leray 28.05.04 */
608     (sciGetGraphicContext(pobj))->backgroundcolor =     Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
609     break;
610   case SCI_SEGS: 
611   case SCI_FEC: 
612   case SCI_GRAYPLOT:
613   case SCI_PANNER:              /* pas de context graphics */
614   case SCI_SBH:         /* pas de context graphics */
615   case SCI_SBV:         /* pas de context graphics */
616   case SCI_AGREG:
617   case SCI_UIMENU:
618   default:
619     return -1 ;
620     break;
621   }
622   return 0;
623 }
624
625 /**sciSetBackground
626  * Sets the number of the Background
627  */
628 int
629 sciSetBackground (sciPointObj * pobj, int colorindex)
630 {
631   if ( sciGetBackground( pobj ) == colorindex )
632   {
633     /* nothing to do */
634     return 1 ;
635   }
636   
637   return sciInitBackground( pobj, colorindex ) ;
638     
639 }
640
641 /**
642  * This function must be used to set the foreground of model objects.
643  */
644 int sciInitMdlForeground( sciPointObj * pObj, int colorIndex )
645 {
646   int m = sciGetNumColors(pObj);
647   int goodIndex ;
648   if(colorIndex < -2 || colorIndex > m+2) return 0;
649   
650   goodIndex = sciSetGoodIndex(pObj,colorIndex);
651   
652   if (sciGetScilabXgc (pObj)->CurColorStatus == 1)
653   { 
654     sciGetScilabXgc (pObj)->NumForeground =
655       Max (0, Min (goodIndex - 1, m + 1));
656     C2F(dr)("xset","alufunction",&(sciGetScilabXgc (pObj)->CurDrawFunction),
657             PI0,PI0,PI0,PI0,PI0,PD0,PD0,PD0,PD0,4L,11L);
658   }
659   return sciInitForeground( pObj, colorIndex ) ;
660 }
661
662 int sciInitForeground( sciPointObj * pobj, int colorindex )
663 {
664   int m = sciGetNumColors(pobj); 
665   if(colorindex < -2 || colorindex > m+2) return 0;
666   
667   colorindex = sciSetGoodIndex(pobj,colorindex);
668
669   switch (sciGetEntityType (pobj))
670   {
671   case SCI_FIGURE:
672     (sciGetGraphicContext(pobj))->foregroundcolor =     Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
673     break;
674   case SCI_SUBWIN:
675     (sciGetGraphicContext(pobj))->foregroundcolor =     Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
676     break;
677   case SCI_TEXT:
678     (sciGetGraphicContext(pobj))->foregroundcolor =     Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
679     break;
680   case SCI_TITLE:
681     (sciGetFontContext(pobj))->foregroundcolor =        Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
682     break;
683   case SCI_LEGEND:
684     (sciGetFontContext(pobj))->foregroundcolor =        Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
685     break;
686   case SCI_ARC:
687     (sciGetGraphicContext(pobj))->foregroundcolor =     Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
688     break;
689   case SCI_POLYLINE:
690     (sciGetGraphicContext(pobj))->foregroundcolor =     Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
691     break;
692   case SCI_RECTANGLE:
693     (sciGetGraphicContext(pobj))->foregroundcolor =     Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
694     break;
695   case SCI_SURFACE:
696     (sciGetGraphicContext(pobj))->foregroundcolor =     Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
697     break;
698   case SCI_LIGHT:
699     (sciGetGraphicContext(pobj))->foregroundcolor =     Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
700     break;
701   case SCI_AXES:
702     (sciGetGraphicContext(pobj))->foregroundcolor = Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
703     break;
704   case SCI_MENU:
705     (sciGetGraphicContext(pobj))->foregroundcolor =     Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
706     break;
707   case SCI_MENUCONTEXT:
708     (sciGetGraphicContext(pobj))->foregroundcolor =     Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
709     break;
710   case SCI_STATUSB:
711     (sciGetGraphicContext(pobj))->foregroundcolor =     Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
712     break;
713   case SCI_LABEL: /* F.Leray 28.05.04 */
714     (sciGetGraphicContext(pobj))->foregroundcolor =     Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
715     break;
716   case SCI_SEGS:
717     (sciGetGraphicContext(pobj))->foregroundcolor =     Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
718     break;
719   case SCI_FEC: 
720   case SCI_GRAYPLOT: 
721   case SCI_AGREG:  
722   case SCI_PANNER:              /* pas de context graphics */
723   case SCI_SBH:         /* pas de context graphics */
724   case SCI_SBV:         /* pas de context graphics */
725   case SCI_UIMENU:
726   default:
727     return -1 ;
728     break;
729   }
730   return 0;
731 }
732
733 /**sciSetForeground
734  * sets the number of the Foreground
735  */
736 int
737 sciSetForeground (sciPointObj * pobj, int colorindex)
738 {
739   if ( sciGetForeground( pobj ) == colorindex )
740   {
741     return 1 ;
742   }
743   return sciInitForeground( pobj, colorindex ) ;
744     
745 }
746
747 int sciSetLineWidth( sciPointObj * pobj, int linewidth )
748 {
749   if ( sciGetLineWidth( pobj ) == linewidth )
750   {
751     /* nothing to do */
752     return 1 ;
753   }
754   return sciInitLineWidth( pobj, linewidth ) ;
755 }
756
757
758 /**sciSetLineWidth
759  * Sets the line width
760  */
761 int
762 sciInitLineWidth (sciPointObj * pobj, int linewidth)
763 {
764
765   if (linewidth < 0)
766     {
767       sciprint ("the line width must be greater than 0\n");
768       return -1;
769     }
770   else
771     {
772       switch (sciGetEntityType (pobj))
773         {
774         case SCI_FIGURE:
775           (sciGetGraphicContext(pobj))->linewidth = linewidth;
776           return 0;
777           break;
778         case SCI_SUBWIN:
779           (sciGetGraphicContext(pobj))->linewidth = linewidth;
780           /*sciSetLineWidth (sciGetParentFigure (pobj), linewidth);*/
781           return 0;
782           break;
783         case SCI_ARC:
784           (sciGetGraphicContext(pobj))->linewidth = linewidth;
785           return 0;
786           break;
787         case SCI_POLYLINE:
788           (sciGetGraphicContext(pobj))->linewidth = linewidth;
789           return 0;
790           break;
791         case SCI_RECTANGLE:
792           (sciGetGraphicContext(pobj))->linewidth = linewidth;
793           return 0;
794           break;
795         case SCI_SURFACE:
796           (sciGetGraphicContext(pobj))->linewidth = linewidth;
797           return 0;
798           break;
799         case SCI_LIGHT:
800           (sciGetGraphicContext(pobj))->linewidth = linewidth;
801           return 0;
802           break;
803         case SCI_AXES:
804           (sciGetGraphicContext(pobj))->linewidth = linewidth;
805           return 0;
806           break;
807         case SCI_MENU:
808           (sciGetGraphicContext(pobj))->linewidth = linewidth;
809           return 0;
810           break;
811         case SCI_MENUCONTEXT:
812           (sciGetGraphicContext(pobj))->linewidth = linewidth;
813           return 0;
814           break;
815         case SCI_STATUSB:
816           (sciGetGraphicContext(pobj))->linewidth = linewidth;
817           break;
818         case SCI_SEGS: 
819           (sciGetGraphicContext(pobj))->linewidth = linewidth;
820           break;
821         case SCI_AGREG:
822         case SCI_FEC: 
823         case SCI_GRAYPLOT:
824         case SCI_PANNER:
825         case SCI_SBH:
826         case SCI_SBV:
827         case SCI_TEXT:
828         case SCI_TITLE:
829         case SCI_LEGEND:
830         case SCI_LABEL: /* F.Leray 28.05.04 */
831         case SCI_UIMENU:
832         default:
833           /* pas de context graphics */
834           sciprint ("This object has no  line width \n");
835           return -1;
836           break;
837         }
838     }
839   return 0;
840 }
841
842
843 int sciSetLineStyle( sciPointObj * pobj, int linestyle )
844 {
845   if ( sciGetLineStyle( pobj ) == linestyle )
846   {
847     /* nothing to do */
848     return 1 ;
849   }
850   return sciInitLineStyle( pobj, linestyle ) ;
851 }
852
853 /**sciSetLineStyle
854  * Sets the line style
855  */
856 int
857 sciInitLineStyle (sciPointObj * pobj, int linestyle)
858 {
859
860   if (linestyle < 0)
861     {
862       sciprint ("the line style must be greater than 0\n");
863       return -1;
864     }
865   else
866     {
867       switch (sciGetEntityType (pobj))
868         {
869         case SCI_FIGURE:
870           (sciGetGraphicContext(pobj))->linestyle = linestyle;
871           return 0;
872           break;
873         case SCI_SUBWIN:
874           (sciGetGraphicContext(pobj))->linestyle = linestyle;
875           return 0;
876           break;
877         case SCI_ARC:
878           (sciGetGraphicContext(pobj))->linestyle = linestyle;
879           return 0;
880           break;
881         case SCI_POLYLINE:
882           (sciGetGraphicContext(pobj))->linestyle = linestyle;
883           return 0;
884           break;
885         case SCI_RECTANGLE:
886           (sciGetGraphicContext(pobj))->linestyle = linestyle;
887           return 0;
888           break;
889         case SCI_SURFACE:
890           (sciGetGraphicContext(pobj))->linestyle = linestyle;
891           return 0;
892           break;
893         case SCI_LIGHT:
894           (sciGetGraphicContext(pobj))->linestyle = linestyle;
895           return 0;
896           break;
897         case SCI_AXES:
898           (sciGetGraphicContext(pobj))->linestyle = linestyle;
899           return 0;
900           break;
901         case SCI_MENU:
902           (sciGetGraphicContext(pobj))->linestyle = linestyle;
903           return 0;
904           break;
905         case SCI_MENUCONTEXT:
906           (sciGetGraphicContext(pobj))->linestyle = linestyle;
907           return 0;
908           break;
909         case SCI_STATUSB:
910           (sciGetGraphicContext(pobj))->linestyle = linestyle;
911           break;
912         case SCI_SEGS: 
913           (sciGetGraphicContext(pobj))->linestyle = linestyle;
914           break;
915         case SCI_FEC: 
916         case SCI_GRAYPLOT:
917         case SCI_AGREG:
918         case SCI_PANNER:
919         case SCI_SBH:
920         case SCI_SBV:
921         case SCI_TEXT:
922         case SCI_TITLE:
923         case SCI_LEGEND:
924         case SCI_LABEL: /* F.Leray 28.05.04 */
925         case SCI_UIMENU:
926         default:
927           /* pas de context graphics */
928           sciprint ("This object has no  line width \n");
929           return -1;
930           break;
931         }
932     }
933   return 0;
934 }
935
936
937 int sciInitIsMark( sciPointObj * pobj, BOOL ismark )
938 {
939   switch (sciGetEntityType (pobj))
940     {
941     case SCI_FIGURE:
942       (sciGetGraphicContext(pobj))->ismark = ismark;
943       return 0;
944       break;
945     case SCI_SUBWIN:
946       (sciGetGraphicContext(pobj))->ismark = ismark;
947       return 0;
948       break;
949     case SCI_ARC:
950       (sciGetGraphicContext(pobj))->ismark = ismark;
951       return 0;
952       break;
953     case SCI_POLYLINE:
954       (sciGetGraphicContext(pobj))->ismark = ismark;
955       return 0;
956       break;
957     case SCI_RECTANGLE:
958       (sciGetGraphicContext(pobj))->ismark = ismark;
959       return 0;
960       break;
961     case SCI_SURFACE:
962       (sciGetGraphicContext(pobj))->ismark = ismark;
963       return 0;
964       break;
965     case SCI_AXES:
966       (sciGetGraphicContext(pobj))->ismark = ismark;
967       return 0;
968       break;
969     case SCI_LEGEND:
970       (sciGetGraphicContext(pobj))->ismark = ismark;
971       return 0;
972       break;
973     case SCI_SEGS:
974       (sciGetGraphicContext(pobj))->ismark = ismark;
975       return 0;
976       break;
977     case SCI_FEC:
978     case SCI_GRAYPLOT:
979     case SCI_MENU:
980     case SCI_MENUCONTEXT:
981     case SCI_STATUSB:
982     case SCI_LIGHT:
983     case SCI_AGREG:
984     case SCI_PANNER:
985     case SCI_SBH:
986     case SCI_SBV:
987     case SCI_TEXT:
988     case SCI_TITLE:
989     case SCI_LABEL: /* F.Leray 28.05.04 */
990     case SCI_UIMENU:
991     default:
992       /* pas de context graphics */
993       sciprint ("This object has no  ismark \n");
994       return -1;
995       break;
996     }
997   return 0;
998   
999 }
1000
1001 /**sciSetIsMark
1002  * Sets the line style
1003  */
1004 int
1005 sciSetIsMark (sciPointObj * pobj, BOOL ismark)
1006 {
1007
1008   if ( sciGetIsMark(pobj) == ismark )
1009   {
1010     /* nothing to do */
1011     return 1 ;
1012   }
1013   return sciInitIsMark( pobj, ismark ) ;
1014   
1015 }
1016
1017
1018 int sciInitMarkForeground( sciPointObj * pobj, int colorindex )
1019 {
1020   colorindex = sciSetGoodIndex(pobj,colorindex); /* Adding F.Leray 31.03.04*/
1021    switch (sciGetEntityType (pobj))
1022     {
1023     case SCI_FIGURE: /* F.Leray 08.04.04 */
1024       (sciGetGraphicContext(pobj))->markforeground =
1025         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
1026       break;
1027     case SCI_SUBWIN: /* F.Leray 08.04.04 */
1028       (sciGetGraphicContext(pobj))->markforeground =
1029         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
1030       break;
1031     case SCI_ARC:
1032       (sciGetGraphicContext(pobj))->markforeground =
1033         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
1034       break;
1035     case SCI_POLYLINE:
1036       (sciGetGraphicContext(pobj))->markforeground =
1037         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
1038       break;
1039     case SCI_RECTANGLE:
1040       (sciGetGraphicContext(pobj))->markforeground =
1041         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
1042       break;
1043     case SCI_AXES:
1044       (sciGetGraphicContext(pobj))->markforeground =
1045         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
1046       break;
1047     case SCI_SEGS: 
1048       (sciGetGraphicContext(pobj))->markforeground =
1049         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
1050       break;
1051     case SCI_SURFACE:
1052       (sciGetGraphicContext(pobj))->markforeground =
1053         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
1054       break;
1055     case SCI_LEGEND:
1056       (sciGetGraphicContext(pobj))->markforeground =
1057         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
1058       break;
1059     case SCI_LABEL:
1060     case SCI_MENU:
1061     case SCI_MENUCONTEXT:
1062     case SCI_STATUSB:
1063     case SCI_TITLE:
1064     case SCI_TEXT:
1065     case SCI_FEC: 
1066     case SCI_GRAYPLOT: 
1067     case SCI_LIGHT:
1068     case SCI_PANNER:
1069     case SCI_SBH:
1070     case SCI_SBV:
1071     case SCI_AGREG:
1072     case SCI_UIMENU:
1073     default:
1074       return -1;
1075       break;
1076     }
1077   return 0;
1078   
1079 }
1080
1081 /**sciSetMarkForeground
1082  * sets the number of the Marks'Foreground
1083  */
1084 int
1085 sciSetMarkForeground (sciPointObj * pobj, int colorindex)
1086 {
1087   
1088   colorindex = sciSetGoodIndex(pobj,colorindex); /* Adding F.Leray 31.03.04*/
1089   if ( sciGetMarkForeground( pobj ) == colorindex )
1090   {
1091     /* nothing to do */
1092     return 1 ;
1093   }
1094   return sciInitMarkForeground( pobj, colorindex ) ;
1095  
1096 }
1097
1098 int sciInitMarkBackground( sciPointObj * pobj, int colorindex )
1099 {
1100   colorindex = sciSetGoodIndex(pobj,colorindex); /* Adding F.Leray 31.03.04*/
1101
1102   switch (sciGetEntityType (pobj))
1103     {
1104     case SCI_FIGURE: /* F.Leray 08.04.04 */
1105       (sciGetGraphicContext(pobj))->markbackground =
1106         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
1107       break;
1108     case SCI_SUBWIN: /* F.Leray 08.04.04 */
1109       (sciGetGraphicContext(pobj))->markbackground =
1110         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
1111       break;
1112     case SCI_ARC:
1113       (sciGetGraphicContext(pobj))->markbackground =
1114         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
1115       break;
1116     case SCI_POLYLINE:
1117       (sciGetGraphicContext(pobj))->markbackground =
1118         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
1119       break;
1120     case SCI_RECTANGLE:
1121       (sciGetGraphicContext(pobj))->markbackground =
1122         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
1123       break;
1124     case SCI_AXES:
1125       (sciGetGraphicContext(pobj))->markbackground =
1126         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
1127       break;
1128     case SCI_SEGS: 
1129       (sciGetGraphicContext(pobj))->markbackground =
1130         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
1131       break;
1132     case SCI_SURFACE:
1133       (sciGetGraphicContext(pobj))->markbackground =
1134         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
1135       break;
1136     case SCI_LEGEND:
1137       (sciGetGraphicContext(pobj))->markbackground =
1138         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
1139       break;
1140     case SCI_LABEL:
1141     case SCI_MENU:
1142     case SCI_MENUCONTEXT:
1143     case SCI_STATUSB:
1144     case SCI_TITLE:
1145     case SCI_TEXT:
1146     case SCI_FEC: 
1147     case SCI_GRAYPLOT: 
1148     case SCI_LIGHT:
1149     case SCI_PANNER:
1150     case SCI_SBH:
1151     case SCI_SBV:
1152     case SCI_AGREG:
1153     case SCI_UIMENU:
1154     default:
1155       return -1;
1156       break;
1157     }
1158   return 0;
1159 }
1160
1161 /**sciSetMarkBackground
1162  * sets the number of the Marks'Background
1163  */
1164 int
1165 sciSetMarkBackground (sciPointObj * pobj, int colorindex)
1166 {
1167   
1168   colorindex = sciSetGoodIndex(pobj,colorindex); /* Adding F.Leray 31.03.04*/
1169   
1170   if ( sciGetMarkBackground( pobj ) == colorindex )
1171   {
1172     /* nothing to do */
1173     return 1 ;
1174   }
1175   return sciInitMarkBackground( pobj, colorindex ) ;
1176   
1177 }
1178
1179
1180
1181 int sciInitMarkStyle( sciPointObj * pobj, int markstyle )
1182 {
1183   if (markstyle < 0)
1184     {
1185       sciprint ("the mark style must be greater or equal than 0\n");
1186       return -1;
1187     }
1188    else
1189     {
1190       switch (sciGetEntityType (pobj))
1191         {
1192         case SCI_FIGURE:
1193           (sciGetGraphicContext(pobj))->markstyle = markstyle;
1194           return 0;
1195           break;
1196         case SCI_SUBWIN:
1197           (sciGetGraphicContext(pobj))->markstyle = markstyle;
1198           /*sciSetMarkStyle (sciGetParentFigure (pobj), markstyle);*/
1199           return 0;
1200           break;
1201         case SCI_ARC:
1202           (sciGetGraphicContext(pobj))->markstyle = markstyle;
1203           return 0;
1204           break;
1205         case SCI_POLYLINE:
1206           (sciGetGraphicContext(pobj))->markstyle = markstyle;
1207           return 0;
1208           break;
1209         case SCI_RECTANGLE:
1210           (sciGetGraphicContext(pobj))->markstyle = markstyle;
1211           return 0;
1212           break;
1213         case SCI_SURFACE:
1214           (sciGetGraphicContext(pobj))->markstyle = markstyle;
1215           return 0;
1216           break;
1217         case SCI_AXES:
1218           (sciGetGraphicContext(pobj))->markstyle = markstyle;
1219           return 0;
1220           break;
1221         case SCI_LEGEND:
1222           (sciGetGraphicContext(pobj))->markstyle = markstyle;
1223           return 0;
1224           break; 
1225         case SCI_SEGS: 
1226           (sciGetGraphicContext(pobj))->markstyle = markstyle;
1227           return 0;
1228           break; 
1229         case SCI_FEC: 
1230         case SCI_GRAYPLOT:
1231         case SCI_MENU:
1232         case SCI_MENUCONTEXT:
1233         case SCI_STATUSB:
1234         case SCI_LIGHT:
1235         case SCI_AGREG:
1236         case SCI_PANNER:
1237         case SCI_SBH:
1238         case SCI_SBV:
1239         case SCI_TEXT:
1240         case SCI_TITLE:
1241         case SCI_LABEL: /* F.Leray 28.05.04 */
1242         case SCI_UIMENU:
1243         default:
1244           /* pas de context graphics */
1245           sciprint ("This object has no mark \n");
1246           return -1;
1247           break;
1248         }
1249     }
1250   return 0;
1251 }
1252
1253
1254 /**sciSetMarkStyle
1255  * Sets the mark style
1256  */
1257 int
1258 sciSetMarkStyle (sciPointObj * pobj, int markstyle)
1259 {
1260   
1261   if ( sciGetMarkStyle( pobj ) == markstyle )
1262   {
1263     /* nothing to do */
1264     return 1 ;
1265   }
1266   return sciInitMarkStyle( pobj, markstyle ) ;
1267 }
1268
1269 int sciInitMarkSize( sciPointObj * pobj, int marksize )
1270 {
1271   if (marksize < 0)
1272     {
1273       sciprint ("the mark size must be greater or equal than 0\n");
1274       return -1;
1275     }
1276   else
1277     {
1278       switch (sciGetEntityType (pobj))
1279         {
1280         case SCI_FIGURE:
1281           (sciGetGraphicContext(pobj))->marksize = marksize;
1282           return 0;
1283           break;
1284         case SCI_SUBWIN:
1285           (sciGetGraphicContext(pobj))->marksize = marksize;
1286           /*sciSetMarksize (sciGetParentFigure (pobj), marksize);*/
1287           return 0;
1288           break;
1289         case SCI_ARC:
1290           (sciGetGraphicContext(pobj))->marksize = marksize;
1291           return 0;
1292           break;
1293         case SCI_POLYLINE:
1294           (sciGetGraphicContext(pobj))->marksize = marksize;
1295           return 0;
1296           break;
1297         case SCI_RECTANGLE:
1298           (sciGetGraphicContext(pobj))->marksize = marksize;
1299           return 0;
1300           break;
1301         case SCI_SURFACE:
1302           (sciGetGraphicContext(pobj))->marksize = marksize;
1303           return 0;
1304           break;
1305         case SCI_AXES:
1306           (sciGetGraphicContext(pobj))->marksize = marksize;
1307           return 0;
1308           break;
1309         case SCI_LEGEND:
1310           (sciGetGraphicContext(pobj))->marksize = marksize;
1311           return 0;
1312           break; 
1313         case SCI_SEGS: 
1314           (sciGetGraphicContext(pobj))->marksize = marksize;
1315           return 0;
1316           break;
1317         case SCI_LABEL: /* F.Leray 28.05.04 */
1318         case SCI_TEXT:
1319           (sciGetGraphicContext(pobj))->marksize = marksize;
1320           return 0;
1321           break;
1322         case SCI_FEC: 
1323         case SCI_GRAYPLOT:
1324         case SCI_MENU:
1325         case SCI_MENUCONTEXT:
1326         case SCI_STATUSB:
1327         case SCI_LIGHT:
1328         case SCI_AGREG:
1329         case SCI_PANNER:
1330         case SCI_SBH:
1331         case SCI_SBV:
1332         case SCI_TITLE:
1333         case SCI_UIMENU:
1334         default:
1335           /* pas de context graphics */
1336           sciprint ("This object has no mark \n");
1337           return -1;
1338           break;
1339         }
1340     }
1341   return 0;
1342 }
1343
1344 /**sciSetMarkSize
1345  * Sets the mark size
1346  */
1347 int
1348 sciSetMarkSize (sciPointObj * pobj, int marksize)
1349 {
1350   if ( sciGetMarkSize( pobj ) == marksize )
1351   {
1352     /* nothing to do */
1353     return 1 ;
1354   }
1355   return sciInitMarkSize( pobj, marksize ) ;
1356   
1357 }
1358
1359 int sciInitMarkSizeUnit( sciPointObj * pobj, int marksizeunit )
1360 {
1361   if (marksizeunit < 0)
1362     {
1363       sciprint ("the mark size unit must be greater than 0\n");
1364       return -1;
1365     }
1366   else
1367     {
1368       switch (sciGetEntityType (pobj))
1369         {
1370         case SCI_FIGURE:
1371           (sciGetGraphicContext(pobj))->marksizeunit = marksizeunit;
1372           return 0;
1373           break;
1374         case SCI_SUBWIN:
1375           (sciGetGraphicContext(pobj))->marksizeunit = marksizeunit;
1376           return 0;
1377           break;
1378         case SCI_ARC:
1379           (sciGetGraphicContext(pobj))->marksizeunit = marksizeunit;
1380           return 0;
1381           break;
1382         case SCI_POLYLINE:
1383           (sciGetGraphicContext(pobj))->marksizeunit = marksizeunit;
1384           return 0;
1385           break;
1386         case SCI_RECTANGLE:
1387           (sciGetGraphicContext(pobj))->marksizeunit = marksizeunit;
1388           return 0;
1389           break;
1390         case SCI_SURFACE:
1391           (sciGetGraphicContext(pobj))->marksizeunit = marksizeunit;
1392           return 0;
1393           break;
1394         case SCI_AXES:
1395           (sciGetGraphicContext(pobj))->marksizeunit = marksizeunit;
1396           return 0;
1397           break;
1398         case SCI_LEGEND:
1399           (sciGetGraphicContext(pobj))->marksizeunit = marksizeunit;
1400           return 0;
1401           break; 
1402         case SCI_SEGS: 
1403           (sciGetGraphicContext(pobj))->marksizeunit = marksizeunit;
1404           return 0;
1405           break; 
1406         case SCI_FEC: 
1407         case SCI_GRAYPLOT:
1408         case SCI_MENU:
1409         case SCI_MENUCONTEXT:
1410         case SCI_STATUSB:
1411         case SCI_LIGHT:
1412         case SCI_AGREG:
1413         case SCI_PANNER:
1414         case SCI_SBH:
1415         case SCI_SBV:
1416         case SCI_TEXT:
1417         case SCI_TITLE:
1418         case SCI_LABEL: /* F.Leray 28.05.04 */
1419         case SCI_UIMENU:
1420         default:
1421           /* pas de context graphics */
1422           sciprint ("This object has no mark \n");
1423           return -1;
1424           break;
1425         }
1426     }
1427   return 0;
1428 }
1429
1430 /**sciSetMarkSizeUnit
1431  * Sets the mark size unit
1432  * 1 : points, 2 : tabulated
1433  */
1434 int
1435 sciSetMarkSizeUnit (sciPointObj * pobj, int marksizeunit)
1436 {
1437
1438   if ( sciGetMarkSizeUnit( pobj ) == marksizeunit )
1439   {
1440     /* nothing to do */
1441     return 1 ;
1442   }
1443   return sciInitMarkSizeUnit( pobj, marksizeunit ) ;
1444 }
1445
1446 int sciInitIsLine( sciPointObj * pobj, BOOL isline )
1447 {
1448   switch (sciGetEntityType (pobj))
1449     {
1450     case SCI_FIGURE:
1451       (sciGetGraphicContext(pobj))->isline = isline;
1452       return 0;
1453       break;
1454     case SCI_SUBWIN:
1455       (sciGetGraphicContext(pobj))->isline = isline;
1456       return 0;
1457       break;
1458     case SCI_ARC:
1459       (sciGetGraphicContext(pobj))->isline = isline;
1460       return 0;
1461       break;
1462     case SCI_POLYLINE:
1463       (sciGetGraphicContext(pobj))->isline = isline;
1464       return 0;
1465       break;
1466     case SCI_RECTANGLE:
1467       (sciGetGraphicContext(pobj))->isline = isline;
1468       return 0;
1469       break;
1470     case SCI_SURFACE:
1471       (sciGetGraphicContext(pobj))->isline = isline;
1472       return 0;
1473       break;
1474     case SCI_AXES:
1475       (sciGetGraphicContext(pobj))->isline = isline;
1476       return 0;
1477       break;
1478     case SCI_LEGEND:
1479       (sciGetGraphicContext(pobj))->isline = isline;
1480       return 0;
1481       break;
1482     case SCI_SEGS:
1483       (sciGetGraphicContext(pobj))->isline = isline;
1484       return 0;
1485       break;
1486     case SCI_TEXT:
1487       pTEXT_FEATURE( pobj )->isline = isline;
1488       return 0;
1489       break;
1490     case SCI_FEC:
1491     case SCI_GRAYPLOT:
1492     case SCI_MENU:
1493     case SCI_MENUCONTEXT:
1494     case SCI_STATUSB:
1495     case SCI_LIGHT:
1496     case SCI_AGREG:
1497     case SCI_PANNER:
1498     case SCI_SBH:
1499     case SCI_SBV:
1500     case SCI_TITLE:
1501     case SCI_LABEL: /* F.Leray 28.05.04 */
1502     case SCI_UIMENU:
1503     default:
1504       /* pas de context graphics */
1505       sciprint ("This object has no isline \n");
1506       return -1;
1507       break;
1508     }
1509   return 0;
1510 }
1511
1512 /**sciSetIsLine
1513  * Sets the line style existence
1514  */
1515 int
1516 sciSetIsLine (sciPointObj * pobj, BOOL isline)
1517 {
1518
1519   if ( sciGetIsLine( pobj ) == isline )
1520   {
1521     /* nothing to do */
1522     return 1 ;
1523   }
1524   return sciInitIsLine( pobj, isline ) ;
1525 }
1526
1527 int sciInitFillStyle( sciPointObj * pobj, int fillstyle )
1528 {
1529   if (fillstyle < 0)
1530     {
1531       sciprint ("the fill width must be equal or greater than 0\n");
1532       return -1;
1533     }
1534   else
1535     {
1536       switch (sciGetEntityType (pobj))
1537         {
1538         case SCI_FIGURE:
1539           (sciGetGraphicContext(pobj))->fillstyle = fillstyle;
1540           return 0;
1541           break;
1542         case SCI_SUBWIN:
1543           (sciGetGraphicContext(pobj))->fillstyle = fillstyle;
1544           /*sciSetFillStyle (sciGetParentFigure (pobj), fillstyle);*/
1545           return 0;
1546           break;
1547         case SCI_ARC:
1548           (sciGetGraphicContext(pobj))->fillstyle = fillstyle;
1549           return 0;
1550           break;
1551         case SCI_POLYLINE:
1552           (sciGetGraphicContext(pobj))->fillstyle = fillstyle;
1553           return 0;
1554           break;
1555         case SCI_RECTANGLE:
1556           (sciGetGraphicContext(pobj))->fillstyle = fillstyle;
1557           return 0;
1558           break;
1559         case SCI_SURFACE:
1560           (sciGetGraphicContext(pobj))->fillstyle = fillstyle;
1561           return 0;
1562           break;
1563         case SCI_AXES:
1564           (sciGetGraphicContext(pobj))->fillstyle = fillstyle;
1565           return 0;
1566           break;
1567         case SCI_SEGS: 
1568         case SCI_FEC: 
1569         case SCI_GRAYPLOT:
1570         case SCI_LIGHT:
1571         case SCI_PANNER:
1572         case SCI_SBH:
1573         case SCI_SBV:
1574         case SCI_MENU:
1575         case SCI_MENUCONTEXT:
1576         case SCI_STATUSB:
1577         case SCI_AGREG:
1578         case SCI_TEXT:
1579         case SCI_TITLE:
1580         case SCI_LEGEND:
1581         case SCI_LABEL: /* F.Leray 28.05.04 */
1582         case SCI_UIMENU:
1583         default:
1584           sciprint ("This object has no  line style \n");
1585           return -1;
1586           break;
1587         }
1588     }
1589   return 0;
1590 }
1591
1592 /**sciSetFillStyle
1593  * Sets the fillstyle
1594  */
1595 int
1596 sciSetFillStyle (sciPointObj * pobj, int fillstyle)
1597 {
1598   if ( sciGetFillStyle( pobj ) == fillstyle )
1599   {
1600     return 1 ;
1601   }
1602   return sciInitFillStyle( pobj, fillstyle ) ;
1603 }
1604
1605
1606 int sciInitFontDeciWidth( sciPointObj * pobj, int fontdeciwidth )
1607 {
1608   if (fontdeciwidth < 0)
1609     {
1610       sciprint ("The font size must be greater than 0\n");
1611       return -1;
1612     }
1613    else
1614     {
1615       switch (sciGetEntityType (pobj))
1616         {
1617         case SCI_FIGURE: /* Adding F.Leray 08.04.04 */
1618           /* pas de context graphics */
1619           /*  sciprint ("This object has no  Font width \n");
1620               return -1;*/
1621           (sciGetFontContext(pobj))->fontdeciwidth = fontdeciwidth;
1622           return 0;
1623           break;
1624         case SCI_SUBWIN:
1625           /* pas de context graphics */
1626           /*sciprint ("This object has no  Font width \n");
1627             return -1;*/
1628           /* Adding F.Leray 08.04.04 */
1629           (sciGetFontContext(pobj))->fontdeciwidth = fontdeciwidth;
1630           return 0;
1631           break;
1632         case SCI_TEXT:
1633           (sciGetFontContext(pobj))->fontdeciwidth = fontdeciwidth;
1634           return 0;
1635           break;
1636         case SCI_TITLE:
1637           (sciGetFontContext(pobj))->fontdeciwidth =
1638             fontdeciwidth;
1639           return 0;
1640           break;
1641         case SCI_LEGEND:
1642           (sciGetFontContext(pobj))->fontdeciwidth =
1643             fontdeciwidth;
1644           return 0;
1645           break;
1646         case SCI_ARC:
1647           /* pas de context graphics */
1648           sciprint ("This object has no  Font width \n");
1649           return -1;
1650           break;
1651         case SCI_POLYLINE:
1652           /* pas de context graphics */
1653           sciprint ("This object has no  Font width \n");
1654           return -1;
1655           break;
1656         case SCI_RECTANGLE:
1657           /* pas de context graphics */
1658           sciprint ("This object has no  Font width \n");
1659           return -1;
1660           break;
1661         case SCI_SURFACE:
1662           /* pas de context graphics */
1663           sciprint ("This object has no  font width \n");
1664           return -1;
1665           break;
1666         case SCI_LIGHT:
1667           /* pas de context graphics */
1668           sciprint ("This object has no  font width \n");
1669           return -1;
1670           break;
1671         case SCI_AXES:
1672           (sciGetFontContext(pobj))->fontdeciwidth =
1673             fontdeciwidth;
1674           return 0;
1675           break;
1676         case SCI_PANNER:
1677         case SCI_SBH:
1678         case SCI_SBV:
1679           /* pas de context graphics */
1680           sciprint ("This object has no  font width \n");
1681           return -1;
1682           break;
1683         case SCI_MENU:
1684           (sciGetFontContext(pobj))->fontdeciwidth =
1685             fontdeciwidth;
1686           return 0;
1687           break;
1688         case SCI_MENUCONTEXT:
1689           (sciGetFontContext(pobj))->fontdeciwidth =
1690             fontdeciwidth;
1691           return 0;
1692           break;
1693         case SCI_STATUSB:
1694           (sciGetFontContext(pobj))->fontdeciwidth =
1695             fontdeciwidth;
1696           break;
1697         case SCI_LABEL:
1698           (sciGetFontContext(pobj))->fontdeciwidth =
1699             fontdeciwidth;
1700           break;
1701         case SCI_SEGS: 
1702         case SCI_FEC: 
1703         case SCI_GRAYPLOT:
1704         case SCI_AGREG:
1705         case SCI_UIMENU:
1706         default:
1707           sciprint ("This object has no  font width \n");
1708           return -1 ;
1709           break;
1710         }
1711     }
1712   return 0;
1713 }
1714
1715 /**sciSetFontDeciWidth
1716  * Sets the font size
1717  */
1718 int
1719 sciSetFontDeciWidth (sciPointObj * pobj, int fontdeciwidth)
1720 {
1721
1722   if ( sciGetFontDeciWidth( pobj ) == fontdeciwidth )
1723   {
1724     /* nothing to do */
1725     return 1 ;
1726   }
1727   return sciInitFontDeciWidth( pobj, fontdeciwidth ) ;
1728  
1729 }
1730
1731
1732 int sciInitFontOrientation( sciPointObj * pobj, int textorientation )
1733 {
1734   if (textorientation < 0)
1735     {
1736       sciprint ("The font angle must be greater than 0\n");
1737       return -1;
1738     }
1739   else
1740     {
1741       switch (sciGetEntityType (pobj))
1742         {
1743         case SCI_TEXT:
1744           (sciGetFontContext(pobj))->textorientation = textorientation;
1745           return 0;
1746           break;
1747         case SCI_TITLE:
1748           (sciGetFontContext(pobj))->textorientation =      textorientation;
1749           return 0;
1750           break;
1751         case SCI_LEGEND:
1752           (sciGetFontContext(pobj))->textorientation =      textorientation;
1753           return 0;
1754           break;
1755         case SCI_AXES:
1756           (sciGetFontContext(pobj))->textorientation =      textorientation;
1757           return 0;
1758           break;
1759         case SCI_MENU:
1760           (sciGetFontContext(pobj))->textorientation =      textorientation;
1761           return 0;
1762           break;
1763         case SCI_MENUCONTEXT:
1764           (sciGetFontContext(pobj))->textorientation =      textorientation;
1765           return 0;
1766           break;
1767         case SCI_STATUSB:
1768           (sciGetFontContext(pobj))->textorientation =      textorientation;
1769           break;
1770         case SCI_SUBWIN: /* F.Leray 08.04.04*/
1771           /* Is text orientation usefull with Axes ?? */
1772           (sciGetFontContext(pobj))->textorientation = textorientation;
1773           return 0;
1774           break;
1775         case SCI_FIGURE: /* F.Leray 08.04.04*/
1776           (sciGetFontContext(pobj))->textorientation = textorientation;
1777           return 0;
1778           break;
1779         case SCI_LABEL: /* F.Leray 28.05.04*/
1780           (sciGetFontContext(pobj))->textorientation = textorientation;
1781           return 0;
1782           break;
1783         case SCI_ARC:
1784         case SCI_SEGS: 
1785         case SCI_FEC: 
1786         case SCI_GRAYPLOT: 
1787         case SCI_POLYLINE:
1788         case SCI_RECTANGLE:
1789         case SCI_SURFACE:
1790         case SCI_LIGHT:
1791         case SCI_PANNER:
1792         case SCI_SBH:
1793         case SCI_SBV:
1794         case SCI_AGREG:
1795         case SCI_UIMENU:
1796         default:
1797           /* pas de context graphics */
1798           sciprint ("This object has no  font width \n");
1799           return -1;
1800           break;
1801
1802         }
1803     }
1804   return 0;
1805 }
1806
1807 /**sciSetFontOrientation
1808  * Sets the font Orientation
1809  */
1810 int
1811 sciSetFontOrientation (sciPointObj * pobj, int textorientation)
1812 {
1813   
1814   if ( sciGetFontOrientation( pobj ) == textorientation )
1815   {
1816     /* nothingto do */
1817     return 1 ;
1818   }
1819   return sciInitFontOrientation( pobj, textorientation ) ;
1820   
1821 }
1822
1823 int sciSetStrings( sciPointObj * pObjDest, const StringMatrix * pStrings )
1824 {
1825   switch (sciGetEntityType (pObjDest))
1826     {
1827     case SCI_TEXT:
1828       deleteMatrix( pTEXT_FEATURE (pObjDest)->pStrings ) ;
1829       pTEXT_FEATURE (pObjDest)->pStrings = copyStringMatrix( pStrings ) ;
1830       if ( pTEXT_FEATURE (pObjDest)->pStrings == NULL )
1831       {
1832         return -1 ;
1833       }
1834       break;
1835     case SCI_TITLE:
1836       deleteMatrix( pTITLE_FEATURE (pObjDest)->text.pStrings ) ;
1837       pTITLE_FEATURE (pObjDest)->text.pStrings = copyStringMatrix( pStrings ) ;
1838       if ( pTITLE_FEATURE (pObjDest)->text.pStrings == NULL )
1839       {
1840         return -1 ;
1841       }
1842       break;
1843     case SCI_LEGEND:
1844       deleteMatrix( pLEGEND_FEATURE (pObjDest)->text.pStrings ) ;
1845       pLEGEND_FEATURE (pObjDest)->text.pStrings = copyStringMatrix( pStrings ) ;
1846       if ( pLEGEND_FEATURE (pObjDest)->text.pStrings == NULL )
1847       {
1848         return -1 ;
1849       }
1850       break;
1851     case SCI_LABEL: /* F.Leray 28.05.04 */
1852       return sciSetStrings( pLABEL_FEATURE(pObjDest)->text, pStrings ) ;
1853       break;
1854     case SCI_UIMENU:
1855       deleteMatrix( pUIMENU_FEATURE (pObjDest)->label.pStrings ) ;
1856       pUIMENU_FEATURE (pObjDest)->label.pStrings = copyStringMatrix( pStrings ) ;
1857       if ( pUIMENU_FEATURE (pObjDest)->label.pStrings == NULL )
1858       {
1859         return -1 ;
1860       }
1861       break;
1862     case SCI_FIGURE:
1863     case SCI_SUBWIN:
1864     case SCI_ARC:
1865     case SCI_SEGS: 
1866     case SCI_FEC:
1867     case SCI_GRAYPLOT: 
1868     case SCI_POLYLINE:
1869     case SCI_RECTANGLE:
1870     case SCI_SURFACE:
1871     case SCI_LIGHT:
1872     case SCI_AXES:
1873     case SCI_PANNER:
1874     case SCI_SBH:
1875     case SCI_SBV:
1876     case SCI_MENU:
1877     case SCI_MENUCONTEXT:
1878     case SCI_STATUSB:
1879     case SCI_AGREG:
1880     default:
1881       sciprint ("This object has no text !\n");
1882       return -1;
1883       break;
1884     }
1885   return 0;
1886 }
1887
1888 /**sciSetText
1889  * Sets the Text in TEXT, TITLE or LEGEND
1890  * @param sciPointObj * pobj: the pointer to the entity
1891  * @param char *text[] : the text which has to be put
1892  * @param int nbRow : the number of row of the text matrix
1893  * @param int nbCol : the number of col of the text matrix
1894  * @return  0 if OK, -1 if not
1895  */
1896 int
1897 sciSetText (sciPointObj * pobj, char ** text, int nbRow, int nbCol )
1898 {
1899   switch (sciGetEntityType (pobj))
1900     {
1901     case SCI_TEXT:
1902       deleteMatrix( pTEXT_FEATURE (pobj)->pStrings ) ;
1903       pTEXT_FEATURE (pobj)->pStrings = newFullStringMatrix( text, nbRow, nbCol ) ;
1904       if ( pTEXT_FEATURE (pobj)->pStrings == NULL )
1905       {
1906         return -1 ;
1907       }
1908       break;
1909     case SCI_TITLE:
1910       deleteMatrix( pTITLE_FEATURE (pobj)->text.pStrings ) ;
1911       pTITLE_FEATURE (pobj)->text.pStrings = newFullStringMatrix( text, nbRow, nbCol ) ;
1912       if ( pTITLE_FEATURE (pobj)->text.pStrings == NULL )
1913       {
1914         return -1 ;
1915       }
1916       break;
1917     case SCI_LEGEND:
1918       deleteMatrix( pLEGEND_FEATURE (pobj)->text.pStrings ) ;
1919       pLEGEND_FEATURE (pobj)->text.pStrings = newFullStringMatrix( text, nbRow, nbCol ) ;
1920       if ( pLEGEND_FEATURE (pobj)->text.pStrings == NULL )
1921       {
1922         return -1 ;
1923       }
1924       break;
1925     case SCI_LABEL: /* F.Leray 28.05.04 */
1926       return sciSetText( pLABEL_FEATURE(pobj)->text, text, nbRow, nbCol ) ;
1927       break;
1928     case SCI_UIMENU:
1929       deleteMatrix( pUIMENU_FEATURE (pobj)->label.pStrings ) ;
1930       pUIMENU_FEATURE (pobj)->label.pStrings = newFullStringMatrix( text, nbRow, nbCol ) ;
1931       if ( pUIMENU_FEATURE (pobj)->label.pStrings == NULL )
1932       {
1933         return -1 ;
1934       }
1935       break;
1936     case SCI_FIGURE:
1937     case SCI_SUBWIN:
1938     case SCI_ARC:
1939     case SCI_SEGS: 
1940     case SCI_FEC:
1941     case SCI_GRAYPLOT: 
1942     case SCI_POLYLINE:
1943     case SCI_RECTANGLE:
1944     case SCI_SURFACE:
1945     case SCI_LIGHT:
1946     case SCI_AXES:
1947     case SCI_PANNER:
1948     case SCI_SBH:
1949     case SCI_SBV:
1950     case SCI_MENU:
1951     case SCI_MENUCONTEXT:
1952     case SCI_STATUSB:
1953     case SCI_AGREG:
1954     default:
1955       sciprint ("This object has no text !\n");
1956       return -1;
1957       break;
1958     }
1959   return 0;
1960 }
1961
1962
1963 int sciInitFontBackground( sciPointObj * pobj, int colorindex )
1964 {
1965   colorindex = sciSetGoodIndex(pobj,colorindex); /* Adding F.Leray 31.03.04*/
1966   switch (sciGetEntityType (pobj))
1967     {
1968     case SCI_TEXT:
1969       (sciGetFontContext(pobj))->backgroundcolor =
1970         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));;
1971       break;
1972     case SCI_TITLE:
1973       (sciGetFontContext(pobj))->backgroundcolor =
1974         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
1975       break;
1976     case SCI_LEGEND:
1977       (sciGetFontContext(pobj))->backgroundcolor =
1978         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
1979       break;
1980     case SCI_AXES:
1981       (sciGetFontContext(pobj))->backgroundcolor =
1982         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
1983       break;
1984     case SCI_MENU:
1985       (sciGetFontContext(pobj))->backgroundcolor =
1986         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
1987       break;
1988     case SCI_MENUCONTEXT:
1989       (sciGetFontContext(pobj))->backgroundcolor =
1990         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
1991       break;
1992     case SCI_STATUSB:
1993       (sciGetFontContext(pobj))->backgroundcolor =
1994         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
1995       break;
1996     case SCI_SUBWIN: /* F.Leray 08.04.04 */
1997       (sciGetFontContext(pobj))->backgroundcolor =
1998         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
1999       break;
2000     case SCI_FIGURE: /* F.Leray 08.04.04 */
2001       (sciGetFontContext(pobj))->backgroundcolor =
2002         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
2003       break;
2004     case SCI_LABEL: /* F.Leray 28.05.04 */
2005       (sciGetFontContext(pobj))->backgroundcolor =
2006         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
2007       break;
2008     case SCI_UIMENU:
2009     case SCI_ARC:
2010     case SCI_SEGS: 
2011     case SCI_FEC: 
2012     case SCI_GRAYPLOT: 
2013     case SCI_POLYLINE:
2014     case SCI_RECTANGLE:
2015     case SCI_SURFACE:
2016     case SCI_LIGHT:
2017     case SCI_PANNER:
2018     case SCI_SBH:
2019     case SCI_SBV:
2020     case SCI_AGREG:
2021     default:
2022       return -1;
2023       break;
2024     }
2025   return 0;
2026 }
2027
2028 /**sciSetFontBackground
2029  * Sets the background color
2030  * @param sciPointObj * pobj: the pointer to the entity
2031  * @return  int 0 if OK, -1 if not
2032  */
2033 int
2034 sciSetFontBackground (sciPointObj * pobj, int colorindex)
2035 {
2036   colorindex = sciSetGoodIndex(pobj,colorindex); /* Adding F.Leray 31.03.04*/
2037
2038   if ( sciGetFontBackground( pobj ) == colorindex )
2039   {
2040     /* nothing to do */
2041     return 1 ;
2042   }
2043   return sciInitFontBackground( pobj, colorindex ) ;
2044   
2045 }
2046
2047 int sciInitFontForeground( sciPointObj * pobj, int colorindex )
2048 {
2049   colorindex = sciSetGoodIndex(pobj,colorindex); /* Adding F.Leray 31.03.04*/
2050
2051   switch (sciGetEntityType (pobj))
2052     {
2053     case SCI_TEXT:
2054       (sciGetFontContext(pobj))->foregroundcolor =
2055         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
2056       break;
2057     case SCI_TITLE:
2058       (sciGetFontContext(pobj))->foregroundcolor =
2059         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
2060       break;
2061     case SCI_LEGEND:
2062       (sciGetFontContext(pobj))->foregroundcolor =
2063         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
2064       break;
2065     case SCI_AXES:
2066       (sciGetFontContext(pobj))->foregroundcolor =
2067         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
2068       break;
2069     case SCI_MENU:
2070       (sciGetFontContext(pobj))->foregroundcolor =
2071         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
2072       break;
2073     case SCI_MENUCONTEXT:
2074       (sciGetFontContext(pobj))->foregroundcolor =
2075         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
2076       break;
2077     case SCI_STATUSB:
2078       (sciGetFontContext(pobj))->foregroundcolor =
2079         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
2080       break;
2081     case SCI_SUBWIN: /* F.Leray 08.04.04 */
2082       (sciGetFontContext(pobj))->foregroundcolor =
2083         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
2084       break;
2085     case SCI_FIGURE: /* F.Leray 08.04.04 */
2086       (sciGetFontContext(pobj))->foregroundcolor =
2087         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
2088       break;
2089     case SCI_LABEL: /* F.Leray 08.04.04 */
2090       (sciGetFontContext(pobj))->foregroundcolor =
2091         Max (0, Min (colorindex - 1, sciGetNumColors (pobj) + 1));
2092       break;
2093     case SCI_UIMENU:
2094     case SCI_ARC:
2095     case SCI_SEGS: 
2096     case SCI_FEC: 
2097     case SCI_GRAYPLOT: 
2098     case SCI_POLYLINE:
2099     case SCI_RECTANGLE:
2100     case SCI_SURFACE:
2101     case SCI_LIGHT:
2102     case SCI_PANNER:
2103     case SCI_SBH:
2104     case SCI_SBV:
2105     case SCI_AGREG:
2106     default:
2107       return -1;
2108       break;
2109     }
2110   return 0;
2111 }
2112
2113 /**sciSetFontForeground
2114  * Sets the foreground color
2115  * @param sciPointObj * pobj: the pointer to the entity
2116  * @return  int 0 if OK, if not
2117  */
2118 int
2119 sciSetFontForeground (sciPointObj * pobj, int colorindex)
2120 {
2121   colorindex = sciSetGoodIndex(pobj,colorindex); /* Adding F.Leray 31.03.04*/
2122   
2123   if ( sciGetFontForeground( pobj ) == colorindex )
2124   {
2125     /* nothing to do */
2126     return 1 ;
2127   }
2128
2129   return sciInitFontForeground( pobj, colorindex ) ;
2130 }
2131
2132
2133 int sciInitFontStyle( sciPointObj * pobj, int iAttributes )
2134 {
2135   switch (sciGetEntityType (pobj))
2136     {
2137     case SCI_TEXT:
2138     case SCI_TITLE:
2139     case SCI_LEGEND:
2140     case SCI_SUBWIN: 
2141     case SCI_FIGURE: 
2142     case SCI_LABEL: /* F.Leray 10.06.04 */
2143       (sciGetFontContext(pobj))->fonttype =iAttributes;
2144       break;
2145     case SCI_UIMENU:
2146     case SCI_ARC:
2147     case SCI_SEGS: 
2148     case SCI_FEC: 
2149     case SCI_GRAYPLOT: 
2150     case SCI_POLYLINE:
2151     case SCI_RECTANGLE:
2152     case SCI_SURFACE:
2153     case SCI_LIGHT:
2154     case SCI_AXES:
2155     case SCI_PANNER:
2156     case SCI_SBH:
2157     case SCI_SBV:
2158     case SCI_MENU:
2159     case SCI_MENUCONTEXT:
2160     case SCI_STATUSB:
2161     case SCI_AGREG:
2162     default:
2163       return -1;
2164       break;
2165     }
2166   return 0;
2167 }
2168
2169 /**sciSetFontStyle
2170  * Sets the font style
2171  * @param sciPointObj * pobj: the pointer to the entity
2172  * @param  int iAttributes (a logical mask with SCI_ATTR_BOLD|SCI_ATTR_ITALIC|SCI_ATTR_UNDERLINE|SCI_ATTR_STRIKEOUT)
2173  * @return  int 0 if OK, -1 if not
2174  */
2175 int
2176 sciSetFontStyle (sciPointObj * pobj, int iAttributes )
2177 {
2178   if ( sciGetFontStyle( pobj ) == iAttributes )
2179   {
2180     /* nothing to do */
2181     return 1 ;
2182   }
2183   return sciInitFontStyle( pobj, iAttributes ) ;
2184   
2185 }
2186
2187
2188 /**sciSetFontName
2189  * Sets the font name 
2190  * @param sciPointObj * pobj: the pointer to the entity
2191  * @param  char *fontname
2192  * @param  int n
2193  * @return  int 0 if OK, -1 if not
2194  */
2195 int
2196 sciSetFontName (sciPointObj * pobj, char pfontname[], int n)
2197 {
2198   switch (sciGetEntityType (pobj))
2199     {
2200     case SCI_TEXT:
2201       /*      if (realloc
2202               ( (sciGetFontContext(pobj))->pfontname,
2203               n * sizeof (char)) == NULL)
2204               return -1;
2205               strncpy ( (sciGetFontContext(pobj))->pfontname, pfontname, n);
2206               (sciGetFontContext(pobj))->fontnamelen = n;*/
2207       return -1 ;
2208       break;
2209     case SCI_TITLE:
2210       /*if (realloc
2211         (       (sciGetFontContext(pobj))->pfontname,
2212         n * sizeof (char)) == NULL)
2213         return -1;
2214         strncpy (       (sciGetFontContext(pobj))->pfontname, pfontname,
2215         n);
2216         (sciGetFontContext(pobj))->fontnamelen = n;*/
2217       return -1 ;
2218       break;
2219     case SCI_LEGEND:
2220       /*if (realloc
2221         (       (sciGetFontContext(pobj))->pfontname,
2222         n * sizeof (char)) == NULL)
2223         return -1;
2224         strncpy (       (sciGetFontContext(pobj))->pfontname, pfontname,
2225         n);
2226         (sciGetFontContext(pobj))->fontnamelen = n;*/
2227       return -1 ;
2228       break;
2229     case SCI_FIGURE:
2230     case SCI_SUBWIN:
2231     case SCI_ARC:
2232     case SCI_SEGS: 
2233     case SCI_FEC: 
2234     case SCI_GRAYPLOT: 
2235     case SCI_POLYLINE:
2236     case SCI_RECTANGLE:
2237     case SCI_SURFACE:
2238     case SCI_LIGHT:
2239     case SCI_AXES:
2240     case SCI_PANNER:
2241     case SCI_SBH:
2242     case SCI_SBV:
2243     case SCI_MENU:
2244     case SCI_MENUCONTEXT:
2245     case SCI_STATUSB:
2246     case SCI_AGREG:
2247     case SCI_LABEL: /* None for the moment F.Leray 28.05.04 */
2248     case SCI_UIMENU:
2249     default:
2250       return -1;
2251       break;
2252     }
2253   return 0;
2254 }
2255
2256
2257 int sciInitTextPosX( sciPointObj * pobj, double x )
2258 {
2259    switch (sciGetEntityType (pobj))
2260     {
2261     case SCI_TEXT:
2262       pTEXT_FEATURE (pobj)->x = x;
2263       return 0;
2264       break;
2265     case SCI_TITLE:
2266     case SCI_LEGEND:
2267     case SCI_FIGURE:
2268     case SCI_SUBWIN:
2269     case SCI_ARC:
2270     case SCI_SEGS: 
2271     case SCI_FEC: 
2272     case SCI_GRAYPLOT: 
2273     case SCI_POLYLINE:
2274     case SCI_RECTANGLE:
2275     case SCI_SURFACE:
2276     case SCI_LIGHT:
2277     case SCI_AXES:
2278     case SCI_PANNER:
2279     case SCI_SBH:
2280     case SCI_SBV:
2281     case SCI_MENU:
2282     case SCI_MENUCONTEXT:
2283     case SCI_STATUSB:
2284     case SCI_AGREG:
2285     case SCI_LABEL: /* None for the moment F.Leray 28.05.04 */
2286     case SCI_UIMENU:
2287     default:
2288       sciprint ("This object has no text position!\n");
2289       return 0;
2290       break;
2291     }
2292   return -1;
2293 }
2294
2295 /**sciSetTextPosX
2296  * Sets size of Text in TEXT, TITLE or LEGEND
2297  * @param sciPointObj * pobj: the pointer to the entity
2298  * @return  int 0 if not OK, over 0 if ok
2299  */
2300 int
2301 sciSetTextPosX (sciPointObj * pobj, double x)
2302 {
2303
2304   if ( sciGetTextPosX( pobj ) == x )
2305   {
2306     /* nothing to do */
2307     return 1 ;
2308   }
2309   return sciInitTextPosX( pobj, x ) ;
2310  
2311 }
2312
2313 int sciInitTextPosY( sciPointObj * pobj, double y )
2314 {
2315   switch (sciGetEntityType (pobj))
2316     {
2317     case SCI_TEXT:
2318       pTEXT_FEATURE (pobj)->y = y;
2319       return 0;
2320       break;
2321     case SCI_TITLE:
2322     case SCI_LEGEND:
2323     case SCI_FIGURE:
2324     case SCI_SUBWIN:
2325     case SCI_ARC:
2326     case SCI_SEGS: 
2327     case SCI_FEC: 
2328     case SCI_GRAYPLOT: 
2329     case SCI_POLYLINE:
2330     case SCI_RECTANGLE:
2331     case SCI_SURFACE:
2332     case SCI_LIGHT:
2333     case SCI_AXES:
2334     case SCI_PANNER:
2335     case SCI_SBH:
2336     case SCI_SBV:
2337     case SCI_MENU:
2338     case SCI_MENUCONTEXT:
2339     case SCI_STATUSB:
2340     case SCI_AGREG:
2341     case SCI_LABEL: /* None for the moment F.Leray 28.05.04 */
2342     case SCI_UIMENU:
2343     default:
2344       sciprint ("This object has no text position!\n");
2345       return 0;
2346       break;
2347     }
2348   return -1;
2349 }
2350
2351 /**sciSetTextPosY
2352  * Sets size of Text in TEXT, TITLE or LEGEND
2353  * @param sciPointObj * pobj: the pointer to the entity
2354  * @return  int 0 if not OK, over 0 if ok
2355  */
2356 int
2357 sciSetTextPosY (sciPointObj * pobj, double y)
2358 {
2359
2360   if ( sciGetTextPosY( pobj ) == y )
2361   {
2362     /* nothing to do */
2363     return 1 ;
2364   }
2365   return sciInitTextPosX( pobj, y ) ;
2366   
2367 }
2368
2369
2370 /**sciSetTitlePos
2371  * Sets the Title Position in the graphique window. This function is actualy private
2372  * @param sciPointObj * pobj: the pointer to the entity
2373  * @return 0 if ok, -1 if not
2374  */
2375 int
2376 sciSetTitlePos (sciPointObj * pobj, int x, int y)
2377 {
2378   switch (sciGetEntityType (pobj))
2379     {
2380     case SCI_TITLE:
2381       pTITLE_FEATURE (pobj)->pos.x = x;
2382       pTITLE_FEATURE (pobj)->pos.y = y;
2383       break;
2384     case SCI_FIGURE:
2385     case SCI_SUBWIN:
2386     case SCI_TEXT:
2387     case SCI_LEGEND:
2388     case SCI_ARC:
2389     case SCI_SEGS: 
2390     case SCI_FEC: 
2391     case SCI_GRAYPLOT: 
2392     case SCI_POLYLINE:
2393     case SCI_RECTANGLE:
2394     case SCI_SURFACE:
2395     case SCI_LIGHT:
2396     case SCI_AXES:
2397     case SCI_PANNER:
2398     case SCI_SBH:
2399     case SCI_SBV:
2400     case SCI_MENU:
2401     case SCI_MENUCONTEXT:
2402     case SCI_STATUSB:
2403     case SCI_AGREG:
2404     case SCI_LABEL: /* F.Leray 28.05.04 */
2405     case SCI_UIMENU:
2406     default:
2407       sciprint ("Your are not using a title object !\n");
2408       return -1;
2409       break;
2410     }
2411   return 0;
2412 }
2413
2414
2415
2416 /**sciSetTitlePlace
2417  * Sets the Title Place  with SCI_TITLE_IN_TOP or SCI_TITLE_IN_BOTTOM and calculate the real position in the window
2418  * @param sciPointObj * pobj: the pointer to the entity
2419  * @return 0 if ok, -1 if not
2420  */
2421 int
2422 sciSetTitlePlace (sciPointObj * pobj, sciTitlePlace place)
2423 {
2424   int x = 0;
2425   int y = 0;
2426
2427   if (sciGetEntityType (pobj) == SCI_TITLE)
2428     {
2429       pTITLE_FEATURE (pobj)->titleplace = place;
2430       /* calcul de l emplacement relatif du titre 
2431        * en fonction de la taille de la police 
2432        * de la fenetre...
2433        */
2434       sciSetTitlePos (pobj, x, y);
2435       return 0;
2436     }
2437   else
2438     sciprint ("Your are not using a title object !\n");
2439   return -1;
2440 }
2441
2442
2443
2444 int sciInitLegendPlace( sciPointObj * pobj, sciLegendPlace place )
2445 {
2446   int x = 0;
2447   int y = 0;
2448
2449   if (sciGetEntityType (pobj) == SCI_TITLE)
2450   {
2451     pLEGEND_FEATURE (pobj)->place = place;
2452     /* calcul de l emplacement relatif du titre 
2453      * en fonction de la taille de la police 
2454      * de la fenetre...
2455      */
2456     return sciInitLegendPos (pobj, x, y);
2457   }
2458   
2459   sciprint ("Your are not using a legend object !\n");
2460   return -1;
2461 }
2462
2463 /**sciSetLegendPlace
2464  * Sets the Title Place  with SCI_TITLE_IN_TOP or SCI_TITLE_IN_BOTTOM and calculate the real position in the window
2465  * @param sciPointObj * pobj: the pointer to the entity
2466  * @return 0 if ok, -1 if not
2467  */
2468 int
2469 sciSetLegendPlace (sciPointObj * pobj, sciLegendPlace place)
2470 {
2471   
2472
2473   if ( sciGetLegendPlace( pobj ) == place )
2474   {
2475     /* nothing to do */
2476     return 1 ;
2477   }
2478   return sciInitLegendPlace( pobj, place ) ;
2479   
2480 }
2481
2482 int sciInitLegendPos( sciPointObj * pobj, int x, int y )
2483 {
2484   switch (sciGetEntityType (pobj))
2485     {
2486     case SCI_LEGEND:
2487       pLEGEND_FEATURE (pobj)->pos.x = x;
2488       pLEGEND_FEATURE (pobj)->pos.y = y;
2489       break;
2490     case SCI_TITLE:
2491     case SCI_FIGURE:
2492     case SCI_SUBWIN:
2493     case SCI_TEXT:
2494     case SCI_ARC:
2495     case SCI_SEGS: 
2496     case SCI_FEC: 
2497     case SCI_GRAYPLOT: 
2498     case SCI_POLYLINE:
2499     case SCI_RECTANGLE:
2500     case SCI_SURFACE:
2501     case SCI_LIGHT:
2502     case SCI_AXES:
2503     case SCI_PANNER:
2504     case SCI_SBH:
2505     case SCI_SBV:
2506     case SCI_MENU:
2507     case SCI_MENUCONTEXT:
2508     case SCI_STATUSB:
2509     case SCI_AGREG:
2510     case SCI_LABEL: /* F.Leray 28.05.04 */
2511     case SCI_UIMENU:
2512     default:
2513       sciprint ("Your are not using a legend object !\n");
2514       return -1;
2515       break;
2516     }
2517   return 0;
2518 }
2519
2520 /**sciSetLegendPos
2521  * Sets the Legend Position in the window
2522  * @param sciPointObj * pobj: the pointer to the entity
2523  * @return 0 if ok, -1 if not
2524  */
2525 int
2526 sciSetLegendPos (sciPointObj * pobj, int x, int y)
2527 {
2528
2529   POINT2D pos = sciGetLegendPos( pobj ) ;
2530   if ( pos.x == x && pos.y == y )
2531   {
2532     /* nothing to do */
2533     return 1 ;
2534   }
2535   return sciInitLegendPos( pobj, x, y ) ;
2536 }
2537
2538 int sciInitIsClipping( sciPointObj * pobj, int value )
2539 {
2540   switch (sciGetEntityType (pobj))
2541     {
2542     case SCI_SUBWIN:
2543       pSUBWIN_FEATURE (pobj)->isclip = value;
2544       if(value>0) pSUBWIN_FEATURE (pobj)->clip_region_set=1;
2545       break;
2546     case SCI_ARC:
2547       pARC_FEATURE (pobj)->isclip = value;
2548       if(value>0) pARC_FEATURE (pobj)->clip_region_set=1;
2549       break;
2550     case SCI_POLYLINE:
2551       pPOLYLINE_FEATURE (pobj)->isclip = value;
2552       if(value>0) pPOLYLINE_FEATURE (pobj)->clip_region_set=1;
2553       break;
2554     case SCI_RECTANGLE:
2555       pRECTANGLE_FEATURE (pobj)->isclip = value;
2556       if(value>0) pRECTANGLE_FEATURE (pobj)->clip_region_set=1;
2557       break;   
2558     case SCI_SEGS: 
2559       pSEGS_FEATURE (pobj)->isclip = value;
2560       if(value>0) pSEGS_FEATURE (pobj)->clip_region_set=1;
2561       break;       
2562     case SCI_TEXT: 
2563       pTEXT_FEATURE (pobj)->isclip = value;
2564       if(value>0) pTEXT_FEATURE (pobj)->clip_region_set=1;
2565       break;   
2566     case SCI_LIGHT: 
2567       pLIGHT_FEATURE (pobj)->isclip = value;
2568       if(value>0) pLIGHT_FEATURE (pobj)->clip_region_set=1;
2569       break;   
2570     case SCI_AXES: 
2571       pAXES_FEATURE (pobj)->isclip = value;
2572       if(value>0) pAXES_FEATURE (pobj)->clip_region_set=1;
2573       break;
2574     case SCI_SURFACE:  
2575     case SCI_LEGEND: 
2576     case SCI_TITLE:
2577     case SCI_FEC: 
2578     case SCI_GRAYPLOT:    
2579     case SCI_AGREG:
2580     case SCI_FIGURE:
2581     case SCI_SBH:   
2582     case SCI_PANNER:
2583     case SCI_SBV:
2584     case SCI_MENU:
2585     case SCI_MENUCONTEXT:
2586     case SCI_STATUSB:
2587     case SCI_LABEL: /* F.Leray 28.05.04 */
2588     case SCI_UIMENU:
2589     default:
2590       return -1 ;
2591       break;
2592     }
2593   return 0 ;
2594 }
2595
2596 /**sciSetIsClipping*/
2597 int
2598 sciSetIsClipping( sciPointObj * pobj, int value )
2599 {
2600
2601   if ( sciGetIsClipping( pobj ) == value )
2602   {
2603     /* nothing to do */
2604     return 1 ;
2605   }
2606   return sciInitIsClipping( pobj, value ) ;
2607   
2608 }
2609
2610
2611 /**sciSetClipping
2612  * Sets the clipping area
2613  * @author Djalel ABDEMOUCHE
2614  * 29/11/2002
2615  */
2616 int
2617 sciSetClipping (sciPointObj * pobj, double pclip[4] )
2618 {
2619   int i;
2620
2621   switch (sciGetEntityType (pobj))
2622     {
2623     case SCI_SUBWIN:
2624       for(i=0;i<4;i++) pSUBWIN_FEATURE (pobj)->clip_region[i] = pclip[i];
2625       break;
2626     case SCI_ARC:
2627       for(i=0;i<4;i++) pARC_FEATURE (pobj)->clip_region[i] = pclip[i];
2628       break;
2629     case SCI_POLYLINE:
2630       for(i=0;i<4;i++) pPOLYLINE_FEATURE (pobj)->clip_region[i] = pclip[i];
2631       break;
2632     case SCI_RECTANGLE:
2633       for(i=0;i<4;i++) pRECTANGLE_FEATURE (pobj)->clip_region[i] = pclip[i];
2634       break;
2635     case SCI_SEGS: 
2636       for(i=0;i<4;i++) pSEGS_FEATURE (pobj)->clip_region[i] = pclip[i];
2637       break;      
2638     case SCI_TEXT: 
2639       for(i=0;i<4;i++) pTEXT_FEATURE (pobj)->clip_region[i] = pclip[i];
2640       break;   
2641     case SCI_LIGHT: 
2642       for(i=0;i<4;i++) pLIGHT_FEATURE (pobj)->clip_region[i] = pclip[i]; /* not used for now 04.04.2005 */
2643       break;   
2644     case SCI_AXES: 
2645       for(i=0;i<4;i++) pAXES_FEATURE (pobj)->clip_region[i] = pclip[i];
2646       break;
2647       /* not used for now 04.04.2005 */
2648       /*     case SCI_SURFACE: */
2649       /*       for(i=0;i<4;i++) pSURFACE_FEATURE (pobj)->clip_region[i] = pclip[i]; */
2650       /*       break; */
2651       /*     case SCI_LEGEND:  */
2652       /*       for(i=0;i<4;i++) pLEGEND_FEATURE (pobj)->clip_region[i] = pclip[i]; */
2653       /*       break; */
2654       /*     case SCI_TITLE:   */
2655       /*       for(i=0;i<4;i++) pSURFACE_FEATURE (pobj)->clip_region[i] = pclip[i]; */
2656       /*       break; */
2657       /*     case SCI_AGREG:  */
2658       /*       for(i=0;i<4;i++) pAGREG_FEATURE (pobj)->clip_region[i] = pclip[i]; /\* not used for now 04.04.2005 *\/ */
2659       /*       break; */
2660       /*     case SCI_FEC:  */
2661       /*       for(i=0;i<4;i++) pFEC_FEATURE (pobj)->clip_region[i] = pclip[i]; /\* not used for now 04.04.2005 *\/ */
2662       /*       break; */
2663       /*     case SCI_GRAYPLOT: */
2664       /*       for(i=0;i<4;i++) pGRAYPLOT_FEATURE (pobj)->clip_region[i] = pclip[i]; /\* not used for now 04.04.2005 *\/ */
2665       /*       break; */
2666     case SCI_LABEL:
2667       return sciSetClipping( pLABEL_FEATURE (pobj)->text, pclip ) ;
2668       break;
2669     case SCI_SURFACE:
2670     case SCI_LEGEND: 
2671     case SCI_TITLE:    
2672     case SCI_AGREG:
2673     case SCI_FEC: 
2674     case SCI_GRAYPLOT:
2675     case SCI_FIGURE:
2676     case SCI_UIMENU:
2677     default:
2678       return -1;
2679       break;
2680     } 
2681   return 0;
2682
2683 }
2684
2685
2686 int sciInitHighLight( sciPointObj * pobj, BOOL value )
2687 {
2688   switch (sciGetEntityType (pobj))
2689     {
2690     case SCI_FIGURE:
2691       /* (sciGetGraphicMode (pobj))->highlight = value; unused */
2692       break;
2693     case SCI_SUBWIN:
2694       /* la valeur est herite du parent...pour le moment */
2695
2696       /* (sciGetGraphicMode (pobj))->highlight = value;
2697          sciSetHighLight (sciGetParentFigure (pobj), value);unused */
2698       break;
2699     case SCI_TEXT:
2700     case SCI_TITLE:
2701     case SCI_LEGEND:
2702     case SCI_ARC:
2703     case SCI_SEGS: 
2704     case SCI_FEC: 
2705     case SCI_GRAYPLOT: 
2706     case SCI_POLYLINE:
2707     case SCI_RECTANGLE:
2708     case SCI_SURFACE:
2709     case SCI_LIGHT:
2710     case SCI_AXES:
2711     case SCI_MENU:
2712     case SCI_MENUCONTEXT:
2713     case SCI_AGREG:
2714     case SCI_LABEL: /* F.Leray 28.05.04 */
2715     case SCI_UIMENU:
2716     default:
2717       sciprint ("We cannot highlight this object\n");
2718       return -1 ;
2719       break;
2720     }
2721   return 0 ;
2722 }
2723
2724 /**sciSetHighLight
2725  * Tunrs ON or OFF the highlighting of the objects when there are selected
2726  */
2727
2728 int
2729 sciSetHighLight (sciPointObj * pobj, BOOL value)
2730 {
2731
2732   if (  sciGetHighLight( pobj ) == value )
2733   {
2734     /* nothing to do */
2735     return 1 ;
2736   }
2737   return sciInitHighLight( pobj, value ) ;
2738 }
2739
2740
2741 int sciInitAddPlot( sciPointObj * pobj, BOOL value )
2742 {
2743   switch (sciGetEntityType (pobj))
2744     {
2745     case SCI_FIGURE:
2746       (sciGetGraphicMode (pobj))->addplot = value;
2747       break;
2748     case SCI_SUBWIN:
2749       (sciGetGraphicMode (pobj))->addplot = value;
2750       /*(sciGetGraphicMode (sciGetParentFigure(pobj)))->addplot = value;*/
2751       break;
2752     case SCI_TEXT:
2753     case SCI_TITLE:
2754     case SCI_LEGEND:
2755     case SCI_ARC:
2756     case SCI_SEGS: 
2757     case SCI_FEC: 
2758     case SCI_GRAYPLOT: 
2759     case SCI_POLYLINE:
2760     case SCI_RECTANGLE:
2761     case SCI_SURFACE:
2762     case SCI_LIGHT:
2763     case SCI_AXES:
2764     case SCI_MENU:
2765     case SCI_MENUCONTEXT:
2766     case SCI_AGREG:
2767     case SCI_LABEL: /* F.Leray 28.05.04 */
2768     case SCI_UIMENU:
2769     default:
2770       sciprint ("This object cannot be addploted\n");
2771       return -1 ;
2772       break;
2773     }
2774   return 0 ;
2775 }
2776
2777 /**sciSetAddPlot
2778  * Tunrs ON or OFF the possibility to draw multi plots in one graphic. 
2779  * If FALSE, plot is cleared before new drawing
2780  */
2781 int
2782 sciSetAddPlot (sciPointObj * pobj, BOOL value)
2783 {
2784   if ( sciGetAddPlot( pobj ) == value )
2785   {
2786     /* nothing to do */
2787     return 1 ;
2788   }
2789   return sciInitAddPlot( pobj, value ) ;
2790   
2791 }
2792
2793
2794 int sciInitAutoScale( sciPointObj * pobj, BOOL value )
2795 {
2796   switch (sciGetEntityType (pobj))
2797     {
2798     case SCI_FIGURE:
2799       if (pobj == getFigureModel())
2800         (sciGetGraphicMode (pobj))->autoscaling = value;
2801       else
2802         sciSetAutoScale(sciGetFirstTypedSelectedSon(pobj, SCI_SUBWIN),value);
2803       break;
2804     case SCI_SUBWIN:
2805       (sciGetGraphicMode (pobj))->autoscaling = value;
2806       break;
2807     case SCI_TEXT:
2808     case SCI_TITLE:
2809     case SCI_LEGEND:
2810     case SCI_ARC:
2811     case SCI_SEGS: 
2812     case SCI_FEC: 
2813     case SCI_GRAYPLOT: 
2814     case SCI_POLYLINE:
2815     case SCI_RECTANGLE:
2816     case SCI_SURFACE:
2817     case SCI_LIGHT:
2818     case SCI_AXES:
2819     case SCI_MENU:
2820     case SCI_MENUCONTEXT:
2821     case SCI_AGREG:
2822     case SCI_LABEL: /* F.Leray 28.05.04 */
2823     case SCI_UIMENU:
2824     default:
2825       sciprint ("This object cannot be autoscaled\n");
2826       return -1 ;
2827       break;
2828     }
2829
2830   return 0 ;
2831 }
2832
2833 /**sciSetAutoScale
2834  * Sets the mode if the plot is in zoom fit mode, or fixed by the user
2835  */
2836 int
2837 sciSetAutoScale (sciPointObj * pobj, BOOL value)
2838 {
2839   
2840   if ( sciGetAutoScale( pobj ) == value )
2841   {
2842     /* nothing to do */
2843     return 1 ;
2844   }
2845   return sciInitAutoScale( pobj, value ) ;
2846
2847 }
2848
2849 int sciInitZooming( sciPointObj * pobj, BOOL value )
2850 {
2851   switch (sciGetEntityType (pobj))
2852     {
2853     case SCI_FIGURE:
2854       (sciGetGraphicMode (pobj))->zooming = value;
2855       break;
2856     case SCI_SUBWIN:
2857       (sciGetGraphicMode (pobj))->zooming = value;
2858       /* the value is inhirated by the parent */
2859       sciSetZooming (sciGetParentFigure (pobj), value);
2860       break;
2861     case SCI_TEXT:
2862     case SCI_TITLE:
2863     case SCI_LEGEND:
2864     case SCI_ARC:
2865     case SCI_SEGS: 
2866     case SCI_FEC: 
2867     case SCI_GRAYPLOT: 
2868     case SCI_POLYLINE:
2869     case SCI_RECTANGLE:
2870     case SCI_SURFACE:
2871     case SCI_LIGHT:
2872     case SCI_AXES:
2873     case SCI_MENU:
2874     case SCI_MENUCONTEXT:
2875     case SCI_AGREG:
2876     case SCI_LABEL: /* F.Leray 28.05.04 */
2877     case SCI_UIMENU:
2878     default:
2879       sciprint ("\r\nThis object cannot be zoomed\r\n");
2880       return -1 ;
2881       break;
2882     }
2883
2884   return 0 ;
2885 }
2886
2887 /**sciSetZooming
2888  * Sets the zooming state of the object. Is it or not zommed right now
2889  */
2890 int
2891 sciSetZooming (sciPointObj * pobj, BOOL value)
2892 {
2893   if ( sciGetZooming( pobj ) == value )
2894   {
2895     /* nothing to do */
2896     return 1 ;
2897   }
2898   return sciInitZooming( pobj, value ) ;
2899   
2900 }
2901
2902
2903 /**sciSetDefaultValue
2904  * Sets the default values of figure properties
2905  * (graphics context, graphics mode, and graphics font)
2906  * @author Djalel ABDEMOUCHE
2907  */
2908 int
2909 sciSetDefaultValues (void)
2910 {
2911   if ((sciInitGraphicContext (sciGetCurrentFigure()) == -1) ||
2912       (sciInitGraphicMode (sciGetCurrentFigure()) == -1) ||
2913       (sciInitFontContext (sciGetCurrentFigure()) == -1)) /* Adding F.Leray 13.04.04 to have the completed init.*/
2914   {
2915     sciprint("\r\n default values cant not be loaded !");
2916     return -1 ;
2917   }
2918   else
2919   {
2920     C2F(dr)("xset","default",PI0,PI0,PI0,PI0,PI0,PI0,PD0,PD0,PD0,PD0,4L,7L); 
2921     return 0 ;
2922   }
2923 }
2924
2925
2926
2927 int sciInitXorMode( sciPointObj * pobj, int value )
2928 {
2929   if ( (pobj != getFigureModel()) && (pobj != getAxesModel()))
2930   {
2931     C2F(dr)("xset","alufunction",&(value),PI0,PI0,PI0,PI0,PI0,PD0,PD0,PD0,PD0,4L,11L);
2932   }
2933   switch (sciGetEntityType (pobj))
2934     {
2935     case SCI_FIGURE:
2936       (sciGetGraphicMode (pobj))->xormode = value;
2937       break;
2938     case SCI_SUBWIN: 
2939       /* the value is inhirated by the parent */
2940       sciSetXorMode (sciGetParentFigure (pobj), value);
2941       break;
2942     case SCI_TEXT:
2943     case SCI_TITLE:
2944     case SCI_LEGEND:
2945     case SCI_ARC:
2946     case SCI_SEGS: 
2947     case SCI_FEC: 
2948     case SCI_GRAYPLOT: 
2949     case SCI_POLYLINE:
2950     case SCI_RECTANGLE:
2951     case SCI_SURFACE:
2952     case SCI_LIGHT:
2953     case SCI_AXES:
2954     case SCI_MENU:
2955     case SCI_MENUCONTEXT:
2956     case SCI_AGREG:
2957     case SCI_LABEL: /* F.Leray 28.05.04 */
2958     case SCI_UIMENU:
2959     default:
2960       sciprint ("\r\nNothing to do\n");
2961       return -1 ;
2962       break;
2963     }
2964
2965   return 0 ;
2966 }
2967
2968 /**sciSetXorMode
2969  * Sets the xor mode
2970  * @param sciPointObj * pobj: the pointer to the entity
2971  * @param int value: the value of the xor mode
2972  * @return 
2973  * @author Djalel ABDEMOUCHE
2974  * @see sciGetXorMode
2975  */
2976 int
2977 sciSetXorMode (sciPointObj * pobj, int value)
2978
2979
2980   if ( sciGetXorMode( pobj ) == value )
2981   {
2982     /* nothing to do */
2983     return 1 ;
2984   }
2985   return sciInitXorMode( pobj, value ) ;
2986   
2987 }
2988
2989 int sciInitVisibility( sciPointObj * pobj, BOOL value )
2990 {
2991   
2992   switch (sciGetEntityType (pobj))
2993     {
2994     case SCI_FIGURE:
2995       pFIGURE_FEATURE (pobj)->visible = value;
2996       break;
2997     case SCI_SUBWIN:
2998       pSUBWIN_FEATURE (pobj)->visible = value;
2999       break;
3000     case SCI_TITLE:
3001       pTITLE_FEATURE (pobj)->visible = value;
3002       break;
3003     case SCI_LEGEND:
3004       pLEGEND_FEATURE (pobj)->visible = value;
3005       break;
3006     case SCI_ARC:
3007       pARC_FEATURE (pobj)->visible = value;
3008       break;
3009     case SCI_POLYLINE:
3010       pPOLYLINE_FEATURE (pobj)->visible = value;
3011       break;
3012     case SCI_RECTANGLE:
3013       pRECTANGLE_FEATURE (pobj)->visible = value;
3014       break;
3015     case SCI_SURFACE:
3016       pSURFACE_FEATURE (pobj)->visible = value;
3017       break;    
3018     case SCI_SEGS: 
3019       pSEGS_FEATURE (pobj)->visible = value;
3020       break;    
3021     case SCI_FEC: 
3022       pFEC_FEATURE (pobj)->visible = value;
3023       break;    
3024     case SCI_GRAYPLOT: 
3025       pGRAYPLOT_FEATURE (pobj)->visible = value;
3026       break;    
3027     case SCI_TEXT: 
3028       pTEXT_FEATURE (pobj)->visible = value;
3029       break;   
3030     case SCI_LIGHT: 
3031       pLIGHT_FEATURE (pobj)->visible = value;
3032       break;
3033     case SCI_AXES: 
3034       pAXES_FEATURE (pobj)->visible = value;
3035       break;    
3036     case SCI_AGREG: 
3037       pAGREG_FEATURE (pobj)->visible = value; 
3038       break;
3039     case SCI_LABEL: /* F.Leray 28.05.04 */
3040       return sciInitVisibility( pLABEL_FEATURE(pobj)->text, value ) ;
3041       break;
3042     case SCI_UIMENU:
3043       pUIMENU_FEATURE(pobj)->visible=value;     
3044       break;
3045     case SCI_CONSOLE:
3046       pCONSOLE_FEATURE(pobj)->visible = value ;
3047       break;
3048     case SCI_FRAME:
3049       pFRAME_FEATURE(pobj)->visible = value ;
3050       break;
3051     case SCI_WINDOW:
3052       pWINDOW_FEATURE(pobj)->visible = value ;
3053       break;
3054     case SCI_WINDOWFRAME:
3055       pWINDOWFRAME_FEATURE(pobj)->visible = value ;
3056       break;
3057     case SCI_SCREEN:
3058       pSCREEN_FEATURE(pobj)->visible = value ;
3059       break;
3060
3061     case SCI_SBH:   
3062     case SCI_PANNER:
3063     case SCI_SBV:
3064     case SCI_MENU:
3065     case SCI_MENUCONTEXT:
3066     case SCI_STATUSB:
3067     default:
3068       return -1 ;
3069       break;
3070     }
3071   return 0 ;
3072 }
3073
3074 /**sciSetVisibility*/
3075 int
3076 sciSetVisibility (sciPointObj * pobj, BOOL value)
3077 {  
3078   if ( sciGetVisibility( pobj ) == value )
3079   {
3080     /* nothing to do */
3081     return 1 ;
3082   }
3083   return sciInitVisibility( pobj, value ) ;
3084   
3085 }
3086
3087
3088 int sciInitResize( sciPointObj * pobj, BOOL value )
3089 {
3090   integer num1 = (value ? 1 : 0);
3091   
3092   if ( (pobj != getFigureModel()) && (pobj != getAxesModel()))
3093     { 
3094       if (sciGetScilabXgc (pobj)->CurResizeStatus != num1)
3095         {
3096           C2F(dr)("xset","wresize",&(num1),PI0,PI0,PI0,PI0,PI0,PD0,PD0,PD0,PD0,4L,5L);  
3097         }
3098     }
3099   switch (sciGetEntityType (pobj))
3100     {
3101     case SCI_FIGURE:
3102       (sciGetGraphicMode (pobj))->wresize = value;
3103       break;
3104     case SCI_SUBWIN:
3105       (sciGetGraphicMode (pobj))->wresize = value;
3106       break;
3107     case SCI_TEXT:
3108     case SCI_TITLE:
3109     case SCI_LEGEND:
3110     case SCI_ARC:
3111     case SCI_SEGS: 
3112     case SCI_FEC: 
3113     case SCI_GRAYPLOT: 
3114     case SCI_POLYLINE:
3115     case SCI_RECTANGLE:
3116     case SCI_SURFACE:
3117     case SCI_LIGHT:
3118     case SCI_AXES: 
3119     case SCI_MENU:
3120     case SCI_MENUCONTEXT:
3121     case SCI_AGREG:
3122     case SCI_LABEL: /* F.Leray 28.05.04 */
3123     case SCI_UIMENU:
3124     default:
3125       sciprint ("This object cannot be resized\n");
3126       return -1 ;
3127       break;
3128     }
3129   return 0 ;
3130 }
3131
3132 /**sciSetResize
3133  * Tunrs ON or OFF the autoresizing mode (when the window is resized by user)
3134  * @param sciPointObj * pobj: the pointer to the entity
3135  * @param BOOL value: the value of the switch
3136  */
3137 int
3138 sciSetResize (sciPointObj * pobj, BOOL value)
3139 {
3140   
3141   if ( sciGetResize( pobj ) == value )
3142   {
3143     /* nothing to do */
3144     return 1 ;
3145   }
3146   return sciInitResize( pobj, value ) ;
3147   
3148 }
3149
3150
3151
3152 /**sciSetName 
3153  * Sets the name of the Figure
3154  * @param sciPointObj * pobj: the pointer to the entity
3155  * @param char pvalue: a pointer to the string contening name
3156  * @param int length: the length of the string (without the ending (char)0 ).
3157  * @return 
3158  */
3159 int
3160 sciSetName (sciPointObj * pobj, char *pvalue, int length)
3161 {
3162   switch (sciGetEntityType (pobj))
3163     {
3164     case SCI_FIGURE:
3165     {
3166       /* the length of the C string */
3167       int realLength = length + 1 ;
3168       int percentStatus = 0 ;
3169       if( realLength > SCI_FIGURE_NAME_LENGTH )
3170       {
3171         sciprint("Warning: Figure name is limited to %d characters.\n", SCI_FIGURE_NAME_LENGTH - 1 );
3172         return -1 ;
3173       }
3174       
3175       percentStatus = checkPercent( pvalue ) ;
3176       if ( percentStatus < 0  )
3177       {
3178         sciprint("Figure name may not contains any %% character, except a single %%d.\n") ;
3179         return -1 ;
3180       }
3181       
3182       strcpy (pFIGURE_FEATURE (pobj)->name, pvalue ) ;
3183       pFIGURE_FEATURE (pobj)->namelen = length ; 
3184       
3185       if (pobj != getFigureModel())
3186       {
3187         char * str = NULL ;
3188         if ( percentStatus == 0 )
3189         {
3190           str = CALLOC( realLength, sizeof(char) ) ;
3191           if ( str == NULL )
3192           {
3193             sciprint("No more memory left.\n");
3194             return -1 ;
3195           }
3196           strcpy( str, pvalue ) ;
3197         }
3198         else
3199         {
3200           /* a %d inside */
3201           /* get the number digits of the window number */
3202           int figureNumber = sciGetNum( pobj ) ;
3203           int nbDigits = GET_NB_DIGITS( figureNumber ) ;
3204           realLength = realLength + nbDigits - 2 ; /* -2 for the %d */
3205           str = CALLOC( realLength, sizeof(char) ) ;
3206           if ( str == NULL )
3207           {
3208             sciprint("No more memory left.\n");
3209             return -1 ;
3210           }
3211           sprintf( str, pvalue, figureNumber ) ;
3212           length = realLength - 1 ;
3213         }
3214         C2F(dr)("xname",str,PI0,PI0,PI0,PI0,PI0,PI0,PD0,PD0,PD0,PD0,5L,(long) length ) ;
3215         FREE(str) ;
3216       }
3217       
3218       break;
3219     }
3220     case SCI_SUBWIN:
3221     case SCI_AGREG:
3222     default:
3223       sciprint ("Only Figure can be named\n");
3224       return -1 ;
3225       break;
3226     }
3227   return 0 ;
3228 }
3229
3230 int sciInitNum( sciPointObj * pobj, int * value )
3231 {
3232   switch (sciGetEntityType (pobj))
3233     {
3234     case SCI_FIGURE:
3235       pFIGURE_FEATURE (pobj)->number = *value;
3236       break;
3237     case SCI_SUBWIN:
3238       pSUBWIN_FEATURE (pobj)->number = *value;
3239       sciSetNum (sciGetParentFigure (pobj), value);
3240       break;
3241     case SCI_AGREG:
3242     default:
3243       sciprint ("Only Figure be numerated\n");
3244       return -1 ;
3245       break;
3246     }
3247   return 0 ;
3248 }
3249
3250 /**sciSetNum
3251  * Sets the number of the Figure.
3252  * @param sciPointObj * pobj: the pointer to the entity
3253  * @param int value: the value of the number of the windows
3254  */
3255 int
3256 sciSetNum (sciPointObj * pobj, int *value )
3257 {
3258
3259   if ( sciGetNum(pobj) == *value )
3260   {
3261     /* nothing to do */
3262     return 1 ;
3263   }
3264   return sciInitNum( pobj, value ) ;
3265   
3266 }
3267
3268 int sciInitDimension( sciPointObj * pobj, int newWidth, int newHeight )
3269 {
3270   switch (sciGetEntityType (pobj))
3271     {
3272     case SCI_FIGURE:
3273       if ( pobj == getFigureModel() )
3274       {
3275         pFIGURE_FEATURE(pobj)->pModelData->figureWidth  = newWidth ;
3276         pFIGURE_FEATURE(pobj)->pModelData->figureHeight = newHeight;
3277       }
3278       else
3279       {
3280         int size[2] = {newWidth, newHeight} ;
3281         sciSetJavaFigureSize(pobj, size) ;
3282       }
3283       break;
3284     case SCI_SUBWIN:
3285       pSUBWIN_FEATURE (pobj)->windimwidth = newWidth ;
3286       pSUBWIN_FEATURE (pobj)->windimheight = newHeight;
3287       if (pobj != getAxesModel())
3288         C2F(dr)("xset","wdim",&newWidth, &newHeight,PI0,PI0,PI0,PI0,PD0,PD0,PD0,PD0,4L,4L);
3289       break;
3290     case SCI_CONSOLE:
3291       /* TODO */
3292       break;
3293     case SCI_WINDOW:
3294       /* TODO */
3295       break ;
3296     case SCI_WINDOWFRAME:
3297       /* TODO */
3298       break ;
3299     case SCI_AGREG:
3300     default:
3301       sciprint ("Object can not have a size.\n");
3302       return -1 ;
3303       break;
3304     }
3305   return 0 ;
3306 }
3307
3308
3309 /**sciSetDim
3310  * Sets the dimension of the Figure or Subwin
3311  * @param sciPointObj * pobj: the pointer to the entity
3312  * @param int *pwidth: the width of the window dimension
3313  * @param int *pheight: the height of the window dimension
3314  * @return 
3315  */
3316 int sciSetDimension( sciPointObj * pobj, int newWidth, int newHeight )
3317 {
3318
3319   int width ;
3320   int height ;
3321   sciGetDim( pobj, &width, &height ) ;
3322   if ( width == newWidth && height == newHeight )
3323   {
3324     return 1 ;
3325   }
3326   return sciInitDimension( pobj, newWidth, newHeight ) ;
3327   
3328 }
3329
3330 int sciInitWindowDim( sciPointObj * pobj, int newWidth, int newHeight )
3331 {
3332   switch (sciGetEntityType (pobj))
3333   {
3334   case SCI_FIGURE:
3335     if ( pobj == getFigureModel() )
3336     {
3337       pFIGURE_FEATURE(pobj)->pModelData->windowWidth  = newWidth ;
3338       pFIGURE_FEATURE(pobj)->pModelData->windowHeight = newHeight;
3339     }
3340     else
3341     {
3342       int size[2] = {newWidth, newHeight} ;
3343       sciSetJavaWindowSize(pobj, size) ;
3344     }
3345     break;
3346   default:
3347     sciprint ("Object can not be enclosed in a window.\n");
3348     return -1 ;
3349     break;
3350   }
3351   return 0 ;
3352 }
3353
3354 int sciSetWindowDim( sciPointObj * pobj, int newWidth, int newHeight )
3355 {
3356   if ( sciGetWindowWidth(pobj) == newWidth || sciGetWindowHeight(pobj) == newHeight )
3357   {
3358     // nothing to do
3359     return 1 ;
3360   }
3361   return sciInitWindowDim(pobj, newWidth, newHeight ) ;
3362 }
3363
3364 int sciInitScreenPosition( sciPointObj * pobj, int pposx, int pposy )
3365 {
3366   integer y = 0 ;
3367   switch (sciGetEntityType (pobj))
3368     {
3369     case SCI_FIGURE:
3370       if ( pobj == getFigureModel() )
3371       {
3372         pFIGURE_FEATURE(pobj)->pModelData->windowPosition[0] = pposx ;
3373         pFIGURE_FEATURE(pobj)->pModelData->windowPosition[1] = pposx ;
3374       }
3375       else
3376       {
3377         int pos[2] = {pposx, pposy} ;
3378         sciSetJavaWindowPosition(pobj, pos) ;
3379       }
3380       return 0;
3381       /*if (pobj != getFigureModel()) {
3382         num=pFIGURE_FEATURE(pobj)->number;
3383         C2F(dr)("xget","window",&y,&cur,&na,PI0,PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);  
3384         C2F(dr)("xset","window",&num,PI0,PI0,PI0,PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
3385         C2F(dr)("xset","wpos",&pposx,&pposy,PI0,PI0,PI0,PI0,PD0,PD0,PD0,PD0,4L,4L);
3386         C2F(dr)("xset","window",&cur,PI0,PI0,PI0,PI0,PI0,PD0,PD0,PD0,PD0,0L,0L);
3387
3388       }
3389       pFIGURE_FEATURE (pobj)->inrootposx = pposx;
3390       pFIGURE_FEATURE (pobj)->inrootposy = pposy;*/
3391       /*return 0;
3392       break;*/
3393     case SCI_CONSOLE:
3394       /* nothing for now */
3395       break ;
3396     case SCI_FRAME:
3397       /* nothing for now */
3398       break ;
3399     case SCI_WINDOW:
3400       /* nothing for now */
3401       break ;
3402     case SCI_WINDOWFRAME:
3403       /* nothing for now */
3404       break ;
3405     case SCI_SCREEN:
3406       /* nothing for now */
3407       break ;
3408     default:
3409       sciprint ("Only Figure can return position\n");
3410       return -1;
3411       break;
3412     }
3413   return 0;
3414 }
3415
3416 /**sciSetScreenPosition
3417  * Sets the position of the FIGURE (the window) in root.
3418  */
3419 int
3420 sciSetScreenPosition(sciPointObj * pobj, int pposx, int pposy)
3421 {
3422   int posX ;
3423   int posY ;
3424   sciGetScreenPosition( pobj, &posX, &posY ) ;
3425   if ( posX == pposx && posY == pposy )
3426   {
3427     /* nothing to do */
3428     return 1 ;
3429   }
3430   return sciInitScreenPosition( pobj, pposx, pposy ) ;
3431   
3432 }
3433
3434 int sciInitFigureIconify( sciPointObj * pobj, BOOL value )
3435 {
3436   switch (sciGetEntityType (pobj))
3437     {
3438     case SCI_FIGURE:
3439       pFIGURE_FEATURE (pobj)->isiconified = value;
3440       break;
3441     default:
3442       return sciSetFigureIconify(sciGetCurrentFigure(), value);
3443       break;
3444     }
3445   return 0 ;
3446 }
3447
3448 /**sciSetFigureIconified
3449  * Minimizes or Restores the window if TRUE or FALSE (useful to get the Window on front)
3450  * @param sciPointObj * pobj: the pointer to the entity
3451  * @param BOOL value: TRUE the window will be iconify, FALSE the window will be raise
3452  * @return 
3453  */
3454 int
3455 sciSetFigureIconify (sciPointObj * pobj, BOOL value)
3456 {
3457   if ( sciGetIsFigureIconified( pobj ) == value )
3458   {
3459     return 1 ;
3460   }
3461   return sciInitFigureIconify( pobj, value ) ;
3462   
3463 }
3464
3465 int sciInitSubWindowPos( sciPointObj * pobj, int *pposx, int *pposy)
3466 {
3467   switch (sciGetEntityType (pobj))
3468     {
3469     case SCI_SUBWIN:
3470       /* selectionner le xgc correspondant puis */
3471       pSUBWIN_FEATURE (pobj)->infigureposx = *pposx;
3472       pSUBWIN_FEATURE (pobj)->infigureposy = *pposy;
3473       return 0;
3474       /* C2F(setwindowpos)( width, height, PI0, PI0); */
3475       break;
3476     case SCI_AGREG:
3477     default:
3478       sciprint ("Only subwin can be return position\n");
3479       return -1;
3480       break;
3481     }
3482   return 0 ;
3483 }
3484
3485 /**sciSetSubwindowPos
3486  * Sets subwindow position 
3487  * @param sciPointObj * pobj: the pointer to the entity
3488  * @param int pposx: the pointer to the x position
3489  * @param int pposy: the pointer to the y position
3490  * @return  0 if OK , else -1
3491  * @version 0.1.
3492  **/
3493 int
3494 sciSetSubWindowPos (sciPointObj * pobj, int *pposx, int *pposy)
3495 {
3496
3497   if ( sciGetSubwindowPosX( pobj ) == *pposx && sciGetSubwindowPosY( pobj ) == *pposy  )
3498   {
3499     return 1 ;
3500   }
3501   return sciInitSubWindowPos( pobj, pposx, pposy ) ;
3502 }
3503
3504
3505 /*-----------------------------------------------------------------------------------*/
3506 /* sciSelectFirstSubwin                                                              */
3507 /* select under the first window found under the current figure                      */
3508 /*-----------------------------------------------------------------------------------*/
3509 void sciSelectFirstSubwin( sciPointObj * parentFigure )
3510 {
3511   sciSons * figureSons = sciGetSons ( parentFigure ) ;
3512   if ( figureSons != (sciSons *) NULL )
3513   { 
3514     /* look for the first subwindow */
3515     while (   (figureSons->pnext != (sciSons *) NULL) 
3516            && (sciGetEntityType (figureSons->pointobj) != SCI_SUBWIN))
3517     {
3518       figureSons = figureSons->pnext;
3519     }
3520     
3521     if( sciGetEntityType (figureSons->pointobj) == SCI_SUBWIN ) 
3522     {
3523       /* we found another valid subwindow */ 
3524       sciSetSelectedSubWin (figureSons->pointobj);
3525     }
3526     else
3527     {
3528       sciSetSelectedSubWin(NULL);
3529     }
3530   }
3531 }
3532
3533
3534 int sciInitSelectedSubWin( sciPointObj * psubwinobj )
3535 {
3536   sciSubWindow * ppSubWin = pSUBWIN_FEATURE ( psubwinobj ) ;
3537
3538   sciInitSelectedObject( psubwinobj ) ;
3539
3540   set_scale ("tttftt", ppSubWin->WRect,
3541              ppSubWin->FRect, NULL,
3542              ppSubWin->logflags, ppSubWin->ARect);
3543   
3544
3545   return 0 ;
3546 }
3547
3548 /**sciSetSelectedSubWin
3549  * Determines wich SubWin is selected or not. WARNING TO BE DEFINED.
3550  * @param sciPointObj * psubwinobj: the pointer to the entity sub window
3551  * @return 1 if OK or -1 if NOT OK
3552  */
3553 int
3554 sciSetSelectedSubWin (sciPointObj * psubwinobj)
3555 {
3556   
3557
3558   /* on verifie que l'entite passee en argument est bien une sous fenetre */
3559   if (sciGetEntityType (psubwinobj) != SCI_SUBWIN)
3560   {
3561     sciprint("This Handle is not a SubWindow\n");
3562     return -1;
3563   }
3564
3565   /* on verifie que la sous fenetre donnee n'est pas deja selectionnee */
3566   if (sciGetIsSelected(psubwinobj))
3567   {
3568     /* nothing to do then */
3569     return 1 ;
3570   }
3571
3572   return sciInitSelectedSubWin( psubwinobj ) ;
3573 }
3574
3575 /*----------------------------------------------------------------------------------------*/
3576 int sciInitSelectedObject( sciPointObj * pObj )
3577 {
3578   sciAddUniqueSelectedSon(sciGetParent(pObj), pObj ) ;
3579   return 0 ;
3580 }
3581 /*----------------------------------------------------------------------------------------*/
3582 /**
3583  * The object become selected within its siblings
3584  * For subwin object, use sciSetSelectedSubWin instead.
3585  */
3586 int sciSetSelectedObject( sciPointObj * pObj )
3587 {
3588   if ( sciGetIsSelected(pObj) )
3589   {
3590     /* nothing to do */
3591     return 1 ;
3592   }
3593   return sciInitSelectedObject( pObj ) ;
3594 }
3595 /*----------------------------------------------------------------------------------------*/
3596
3597 /**sciSetOriginalSubWin
3598  * DO NOT USE !!!
3599  * @param sciPointObj * pfigure, the parent figure, 
3600  * @param sciPointObj * psubwin: the pointer to the entity subwindow
3601  * @return 0 if OK -1 if not
3602  */
3603 int
3604 sciSetOriginalSubWin (sciPointObj * pfigure, sciPointObj * psubwin)
3605 {     
3606   pFIGURE_FEATURE(pfigure)->originalsubwin0011 = psubwin; 
3607   return 0;   
3608 }
3609
3610 /**sciSetPoint
3611  * sets points of the entity, and a pointer to the number of points
3612  */
3613 /** MAJ pour le 3D DJ.Abdemouche 2003**/
3614 int
3615 sciSetPoint(sciPointObj * pthis, double *tab, int *numrow, int *numcol)
3616 {
3617   int i,n1,k,k1,k2;
3618   double * pvx  = NULL ;
3619   double * pvy  = NULL ;
3620   double * pvz  = NULL ;
3621   double * pvfx = NULL ;
3622   double * pvfy = NULL ;
3623   double * pvfz = NULL ;
3624   int * pstyle = NULL;
3625
3626   switch (sciGetEntityType (pthis))
3627     {
3628     case SCI_POLYLINE:
3629       n1=pPOLYLINE_FEATURE (pthis)->n1;
3630       if ( (*numcol != 3) && (*numcol != 2) && (*numcol != 0) )
3631         {
3632           sciprint("The number of columns must be 2 (3 if three-dimensional axes) \n");
3633           return -1;
3634         }
3635       if (*numrow != n1) /* SS 30/1/02 */
3636       {
3637
3638         FREE(pPOLYLINE_FEATURE (pthis)->pvx); pPOLYLINE_FEATURE (pthis)->pvx = NULL;
3639         FREE(pPOLYLINE_FEATURE (pthis)->pvy); pPOLYLINE_FEATURE (pthis)->pvy = NULL;
3640         FREE(pPOLYLINE_FEATURE (pthis)->pvz); pPOLYLINE_FEATURE (pthis)->pvz = NULL;
3641
3642         n1=*numrow;
3643
3644         if ( *numcol > 0 )
3645         {
3646           if ((pvx = MALLOC (n1 * sizeof (double))) == NULL) return -1;
3647           if ((pvy = MALLOC (n1 * sizeof (double))) == NULL)
3648           {
3649             FREE(pvx); pvx = (double *) NULL;
3650             return -1;
3651           } 
3652           if (*numcol == 3)
3653           {
3654             if ((pvz = MALLOC (n1 * sizeof (double))) == NULL)
3655             {
3656               FREE(pvx); pvx = (double *) NULL;
3657               FREE(pvy); pvy = (double *) NULL;
3658               return -1;
3659             }
3660           }
3661           
3662           for ( i = 0 ; i < *numrow ; i++ )
3663           {
3664             pvx[i] = tab[i];
3665             pvy[i] = tab[i+ (*numrow)];
3666             if (*numcol == 3)
3667             {
3668               pvz[i] = tab[i+ 2*(*numrow)];
3669             }
3670           }
3671           pPOLYLINE_FEATURE (pthis)->pvx=pvx;
3672           pPOLYLINE_FEATURE (pthis)->pvy=pvy; 
3673           pPOLYLINE_FEATURE (pthis)->pvz=pvz;
3674         }
3675
3676         pPOLYLINE_FEATURE (pthis)->n1      = n1 ;
3677         pPOLYLINE_FEATURE (pthis)->dim_icv = n1 ;
3678
3679       }
3680       else
3681         {
3682           for (i=0;i < *numrow;i++)
3683             {
3684               pPOLYLINE_FEATURE (pthis)->pvx[i] = tab[i];
3685               pPOLYLINE_FEATURE (pthis)->pvy[i] = tab[i+ (*numrow)];
3686             }
3687           if (*numcol == 3)
3688             {
3689               if(pPOLYLINE_FEATURE (pthis)->pvz==NULL)
3690                 if ((pPOLYLINE_FEATURE (pthis)->pvz = MALLOC ((*numrow) * sizeof (double))) == NULL)
3691                   return -1;
3692               
3693               for (i=0;i < *numrow;i++)
3694                 pPOLYLINE_FEATURE (pthis)->pvz[i] = tab[i+ 2*(*numrow)];
3695             }
3696           else
3697             {
3698               FREE(pPOLYLINE_FEATURE (pthis)->pvz);
3699               pPOLYLINE_FEATURE (pthis)->pvz=NULL;
3700             }
3701         }
3702       
3703
3704    
3705       return 0;
3706       break;
3707     case SCI_RECTANGLE:
3708     {
3709       int widthIndex = 2 ;
3710       int size = *numrow * *numcol ;
3711       if ( size != 5 && size != 4 )
3712       {
3713         sciprint("The number of element must be 4 (5 if z coordinate )\n");
3714         return -1;
3715       }
3716       
3717       pRECTANGLE_FEATURE (pthis)->x = tab[0] ;
3718       pRECTANGLE_FEATURE (pthis)->y = tab[1] ;
3719       
3720       if ( size == 5 )
3721       {
3722         pRECTANGLE_FEATURE (pthis)->z = tab[2] ;
3723         widthIndex = 3 ;
3724       }
3725       
3726       /* check that the height and width are positive */
3727       if ( tab[widthIndex] < 0.0 || tab[widthIndex + 1] < 0.0 )
3728       {
3729         Scierror(999,"Width and height must be positive.\n") ;
3730         return -1 ;
3731       }
3732       pRECTANGLE_FEATURE (pthis)->width  = tab[widthIndex    ] ;
3733       pRECTANGLE_FEATURE (pthis)->height = tab[widthIndex + 1] ;
3734       
3735       return 0;
3736     }
3737     break;
3738     case SCI_ARC:
3739       if ((*numrow * *numcol != 7)&&(*numrow * *numcol != 6))
3740         {
3741           sciprint("The number of elements must be 6 (7 if z coordinate )\n");
3742           return -1;
3743         }
3744       
3745       pARC_FEATURE (pthis)->x          = tab[0];
3746       pARC_FEATURE (pthis)->y          = tab[1];  
3747       if (pSUBWIN_FEATURE (sciGetParentSubwin(pthis))->is3d)
3748         {
3749           pARC_FEATURE (pthis)->z          = tab[2];
3750           pARC_FEATURE (pthis)->width      = tab[3];
3751           pARC_FEATURE (pthis)->height     = tab[4];
3752           pARC_FEATURE (pthis)->alphabegin = tab[5];
3753           pARC_FEATURE (pthis)->alphaend   = tab[6];
3754         }
3755       else
3756         {
3757           pARC_FEATURE (pthis)->width      = tab[2];
3758           pARC_FEATURE (pthis)->height     = tab[3];
3759           pARC_FEATURE (pthis)->alphabegin = tab[4];
3760           pARC_FEATURE (pthis)->alphaend   = tab[5]; 
3761         }
3762       return 0;
3763       break;
3764     case SCI_TEXT:
3765       if ((*numrow * *numcol != 2)&&(*numrow * *numcol != 3))
3766         {
3767           sciprint("The number of elements must be 2 (3 if z coordinate)\n");
3768           return -1;
3769         }
3770       pTEXT_FEATURE (pthis)->x = tab[0];
3771       pTEXT_FEATURE (pthis)->y = tab[1];
3772       if (pSUBWIN_FEATURE (sciGetParentSubwin(pthis))->is3d)
3773         pTEXT_FEATURE (pthis)->z = tab[2];
3774       return 0;
3775       break;
3776     case SCI_SEGS:
3777       if (pSEGS_FEATURE (pthis)->ptype <= 0) {
3778         if ((*numcol != 3)&&(*numcol != 2)) {
3779           sciprint("The number of columns must be 2 (3 if three-dimensional axes) \n");
3780           return -1;
3781         }
3782         n1=pSEGS_FEATURE (pthis)->Nbr1;
3783         if (*numrow != n1) {
3784           n1=*numrow;
3785           if ((pvx = MALLOC (n1 * sizeof (double))) == NULL) return -1;
3786           if ((pvy = MALLOC (n1 * sizeof (double))) == NULL) {
3787             FREE(pvx); pvx = (double *) NULL;
3788             return -1;
3789           }
3790           if (*numcol == 3)
3791             if ((pvz = MALLOC (n1 * sizeof (double))) == NULL) {
3792               FREE(pvx); pvx = (double *) NULL;
3793               FREE(pvy); pvy = (double *) NULL;
3794               return -1;
3795             }
3796           if ((pstyle = MALLOC (n1 * sizeof (int))) == NULL) {
3797             FREE(pvx); pvx = (double *) NULL;
3798             FREE(pvy); pvy = (double *) NULL;
3799             FREE(pvz); pvz = (double *) NULL;
3800             return -1;
3801           }
3802           FREE(pSEGS_FEATURE (pthis)->vx); pSEGS_FEATURE (pthis)->vx = NULL;
3803           FREE(pSEGS_FEATURE (pthis)->vy); pSEGS_FEATURE (pthis)->vx = NULL;
3804           if (*numcol == 3)
3805             FREE(pSEGS_FEATURE (pthis)->vz); pSEGS_FEATURE (pthis)->vz = NULL;
3806           /* Attention ici on detruit pstyle !! F.Leray 20.02.04*/
3807           FREE(pSEGS_FEATURE (pthis)->pstyle); pSEGS_FEATURE (pthis)->pstyle = NULL;
3808           for (i=0;i < *numrow;i++)
3809             {
3810               pvx[i] = tab[i];
3811               pvy[i] = tab[i+ (*numrow)];
3812               if (*numcol == 3)
3813                 pvz[i] = tab[i+ 2*(*numrow)];
3814               pstyle[i] = 0;
3815             }
3816           pSEGS_FEATURE (pthis)->vx=pvx;
3817           pSEGS_FEATURE (pthis)->vy=pvy;
3818           if (*numcol == 3)
3819             pSEGS_FEATURE (pthis)->vz=pvz;
3820           pSEGS_FEATURE (pthis)->Nbr1=n1;
3821           pSEGS_FEATURE (pthis)->pstyle=pstyle;
3822         }
3823         else {
3824           if ((*numcol == 3) && (pSEGS_FEATURE (pthis)->vz == NULL)) 
3825             if ((pSEGS_FEATURE (pthis)->vz = MALLOC (n1 * sizeof (double))) == NULL) return -1;
3826
3827           for (i=0;i < *numrow;i++) {
3828             pSEGS_FEATURE (pthis)->vx[i] = tab[i];
3829             pSEGS_FEATURE (pthis)->vy[i] = tab[i+ (*numrow)];
3830             if (*numcol == 3)
3831               pSEGS_FEATURE (pthis)->vz[i] = tab[i+ 2*(*numrow)];
3832           }
3833         }
3834       }
3835       else { /* Strange test object == Champ: e=gce(); e.data = e.data 
3836                 make this error happened! Remove it to perform such legal operation */
3837
3838         n1=pSEGS_FEATURE (pthis)->Nbr1;
3839         if (*numrow != n1) /* SS 30/1/02 */
3840           {
3841             n1=*numrow;
3842             if ((pvx = MALLOC (n1 * sizeof (double))) == NULL) return -1;
3843             if ((pvy = MALLOC (n1 * sizeof (double))) == NULL) {
3844               FREE(pvx); pvx = (double *) NULL;
3845               return -1;
3846             }
3847             if ((pstyle = MALLOC (n1 * sizeof (int))) == NULL) {
3848               FREE(pvx); pvx = (double *) NULL;
3849               FREE(pvy); pvy = (double *) NULL;
3850               FREE(pvz); pvz = (double *) NULL;
3851               return -1;
3852             }
3853             if ((pvfx = MALLOC ((n1*n1) * sizeof (double))) == NULL) return -1;
3854             if ((pvfy = MALLOC ((n1*n1) * sizeof (double))) == NULL) {
3855               FREE(pvx); pvx = (double *) NULL;
3856               FREE(pvy); pvy = (double *) NULL;
3857               FREE(pvz); pvz = (double *) NULL;
3858               FREE(pvfx); pvfx = (double *) NULL;
3859               return -1;
3860             }
3861             if (*numcol == 3 +3*(*numrow * *numrow))
3862               {
3863                 if ((pvz = MALLOC (n1 * sizeof (double))) == NULL) {
3864                   FREE(pvx); pvx = (double *) NULL;
3865                   FREE(pvy); pvy = (double *) NULL;
3866                   return -1;
3867                 }
3868                 if ((pvfz = MALLOC ((n1*n1) * sizeof (double))) == NULL) {
3869                   FREE(pvx); pvx = (double *) NULL;
3870                   FREE(pvy); pvy = (double *) NULL;
3871                   FREE(pvz); pvz = (double *) NULL;
3872                   FREE(pvfx); pvfx = (double *) NULL;
3873                   FREE(pvfy); pvfy = (double *) NULL;
3874                   return -1;
3875                 }
3876                 FREE(pSEGS_FEATURE (pthis)->vz); pSEGS_FEATURE (pthis)->vz = NULL;
3877                 FREE(pSEGS_FEATURE (pthis)->vfz); pSEGS_FEATURE (pthis)->vfz = NULL;
3878               }
3879             FREE(pSEGS_FEATURE (pthis)->vx); pSEGS_FEATURE (pthis)->vx = NULL;
3880             FREE(pSEGS_FEATURE (pthis)->vy); pSEGS_FEATURE (pthis)->vy = NULL;
3881             FREE(pSEGS_FEATURE (pthis)->vfx); pSEGS_FEATURE (pthis)->vfx = NULL;
3882             FREE(pSEGS_FEATURE (pthis)->vfy); pSEGS_FEATURE (pthis)->vfy = NULL;
3883             for (i=0;i < n1;i++)
3884               {
3885                 pvx[i] = tab[i];
3886                 pvy[i] = tab[i+ (*numrow)];
3887                 if (*numcol == 3 +3*(*numrow * *numrow))
3888                   pvz[i] = tab[i+ 2*(*numrow)];
3889
3890               }
3891             k=3*n1;
3892             for (i=0;i < n1*n1;i++)
3893               {
3894                 pvfx[i] = tab[k+i];
3895                 pvfy[i] = tab[k+n1*n1+i];
3896                 if (*numcol == 3 +3*(*numrow * *numrow))
3897                   pvfz[i] = tab[2*k+n1*n1+i];
3898
3899               }
3900             pSEGS_FEATURE (pthis)->vx=pvx;
3901             pSEGS_FEATURE (pthis)->vy=pvy;
3902             pSEGS_FEATURE (pthis)->vx=pvfx;
3903             pSEGS_FEATURE (pthis)->vy=pvfy; 
3904             pSEGS_FEATURE (pthis)->Nbr1=n1;
3905             if (*numcol == 3 +3*(*numrow * *numrow))
3906               {
3907                 pSEGS_FEATURE (pthis)->vz=pvz;
3908                 pSEGS_FEATURE (pthis)->vy=pvfz;
3909               }
3910
3911           }
3912         else {
3913           for (i=0;i < *numrow;i++)   {
3914             pSEGS_FEATURE (pthis)->vx[i] = tab[i];
3915             pSEGS_FEATURE (pthis)->vy[i] = tab[i+ (*numrow)];
3916             if (pSEGS_FEATURE (pthis)->vz != (double *)NULL)
3917               pSEGS_FEATURE (pthis)->vz[i] = tab[i+ 2*(*numrow)];
3918           }
3919           k=2* (*numrow);
3920           k1=k+ (*numrow * *numrow);
3921           k2=2*k+ (*numrow * *numrow);
3922           for (i=0;i < *numrow * *numrow ;i++)   {
3923             pSEGS_FEATURE (pthis)->vfx[i] = tab[k+i];
3924             pSEGS_FEATURE (pthis)->vfy[i] = tab[k1+i];
3925             if (pSEGS_FEATURE (pthis)->vfz != (double *)NULL)
3926               pSEGS_FEATURE (pthis)->vfz[i] = tab[k2+i];
3927           }
3928         }
3929       }
3930       return 0;
3931       break;
3932
3933
3934     case SCI_SURFACE:/* DJ.A 2003 */
3935       sciprint ("Un handled data field\n");
3936       return -1;
3937       break;
3938     case SCI_GRAYPLOT:
3939       if (pGRAYPLOT_FEATURE (pthis)->type == 0) { /* gray plot */
3940         double *pvecx,*pvecy,*pvecz;
3941         int nx,ny;
3942         nx=*numrow-1;
3943         ny=*numcol-1;
3944         if (pGRAYPLOT_FEATURE (pthis)->ny!=ny || pGRAYPLOT_FEATURE (pthis)->nx!=nx) {
3945           if ((pvecx = CALLOC(nx,sizeof(double))) == NULL) {
3946             sciprint ("Not enough memory\n");
3947             return -1;}
3948           if ((pvecy = CALLOC(ny,sizeof(double))) == NULL) {
3949             FREE(pvecx);
3950             sciprint ("Not enough memory\n");
3951             return -1;}
3952           if ((pvecz = CALLOC(nx*ny,sizeof(double))) == NULL) {
3953             FREE(pvecx);FREE(pvecy);
3954             sciprint ("Not enough memory\n");
3955             return -1;}
3956           FREE(pGRAYPLOT_FEATURE (pthis)->pvecx);pGRAYPLOT_FEATURE (pthis)->pvecx=pvecx;
3957           FREE(pGRAYPLOT_FEATURE (pthis)->pvecy);pGRAYPLOT_FEATURE (pthis)->pvecy=pvecy;
3958           FREE(pGRAYPLOT_FEATURE (pthis)->pvecz);pGRAYPLOT_FEATURE (pthis)->pvecz=pvecz;
3959         }
3960         for (i=0;i < nx;i++) 
3961           pGRAYPLOT_FEATURE (pthis)->pvecx[i] = tab[i+1];
3962
3963         for (i=0;i < ny;i++) 
3964           pGRAYPLOT_FEATURE (pthis)->pvecy[i] = tab[*numrow*(i+1)];
3965         for (i=0;i < ny;i++) 
3966           for (k=0;k < nx;k++) 
3967             pGRAYPLOT_FEATURE (pthis)->pvecz[nx*i+k]=tab[*numrow*(i+1)+k+1];
3968         pGRAYPLOT_FEATURE (pthis)->ny=ny;
3969         pGRAYPLOT_FEATURE (pthis)->nx=nx;
3970       }
3971       else  {/* Matplot */
3972         double *pvecz;
3973         int nx,ny;
3974         nx=*numrow;
3975         ny=*numcol;
3976         if (pGRAYPLOT_FEATURE (pthis)->ny!=ny+1 || pGRAYPLOT_FEATURE (pthis)->nx!=nx+1) {
3977           if ((pvecz = CALLOC(nx*ny,sizeof(double))) == NULL) {
3978             sciprint ("Not enough memory\n");
3979             return -1;}
3980           FREE(pGRAYPLOT_FEATURE (pthis)->pvecz);pGRAYPLOT_FEATURE (pthis)->pvecz=pvecz;
3981         }
3982         for (i=0;i < nx*ny;i++) 
3983           pGRAYPLOT_FEATURE (pthis)->pvecz[i]=tab[i];
3984         pGRAYPLOT_FEATURE (pthis)->ny=ny+1;
3985         pGRAYPLOT_FEATURE (pthis)->nx=nx+1;
3986       }
3987       break;
3988     case SCI_FEC: 
3989       {
3990         double *pvecx,*pvecy,*pfun;
3991         int Nnode;
3992         if (*numcol != 3) {
3993           sciprint ("The data must have 3 columns\n");
3994           return -1;}
3995       
3996         Nnode = *numrow;
3997         if (pFEC_FEATURE (pthis)->Nnode!=Nnode) {
3998           if ((pvecx = CALLOC(Nnode,sizeof(double))) == NULL) {
3999             sciprint ("Not enough memory\n");
4000             return -1;}
4001           if ((pvecy = CALLOC(Nnode,sizeof(double))) == NULL) {
4002             sciprint ("Not enough memory\n");
4003             FREE(pvecx);
4004             return -1;}
4005           if ((pfun = CALLOC(Nnode,sizeof(double))) == NULL) {
4006             sciprint ("Not enough memory\n");
4007             FREE(pvecx);FREE(pvecy);
4008             return -1;}
4009           FREE( pFEC_FEATURE (pthis)->pvecx); pFEC_FEATURE (pthis)->pvecx=pvecx;
4010           FREE( pFEC_FEATURE (pthis)->pvecy); pFEC_FEATURE (pthis)->pvecy=pvecy;
4011           FREE( pFEC_FEATURE (pthis)->pfun); pFEC_FEATURE (pthis)->pfun=pfun;
4012         }
4013         for (i=0;i < Nnode;i++) {
4014           pFEC_FEATURE (pthis)->pvecx[i]=tab[i];
4015           pFEC_FEATURE (pthis)->pvecy[i]=tab[Nnode+i];
4016           pFEC_FEATURE (pthis)->pfun[i]=tab[2*Nnode+i];
4017         }
4018       }
4019       break;
4020     case SCI_SBV:
4021     case SCI_SBH:
4022     case SCI_FIGURE:
4023     case SCI_SUBWIN:
4024     case SCI_TITLE:
4025     case SCI_LEGEND:
4026     case SCI_LIGHT:    
4027     case SCI_AXES:
4028     case SCI_PANNER:
4029     case SCI_MENU:
4030     case SCI_MENUCONTEXT:
4031     case SCI_STATUSB:
4032     case SCI_AGREG:
4033     case SCI_LABEL: /* F.Leray 28.05.04 */
4034     case SCI_UIMENU:
4035     default:
4036       sciprint ("This object has no possibility to set points !\n");
4037       return -1;
4038       break;
4039     }
4040   return 0;
4041 }
4042
4043 int sciInitdrawmode( BOOL mode )
4044 {
4045   static sciPointObj * pobj ;
4046   pobj = sciGetFirstTypedSelectedSon(sciGetCurrentFigure(), SCI_SUBWIN);
4047   pSUBWIN_FEATURE(pobj)->visible = mode ;       
4048   sciDrawObj(sciGetCurrentFigure ());
4049   return 0;
4050 }
4051
4052 int
4053 sciSetdrawmode (BOOL mode)
4054
4055   static sciPointObj * pobj ;
4056   pobj = sciGetFirstTypedSelectedSon(sciGetCurrentFigure(), SCI_SUBWIN);
4057   if ( sciGetdrawmode( pobj ) == mode )
4058   {
4059     /* nothing to do */
4060     return 1 ;
4061   }
4062   return sciInitdrawmode( mode ) ;
4063   
4064 }
4065
4066 int sciSwitchWindow(int *winnum)
4067
4068   struct BCG *CurXGC; 
4069   static sciPointObj *mafigure;
4070   static sciPointObj *masousfen;  
4071   integer v=0;
4072   double dv=0.0; 
4073   /* find if exist figure winnum */
4074   /* une autre methode c est de tester CurXGC->mafigure = NULL */
4075   if ( (sciPointObj *) sciIsExistingFigure(winnum) == (sciPointObj *) NULL) 
4076     {
4077       /** Figure winnum don't exist **/
4078       /** Create Figure **/ 
4079       C2F(dr)("xget","gc",&v,&v,&v,&v,&v,&v,(double *)&CurXGC,&dv,&dv,&dv,5L,10L);/* ????? SS*/
4080       /* For now, no higher entities than figure */
4081       if ((mafigure = ConstructFigure(NULL, CurXGC)) != NULL)
4082         {
4083           sciSetCurrentObj (mafigure); /* F.Leray 25.03.04*/
4084           CurXGC->mafigure = mafigure;
4085           if ((masousfen = ConstructSubWin (mafigure, CurXGC->CurWindow)) != NULL) {
4086             sciSetCurrentObj (masousfen);
4087             sciSetOriginalSubWin (mafigure, masousfen);
4088             set_cf_type(1);/* current figure is a graphic one */
4089           }
4090         }
4091       else
4092         return -1; /* failed to switch */
4093        
4094     }
4095   else
4096     set_cf_type(1);/* current figure is a graphic one */
4097   return 0;
4098 }
4099
4100 /*-------------------------------------------------------------------------------------------*/
4101 /**
4102  * In new graphic style, select a window and create one if not already done.
4103  */ 
4104 int sciInitUsedWindow( int winNum )
4105 {
4106   int verbose = 0 ;
4107   /* select or create the window in the driver */
4108   C2F(dr)("xset","window",&winNum,&verbose,PI0,PI0,PI0,PI0,PD0,PD0,PD0,PD0,4L,6L) ;
4109   
4110   return sciSwitchWindow( &winNum ) ; /* create the handle */
4111 }
4112
4113 /*-------------------------------------------------------------------------------------------*/
4114 /**
4115  * In new graphic style, select a window and create one if not already done.
4116  */
4117 int sciSetUsedWindow( int winNum )
4118 {
4119   /* select or create the window in the driver */
4120   if ( sciGetCurPointedFigure() != NULL && sciGetNum( sciGetCurPointedFigure() ) == winNum )
4121   {
4122     /* nothing to do */
4123     return 1 ;
4124   }
4125
4126   return sciInitUsedWindow( winNum ) ;
4127 }
4128
4129 /*-------------------------------------------------------------------------------------------*/
4130
4131
4132
4133 int sciInitIsFilled( sciPointObj * pobj, BOOL isfilled )
4134 {
4135   switch (sciGetEntityType (pobj))
4136   {
4137   case SCI_POLYLINE:
4138     pPOLYLINE_FEATURE(pobj)->isfilled = isfilled;
4139     return 0;
4140     break;
4141   case SCI_RECTANGLE:
4142     pRECTANGLE_FEATURE(pobj)->fillflag = isfilled;
4143     return 0;
4144     break;
4145   case SCI_ARC:
4146     pARC_FEATURE(pobj)->fill = isfilled;
4147     return 0;
4148     break;
4149   case SCI_LABEL:
4150     /* isfilled correspond to several properties in text object */
4151     sciInitIsBoxed(  pLABEL_FEATURE(pobj)->text, isfilled ) ;
4152     sciInitIsLine(   pLABEL_FEATURE(pobj)->text, isfilled ) ;
4153     return sciInitIsFilled( pLABEL_FEATURE(pobj)->text, isfilled ) ;
4154   case SCI_TEXT:
4155     pTEXT_FEATURE(pobj)->isfilled = isfilled ;
4156     return 0 ;
4157     break ;
4158   case SCI_FIGURE:
4159   case SCI_SUBWIN:
4160   case SCI_SURFACE:
4161   case SCI_AXES:
4162   case SCI_LEGEND:
4163   case SCI_SEGS:
4164   case SCI_FEC:
4165   case SCI_GRAYPLOT:
4166   case SCI_MENU:
4167   case SCI_MENUCONTEXT:
4168   case SCI_STATUSB:
4169   case SCI_LIGHT:
4170   case SCI_AGREG:
4171   case SCI_PANNER:
4172   case SCI_SBH:
4173   case SCI_SBV:
4174   case SCI_TITLE:
4175   case SCI_UIMENU:
4176   default:
4177     sciprint ("This object has no isfilled \n");
4178     return -1;
4179     break;
4180   }
4181   return 0;
4182 }
4183
4184 /**sciSetIsFilled
4185  * Sets the filled line existence
4186  */
4187 int
4188 sciSetIsFilled (sciPointObj * pobj, BOOL isfilled)
4189 {
4190
4191   if ( sciGetIsFilled( pobj ) == isfilled )
4192   {
4193     return 1 ;
4194   }
4195   return sciInitIsFilled( pobj, isfilled ) ;
4196   
4197 }
4198
4199
4200 int sciInitBoxType( sciPointObj * pobj, EAxesBoxType type )
4201 {
4202   switch (sciGetEntityType (pobj))
4203   {
4204     case SCI_SUBWIN:
4205       pSUBWIN_FEATURE(pobj)->axes.rect = type ;
4206       /* redondant information in scilab :'( */
4207       switch ( type )
4208       {
4209         case BT_OFF:
4210           pSUBWIN_FEATURE(pobj)->axes.flag[2] = 0 ;
4211           break ;
4212         case BT_ON:
4213           pSUBWIN_FEATURE(pobj)->axes.flag[2] = 4 ;
4214           break ;
4215         case BT_HIDDEN_AXIS:
4216           pSUBWIN_FEATURE(pobj)->axes.flag[2] = 2 ;
4217           break ;
4218         case BT_BACK_HALF:
4219           pSUBWIN_FEATURE(pobj)->axes.flag[2] = 3 ;
4220           break ;
4221       }
4222       return 0;
4223       break;
4224     default:
4225       sciprint ("This object has no box type \n") ;
4226       return -1 ;
4227       break;
4228   }
4229   return 0;
4230 }
4231
4232 /* set the property of the axes box  */
4233 int sciSetBoxType( sciPointObj * pobj, EAxesBoxType type ) 
4234 {
4235
4236   if ( sciGetBoxType( pobj ) == type )
4237   {
4238     return 1 ;
4239   }
4240   return sciInitBoxType( pobj, type ) ;
4241   
4242 }
4243
4244
4245 int sciInitIsBoxed( sciPointObj * pobj, BOOL isboxed )
4246 {
4247   switch (sciGetEntityType (pobj))
4248     {
4249     case SCI_TEXT:
4250       pTEXT_FEATURE(pobj)->isboxed = isboxed;
4251       return 0;
4252       break;
4253     case SCI_SUBWIN:
4254       sciprint("Warning: SetProperty.c:sciSetIsBoxed : please use sciSetBoxType instead\n");
4255       if ( isboxed )
4256       {
4257         pSUBWIN_FEATURE(pobj)->axes.rect = BT_ON ;
4258       }
4259       else
4260       {
4261         pSUBWIN_FEATURE(pobj)->axes.rect = BT_OFF ;
4262       }
4263       return 0;
4264       break;
4265     case SCI_LABEL:
4266     case SCI_POLYLINE:
4267     case SCI_RECTANGLE:
4268     case SCI_ARC:
4269     case SCI_FIGURE:
4270     case SCI_SURFACE:
4271     case SCI_AXES:
4272     case SCI_LEGEND:
4273     case SCI_SEGS:
4274     case SCI_FEC:
4275     case SCI_GRAYPLOT:
4276     case SCI_MENU:
4277     case SCI_MENUCONTEXT:
4278     case SCI_STATUSB:
4279     case SCI_LIGHT:
4280     case SCI_AGREG:
4281     case SCI_PANNER:
4282     case SCI_SBH:
4283     case SCI_SBV:
4284     case SCI_TITLE:
4285     case SCI_UIMENU:
4286     default:
4287       sciprint ("This object has no isboxed \n");
4288       return -1;
4289       break;
4290     }
4291   return 0;
4292 }
4293
4294 /**sciSetIsBoxed
4295  * Sets the box existence
4296  */
4297 int
4298 sciSetIsBoxed (sciPointObj * pobj, BOOL isboxed)
4299 {
4300   
4301   if ( sciGetIsBoxed( pobj ) == isboxed )
4302   {
4303     return 1 ;
4304   }
4305   return sciInitIsBoxed( pobj, isboxed ) ;
4306   
4307 }
4308
4309
4310 int
4311 sciSetInterpVector(sciPointObj * pobj, int size, int * value)
4312 {
4313   int i;
4314
4315   FREE(pPOLYLINE_FEATURE(pobj)->scvector);
4316   
4317   if((pPOLYLINE_FEATURE(pobj)->scvector = MALLOC(size*sizeof(int)))==NULL){
4318     sciprint("Can not allocate room for shaded color vbector\n");
4319     return -1;
4320   }
4321   
4322   for(i=0;i<size;i++)
4323     pPOLYLINE_FEATURE(pobj)->scvector[i] = value[i];
4324   
4325   return 0;
4326 }
4327
4328 int sciInitPosition( sciPointObj * pobj, double x, double y )
4329 {
4330   switch (sciGetEntityType (pobj))
4331     {
4332     case SCI_LABEL:
4333       sciInitTextPosX( pLABEL_FEATURE(pobj)->text, x ) ;
4334       return sciInitTextPosY( pLABEL_FEATURE(pobj)->text, y ) ;
4335       break;
4336     case SCI_POLYLINE:
4337     case SCI_RECTANGLE:
4338     case SCI_ARC:
4339     case SCI_TEXT:
4340     case SCI_FIGURE:
4341     case SCI_SUBWIN:
4342     case SCI_SURFACE:
4343     case SCI_AXES:
4344     case SCI_FEC:
4345     case SCI_SEGS:
4346     case SCI_LEGEND:
4347     case SCI_GRAYPLOT:
4348     case SCI_LIGHT:
4349     case SCI_MENU:
4350     case SCI_MENUCONTEXT:
4351     case SCI_STATUSB:
4352     case SCI_PANNER:    /* pas de context graphics */
4353     case SCI_SBH:               /* pas de context graphics */
4354     case SCI_SBV:               /* pas de context graphics */
4355     case SCI_AGREG:
4356     case SCI_TITLE:
4357     case SCI_UIMENU:
4358     default:
4359       sciprint ("This object has no position\n");
4360       return -1;
4361       break;
4362     }
4363   return 0;
4364 }
4365
4366 /**sciSetPosition
4367  * Sets the position (in pixels) for the label object
4368  */
4369 int
4370 sciSetPosition (sciPointObj * pobj, double x, double y)
4371 {
4372
4373   double curX ;
4374   double curY ;
4375   sciGetPosition( pobj, &curX, &curY ) ;
4376   if ( curX == x && curY == y )
4377   {
4378     /* nothing to do */
4379     return 1 ;
4380   }
4381   return sciInitPosition( pobj, x, y ) ;
4382 }
4383
4384 int sciInitAutoRotation( sciPointObj * pObj, BOOL value )
4385 {
4386   switch (sciGetEntityType (pObj))
4387   {
4388   case SCI_LABEL:
4389     pLABEL_FEATURE(pObj)->auto_rotation = value ;
4390       break;
4391   case SCI_POLYLINE:
4392   case SCI_RECTANGLE:
4393   case SCI_ARC:
4394   case SCI_TEXT:
4395   case SCI_FIGURE:
4396   case SCI_SUBWIN:
4397   case SCI_SURFACE:
4398   case SCI_AXES:
4399   case SCI_FEC:
4400   case SCI_SEGS:
4401   case SCI_LEGEND:
4402     case SCI_GRAYPLOT:
4403   case SCI_LIGHT:
4404   case SCI_MENU:
4405   case SCI_MENUCONTEXT:
4406   case SCI_STATUSB:
4407   case SCI_PANNER:
4408   case SCI_SBH:
4409   case SCI_SBV:
4410   case SCI_AGREG:
4411   case SCI_TITLE:
4412   case SCI_UIMENU:
4413   default:
4414     return -1 ;
4415     break;
4416   }
4417
4418   return 0 ;
4419 }
4420
4421 /* set the auto_rotation property of an object */
4422 int sciSetAutoRotation ( sciPointObj * pObj, BOOL value )
4423 {
4424
4425   if ( sciGetAutoRotation( pObj ) == value )
4426   {
4427     /* nothing to do */
4428     return 1 ;
4429   }
4430   return sciInitAutoRotation( pObj, value ) ;
4431   
4432 }
4433
4434
4435 int sciInitAutoPosition( sciPointObj * pObj, BOOL value )
4436 {
4437   switch (sciGetEntityType (pObj))
4438   {
4439   case SCI_LABEL:
4440     pLABEL_FEATURE(pObj)->auto_position = value ;
4441     break;
4442   case SCI_POLYLINE:
4443   case SCI_RECTANGLE:
4444   case SCI_ARC:
4445   case SCI_TEXT:
4446   case SCI_FIGURE:
4447   case SCI_SUBWIN:
4448   case SCI_SURFACE:
4449   case SCI_AXES:
4450   case SCI_FEC:
4451   case SCI_SEGS:
4452   case SCI_LEGEND:
4453   case SCI_GRAYPLOT:
4454   case SCI_LIGHT:
4455   case SCI_MENU:
4456   case SCI_MENUCONTEXT:
4457   case SCI_STATUSB:
4458   case SCI_PANNER:
4459   case SCI_SBH:
4460   case SCI_SBV:
4461   case SCI_AGREG:
4462   case SCI_TITLE:
4463   case SCI_UIMENU:
4464   default:
4465     return -1 ;
4466     break;
4467   }
4468
4469   return 0 ;
4470 }
4471
4472 /* set the auto_position property of an object */
4473 int sciSetAutoPosition ( sciPointObj * pObj, BOOL value )
4474 {
4475
4476   if ( sciGetAutoPosition( pObj ) == value )
4477   {
4478     /* nothing to do */
4479     return 1 ;
4480   }
4481   return sciInitAutoPosition( pObj, value ) ;
4482   
4483 }
4484
4485 /*---------------------------------------------------------------------------*/
4486 int checkPercent( char * string )
4487 {
4488   /* check for the percent in the string */
4489   char * firstPercent  = strchr( string, '%' ) ;
4490   
4491   if ( firstPercent == NULL )
4492   {
4493     /* no % character found */
4494     return 0 ;
4495   }
4496   else if ( firstPercent[1] != 'd' )
4497   {
4498     /* a %something with something != d has been found */
4499     return -1 ;
4500   }
4501   else
4502   {
4503     /* here we have found a first %d, check if there is not any more % */
4504     firstPercent++ ;
4505     firstPercent = strchr( firstPercent, '%' ) ;
4506     if ( firstPercent == NULL )
4507     {
4508       /* no other % character found */
4509       return 1 ;
4510     }
4511     else
4512     {
4513       return -1 ;
4514     }
4515   }
4516   return -1 ;
4517 }
4518 /*---------------------------------------------------------------------------*/
4519 int sciInitAutoSize( sciPointObj * pObj, BOOL autoSize )
4520 {
4521   switch ( sciGetEntityType (pObj) )
4522   {
4523   case SCI_TEXT:
4524     pTEXT_FEATURE(pObj)->autoSize = autoSize ;
4525     return 0 ;
4526   default:
4527     sciprint ("This object hasn't any automoatic size\n");
4528     return -1 ;
4529     break;
4530   }
4531   return -1 ;
4532 }
4533 /*---------------------------------------------------------------------------*/
4534 int sciSetAutoSize( sciPointObj * pObj, BOOL autoSize )
4535 {
4536   if ( sciGetAutoSize( pObj ) == autoSize )
4537   {
4538     /* nothing to do */
4539     return 1 ;
4540   }
4541   return sciInitAutoSize( pObj, autoSize ) ;
4542 }
4543 /*--------------------------------------------------------------------------------------------*/
4544 int sciInitAlignment( sciPointObj * pObj, sciTextAlignment align )
4545 {
4546   switch (sciGetEntityType (pObj))
4547   {
4548   case SCI_TEXT:
4549     pTEXT_FEATURE(pObj)->stringsAlign = align ;
4550     return 0 ;
4551   default:
4552     sciprint ("This object has no Text Alignment\n");
4553     return -1 ;
4554   }
4555   return -1 ;
4556 }
4557 /*--------------------------------------------------------------------------------------------*/
4558 int sciSetAlignment( sciPointObj * pObj, sciTextAlignment align )
4559 {
4560   if ( sciGetAlignment( pObj ) == align )
4561   {
4562     /* nothing to do */
4563     return 1 ;
4564   }
4565   return sciInitAlignment( pObj, align ) ;
4566 }
4567 /*--------------------------------------------------------------------------------------------*/
4568 int sciInitUserSize( sciPointObj * pObj, double width, double height )
4569 {
4570   switch( sciGetEntityType( pObj ) )
4571   {
4572   case SCI_TEXT:
4573     pTEXT_FEATURE(pObj)->userSize[0] = width ;
4574     pTEXT_FEATURE(pObj)->userSize[1] = height ;
4575     return 0 ;
4576   default:
4577     sciprint ("This object has no Specified Size\n");
4578     return -1 ;
4579   }
4580   return -1 ;
4581 }
4582 /*--------------------------------------------------------------------------------------------*/
4583 int sciSetUserSize( sciPointObj * pObj, double width, double height )
4584 {
4585   double curWidth  ;
4586   double curHeight ;
4587   sciGetUserSize( pObj, &curWidth, &curHeight ) ;
4588   if ( curWidth == width && curHeight == height )
4589   {
4590     /* nothing to do */
4591     return 1 ;
4592   }
4593   return sciInitUserSize( pObj, width, height ) ;
4594 }
4595 /*--------------------------------------------------------------------------------------------*/
4596 int sciInitCenterPos( sciPointObj * pObj, BOOL newCP )
4597 {
4598   switch( sciGetEntityType( pObj ) )
4599   {
4600   case SCI_TEXT:
4601     pTEXT_FEATURE(pObj)->centeredPos = newCP ;
4602     return 0 ;
4603   default:
4604     sciprint ("This object has no centered position.\n");
4605     return -1 ;
4606   }
4607   return -1 ;
4608 }
4609 /*--------------------------------------------------------------------------------------------*/
4610 int sciSetCenterPos( sciPointObj * pObj, BOOL newCP )
4611 {
4612   if ( sciGetCenterPos( pObj ) == newCP )
4613   {
4614     /* nothing to do */
4615     return 1 ;
4616   }
4617   return sciInitCenterPos( pObj, newCP ) ;
4618 }
4619 /*--------------------------------------------------------------------------------------------*/
4620 int sciInitIs3d(  sciPointObj * pObj, BOOL is3d )
4621 {
4622    switch( sciGetEntityType( pObj ) )
4623    {
4624    case SCI_SUBWIN:
4625      if ( is3d )
4626      {
4627        pSUBWIN_FEATURE (pObj)->is3d = TRUE ;
4628        Obj_RedrawNewAngle( pObj,
4629                            pSUBWIN_FEATURE (pObj)->theta_kp,
4630                            pSUBWIN_FEATURE (pObj)->alpha_kp ) ;
4631        wininfo("alpha=%.1f,theta=%.1f",
4632                pSUBWIN_FEATURE (pObj)->alpha_kp,
4633                pSUBWIN_FEATURE (pObj)->theta_kp ) ;
4634      }
4635      else
4636      {
4637        /* switch to 2d */
4638        if ( sciGetSurface(pObj) == NULL)
4639        {
4640          pSUBWIN_FEATURE (pObj)->is3d = FALSE;
4641          pSUBWIN_FEATURE (pObj)->project[2]= 0;
4642        }
4643        pSUBWIN_FEATURE (pObj)->theta_kp=pSUBWIN_FEATURE (pObj)->theta;
4644        pSUBWIN_FEATURE (pObj)->alpha_kp=pSUBWIN_FEATURE (pObj)->alpha;
4645        pSUBWIN_FEATURE (pObj)->alpha  = 0.0;
4646        pSUBWIN_FEATURE (pObj)->theta  = 270.0;
4647        if(sciGetCurrentScilabXgc () !=  NULL)
4648        {
4649          UpdateSubwinScale(pObj);
4650        }
4651        pSUBWIN_FEATURE(pObj)->is3d = FALSE; /*...and here */
4652        return 0 ;
4653      }
4654      return 0 ;
4655    case SCI_TEXT:
4656      pTEXT_FEATURE( pObj )->is3d = is3d ;
4657      return 0 ;
4658    case SCI_LABEL:
4659      return sciInitIs3d( pLABEL_FEATURE( pObj )->text, is3d ) ;
4660    default:
4661      sciprint ("This object has no 3d mode.\n");
4662      return -1 ;
4663    }
4664    return -1 ;
4665 }
4666 /*--------------------------------------------------------------------------------------------*/
4667 /**
4668  * Force an object to be displayed in 2d or 3d mode.
4669  */
4670 int sciSetIs3d( sciPointObj * pObj, BOOL is3d )
4671 {
4672   if ( sciGetIs3d( pObj ) == is3d )
4673   {
4674     /* nothing to do */
4675     return 1 ;
4676   }
4677   return sciInitIs3d( pObj, is3d ) ;
4678 }
4679 /*--------------------------------------------------------------------------------------------*/
4680 int sciInitHiddenColor( sciPointObj * pObj, int newColor )
4681 {
4682   switch( sciGetEntityType( pObj ) )
4683   {
4684   case SCI_SUBWIN:
4685     pSUBWIN_FEATURE(pObj)->hiddencolor = newColor ;
4686     return 0 ;
4687   case SCI_SURFACE:
4688     pSURFACE_FEATURE(pObj)->hiddencolor = newColor ;
4689     return 0;
4690   default:
4691     sciprint ("This object has no hidden color.\n");
4692     return -1 ;
4693   }
4694   return -1 ;
4695 }
4696 /*--------------------------------------------------------------------------------------------*/
4697 int sciSetHiddenColor( sciPointObj * pObj, int newColor )
4698 {
4699   if ( sciGetHiddenColor( pObj ) == newColor )
4700   {
4701     /* nothing to do */
4702     return 1 ;
4703   }
4704   return sciInitHiddenColor( pObj, newColor ) ;
4705 }
4706 /*--------------------------------------------------------------------------------------------*/
4707 int sciInitGridStyle( sciPointObj * pObj, int xStyle, int yStyle, int zStyle )
4708 {
4709   switch( sciGetEntityType( pObj ) )
4710   {
4711   case SCI_SUBWIN:
4712     pSUBWIN_FEATURE(pObj)->grid[0] = xStyle ;
4713     pSUBWIN_FEATURE(pObj)->grid[1] = yStyle ;
4714     pSUBWIN_FEATURE(pObj)->grid[2] = zStyle ;
4715     return 0 ;
4716   default:
4717     sciprint( "This object has no grid property.\n" ) ;
4718     return -1 ;
4719   }
4720   return -1 ;
4721 }
4722 /*--------------------------------------------------------------------------------------------*/
4723 /**
4724  * Set the grid of an axes object
4725  */
4726 int sciSetGridStyle( sciPointObj * pObj, int xStyle, int yStyle, int zStyle )
4727 {
4728   int curX ;
4729   int curY ;
4730   int curZ ;
4731   sciGetGridStyle( pObj, &curX, &curY, &curZ ) ;
4732   if ( curX == xStyle && curY == yStyle && curZ == zStyle )
4733   {
4734     /* nothing to do */
4735     return 1 ;
4736   }
4737   return sciInitGridStyle( pObj, xStyle, yStyle, zStyle ) ;
4738 }
4739 /*--------------------------------------------------------------------------------------------*/
4740 int sciInitViewport( sciPointObj * pObj, int xSize, int ySize )
4741 {
4742   switch( sciGetEntityType( pObj ) )
4743   {
4744   case SCI_FIGURE:
4745     SciViewportMove( sciGetScilabXgc(pObj), xSize, ySize ) ;
4746     return 0 ;
4747   default:
4748     sciprint( "This object has no viewport property.\n" ) ;
4749     return -1 ;
4750   }
4751   return -1 ;
4752 }
4753 /*--------------------------------------------------------------------------------------------*/
4754 /**
4755  * Set the viewport property of a figure.
4756  * Effective only if the auto_resize property is enable
4757  */
4758 int sciSetViewport( sciPointObj * pObj, int xSize, int ySize )
4759 {
4760   int curXSize = 0 ;
4761   int curYSize = 0 ;
4762   sciGetViewport( pObj, &curXSize, &curYSize ) ;
4763   if ( sciGetResize( pObj ) || ( xSize == curYSize && xSize == curYSize ) )
4764   {
4765     /* nothing to do */
4766     return 1 ;
4767   }
4768
4769   return sciInitViewport( pObj, xSize, ySize ) ;
4770
4771 }
4772 /*--------------------------------------------------------------------------------------------*/
4773 /**
4774  * Modify the string in the info bar of the graphic window
4775  */
4776 int sciSetInfoMessage( sciPointObj * pObj, const char * newMessage )
4777 {
4778   switch( sciGetEntityType( pObj ) )
4779   {
4780   case SCI_FIGURE:
4781     {
4782       sciFigure * ppFigure = pFIGURE_FEATURE(pObj) ;
4783       
4784       // We keep a copy of the message for convinience
4785       if ( newMessage == NULL )
4786       {
4787         FREE( ppFigure->infoMessage ) ;
4788         ppFigure->infoMessage = NULL ;
4789       }
4790       else
4791       {
4792         int messageSize =  (int)strlen( newMessage ) + 1 ;
4793         if ( ppFigure->infoMessage != NULL )
4794         {
4795           ppFigure->infoMessage = REALLOC( ppFigure->infoMessage, messageSize * sizeof(char) ) ;
4796         }
4797         else
4798         {
4799           ppFigure->infoMessage = MALLOC( messageSize * sizeof(char) ) ;
4800         }
4801         strcpy( ppFigure->infoMessage, newMessage ) ;
4802       }
4803
4804       // set the java message
4805       if ( pObj != getFigureModel() )
4806       {
4807         sciSetJavaInfoMessage(pObj, newMessage);
4808       }
4809       
4810
4811       return 0 ;
4812     }
4813   default:
4814     sciprint( "This object has no info_message property.\n" ) ;
4815     return -1 ;
4816   }
4817 }
4818 /*--------------------------------------------------------------------------------------------*/
4819 int sciInitEventHandler( sciPointObj * pObj, char * name )
4820 {
4821   switch( sciGetEntityType( pObj ) )
4822   {
4823   case SCI_FIGURE:
4824     {
4825       int nameLength =  (int)strlen( name ) + 1 ;
4826       sciFigure * ppFigure = pFIGURE_FEATURE(pObj) ;
4827       if ( ppFigure->eventHandler != NULL )
4828       {
4829         ppFigure->eventHandler = REALLOC( ppFigure->eventHandler, nameLength * sizeof(char) ) ;
4830       }
4831       else
4832       {
4833         ppFigure->eventHandler = MALLOC( nameLength * sizeof(char) ) ;
4834       }
4835
4836       if ( ppFigure == NULL )
4837       {
4838         sciprint("Error setting event handler name, memory full.\n") ;
4839         return -1 ;
4840       }
4841
4842       strcpy( ppFigure->eventHandler, name ) ;
4843
4844       if ( strcmp( name, "" ) == 0 )
4845       {
4846         sciInitIsEventHandlerEnable( pObj, FALSE ) ;
4847       }
4848
4849       return 0 ;
4850     }
4851   default:
4852     sciprint( "This object has no event_handler property.\n" ) ;
4853     return -1 ;
4854   }
4855
4856 }
4857 /*--------------------------------------------------------------------------------------------*/
4858 int sciSetEventHandler( sciPointObj * pObj, char * name )
4859 {
4860   if ( strcmp( sciGetEventHandler(pObj), name ) == 0 )
4861   {
4862     /* nothing to do */
4863     return 1 ;
4864   }
4865
4866   return sciInitEventHandler( pObj, name ) ;
4867 }
4868 /*--------------------------------------------------------------------------------------------*/
4869 int sciInitIsEventHandlerEnable( sciPointObj * pObj, BOOL enable )
4870 {
4871   switch( sciGetEntityType( pObj ) )
4872   {
4873   case SCI_FIGURE:
4874     {
4875       pFIGURE_FEATURE(pObj)->isEventHandlerEnable = enable ;
4876       return 0 ;
4877     }
4878   default:
4879     sciprint( "This object has no event_handler property.\n" ) ;
4880     return -1 ;
4881   }
4882 }
4883 /*--------------------------------------------------------------------------------------------*/
4884 int sciSetIsEventHandlerEnable( sciPointObj * pObj, BOOL enable )
4885 {
4886   if ( sciGetIsEventHandlerEnable(pObj) == enable )
4887   {
4888     /* nothing to do */
4889     return 1 ;
4890   }
4891
4892   return sciInitIsEventHandlerEnable( pObj, enable ) ;
4893 }
4894 /*--------------------------------------------------------------------------------------------*/
4895 /**
4896  * To specify if an object can be rendered
4897  */
4898 int sciInitIsReadyForRendering( sciPointObj * pObj, BOOL isReady )
4899 {
4900   switch(sciGetEntityType(pObj))
4901   {
4902   case SCI_FIGURE:
4903     pFIGURE_FEATURE(pObj)->isReadyForRendering = isReady ;
4904     break;
4905   default:
4906     sciprint( "This object has no IsReadyForRendering property.\n" ) ;
4907     return -1 ;
4908   }
4909   return 0 ;
4910 }
4911 /*--------------------------------------------------------------------------------------------*/
4912 /**
4913  * Set data-bounds defined by the user.
4914  * @param bounds [Xmin,Xmax,Ymain,Ymax,Zmin,Zmax] vector.
4915  */
4916 int sciSetDataBounds( sciPointObj * pObj, double bounds[6] )
4917 {
4918   int i;
4919   switch( sciGetEntityType(pObj) )
4920   {
4921   case SCI_SUBWIN:
4922     for ( i = 0 ; i < 6 ; i++ )
4923     {
4924       pSUBWIN_FEATURE(pObj)->SRect[i] = bounds[i] ;
4925     }
4926     /* Temporary */
4927     pSUBWIN_FEATURE(pObj)->FRect[0] = bounds[0];
4928     pSUBWIN_FEATURE(pObj)->FRect[1] = bounds[2];
4929     pSUBWIN_FEATURE(pObj)->FRect[2] = bounds[1];
4930     pSUBWIN_FEATURE(pObj)->FRect[3] = bounds[3];
4931     pSUBWIN_FEATURE(pObj)->FRect[4] = bounds[4];
4932     pSUBWIN_FEATURE(pObj)->FRect[5] = bounds[5];
4933     break ;
4934   case SCI_SURFACE:
4935     for ( i = 0 ; i < 6 ; i++ )
4936     {
4937       pSURFACE_FEATURE(pObj)->ebox[i] = bounds[i] ;
4938     }
4939     break;
4940   default:
4941     sciprint("This object has no data bounds.\n");
4942     return -1 ; 
4943
4944   }
4945   return 0 ;
4946 }
4947 /*--------------------------------------------------------------------------------------------*/