3f756a8e12885258d3672b953608d27ce7164063
[scilab.git] / scilab / modules / gui / sci_gateway / c / sci_waitbar.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2008 - INRIA - Vincent COUVERT
4  * Copyright (C) 2011 - DIGITEO - 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 "localization.h"
17 #include "Scierror.h"
18 #include "getPropertyAssignedValue.h"
19 #include "HandleManagement.h"
20 #include "freeArrayOfString.h"
21
22 #include "createGraphicObject.h"
23 #include "graphicObjectProperties.h"
24 #include "setGraphicObjectProperty.h"
25 /*--------------------------------------------------------------------------*/
26 int sci_waitbar(char *fname, unsigned long fname_len)
27 {
28     char *pWaitbarUID = NULL;
29
30     int nbRow = 0, nbCol = 0;
31     int nbRowMessage = 0, nbColMessage = 0;
32
33     int fractionAdr = 0;
34     char **messageAdr = NULL;
35     int handleAdr = 0;
36     int stkAdr = 0;
37
38     int iValue = 0;
39
40     unsigned long GraphicHandle = 0;
41
42     CheckRhs(1, 3);
43     CheckLhs(1, 1);
44
45     if (Rhs == 1)
46     {
47         if (VarType(1) == sci_matrix)   /* Fraction to display */
48         {
49             GetRhsVar(1, MATRIX_OF_DOUBLE_DATATYPE, &nbRow, &nbCol, &fractionAdr);
50             if (nbRow * nbCol != 1)
51             {
52                 Scierror(999, _("%s: Wrong size for input argument #%d: A real expected.\n"), fname, 1);
53                 return FALSE;
54             }
55         }
56         else if (VarType(1) == sci_strings) /* Message to display */
57         {
58             GetRhsVar(1, MATRIX_OF_STRING_DATATYPE, &nbRowMessage, &nbColMessage, &messageAdr);
59         }
60         else
61         {
62             Scierror(999, _("%s: Wrong type for input argument #%d: A real or a string expected.\n"), fname, 1);
63             return FALSE;
64         }
65
66         /* Create a new waitbar */
67         pWaitbarUID = createGraphicObject(__GO_WAITBAR__);
68
69         GraphicHandle = getHandle(pWaitbarUID);
70
71         if (fractionAdr != 0)
72         {
73             iValue = (int)(getDoubleFromStack(fractionAdr) * 100);
74             setGraphicObjectProperty(pWaitbarUID, __GO_UI_VALUE__, &iValue, jni_int, 1);
75         }
76         else if (messageAdr != NULL)
77         {
78             setGraphicObjectProperty(pWaitbarUID, __GO_UI_MESSAGE__, getStringMatrixFromStack((size_t) messageAdr), jni_string_vector,
79                                      nbColMessage * nbRowMessage);
80             freeArrayOfString(messageAdr, nbColMessage * nbRowMessage);
81         }
82     }
83     else if (Rhs == 2)
84     {
85         if (VarType(1) == sci_matrix && VarType(2) == sci_strings)  /* waitbar(x,mes) */
86         {
87             GetRhsVar(1, MATRIX_OF_DOUBLE_DATATYPE, &nbRow, &nbCol, &fractionAdr);
88             if (nbRow * nbCol != 1)
89             {
90                 Scierror(999, _("%s: Wrong size for input argument #%d: A real expected.\n"), fname, 1);
91                 return FALSE;
92             }
93             GetRhsVar(2, MATRIX_OF_STRING_DATATYPE, &nbRowMessage, &nbColMessage, &messageAdr);
94
95             pWaitbarUID = createGraphicObject(__GO_WAITBAR__);
96
97             GraphicHandle = getHandle(pWaitbarUID);
98
99             iValue = (int)(getDoubleFromStack(fractionAdr) * 100);
100             setGraphicObjectProperty(pWaitbarUID, __GO_UI_VALUE__, &iValue, jni_int, 1);
101             setGraphicObjectProperty(pWaitbarUID, __GO_UI_MESSAGE__, getStringMatrixFromStack((size_t) messageAdr), jni_string_vector,
102                                      nbColMessage * nbRowMessage);
103             freeArrayOfString(messageAdr, nbColMessage * nbRowMessage);
104         }
105         else if (VarType(1) == sci_matrix && VarType(2) == sci_handles) /* waitbar(x,winId) */
106         {
107             GetRhsVar(1, MATRIX_OF_DOUBLE_DATATYPE, &nbRow, &nbCol, &fractionAdr);
108             if (nbRow * nbCol != 1)
109             {
110                 Scierror(999, _("%s: Wrong size for input argument #%d: A real expected.\n"), fname, 1);
111                 return FALSE;
112             }
113
114             GetRhsVar(2, GRAPHICAL_HANDLE_DATATYPE, &nbRow, &nbCol, &handleAdr);
115             if (nbRow * nbCol != 1)
116             {
117                 Scierror(999, _("%s: Wrong size for input argument #%d: A '%s' handle expected.\n"), fname, 2, "Waitbar");
118                 return FALSE;
119             }
120
121             GraphicHandle = (unsigned long)*hstk(handleAdr);
122             pWaitbarUID = (char*)getObjectFromHandle(GraphicHandle);
123             if (pWaitbarUID == NULL)
124             {
125                 Scierror(999, _("%s: Wrong value for input argument #%d: A valid '%s' handle expected.\n"), fname, 2, "Waitbar");
126                 return FALSE;
127             }
128
129             iValue = (int)(getDoubleFromStack(fractionAdr) * 100);
130             setGraphicObjectProperty(pWaitbarUID, __GO_UI_VALUE__, &iValue, jni_int, 1);
131         }
132         else if (VarType(1) == sci_strings && VarType(2) == sci_handles)    /* waitbar(mes,winId) */
133         {
134             GetRhsVar(1, MATRIX_OF_STRING_DATATYPE, &nbRowMessage, &nbColMessage, &messageAdr);
135
136             GetRhsVar(2, GRAPHICAL_HANDLE_DATATYPE, &nbRow, &nbCol, &handleAdr);
137             if (nbRow * nbCol != 1)
138             {
139                 Scierror(999, _("%s: Wrong size for input argument #%d: A '%s' handle expected.\n"), fname, 2, "Waitbar");
140                 return FALSE;
141             }
142
143             GraphicHandle = (unsigned long)*hstk(handleAdr);
144             pWaitbarUID = (char*)getObjectFromHandle(GraphicHandle);
145             if (pWaitbarUID == NULL)
146             {
147                 Scierror(999, _("%s: Wrong value for input argument #%d: A valid '%s' handle expected.\n"), fname, 2, "Waitbar");
148                 return FALSE;
149             }
150
151             setGraphicObjectProperty(pWaitbarUID, __GO_UI_MESSAGE__, getStringMatrixFromStack((size_t) messageAdr), jni_string_vector,
152                                      nbColMessage * nbRowMessage);
153             freeArrayOfString(messageAdr, nbColMessage * nbRowMessage);
154         }
155         else
156         {
157             Scierror(999, _("%s: Wrong input arguments: '%s', '%s' or '%s' expected.\n"), fname, "(x, mes)", "(x, winId)", "(mes, winId)");
158             return FALSE;
159         }
160     }
161     else
162     {
163         if (VarType(1) == sci_matrix)   /* Fraction */
164         {
165             GetRhsVar(1, MATRIX_OF_DOUBLE_DATATYPE, &nbRow, &nbCol, &fractionAdr);
166             if (nbRow * nbCol != 1)
167             {
168                 Scierror(999, _("%s: Wrong size for input argument #%d: A real expected.\n"), fname, 1);
169                 return FALSE;
170             }
171         }
172         else
173         {
174             Scierror(999, _("%s: Wrong type for input argument #%d: A real expected.\n"), fname, 1);
175             return FALSE;
176         }
177
178         if (VarType(2) == sci_strings)  /* Message */
179         {
180             GetRhsVar(2, MATRIX_OF_STRING_DATATYPE, &nbRowMessage, &nbColMessage, &messageAdr);
181         }
182         else
183         {
184             Scierror(999, _("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 2);
185             return FALSE;
186         }
187
188         if (VarType(3) == sci_handles)  /* Handle */
189         {
190             GetRhsVar(3, GRAPHICAL_HANDLE_DATATYPE, &nbRow, &nbCol, &handleAdr);
191             if (nbRow * nbCol != 1)
192             {
193                 freeArrayOfString(messageAdr, nbColMessage * nbRowMessage);
194                 Scierror(999, _("%s: Wrong size for input argument #%d: A '%s' handle expected.\n"), fname, 3, "Waitbar");
195                 return FALSE;
196             }
197         }
198         else
199         {
200             freeArrayOfString(messageAdr, nbColMessage * nbRowMessage);
201             Scierror(999, _("%s: Wrong type for input argument #%d: A '%s' handle expected.\n"), fname, 3, "Waitbar");
202             return FALSE;
203         }
204
205         GraphicHandle = (unsigned long)*hstk(handleAdr);
206         pWaitbarUID = (char*)getObjectFromHandle(GraphicHandle);
207         if (pWaitbarUID != NULL)
208         {
209             iValue = (int)(getDoubleFromStack(fractionAdr) * 100);
210             setGraphicObjectProperty(pWaitbarUID, __GO_UI_VALUE__, &iValue, jni_int, 1);
211             setGraphicObjectProperty(pWaitbarUID, __GO_UI_MESSAGE__, getStringMatrixFromStack((size_t) messageAdr), jni_string_vector,
212                                      nbColMessage * nbRowMessage);
213             freeArrayOfString(messageAdr, nbColMessage * nbRowMessage);
214         }
215         else
216         {
217             freeArrayOfString(messageAdr, nbColMessage * nbRowMessage);
218             Scierror(999, _("%s: Wrong value for input argument #%d: A valid '%s' handle expected.\n"), fname, 3, "Waitbar");
219             return 0;
220         }
221     }
222
223     if (Lhs == 1)
224     {
225         nbRow = 1;
226         nbCol = 1;
227         CreateVar(Rhs + 1, GRAPHICAL_HANDLE_DATATYPE, &nbRow, &nbCol, &stkAdr);
228         *hstk(stkAdr) = GraphicHandle;
229         LhsVar(1) = Rhs + 1;
230     }
231     else
232     {
233         LhsVar(1) = 0;
234     }
235
236     PutLhsVar();
237
238     return TRUE;
239
240 }
241
242 /*--------------------------------------------------------------------------*/