ac9529acba55ee208bf1d1d921a3a13d3be397c9
[scilab.git] / scilab / modules / graphics / sci_gateway / c / sci_newaxes.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2006 - INRIA - Fabrice Leray
4  * Copyright (C) 2006 - INRIA - Jean-Baptiste Silvy
5  * Copyright (C) 2011 - DIGITEO - Manuel Juliachs
6  *
7  * This file must be used under the terms of the CeCILL.
8  * This source file is licensed as described in the file COPYING, which
9  * you should have received as part of this distribution.  The terms
10  * are also available at
11  * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
12  *
13  */
14
15 /*------------------------------------------------------------------------*/
16 /* file: sci_newaxes.c                                                    */
17 /* desc : interface for newaxes routine                                   */
18 /*------------------------------------------------------------------------*/
19
20 #include <stdlib.h>
21
22 #include "gw_graphics.h"
23 #include "api_scilab.h"
24 #include "BuildObjects.h"
25 #include "Scierror.h"
26 #include "SetProperty.h"
27 #include "localization.h"
28 #include "HandleManagement.h"
29
30 #include "CurrentFigure.h"
31 #include "CurrentSubwin.h"
32 #include "CurrentObject.h"
33 #include "createGraphicObject.h"
34 #include "graphicObjectProperties.h"
35 #include "getGraphicObjectProperty.h"
36
37 /*--------------------------------------------------------------------------*/
38 int sci_newaxes(char * fname, unsigned long fname_len)
39 {
40     SciErr sciErr;
41
42     long long* outindex = NULL;
43
44     int iSubwinUID = 0;
45     long long hParent = 0;
46     int iParentUID = -1;
47     int iParentType = -1;
48     int *piParentType = &iParentType;
49     int iParentStyle = -1;
50     int *piParentStyle = &iParentStyle;
51
52
53     CheckInputArgument(pvApiCtx, 0, 1);
54     CheckOutputArgument(pvApiCtx, 0, 1);
55
56     if (nbInputArgument(pvApiCtx) == 0)
57     {
58         getOrCreateDefaultSubwin();
59
60         if ((iSubwinUID = createSubWin (getCurrentFigure())) != 0)
61         {
62             if (createScalarHandle(pvApiCtx, nbInputArgument(pvApiCtx) + 1, getHandle(iSubwinUID)))
63             {
64                 printError(&sciErr, 0);
65                 Scierror(999, _("%s: Memory allocation error.\n"), fname);
66                 return 1;
67             }
68
69             AssignOutputVariable(pvApiCtx, 1) = 1;
70             ReturnArguments(pvApiCtx);
71         }
72         else
73         {
74             Scierror(999, _("%s: No more memory.\n"), fname);
75         }
76         return 0;
77     }
78     else
79     {
80         // NbInput Argument == 1
81         int* piAddr = NULL;
82         int iType = 0;
83
84         sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr);
85         if (sciErr.iErr)
86         {
87             Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
88             return 0;
89         }
90
91         if (isHandleType(pvApiCtx, piAddr) == FALSE || isScalar(pvApiCtx, piAddr) == FALSE)
92         {
93             Scierror(999, _("%s: Wrong size for input argument #%d: A graphic handle expected.\n"), fname, 1);
94             return 0;
95         }
96
97         if (getScalarHandle(pvApiCtx, piAddr, &hParent))
98         {
99             Scierror(202, _("%s: Wrong type for input argument #%d: Handle matrix expected.\n"), fname, 1);
100             return 1;
101         }
102
103         iParentUID = getObjectFromHandle((long)hParent);
104         if (iParentUID != 0)
105         {
106             getGraphicObjectProperty(iParentUID, __GO_TYPE__, jni_int, (void **)&piParentType);
107             getGraphicObjectProperty(iParentUID, __GO_STYLE__, jni_int, (void **)&piParentStyle);
108             if (!(iParentType == __GO_FIGURE__ || iParentStyle == __GO_UI_FRAME__))
109             {
110                 Scierror(999, _("%s: Wrong type for input argument #%d: A '%s' or '%s' handle expected.\n"), fname, 1, "Figure",
111                          "Frame");
112                 return FALSE;
113             }
114
115             if ((iSubwinUID = createSubWin(iParentUID)) != 0)
116             {
117                 if (createScalarHandle(pvApiCtx, nbInputArgument(pvApiCtx) + 1, getHandle(iSubwinUID)))
118                 {
119                     printError(&sciErr, 0);
120                     Scierror(999, _("%s: Memory allocation error.\n"), fname);
121                     return 1;
122                 }
123
124                 AssignOutputVariable(pvApiCtx, 1) = nbInputArgument(pvApiCtx) + 1;
125                 ReturnArguments(pvApiCtx);
126             }
127             else
128             {
129                 Scierror(999, _("%s: No more memory.\n"), fname);
130             }
131             return 0;
132         }
133         else
134         {
135             Scierror(999, _("%s: Wrong type for input argument #%d: A '%s' or '%s' handle expected.\n"), fname, 1, "Figure",
136                      "Frame");
137             return FALSE;
138         }
139     }
140 }
141 /*--------------------------------------------------------------------------*/