Initial step :
[scilab.git] / scilab / modules / graphics / sci_gateway / c / sci_Legend.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2006 - INRIA - Fabrice Leray
4  * Copyright (C) 2006 - INRIA - Jean-Baptiste Silvy
5  *
6  * This file must be used under the terms of the CeCILL.
7  * This source file is licensed as described in the file COPYING, which
8  * you should have received as part of this distribution.  The terms
9  * are also available at
10  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
11  *
12  */
13
14 /*------------------------------------------------------------------------*/
15 /* file: sci_glue.h                                                       */
16 /* desc : interface for glue routine                                      */
17 /*------------------------------------------------------------------------*/
18
19 #include <stdlib.h>
20
21 #include "gw_graphics.h"
22 #include "stack-c.h"
23 #include "BuildObjects.h"
24 #include "MALLOC.h"
25 #include "GetProperty.h"
26 #include "localization.h"
27 #include "Scierror.h"
28 #include "freeArrayOfString.h"
29 #include "GraphicSynchronizerInterface.h"
30 #include "DrawObjects.h"
31 #include "Axes.h" /* propertyNameToLegendPlace */
32 #include "SetProperty.h" /* sciSetLegendLocation */
33 #include "HandleManagement.h"
34
35 #define DEF_LEGEND_LOCATION "in_upper_right"
36
37 /*--------------------------------------------------------------------------*/
38 int sci_Legend( char * fname, unsigned long fname_len )
39 {
40     // ???
41     abort();
42 #if 0
43   int numrow,numcol,l1,l2,n,m2,n2;
44   long handelsvalue = 0 ;
45   int outindex,i;
46   sciPointObj *pobj;
47   long long *tabofhandles;
48   sciPointObj * psubwin = NULL;
49   sciPointObj * pFigure = NULL;
50   sciLegendPlace location;
51   sciEntityType type;
52   char **Str = NULL;
53         sciPointObj * legend;
54
55   CheckRhs(2,3);
56   CheckLhs(0,1);
57
58
59   GetMatrixdims(1,&numrow,&numcol);
60   n=numrow*numcol;
61   if (numrow==0 || numcol==0)
62   {
63     CreateVar(Rhs+1,MATRIX_OF_DOUBLE_DATATYPE,&numrow,&numcol,&l1);
64     LhsVar(1) = Rhs+1;
65         C2F(putlhsvar)();
66     return 0;
67   }
68   GetMatrixdims(2,&m2,&n2);
69   if (m2*n2 != n)
70   {
71     Scierror(999,_("%s: Wrong size for input arguments #%d and #%d: Incompatible length.\n"),fname,1,2);
72     return 0;
73   }
74
75
76   GetRhsVar(1,GRAPHICAL_HANDLE_DATATYPE,&numrow,&numcol,&l1);
77   GetRhsVar(2,MATRIX_OF_STRING_DATATYPE,&m2,&n2,&Str);
78   if (Rhs==3)
79   {
80     GetRhsVar(3,STRING_DATATYPE,&m2,&n2,&l2);
81     location = propertyNameToLegendPlace(cstk(l2));
82     if (location == SCI_LEGEND_POSITION_UNSPECIFIED)
83         {
84       Scierror(999,_("%s: Wrong value for input argument #%d: Incorrect value.\n"),fname,3);
85       return 0;
86     }
87   }
88   else
89   {
90     location = propertyNameToLegendPlace(DEF_LEGEND_LOCATION);
91   }
92
93   tabofhandles = (long long *)MALLOC(n*sizeof(long long));
94   if (tabofhandles == NULL) {
95     freeArrayOfString(Str,n);
96     Scierror(999,_("%s: No more memory.\n"),fname);
97     return 0;
98   }
99
100   for (i = 0; i < n;i++)
101   {
102     handelsvalue = (unsigned long) (hstk(l1))[n-1-i];
103     pobj = sciGetPointerFromHandle(handelsvalue);
104
105     /**
106       We get the current pSubwin & pFigure from the first handel's parents.
107     **/
108     if (i==0) {
109       psubwin = sciGetParentSubwin( pobj );
110       pFigure = sciGetParentFigure( pobj );
111     }
112
113     /**
114       We check that the pSubwin is the same for all given handle.
115     **/
116     if (psubwin!=sciGetParentSubwin(pobj))
117     {
118       Scierror(999,_("%s: Objects must have the same axes.\n"),fname);
119       return 0;
120     }
121
122     if (pobj == NULL)
123     {
124       freeArrayOfString(Str,n);
125       FREE(tabofhandles);
126       Scierror(999,_("%s: The handle is no more valid.\n"),fname);
127       return 0;
128     }
129     type=sciGetEntityType(pobj);
130     if (type != SCI_POLYLINE)
131     {
132       freeArrayOfString(Str,n);
133       FREE(tabofhandles);
134       Scierror(999,_("%s: The %d th handle is not a polyline handle.\n"),fname,i+1);
135       return 0;
136     }
137     tabofhandles[i]=handelsvalue;
138
139   }
140
141   /* Create the legend */
142   legend = ConstructLegend (psubwin, Str, tabofhandles, n);
143   sciSetLegendLocation(legend, location);
144
145   /* Draw it */
146   sciSetCurrentObj(legend);
147   startFigureDataReading(pFigure);
148   sciDrawObjIfRequired(legend);
149   endFigureDataReading(pFigure);
150
151   freeArrayOfString(Str,n);
152   FREE(tabofhandles);
153
154   /* Return the handle of the newly create dlegend */
155   numrow = 1;
156   numcol = 1;
157   CreateVar(Rhs+1,GRAPHICAL_HANDLE_DATATYPE,&numrow,&numcol,&outindex);
158   hstk(outindex)[0] = sciGetHandle((sciPointObj *) sciGetCurrentObj());
159   LhsVar(1) = Rhs+1;
160   C2F(putlhsvar)();
161 #endif
162   return 0;
163 }
164 /*--------------------------------------------------------------------------*/