* Bug 16320 fixed: typos in blocks interfaces + a few files
[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 display mode for datatips
81  */
82 int set_datatip_display_mode_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     int datatip_display_mode = -1;
87     if (strcmp(value, "always") == 0)
88     {
89         datatip_display_mode = 0;
90     }
91     else if (strcmp(value, "mouseclick") == 0)
92     {
93         datatip_display_mode = 1;
94     }
95     else if (strcmp(value, "mouseover") == 0)
96     {
97         datatip_display_mode = 2;
98     }
99
100     if (datatip_display_mode >= 0)
101     {
102         status = setGraphicObjectProperty(iObj, __GO_DATATIP_DISPLAY_MODE__, &datatip_display_mode, jni_int, 1);
103         if (status == TRUE)
104         {
105             return SET_PROPERTY_SUCCEED;
106         }
107         return SET_PROPERTY_ERROR;
108     }
109     else
110     {
111         int type;
112         int *piType = &type;
113         getGraphicObjectProperty(iObj, __GO_TYPE__, jni_int, (void **)&piType);
114         if (type == __GO_POLYLINE__)
115         {
116             Scierror(999, _("Invalid value for '%s' property, use 'always', 'mouseclick' or 'mouseover'.\n"), "datatip_display_mode");
117         }
118         else
119         {
120             Scierror(999, _("'%s' property does not exist for this handle.\n"), "datatip_display_mode");
121         }
122         return SET_PROPERTY_ERROR;
123     }
124 }
125
126 /**
127  * Set which coordinate components should be displayed
128  */
129 int set_tip_display_components_property(void* _pvCtx, int iObj, void* _pvData, int valueType, int nbRow, int nbCol)
130 {
131     BOOL status = FALSE;
132     const char * value = (const char*) _pvData;
133
134     int isXSet = 0;
135     int isYSet = 0;
136     int isZSet = 0;
137     //check if the value is valid and throws properly error msg
138     int i;
139
140     if (valueType != sci_strings)
141     {
142         Scierror(999, _("Wrong type for '%s' property: String expected.\n"), "display_components");
143         return SET_PROPERTY_ERROR;
144     }
145
146     for (i = 0; i < 4; ++i)
147     {
148         if (value[i] == '\0')
149         {
150             if (i == 0)
151             {
152                 Scierror(999, _("Wrong value for '%s' property: Non-empty string expected.\n"), "display_components");
153                 return SET_PROPERTY_ERROR;
154             }
155             else
156             {
157                 break;
158             }
159         }
160         else
161         {
162             if (i == 3)
163             {
164                 Scierror(999, _("Wrong value for '%s' property: String with length 3 or less expected.\n"), "display_components");
165                 return SET_PROPERTY_ERROR;
166             }
167             switch (value[i])
168             {
169                 case 'x':
170                 case 'X':
171                     if (isXSet)
172                     {
173                         Scierror(999, _("Wrong value for '%s' property: String contains 'x' component more than once.\n"), "display_components");
174                         return SET_PROPERTY_ERROR;
175                     }
176                     isXSet++;
177                     break;
178                 case 'y':
179                 case 'Y':
180                     if (isYSet)
181                     {
182                         Scierror(999, _("Wrong value for '%s' property: String contains 'y' component more than once.\n"), "display_components");
183                         return SET_PROPERTY_ERROR;
184                     }
185                     isYSet++;
186                     break;
187                 case 'z':
188                 case 'Z':
189                     if (isZSet)
190                     {
191                         Scierror(999, _("Wrong value for '%s' property: String contains 'z' component more than once.\n"), "display_components");
192                         return SET_PROPERTY_ERROR;
193                     }
194                     isZSet++;
195                     break;
196                 default:
197                     Scierror(999, _("Wrong value for '%s' property: String with 'x|y|z' expected.\n"), "display_components");
198                     return SET_PROPERTY_ERROR;
199             }
200         }
201     }
202
203     status = setGraphicObjectProperty(iObj, __GO_DATATIP_DISPLAY_COMPONENTS__, value, jni_string, 1);
204     if (status == TRUE)
205     {
206         return SET_PROPERTY_SUCCEED;
207     }
208     else
209     {
210         Scierror(999, _("'%s' property does not exist for this handle.\n"), "display_components");
211         return SET_PROPERTY_ERROR;
212     }
213 }
214
215
216 /**
217  * Enable/disable the datatip auto-orientation.
218  */
219 int set_tip_auto_orientation_property(void* _pvCtx, int iObj, void* _pvData, int valueType, int nbRow, int nbCol)
220 {
221     BOOL status = FALSE;
222     int auto_orientation = tryGetBooleanValueFromStack(_pvData, valueType, nbRow, nbCol, "auto_orientation");
223     if (auto_orientation == NOT_A_BOOLEAN_VALUE)
224     {
225         return SET_PROPERTY_ERROR;
226     }
227     status = setGraphicObjectProperty(iObj, __GO_DATATIP_AUTOORIENTATION__, &auto_orientation, jni_bool, 1);
228
229     if (status == TRUE)
230     {
231         return SET_PROPERTY_SUCCEED;
232     }
233     else
234     {
235         Scierror(999, _("'%s' property does not exist for this handle.\n"), "auto_orientation");
236         return SET_PROPERTY_ERROR;
237     }
238 }
239
240
241 /**
242  * Set the datatip interpolation mode (on/off).
243  */
244 int set_tip_interp_mode_property(void* _pvCtx, int iObj, void* _pvData, int valueType, int nbRow, int nbCol)
245 {
246     BOOL status = FALSE;
247     int interp_mode = tryGetBooleanValueFromStack(_pvData, valueType, nbRow, nbCol, "interp_mode");
248     if (interp_mode == NOT_A_BOOLEAN_VALUE)
249     {
250         return SET_PROPERTY_ERROR;
251     }
252     status = setGraphicObjectProperty(iObj, __GO_DATATIP_INTERP_MODE__, &interp_mode, jni_bool, 1);
253
254     if (status == TRUE)
255     {
256         return SET_PROPERTY_SUCCEED;
257     }
258     else
259     {
260         Scierror(999, _("'%s' property does not exist for this handle.\n"), "interp_mode");
261         return SET_PROPERTY_ERROR;
262     }
263 }
264
265 /**
266  * Set the datatip box mode (true or false).
267  */
268 int set_tip_box_mode_property(void* _pvCtx, int iObj, void* _pvData, int valueType, int nbRow, int nbCol)
269 {
270     BOOL status = FALSE;
271     int box_mode = tryGetBooleanValueFromStack(_pvData, valueType, nbRow, nbCol, "box_mode");
272     if (box_mode == NOT_A_BOOLEAN_VALUE)
273     {
274         return SET_PROPERTY_ERROR;
275     }
276     status = setGraphicObjectProperty(iObj, __GO_DATATIP_BOX_MODE__, &box_mode, jni_bool, 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"), "box_mode");
285         return SET_PROPERTY_ERROR;
286     }
287 }
288
289 /**
290  * Set the datatip label mode (true or false).
291  */
292 int set_tip_label_mode_property(void* _pvCtx, int iObj, void* _pvData, int valueType, int nbRow, int nbCol)
293 {
294     BOOL status = FALSE;
295     int label_mode = tryGetBooleanValueFromStack(_pvData, valueType, nbRow, nbCol, "label_mode");
296     if (label_mode == NOT_A_BOOLEAN_VALUE)
297     {
298         return SET_PROPERTY_ERROR;
299     }
300     status = setGraphicObjectProperty(iObj, __GO_DATATIP_LABEL_MODE__, &label_mode, jni_bool, 1);
301
302     if (status == TRUE)
303     {
304         return SET_PROPERTY_SUCCEED;
305     }
306     else
307     {
308         Scierror(999, _("'%s' property does not exist for this handle.\n"), "label_mode");
309         return SET_PROPERTY_ERROR;
310     }
311 }
312
313
314 int set_tip_disp_function_property(void* _pvCtx, int iObj, void* _pvData, int valueType, int nbRow, int nbCol)
315 {
316     BOOL status = FALSE;
317     if (valueType != sci_strings)
318     {
319         Scierror(999, _("Wrong type for '%s' property: String expected.\n"), "display_function");
320         return SET_PROPERTY_ERROR;
321     }
322
323     status = setGraphicObjectProperty(iObj, __GO_DATATIP_DISPLAY_FNC__, _pvData, jni_string, 1);
324
325     if (status == TRUE)
326     {
327         return SET_PROPERTY_SUCCEED;
328     }
329     else
330     {
331         Scierror(999, _("'%s' property does not exist for this handle.\n"), "display_function");
332         return SET_PROPERTY_ERROR;
333     }
334 }
335
336 int set_tip_detached_property(void* _pvCtx, int iObj, void* _pvData, int valueType, int nbRow, int nbCol)
337 {
338     BOOL status = FALSE;
339     int isDetached = nbRow * nbCol != 0;
340     double* detached_position = NULL;
341     if (valueType != sci_matrix)
342     {
343         Scierror(999, _("Wrong type for '%s' property: Matrix expected.\n"), "detached_position");
344         return SET_PROPERTY_ERROR;
345     }
346
347
348     if (nbRow * nbCol != 3 && isDetached)
349     {
350         Scierror(999, _("Wrong size for '%s' property: Matrix with length 3 or [] expected.\n"), "detached_position");
351         return SET_PROPERTY_ERROR;
352     }
353     status = setGraphicObjectProperty(iObj, __GO_DATATIP_DETACHED_MODE__, &isDetached, jni_bool, 1);
354     if (isDetached)
355     {
356         status = setGraphicObjectProperty(iObj, __GO_DATATIP_DETACHED_POSITION__, _pvData, jni_double_vector, 3);
357     }
358
359     if (status == TRUE)
360     {
361         return SET_PROPERTY_SUCCEED;
362     }
363     else
364     {
365         Scierror(999, _("'%s' property does not exist for this handle.\n"), "detached_position");
366         return SET_PROPERTY_ERROR;
367     }
368 }