8d9cba92585a44563b5b128696994104fc535af3
[scilab.git] / scilab / modules / gui / sci_gateway / cpp / sci_datatipremove.cpp
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2012 - 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 #include "DatatipDelete.hxx"
17 #include "ScilabView.hxx"
18
19 extern "C"
20 {
21 #include "api_scilab.h"
22 #include "getScilabJavaVM.h"
23 #include "localization.h"
24 #include "Scierror.h"
25 #include "gw_gui.h"
26 #include "setGraphicObjectProperty.h"
27 #include "getGraphicObjectProperty.h"
28 #include "graphicObjectProperties.h"
29 #include "HandleManagement.h"
30 #include "FigureList.h"
31 #include "CurrentFigure.h"
32 #include "BuildObjects.h"
33 }
34
35 using namespace org_scilab_modules_gui_datatip;
36
37 int sci_datatipremove(char *fname, void* pvApiCtx)
38 {
39     int iFigureUID      = 0;
40     int iDatatipUID     = 0;
41     int iPolylineUID    = 0;
42     double* pdblReal    = NULL;
43     int* piAddr         = NULL;
44     long long llHandle  = 0;
45     int indexPos        = 0;
46     int iErr            = 0;
47     int nbRow           = 0;
48     int nbCol           = 0;
49     int iType           = 0;
50     int *piType         = &iType;
51
52     SciErr sciErr;
53     CheckInputArgument(pvApiCtx, 1, 2);
54     CheckOutputArgument(pvApiCtx, 0, 1);
55
56     sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr);
57     if (sciErr.iErr)
58     {
59         printError(&sciErr, 0);
60         Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
61         return 1;
62     }
63
64     iErr = getScalarHandle(pvApiCtx, piAddr, &llHandle);
65     if (iErr)
66     {
67         Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
68         return 1;
69     }
70
71     if (nbInputArgument(pvApiCtx) == 1)
72     {
73         iFigureUID = getCurrentFigure();
74         iDatatipUID = getObjectFromHandle((unsigned long) llHandle);
75
76         if (checkInputArgumentType(pvApiCtx, 1, sci_handles))
77         {
78             getGraphicObjectProperty(iDatatipUID, __GO_TYPE__, jni_int, (void**) &piType);
79             if (iType == __GO_DATATIP__)
80             {
81                 DatatipDelete::datatipRemoveProgramHandler(getScilabJavaVM(), iDatatipUID, iFigureUID);
82             }
83             else
84             {
85                 Scierror(999, _("%s: Wrong type for input argument #%d: A '%s' handle expected.\n"), fname, 1, "Datatip");
86                 return 1;
87             }
88         }
89         else
90         {
91             Scierror(999, _("%s: Wrong type for input argument #%d: A handle expected.\n"), fname, 1);
92             return 1;
93         }
94     }
95     else if (nbInputArgument(pvApiCtx) == 2)
96     {
97         iPolylineUID = getObjectFromHandle((unsigned long) llHandle);
98
99         if (checkInputArgumentType(pvApiCtx, 1, sci_handles))
100         {
101             getGraphicObjectProperty(iPolylineUID, __GO_TYPE__, jni_int, (void**) &piType);
102             if (iType == __GO_POLYLINE__)
103             {
104
105                 sciErr = getVarAddressFromPosition(pvApiCtx, 2, &piAddr);
106                 if (sciErr.iErr)
107                 {
108                     printError(&sciErr, 0);
109                     return 1;
110                 }
111
112                 sciErr = getMatrixOfDouble(pvApiCtx, piAddr, &nbRow, &nbCol, &pdblReal);
113                 if (sciErr.iErr)
114                 {
115                     printError(&sciErr, 0);
116                     return 1;
117                 }
118
119                 if (checkInputArgumentType(pvApiCtx, 2, sci_matrix))
120                 {
121
122                     if (nbRow * nbCol == 1)
123                     {
124                         indexPos = (int) pdblReal[0];
125                         DatatipDelete::datatipRemoveProgramIndex(getScilabJavaVM(), iPolylineUID, indexPos);
126
127                     }
128                     else
129                     {
130                         Scierror(999, _("%s: Wrong size for input argument #%d: A scalar expected.\n"), fname, 2);
131                         return 1;
132
133                     }
134                 }
135                 else
136                 {
137                     Scierror(999, _("%s: Wrong type for input argument #%d: A scalar expected.\n"), fname, 2);
138                     return 1;
139                 }
140             }
141             else
142             {
143                 Scierror(999, _("%s: Wrong type for input argument #%d: A '%s' handle expected.\n"), fname, 1, "Polyline");
144                 return 1;
145             }
146         }
147         else
148         {
149             Scierror(999, _("%s: Wrong type for input argument #%d: A handle expected.\n"), fname, 1);
150             return 1;
151         }
152     }
153     else
154     {
155         Scierror(999, _("%s: Wrong number for input argument: %d or %d expected.\n"), fname, 1, 2);
156         return 1;
157     }
158
159     AssignOutputVariable(pvApiCtx, 1) = 0;
160     ReturnArguments(pvApiCtx);
161     return 0;
162 }