e6a8921d9484afcde2c433cfda47d19d948e853f
[scilab.git] / scilab / modules / graphics / src / c / getHandleProperty / set_sub_tics_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) 2010 - DIGITEO - Manuel Juliachs
7  *
8  * This file must be used under the terms of the CeCILL.
9  * This source file is licensed as described in the file COPYING, which
10  * you should have received as part of this distribution.  The terms
11  * are also available at
12  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
13  *
14  */
15
16 /*------------------------------------------------------------------------*/
17 /* file: set_sub_tics_property.c                                          */
18 /* desc : function to modify in Scilab the sub_tics field of              */
19 /*        a handle                                                        */
20 /*------------------------------------------------------------------------*/
21
22 #include <string.h>
23
24 #include "setHandleProperty.h"
25 #include "SetProperty.h"
26 #include "getPropertyAssignedValue.h"
27 #include "SetPropertyStatus.h"
28 #include "GetProperty.h"
29 #include "Scierror.h"
30 #include "localization.h"
31
32 #include "setGraphicObjectProperty.h"
33 #include "getGraphicObjectProperty.h"
34 #include "graphicObjectProperties.h"
35
36 /*------------------------------------------------------------------------*/
37 int set_sub_tics_property(void* _pvCtx, char* pobjUID, size_t stackPointer, int valueType, int nbRow, int nbCol )
38 {
39     BOOL status = FALSE;
40     int result = 0;
41     char* type = NULL;
42     char* axisSubticksPropertiesNames[3] = {__GO_X_AXIS_SUBTICKS__, __GO_Y_AXIS_SUBTICKS__, __GO_Z_AXIS_SUBTICKS__};
43
44     if ( !isParameterDoubleMatrix( valueType ) )
45     {
46         Scierror(999, _("Wrong type for '%s' property: Real matrix expected.\n"), "sub_tics");
47         return SET_PROPERTY_ERROR ;
48     }
49
50     getGraphicObjectProperty(pobjUID, __GO_TYPE__, jni_string, (void **)&type);
51
52     /*
53      * Type test required as the Axis object stores subticks as a single int
54      * whereas Axes maintain a 3-element int vector.
55      */
56     if (strcmp(type, __GO_AXIS__) == 0)
57     {
58         int nbTicks = (int) getDoubleFromStack(stackPointer);
59
60         status =  setGraphicObjectProperty(pobjUID, __GO_SUBTICKS__, &nbTicks, jni_int, 1);
61
62         if (status == TRUE)
63         {
64             return SET_PROPERTY_SUCCEED;
65         }
66         else
67         {
68             Scierror(999, _("'%s' property does not exist for this handle.\n"),"sub_tics");
69             return SET_PROPERTY_ERROR;
70         }
71     }
72     else if (strcmp(type, __GO_AXES__) == 0)
73     {
74         int autoSubticks;
75         int i;
76         double * values = getDoubleMatrixFromStack( stackPointer );
77
78         result = SET_PROPERTY_SUCCEED;
79
80         if ( (nbCol != 3 ) && (nbCol != 2) )
81         {
82             Scierror(999, _("Wrong size for '%s' property: %d or %d elements expected.\n"), "sub_tics", 2, 3);
83             return SET_PROPERTY_ERROR;
84         }
85
86         /*
87          * The AUTO_SUBTICKS property is shared by the 3 axes for now.
88          * To be modified.
89          */
90         autoSubticks = 0;
91         status = setGraphicObjectProperty(pobjUID, __GO_AUTO_SUBTICKS__, &autoSubticks, jni_bool, 1);
92
93         if (status == FALSE)
94         {
95             Scierror(999, _("'%s' property does not exist for this handle.\n"),"sub_ticks");
96             return SET_PROPERTY_ERROR;
97         }
98
99         for ( i = 0; i < nbCol ; i++ )
100         {
101             int nbTicks;
102
103             nbTicks = (int) values[i];
104
105             if( nbTicks < 0 )
106             {
107                 nbTicks = 0;
108             }
109
110             status = setGraphicObjectProperty(pobjUID, axisSubticksPropertiesNames[i], &nbTicks, jni_int, 1);
111
112             if (status == FALSE)
113             {
114                 result = SET_PROPERTY_ERROR;
115             }
116         }
117
118         if (result == SET_PROPERTY_ERROR)
119         {
120             Scierror(999, _("'%s' property does not exist for this handle.\n"),"sub_ticks");
121         }
122
123         return result;
124     }
125     else
126     {
127         Scierror(999, _("'%s' property does not exist for this handle.\n"),"sub_ticks");
128         return SET_PROPERTY_ERROR;
129     }
130     return SET_PROPERTY_SUCCEED;
131 }
132 /*------------------------------------------------------------------------*/