scf can only be performed on figure, not frame
[scilab.git] / scilab / modules / graphics / src / c / getHandleProperty / set_current_figure_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) 2012 - Scilab Enterprises - Bruno JOFRET
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_figure_property.c                                    */
19 /* desc : function to modify in Scilab the current_figure field of        */
20 /*        a handle                                                        */
21 /*------------------------------------------------------------------------*/
22
23 #include <stdio.h>
24
25 #include "setHandleProperty.h"
26 #include "SetProperty.h"
27 #include "GetProperty.h"
28 #include "getPropertyAssignedValue.h"
29 #include "Scierror.h"
30 #include "localization.h"
31 #include "SetPropertyStatus.h"
32 #include "HandleManagement.h"
33 #include "sci_types.h"
34
35 #include "BuildObjects.h"
36 #include "CurrentFigure.h"
37 #include "setGraphicObjectProperty.h"
38 #include "getGraphicObjectProperty.h"
39 #include "graphicObjectProperties.h"
40 #include "FigureList.h"
41 #include "CurrentSubwin.h"
42 #include "createGraphicObject.h"
43
44
45 /*------------------------------------------------------------------------*/
46 int set_current_figure_property(void* _pvCtx, int iObjUID, void* _pvData, int valueType, int nbRow, int nbCol)
47 {
48     int figNum = -1;
49     int res = -1;
50     int iFigureUID = 0;
51     int iCurFigUID = 0;
52     int iAxesUID = 0;
53     int* piAxesUID = &iAxesUID;
54     int iType = -1;
55     int *piType = &iType;
56
57     if (iObjUID != 0)
58     {
59         /* This property should not be called on an handle */
60         Scierror(999, _("'%s' property does not exist for this handle.\n"), "current_figure");
61         return SET_PROPERTY_ERROR;
62     }
63
64     if (nbRow * nbCol != 1)
65     {
66         Scierror(999, _("Wrong size for '%s' property: A scalar expected.\n"), "current_figure");
67         return SET_PROPERTY_ERROR;
68     }
69
70     if ((valueType == sci_handles))
71     {
72
73         iCurFigUID = getObjectFromHandle((long)((long long*)_pvData)[0]);
74
75         if (iCurFigUID == 0)
76         {
77             Scierror(999, _("'%s' handle does not or no longer exists.\n"), "Figure");
78             return SET_PROPERTY_ERROR;
79         }
80
81         // Check new current figure is a figure
82         getGraphicObjectProperty(iCurFigUID, __GO_TYPE__, jni_int,  (void**)&piType);
83         if (iType != __GO_FIGURE__)
84         {
85             Scierror(999, _("Wrong value for '%s' property: A '%s' handle expected.\n"), "current_figure", "Figure");
86             return SET_PROPERTY_ERROR;
87         }
88
89         setCurrentFigure(iCurFigUID);
90         getGraphicObjectProperty(iCurFigUID, __GO_SELECTED_CHILD__, jni_int,  (void**)&piAxesUID);
91         setCurrentSubWin(iAxesUID);
92
93         return 0;
94     }
95     else if ((valueType == sci_matrix))
96     {
97         figNum = (int) ((double*)_pvData)[0];
98     }
99     else
100     {
101         Scierror(999, _("Wrong type for '%s' property: Real or '%s' handle expected.\n"), "current_figure", "Figure");
102         return SET_PROPERTY_ERROR;
103     }
104
105     /* Retrieve figure with figNum */
106     iFigureUID = getFigureFromIndex(figNum);
107
108     if (iFigureUID == 0)
109     {
110         // No Figure available with this index, should create it  !!
111         iFigureUID = createNewFigureWithAxes();
112         setGraphicObjectProperty(iFigureUID, __GO_ID__, &figNum, jni_int, 1);
113     }
114     setCurrentFigure(iFigureUID);
115
116     getGraphicObjectProperty(iFigureUID, __GO_SELECTED_CHILD__, jni_int,  (void**)&piAxesUID);
117     setCurrentSubWin(iAxesUID);
118     return 0;
119 }
120 /*------------------------------------------------------------------------*/