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