GUI module ported to api_scilab. test_run("gui")
[scilab.git] / scilab / modules / gui / sci_gateway / c / sci_uiwait.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 "localization.h"
16 #include "api_scilab.h"
17 #include "Scierror.h"
18 #include "ContextMenu.h"
19 #include "graphicObjectProperties.h"
20 #include "getGraphicObjectProperty.h"
21 #include "HandleManagement.h"
22 /*--------------------------------------------------------------------------*/
23 int sci_uiwait(char *fname, unsigned long fname_len)
24 {
25     SciErr sciErr;
26
27     int* piAddrstkAdr = NULL;
28     long long* stkAdr = NULL;
29     char* strAdr = NULL;
30
31     int nbRow = 0, nbCol = 0;
32     char *result = NULL;
33
34     char *pObjUID = NULL;
35     int iObjType = -1;
36     int *piObjType = &iObjType;
37
38     CheckInputArgument(pvApiCtx, 1, 1);
39     CheckOutputArgument(pvApiCtx, 0, 1);
40
41     if ((checkInputArgumentType(pvApiCtx, 1, sci_handles)))
42     {
43         sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddrstkAdr);
44         if (sciErr.iErr)
45         {
46             printError(&sciErr, 0);
47             return 1;
48         }
49
50         // Retrieve a matrix of handle at position 1.
51         sciErr = getMatrixOfHandle(pvApiCtx, piAddrstkAdr, &nbRow, &nbCol, &stkAdr);
52         if (sciErr.iErr)
53         {
54             printError(&sciErr, 0);
55             Scierror(202, _("%s: Wrong type for argument %d: Handle matrix expected.\n"), fname, 1);
56             return 1;
57         }
58
59         if (nbRow * nbCol != 1)
60         {
61             Scierror(999, _("%s: Wrong size for input argument #%d: A graphic handle expected.\n"), fname, 1);
62             return FALSE;
63         }
64
65         pObjUID = (char*)getObjectFromHandle((unsigned long) * stkAdr);
66
67         getGraphicObjectProperty(pObjUID, __GO_TYPE__, jni_int, (void **)&piObjType);
68         if (iObjType == __GO_UICONTEXTMENU__)
69         {
70             result = uiWaitContextMenu(pObjUID);
71         }
72         else
73         {
74             Scierror(999, _("%s: Wrong type for input argument #%d: A '%s' handle expected.\n"), fname, 1, "Uicontextmenu");
75             return FALSE;
76         }
77     }
78     else
79     {
80         Scierror(999, _("%s: Wrong type for input argument #%d: A graphic handle expected.\n"), fname, 1);
81         return FALSE;
82     }
83
84     /* Create return variable */
85     nbRow = (int)strlen(result);
86     nbCol = 1;
87
88     if (allocSingleString(pvApiCtx, nbInputArgument(pvApiCtx) + 1, nbRow * nbCol, (const char**) &strAdr))
89     {
90         Scierror(999, _("%s: Memory allocation error.\n"), fname);
91         return 1;
92     }
93
94     strcpy(strAdr, result);
95
96     // TO DO : delete of "result"
97     // uiWaitContextMenu(pObjUID) can return NULL.
98
99     AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
100     ReturnArguments(pvApiCtx);
101     return TRUE;
102 }
103
104 /*--------------------------------------------------------------------------*/