* Bug #13690 fixed - tight_limits property can now manage X, Y and Z axis separately.
[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         tightLimits = tryGetBooleanValueFromStack(((char**)_pvData)[0], valueType, nbRow, nbCol, "tight_limits");
51
52         if (tightLimits == NOT_A_BOOLEAN_VALUE)
53         {
54             return SET_PROPERTY_ERROR;
55         }
56
57         status[0] = setGraphicObjectProperty(iObjUID, axesTightLimitsPropertiesNames[0], &tightLimits, jni_bool, 1);
58         status[1] = setGraphicObjectProperty(iObjUID, axesTightLimitsPropertiesNames[1], &tightLimits, jni_bool, 1);
59         status[2] = setGraphicObjectProperty(iObjUID, axesTightLimitsPropertiesNames[2], &tightLimits, jni_bool, 1);
60
61         if (status[0] == TRUE && status[1] == TRUE && status[2] == TRUE)
62         {
63             return SET_PROPERTY_SUCCEED;
64         }
65         else
66         {
67             Scierror(999, _("'%s' property does not exist for this handle.\n"), "tight_limits");
68             return SET_PROPERTY_ERROR;
69         }
70     }
71     else if (mSize == 2 || mSize == 3)
72     {
73         int i;
74         BOOL tightLimits[3];
75         int iTightLimits = 0;
76         int *piTightLimits = &iTightLimits;
77
78         if (valueType != sci_strings)
79         {
80             Scierror(999, _("Wrong type for '%s' property: String matrix expected.\n"), "tight_limits");
81             return SET_PROPERTY_ERROR;
82         }
83
84         getGraphicObjectProperty(iObjUID, axesTightLimitsPropertiesNames[0], jni_bool, (void **)&piTightLimits);
85
86         if (piTightLimits == NULL)
87         {
88             Scierror(999, _("'%s' property does not exist for this handle.\n"), "tight_limits");
89             return SET_PROPERTY_ERROR;
90         }
91
92         tightLimits[0] = iTightLimits;
93
94         getGraphicObjectProperty(iObjUID, axesTightLimitsPropertiesNames[1], jni_bool, (void **)&piTightLimits);
95         tightLimits[1] = iTightLimits;
96
97         getGraphicObjectProperty(iObjUID, axesTightLimitsPropertiesNames[2], jni_bool, (void **)&piTightLimits);
98         tightLimits[2] = iTightLimits;
99
100         values = (char**)_pvData;
101
102         for (i = 0; i < mSize; i++)
103         {
104             if (strcmp(values[i], "off") == 0)
105             {
106                 tightLimits[i] = FALSE;
107             }
108             else if (strcmp(values[i], "on") == 0)
109             {
110                 tightLimits[i] = TRUE;
111             }
112             else
113             {
114                 Scierror(999, _("Wrong value for '%s' property: '%s' or '%s' expected.\n"), "tight_limits", "on", "off");
115                 return SET_PROPERTY_ERROR;
116             }
117         }
118
119         status[0] = setGraphicObjectProperty(iObjUID, axesTightLimitsPropertiesNames[0], &tightLimits[0], jni_bool, 1);
120         status[1] = setGraphicObjectProperty(iObjUID, axesTightLimitsPropertiesNames[1], &tightLimits[1], jni_bool, 1);
121         status[2] = setGraphicObjectProperty(iObjUID, axesTightLimitsPropertiesNames[2], &tightLimits[2], jni_bool, 1);
122
123         if (status[0] == TRUE && status[1] == TRUE && status[2] == TRUE)
124         {
125             return SET_PROPERTY_SUCCEED;
126         }
127         else
128         {
129             Scierror(999, _("'%s' property does not exist for this handle.\n"), "tight_limits");
130             return SET_PROPERTY_ERROR;
131         }
132     }
133     else
134     {
135         Scierror(999, _("Wrong size for '%s' property: At most %d elements expected.\n"), "tight_limits", 3);
136         return SET_PROPERTY_ERROR;
137     }
138     return SET_PROPERTY_ERROR;
139 }
140 /*------------------------------------------------------------------------*/
141