keep user_data in C
[scilab.git] / scilab / modules / graphic_objects / src / cpp / setGraphicObjectProperty.cpp
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2010-2010 - DIGITEO - Bruno JOFRET
4  *
5  *  This file must be used under the terms of the CeCILL.
6  *  This source file is licensed as described in the file COPYING, which
7  *  you should have received as part of this distribution.  The terms
8  *  are also available at
9  *  http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
10  *
11  */
12
13 extern "C"
14 {
15 #include "setGraphicObjectProperty.h"
16 #include "graphicObjectProperties.h"
17 #include "getScilabJavaVM.h"
18
19 #include <stdio.h>
20 #include <string.h>
21 }
22
23 #include "CallGraphicController.hxx"
24 #include "DataController.hxx"
25 #include "ScilabView.hxx"
26
27 using namespace org_scilab_modules_graphic_objects;
28
29 void setGraphicObjectRelationship(int _parentId, int _childId)
30 {
31     // do not perform anything if the id is undefined
32     if (_parentId == 0 || _childId == 0)
33     {
34         return;
35     }
36
37     CallGraphicController::setGraphicObjectRelationship(getScilabJavaVM(), _parentId, _childId);
38 }
39
40 BOOL setGraphicObjectProperty(int _iID, int _iName, void const* _pvValue, _ReturnType_ _valueType, int numElements)
41 {
42     return setGraphicObjectPropertyAndWarn(_iID, _iName, _pvValue, _valueType, numElements, 1);
43 }
44
45 BOOL setGraphicObjectPropertyAndNoWarn(int _iID, int _iName, void const* _pvValue, _ReturnType_ _valueType, int numElements)
46 {
47     return setGraphicObjectPropertyAndWarn(_iID, _iName, _pvValue, _valueType, numElements, 0);
48 }
49
50 BOOL setGraphicObjectPropertyAndWarn(int _iID, int _iName, void const* _pvValue, _ReturnType_ _valueType, int numElements, int warnJava)
51 {
52     bool result = false;
53
54     double doubleValue = 0.;
55     int intValue = 0;
56     BOOL boolValue = FALSE;
57
58     // do not perform anything if the id is undefined
59     if (_iID == 0)
60     {
61         return FALSE;
62     }
63
64     switch (_iName)
65     {
66         case __GO_USER_DATA__ :
67         {
68             ScilabView::setUserdata(_iID, (int*) _pvValue, numElements);
69             return TRUE;
70         }
71         case __GO_DATA_MODEL__ :
72         case __GO_DATA_MODEL_COORDINATES__  :
73         case __GO_DATA_MODEL_X__ :
74         case __GO_DATA_MODEL_Y__ :
75         case __GO_DATA_MODEL_Z__ :
76         case __GO_DATA_MODEL_X_COORDINATES_SHIFT__ :
77         case __GO_DATA_MODEL_Y_COORDINATES_SHIFT__ :
78         case __GO_DATA_MODEL_Z_COORDINATES_SHIFT__ :
79         case __GO_DATA_MODEL_X_COORDINATES_SHIFT_SET__ :
80         case __GO_DATA_MODEL_Y_COORDINATES_SHIFT_SET__ :
81         case __GO_DATA_MODEL_Z_COORDINATES_SHIFT_SET__ :
82         case __GO_DATA_MODEL_NUM_ELEMENTS__ :
83         case __GO_DATA_MODEL_NUM_ELEMENTS_ARRAY__ :
84         case __GO_DATA_MODEL_NUM_VERTICES_PER_GON__ :
85         case __GO_DATA_MODEL_NUM_GONS__ :
86         case __GO_DATA_MODEL_Z_COORDINATES_SET__ :
87         case __GO_DATA_MODEL_COLORS__ :
88         case __GO_DATA_MODEL_NUM_COLORS__ :
89         case __GO_DATA_MODEL_NUM_VERTICES__ :
90         case __GO_DATA_MODEL_NUM_INDICES__ :
91         case __GO_DATA_MODEL_INDICES__ :
92         case __GO_DATA_MODEL_VALUES__ :
93         case __GO_DATA_MODEL_FEC_TRIANGLES__ :
94         case __GO_DATA_MODEL_NUM_X__ :
95         case __GO_DATA_MODEL_NUM_Y__ :
96         case __GO_DATA_MODEL_NUM_Z__ :
97         case __GO_DATA_MODEL_GRID_SIZE__ :
98         case __GO_DATA_MODEL_X_DIMENSIONS__ :
99         case __GO_DATA_MODEL_Y_DIMENSIONS__ :
100         case __GO_DATA_MODEL_MATPLOT_BOUNDS__ :
101         case __GO_DATA_MODEL_MATPLOT_TYPE__ :
102         case __GO_DATA_MODEL_MATPLOT_DATA_INFOS__ :
103         case __GO_DATA_MODEL_MATPLOT_DATA_TYPE__ :
104         case __GO_DATA_MODEL_MATPLOT_DATA_ORDER__ :
105         case __GO_DATA_MODEL_MATPLOT_IMAGE_TYPE__ :
106         case __GO_DATA_MODEL_MATPLOT_IMAGE_DATA__ :
107         case __GO_DATA_MODEL_DISPLAY_FUNCTION__ :
108         {
109             BOOL res = DataController::setGraphicObjectProperty(_iID, _iName, _pvValue, numElements);
110             if ((res || _iName == __GO_DATA_MODEL__) && warnJava)
111             {
112                 ///printf("debug property value=%d\n",_iName);
113                 CallGraphicController::setGraphicObjectProperty(getScilabJavaVM(), _iID, __GO_DATA_MODEL__, _iID);
114             }
115             return res;
116         }
117         default :
118         {
119             switch (_valueType)
120             {
121                 case jni_string :
122                     result = CallGraphicController::setGraphicObjectProperty(getScilabJavaVM(), _iID, _iName, (char *)_pvValue);
123                     break;
124
125                 case jni_string_vector :
126                     result = CallGraphicController::setGraphicObjectProperty(getScilabJavaVM(), _iID, _iName, (char**)_pvValue, numElements);
127                     break;
128                 case jni_double :
129                     doubleValue = *(double*)_pvValue;
130                     result = CallGraphicController::setGraphicObjectProperty(getScilabJavaVM(), _iID, _iName, (double)doubleValue);
131                     break;
132                 case jni_double_vector :
133                     result = CallGraphicController::setGraphicObjectProperty(getScilabJavaVM(), _iID, _iName, (double*)_pvValue, numElements);
134                     break;
135                 case jni_int :
136                     intValue = *(int*)_pvValue;
137                     result = CallGraphicController::setGraphicObjectProperty(getScilabJavaVM(), _iID, _iName, (int)intValue);
138                     break;
139                 case jni_int_vector :
140                     result = CallGraphicController::setGraphicObjectProperty(getScilabJavaVM(), _iID, _iName, (int*)_pvValue, numElements);
141                     break;
142                 case jni_bool :
143                     boolValue = *(BOOL*)_pvValue;
144                     result = CallGraphicController::setGraphicObjectProperty(getScilabJavaVM(), _iID, _iName, BOOLtobool(boolValue));
145                     break;
146                 case jni_bool_vector :
147                     result = CallGraphicController::setGraphicObjectProperty(getScilabJavaVM(), _iID, _iName, (bool*)_pvValue, numElements);
148                     break;
149                 default :
150                     /* Do Nothing */
151                     break;
152             }
153         }
154     }
155     return booltoBOOL(result);
156 }
157