63bf0bfe6df3c45c8103a857c67088dd6b8684af
[scilab.git] / scilab / modules / graphics / src / c / getHandleProperty / set_datatip_property.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2012 - Pedro Arthur dos S. Souza
4  * Copyright (C) 2012 - Caio Lucas dos S. Souza
5  *
6  * Copyright (C) 2012 - 2016 - Scilab Enterprises
7  *
8  * This file is hereby licensed under the terms of the GNU GPL v2.0,
9  * pursuant to article 5.3.4 of the CeCILL v.2.1.
10  * This file was originally licensed under the terms of the CeCILL v2.1,
11  * and continues to be available under such terms.
12  * For more information, see the COPYING file which you should have received
13  * along with this program.
14  *
15  */
16
17 #include "setHandleProperty.h"
18 #include "SetProperty.h"
19 #include "getPropertyAssignedValue.h"
20 #include "Scierror.h"
21 #include "localization.h"
22 #include "SetPropertyStatus.h"
23
24 #include "setGraphicObjectProperty.h"
25 #include "graphicObjectProperties.h"
26
27 /**
28  * Sets the datatip oriantation.
29  */
30 int set_tip_orientation_property(void* _pvCtx, int iObj, void* _pvData, int valueType, int nbRow, int nbCol)
31 {
32     BOOL status = FALSE;
33     int tip_orientation;
34
35     if ( !( valueType == sci_matrix ) )
36     {
37         Scierror(999, _("Wrong type for '%s' property: Integer expected.\n"), "orientation");
38         return SET_PROPERTY_ERROR;
39     }
40
41     tip_orientation = (int)((double*)_pvData)[0];
42
43     status = setGraphicObjectProperty(iObj, __GO_DATATIP_ORIENTATION__, &tip_orientation, jni_int, 1);
44
45     if (status == TRUE)
46     {
47         int auto_orientation = 0;
48         setGraphicObjectProperty(iObj, __GO_DATATIP_AUTOORIENTATION__, &auto_orientation, jni_bool, 1);
49         return SET_PROPERTY_SUCCEED;
50     }
51     else
52     {
53         Scierror(999, _("'%s' property does not exist for this handle.\n"), "orientation");
54         return SET_PROPERTY_ERROR;
55     }
56 }
57
58 /**
59  * Old z_componet property, warns the user
60  */
61 int set_tip_z_component_property(void* _pvCtx, int iObj, void* _pvData, int valueType, int nbRow, int nbCol)
62 {
63     char * tip_display_components;
64     getGraphicObjectProperty(iObj, __GO_DATATIP_DISPLAY_COMPONENTS__, jni_string, (void **)&tip_display_components);
65
66     //Only warns if the property exists for the object.
67     if (tip_display_components == NULL)
68     {
69         Scierror(999, _("'%s' property does not exist for this handle.\n"), "z_component");
70     }
71     else
72     {
73         Scierror(999, _("'%s' property is obsolete and will be removed, use '%s' instead.\n"), "z_component", "display_components");
74     }
75
76     return NULL;
77 }
78
79 /**
80  * Set which coordinate components should be displayed
81  */
82 int set_tip_display_components_property(void* _pvCtx, int iObj, void* _pvData, int valueType, int nbRow, int nbCol)
83 {
84     BOOL status = FALSE;
85     const char * value = (const char*) _pvData;
86
87     int isXSet = 0;
88     int isYSet = 0;
89     int isZSet = 0;
90     //check if the value is valid and throws properly error msg
91     int i;
92
93     if (valueType != sci_strings)
94     {
95         Scierror(999, _("Wrong type for '%s' property: String expected.\n"), "display_components");
96         return SET_PROPERTY_ERROR;
97     }
98
99     for (i = 0; i < 4; ++i)
100     {
101         if (value[i] == '\0')
102         {
103             if (i == 0)
104             {
105                 Scierror(999, _("Wrong value for '%s' property: Non-empty string expected.\n"), "display_components");
106                 return SET_PROPERTY_ERROR;
107             }
108             else
109             {
110                 break;
111             }
112         }
113         else
114         {
115             if (i == 3)
116             {
117                 Scierror(999, _("Wrong value for '%s' property: String with length 3 or less expected.\n"), "display_components");
118                 return SET_PROPERTY_ERROR;
119             }
120             switch (value[i])
121             {
122                 case 'x':
123                 case 'X':
124                     if (isXSet)
125                     {
126                         Scierror(999, _("Wrong value for '%s' property: String contains 'x' component more than once.\n"), "display_components");
127                         return SET_PROPERTY_ERROR;
128                     }
129                     isXSet++;
130                     break;
131                 case 'y':
132                 case 'Y':
133                     if (isYSet)
134                     {
135                         Scierror(999, _("Wrong value for '%s' property: String contains 'y' component more than once.\n"), "display_components");
136                         return SET_PROPERTY_ERROR;
137                     }
138                     isYSet++;
139                     break;
140                 case 'z':
141                 case 'Z':
142                     if (isZSet)
143                     {
144                         Scierror(999, _("Wrong value for '%s' property: String contains 'z' component more than once.\n"), "display_components");
145                         return SET_PROPERTY_ERROR;
146                     }
147                     isZSet++;
148                     break;
149                 default:
150                     Scierror(999, _("Wrong value for '%s' property: String with 'x|y|z' expected.\n"), "display_components");
151                     return SET_PROPERTY_ERROR;
152             }
153         }
154     }
155
156     status = setGraphicObjectProperty(iObj, __GO_DATATIP_DISPLAY_COMPONENTS__, value, jni_string, 1);
157     if (status == TRUE)
158     {
159         return SET_PROPERTY_SUCCEED;
160     }
161     else
162     {
163         Scierror(999, _("'%s' property does not exist for this handle.\n"), "display_components");
164         return SET_PROPERTY_ERROR;
165     }
166 }
167
168
169 /**
170  * Enable/disable the datatip auto-orientation.
171  */
172 int set_tip_auto_orientation_property(void* _pvCtx, int iObj, void* _pvData, int valueType, int nbRow, int nbCol)
173 {
174     BOOL status = FALSE;
175     int auto_orientation = tryGetBooleanValueFromStack(_pvData, valueType, nbRow, nbCol, "auto_orientation");
176     if (auto_orientation == NOT_A_BOOLEAN_VALUE)
177     {
178         return SET_PROPERTY_ERROR;
179     }
180     status = setGraphicObjectProperty(iObj, __GO_DATATIP_AUTOORIENTATION__, &auto_orientation, jni_bool, 1);
181
182     if (status == TRUE)
183     {
184         return SET_PROPERTY_SUCCEED;
185     }
186     else
187     {
188         Scierror(999, _("'%s' property does not exist for this handle.\n"), "auto_orientation");
189         return SET_PROPERTY_ERROR;
190     }
191 }
192
193
194 /**
195  * Set the datatip interpolation mode (on/off).
196  */
197 int set_tip_interp_mode_property(void* _pvCtx, int iObj, void* _pvData, int valueType, int nbRow, int nbCol)
198 {
199     BOOL status = FALSE;
200     int interp_mode = tryGetBooleanValueFromStack(_pvData, valueType, nbRow, nbCol, "interp_mode");
201     if (interp_mode == NOT_A_BOOLEAN_VALUE)
202     {
203         return SET_PROPERTY_ERROR;
204     }
205     status = setGraphicObjectProperty(iObj, __GO_DATATIP_INTERP_MODE__, &interp_mode, jni_bool, 1);
206
207     if (status == TRUE)
208     {
209         return SET_PROPERTY_SUCCEED;
210     }
211     else
212     {
213         Scierror(999, _("'%s' property does not exist for this handle.\n"), "interp_mode");
214         return SET_PROPERTY_ERROR;
215     }
216 }
217
218 /**
219  * Set the datatip box mode (true or false).
220  */
221 int set_tip_box_mode_property(void* _pvCtx, int iObj, void* _pvData, int valueType, int nbRow, int nbCol)
222 {
223     BOOL status = FALSE;
224     int box_mode = tryGetBooleanValueFromStack(_pvData, valueType, nbRow, nbCol, "box_mode");
225     if (box_mode == NOT_A_BOOLEAN_VALUE)
226     {
227         return SET_PROPERTY_ERROR;
228     }
229     status = setGraphicObjectProperty(iObj, __GO_DATATIP_BOX_MODE__, &box_mode, jni_bool, 1);
230
231     if (status == TRUE)
232     {
233         return SET_PROPERTY_SUCCEED;
234     }
235     else
236     {
237         Scierror(999, _("'%s' property does not exist for this handle.\n"), "box_mode");
238         return SET_PROPERTY_ERROR;
239     }
240 }
241
242 /**
243  * Set the datatip label mode (true or false).
244  */
245 int set_tip_label_mode_property(void* _pvCtx, int iObj, void* _pvData, int valueType, int nbRow, int nbCol)
246 {
247     BOOL status = FALSE;
248     int label_mode = tryGetBooleanValueFromStack(_pvData, valueType, nbRow, nbCol, "label_mode");
249     if (label_mode == NOT_A_BOOLEAN_VALUE)
250     {
251         return SET_PROPERTY_ERROR;
252     }
253     status = setGraphicObjectProperty(iObj, __GO_DATATIP_LABEL_MODE__, &label_mode, jni_bool, 1);
254
255     if (status == TRUE)
256     {
257         return SET_PROPERTY_SUCCEED;
258     }
259     else
260     {
261         Scierror(999, _("'%s' property does not exist for this handle.\n"), "label_mode");
262         return SET_PROPERTY_ERROR;
263     }
264 }
265
266
267 int set_tip_disp_function_property(void* _pvCtx, int iObj, void* _pvData, int valueType, int nbRow, int nbCol)
268 {
269     BOOL status = FALSE;
270     if (valueType != sci_strings)
271     {
272         Scierror(999, _("Wrong type for '%s' property: String expected.\n"), "display_function");
273         return SET_PROPERTY_ERROR;
274     }
275
276     status = setGraphicObjectProperty(iObj, __GO_DATATIP_DISPLAY_FNC__, _pvData, jni_string, 1);
277
278     if (status == TRUE)
279     {
280         return SET_PROPERTY_SUCCEED;
281     }
282     else
283     {
284         Scierror(999, _("'%s' property does not exist for this handle.\n"), "display_function");
285         return SET_PROPERTY_ERROR;
286     }
287 }
288
289 int set_tip_detached_property(void* _pvCtx, int iObj, void* _pvData, int valueType, int nbRow, int nbCol)
290 {
291     BOOL status = FALSE;
292     int isDetached = nbRow * nbCol != 0;
293     double* detached_position = NULL;
294     if (valueType != sci_matrix)
295     {
296         Scierror(999, _("Wrong type for '%s' property: Matrix expected.\n"), "detached_position");
297         return SET_PROPERTY_ERROR;
298     }
299
300
301     if (nbRow * nbCol != 3 && isDetached)
302     {
303         Scierror(999, _("Wrong size for '%s' property: Matrix with length 3 or [] expected.\n"), "detached_position");
304         return SET_PROPERTY_ERROR;
305     }
306     status = setGraphicObjectProperty(iObj, __GO_DATATIP_DETACHED_MODE__, &isDetached, jni_bool, 1);
307     if (isDetached)
308     {
309         status = setGraphicObjectProperty(iObj, __GO_DATATIP_DETACHED_POSITION__, _pvData, jni_double_vector, 3);
310     }
311
312     if (status == TRUE)
313     {
314         return SET_PROPERTY_SUCCEED;
315     }
316     else
317     {
318         Scierror(999, _("'%s' property does not exist for this handle.\n"), "detached_position");
319         return SET_PROPERTY_ERROR;
320     }
321 }