d80ac6de8ec0fee0ffb275ecb608c467294cedf6
[scilab.git] / scilab / modules / gui / sci_gateway / cpp / sci_datatip_manager_mode.cpp
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2013 - Pedro Arthur dos S. Souza
4  *
5  * This file must be used under the terms of the CeCILL.
6  * This source file is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution.  The terms
8  * are also available at
9  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10  *
11  */
12
13 #include "DatatipManager.hxx"
14
15 extern "C"
16 {
17 #include "api_scilab.h"
18 #include "getScilabJavaVM.h"
19 #include "localization.h"
20 #include "Scierror.h"
21 #include "gw_gui.h"
22 #include "HandleManagement.h"
23 #include "CurrentFigure.h"
24 }
25
26 using namespace org_scilab_modules_gui_datatip;
27
28 int sci_datatip_manager_mode(char *fname, unsigned long fname_len)
29 {
30     int n = 0, nbRow = 0, nbCol = 0, l1 = 0, i = 0;
31     int* piAddr = NULL;;
32     int stkAdr = 0;
33     const char* pstFigureUID = NULL;
34     int * pbValue = NULL;
35     bool enabled = false;
36
37     SciErr sciErr;
38     CheckInputArgument(pvApiCtx, 0, 2);
39     CheckOutputArgument(pvApiCtx, 1, 1);
40
41     if (Rhs == 0) 
42     {
43         pstFigureUID = getCurrentFigure();
44         if (pstFigureUID)
45         {
46             enabled = DatatipManager::isEnabled(getScilabJavaVM(), pstFigureUID);
47             DatatipManager::setEnabled(getScilabJavaVM(), pstFigureUID, (!enabled));
48         }
49     }
50     else if (Rhs == 1)
51     {
52         sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr);
53         if (sciErr.iErr)
54         {
55             printError(&sciErr, 0);
56             return FALSE;
57         }
58         if (checkInputArgumentType(pvApiCtx, 1, sci_boolean))
59         {
60
61             sciErr = getMatrixOfBoolean(pvApiCtx, piAddr, &nbRow, &nbCol, &pbValue);
62             if (sciErr.iErr)
63             {
64                 printError(&sciErr, 0);
65                 return FALSE;
66             }   
67             if (nbRow * nbCol != 1)
68             {
69                 Scierror(999, _("%s: Wrong size for input argument #%d: A boolean expected.\n"), fname, 1);
70                 return FALSE;
71             }
72             pstFigureUID = getCurrentFigure();
73             if (pstFigureUID)
74             {
75
76                 DatatipManager::setEnabled(getScilabJavaVM(), pstFigureUID, (bool)pbValue[0]);
77             }
78         } 
79         else if (checkInputArgumentType(pvApiCtx, 1, sci_handles))
80         {
81             GetRhsVar(1, GRAPHICAL_HANDLE_DATATYPE, &nbRow, &nbCol, &stkAdr);
82             if (nbRow * nbCol != 1)
83             {
84                 Scierror(999, _("%s: Wrong size for input argument #%d: A graphic handle expected.\n"), fname, 1);
85                 return FALSE;
86             }
87             pstFigureUID = (char *)getObjectFromHandle((unsigned long) * (hstk(stkAdr)));
88             if (pstFigureUID)
89             {
90                 enabled = DatatipManager::isEnabled(getScilabJavaVM(), pstFigureUID);
91                 DatatipManager::setEnabled(getScilabJavaVM(), pstFigureUID, (!enabled));
92             }
93         }
94     }
95     else if (Rhs == 2)
96     {
97         GetRhsVar(1, GRAPHICAL_HANDLE_DATATYPE, &nbRow, &nbCol, &stkAdr);
98         if (nbRow * nbCol != 1)
99         {
100             Scierror(999, _("%s: Wrong size for input argument #%d: A graphic handle expected.\n"), fname, 1);
101             return FALSE;
102         }
103         pstFigureUID = (char *)getObjectFromHandle((unsigned long) * (hstk(stkAdr)));
104
105         sciErr = getVarAddressFromPosition(pvApiCtx, 2, &piAddr);
106         if (sciErr.iErr)
107         {
108             printError(&sciErr, 0);
109             return FALSE;
110         }
111         sciErr = getMatrixOfBoolean(pvApiCtx, piAddr, &nbRow, &nbCol, &pbValue);
112         if (sciErr.iErr)
113         {
114             printError(&sciErr, 0);
115             return FALSE;
116         }   
117         if (nbRow * nbCol != 1)
118         {
119             Scierror(999, _("%s: Wrong size for input argument #%d: A boolean expected.\n"), fname, 1);
120             return FALSE;
121         }
122         DatatipManager::setEnabled(getScilabJavaVM(), pstFigureUID, (bool)pbValue[0]);
123     }
124     else
125     {
126         Scierror(999, _("%s: Wrong number for input argument: %d expected.\n"), fname, 2);
127         return FALSE;
128     }
129
130
131     LhsVar(1) = 0;
132     PutLhsVar();
133
134     return TRUE;
135 }
136