Adds possibility to color marks in scatter plots
[scilab.git] / scilab / modules / graphics / src / c / getHandleProperty / set_colors_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 he polylines 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"), "colors");
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         status = setGraphicObjectProperty(pobjUID, __GO_COLOR_SET__, &colorSet, jni_bool, 1);
60         if (status == FALSE)
61         {
62             Scierror(999, _("'%s' property does not exist for this handle.\n"), "colors");
63             return SET_PROPERTY_ERROR;
64         }
65         setGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_COLORS__, NULL, jni_int_vector, 0);
66
67         return SET_PROPERTY_SUCCEED;
68     }
69
70     if (nbCol == iNumElements)
71     {
72         int * tmp = MALLOC(nbCol * sizeof(int));
73         stk(stackPointer);
74
75         copyDoubleVectorToIntFromStack(stackPointer, tmp, nbCol);
76
77         status = setGraphicObjectProperty(pobjUID, __GO_DATA_MODEL_COLORS__, tmp, jni_int_vector, nbCol);
78         if (status == TRUE)
79         {
80             int colorSet = 1;
81             setGraphicObjectProperty(pobjUID, __GO_COLOR_SET__, &colorSet, jni_bool, 1);
82             FREE(tmp);
83             return SET_PROPERTY_SUCCEED;
84         }
85         else
86         {
87             FREE(tmp);
88             Scierror(999, _("'%s' property does not exist for this handle.\n"), "colors");
89             return SET_PROPERTY_ERROR;
90         }
91     }
92     else
93     {
94         Scierror(999, _("The number of column of the color vector must match the number of points defining the line.\n"));
95         return SET_PROPERTY_ERROR;
96     }
97 }
98 /*------------------------------------------------------------------------*/