Update figure function :
[scilab.git] / scilab / modules / gui / src / cpp / SetUicontrolBackgroundColor.cpp
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2007 - INRIA - Vincent COUVERT
4  * Copyright (C) 2008 - INRIA - Bruno JOFRET
5  * Copyright (C) 2011 - DIGITEO - Vincent COUVERT
6  * Sets the background of an uicontrol object
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.1-en.txt
13  *
14  */
15
16 extern "C"
17 {
18 #include "addColor.h"
19 #include "SetUicontrol.h"
20 }
21
22 int SetUicontrolBackgroundColor(void* _pvCtx, int iObjUID, void* _pvData, int valueType, int nbRow, int nbCol)
23 {
24     /* Color can be [R, G, B] or "R|G|B" */
25
26     double* allColors = NULL;
27     BOOL status = FALSE;
28     int nbValues = 0;
29     int iType = -1;
30     int *piType = &iType;
31     int iColorIndex = 0;
32
33     if (valueType == sci_strings)
34     {
35         if (nbCol != 1 || nbRow == 0)
36         {
37             /* Wrong string size */
38             Scierror(999, const_cast<char*>(_("Wrong size for '%s' property: 1 x 3 real vector or a 'R|G|B' string expected.\n")), "BackgroundColor");
39             return SET_PROPERTY_ERROR;
40         }
41
42         allColors = new double[3];
43         nbValues = sscanf((char*)_pvData, "%lf|%lf|%lf", &allColors[0], &allColors[1], &allColors[2]);
44
45         if (nbValues != 3)
46         {
47             /* Wrong string format */
48             Scierror(999, const_cast<char*>(_("Wrong value for '%s' property: 1 x 3 real vector or a 'R|G|B' string expected.\n")), "BackgroundColor");
49             return SET_PROPERTY_ERROR;
50         }
51
52     }
53     else if (valueType == sci_matrix)
54     {
55         if (nbCol != 3 || nbRow != 1)
56         {
57             /* Wrong matrix size */
58             Scierror(999, const_cast<char*>(_("Wrong size for '%s' property: 1 x 3 real vector or a 'R|G|B' string expected.\n")), "BackgroundColor");
59             return SET_PROPERTY_ERROR;
60         }
61
62         allColors = (double*)_pvData;
63
64     }
65     else
66     {
67         /* Wrong datatype */
68         Scierror(999, const_cast<char*>(_("Wrong type for '%s' property: 1 x 3 real vector or a 'R|G|B' string expected.\n")), "BackgroundColor");
69         return SET_PROPERTY_ERROR;
70     }
71
72     if (!checkColorRange(allColors[0], allColors[1], allColors[2]))
73     {
74         Scierror(999, const_cast<char*>(_("Wrong value for '%s' property: Numbers between 0 and 1 expected.\n")), "BackgroundColor");
75         return SET_PROPERTY_ERROR;
76     }
77
78     getGraphicObjectProperty(iObjUID, __GO_TYPE__, jni_int, (void **) &piType);
79     switch (iType)
80     {
81     case __GO_FIGURE__ :
82         iColorIndex = addColor(iObjUID, allColors);
83         status = setGraphicObjectProperty(iObjUID, __GO_BACKGROUND__, &iColorIndex, jni_int, 1);
84         break;
85     default :
86         status = setGraphicObjectProperty(iObjUID, __GO_UI_BACKGROUNDCOLOR__, allColors, jni_double_vector, 3);
87         break;
88     }
89
90
91     if (valueType == sci_strings)
92     {
93         delete[] allColors;
94     }
95
96     if (status == TRUE)
97     {
98         return SET_PROPERTY_SUCCEED;
99     }
100     else
101     {
102         Scierror(999, const_cast<char*>(_("'%s' property does not exist for this handle.\n")), "BackgroundColor");
103         return SET_PROPERTY_ERROR;
104     }
105 }