4ca910cc1341dab6768fc8bb3a6e80e43679f615
[scilab.git] / scilab / modules / graphics / src / c / getHandleProperty / set_xtics_coord_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  *
7  * This file must be used under the terms of the CeCILL.
8  * This source file is licensed as described in the file COPYING, which
9  * you should have received as part of this distribution.  The terms
10  * are also available at
11  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
12  *
13  */
14
15 /*------------------------------------------------------------------------*/
16 /* file: set_xtics_coord_property.c                                       */
17 /* desc : function to modify in Scilab the xtics_coord field of           */
18 /*        a handle                                                        */
19 /*------------------------------------------------------------------------*/
20
21 #include "setHandleProperty.h"
22 #include "SetProperty.h"
23 #include "getPropertyAssignedValue.h"
24 #include "SetPropertyStatus.h"
25 #include "GetProperty.h"
26 #include "Scierror.h"
27 #include "localization.h"
28 #include "BasicAlgos.h"
29 #include "Format.h"
30 #include "MALLOC.h"
31
32 #include "getGraphicObjectProperty.h"
33 #include "setGraphicObjectProperty.h"
34 #include "graphicObjectProperties.h"
35
36 /*------------------------------------------------------------------------*/
37 int set_xtics_coord_property(void* _pvCtx, char* pobjUID, size_t stackPointer, int valueType, int nbRow, int nbCol )
38 {
39     BOOL status = FALSE;
40     int N = 0;
41     double * vector = NULL;
42     char c_format[5];
43     int iXNumberTicks = 0;
44     int* piXNumberTicks = &iXNumberTicks;
45     char** stringVector = NULL;
46     double* coordsVector = NULL;
47     int iTicksStyle = 0;
48     int* piTicksStyle = &iTicksStyle;
49     char ticksStyle = 0;
50
51     if ( !isParameterDoubleMatrix( valueType ) )
52     {
53         Scierror(999, _("Wrong type for '%s' property: Real matrix expected.\n"), "xtics_coord");
54         return SET_PROPERTY_ERROR;
55     }
56
57     if ( nbRow != 1 )
58     {
59         Scierror(999, _("Wrong size for '%s' property: Row vector expected.\n"), "xtics_coord");
60         return SET_PROPERTY_ERROR;
61     }
62
63     getGraphicObjectProperty(pobjUID, __GO_X_NUMBER_TICKS__, jni_int, (void**)&piXNumberTicks);
64
65     if (piXNumberTicks == NULL)
66     {
67         Scierror(999, _("'%s' property does not exist for this handle.\n"),"xtics_coord");
68         return SET_PROPERTY_ERROR;
69     }
70
71     if ( iXNumberTicks == 1 && nbCol != 1 )
72     {
73         Scierror(999, _("Wrong size for '%s' property: Scalar expected.\n"), "xtics_coord");
74         return SET_PROPERTY_ERROR;
75     }
76
77     if ( iXNumberTicks != 1 && nbCol == 1 )
78     {
79         Scierror(999, _("Wrong size for '%s' property: At least %d elements expected.\n"), "xtics_coord", 2);
80         return SET_PROPERTY_ERROR;
81     }
82
83     /* what follows remains here as it was */
84     coordsVector = createCopyDoubleVectorFromStack( stackPointer, nbCol );
85
86     status = setGraphicObjectProperty(pobjUID, __GO_X_TICKS_COORDS__, coordsVector, jni_double_vector, nbCol);
87
88     if (status == FALSE)
89     {
90         FREE(coordsVector);
91         Scierror(999, _("'%s' property does not exist for this handle.\n"),"xtics_coord");
92         return SET_PROPERTY_ERROR;
93     }
94
95     FREE(coordsVector);
96
97     getGraphicObjectProperty(pobjUID, __GO_TICKS_STYLE__, jni_int, (void**)&piTicksStyle);
98
99     if (iTicksStyle == 0)
100     {
101         ticksStyle = 'v';
102     }
103     else if (iTicksStyle == 1)
104     {
105         ticksStyle = 'r';
106     }
107     else if (iTicksStyle == 2)
108     {
109         ticksStyle = 'i';
110     }
111
112     if (ComputeXIntervals( pobjUID, ticksStyle, &vector, &N, 0 ) != 0)
113     {
114         /* Something wrong happened */
115         FREE( vector );
116         return -1;
117     }
118
119     if (ComputeC_format( pobjUID, c_format ) != 0)
120     {
121         /* Something wrong happened */
122         FREE( vector );
123         return -1;
124     }
125
126     stringVector = copyFormatedArray( vector, N, c_format, 256 );
127
128     status = setGraphicObjectProperty(pobjUID, __GO_TICKS_LABELS__, stringVector, jni_string_vector, N);
129
130     FREE( vector );
131
132     destroyStringArray(stringVector, N);
133
134     if (status == TRUE)
135     {
136         return SET_PROPERTY_SUCCEED;
137     }
138     else
139     {
140         return SET_PROPERTY_ERROR;
141     }
142
143 }
144 /*------------------------------------------------------------------------*/