Bug 12289 fixed: sub_ticks property was ignored
[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     int type = -1;
42     int *piType = &type;
43     char* axisSubticksPropertiesNames[3] = {__GO_X_AXIS_SUBTICKS__, __GO_Y_AXIS_SUBTICKS__, __GO_Z_AXIS_SUBTICKS__};
44
45     if ( !( valueType == sci_matrix ) )
46     {
47         Scierror(999, _("Wrong type for '%s' property: Real matrix expected.\n"), "sub_tics");
48         return SET_PROPERTY_ERROR ;
49     }
50
51     getGraphicObjectProperty(pobjUID, __GO_TYPE__, jni_int, (void **)&piType);
52
53     /*
54      * Type test required as the Axis object stores subticks as a single int
55      * whereas Axes maintain a 3-element int vector.
56      */
57     if (type == __GO_AXIS__)
58     {
59         int nbTicks = (int) getDoubleFromStack(stackPointer);
60
61         status =  setGraphicObjectProperty(pobjUID, __GO_SUBTICKS__, &nbTicks, jni_int, 1);
62
63         if (status == TRUE)
64         {
65             return SET_PROPERTY_SUCCEED;
66         }
67         else
68         {
69             Scierror(999, _("'%s' property does not exist for this handle.\n"), "sub_tics");
70             return SET_PROPERTY_ERROR;
71         }
72     }
73     else if (type == __GO_AXES__)
74     {
75         int autoSubticks;
76         int i;
77         double * values = stk( stackPointer );
78
79         result = SET_PROPERTY_SUCCEED;
80
81         if ( (nbCol != 3 ) && (nbCol != 2) )
82         {
83             Scierror(999, _("Wrong size for '%s' property: %d or %d elements expected.\n"), "sub_tics", 2, 3);
84             return SET_PROPERTY_ERROR;
85         }
86
87         /*
88          * The AUTO_SUBTICKS property is shared by the 3 axes for now.
89          * To be modified.
90          */
91         int nbTicks = (int) values[0];
92         autoSubticks = nbTicks < 0 ? 1 : 0;
93         status = setGraphicObjectProperty(pobjUID, __GO_AUTO_SUBTICKS__, &autoSubticks, jni_bool, 1);
94
95         if (status == FALSE)
96         {
97             Scierror(999, _("'%s' property does not exist for this handle.\n"), "sub_ticks");
98             return SET_PROPERTY_ERROR;
99         }
100
101         for ( i = 0; i < nbCol ; i++ )
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 /*------------------------------------------------------------------------*/