Stop using some useless helpers.
[scilab.git] / scilab / modules / gui / src / cpp / SetUiobjectForegroundColor.cpp
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2007 - INRIA - Vincent COUVERT
4  * Copyright (C) 2011 - DIGITEO - Vincent COUVERT
5  * Sets the foreground of an uicontrol or an uimenu
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 #include "SetUiobjectForegroundColor.hxx"
16 #include "stack-c.h"
17 int SetUiobjectForegroundColor(void* _pvCtx, char* sciObjUID, size_t stackPointer, int valueType, int nbRow, int nbCol)
18 {
19     /* Color can be [R, G, B] or "R|G|B" */
20
21     double* allColors = NULL;
22     BOOL status = FALSE;
23     int nbValues = 0;
24
25
26     if (valueType == sci_strings)
27     {
28         if (nbCol != 1 || nbRow == 0) /* More than one string */
29         {
30             Scierror(999, const_cast<char*>(_("Wrong size for '%s' property: 1 x 3 real vector or a 'R|G|B' string expected.\n")), "ForegroundColor");
31             return SET_PROPERTY_ERROR;
32         }
33
34         allColors = new double[3];
35         nbValues = sscanf(getStringFromStack(stackPointer), "%lf|%lf|%lf", &allColors[0], &allColors[1], &allColors[2]);
36
37         if (nbValues != 3) /* Wrong format string */
38         {
39             Scierror(999, const_cast<char*>(_("Wrong value for '%s' property: 1 x 3 real vector or a 'R|G|B' string expected.\n")), "ForegroundColor");
40             return SET_PROPERTY_ERROR;
41         }
42
43     }
44     else if (valueType == sci_matrix)
45     {
46         if (nbCol != 3 || nbRow != 1) /* Wrong matrix size */
47         {
48             Scierror(999, const_cast<char*>(_("Wrong size for '%s' property: 1 x 3 real vector or a 'R|G|B' string expected.\n")), "ForegroundColor");
49             return SET_PROPERTY_ERROR;
50         }
51
52         allColors = stk(stackPointer);
53     }
54     else
55     {
56         /* Wrong value type */
57         Scierror(999, const_cast<char*>(_("Wrong type for '%s' property: 1 x 3 real vector or a 'R|G|B' string expected.\n")), "ForegroundColor");
58         return SET_PROPERTY_ERROR;
59     }
60
61     if (!checkColorRange(allColors[0], allColors[1], allColors[2]))
62     {
63         Scierror(999, const_cast<char*>(_("Wrong value for '%s' property: Numbers between 0 and 1 expected.\n")), "ForegroundColor");
64         return SET_PROPERTY_ERROR;
65     }
66
67     status = setGraphicObjectProperty(sciObjUID, const_cast<char*>(__GO_UI_FOREGROUNDCOLOR__), allColors, jni_double_vector, 3);
68
69     if (valueType == sci_strings)
70     {
71         delete[] allColors;
72     }
73
74     if (status == TRUE)
75     {
76         return SET_PROPERTY_SUCCEED;
77     }
78     else
79     {
80         Scierror(999, const_cast<char*>(_("'%s' property does not exist for this handle.\n")), "ForegroundColor");
81         return SET_PROPERTY_ERROR;
82     }
83 }
84