Allow mutiplie axes within frames.
[scilab.git] / scilab / modules / graphics / src / c / getHandleProperty / set_current_axes_property.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2004-2006 - INRIA - Fabrice Leray
4  * Copyright (C) 2006 - INRIA - Allan Cornet
5  * Copyright (C) 2006 - INRIA - Jean-Baptiste Silvy
6  * Copyright (C) 2009 - DIGITEO - Pierre Lando
7  * Copyright (C) 2011 - DIGITEO - Manuel Juliachs
8  *
9  * This file must be used under the terms of the CeCILL.
10  * This source file is licensed as described in the file COPYING, which
11  * you should have received as part of this distribution.  The terms
12  * are also available at
13  * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
14  *
15  */
16
17 /*------------------------------------------------------------------------*/
18 /* file: set_current_axes_property.c                                      */
19 /* desc : function to modify in Scilab the current_axes field of          */
20 /*        a handle                                                        */
21 /*------------------------------------------------------------------------*/
22
23 #include <string.h>
24
25 #include "setHandleProperty.h"
26 #include "getPropertyAssignedValue.h"
27 #include "Scierror.h"
28 #include "localization.h"
29 #include "SetPropertyStatus.h"
30 #include "HandleManagement.h"
31 #include "sci_types.h"
32
33 #include "getGraphicObjectProperty.h"
34 #include "setGraphicObjectProperty.h"
35 #include "graphicObjectProperties.h"
36 #include "CurrentFigure.h"
37 #include "CurrentSubwin.h"
38
39 /*------------------------------------------------------------------------*/
40 int set_current_axes_property(void* _pvCtx, int iObjUID, void* _pvData, int valueType, int nbRow, int nbCol)
41 {
42     int iCurAxesUID = 0;
43     int iParentFigureUID = 0;
44     int* piParentFigureUID = &iParentFigureUID;
45     int type = -1;
46     int *piType = &type;
47
48     if (iObjUID != 0)
49     {
50         /* This property should not be called on a handle */
51         Scierror(999, _("'%s' property does not exist for this handle.\n"), "current_axes");
52         return SET_PROPERTY_ERROR;
53     }
54
55     if (valueType != sci_handles)
56     {
57         Scierror(999, _("Wrong type for '%s' property: Handle expected.\n"), "current_axes");
58         return SET_PROPERTY_ERROR;
59     }
60
61     iCurAxesUID = getObjectFromHandle((long)((long long*)_pvData)[0]);
62
63     if (iCurAxesUID == 0)
64     {
65         Scierror(999, _("Wrong value for '%s' property: Must be a valid handle.\n"), "current_entity");
66         return SET_PROPERTY_ERROR;
67     }
68
69     getGraphicObjectProperty(iCurAxesUID, __GO_TYPE__, jni_int, (void **)&piType);
70
71     if (type != __GO_AXES__)
72     {
73         Scierror(999, _("Wrong value for '%s' property: Must be a handle on axes.\n"), "current_axes");
74         return SET_PROPERTY_ERROR;
75     }
76
77     /* The current Axes' parent Figure's selected child property must be updated */
78     iParentFigureUID = getParentObject(iCurAxesUID);
79     setGraphicObjectProperty(iParentFigureUID, __GO_SELECTED_CHILD__, &iCurAxesUID, jni_int, 1);
80
81     setCurrentSubWin(iCurAxesUID);
82
83     /* F.Leray 11.02.05 : if the new selected subwin is not inside the current figure, */
84     /* we must also set the current figure to the subwin's parent */
85     if (!isCurrentFigure(iParentFigureUID))
86     {
87         setCurrentFigure(iParentFigureUID);
88     }
89
90     return SET_PROPERTY_SUCCEED;
91 }
92 /*------------------------------------------------------------------------*/