Datatips demos failed.
[scilab.git] / scilab / modules / gui / sci_gateway / cpp / sci_datatip_manager_mode.cpp
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2013 - Pedro Arthur dos S. Souza
4  *
5  * This file must be used under the terms of the CeCILL.
6  * This source file is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution.  The terms
8  * are also available at
9  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10  *
11  */
12
13 #include <cstring>
14 #include "DatatipManager.hxx"
15
16 extern "C"
17 {
18 #include "api_scilab.h"
19 #include "getScilabJavaVM.h"
20 #include "localization.h"
21 #include "Scierror.h"
22 #include "gw_gui.h"
23 #include "HandleManagement.h"
24 #include "CurrentFigure.h"
25 }
26
27 using namespace org_scilab_modules_gui_datatip;
28
29 int sci_datatip_manager_mode(char *fname, unsigned long fname_len)
30 {
31     int n = 0, iRows = 0, iCols = 0, l1 = 0, i = 0;
32     int* piAddr = NULL;;
33     int stkAdr = 0;
34     const char* pstFigureUID = NULL;
35     int * pbValue = NULL;
36     bool enabled = false;
37     int iType = 0;
38     int iLen = 0;
39     char *pstData = NULL;
40
41     SciErr sciErr;
42     CheckInputArgument(pvApiCtx, 0, 2);
43     CheckOutputArgument(pvApiCtx, 1, 1);
44
45     if (Rhs == 0)
46     {
47         pstFigureUID = getCurrentFigure();
48         if (pstFigureUID)
49         {
50             enabled = DatatipManager::isEnabled(getScilabJavaVM(), pstFigureUID);
51             DatatipManager::setEnabled(getScilabJavaVM(), pstFigureUID, (!enabled));
52         }
53     }
54     else if (Rhs == 1)
55     {
56         sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr);
57         if (sciErr.iErr)
58         {
59             printError(&sciErr, 0);
60             return 0;
61         }
62
63         sciErr = getVarType(pvApiCtx, piAddr, &iType);
64         if (sciErr.iErr)
65         {
66             printError(&sciErr, 0);
67             return 0;
68         }
69
70         switch(iType)
71         {
72         case sci_boolean :
73            sciErr = getMatrixOfBoolean(pvApiCtx, piAddr, &iRows, &iCols, &pbValue);
74             if (sciErr.iErr)
75             {
76                 printError(&sciErr, 0);
77                 return 0;
78             }
79             if (iRows * iCols != 1)
80             {
81                 Scierror(999, _("%s: Wrong size for input argument #%d: A boolean expected.\n"), fname, 1);
82                 return 0;
83             }
84             pstFigureUID = getCurrentFigure();
85             enabled = (bool) pbValue[0];
86             break;
87         case sci_strings :
88             sciErr = getMatrixOfString(pvApiCtx, piAddr, &iRows, &iCols, NULL, NULL);
89             if(sciErr.iErr)
90             {
91                 printError(&sciErr, 0);
92                 return 0;
93             }
94             if (iRows * iCols != 1)
95             {
96                 Scierror(999, _("%s: Wrong size for input argument #%d: A boolean expected.\n"), fname, 1);
97                 return 0;
98             }
99             sciErr = getMatrixOfString(pvApiCtx, piAddr, &iRows, &iCols, &iLen, NULL);
100             if(sciErr.iErr)
101             {
102                 printError(&sciErr, 0);
103                 return 0;
104             }
105             pstData = (char*) malloc(sizeof(char) * (iLen + 1));
106             sciErr = getMatrixOfString(pvApiCtx, piAddr, &iRows, &iCols, &iLen, &pstData);
107             if(sciErr.iErr)
108             {
109                 printError(&sciErr, 0);
110                 return 0;
111             }
112             if (strcmp("on", pstData) == 0 || strcmp("T", pstData) == 0 || strcmp("1", pstData) == 0)
113             {
114                 pstFigureUID = getCurrentFigure();
115                 enabled = true;
116             }
117             else if (strcmp("off", pstData) == 0 || strcmp("F", pstData) == 0 || strcmp("0", pstData) == 0)
118             {
119                 pstFigureUID = getCurrentFigure();
120                 enabled = false;
121             }
122             else
123             {
124                 free(pstData);
125                 Scierror(999, _("%s: Wrong value for input argument #%d: '%s' or '%s' expected.\n"), fname, 1, "on", "off");
126                 return 0;
127             }
128             free(pstData);
129             break;
130         case sci_handles :
131             GetRhsVar(1, GRAPHICAL_HANDLE_DATATYPE, &iRows, &iCols, &stkAdr);
132             if (iRows * iCols != 1)
133             {
134                 Scierror(999, _("%s: Wrong size for input argument #%d: A graphic handle expected.\n"), fname, 1);
135                 return FALSE;
136             }
137             pstFigureUID = (char *)getObjectFromHandle((unsigned long) * (hstk(stkAdr)));
138             if (pstFigureUID)
139             {
140                 enabled = !(DatatipManager::isEnabled(getScilabJavaVM(), pstFigureUID));
141             }
142             break;
143         default :
144             Scierror(999, _("%s: Wrong type for input argument #%d: A boolean expected.\n"), fname, 1);
145             return FALSE;
146         }
147     }
148     else if (Rhs == 2)
149     {
150         GetRhsVar(1, GRAPHICAL_HANDLE_DATATYPE, &iRows, &iCols, &stkAdr);
151         if (iRows * iCols != 1)
152         {
153             Scierror(999, _("%s: Wrong size for input argument #%d: A graphic handle expected.\n"), fname, 1);
154             return FALSE;
155         }
156         pstFigureUID = (char *)getObjectFromHandle((unsigned long) * (hstk(stkAdr)));
157
158         sciErr = getVarAddressFromPosition(pvApiCtx, 2, &piAddr);
159         if (sciErr.iErr)
160         {
161             printError(&sciErr, 0);
162             return FALSE;
163         }
164
165         sciErr = getVarType(pvApiCtx, piAddr, &iType);
166         if (sciErr.iErr)
167         {
168             printError(&sciErr, 0);
169             return FALSE;
170         }
171
172         switch(iType)
173         {
174         case sci_boolean :
175            sciErr = getMatrixOfBoolean(pvApiCtx, piAddr, &iRows, &iCols, &pbValue);
176             if (sciErr.iErr)
177             {
178                 printError(&sciErr, 0);
179                 return FALSE;
180             }
181             if (iRows * iCols != 1)
182             {
183                 Scierror(999, _("%s: Wrong size for input argument #%d: A boolean expected.\n"), fname, 1);
184                 return FALSE;
185             }
186             pstFigureUID = getCurrentFigure();
187             enabled = (bool) pbValue[0];
188             break;
189         case sci_strings :
190             sciErr = getMatrixOfString(pvApiCtx, piAddr, &iRows, &iCols, NULL, NULL);
191             if(sciErr.iErr)
192             {
193                 printError(&sciErr, 0);
194                 return 0;
195             }
196             if (iRows * iCols != 1)
197             {
198                 Scierror(999, _("%s: Wrong size for input argument #%d: A boolean expected.\n"), fname, 1);
199                 return 0;
200             }
201             sciErr = getMatrixOfString(pvApiCtx, piAddr, &iRows, &iCols, &iLen, NULL);
202             if(sciErr.iErr)
203             {
204                 printError(&sciErr, 0);
205                 return 0;
206             }
207             pstData = (char*) malloc(sizeof(char) * (iLen + 1));
208             sciErr = getMatrixOfString(pvApiCtx, piAddr, &iRows, &iCols, &iLen, &pstData);
209             if(sciErr.iErr)
210             {
211                 printError(&sciErr, 0);
212                 return 0;
213             }
214             if (strcmp("on", pstData) == 0 || strcmp("T", pstData) == 0 || strcmp("1", pstData) == 0)
215             {
216                 pstFigureUID = getCurrentFigure();
217                 enabled = true;
218             }
219             else if (strcmp("off", pstData) == 0 || strcmp("F", pstData) == 0 || strcmp("0", pstData) == 0)
220             {
221                 pstFigureUID = getCurrentFigure();
222                 enabled = false;
223             }
224             else
225             {
226                 free(pstData);
227                 Scierror(999, _("%s: Wrong value for input argument #%d: '%s' or '%s' expected.\n"), fname, 1, "on", "off");
228                 return 0;
229             }
230             free(pstData);
231             break;
232         default :
233             Scierror(999, _("%s: Wrong type for input argument #%d: A boolean expected.\n"), fname, 2);
234             return FALSE;
235         }
236     }
237     else
238     {
239         Scierror(999, _("%s: Wrong number for input argument: %d expected.\n"), fname, 2);
240         return FALSE;
241     }
242
243     if (pstFigureUID)
244     {
245         DatatipManager::setEnabled(getScilabJavaVM(), pstFigureUID, enabled);
246     }
247
248     LhsVar(1) = 0;
249     PutLhsVar();
250
251     return TRUE;
252 }
253