clone gda().user_data on clone axes
[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     int iRhs = nbInputArgument(pvApiCtx);
53
54     CheckInputArgument(pvApiCtx, 0, 1);
55     CheckOutputArgument(pvApiCtx, 0, 1);
56
57     if (iRhs == 0)
58     {
59         getOrCreateDefaultSubwin();
60
61         if ((iSubwinUID = createSubWin (getCurrentFigure())) != 0)
62         {
63             if (createScalarHandle(pvApiCtx, iRhs + 1, getHandle(iSubwinUID)))
64             {
65                 printError(&sciErr, 0);
66                 Scierror(999, _("%s: Memory allocation error.\n"), fname);
67                 return 1;
68             }
69
70             AssignOutputVariable(pvApiCtx, 1) = 1;
71             ReturnArguments(pvApiCtx);
72         }
73         else
74         {
75             Scierror(999, _("%s: No more memory.\n"), fname);
76         }
77         return 0;
78     }
79     else
80     {
81         // iRhs == 1
82         int* piAddr = NULL;
83         int iType = 0;
84
85         sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr);
86         if (sciErr.iErr)
87         {
88             Scierror(999, _("%s: Can not read input argument #%d.\n"), fname, 1);
89             return 0;
90         }
91
92         if (isHandleType(pvApiCtx, piAddr) == FALSE || isScalar(pvApiCtx, piAddr) == FALSE)
93         {
94             Scierror(999, _("%s: Wrong size for input argument #%d: A graphic handle expected.\n"), fname, 1);
95             return 0;
96         }
97
98         if (getScalarHandle(pvApiCtx, piAddr, &hParent))
99         {
100             Scierror(202, _("%s: Wrong type for input argument #%d: Handle matrix expected.\n"), fname, 1);
101             return 1;
102         }
103
104         iParentUID = getObjectFromHandle((long)hParent);
105         if (iParentUID != 0)
106         {
107             getGraphicObjectProperty(iParentUID, __GO_TYPE__, jni_int, (void **)&piParentType);
108             getGraphicObjectProperty(iParentUID, __GO_STYLE__, jni_int, (void **)&piParentStyle);
109             if (!(iParentType == __GO_FIGURE__ || iParentStyle == __GO_UI_FRAME__))
110             {
111                 Scierror(999, _("%s: Wrong type for input argument #%d: A '%s' or '%s' handle expected.\n"), fname, 1, "Figure",
112                          "Frame");
113                 return FALSE;
114             }
115
116             if ((iSubwinUID = createSubWin(iParentUID)) != 0)
117             {
118                 if (createScalarHandle(pvApiCtx, iRhs + 1, getHandle(iSubwinUID)))
119                 {
120                     printError(&sciErr, 0);
121                     Scierror(999, _("%s: Memory allocation error.\n"), fname);
122                     return 1;
123                 }
124
125                 AssignOutputVariable(pvApiCtx, 1) = iRhs + 1;
126                 ReturnArguments(pvApiCtx);
127             }
128             else
129             {
130                 Scierror(999, _("%s: No more memory.\n"), fname);
131             }
132             return 0;
133         }
134         else
135         {
136             Scierror(999, _("%s: Wrong type for input argument #%d: A '%s' or '%s' handle expected.\n"), fname, 1, "Figure",
137                      "Frame");
138             return FALSE;
139         }
140     }
141 }
142 /*--------------------------------------------------------------------------*/