6910bd6820eacf4d1f3ac08eaa1e225f2d45a48d
[scilab.git] / scilab / modules / graphics / src / c / getHandleProperty / set_color_property.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2012 - Scilab Enterprises - Calixte DENIZET
4  *
5  * This file must be used under the terms of the CeCILL.
6  * This source file is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution.  The terms
8  * are also available at
9  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10  *
11  */
12
13 /*------------------------------------------------------------------------*/
14 /* file: set_colors_property.c                                            */
15 /* desc : function to modify in Scilab the polyline colors                */
16 /*------------------------------------------------------------------------*/
17
18 #include "MALLOC.h"
19 #include "setHandleProperty.h"
20 #include "SetProperty.h"
21 #include "getPropertyAssignedValue.h"
22 #include "Scierror.h"
23 #include "localization.h"
24 #include "GetProperty.h"
25 #include "SetPropertyStatus.h"
26
27 #include "getGraphicObjectProperty.h"
28 #include "setGraphicObjectProperty.h"
29 #include "graphicObjectProperties.h"
30
31 /*------------------------------------------------------------------------*/
32 int set_colors_property(void* _pvCtx, char* pobjUID, size_t stackPointer, int valueType, int nbRow, int nbCol )
33 {
34     BOOL status = FALSE;
35     int iNumElements = 0;
36     int* piNumElements = &iNumElements;
37
38     if (valueType != sci_matrix)
39     {
40         Scierror(999, _("Wrong type for '%s' property: Real matrix expected.\n"), "interp_color_vector");
41         return SET_PROPERTY_ERROR;
42     }
43
44     getGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_NUM_ELEMENTS__, jni_int, (void **) &piNumElements);
45
46     /*
47      * A way to display a more explicit message would be to first get the
48      * interpolation vector set flag and test it for NULL.
49      */
50     if (piNumElements == NULL)
51     {
52         Scierror(999, _("'%s' property does not exist for this handle.\n"), "data");
53         return SET_PROPERTY_ERROR;
54     }
55
56     if (nbCol == 0)
57     {
58         int colorSet = 0;
59         setGraphicObjectProperty(pobjUID, __GO_COLOR_SET__, &colorSet, jni_bool, 1);
60     }
61
62     if (nbCol == iNumElements)
63     {
64         int * tmp = MALLOC(nbCol * sizeof(int));
65         stk(stackPointer);
66
67         copyDoubleVectorToIntFromStack(stackPointer, tmp, nbCol);
68
69         status = setGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_COLORS__, tmp, jni_int_vector, nbCol);
70         if (status == TRUE)
71         {
72             int colorSet = 1;
73             setGraphicObjectProperty(pobjUID, __GO_COLOR_SET__, &colorSet, jni_bool, 1);
74             FREE(tmp);
75             return SET_PROPERTY_SUCCEED;
76         }
77         else
78         {
79             FREE(tmp);
80             Scierror(999, _("'%s' property does not exist for this handle.\n"), "interp_color_vector");
81             return SET_PROPERTY_ERROR;
82         }
83     }
84     else
85     {
86         Scierror(999, _("The number of column of the color vector must match the number of points defining the line.\n"));
87         return SET_PROPERTY_ERROR;
88     }
89 }
90 /*------------------------------------------------------------------------*/