GUI module ported to api_scilab. test_run("gui")
[scilab.git] / scilab / modules / gui / sci_gateway / c / sci_getcallbackobject.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 /*--------------------------------------------------------------------------*/
15 #include <stdlib.h>
16
17 #include "localization.h"
18 #include "Scierror.h"
19 #include "HandleManagement.h"
20 #include "api_scilab.h"
21 #include "gw_gui.h"
22 /*--------------------------------------------------------------------------*/
23 int sci_getcallbackobject(char *fname, unsigned long fname_len)
24 {
25     SciErr sciErr;
26
27     int* piAddrpObjUID = NULL;
28     int nbRow = 0;
29     int nbCol = 0;
30     char** pObjUID = NULL;
31     unsigned long graphicHandle = 0;
32
33     CheckInputArgument(pvApiCtx, 1, 1);
34     CheckOutputArgument(pvApiCtx, 0, 1);
35
36     if ((checkInputArgumentType(pvApiCtx, 1, sci_strings)))
37     {
38         sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddrpObjUID);
39         if (sciErr.iErr)
40         {
41             printError(&sciErr, 0);
42             return 1;
43         }
44
45         // Retrieve a matrix of string at position 1.
46         if (getAllocatedMatrixOfString(pvApiCtx, piAddrpObjUID, &nbRow, &nbCol, &pObjUID))
47         {
48             Scierror(202, _("%s: Wrong type for argument #%d: String matrix expected.\n"), fname, 1);
49             return 1;
50         }
51
52         if (nbCol != 1 || nbRow == 0)
53         {
54             Scierror(999, _("%s: Wrong size for input argument #%d: A string expected.\n"), fname, 1);
55             return FALSE;
56         }
57     }
58     else
59     {
60         Scierror(999, _("%s: Wrong type for input argument #%d: A string expected.\n"), fname, 1);
61         return FALSE;
62     }
63
64     graphicHandle = getHandle(pObjUID[0]);
65     freeAllocatedMatrixOfString(nbRow, nbCol, pObjUID);
66
67     /* Create return variable */
68     if (graphicHandle == 0)     /* Non-existing object --> return [] */
69     {
70         double* stkAdr = NULL;
71         nbRow = 0;
72         nbCol = 0;
73
74         sciErr = allocMatrixOfDouble(pvApiCtx, nbInputArgument(pvApiCtx) + 1, nbRow, nbCol, &stkAdr);
75         if (sciErr.iErr)
76         {
77             printError(&sciErr, 0);
78             Scierror(999, _("%s: Memory allocation error.\n"), fname);
79             return 1;
80         }
81     }
82     else                        /* Return the handle */
83     {
84         long long* stkAdr = NULL;
85         nbRow = 1;
86         nbCol = 1;
87
88         sciErr = allocMatrixOfHandle(pvApiCtx, nbInputArgument(pvApiCtx) + 1, nbRow, nbCol, &stkAdr);
89         if (sciErr.iErr)
90         {
91             printError(&sciErr, 0);
92             Scierror(999, _("%s: Memory allocation error.\n"), fname);
93             return 1;
94         }
95
96         *stkAdr = (long long)graphicHandle;
97     }
98
99     AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
100     ReturnArguments(pvApiCtx);
101     return TRUE;
102 }
103
104 /*--------------------------------------------------------------------------*/