c11e3f88b3d2edab4c70687b66ddb07a84d2dbe2
[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-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
34 #include "BuildObjects.h"
35 #include "CurrentFigure.h"
36 #include "setGraphicObjectProperty.h"
37 #include "getGraphicObjectProperty.h"
38 #include "graphicObjectProperties.h"
39 #include "FigureList.h"
40 #include "CurrentSubwin.h"
41
42
43 /*------------------------------------------------------------------------*/
44 int set_current_figure_property(void* _pvCtx, char* pobjUID, size_t stackPointer, int valueType, int nbRow, int nbCol )
45 {
46     int figNum = -1 ;
47     int res = -1 ;
48     char* pFigureUID = NULL;
49     char* curFigUID = NULL;
50     char* pstrAxesUID = NULL;
51
52         if (pobjUID != NULL)
53         {
54                 /* This property should not be called on an handle */
55                 Scierror(999, _("'%s' property does not exist for this handle.\n"), "current_figure");
56                 return SET_PROPERTY_ERROR;
57         }
58
59     if (nbRow * nbCol != 1)
60     {
61         Scierror(999, _("Wrong size for '%s' property: A scalar expected.\n"), "current_figure");
62         return SET_PROPERTY_ERROR ;
63     }
64
65     if ( isParameterHandle( valueType ) )
66     {
67
68         curFigUID = (char*)getObjectFromHandle( getHandleFromStack( stackPointer ) ) ;
69
70         if ( curFigUID == NULL )
71         {
72             Scierror(999, _("'%s' handle does not or no longer exists.\n"),"Figure");
73             return SET_PROPERTY_ERROR ;
74         }
75         setCurrentFigure(curFigUID);
76         getGraphicObjectProperty(curFigUID, __GO_SELECTED_CHILD__, jni_string,  &pstrAxesUID);
77         setCurrentSubWin(pstrAxesUID);
78
79         return 0;
80     }
81     else if ( isParameterDoubleMatrix( valueType ) )
82     {
83         figNum = (int) getDoubleFromStack( stackPointer ) ;
84     }
85     else
86     {
87         Scierror(999, _("Wrong type for '%s' property: Real or '%s' handle expected.\n"), "current_figure","Figure") ;
88         return SET_PROPERTY_ERROR ;
89     }
90
91     /* Retrieve figure with figNum */
92     pFigureUID = (char*)getFigureFromIndex(figNum);
93
94     if (pFigureUID == NULL)
95     {
96         // No Figure available with this index, should create it  !!
97         pFigureUID = createNewFigureWithAxes();
98         setGraphicObjectProperty(pFigureUID, __GO_ID__, &figNum, jni_int, 1);
99     }
100     setCurrentFigure(pFigureUID);
101
102     getGraphicObjectProperty(pFigureUID, __GO_SELECTED_CHILD__, jni_string,  &pstrAxesUID);
103     setCurrentSubWin(pstrAxesUID);
104
105     return 0;
106 }
107 /*------------------------------------------------------------------------*/