f94af9c9aad105aa34670e9e1c1ba54daab2dab2
[scilab.git] / scilab / modules / gui / sci_gateway / c / sci_toolbar.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2005 - INRIA - Allan CORNET
4  * Copyright (C) 2008 - INRIA - Vincent COUVERT
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 #include "gw_gui.h"
15 #include "stack-c.h"
16 #include "Scierror.h"
17 #include "MALLOC.h"
18 #include "localization.h"
19 #include "Toolbar.h"
20 #include "WindowList.h"
21 #include "ObjectStructure.h"
22 #include "HandleManagement.h"
23 #include "GetProperty.h"
24 #if _MSC_VER
25   #include "strdup_windows.h"
26 #endif
27 /*--------------------------------------------------------------------------*/
28 int sci_toolbar(char *fname,unsigned long l)
29 {
30   static int stkAdr,nbCol,nbRow;
31   
32   char *Output = NULL;
33
34   char **param = NULL;
35   
36   int figNum = -2;
37
38   sciPointObj *pObj = NULL;;
39
40   CheckRhs(1,2);
41   CheckLhs(0,1);
42   
43   /* Figure number */
44   if ( GetType(1) == sci_matrix )
45     {
46       GetRhsVar(1,MATRIX_OF_INTEGER_DATATYPE,&nbRow,&nbCol,&stkAdr);
47       if (nbRow*nbCol != 1)
48         {
49           Scierror(999, _("%s: Wrong size for input argument #%d: Scalar expected.\n"), fname, 1);
50           return FALSE;
51         }
52       figNum = *istk(stkAdr);
53       
54       if (figNum < -1)
55         {
56           Scierror(999, _("%s: Wrong value for input argument #%d: Must be > %d expected.\n"), fname, 1, -1);
57           return FALSE;
58         }
59
60       if (figNum != -1) /* Check that the figure exists */
61         {
62           if (getFigureFromIndex(figNum)==NULL)
63             {
64               Scierror(999, _("%s: Wrong value for input argument #%d: 'Graphic Window Number %d' does not exist.\n"), fname, 1, figNum);
65               return FALSE;
66             }
67         }
68     }
69   else if ( GetType(1) == sci_handles )
70     {
71       GetRhsVar(1,GRAPHICAL_HANDLE_DATATYPE, &nbRow, &nbCol, &stkAdr);
72
73           if (nbRow*nbCol != 1)
74             {
75               Scierror(999,_("%s: Wrong size for input argument #%d: Single handle expected.\n"),fname, 1);
76               return FALSE;
77             }
78           pObj=sciGetPointerFromHandle((long)*hstk(stkAdr));
79           
80           if (pObj == NULL)
81             {
82               Scierror(999, _("%s: Wrong value for input argument #%d: this handle does not exist.\n"), fname, 1);
83               return FALSE;
84             }
85           
86           if ( (sciGetEntityType (pObj) != SCI_FIGURE) )
87             {
88               Scierror(999, _("%s: Wrong type for input argument #%d: Double value or Figure handle expected.\n"), fname, 1);
89               return FALSE;
90             }
91
92           figNum = pFIGURE_FEATURE(pObj)->number;
93     }
94   else
95     {
96       Scierror(999, _("%s: Wrong type for input argument #%d: Double value or Figure handle expected.\n"), fname, 1);
97       return FALSE;
98     }
99
100   if (Rhs==2) /* New status */
101     {
102       if ((GetType(2) == sci_strings))
103         {
104           GetRhsVar(2,MATRIX_OF_STRING_DATATYPE,&nbRow,&nbCol,&param);
105           if (nbRow*nbCol != 1)
106             {
107               Scierror(999, _("%s: Wrong size for input argument¬†#%d: A string expected.\n"), fname, 2);
108               return FALSE;
109             }
110           
111           if ( (strcmp(param[0],"off")==0) || (strcmp(param[0],"on")==0) )
112             {
113               setToolbarVisible(figNum, strcmp(param[0],"on")==0);
114             }
115           else
116             {
117               Scierror(999, _("%s: Wrong value for input argument #%d: '%s' or '%s' expected.\n"), fname, 2, "on", "off");
118               return FALSE;
119             }
120         }
121       else
122         {
123           Scierror(999, _("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 2);
124           return FALSE;
125         }
126     }
127
128   /* Returned value */
129   if (isToolbarVisible(figNum))
130     {
131       Output = strdup("on");
132     }
133   else
134     {
135       Output = strdup("off");
136     }
137   
138   nbCol = 1;
139   nbRow = (int)strlen(Output);
140   CreateVarFromPtr(Rhs+ 1,STRING_DATATYPE,&nbRow,&nbCol,&Output);
141   LhsVar(1) = Rhs+1;
142   C2F(putlhsvar)();     
143
144   if (Output) 
145     {
146       FREE(Output);
147       Output=NULL;
148     }
149
150   return TRUE;
151 }
152 /*--------------------------------------------------------------------------*/