* Bug #13794 fixed - Datatips display mode
[scilab.git] / scilab / modules / hdf5 / src / cpp / handle_properties.hxx
1 /*
2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2015 - Scilab Enterprises - Antoine ELIAS
4 *
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13 *
14 */
15
16 #include <string>
17 #include <unordered_map>
18 #include <list>
19 #include <vector>
20
21 #define SAVE_ONLY 0
22 #define SAVE_LOAD 1
23
24 extern "C"
25 {
26 #include "graphicObjectProperties.h"
27 #include "returnType.h"
28 }
29
30 enum FrameBorderType
31 {
32     NONE = 0,
33     LINE,
34     BEVEL,
35     SOFTBEVEL,
36     ETCHED,
37     TITLED,
38     EMPTY,
39     COMPOUND,
40     MATTE
41 };
42
43 struct Links
44 {
45     typedef std::list<std::vector <int> > PathList;
46
47     static void add(int legend, PathList& path)
48     {
49         paths[legend] = path;
50     }
51
52     static PathList get(int legend)
53     {
54         std::unordered_map<int, PathList>::iterator it = paths.find(legend);
55         if (it == paths.end())
56         {
57             return PathList();
58         }
59
60         return it->second;
61     }
62
63     static void remove(int legend)
64     {
65         paths.erase(legend);
66     }
67
68     static int count()
69     {
70         return static_cast<int>(paths.size());
71     }
72
73     static std::list<int> legends()
74     {
75         std::list<int> legs;
76         for (auto & i : paths)
77         {
78             legs.push_back(i.first);
79         }
80
81         return legs;
82     }
83
84 private:
85     static std::unordered_map<int, PathList> paths;
86 };
87
88 typedef std::list<std::pair<std::string, std::vector<int> > > HandleProp;
89
90 struct FigureHandle
91 {
92     static HandleProp getPropertyList()
93     {
94         HandleProp m;
95
96         //SAVE_ONLY, so don't care of reload ordering
97         m.emplace_back("type", std::vector<int>({SAVE_ONLY, __GO_TYPE__, jni_int}));
98         m.emplace_back("toolbar", std::vector<int>({SAVE_ONLY, __GO_TOOLBAR__, jni_int}));
99         m.emplace_back("toolbar_visible", std::vector<int>({SAVE_ONLY, __GO_TOOLBAR_VISIBLE__, jni_bool}));
100         m.emplace_back("menubar", std::vector<int>({SAVE_ONLY, __GO_MENUBAR__, jni_int}));
101         m.emplace_back("menubar_visible", std::vector<int>({SAVE_ONLY, __GO_MENUBAR_VISIBLE__, jni_bool}));
102         m.emplace_back("infobar_visible", std::vector<int>({SAVE_ONLY, __GO_INFOBAR_VISIBLE__, jni_bool}));
103         m.emplace_back("dockable", std::vector<int>({SAVE_ONLY, __GO_DOCKABLE__, jni_bool}));
104         m.emplace_back("default_axes", std::vector<int>({SAVE_ONLY, __GO_DEFAULT_AXES__, jni_bool}));
105
106         //@start
107         m.emplace_back("figure_position", std::vector<int>({SAVE_LOAD, __GO_POSITION__, jni_int_vector, -1, -2}));
108         m.emplace_back("auto_resize", std::vector<int>({SAVE_LOAD, __GO_AUTORESIZE__, jni_bool}));
109         m.emplace_back("figure_size", std::vector<int>({SAVE_LOAD, __GO_SIZE__, jni_int_vector, -1, -2}));
110         m.emplace_back("axes_size", std::vector<int>({SAVE_LOAD, __GO_AXES_SIZE__, jni_int_vector, -1, -2}));
111
112         //@ don't care
113         m.emplace_back("viewport", std::vector<int>({SAVE_LOAD, __GO_VIEWPORT__, jni_int_vector, -1, -2}));
114         m.emplace_back("info_message", std::vector<int>({SAVE_LOAD, __GO_INFO_MESSAGE__, jni_string}));
115         m.emplace_back("figure_name", std::vector<int>({SAVE_LOAD, __GO_NAME__, jni_string}));
116         m.emplace_back("color_map", std::vector<int>({SAVE_LOAD, __GO_COLORMAP__, jni_double_vector, __GO_COLORMAP_SIZE__, -3}));
117         m.emplace_back("pixel_drawing_mode", std::vector<int>({SAVE_LOAD, __GO_PIXEL_DRAWING_MODE__, jni_int}));
118         m.emplace_back("anti_aliasing", std::vector<int>({SAVE_LOAD, __GO_ANTIALIASING__, jni_int}));
119         m.emplace_back("immediate_drawing", std::vector<int>({SAVE_LOAD, __GO_IMMEDIATE_DRAWING__, jni_bool}));
120         m.emplace_back("background", std::vector<int>({SAVE_LOAD, __GO_BACKGROUND__, jni_int}));
121         m.emplace_back("rotation_style", std::vector<int>({SAVE_LOAD, __GO_ROTATION_TYPE__, jni_int}));
122         m.emplace_back("event_handler_enable", std::vector<int>({SAVE_LOAD, __GO_EVENTHANDLER_ENABLE__, jni_bool}));
123         m.emplace_back("closerequestfcn", std::vector<int>({SAVE_LOAD, __GO_CLOSEREQUESTFCN__, jni_string}));
124         m.emplace_back("resize", std::vector<int>({SAVE_LOAD, __GO_RESIZE__, jni_bool}));
125         m.emplace_back("layout", std::vector<int>({SAVE_LOAD, __GO_LAYOUT__, jni_int}));
126         m.emplace_back("icon", std::vector<int>({SAVE_LOAD, __GO_UI_ICON__, jni_string}));
127
128         //@end
129         m.emplace_back("event_handler", std::vector<int>({SAVE_LOAD, __GO_EVENTHANDLER_NAME__, jni_string}));
130         m.emplace_back("resizefcn", std::vector<int>({SAVE_LOAD, __GO_RESIZEFCN__, jni_string}));
131         m.emplace_back("visible", std::vector<int>({SAVE_LOAD, __GO_VISIBLE__, jni_bool}));
132         return m;
133     }
134 };
135
136 struct AxesHandle
137 {
138     static HandleProp getPropertyList()
139     {
140         HandleProp m;
141
142         //SAVE_ONLY, so don't care of reload ordering
143         m.emplace_back("type", std::vector<int>({SAVE_ONLY, __GO_TYPE__, jni_int}));
144         m.emplace_back("visible", std::vector<int>({SAVE_ONLY, __GO_VISIBLE__, jni_bool}));
145
146         //@start
147
148         //@ don't care
149         m.emplace_back("axes_visible_x", std::vector<int>({SAVE_LOAD, __GO_X_AXIS_VISIBLE__, jni_bool}));
150         m.emplace_back("axes_visible_y", std::vector<int>({SAVE_LOAD, __GO_Y_AXIS_VISIBLE__, jni_bool}));
151         m.emplace_back("axes_visible_z", std::vector<int>({SAVE_LOAD, __GO_Z_AXIS_VISIBLE__, jni_bool}));
152         m.emplace_back("axes_reverse_x", std::vector<int>({SAVE_LOAD, __GO_X_AXIS_REVERSE__, jni_bool}));
153         m.emplace_back("axes_reverse_y", std::vector<int>({SAVE_LOAD, __GO_Y_AXIS_REVERSE__, jni_bool}));
154         m.emplace_back("axes_reverse_z", std::vector<int>({SAVE_LOAD, __GO_Z_AXIS_REVERSE__, jni_bool}));
155         m.emplace_back("grid_x", std::vector<int>({SAVE_LOAD, __GO_X_AXIS_GRID_COLOR__, jni_int}));
156         m.emplace_back("grid_y", std::vector<int>({SAVE_LOAD, __GO_Y_AXIS_GRID_COLOR__, jni_int}));
157         m.emplace_back("grid_z", std::vector<int>({SAVE_LOAD, __GO_Z_AXIS_GRID_COLOR__, jni_int}));
158         m.emplace_back("grid_position", std::vector<int>({SAVE_LOAD, __GO_GRID_POSITION__, jni_int}));
159         m.emplace_back("grid_thickness_x", std::vector<int>({SAVE_LOAD, __GO_X_AXIS_GRID_THICKNESS__, jni_double}));
160         m.emplace_back("grid_thickness_y", std::vector<int>({SAVE_LOAD, __GO_Y_AXIS_GRID_THICKNESS__, jni_double}));
161         m.emplace_back("grid_thickness_z", std::vector<int>({SAVE_LOAD, __GO_Z_AXIS_GRID_THICKNESS__, jni_double}));
162         m.emplace_back("grid_style_x", std::vector<int>({SAVE_LOAD, __GO_X_AXIS_GRID_STYLE__, jni_int}));
163         m.emplace_back("grid_style_y", std::vector<int>({SAVE_LOAD, __GO_Y_AXIS_GRID_STYLE__, jni_int}));
164         m.emplace_back("grid_style_z", std::vector<int>({SAVE_LOAD, __GO_Z_AXIS_GRID_STYLE__, jni_int}));
165         m.emplace_back("x_location", std::vector<int>({SAVE_LOAD, __GO_X_AXIS_LOCATION__, jni_int}));
166         m.emplace_back("y_location", std::vector<int>({SAVE_LOAD, __GO_Y_AXIS_LOCATION__, jni_int}));
167         m.emplace_back("view", std::vector<int>({SAVE_LOAD, __GO_VIEW__, jni_int}));
168         m.emplace_back("ticks_format_x", std::vector<int>({SAVE_LOAD, __GO_X_AXIS_FORMAT__, jni_string}));
169         m.emplace_back("ticks_format_y", std::vector<int>({SAVE_LOAD, __GO_Y_AXIS_FORMAT__, jni_string}));
170         m.emplace_back("ticks_format_z", std::vector<int>({SAVE_LOAD, __GO_Z_AXIS_FORMAT__, jni_string}));
171         m.emplace_back("ticks_st_x", std::vector<int>({SAVE_LOAD, __GO_X_AXIS_ST_FACTORS__, jni_double_vector, -1, -2}));
172         m.emplace_back("ticks_st_y", std::vector<int>({SAVE_LOAD, __GO_Y_AXIS_ST_FACTORS__, jni_double_vector, -1, -2}));
173         m.emplace_back("ticks_st_z", std::vector<int>({SAVE_LOAD, __GO_Z_AXIS_ST_FACTORS__, jni_double_vector, -1, -2}));
174         m.emplace_back("box", std::vector<int>({SAVE_LOAD, __GO_BOX_TYPE__, jni_int}));
175         m.emplace_back("filled", std::vector<int>({SAVE_LOAD, __GO_FILLED__, jni_bool}));
176         m.emplace_back("sub_tics_x", std::vector<int>({SAVE_LOAD, __GO_X_AXIS_SUBTICKS__, jni_int}));
177         m.emplace_back("sub_tics_y", std::vector<int>({SAVE_LOAD, __GO_Y_AXIS_SUBTICKS__, jni_int}));
178         m.emplace_back("sub_tics_z", std::vector<int>({SAVE_LOAD, __GO_Z_AXIS_SUBTICKS__, jni_int}));
179         m.emplace_back("font_style", std::vector<int>({SAVE_LOAD, __GO_FONT_STYLE__, jni_int}));
180         m.emplace_back("font_size", std::vector<int>({SAVE_LOAD, __GO_FONT_SIZE__, jni_double}));
181         m.emplace_back("font_color", std::vector<int>({SAVE_LOAD, __GO_FONT_COLOR__, jni_int}));
182         m.emplace_back("fractional_font", std::vector<int>({SAVE_LOAD, __GO_FONT_FRACTIONAL__, jni_bool}));
183         m.emplace_back("isoview", std::vector<int>({SAVE_LOAD, __GO_ISOVIEW__, jni_bool}));
184         m.emplace_back("cube_scaling", std::vector<int>({SAVE_LOAD, __GO_CUBE_SCALING__, jni_bool}));
185         m.emplace_back("rotation_angles", std::vector<int>({SAVE_LOAD, __GO_ROTATION_ANGLES__, jni_double_vector, -1, -2}));
186         m.emplace_back("tight_limits_x", std::vector<int>({SAVE_LOAD, __GO_X_TIGHT_LIMITS__, jni_bool}));
187         m.emplace_back("tight_limits_y", std::vector<int>({SAVE_LOAD, __GO_Y_TIGHT_LIMITS__, jni_bool}));
188         m.emplace_back("tight_limits_z", std::vector<int>({SAVE_LOAD, __GO_Z_TIGHT_LIMITS__, jni_bool}));
189         m.emplace_back("data_bounds", std::vector<int>({SAVE_LOAD, __GO_DATA_BOUNDS__, jni_double_vector, -2, -3}));
190         m.emplace_back("zoom_box", std::vector<int>({SAVE_LOAD, __GO_ZOOM_BOX__, jni_double_vector, -1, -6}));
191         m.emplace_back("margins", std::vector<int>({SAVE_LOAD, __GO_MARGINS__, jni_double_vector, -1, -4}));
192         m.emplace_back("auto_margins", std::vector<int>({SAVE_LOAD, __GO_AUTO_MARGINS__, jni_bool}));
193         m.emplace_back("axes_bounds", std::vector<int>({SAVE_LOAD, __GO_AXES_BOUNDS__, jni_double_vector, -1, -4}));
194         m.emplace_back("auto_clear", std::vector<int>({SAVE_LOAD, __GO_AUTO_CLEAR__, jni_bool}));
195         m.emplace_back("auto_scale", std::vector<int>({SAVE_LOAD, __GO_AUTO_SCALE__, jni_bool}));
196         m.emplace_back("hidden_axis_color", std::vector<int>({SAVE_LOAD, __GO_HIDDEN_AXIS_COLOR__, jni_int}));
197         m.emplace_back("arc_drawing_method", std::vector<int>({SAVE_LOAD, __GO_ARC_DRAWING_METHOD__, jni_int}));
198         m.emplace_back("hiddencolor", std::vector<int>({SAVE_LOAD, __GO_HIDDEN_COLOR__, jni_int}));
199         m.emplace_back("line_mode", std::vector<int>({SAVE_LOAD, __GO_LINE_MODE__, jni_bool}));
200         m.emplace_back("line_style", std::vector<int>({SAVE_LOAD, __GO_LINE_STYLE__, jni_int}));
201         m.emplace_back("thickness", std::vector<int>({SAVE_LOAD, __GO_LINE_THICKNESS__, jni_double}));
202         m.emplace_back("mark_style", std::vector<int>({SAVE_LOAD, __GO_MARK_STYLE__, jni_int}));
203         m.emplace_back("mark_size", std::vector<int>({SAVE_LOAD, __GO_MARK_SIZE__, jni_int}));
204         m.emplace_back("mark_size_unit", std::vector<int>({SAVE_LOAD, __GO_MARK_SIZE_UNIT__, jni_int}));
205         m.emplace_back("mark_foreground", std::vector<int>({SAVE_LOAD, __GO_MARK_FOREGROUND__, jni_int}));
206         m.emplace_back("mark_background", std::vector<int>({SAVE_LOAD, __GO_MARK_BACKGROUND__, jni_int}));
207         m.emplace_back("foreground", std::vector<int>({SAVE_LOAD, __GO_LINE_COLOR__, jni_int}));
208         m.emplace_back("background", std::vector<int>({SAVE_LOAD, __GO_BACKGROUND__, jni_int}));
209         m.emplace_back("clip_state", std::vector<int>({SAVE_LOAD, __GO_CLIP_STATE__, jni_int}));
210         m.emplace_back("clip_box", std::vector<int>({SAVE_LOAD, __GO_CLIP_BOX__, jni_double_vector, -1, -4}));
211
212         m.emplace_back("ticks_locations_x", std::vector<int>({SAVE_LOAD, __GO_X_AXIS_TICKS_LOCATIONS__, jni_double_vector, -1, __GO_X_AXIS_NUMBER_TICKS__}));
213         m.emplace_back("ticks_labels_x", std::vector<int>({SAVE_LOAD, __GO_X_AXIS_TICKS_LABELS__, jni_string_vector, -1, __GO_X_AXIS_NUMBER_TICKS__}));
214         m.emplace_back("ticks_locations_y", std::vector<int>({SAVE_LOAD, __GO_Y_AXIS_TICKS_LOCATIONS__, jni_double_vector, -1, __GO_Y_AXIS_NUMBER_TICKS__}));
215         m.emplace_back("ticks_labels_y", std::vector<int>({SAVE_LOAD, __GO_Y_AXIS_TICKS_LABELS__, jni_string_vector, -1, __GO_Y_AXIS_NUMBER_TICKS__}));
216         m.emplace_back("ticks_locations_z", std::vector<int>({SAVE_LOAD, __GO_Z_AXIS_TICKS_LOCATIONS__, jni_double_vector, -1, __GO_Z_AXIS_NUMBER_TICKS__}));
217         m.emplace_back("ticks_labels_z", std::vector<int>({SAVE_LOAD, __GO_Z_AXIS_TICKS_LABELS__, jni_string_vector, -1, __GO_Z_AXIS_NUMBER_TICKS__}));
218
219         //@end
220
221         //must be set after data_bounds
222         m.emplace_back("log_flags_x", std::vector<int>({SAVE_LOAD, __GO_X_AXIS_LOG_FLAG__, jni_bool}));
223         m.emplace_back("log_flags_y", std::vector<int>({SAVE_LOAD, __GO_Y_AXIS_LOG_FLAG__, jni_bool}));
224         m.emplace_back("log_flags_z", std::vector<int>({SAVE_LOAD, __GO_Z_AXIS_LOG_FLAG__, jni_bool}));
225
226         //must be set mark_style
227         m.emplace_back("mark_mode", std::vector<int>({SAVE_LOAD, __GO_MARK_MODE__, jni_bool}));
228
229         //must be set after ticks labels
230         m.emplace_back("auto_ticks_x", std::vector<int>({SAVE_LOAD, __GO_X_AXIS_AUTO_TICKS__, jni_bool}));
231         m.emplace_back("auto_ticks_y", std::vector<int>({SAVE_LOAD, __GO_Y_AXIS_AUTO_TICKS__, jni_bool}));
232         m.emplace_back("auto_ticks_z", std::vector<int>({SAVE_LOAD, __GO_Z_AXIS_AUTO_TICKS__, jni_bool}));
233
234         return m;
235     }
236 };
237
238 struct LabelHandle
239 {
240     static HandleProp getPropertyList()
241     {
242         HandleProp m;
243
244         //SAVE_ONLY, so don't care of reload ordering
245         m.emplace_back("type", std::vector<int>({SAVE_ONLY, __GO_TYPE__, jni_int}));
246
247         //@start
248
249         //@ don't care
250         m.emplace_back("position", std::vector<int>({SAVE_LOAD, __GO_POSITION__, jni_double_vector, -1, -3}));
251         m.emplace_back("font_foreground", std::vector<int>({SAVE_LOAD, __GO_FONT_COLOR__, jni_int}));
252         m.emplace_back("foreground", std::vector<int>({SAVE_LOAD, __GO_LINE_COLOR__, jni_int}));
253         m.emplace_back("background", std::vector<int>({SAVE_LOAD, __GO_BACKGROUND__, jni_int}));
254         m.emplace_back("fill_mode", std::vector<int>({SAVE_LOAD, __GO_FILL_MODE__, jni_bool}));
255         m.emplace_back("font_style", std::vector<int>({SAVE_LOAD, __GO_FONT_STYLE__, jni_int}));
256         m.emplace_back("font_size", std::vector<int>({SAVE_LOAD, __GO_FONT_SIZE__, jni_double}));
257         m.emplace_back("fractional_font", std::vector<int>({SAVE_LOAD, __GO_FONT_FRACTIONAL__, jni_bool}));
258         m.emplace_back("font_angle", std::vector<int>({SAVE_LOAD, __GO_FONT_ANGLE__, jni_double}));
259         m.emplace_back("auto_rotation", std::vector<int>({SAVE_LOAD, __GO_AUTO_ROTATION__, jni_bool}));
260         m.emplace_back("auto_position", std::vector<int>({SAVE_LOAD, __GO_AUTO_POSITION__, jni_bool}));
261
262         //@end
263         m.emplace_back("visible", std::vector<int>({SAVE_LOAD, __GO_VISIBLE__, jni_bool}));
264
265         return m;
266     }
267 };
268
269 struct ChampHandle
270 {
271     static HandleProp getPropertyList()
272     {
273         HandleProp m;
274
275         //SAVE_ONLY, so don't care of reload ordering
276         m.emplace_back("type", std::vector<int>({SAVE_ONLY, __GO_TYPE__, jni_int}));
277
278         //@start
279         m.emplace_back("clip_box", std::vector<int>({SAVE_LOAD, __GO_CLIP_BOX__, jni_double_vector, -1, -4}));
280         m.emplace_back("clip_state", std::vector<int>({SAVE_LOAD, __GO_CLIP_STATE__, jni_int}));
281
282         //@ don't care
283         m.emplace_back("arrow_size", std::vector<int>({SAVE_LOAD, __GO_ARROW_SIZE__, jni_double}));
284         m.emplace_back("line_style", std::vector<int>({SAVE_LOAD, __GO_LINE_STYLE__, jni_int}));
285         m.emplace_back("thickness", std::vector<int>({SAVE_LOAD, __GO_LINE_THICKNESS__, jni_double}));
286         m.emplace_back("colored", std::vector<int>({SAVE_LOAD, __GO_COLORED__, jni_bool}));
287
288         //@end
289         m.emplace_back("visible", std::vector<int>({SAVE_LOAD, __GO_VISIBLE__, jni_bool}));
290         return m;
291     }
292 };
293
294 struct SurfaceHandle
295 {
296     static HandleProp getPropertyList()
297     {
298         HandleProp m;
299
300         //SAVE_ONLY, so don't care of reload ordering
301         m.emplace_back("type", std::vector<int>({SAVE_ONLY, __GO_TYPE__, jni_int}));
302
303         //@start
304
305         //@ don't care
306         m.emplace_back("surface_mode", std::vector<int>({SAVE_LOAD, __GO_SURFACE_MODE__, jni_bool}));
307         m.emplace_back("foreground", std::vector<int>({SAVE_LOAD, __GO_LINE_COLOR__, jni_int}));
308         m.emplace_back("thickness", std::vector<int>({SAVE_LOAD, __GO_LINE_THICKNESS__, jni_double}));
309         m.emplace_back("mark_mode", std::vector<int>({SAVE_LOAD, __GO_MARK_MODE__, jni_bool}));
310         m.emplace_back("mark_style", std::vector<int>({SAVE_LOAD, __GO_MARK_STYLE__, jni_int}));
311         m.emplace_back("mark_size", std::vector<int>({SAVE_LOAD, __GO_MARK_SIZE__, jni_int}));
312         m.emplace_back("mark_size_unit", std::vector<int>({SAVE_LOAD, __GO_MARK_SIZE_UNIT__, jni_int}));
313         m.emplace_back("mark_foreground", std::vector<int>({SAVE_LOAD, __GO_MARK_FOREGROUND__, jni_int}));
314         m.emplace_back("mark_background", std::vector<int>({SAVE_LOAD, __GO_MARK_BACKGROUND__, jni_int}));
315         m.emplace_back("color_mode", std::vector<int>({SAVE_LOAD, __GO_COLOR_MODE__, jni_int}));
316         m.emplace_back("color_flag", std::vector<int>({SAVE_LOAD, __GO_COLOR_FLAG__, jni_int}));
317         m.emplace_back("ambient_color", std::vector<int>({SAVE_LOAD, __GO_AMBIENTCOLOR__, jni_double_vector, -1, -3}));
318         m.emplace_back("diffuse_color", std::vector<int>({SAVE_LOAD, __GO_DIFFUSECOLOR__, jni_double_vector, -1, -3}));
319         m.emplace_back("specular_color", std::vector<int>({SAVE_LOAD, __GO_SPECULARCOLOR__, jni_double_vector, -1, -3}));
320         m.emplace_back("use_color_material", std::vector<int>({SAVE_LOAD, __GO_COLOR_MATERIAL__, jni_bool}));
321         m.emplace_back("material_shininess", std::vector<int>({SAVE_LOAD, __GO_MATERIAL_SHININESS__, jni_double}));
322         m.emplace_back("hiddencolor", std::vector<int>({SAVE_LOAD, __GO_HIDDEN_COLOR__, jni_int}));
323         m.emplace_back("clip_box", std::vector<int>({SAVE_LOAD, __GO_CLIP_BOX__, jni_double_vector, -1, -4}));
324         m.emplace_back("clip_state", std::vector<int>({SAVE_LOAD, __GO_CLIP_STATE__, jni_int}));
325
326         //only for Fac3d
327         //m.emplace_back("cdata_mapping", std::vector<int>({SAVE_LOAD, __GO_COLORED__, jni_bool}));
328
329         //@end
330         m.emplace_back("visible", std::vector<int>({SAVE_LOAD, __GO_VISIBLE__, jni_bool}));
331         return m;
332     }
333 };
334
335 struct PolylineHandle
336 {
337     static HandleProp getPropertyList()
338     {
339         HandleProp m;
340
341         //SAVE_ONLY, so don't care of reload ordering
342         m.emplace_back("type", std::vector<int>({SAVE_ONLY, __GO_TYPE__, jni_int}));
343
344         //@start
345
346         //@ don't care
347         m.emplace_back("display_function", std::vector<int>({SAVE_LOAD, __GO_DATATIP_DISPLAY_FNC__, jni_string}));
348         m.emplace_back("display_function_data", std::vector<int>({SAVE_LOAD, __GO_DATA_MODEL_DISPLAY_FUNCTION__, jni_int_vector, -1, __GO_DATA_MODEL_DISPLAY_FUNCTION_SIZE__}));
349         m.emplace_back("closed", std::vector<int>({SAVE_LOAD, __GO_CLOSED__, jni_bool}));
350         m.emplace_back("line_mode", std::vector<int>({SAVE_LOAD, __GO_LINE_MODE__, jni_bool}));
351         m.emplace_back("fill_mode", std::vector<int>({SAVE_LOAD, __GO_FILL_MODE__, jni_bool}));
352         m.emplace_back("line_style", std::vector<int>({SAVE_LOAD, __GO_LINE_STYLE__, jni_int}));
353         m.emplace_back("thickness", std::vector<int>({SAVE_LOAD, __GO_LINE_THICKNESS__, jni_double}));
354         m.emplace_back("arrow_size_factor", std::vector<int>({SAVE_LOAD, __GO_ARROW_SIZE_FACTOR__, jni_double}));
355         m.emplace_back("polyline_style", std::vector<int>({SAVE_LOAD, __GO_POLYLINE_STYLE__, jni_int}));
356         m.emplace_back("interp_color_mode", std::vector<int>({SAVE_LOAD, __GO_INTERP_COLOR_MODE__, jni_bool}));
357         m.emplace_back("mark_mode", std::vector<int>({SAVE_LOAD, __GO_MARK_MODE__, jni_bool}));
358         m.emplace_back("mark_style", std::vector<int>({SAVE_LOAD, __GO_MARK_STYLE__, jni_int}));
359         m.emplace_back("mark_size", std::vector<int>({SAVE_LOAD, __GO_MARK_SIZE__, jni_int}));
360         m.emplace_back("mark_size_unit", std::vector<int>({SAVE_LOAD, __GO_MARK_SIZE_UNIT__, jni_int}));
361         m.emplace_back("foreground", std::vector<int>({SAVE_LOAD, __GO_LINE_COLOR__, jni_int}));
362         m.emplace_back("background", std::vector<int>({SAVE_LOAD, __GO_BACKGROUND__, jni_int}));
363         m.emplace_back("mark_foreground", std::vector<int>({SAVE_LOAD, __GO_MARK_FOREGROUND__, jni_int}));
364         m.emplace_back("mark_background", std::vector<int>({SAVE_LOAD, __GO_MARK_BACKGROUND__, jni_int}));
365         m.emplace_back("mark_offset", std::vector<int>({SAVE_LOAD, __GO_MARK_OFFSET__, jni_int}));
366         m.emplace_back("mark_stride", std::vector<int>({SAVE_LOAD, __GO_MARK_STRIDE__, jni_int}));
367         m.emplace_back("bar_width", std::vector<int>({SAVE_LOAD, __GO_BAR_WIDTH__, jni_double}));
368         m.emplace_back("clip_box", std::vector<int>({SAVE_LOAD, __GO_CLIP_BOX__, jni_double_vector, -1, -4}));
369         m.emplace_back("clip_state", std::vector<int>({SAVE_LOAD, __GO_CLIP_STATE__, jni_int}));
370         m.emplace_back("datatip_display_mode", std::vector<int>({SAVE_LOAD, __GO_DATATIP_DISPLAY_MODE__, jni_int}));
371
372         //@end
373         m.emplace_back("visible", std::vector<int>({SAVE_LOAD, __GO_VISIBLE__, jni_bool}));
374         return m;
375     }
376 };
377
378 struct CompoundHandle
379 {
380     static HandleProp getPropertyList()
381     {
382         HandleProp m;
383
384         //SAVE_ONLY, so don't care of reload ordering
385         m.emplace_back("type", std::vector<int>({SAVE_ONLY, __GO_TYPE__, jni_int}));
386         //@start
387
388         //@ don't care
389
390         //@end
391         m.emplace_back("visible", std::vector<int>({SAVE_LOAD, __GO_VISIBLE__, jni_bool}));
392         return m;
393     }
394 };
395
396 struct DatatipHandle
397 {
398     static HandleProp getPropertyList()
399     {
400         HandleProp m;
401
402         //SAVE_ONLY, so don't care of reload ordering
403         m.emplace_back("type", std::vector<int>({SAVE_ONLY, __GO_TYPE__, jni_int}));
404         m.emplace_back("data_index", std::vector<int>({SAVE_ONLY, __GO_DATATIP_INDEXES__, jni_int}));
405
406         //@start
407         m.emplace_back("box_mode", std::vector<int>({SAVE_LOAD, __GO_DATATIP_BOX_MODE__, jni_bool}));
408         m.emplace_back("label_mode", std::vector<int>({SAVE_LOAD, __GO_DATATIP_LABEL_MODE__, jni_bool}));
409         m.emplace_back("orientation", std::vector<int>({SAVE_LOAD, __GO_DATATIP_ORIENTATION__, jni_int}));
410         m.emplace_back("display_components", std::vector<int>({SAVE_LOAD, __GO_DATATIP_DISPLAY_COMPONENTS__, jni_string}));
411         m.emplace_back("auto_orientation", std::vector<int>({SAVE_LOAD, __GO_DATATIP_AUTOORIENTATION__, jni_bool}));
412         m.emplace_back("interp_mode", std::vector<int>({SAVE_LOAD, __GO_DATATIP_INTERP_MODE__, jni_bool}));
413         m.emplace_back("display_function", std::vector<int>({SAVE_LOAD, __GO_DATATIP_DISPLAY_FNC__, jni_string}));
414         m.emplace_back("font_foreground", std::vector<int>({SAVE_LOAD, __GO_FONT_COLOR__, jni_int}));
415         m.emplace_back("foreground", std::vector<int>({SAVE_LOAD, __GO_LINE_COLOR__, jni_int}));
416         m.emplace_back("background", std::vector<int>({SAVE_LOAD, __GO_BACKGROUND__, jni_int}));
417         m.emplace_back("mark_mode", std::vector<int>({SAVE_LOAD, __GO_MARK_MODE__, jni_bool}));
418         m.emplace_back("mark_style", std::vector<int>({SAVE_LOAD, __GO_MARK_STYLE__, jni_int}));
419         m.emplace_back("mark_size", std::vector<int>({SAVE_LOAD, __GO_MARK_SIZE__, jni_int}));
420         m.emplace_back("mark_size_unit", std::vector<int>({SAVE_LOAD, __GO_MARK_SIZE_UNIT__, jni_int}));
421         m.emplace_back("mark_foreground", std::vector<int>({SAVE_LOAD, __GO_MARK_FOREGROUND__, jni_int}));
422         m.emplace_back("mark_background", std::vector<int>({SAVE_LOAD, __GO_MARK_BACKGROUND__, jni_int}));
423         m.emplace_back("detached_position", std::vector<int>({SAVE_LOAD, __GO_DATATIP_DETACHED_POSITION__, jni_double_vector, -1, -3}));
424         m.emplace_back("detached_mode", std::vector<int>({SAVE_LOAD, __GO_DATATIP_DETACHED_MODE__, jni_bool}));
425         m.emplace_back("line_style", std::vector<int>({SAVE_LOAD, __GO_LINE_STYLE__, jni_int}));
426
427         //@ don't care
428
429         //@end
430         m.emplace_back("visible", std::vector<int>({SAVE_LOAD, __GO_VISIBLE__, jni_bool}));
431         return m;
432     }
433 };
434
435 struct RectangleHandle
436 {
437     static HandleProp getPropertyList()
438     {
439         HandleProp m;
440
441         //SAVE_ONLY, so don't care of reload ordering
442         m.emplace_back("type", std::vector<int>({SAVE_ONLY, __GO_TYPE__, jni_int}));
443
444         //@start
445
446         //@ don't care
447         m.emplace_back("thickness", std::vector<int>({SAVE_LOAD, __GO_LINE_THICKNESS__, jni_double}));
448         m.emplace_back("mark_mode", std::vector<int>({SAVE_LOAD, __GO_MARK_MODE__, jni_bool}));
449         m.emplace_back("mark_style", std::vector<int>({SAVE_LOAD, __GO_MARK_STYLE__, jni_int}));
450         m.emplace_back("mark_size", std::vector<int>({SAVE_LOAD, __GO_MARK_SIZE__, jni_int}));
451         m.emplace_back("mark_size_unit", std::vector<int>({SAVE_LOAD, __GO_MARK_SIZE_UNIT__, jni_int}));
452         m.emplace_back("mark_foreground", std::vector<int>({SAVE_LOAD, __GO_MARK_FOREGROUND__, jni_int}));
453         m.emplace_back("mark_background", std::vector<int>({SAVE_LOAD, __GO_MARK_BACKGROUND__, jni_int}));
454         m.emplace_back("line_mode", std::vector<int>({SAVE_LOAD, __GO_LINE_MODE__, jni_bool}));
455         m.emplace_back("line_style", std::vector<int>({SAVE_LOAD, __GO_LINE_STYLE__, jni_int}));
456         m.emplace_back("fill_mode", std::vector<int>({SAVE_LOAD, __GO_FILL_MODE__, jni_bool}));
457         m.emplace_back("foreground", std::vector<int>({SAVE_LOAD, __GO_LINE_COLOR__, jni_int}));
458         m.emplace_back("background", std::vector<int>({SAVE_LOAD, __GO_BACKGROUND__, jni_int}));
459         m.emplace_back("upper_left_point", std::vector<int>({SAVE_LOAD, __GO_UPPER_LEFT_POINT__, jni_double_vector, -1, -3}));
460         m.emplace_back("width", std::vector<int>({SAVE_LOAD, __GO_WIDTH__, jni_double}));
461         m.emplace_back("height", std::vector<int>({SAVE_LOAD, __GO_HEIGHT__, jni_double}));
462         m.emplace_back("clip_box", std::vector<int>({SAVE_LOAD, __GO_CLIP_BOX__, jni_double_vector, -1, -4}));
463         m.emplace_back("clip_state", std::vector<int>({SAVE_LOAD, __GO_CLIP_STATE__, jni_int}));
464
465         //@end
466         m.emplace_back("visible", std::vector<int>({SAVE_LOAD, __GO_VISIBLE__, jni_bool}));
467         return m;
468     }
469 };
470
471 struct ArcHandle
472 {
473     static HandleProp getPropertyList()
474     {
475         HandleProp m;
476
477         //SAVE_ONLY, so don't care of reload ordering
478         m.emplace_back("type", std::vector<int>({SAVE_ONLY, __GO_TYPE__, jni_int}));
479
480         //@start
481
482         //@ don't care
483         m.emplace_back("thickness", std::vector<int>({SAVE_LOAD, __GO_LINE_THICKNESS__, jni_double}));
484         m.emplace_back("line_mode", std::vector<int>({SAVE_LOAD, __GO_LINE_MODE__, jni_bool}));
485         m.emplace_back("line_style", std::vector<int>({SAVE_LOAD, __GO_LINE_STYLE__, jni_int}));
486         m.emplace_back("fill_mode", std::vector<int>({SAVE_LOAD, __GO_FILL_MODE__, jni_bool}));
487         m.emplace_back("foreground", std::vector<int>({SAVE_LOAD, __GO_LINE_COLOR__, jni_int}));
488         m.emplace_back("background", std::vector<int>({SAVE_LOAD, __GO_BACKGROUND__, jni_int}));
489         m.emplace_back("upper_left_point", std::vector<int>({SAVE_LOAD, __GO_UPPER_LEFT_POINT__, jni_double_vector, -1, -3}));
490         m.emplace_back("width", std::vector<int>({SAVE_LOAD, __GO_WIDTH__, jni_double}));
491         m.emplace_back("height", std::vector<int>({SAVE_LOAD, __GO_HEIGHT__, jni_double}));
492         m.emplace_back("start", std::vector<int>({SAVE_LOAD, __GO_START_ANGLE__, jni_double}));
493         m.emplace_back("end", std::vector<int>({SAVE_LOAD, __GO_END_ANGLE__, jni_double}));
494         m.emplace_back("arc_drawing_method", std::vector<int>({SAVE_LOAD, __GO_ARC_DRAWING_METHOD__, jni_int}));
495         m.emplace_back("clip_box", std::vector<int>({SAVE_LOAD, __GO_CLIP_BOX__, jni_double_vector, -1, -4}));
496         m.emplace_back("clip_state", std::vector<int>({SAVE_LOAD, __GO_CLIP_STATE__, jni_int}));
497
498         //@end
499         m.emplace_back("visible", std::vector<int>({SAVE_LOAD, __GO_VISIBLE__, jni_bool}));
500         return m;
501     }
502 };
503
504 struct SegsHandle
505 {
506     static HandleProp getPropertyList()
507     {
508         HandleProp m;
509
510         //SAVE_ONLY, so don't care of reload ordering
511         m.emplace_back("type", std::vector<int>({SAVE_ONLY, __GO_TYPE__, jni_int}));
512
513         //@start
514
515         //@ don't care
516         m.emplace_back("number_arrows", std::vector<int>({SAVE_LOAD, __GO_NUMBER_ARROWS__, jni_int}));
517         m.emplace_back("segs_color", std::vector<int>({SAVE_LOAD, __GO_SEGS_COLORS__, jni_int_vector, -1, __GO_NUMBER_ARROWS__}));
518         m.emplace_back("base", std::vector<int>({SAVE_LOAD, __GO_BASE__, jni_double_vector, -3, __GO_NUMBER_ARROWS__}));
519         m.emplace_back("direction", std::vector<int>({SAVE_LOAD, __GO_DIRECTION__, jni_double_vector, -3, __GO_NUMBER_ARROWS__}));
520         m.emplace_back("arrow_size", std::vector<int>({SAVE_LOAD, __GO_ARROW_SIZE__, jni_double}));
521         m.emplace_back("line_mode", std::vector<int>({SAVE_LOAD, __GO_LINE_MODE__, jni_bool}));
522         m.emplace_back("line_style", std::vector<int>({SAVE_LOAD, __GO_LINE_STYLE__, jni_int}));
523         m.emplace_back("thickness", std::vector<int>({SAVE_LOAD, __GO_LINE_THICKNESS__, jni_double}));
524         m.emplace_back("mark_style", std::vector<int>({SAVE_LOAD, __GO_MARK_STYLE__, jni_int}));
525         m.emplace_back("mark_mode", std::vector<int>({SAVE_LOAD, __GO_MARK_MODE__, jni_bool}));
526         m.emplace_back("mark_size", std::vector<int>({SAVE_LOAD, __GO_MARK_SIZE__, jni_int}));
527         m.emplace_back("mark_size_unit", std::vector<int>({SAVE_LOAD, __GO_MARK_SIZE_UNIT__, jni_int}));
528         m.emplace_back("mark_foreground", std::vector<int>({SAVE_LOAD, __GO_MARK_FOREGROUND__, jni_int}));
529         m.emplace_back("mark_background", std::vector<int>({SAVE_LOAD, __GO_MARK_BACKGROUND__, jni_int}));
530         m.emplace_back("clip_box", std::vector<int>({SAVE_LOAD, __GO_CLIP_BOX__, jni_double_vector, -1, -4}));
531         m.emplace_back("clip_state", std::vector<int>({SAVE_LOAD, __GO_CLIP_STATE__, jni_int}));
532         //@end
533         m.emplace_back("visible", std::vector<int>({SAVE_LOAD, __GO_VISIBLE__, jni_bool}));
534         return m;
535     }
536 };
537
538 struct GrayplotHandle
539 {
540     static HandleProp getPropertyList()
541     {
542         HandleProp m;
543
544         //SAVE_ONLY, so don't care of reload ordering
545         m.emplace_back("type", std::vector<int>({SAVE_ONLY, __GO_TYPE__, jni_int}));
546
547         //@start
548
549         //@ don't care
550         m.emplace_back("data_mapping", std::vector<int>({SAVE_LOAD, __GO_DATA_MAPPING__, jni_int}));
551         m.emplace_back("clip_box", std::vector<int>({SAVE_LOAD, __GO_CLIP_BOX__, jni_double_vector, -1, -4}));
552         m.emplace_back("clip_state", std::vector<int>({SAVE_LOAD, __GO_CLIP_STATE__, jni_int}));
553
554         //@end
555         m.emplace_back("visible", std::vector<int>({SAVE_LOAD, __GO_VISIBLE__, jni_bool}));
556         return m;
557     }
558 };
559
560 struct MatplotHandle
561 {
562     static HandleProp getPropertyList()
563     {
564         HandleProp m;
565
566         //SAVE_ONLY, so don't care of reload ordering
567         m.emplace_back("type", std::vector<int>({SAVE_ONLY, __GO_TYPE__, jni_int}));
568         m.emplace_back("rect", std::vector<int>({SAVE_ONLY, __GO_DATA_MODEL_MATPLOT_BOUNDS__, jni_double_vector, -1, -4}));
569
570         //@start
571
572         //@ don't care
573         m.emplace_back("image_type", std::vector<int>({SAVE_LOAD, __GO_DATA_MODEL_MATPLOT_IMAGE_TYPE__, jni_int}));
574         m.emplace_back("data_type", std::vector<int>({SAVE_LOAD, __GO_DATA_MODEL_MATPLOT_DATA_TYPE__, jni_int}));
575         m.emplace_back("data_order", std::vector<int>({SAVE_LOAD, __GO_DATA_MODEL_MATPLOT_DATA_ORDER__, jni_int}));
576         m.emplace_back("num_x", std::vector<int>({SAVE_LOAD, __GO_DATA_MODEL_NUM_X__, jni_int}));
577         m.emplace_back("num_y", std::vector<int>({SAVE_LOAD, __GO_DATA_MODEL_NUM_Y__, jni_int}));
578         m.emplace_back("clip_box", std::vector<int>({SAVE_LOAD, __GO_CLIP_BOX__, jni_double_vector, -1, -4}));
579         m.emplace_back("clip_state", std::vector<int>({SAVE_LOAD, __GO_CLIP_STATE__, jni_int}));
580
581         //@end
582         m.emplace_back("visible", std::vector<int>({SAVE_LOAD, __GO_VISIBLE__, jni_bool}));
583         return m;
584     }
585 };
586
587 struct FecHandle
588 {
589     static HandleProp getPropertyList()
590     {
591         HandleProp m;
592
593         //SAVE_ONLY, so don't care of reload ordering
594         m.emplace_back("type", std::vector<int>({SAVE_ONLY, __GO_TYPE__, jni_int}));
595         m.emplace_back("coords", std::vector<int>({SAVE_ONLY, __GO_DATA_MODEL_COORDINATES__, jni_double_vector, -3, __GO_DATA_MODEL_NUM_VERTICES__}));
596         m.emplace_back("values", std::vector<int>({SAVE_ONLY, __GO_DATA_MODEL_VALUES__, jni_double_vector, -1, __GO_DATA_MODEL_NUM_VERTICES__}));
597
598         //@start
599
600         //@ don't care
601         m.emplace_back("z_bounds", std::vector<int>({SAVE_LOAD, __GO_Z_BOUNDS__, jni_double_vector, -1, -2}));
602         m.emplace_back("color_range", std::vector<int>({SAVE_LOAD, __GO_COLOR_RANGE__, jni_int_vector, -1, -2}));
603         m.emplace_back("outside_colors", std::vector<int>({SAVE_LOAD, __GO_OUTSIDE_COLOR__, jni_int_vector, -1, -2}));
604         m.emplace_back("line_mode", std::vector<int>({SAVE_LOAD, __GO_LINE_MODE__, jni_bool}));
605         m.emplace_back("foreground", std::vector<int>({SAVE_LOAD, __GO_LINE_COLOR__, jni_int}));
606         m.emplace_back("clip_box", std::vector<int>({SAVE_LOAD, __GO_CLIP_BOX__, jni_double_vector, -1, -4}));
607         m.emplace_back("clip_state", std::vector<int>({SAVE_LOAD, __GO_CLIP_STATE__, jni_int}));
608
609         //@end
610         m.emplace_back("visible", std::vector<int>({SAVE_LOAD, __GO_VISIBLE__, jni_bool}));
611         return m;
612     }
613 };
614
615 struct LegendHandle
616 {
617     static HandleProp getPropertyList()
618     {
619         HandleProp m;
620
621         //SAVE_ONLY, so don't care of reload ordering
622         m.emplace_back("type", std::vector<int>({SAVE_ONLY, __GO_TYPE__, jni_int}));
623
624         //@start
625
626         //@ don't care
627         m.emplace_back("font_style", std::vector<int>({SAVE_LOAD, __GO_FONT_STYLE__, jni_int}));
628         m.emplace_back("font_size", std::vector<int>({SAVE_LOAD, __GO_FONT_SIZE__, jni_double}));
629         m.emplace_back("font_color", std::vector<int>({SAVE_LOAD, __GO_FONT_COLOR__, jni_int}));
630         m.emplace_back("fractional_font", std::vector<int>({SAVE_LOAD, __GO_FONT_FRACTIONAL__, jni_bool}));
631
632         //links recurtion to find axes
633         m.emplace_back("legend_location", std::vector<int>({SAVE_LOAD, __GO_LEGEND_LOCATION__, jni_int}));
634         m.emplace_back("position", std::vector<int>({SAVE_LOAD, __GO_POSITION__, jni_double_vector, -1, -2}));
635         m.emplace_back("line_width", std::vector<int>({SAVE_LOAD, __GO_LINE_WIDTH__, jni_double}));
636         m.emplace_back("line_mode", std::vector<int>({SAVE_LOAD, __GO_LINE_MODE__, jni_bool}));
637         m.emplace_back("thickness", std::vector<int>({SAVE_LOAD, __GO_LINE_THICKNESS__, jni_double}));
638         m.emplace_back("foreground", std::vector<int>({SAVE_LOAD, __GO_LINE_COLOR__, jni_int}));
639         m.emplace_back("fill_mode", std::vector<int>({SAVE_LOAD, __GO_FILL_MODE__, jni_bool}));
640         m.emplace_back("background", std::vector<int>({SAVE_LOAD, __GO_BACKGROUND__, jni_int}));
641         m.emplace_back("marks_count", std::vector<int>({SAVE_LOAD, __GO_MARKS_COUNT__, jni_int}));
642         m.emplace_back("clip_box", std::vector<int>({SAVE_LOAD, __GO_CLIP_BOX__, jni_double_vector, -1, -4}));
643         m.emplace_back("clip_state", std::vector<int>({SAVE_LOAD, __GO_CLIP_STATE__, jni_int}));
644
645         //@end
646         m.emplace_back("visible", std::vector<int>({SAVE_LOAD, __GO_VISIBLE__, jni_bool}));
647         return m;
648     }
649 };
650
651 struct TextHandle
652 {
653     static HandleProp getPropertyList()
654     {
655         HandleProp m;
656
657         //SAVE_ONLY, so don't care of reload ordering
658         m.emplace_back("type", std::vector<int>({SAVE_ONLY, __GO_TYPE__, jni_int}));
659
660         //@start
661
662         //@ don't care
663         m.emplace_back("position", std::vector<int>({SAVE_LOAD, __GO_POSITION__, jni_double_vector, -1, -3}));
664         m.emplace_back("text_box", std::vector<int>({SAVE_LOAD, __GO_TEXT_BOX__, jni_double_vector, -1, -2}));
665         m.emplace_back("text_box_mode", std::vector<int>({SAVE_LOAD, __GO_TEXT_BOX_MODE__, jni_int}));
666         m.emplace_back("foreground", std::vector<int>({SAVE_LOAD, __GO_LINE_COLOR__, jni_int}));
667         m.emplace_back("font_style", std::vector<int>({SAVE_LOAD, __GO_FONT_STYLE__, jni_int}));
668         m.emplace_back("font_size", std::vector<int>({SAVE_LOAD, __GO_FONT_SIZE__, jni_double}));
669         m.emplace_back("font_angle", std::vector<int>({SAVE_LOAD, __GO_FONT_ANGLE__, jni_double}));
670         m.emplace_back("box", std::vector<int>({SAVE_LOAD, __GO_BOX__, jni_bool}));
671         m.emplace_back("line_mode", std::vector<int>({SAVE_LOAD, __GO_LINE_MODE__, jni_bool}));
672         m.emplace_back("fill_mode", std::vector<int>({SAVE_LOAD, __GO_FILL_MODE__, jni_bool}));
673         m.emplace_back("font_foreground", std::vector<int>({SAVE_LOAD, __GO_FONT_COLOR__, jni_int}));
674         m.emplace_back("background", std::vector<int>({SAVE_LOAD, __GO_BACKGROUND__, jni_int}));
675         m.emplace_back("alignment", std::vector<int>({SAVE_LOAD, __GO_ALIGNMENT__, jni_int}));
676         m.emplace_back("fractional_font", std::vector<int>({SAVE_LOAD, __GO_FONT_FRACTIONAL__, jni_bool}));
677         m.emplace_back("clip_box", std::vector<int>({SAVE_LOAD, __GO_CLIP_BOX__, jni_double_vector, -1, -4}));
678         m.emplace_back("clip_state", std::vector<int>({SAVE_LOAD, __GO_CLIP_STATE__, jni_int}));
679
680         //@end
681         m.emplace_back("visible", std::vector<int>({SAVE_LOAD, __GO_VISIBLE__, jni_bool}));
682         return m;
683     }
684 };
685
686 struct AxisHandle
687 {
688     static HandleProp getPropertyList()
689     {
690         HandleProp m;
691
692         //SAVE_ONLY, so don't care of reload ordering
693         m.emplace_back("type", std::vector<int>({SAVE_ONLY, __GO_TYPE__, jni_int}));
694
695         //@start
696
697         //@ don't care
698         m.emplace_back("tics_direction", std::vector<int>({SAVE_LOAD, __GO_TICKS_DIRECTION__, jni_int}));
699         m.emplace_back("xtics_coord", std::vector<int>({SAVE_LOAD, __GO_X_TICKS_COORDS__, jni_double_vector, -1, __GO_X_NUMBER_TICKS__}));
700         m.emplace_back("ytics_coord", std::vector<int>({SAVE_LOAD, __GO_Y_TICKS_COORDS__, jni_double_vector, -1, __GO_Y_NUMBER_TICKS__}));
701         m.emplace_back("tics_color", std::vector<int>({SAVE_LOAD, __GO_TICKS_COLOR__, jni_int}));
702         m.emplace_back("tics_segment", std::vector<int>({SAVE_LOAD, __GO_TICKS_SEGMENT__, jni_bool}));
703         m.emplace_back("tics_style", std::vector<int>({SAVE_LOAD, __GO_TICKS_STYLE__, jni_int}));
704         m.emplace_back("sub_tics", std::vector<int>({SAVE_LOAD, __GO_SUBTICKS__, jni_int}));
705         m.emplace_back("tics_labels", std::vector<int>({SAVE_LOAD, __GO_TICKS_LABELS__, jni_string_vector, -1, __GO_NUMBER_TICKS_LABELS__}));
706         m.emplace_back("labels_font_size", std::vector<int>({SAVE_LOAD, __GO_FONT_SIZE__, jni_double}));
707         m.emplace_back("labels_font_color", std::vector<int>({SAVE_LOAD, __GO_FONT_COLOR__, jni_int}));
708         m.emplace_back("fractional_font", std::vector<int>({SAVE_LOAD, __GO_FONT_FRACTIONAL__, jni_bool}));
709         m.emplace_back("clip_box", std::vector<int>({SAVE_LOAD, __GO_CLIP_BOX__, jni_double_vector, -1, -4}));
710         m.emplace_back("clip_state", std::vector<int>({SAVE_LOAD, __GO_CLIP_STATE__, jni_int}));
711
712         //@end
713         m.emplace_back("visible", std::vector<int>({SAVE_LOAD, __GO_VISIBLE__, jni_bool}));
714         return m;
715     }
716 };
717
718 struct LightHandle
719 {
720     static HandleProp getPropertyList()
721     {
722         HandleProp m;
723
724         //SAVE_ONLY, so don't care of reload ordering
725         m.emplace_back("type", std::vector<int>({SAVE_ONLY, __GO_TYPE__, jni_int}));
726
727         //@start
728
729         //@ don't care
730         m.emplace_back("light_type", std::vector<int>({SAVE_LOAD, __GO_LIGHT_TYPE__, jni_int}));
731         m.emplace_back("position", std::vector<int>({SAVE_LOAD, __GO_POSITION__, jni_double_vector, -1, -3}));
732         m.emplace_back("direction", std::vector<int>({SAVE_LOAD, __GO_DIRECTION__, jni_double_vector, -1, -3}));
733         m.emplace_back("ambient_color", std::vector<int>({SAVE_LOAD, __GO_AMBIENTCOLOR__, jni_double_vector, -1, -3}));
734         m.emplace_back("diffuse_color", std::vector<int>({SAVE_LOAD, __GO_DIFFUSECOLOR__, jni_double_vector, -1, -3}));
735         m.emplace_back("specular_color", std::vector<int>({SAVE_LOAD, __GO_SPECULARCOLOR__, jni_double_vector, -1, -3}));
736
737         //@end
738         m.emplace_back("visible", std::vector<int>({SAVE_LOAD, __GO_VISIBLE__, jni_bool}));
739         return m;
740     }
741 };
742
743 struct UimenuHandle
744 {
745     static HandleProp getPropertyList()
746     {
747         HandleProp m;
748
749         //SAVE_ONLY, so don't care of reload ordering
750         m.emplace_back("type", std::vector<int>({SAVE_ONLY, __GO_TYPE__, jni_int}));
751
752         //@start
753
754         //@ don't care
755         m.emplace_back("enable", std::vector<int>({SAVE_LOAD, __GO_UI_ENABLE__, jni_bool}));
756         m.emplace_back("foregroundcolor", std::vector<int>({SAVE_LOAD, __GO_UI_FOREGROUNDCOLOR__, jni_double_vector, -1, -3}));
757         m.emplace_back("label", std::vector<int>({SAVE_LOAD, __GO_UI_LABEL__, jni_string}));
758         m.emplace_back("callback", std::vector<int>({SAVE_LOAD, __GO_CALLBACK__, jni_string}));
759         m.emplace_back("callback_type", std::vector<int>({SAVE_LOAD, __GO_CALLBACKTYPE__, jni_int}));
760         m.emplace_back("checked", std::vector<int>({SAVE_LOAD, __GO_UI_CHECKED__, jni_bool}));
761         m.emplace_back("icon", std::vector<int>({SAVE_LOAD, __GO_UI_ICON__, jni_string}));
762
763         //@end
764         m.emplace_back("visible", std::vector<int>({SAVE_LOAD, __GO_VISIBLE__, jni_bool}));
765         return m;
766     }
767 };
768
769 struct UicontextmenuHandle
770 {
771     static HandleProp getPropertyList()
772     {
773         HandleProp m;
774
775         m.emplace_back("type", std::vector<int>({SAVE_ONLY, __GO_TYPE__, jni_int}));
776         return m;
777     }
778 };
779
780 struct UicontrolHandle
781 {
782     static HandleProp getPropertyList()
783     {
784         HandleProp m;
785
786         //SAVE_ONLY, so don't care of reload ordering
787         m.emplace_back("type", std::vector<int>({SAVE_ONLY, __GO_TYPE__, jni_int}));
788         m.emplace_back("style", std::vector<int>({SAVE_ONLY, __GO_STYLE__, jni_int}));
789         m.emplace_back("scrollable", std::vector<int>({SAVE_LOAD, __GO_UI_SCROLLABLE__, jni_bool}));
790         m.emplace_back("margins", std::vector<int>({SAVE_LOAD, __GO_MARGINS__, jni_double_vector, -1, -4}));
791         //constraint
792         m.emplace_back("border_position", std::vector<int>({SAVE_ONLY, __GO_UI_BORDER_POSITION__, jni_int}));
793         m.emplace_back("border_size", std::vector<int>({SAVE_ONLY, __GO_UI_BORDER_PREFERREDSIZE__, jni_int_vector, -1, -2}));
794         m.emplace_back("gridbad_grid", std::vector<int>({SAVE_ONLY, __GO_UI_GRIDBAG_GRID__, jni_int_vector, -1, -4}));
795         m.emplace_back("gridbad_weight", std::vector<int>({SAVE_ONLY, __GO_UI_GRIDBAG_WEIGHT__, jni_double_vector, -1, -2}));
796         m.emplace_back("gridbad_fill", std::vector<int>({SAVE_ONLY, __GO_UI_GRIDBAG_FILL__, jni_int}));
797         m.emplace_back("gridbad_anchor", std::vector<int>({SAVE_ONLY, __GO_UI_GRIDBAG_ANCHOR__, jni_int}));
798         m.emplace_back("gridbad_padding", std::vector<int>({SAVE_ONLY, __GO_UI_GRIDBAG_PADDING__, jni_int_vector, -1, -2}));
799         m.emplace_back("gridbad_size", std::vector<int>({SAVE_ONLY, __GO_UI_GRIDBAG_PREFERREDSIZE__, jni_int_vector, -1, -2}));
800         m.emplace_back("value", std::vector<int>({SAVE_ONLY, __GO_UI_VALUE__, jni_double_vector, -1, __GO_UI_VALUE_SIZE__}));
801
802         //@start
803
804         //@ don't care
805         m.emplace_back("backgroundcolor", std::vector<int>({SAVE_LOAD, __GO_UI_BACKGROUNDCOLOR__, jni_double_vector, -1, -3}));
806         m.emplace_back("enable", std::vector<int>({SAVE_LOAD, __GO_UI_ENABLE__, jni_bool}));
807         m.emplace_back("fontangle", std::vector<int>({SAVE_LOAD, __GO_UI_FONTANGLE__, jni_string}));
808         m.emplace_back("fontname", std::vector<int>({SAVE_LOAD, __GO_UI_FONTNAME__, jni_string}));
809         m.emplace_back("fontsize", std::vector<int>({SAVE_LOAD, __GO_UI_FONTSIZE__, jni_double}));
810         m.emplace_back("fontunits", std::vector<int>({SAVE_LOAD, __GO_UI_FONTUNITS__, jni_string}));
811         m.emplace_back("fontweight", std::vector<int>({SAVE_LOAD, __GO_UI_FONTWEIGHT__, jni_string}));
812         m.emplace_back("foregroundcolor", std::vector<int>({SAVE_LOAD, __GO_UI_FOREGROUNDCOLOR__, jni_double_vector, -1, -3}));
813         m.emplace_back("horizontalalignment", std::vector<int>({SAVE_LOAD, __GO_UI_HORIZONTALALIGNMENT__, jni_string}));
814         m.emplace_back("listboxtop", std::vector<int>({SAVE_LOAD, __GO_UI_LISTBOXTOP__, jni_int_vector, -1, __GO_UI_LISTBOXTOP_SIZE__}));
815         m.emplace_back("max", std::vector<int>({SAVE_LOAD, __GO_UI_MAX__, jni_double}));
816         m.emplace_back("min", std::vector<int>({SAVE_LOAD, __GO_UI_MIN__, jni_double}));
817         m.emplace_back("position", std::vector<int>({SAVE_LOAD, __GO_POSITION__, jni_double_vector, -1, -4}));
818         m.emplace_back("relief", std::vector<int>({SAVE_LOAD, __GO_UI_RELIEF__, jni_string}));
819         m.emplace_back("sliderstep", std::vector<int>({SAVE_LOAD, __GO_UI_SLIDERSTEP__, jni_double_vector, -1, -2}));
820         m.emplace_back("tooltipstring", std::vector<int>({SAVE_LOAD, __GO_UI_TOOLTIPSTRING__, jni_string_vector, -1, __GO_UI_TOOLTIPSTRING_SIZE__}));
821         m.emplace_back("units", std::vector<int>({SAVE_LOAD, __GO_UI_UNITS__, jni_string}));
822         m.emplace_back("verticalalignment", std::vector<int>({SAVE_LOAD, __GO_UI_VERTICALALIGNMENT__, jni_string}));
823         m.emplace_back("callback", std::vector<int>({SAVE_LOAD, __GO_CALLBACK__, jni_string}));
824         m.emplace_back("callback_type", std::vector<int>({SAVE_LOAD, __GO_CALLBACKTYPE__, jni_int}));
825         m.emplace_back("layout", std::vector<int>({SAVE_LOAD, __GO_LAYOUT__, jni_int}));
826         //layout_options
827         m.emplace_back("layout_grid", std::vector<int>({SAVE_LOAD, __GO_GRID_OPT_GRID__, jni_int_vector, -1, -2}));
828         m.emplace_back("layout_padding", std::vector<int>({SAVE_LOAD, __GO_GRID_OPT_PADDING__, jni_int_vector, -1, -2}));
829         m.emplace_back("border_padding", std::vector<int>({SAVE_LOAD, __GO_BORDER_OPT_PADDING__, jni_int_vector, -1, -2}));
830
831         m.emplace_back("groupname", std::vector<int>({SAVE_LOAD, __GO_UI_GROUP_NAME__, jni_string}));
832         m.emplace_back("icon", std::vector<int>({SAVE_LOAD, __GO_UI_ICON__, jni_string}));
833
834         //@end
835         m.emplace_back("visible", std::vector<int>({SAVE_LOAD, __GO_VISIBLE__, jni_bool}));
836         return m;
837     }
838 };
839
840 void update_link_path(int legend, Links::PathList& paths);
841 int import_handle(int dataset, int parent);
842 bool export_handle(int parent, const std::string& name, int uid);
843 int add_current_entity(int handle);