load: avoid creation of double axes in figure
[scilab.git] / scilab / modules / gui / sci_gateway / cpp / sci_datatip_set_display.cpp
1 /*
2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2013 - Gustavo Barbosa Libotte <gustavolibotte@gmail.com>
4 *
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13 *
14 */
15
16 extern "C"
17 {
18 #include "api_scilab.h"
19 #include "getScilabJavaVM.h"
20 #include "localization.h"
21 #include "sci_malloc.h"
22 #include "Scierror.h"
23 #include "gw_gui.h"
24 #include "HandleManagement.h"
25 #include "CurrentFigure.h"
26 #include "getGraphicObjectProperty.h"
27 #include "setGraphicObjectProperty.h"
28 #include "graphicObjectProperties.h"
29 }
30
31 int sci_datatip_set_display(char *fname, void* pvApiCtx)
32 {
33     SciErr sciErr;
34     CheckInputArgument(pvApiCtx, 1, 2);
35     CheckOutputArgument(pvApiCtx, 1, 1);
36
37     int iDatatipUID     = 0;
38     int* piAddr         = NULL;
39     char* pstData       = NULL;
40     int iRet            = 0;
41     int iErr            = 0;
42     long long llHandle  = 0;
43
44     int iType = 0;
45     int *piType = &iType;
46
47     sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr);
48     if (sciErr.iErr)
49     {
50         printError(&sciErr, 0);
51         return 1;
52     }
53
54     iErr = getScalarHandle(pvApiCtx, piAddr, &llHandle);
55     if (iErr)
56     {
57         Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
58         return 1;
59     }
60
61     iDatatipUID = getObjectFromHandle((unsigned long) llHandle);
62
63     if (checkInputArgumentType(pvApiCtx, 1, sci_handles))
64     {
65         getGraphicObjectProperty(iDatatipUID, __GO_TYPE__, jni_int, (void**) &piType);
66         if (iType == __GO_DATATIP__ || iType == __GO_POLYLINE__)
67         {
68             if (nbInputArgument(pvApiCtx) == 1)
69             {
70                 setGraphicObjectProperty(iDatatipUID, __GO_DATATIP_DISPLAY_FNC__, "", jni_string, 1);
71                 AssignOutputVariable(pvApiCtx, 1) = 0;
72                 ReturnArguments(pvApiCtx);
73                 return 0;
74             }
75             else if (nbInputArgument(pvApiCtx) == 2)
76             {
77                 sciErr = getVarAddressFromPosition(pvApiCtx, 2, &piAddr);
78                 if (sciErr.iErr)
79                 {
80                     printError(&sciErr, 0);
81                     return 1;
82                 }
83
84                 if (isStringType(pvApiCtx, piAddr))
85                 {
86                     if (isScalar(pvApiCtx, piAddr))
87                     {
88
89                         iRet = getAllocatedSingleString(pvApiCtx, piAddr, &pstData);
90                         if (iRet)
91                         {
92                             freeAllocatedSingleString(pstData);
93                             return iRet;
94                         }
95
96                         setGraphicObjectProperty(iDatatipUID, __GO_DATATIP_DISPLAY_FNC__, pstData, jni_string, 1);
97
98                         freeAllocatedSingleString(pstData);
99                         AssignOutputVariable(pvApiCtx, 1) = 0;
100                         ReturnArguments(pvApiCtx);
101                         return 0;
102                     }
103                     else
104                     {
105                         Scierror(999, _("%s: Wrong size for input argument #%d: string or macro name expected.\n"), fname, 2);
106                         return 1;
107                     }
108                 }
109                 else
110                 {
111                     sciErr = getVarType(pvApiCtx, piAddr, &iType);
112                     if (iType == sci_c_function || iType == sci_u_function)
113                     {
114                         char *pstFunctionName = (char*) MALLOC(sizeof(char) * (200));
115                         sciErr = getVarNameFromPosition(pvApiCtx, 2, pstFunctionName);
116                         if (sciErr.iErr)
117                         {
118                             Scierror(999, _("%s: Wrong type for input argument #%d: string or macro name expected.\n"), fname, 2);
119                             return 1;
120                         }
121                         setGraphicObjectProperty(iDatatipUID, __GO_DATATIP_DISPLAY_FNC__, pstFunctionName, jni_string, 1);
122                         FREE(pstFunctionName);
123                         AssignOutputVariable(pvApiCtx, 1) = 0;
124                         ReturnArguments(pvApiCtx);
125                         return 0;
126                     }
127                     else
128                     {
129                         Scierror(999, _("%s: Wrong type for input argument #%d: string or macro name expected.\n"), fname, 2);
130                         return 1;
131                     }
132                 }
133             }
134             else
135             {
136                 Scierror(999, _("%s: Wrong number of input arguments: %d or %d expected.\n"), fname, 1, 2);
137                 return 1;
138             }
139
140         }
141         else
142         {
143             Scierror(999, _("%s: Wrong type for input argument #%d: A '%s' or '%s' handle expected.\n"), fname, 1, "Polyline", "Datatip");
144             return 1;
145         }
146     }
147     else
148     {
149         Scierror(999, _("%s: Wrong type for input argument #%d: A '%s' or '%s' handle expected.\n"), fname, 1, "Polyline", "Datatip");
150         return 1;
151     }
152 }