Manage "string" case separately, this fixes non-regression test for bug #4855.
[scilab.git] / scilab / modules / graphics / src / c / getHandleProperty / set_tight_limits_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  * Copyright (C) 2010 - DIGITEO - Manuel Juliachs
7  * Copyright (C) 2014 - Scilab Enterprises - Vincent COUVERT
8  *
9  * This file must be used under the terms of the CeCILL.
10  * This source file is licensed as described in the file COPYING, which
11  * you should have received as part of this distribution.  The terms
12  * are also available at
13  * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
14  *
15  */
16
17 /*------------------------------------------------------------------------*/
18 /* file: set_tight_limits_property.c                                      */
19 /* desc : function to modify in Scilab the tight_limits field of          */
20 /*        a handle                                                        */
21 /*------------------------------------------------------------------------*/
22
23 #include <string.h>
24
25 #include "setHandleProperty.h"
26 #include "SetProperty.h"
27 #include "getPropertyAssignedValue.h"
28 #include "SetPropertyStatus.h"
29 #include "GetProperty.h"
30 #include "Scierror.h"
31 #include "localization.h"
32
33 #include "setGraphicObjectProperty.h"
34 #include "getGraphicObjectProperty.h"
35 #include "graphicObjectProperties.h"
36
37 /*------------------------------------------------------------------------*/
38 int set_tight_limits_property(void* _pvCtx, int iObjUID, void* _pvData, int valueType, int nbRow, int nbCol)
39 {
40     BOOL status[3];
41     char ** values = NULL;
42     int mSize = nbRow * nbCol;
43
44     int const axesTightLimitsPropertiesNames[3] = {__GO_X_TIGHT_LIMITS__, __GO_Y_TIGHT_LIMITS__, __GO_Z_TIGHT_LIMITS__};
45
46     if (mSize == 1)
47     {
48         int tightLimits = (int) FALSE;
49
50         if (valueType == sci_strings)
51         {
52             tightLimits = tryGetBooleanValueFromStack(((char **)_pvData)[0], valueType, nbRow, nbCol, "tight_limits");
53         }
54         else
55         {
56             tightLimits = tryGetBooleanValueFromStack(_pvData, valueType, nbRow, nbCol, "tight_limits");
57         }
58
59         if (tightLimits == NOT_A_BOOLEAN_VALUE)
60         {
61             return SET_PROPERTY_ERROR;
62         }
63
64         status[0] = setGraphicObjectProperty(iObjUID, axesTightLimitsPropertiesNames[0], &tightLimits, jni_bool, 1);
65         status[1] = setGraphicObjectProperty(iObjUID, axesTightLimitsPropertiesNames[1], &tightLimits, jni_bool, 1);
66         status[2] = setGraphicObjectProperty(iObjUID, axesTightLimitsPropertiesNames[2], &tightLimits, jni_bool, 1);
67
68         if (status[0] == TRUE && status[1] == TRUE && status[2] == TRUE)
69         {
70             return SET_PROPERTY_SUCCEED;
71         }
72         else
73         {
74             Scierror(999, _("'%s' property does not exist for this handle.\n"), "tight_limits");
75             return SET_PROPERTY_ERROR;
76         }
77     }
78     else if (mSize == 2 || mSize == 3)
79     {
80         int i;
81         BOOL tightLimits[3];
82         int iTightLimits = 0;
83         int *piTightLimits = &iTightLimits;
84
85         if (valueType != sci_strings)
86         {
87             Scierror(999, _("Wrong type for '%s' property: String matrix expected.\n"), "tight_limits");
88             return SET_PROPERTY_ERROR;
89         }
90
91         getGraphicObjectProperty(iObjUID, axesTightLimitsPropertiesNames[0], jni_bool, (void **)&piTightLimits);
92
93         if (piTightLimits == NULL)
94         {
95             Scierror(999, _("'%s' property does not exist for this handle.\n"), "tight_limits");
96             return SET_PROPERTY_ERROR;
97         }
98
99         tightLimits[0] = iTightLimits;
100
101         getGraphicObjectProperty(iObjUID, axesTightLimitsPropertiesNames[1], jni_bool, (void **)&piTightLimits);
102         tightLimits[1] = iTightLimits;
103
104         getGraphicObjectProperty(iObjUID, axesTightLimitsPropertiesNames[2], jni_bool, (void **)&piTightLimits);
105         tightLimits[2] = iTightLimits;
106
107         values = (char**)_pvData;
108
109         for (i = 0; i < mSize; i++)
110         {
111             if (strcmp(values[i], "off") == 0)
112             {
113                 tightLimits[i] = FALSE;
114             }
115             else if (strcmp(values[i], "on") == 0)
116             {
117                 tightLimits[i] = TRUE;
118             }
119             else
120             {
121                 Scierror(999, _("Wrong value for '%s' property: '%s' or '%s' expected.\n"), "tight_limits", "on", "off");
122                 return SET_PROPERTY_ERROR;
123             }
124         }
125
126         status[0] = setGraphicObjectProperty(iObjUID, axesTightLimitsPropertiesNames[0], &tightLimits[0], jni_bool, 1);
127         status[1] = setGraphicObjectProperty(iObjUID, axesTightLimitsPropertiesNames[1], &tightLimits[1], jni_bool, 1);
128         status[2] = setGraphicObjectProperty(iObjUID, axesTightLimitsPropertiesNames[2], &tightLimits[2], jni_bool, 1);
129
130         if (status[0] == TRUE && status[1] == TRUE && status[2] == TRUE)
131         {
132             return SET_PROPERTY_SUCCEED;
133         }
134         else
135         {
136             Scierror(999, _("'%s' property does not exist for this handle.\n"), "tight_limits");
137             return SET_PROPERTY_ERROR;
138         }
139     }
140     else
141     {
142         Scierror(999, _("Wrong size for '%s' property: At most %d elements expected.\n"), "tight_limits", 3);
143         return SET_PROPERTY_ERROR;
144     }
145     return SET_PROPERTY_ERROR;
146 }
147 /*------------------------------------------------------------------------*/
148