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