feed13a908dc500e08fdf277cc0a969fdc30ec82
[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         autoSubticks = 0;
92         status = setGraphicObjectProperty(pobjUID, __GO_AUTO_SUBTICKS__, &autoSubticks, jni_bool, 1);
93
94         if (status == FALSE)
95         {
96             Scierror(999, _("'%s' property does not exist for this handle.\n"), "sub_ticks");
97             return SET_PROPERTY_ERROR;
98         }
99
100         for ( i = 0; i < nbCol ; i++ )
101         {
102             int nbTicks;
103
104             nbTicks = (int) values[i];
105
106             if ( nbTicks < 0 )
107             {
108                 nbTicks = 0;
109             }
110
111             status = setGraphicObjectProperty(pobjUID, axisSubticksPropertiesNames[i], &nbTicks, jni_int, 1);
112
113             if (status == FALSE)
114             {
115                 result = SET_PROPERTY_ERROR;
116             }
117         }
118
119         if (result == SET_PROPERTY_ERROR)
120         {
121             Scierror(999, _("'%s' property does not exist for this handle.\n"), "sub_ticks");
122         }
123
124         return result;
125     }
126     else
127     {
128         Scierror(999, _("'%s' property does not exist for this handle.\n"), "sub_ticks");
129         return SET_PROPERTY_ERROR;
130     }
131     return SET_PROPERTY_SUCCEED;
132 }
133 /*------------------------------------------------------------------------*/