2 Concerning the EDC reference:
4 The formatting for blocks and properties has been implemented as a table
5 which is filled using ALIASES.
6 For maximum flexibility I implemented them in the \@code/\@encode style,
7 this means that missing one or changing the order most certainly cause
13 code sample of the block
15 the block's description
21 property's parameter list
23 the property description (lol)
41 * @page edcref Edje Data Collection reference
42 * An Edje Data Collection, it's a plain text file (normally identified with the
43 * .edc extension), consisting of instructions for the Edje Compiler.
45 * The syntax for the edje data collection files follows a simple structure of
46 * "blocks { .. }" that can contain "properties: ..", more blocks, or both.
48 * @anchor sec_quickaccess Quick access to block descriptions:
50 * <li>@ref sec_toplevel "Top-Level"</li>
51 * <li>@ref sec_group "Group"</li>
52 * <li>@ref sec_description "State description"</li>
54 * <li>@ref sec_description_image "Image"</li>
55 * <li>@ref sec_description_text "Text"</li>
56 * <li>@ref sec_description_box "Box"</li>
57 * <li>@ref sec_description_table "Table"</li>
58 * <li>@ref sec_description_map "Map (3d/transformations)"</li>
60 * <li>@ref sec_program "Program block"</li>
63 * @author Andres Blanc (dresb) andresblanc@gmail.com
65 * <table class="edcref" border="0">
68 static Edje_Part_Collection_Directory_Entry *current_de = NULL;
69 static Edje_Part *current_part = NULL;
70 static Edje_Pack_Element *current_item = NULL;
71 static Edje_Part_Description_Common *current_desc = NULL;
72 static Edje_Part_Description_Common *parent_desc = NULL;
73 static Edje_Program *current_program = NULL;
75 static void st_externals_external(void);
77 static void st_images_image(void);
78 static void ob_images_set(void);
79 static void st_images_set_name(void);
80 static void ob_images_set_image(void);
81 static void st_images_set_image_image(void);
82 static void st_images_set_image_size(void);
84 static void st_fonts_font(void);
86 static void st_data_item(void);
87 static void st_data_file(void);
89 static void ob_styles_style(void);
90 static void st_styles_style_name(void);
91 static void st_styles_style_base(void);
92 static void st_styles_style_tag(void);
94 static void ob_color_class(void);
95 static void st_color_class_name(void);
96 static void st_color_class_color(void);
97 static void st_color_class_color2(void);
98 static void st_color_class_color3(void);
100 static void ob_collections(void);
102 static void ob_collections_group(void);
103 static void st_collections_group_name(void);
104 static void st_collections_group_inherit(void);
105 static void st_collections_group_script_only(void);
106 static void st_collections_group_alias(void);
107 static void st_collections_group_min(void);
108 static void st_collections_group_max(void);
109 static void st_collections_group_broadcast_signal(void);
110 static void st_collections_group_data_item(void);
111 static void st_collections_group_orientation(void);
113 static void st_collections_group_limits_vertical(void);
114 static void st_collections_group_limits_horizontal(void);
116 static void ob_collections_group_script(void);
117 static void ob_collections_group_lua_script(void);
119 static void st_collections_group_parts_alias(void);
121 static void ob_collections_group_parts_part(void);
122 static void st_collections_group_parts_part_name(void);
123 static void st_collections_group_parts_part_type(void);
124 static void st_collections_group_parts_part_insert_before(void);
125 static void st_collections_group_parts_part_insert_after(void);
126 static void st_collections_group_parts_part_effect(void);
127 static void st_collections_group_parts_part_mouse_events(void);
128 static void st_collections_group_parts_part_repeat_events(void);
129 static void st_collections_group_parts_part_ignore_flags(void);
130 static void st_collections_group_parts_part_scale(void);
131 static void st_collections_group_parts_part_pointer_mode(void);
132 static void st_collections_group_parts_part_precise_is_inside(void);
133 static void st_collections_group_parts_part_use_alternate_font_metrics(void);
134 static void st_collections_group_parts_part_clip_to_id(void);
135 static void st_collections_group_parts_part_source(void);
136 static void st_collections_group_parts_part_source2(void);
137 static void st_collections_group_parts_part_source3(void);
138 static void st_collections_group_parts_part_source4(void);
139 static void st_collections_group_parts_part_source5(void);
140 static void st_collections_group_parts_part_source6(void);
141 static void st_collections_group_parts_part_entry_mode(void);
142 static void st_collections_group_parts_part_select_mode(void);
143 static void st_collections_group_parts_part_cursor_mode(void);
144 static void st_collections_group_parts_part_multiline(void);
145 static void st_collections_group_parts_part_access(void);
146 static void st_collections_group_parts_part_dragable_x(void);
147 static void st_collections_group_parts_part_dragable_y(void);
148 static void st_collections_group_parts_part_dragable_confine(void);
149 static void st_collections_group_parts_part_dragable_events(void);
151 /* box and table items share these */
152 static void ob_collections_group_parts_part_box_items_item(void);
153 static void st_collections_group_parts_part_box_items_item_type(void);
154 static void st_collections_group_parts_part_box_items_item_name(void);
155 static void st_collections_group_parts_part_box_items_item_source(void);
156 static void st_collections_group_parts_part_box_items_item_min(void);
157 static void st_collections_group_parts_part_box_items_item_prefer(void);
158 static void st_collections_group_parts_part_box_items_item_max(void);
159 static void st_collections_group_parts_part_box_items_item_padding(void);
160 static void st_collections_group_parts_part_box_items_item_align(void);
161 static void st_collections_group_parts_part_box_items_item_weight(void);
162 static void st_collections_group_parts_part_box_items_item_aspect(void);
163 static void st_collections_group_parts_part_box_items_item_aspect_mode(void);
164 static void st_collections_group_parts_part_box_items_item_options(void);
165 /* but these are only for table */
166 static void st_collections_group_parts_part_table_items_item_position(void);
167 static void st_collections_group_parts_part_table_items_item_span(void);
169 static void ob_collections_group_parts_part_description(void);
170 static void st_collections_group_parts_part_description_inherit(void);
171 static void st_collections_group_parts_part_description_source(void);
172 static void st_collections_group_parts_part_description_state(void);
173 static void st_collections_group_parts_part_description_visible(void);
174 static void st_collections_group_parts_part_description_limit(void);
175 static void st_collections_group_parts_part_description_align(void);
176 static void st_collections_group_parts_part_description_fixed(void);
177 static void st_collections_group_parts_part_description_min(void);
178 static void st_collections_group_parts_part_description_minmul(void);
179 static void st_collections_group_parts_part_description_max(void);
180 static void st_collections_group_parts_part_description_step(void);
181 static void st_collections_group_parts_part_description_aspect(void);
182 static void st_collections_group_parts_part_description_aspect_preference(void);
183 static void st_collections_group_parts_part_description_rel1_relative(void);
184 static void st_collections_group_parts_part_description_rel1_offset(void);
185 static void st_collections_group_parts_part_description_rel1_to(void);
186 static void st_collections_group_parts_part_description_rel1_to_x(void);
187 static void st_collections_group_parts_part_description_rel1_to_y(void);
188 static void st_collections_group_parts_part_description_rel2_relative(void);
189 static void st_collections_group_parts_part_description_rel2_offset(void);
190 static void st_collections_group_parts_part_description_rel2_to(void);
191 static void st_collections_group_parts_part_description_rel2_to_x(void);
192 static void st_collections_group_parts_part_description_rel2_to_y(void);
193 static void st_collections_group_parts_part_description_image_normal(void);
194 static void st_collections_group_parts_part_description_image_tween(void);
195 static void st_collections_group_parts_part_description_image_border(void);
196 static void st_collections_group_parts_part_description_image_middle(void);
197 static void st_collections_group_parts_part_description_image_border_scale(void);
198 static void st_collections_group_parts_part_description_image_border_scale_by(void);
199 static void st_collections_group_parts_part_description_image_scale_hint(void);
200 static void st_collections_group_parts_part_description_fill_smooth(void);
201 static void st_collections_group_parts_part_description_fill_origin_relative(void);
202 static void st_collections_group_parts_part_description_fill_origin_offset(void);
203 static void st_collections_group_parts_part_description_fill_size_relative(void);
204 static void st_collections_group_parts_part_description_fill_size_offset(void);
205 static void st_collections_group_parts_part_description_fill_spread(void);
206 static void st_collections_group_parts_part_description_fill_type(void);
207 static void st_collections_group_parts_part_description_color_class(void);
208 static void st_collections_group_parts_part_description_color(void);
209 static void st_collections_group_parts_part_description_color2(void);
210 static void st_collections_group_parts_part_description_color3(void);
211 static void st_collections_group_parts_part_description_text_text(void);
212 static void st_collections_group_parts_part_description_text_text_class(void);
213 static void st_collections_group_parts_part_description_text_font(void);
214 static void st_collections_group_parts_part_description_text_style(void);
215 static void st_collections_group_parts_part_description_text_repch(void);
216 static void st_collections_group_parts_part_description_text_size(void);
217 static void st_collections_group_parts_part_description_text_size_range(void);
218 static void st_collections_group_parts_part_description_text_fit(void);
219 static void st_collections_group_parts_part_description_text_min(void);
220 static void st_collections_group_parts_part_description_text_max(void);
221 static void st_collections_group_parts_part_description_text_align(void);
222 static void st_collections_group_parts_part_description_text_source(void);
223 static void st_collections_group_parts_part_description_text_text_source(void);
224 static void st_collections_group_parts_part_description_text_elipsis(void);
225 static void st_collections_group_parts_part_description_box_layout(void);
226 static void st_collections_group_parts_part_description_box_align(void);
227 static void st_collections_group_parts_part_description_box_padding(void);
228 static void st_collections_group_parts_part_description_box_min(void);
229 static void st_collections_group_parts_part_description_table_homogeneous(void);
230 static void st_collections_group_parts_part_description_table_align(void);
231 static void st_collections_group_parts_part_description_table_padding(void);
232 static void st_collections_group_parts_part_description_table_min(void);
233 static void st_collections_group_parts_part_description_map_perspective(void);
234 static void st_collections_group_parts_part_description_map_light(void);
235 static void st_collections_group_parts_part_description_map_rotation_center(void);
236 static void st_collections_group_parts_part_description_map_rotation_x(void);
237 static void st_collections_group_parts_part_description_map_rotation_y(void);
238 static void st_collections_group_parts_part_description_map_rotation_z(void);
239 static void st_collections_group_parts_part_description_map_on(void);
240 static void st_collections_group_parts_part_description_map_smooth(void);
241 static void st_collections_group_parts_part_description_map_alpha(void);
242 static void st_collections_group_parts_part_description_map_backface_cull(void);
243 static void st_collections_group_parts_part_description_map_perspective_on(void);
244 static void st_collections_group_parts_part_description_perspective_zplane(void);
245 static void st_collections_group_parts_part_description_perspective_focal(void);
246 static void st_collections_group_parts_part_api(void);
248 /* external part parameters */
249 static void st_collections_group_parts_part_description_params_int(void);
250 static void ob_collections_group_programs_program(void);
251 static void st_collections_group_parts_part_description_params_double(void);
253 static void st_collections_group_programs_program_name(void);
254 static void st_collections_group_parts_part_description_params_string(void);
255 static void st_collections_group_parts_part_description_params_bool(void);
256 static void st_collections_group_parts_part_description_params_choice(void);
257 static void st_collections_group_programs_program_signal(void);
258 static void st_collections_group_programs_program_source(void);
259 static void st_collections_group_programs_program_filter(void);
260 static void st_collections_group_programs_program_in(void);
261 static void st_collections_group_programs_program_action(void);
262 static void st_collections_group_programs_program_transition(void);
263 static void st_collections_group_programs_program_target(void);
264 static void st_collections_group_programs_program_after(void);
265 static void st_collections_group_programs_program_api(void);
267 static void ob_collections_group_programs_program_script(void);
268 static void st_collections_group_sound_sample_name(void);
269 static void st_collections_group_sound_sample_source(void);
270 static void st_collections_group_sound_tone(void);
274 New_Statement_Handler statement_handlers[] =
276 {"externals.external", st_externals_external},
277 {"images.image", st_images_image},
278 {"images.set.name", st_images_set_name},
279 {"images.set.image.image", st_images_set_image_image},
280 {"images.set.image.size", st_images_set_image_size},
281 {"fonts.font", st_fonts_font},
282 {"data.item", st_data_item},
283 {"data.file", st_data_file},
284 {"styles.style.name", st_styles_style_name},
285 {"styles.style.base", st_styles_style_base},
286 {"styles.style.tag", st_styles_style_tag},
287 {"color_classes.color_class.name", st_color_class_name},
288 {"color_classes.color_class.color", st_color_class_color},
289 {"color_classes.color_class.color2", st_color_class_color2},
290 {"color_classes.color_class.color3", st_color_class_color3},
291 {"collections.externals.external", st_externals_external}, /* dup */
292 {"collections.image", st_images_image}, /* dup */
293 {"collections.set.name", st_images_set_name}, /* dup */
294 {"collections.set.image.image", st_images_set_image_image}, /* dup */
295 {"collections.set.image.size", st_images_set_image_size}, /* dup */
296 {"collections.images.image", st_images_image}, /* dup */
297 {"collections.images.set.name", st_images_set_name}, /* dup */
298 {"collections.images.set.image.image", st_images_set_image_image}, /* dup */
299 {"collections.images.set.image.size", st_images_set_image_size}, /* dup */
300 {"collections.font", st_fonts_font}, /* dup */
301 {"collections.fonts.font", st_fonts_font}, /* dup */
302 {"collections.styles.style.name", st_styles_style_name}, /* dup */
303 {"collections.styles.style.base", st_styles_style_base}, /* dup */
304 {"collections.styles.style.tag", st_styles_style_tag}, /* dup */
305 {"collections.color_classes.color_class.name", st_color_class_name}, /* dup */
306 {"collections.color_classes.color_class.color", st_color_class_color}, /* dup */
307 {"collections.color_classes.color_class.color2", st_color_class_color2}, /* dup */
308 {"collections.color_classes.color_class.color3", st_color_class_color3}, /* dup */
310 {"collections.sounds.sample.name", st_collections_group_sound_sample_name},
311 {"collections.sounds.sample.source", st_collections_group_sound_sample_source},
312 {"collections.group.sounds.sample.name", st_collections_group_sound_sample_name}, /* dup */
313 {"collections.group.sounds.sample.source", st_collections_group_sound_sample_source}, /* dup */
314 {"collections.sounds.tone", st_collections_group_sound_tone},
315 {"collections.group.sounds.tone", st_collections_group_sound_tone}, /* dup */
316 {"collections.group.name", st_collections_group_name},
317 {"collections.group.inherit", st_collections_group_inherit},
318 {"collections.group.script_only", st_collections_group_script_only},
319 {"collections.group.lua_script_only", st_collections_group_script_only},
320 {"collections.group.alias", st_collections_group_alias},
321 {"collections.group.min", st_collections_group_min},
322 {"collections.group.max", st_collections_group_max},
323 {"collections.group.broadcast_signal", st_collections_group_broadcast_signal},
324 {"collections.group.orientation", st_collections_group_orientation},
325 {"collections.group.data.item", st_collections_group_data_item},
326 {"collections.group.limits.horizontal", st_collections_group_limits_horizontal},
327 {"collections.group.limits.vertical", st_collections_group_limits_vertical},
328 {"collections.group.externals.external", st_externals_external}, /* dup */
329 {"collections.group.image", st_images_image}, /* dup */
330 {"collections.group.set.name", st_images_set_name},
331 {"collections.group.set.image.image", st_images_set_image_image},
332 {"collections.group.set.image.size", st_images_set_image_size},
333 {"collections.group.images.image", st_images_image}, /* dup */
334 {"collections.group.images.set.name", st_images_set_name},
335 {"collections.group.images.set.image.image", st_images_set_image_image},
336 {"collections.group.images.set.image.size", st_images_set_image_size},
337 {"collections.group.font", st_fonts_font}, /* dup */
338 {"collections.group.fonts.font", st_fonts_font}, /* dup */
339 {"collections.group.styles.style.name", st_styles_style_name}, /* dup */
340 {"collections.group.styles.style.base", st_styles_style_base}, /* dup */
341 {"collections.group.styles.style.tag", st_styles_style_tag}, /* dup */
342 {"collections.group.color_classes.color_class.name", st_color_class_name}, /* dup */
343 {"collections.group.color_classes.color_class.color", st_color_class_color}, /* dup */
344 {"collections.group.color_classes.color_class.color2", st_color_class_color2}, /* dup */
345 {"collections.group.color_classes.color_class.color3", st_color_class_color3}, /* dup */
346 {"collections.group.parts.alias", st_collections_group_parts_alias },
347 {"collections.group.parts.image", st_images_image}, /* dup */
348 {"collections.group.parts.set.name", st_images_set_name},
349 {"collections.group.parts.set.image.image", st_images_set_image_image},
350 {"collections.group.parts.set.image.size", st_images_set_image_size},
351 {"collections.group.parts.images.image", st_images_image}, /* dup */
352 {"collections.group.parts.images.set.name", st_images_set_name},
353 {"collections.group.parts.images.set.image.image", st_images_set_image_image},
354 {"collections.group.parts.images.set.image.size", st_images_set_image_size},
355 {"collections.group.parts.font", st_fonts_font}, /* dup */
356 {"collections.group.parts.fonts.font", st_fonts_font}, /* dup */
357 {"collections.group.parts.styles.style.name", st_styles_style_name}, /* dup */
358 {"collections.group.parts.styles.style.base", st_styles_style_base}, /* dup */
359 {"collections.group.parts.styles.style.tag", st_styles_style_tag}, /* dup */
360 {"collections.group.parts.color_classes.color_class.name", st_color_class_name}, /* dup */
361 {"collections.group.parts.color_classes.color_class.color", st_color_class_color}, /* dup */
362 {"collections.group.parts.color_classes.color_class.color2", st_color_class_color2}, /* dup */
363 {"collections.group.parts.color_classes.color_class.color3", st_color_class_color3}, /* dup */
364 {"collections.group.parts.part.name", st_collections_group_parts_part_name},
365 {"collections.group.parts.part.api", st_collections_group_parts_part_api},
366 {"collections.group.parts.part.type", st_collections_group_parts_part_type},
367 {"collections.group.parts.part.insert_before", st_collections_group_parts_part_insert_before},
368 {"collections.group.parts.part.insert_after", st_collections_group_parts_part_insert_after},
369 {"collections.group.parts.part.effect", st_collections_group_parts_part_effect},
370 {"collections.group.parts.part.mouse_events", st_collections_group_parts_part_mouse_events},
371 {"collections.group.parts.part.repeat_events", st_collections_group_parts_part_repeat_events},
372 {"collections.group.parts.part.ignore_flags", st_collections_group_parts_part_ignore_flags},
373 {"collections.group.parts.part.scale", st_collections_group_parts_part_scale},
374 {"collections.group.parts.part.pointer_mode", st_collections_group_parts_part_pointer_mode},
375 {"collections.group.parts.part.precise_is_inside", st_collections_group_parts_part_precise_is_inside},
376 {"collections.group.parts.part.use_alternate_font_metrics", st_collections_group_parts_part_use_alternate_font_metrics},
377 {"collections.group.parts.part.clip_to", st_collections_group_parts_part_clip_to_id},
378 {"collections.group.parts.part.source", st_collections_group_parts_part_source},
379 {"collections.group.parts.part.source2", st_collections_group_parts_part_source2},
380 {"collections.group.parts.part.source3", st_collections_group_parts_part_source3},
381 {"collections.group.parts.part.source4", st_collections_group_parts_part_source4},
382 {"collections.group.parts.part.source5", st_collections_group_parts_part_source5},
383 {"collections.group.parts.part.source6", st_collections_group_parts_part_source6},
384 {"collections.group.parts.part.dragable.x", st_collections_group_parts_part_dragable_x},
385 {"collections.group.parts.part.dragable.y", st_collections_group_parts_part_dragable_y},
386 {"collections.group.parts.part.dragable.confine", st_collections_group_parts_part_dragable_confine},
387 {"collections.group.parts.part.dragable.events", st_collections_group_parts_part_dragable_events},
388 {"collections.group.parts.part.entry_mode", st_collections_group_parts_part_entry_mode},
389 {"collections.group.parts.part.select_mode", st_collections_group_parts_part_select_mode},
390 {"collections.group.parts.part.cursor_mode", st_collections_group_parts_part_cursor_mode},
391 {"collections.group.parts.part.multiline", st_collections_group_parts_part_multiline},
392 {"collections.group.parts.part.access", st_collections_group_parts_part_access},
393 {"collections.group.parts.part.image", st_images_image}, /* dup */
394 {"collections.group.parts.part.set.name", st_images_set_name},
395 {"collections.group.parts.part.set.image.image", st_images_set_image_image},
396 {"collections.group.parts.part.set.image.size", st_images_set_image_size},
397 {"collections.group.parts.part.images.image", st_images_image}, /* dup */
398 {"collections.group.parts.part.images.set.name", st_images_set_name},
399 {"collections.group.parts.part.images.set.image.image", st_images_set_image_image},
400 {"collections.group.parts.part.images.set.image.size", st_images_set_image_size},
401 {"collections.group.parts.part.font", st_fonts_font}, /* dup */
402 {"collections.group.parts.part.fonts.font", st_fonts_font}, /* dup */
403 {"collections.group.parts.part.styles.style.name", st_styles_style_name}, /* dup */
404 {"collections.group.parts.part.styles.style.base", st_styles_style_base}, /* dup */
405 {"collections.group.parts.part.styles.style.tag", st_styles_style_tag}, /* dup */
406 {"collections.group.parts.part.color_classes.color_class.name", st_color_class_name}, /* dup */
407 {"collections.group.parts.part.color_classes.color_class.color", st_color_class_color}, /* dup */
408 {"collections.group.parts.part.color_classes.color_class.color2", st_color_class_color2}, /* dup */
409 {"collections.group.parts.part.color_classes.color_class.color3", st_color_class_color3}, /* dup */
410 {"collections.group.parts.part.box.items.item.type", st_collections_group_parts_part_box_items_item_type},
411 {"collections.group.parts.part.box.items.item.name", st_collections_group_parts_part_box_items_item_name},
412 {"collections.group.parts.part.box.items.item.source", st_collections_group_parts_part_box_items_item_source},
413 {"collections.group.parts.part.box.items.item.min", st_collections_group_parts_part_box_items_item_min},
414 {"collections.group.parts.part.box.items.item.prefer", st_collections_group_parts_part_box_items_item_prefer},
415 {"collections.group.parts.part.box.items.item.max", st_collections_group_parts_part_box_items_item_max},
416 {"collections.group.parts.part.box.items.item.padding", st_collections_group_parts_part_box_items_item_padding},
417 {"collections.group.parts.part.box.items.item.align", st_collections_group_parts_part_box_items_item_align},
418 {"collections.group.parts.part.box.items.item.weight", st_collections_group_parts_part_box_items_item_weight},
419 {"collections.group.parts.part.box.items.item.aspect", st_collections_group_parts_part_box_items_item_aspect},
420 {"collections.group.parts.part.box.items.item.aspect_mode", st_collections_group_parts_part_box_items_item_aspect_mode},
421 {"collections.group.parts.part.box.items.item.options", st_collections_group_parts_part_box_items_item_options},
422 {"collections.group.parts.part.table.items.item.type", st_collections_group_parts_part_box_items_item_type}, /* dup */
423 {"collections.group.parts.part.table.items.item.name", st_collections_group_parts_part_box_items_item_name}, /* dup */
424 {"collections.group.parts.part.table.items.item.source", st_collections_group_parts_part_box_items_item_source}, /* dup */
425 {"collections.group.parts.part.table.items.item.min", st_collections_group_parts_part_box_items_item_min}, /* dup */
426 {"collections.group.parts.part.table.items.item.prefer", st_collections_group_parts_part_box_items_item_prefer}, /* dup */
427 {"collections.group.parts.part.table.items.item.max", st_collections_group_parts_part_box_items_item_max}, /* dup */
428 {"collections.group.parts.part.table.items.item.padding", st_collections_group_parts_part_box_items_item_padding}, /* dup */
429 {"collections.group.parts.part.table.items.item.align", st_collections_group_parts_part_box_items_item_align}, /* dup */
430 {"collections.group.parts.part.table.items.item.weight", st_collections_group_parts_part_box_items_item_weight}, /* dup */
431 {"collections.group.parts.part.table.items.item.aspect", st_collections_group_parts_part_box_items_item_aspect}, /* dup */
432 {"collections.group.parts.part.table.items.item.aspect_mode", st_collections_group_parts_part_box_items_item_aspect_mode}, /* dup */
433 {"collections.group.parts.part.table.items.item.options", st_collections_group_parts_part_box_items_item_options}, /* dup */
434 {"collections.group.parts.part.table.items.item.position", st_collections_group_parts_part_table_items_item_position},
435 {"collections.group.parts.part.table.items.item.span", st_collections_group_parts_part_table_items_item_span},
436 {"collections.group.parts.part.description.inherit", st_collections_group_parts_part_description_inherit},
437 {"collections.group.parts.part.description.source", st_collections_group_parts_part_description_source},
438 {"collections.group.parts.part.description.state", st_collections_group_parts_part_description_state},
439 {"collections.group.parts.part.description.visible", st_collections_group_parts_part_description_visible},
440 {"collections.group.parts.part.description.limit", st_collections_group_parts_part_description_limit},
441 {"collections.group.parts.part.description.align", st_collections_group_parts_part_description_align},
442 {"collections.group.parts.part.description.fixed", st_collections_group_parts_part_description_fixed},
443 {"collections.group.parts.part.description.min", st_collections_group_parts_part_description_min},
444 {"collections.group.parts.part.description.minmul", st_collections_group_parts_part_description_minmul},
445 {"collections.group.parts.part.description.max", st_collections_group_parts_part_description_max},
446 {"collections.group.parts.part.description.step", st_collections_group_parts_part_description_step},
447 {"collections.group.parts.part.description.aspect", st_collections_group_parts_part_description_aspect},
448 {"collections.group.parts.part.description.aspect_preference", st_collections_group_parts_part_description_aspect_preference},
449 {"collections.group.parts.part.description.rel1.relative", st_collections_group_parts_part_description_rel1_relative},
450 {"collections.group.parts.part.description.rel1.offset", st_collections_group_parts_part_description_rel1_offset},
451 {"collections.group.parts.part.description.rel1.to", st_collections_group_parts_part_description_rel1_to},
452 {"collections.group.parts.part.description.rel1.to_x", st_collections_group_parts_part_description_rel1_to_x},
453 {"collections.group.parts.part.description.rel1.to_y", st_collections_group_parts_part_description_rel1_to_y},
454 {"collections.group.parts.part.description.rel2.relative", st_collections_group_parts_part_description_rel2_relative},
455 {"collections.group.parts.part.description.rel2.offset", st_collections_group_parts_part_description_rel2_offset},
456 {"collections.group.parts.part.description.rel2.to", st_collections_group_parts_part_description_rel2_to},
457 {"collections.group.parts.part.description.rel2.to_x", st_collections_group_parts_part_description_rel2_to_x},
458 {"collections.group.parts.part.description.rel2.to_y", st_collections_group_parts_part_description_rel2_to_y},
459 {"collections.group.parts.part.description.image.normal", st_collections_group_parts_part_description_image_normal},
460 {"collections.group.parts.part.description.image.tween", st_collections_group_parts_part_description_image_tween},
461 {"collections.group.parts.part.description.image.image", st_images_image}, /* dup */
462 {"collections.group.parts.part.description.image.set.name", st_images_set_name},
463 {"collections.group.parts.part.description.image.set.image.image", st_images_set_image_image},
464 {"collections.group.parts.part.description.image.set.image.size", st_images_set_image_size},
465 {"collections.group.parts.part.description.image.images.image", st_images_image}, /* dup */
466 {"collections.group.parts.part.description.image.images.set.name", st_images_set_name},
467 {"collections.group.parts.part.description.image.images.set.image.image", st_images_set_image_image},
468 {"collections.group.parts.part.description.image.images.set.image.size", st_images_set_image_size},
469 {"collections.group.parts.part.description.image.border", st_collections_group_parts_part_description_image_border},
470 {"collections.group.parts.part.description.image.middle", st_collections_group_parts_part_description_image_middle},
471 {"collections.group.parts.part.description.image.border_scale", st_collections_group_parts_part_description_image_border_scale},
472 {"collections.group.parts.part.description.image.border_scale_by", st_collections_group_parts_part_description_image_border_scale_by},
473 {"collections.group.parts.part.description.image.scale_hint", st_collections_group_parts_part_description_image_scale_hint},
474 {"collections.group.parts.part.description.fill.smooth", st_collections_group_parts_part_description_fill_smooth},
475 {"collections.group.parts.part.description.fill.origin.relative", st_collections_group_parts_part_description_fill_origin_relative},
476 {"collections.group.parts.part.description.fill.origin.offset", st_collections_group_parts_part_description_fill_origin_offset},
477 {"collections.group.parts.part.description.fill.size.relative", st_collections_group_parts_part_description_fill_size_relative},
478 {"collections.group.parts.part.description.fill.size.offset", st_collections_group_parts_part_description_fill_size_offset},
479 {"collections.group.parts.part.description.fill.spread", st_collections_group_parts_part_description_fill_spread},
480 {"collections.group.parts.part.description.fill.type", st_collections_group_parts_part_description_fill_type},
481 {"collections.group.parts.part.description.color_class", st_collections_group_parts_part_description_color_class},
482 {"collections.group.parts.part.description.color", st_collections_group_parts_part_description_color},
483 {"collections.group.parts.part.description.color2", st_collections_group_parts_part_description_color2},
484 {"collections.group.parts.part.description.color3", st_collections_group_parts_part_description_color3},
485 {"collections.group.parts.part.description.text.text", st_collections_group_parts_part_description_text_text},
486 {"collections.group.parts.part.description.text.text_class", st_collections_group_parts_part_description_text_text_class},
487 {"collections.group.parts.part.description.text.font", st_collections_group_parts_part_description_text_font},
488 {"collections.group.parts.part.description.text.style", st_collections_group_parts_part_description_text_style},
489 {"collections.group.parts.part.description.text.repch", st_collections_group_parts_part_description_text_repch},
490 {"collections.group.parts.part.description.text.size", st_collections_group_parts_part_description_text_size},
491 {"collections.group.parts.part.description.text.size_range", st_collections_group_parts_part_description_text_size_range},
492 {"collections.group.parts.part.description.text.fit", st_collections_group_parts_part_description_text_fit},
493 {"collections.group.parts.part.description.text.min", st_collections_group_parts_part_description_text_min},
494 {"collections.group.parts.part.description.text.max", st_collections_group_parts_part_description_text_max},
495 {"collections.group.parts.part.description.text.align", st_collections_group_parts_part_description_text_align},
496 {"collections.group.parts.part.description.text.source", st_collections_group_parts_part_description_text_source},
497 {"collections.group.parts.part.description.text.text_source", st_collections_group_parts_part_description_text_text_source},
498 {"collections.group.parts.part.description.text.font", st_fonts_font}, /* dup */
499 {"collections.group.parts.part.description.text.fonts.font", st_fonts_font}, /* dup */
500 {"collections.group.parts.part.description.text.elipsis", st_collections_group_parts_part_description_text_elipsis},
501 {"collections.group.parts.part.description.text.ellipsis", st_collections_group_parts_part_description_text_elipsis},
502 {"collections.group.parts.part.description.box.layout", st_collections_group_parts_part_description_box_layout},
503 {"collections.group.parts.part.description.box.align", st_collections_group_parts_part_description_box_align},
504 {"collections.group.parts.part.description.box.padding", st_collections_group_parts_part_description_box_padding},
505 {"collections.group.parts.part.description.box.min", st_collections_group_parts_part_description_box_min},
506 {"collections.group.parts.part.description.table.homogeneous", st_collections_group_parts_part_description_table_homogeneous},
507 {"collections.group.parts.part.description.table.align", st_collections_group_parts_part_description_table_align},
508 {"collections.group.parts.part.description.table.padding", st_collections_group_parts_part_description_table_padding},
509 {"collections.group.parts.part.description.table.min", st_collections_group_parts_part_description_table_min},
510 {"collections.group.parts.part.description.map.perspective", st_collections_group_parts_part_description_map_perspective},
511 {"collections.group.parts.part.description.map.light", st_collections_group_parts_part_description_map_light},
512 {"collections.group.parts.part.description.map.rotation.center", st_collections_group_parts_part_description_map_rotation_center},
513 {"collections.group.parts.part.description.map.rotation.x", st_collections_group_parts_part_description_map_rotation_x},
514 {"collections.group.parts.part.description.map.rotation.y", st_collections_group_parts_part_description_map_rotation_y},
515 {"collections.group.parts.part.description.map.rotation.z", st_collections_group_parts_part_description_map_rotation_z},
516 {"collections.group.parts.part.description.map.on", st_collections_group_parts_part_description_map_on},
517 {"collections.group.parts.part.description.map.smooth", st_collections_group_parts_part_description_map_smooth},
518 {"collections.group.parts.part.description.map.alpha", st_collections_group_parts_part_description_map_alpha},
519 {"collections.group.parts.part.description.map.backface_cull", st_collections_group_parts_part_description_map_backface_cull},
520 {"collections.group.parts.part.description.map.perspective_on", st_collections_group_parts_part_description_map_perspective_on},
521 {"collections.group.parts.part.description.perspective.zplane", st_collections_group_parts_part_description_perspective_zplane},
522 {"collections.group.parts.part.description.perspective.focal", st_collections_group_parts_part_description_perspective_focal},
523 {"collections.group.parts.part.description.params.int", st_collections_group_parts_part_description_params_int},
524 {"collections.group.parts.part.description.params.double", st_collections_group_parts_part_description_params_double},
525 {"collections.group.parts.part.description.params.string", st_collections_group_parts_part_description_params_string},
526 {"collections.group.parts.part.description.params.bool", st_collections_group_parts_part_description_params_bool},
527 {"collections.group.parts.part.description.params.choice", st_collections_group_parts_part_description_params_choice},
528 {"collections.group.parts.part.description.images.image", st_images_image}, /* dup */
529 {"collections.group.parts.part.description.images.set.name", st_images_set_name},
530 {"collections.group.parts.part.description.images.set.image.image", st_images_set_image_image},
531 {"collections.group.parts.part.description.images.set.image.size", st_images_set_image_size},
532 {"collections.group.parts.part.description.font", st_fonts_font}, /* dup */
533 {"collections.group.parts.part.description.fonts.font", st_fonts_font}, /* dup */
534 {"collections.group.parts.part.description.styles.style.name", st_styles_style_name}, /* dup */
535 {"collections.group.parts.part.description.styles.style.base", st_styles_style_base}, /* dup */
536 {"collections.group.parts.part.description.styles.style.tag", st_styles_style_tag}, /* dup */
537 {"collections.group.parts.part.description.color_classes.color_class.name", st_color_class_name}, /* dup */
538 {"collections.group.parts.part.description.color_classes.color_class.color", st_color_class_color}, /* dup */
539 {"collections.group.parts.part.description.color_classes.color_class.color2", st_color_class_color2}, /* dup */
540 {"collections.group.parts.part.description.color_classes.color_class.color3", st_color_class_color3}, /* dup */
541 {"collections.group.parts.part.description.programs.image", st_images_image}, /* dup */
542 {"collections.group.parts.part.description.programs.set.name", st_images_set_name},
543 {"collections.group.parts.part.description.programs.set.image.image", st_images_set_image_image},
544 {"collections.group.parts.part.description.programs.set.image.size", st_images_set_image_size},
545 {"collections.group.parts.part.description.programs.images.image", st_images_image}, /* dup */
546 {"collections.group.parts.part.description.programs.images.set.name", st_images_set_name},
547 {"collections.group.parts.part.description.programs.images.set.image.image", st_images_set_image_image},
548 {"collections.group.parts.part.description.programs.images.set.image.size", st_images_set_image_size},
549 {"collections.group.parts.part.description.programs.font", st_fonts_font}, /* dup */
550 {"collections.group.parts.part.description.programs.fonts.font", st_fonts_font}, /* dup */
551 {"collections.group.parts.part.description.programs.program.name", st_collections_group_programs_program_name}, /* dup */
552 {"collections.group.parts.part.description.programs.program.signal", st_collections_group_programs_program_signal}, /* dup */
553 {"collections.group.parts.part.description.programs.program.source", st_collections_group_programs_program_source}, /* dup */
554 {"collections.group.parts.part.description.programs.program.in", st_collections_group_programs_program_in}, /* dup */
555 {"collections.group.parts.part.description.programs.program.action", st_collections_group_programs_program_action}, /* dup */
556 {"collections.group.parts.part.description.programs.program.transition", st_collections_group_programs_program_transition}, /* dup */
557 {"collections.group.parts.part.description.programs.program.target", st_collections_group_programs_program_target}, /* dup */
558 {"collections.group.parts.part.description.programs.program.after", st_collections_group_programs_program_after}, /* dup */
559 {"collections.group.parts.part.description.programs.program.api", st_collections_group_programs_program_api}, /* dup */
560 {"collections.group.parts.part.description.program.name", st_collections_group_programs_program_name}, /* dup */
561 {"collections.group.parts.part.description.program.signal", st_collections_group_programs_program_signal}, /* dup */
562 {"collections.group.parts.part.description.program.source", st_collections_group_programs_program_source}, /* dup */
563 {"collections.group.parts.part.description.program.in", st_collections_group_programs_program_in}, /* dup */
564 {"collections.group.parts.part.description.program.action", st_collections_group_programs_program_action}, /* dup */
565 {"collections.group.parts.part.description.program.transition", st_collections_group_programs_program_transition}, /* dup */
566 {"collections.group.parts.part.description.program.target", st_collections_group_programs_program_target}, /* dup */
567 {"collections.group.parts.part.description.program.after", st_collections_group_programs_program_after}, /* dup */
568 {"collections.group.parts.part.description.program.api", st_collections_group_programs_program_api}, /* dup */
569 {"collections.group.parts.part.programs.image", st_images_image}, /* dup */
570 {"collections.group.parts.part.programs.set.name", st_images_set_name},
571 {"collections.group.parts.part.programs.set.image.image", st_images_set_image_image},
572 {"collections.group.parts.part.programs.set.image.size", st_images_set_image_size},
573 {"collections.group.parts.part.programs.images.image", st_images_image}, /* dup */
574 {"collections.group.parts.part.programs.images.set.name", st_images_set_name},
575 {"collections.group.parts.part.programs.images.set.image.image", st_images_set_image_image},
576 {"collections.group.parts.part.programs.images.set.image.size", st_images_set_image_size},
577 {"collections.group.parts.part.programs.font", st_fonts_font}, /* dup */
578 {"collections.group.parts.part.programs.fonts.font", st_fonts_font}, /* dup */
579 {"collections.group.parts.part.programs.program.name", st_collections_group_programs_program_name}, /* dup */
580 {"collections.group.parts.part.programs.program.signal", st_collections_group_programs_program_signal}, /* dup */
581 {"collections.group.parts.part.programs.program.source", st_collections_group_programs_program_source}, /* dup */
582 {"collections.group.parts.part.programs.program.in", st_collections_group_programs_program_in}, /* dup */
583 {"collections.group.parts.part.programs.program.action", st_collections_group_programs_program_action}, /* dup */
584 {"collections.group.parts.part.programs.program.transition", st_collections_group_programs_program_transition}, /* dup */
585 {"collections.group.parts.part.programs.program.target", st_collections_group_programs_program_target}, /* dup */
586 {"collections.group.parts.part.programs.program.after", st_collections_group_programs_program_after}, /* dup */
587 {"collections.group.parts.part.programs.program.api", st_collections_group_programs_program_api}, /* dup */
588 {"collections.group.parts.part.program.name", st_collections_group_programs_program_name}, /* dup */
589 {"collections.group.parts.part.program.signal", st_collections_group_programs_program_signal}, /* dup */
590 {"collections.group.parts.part.program.source", st_collections_group_programs_program_source}, /* dup */
591 {"collections.group.parts.part.program.in", st_collections_group_programs_program_in}, /* dup */
592 {"collections.group.parts.part.program.action", st_collections_group_programs_program_action}, /* dup */
593 {"collections.group.parts.part.program.transition", st_collections_group_programs_program_transition}, /* dup */
594 {"collections.group.parts.part.program.target", st_collections_group_programs_program_target}, /* dup */
595 {"collections.group.parts.part.program.after", st_collections_group_programs_program_after}, /* dup */
596 {"collections.group.parts.part.program.api", st_collections_group_programs_program_api}, /* dup */
597 {"collections.group.parts.programs.image", st_images_image}, /* dup */
598 {"collections.group.parts.programs.set.name", st_images_set_name},
599 {"collections.group.parts.programs.set.image.image", st_images_set_image_image},
600 {"collections.group.parts.programs.set.image.size", st_images_set_image_size},
601 {"collections.group.parts.programs.images.image", st_images_image}, /* dup */
602 {"collections.group.parts.programs.images.set.name", st_images_set_name},
603 {"collections.group.parts.programs.images.set.image.image", st_images_set_image_image},
604 {"collections.group.parts.programs.images.set.image.size", st_images_set_image_size},
605 {"collections.group.parts.programs.font", st_fonts_font}, /* dup */
606 {"collections.group.parts.programs.fonts.font", st_fonts_font}, /* dup */
607 {"collections.group.parts.programs.program.name", st_collections_group_programs_program_name}, /* dup */
608 {"collections.group.parts.programs.program.signal", st_collections_group_programs_program_signal}, /* dup */
609 {"collections.group.parts.programs.program.source", st_collections_group_programs_program_source}, /* dup */
610 {"collections.group.parts.programs.program.filter", st_collections_group_programs_program_filter}, /* dup */
611 {"collections.group.parts.programs.program.in", st_collections_group_programs_program_in}, /* dup */
612 {"collections.group.parts.programs.program.action", st_collections_group_programs_program_action}, /* dup */
613 {"collections.group.parts.programs.program.transition", st_collections_group_programs_program_transition}, /* dup */
614 {"collections.group.parts.programs.program.target", st_collections_group_programs_program_target}, /* dup */
615 {"collections.group.parts.programs.program.after", st_collections_group_programs_program_after},
616 {"collections.group.parts.programs.program.api", st_collections_group_programs_program_api},
617 {"collections.group.parts.program.name", st_collections_group_programs_program_name}, /* dup */
618 {"collections.group.parts.program.signal", st_collections_group_programs_program_signal}, /* dup */
619 {"collections.group.parts.program.source", st_collections_group_programs_program_source}, /* dup */
620 {"collections.group.parts.program.filter", st_collections_group_programs_program_filter}, /* dup */
621 {"collections.group.parts.program.in", st_collections_group_programs_program_in}, /* dup */
622 {"collections.group.parts.program.action", st_collections_group_programs_program_action}, /* dup */
623 {"collections.group.parts.program.transition", st_collections_group_programs_program_transition}, /* dup */
624 {"collections.group.parts.program.target", st_collections_group_programs_program_target}, /* dup */
625 {"collections.group.parts.program.after", st_collections_group_programs_program_after}, /* dup */
626 {"collections.group.parts.program.api", st_collections_group_programs_program_api}, /* dup */
627 {"collections.group.program.name", st_collections_group_programs_program_name}, /* dup */
628 {"collections.group.program.signal", st_collections_group_programs_program_signal}, /* dup */
629 {"collections.group.program.source", st_collections_group_programs_program_source}, /* dup */
630 {"collections.group.program.filter", st_collections_group_programs_program_filter}, /* dup */
631 {"collections.group.program.in", st_collections_group_programs_program_in}, /* dup */
632 {"collections.group.program.action", st_collections_group_programs_program_action}, /* dup */
633 {"collections.group.program.transition", st_collections_group_programs_program_transition}, /* dup */
634 {"collections.group.program.target", st_collections_group_programs_program_target}, /* dup */
635 {"collections.group.program.after", st_collections_group_programs_program_after}, /* dup */
636 {"collections.group.program.api", st_collections_group_programs_program_api}, /* dup */
637 {"collections.group.programs.program.name", st_collections_group_programs_program_name},
638 {"collections.group.programs.program.signal", st_collections_group_programs_program_signal},
639 {"collections.group.programs.program.source", st_collections_group_programs_program_source},
640 {"collections.group.programs.program.filter", st_collections_group_programs_program_filter}, /* dup */
641 {"collections.group.programs.program.in", st_collections_group_programs_program_in},
642 {"collections.group.programs.program.action", st_collections_group_programs_program_action},
643 {"collections.group.programs.program.transition", st_collections_group_programs_program_transition},
644 {"collections.group.programs.program.target", st_collections_group_programs_program_target},
645 {"collections.group.programs.program.after", st_collections_group_programs_program_after},
646 {"collections.group.programs.program.api", st_collections_group_programs_program_api},
647 {"collections.group.programs.image", st_images_image}, /* dup */
648 {"collections.group.programs.set.name", st_images_set_name},
649 {"collections.group.programs.set.image.image", st_images_set_image_image},
650 {"collections.group.programs.set.image.size", st_images_set_image_size},
651 {"collections.group.programs.images.image", st_images_image}, /* dup */
652 {"collections.group.programs.images.set.name", st_images_set_name},
653 {"collections.group.programs.images.set.image.image", st_images_set_image_image},
654 {"collections.group.programs.images.set.image.size", st_images_set_image_size},
655 {"collections.group.programs.font", st_fonts_font}, /* dup */
656 {"collections.group.programs.fonts.font", st_fonts_font} /* dup */
659 New_Object_Handler object_handlers[] =
663 {"images.set", ob_images_set},
664 {"images.set.image", ob_images_set_image},
668 {"styles.style", ob_styles_style},
669 {"color_classes", NULL},
670 {"color_classes.color_class", ob_color_class},
672 {"collections", ob_collections},
673 {"collections.externals", NULL}, /* dup */
674 {"collections.set", ob_images_set}, /* dup */
675 {"collections.set.image", ob_images_set_image}, /* dup */
676 {"collections.images", NULL}, /* dup */
677 {"collections.images.set", ob_images_set}, /* dup */
678 {"collections.images.set.image", ob_images_set_image}, /* dup */
679 {"collections.fonts", NULL}, /* dup */
680 {"collections.styles", NULL}, /* dup */
681 {"collections.styles.style", ob_styles_style}, /* dup */
682 {"collections.color_classes", NULL}, /* dup */
683 {"collections.color_classes.color_class", ob_color_class}, /* dup */
684 {"collections.sounds", NULL},
685 {"collections.group.sounds", NULL}, /* dup */
686 {"collections.sounds.sample", NULL},
687 {"collections.group.sounds.sample", NULL}, /* dup */
688 {"collections.group", ob_collections_group},
689 {"collections.group.data", NULL},
690 {"collections.group.limits", NULL},
691 {"collections.group.script", ob_collections_group_script},
692 {"collections.group.lua_script", ob_collections_group_lua_script},
693 {"collections.group.externals", NULL}, /* dup */
694 {"collections.group.set", ob_images_set}, /* dup */
695 {"collections.group.set.image", ob_images_set_image}, /* dup */
696 {"collections.group.images", NULL}, /* dup */
697 {"collections.group.images.set", ob_images_set}, /* dup */
698 {"collections.group.images.set.image", ob_images_set_image}, /* dup */
699 {"collections.group.fonts", NULL}, /* dup */
700 {"collections.group.styles", NULL}, /* dup */
701 {"collections.group.styles.style", ob_styles_style}, /* dup */
702 {"collections.group.color_classes", NULL}, /* dup */
703 {"collections.group.color_classes.color_class", ob_color_class}, /* dup */
704 {"collections.group.parts", NULL},
705 {"collections.group.parts.set", ob_images_set}, /* dup */
706 {"collections.group.parts.set.image", ob_images_set_image}, /* dup */
707 {"collections.group.parts.images", NULL}, /* dup */
708 {"collections.group.parts.images.set", ob_images_set}, /* dup */
709 {"collections.group.parts.images.set.image", ob_images_set_image}, /* dup */
710 {"collections.group.parts.fonts", NULL}, /* dup */
711 {"collections.group.parts.styles", NULL}, /* dup */
712 {"collections.group.parts.styles.style", ob_styles_style}, /* dup */
713 {"collections.group.parts.color_classes", NULL}, /* dup */
714 {"collections.group.parts.color_classes.color_class", ob_color_class}, /* dup */
715 {"collections.group.parts.part", ob_collections_group_parts_part},
716 {"collections.group.parts.part.dragable", NULL},
717 {"collections.group.parts.part.set", ob_images_set}, /* dup */
718 {"collections.group.parts.part.set.image", ob_images_set_image}, /* dup */
719 {"collections.group.parts.part.images", NULL}, /* dup */
720 {"collections.group.parts.part.images.set", ob_images_set}, /* dup */
721 {"collections.group.parts.part.images.set.image", ob_images_set_image}, /* dup */
722 {"collections.group.parts.part.fonts", NULL}, /* dup */
723 {"collections.group.parts.part.styles", NULL}, /* dup */
724 {"collections.group.parts.part.styles.style", ob_styles_style}, /* dup */
725 {"collections.group.parts.part.color_classes", NULL}, /* dup */
726 {"collections.group.parts.part.color_classes.color_class", ob_color_class}, /* dup */
727 {"collections.group.parts.part.box", NULL},
728 {"collections.group.parts.part.box.items", NULL},
729 {"collections.group.parts.part.box.items.item", ob_collections_group_parts_part_box_items_item},
730 {"collections.group.parts.part.table", NULL},
731 {"collections.group.parts.part.table.items", NULL},
732 {"collections.group.parts.part.table.items.item", ob_collections_group_parts_part_box_items_item}, /* dup */
733 {"collections.group.parts.part.description", ob_collections_group_parts_part_description},
734 {"collections.group.parts.part.description.rel1", NULL},
735 {"collections.group.parts.part.description.rel2", NULL},
736 {"collections.group.parts.part.description.image", NULL}, /* dup */
737 {"collections.group.parts.part.description.image.set", ob_images_set}, /* dup */
738 {"collections.group.parts.part.description.image.set.image", ob_images_set_image}, /* dup */
739 {"collections.group.parts.part.description.image.images", NULL}, /* dup */
740 {"collections.group.parts.part.description.image.images.set", ob_images_set}, /* dup */
741 {"collections.group.parts.part.description.image.images.set.image", ob_images_set_image}, /* dup */
742 {"collections.group.parts.part.description.fill", NULL},
743 {"collections.group.parts.part.description.fill.origin", NULL},
744 {"collections.group.parts.part.description.fill.size", NULL},
745 {"collections.group.parts.part.description.text", NULL},
746 {"collections.group.parts.part.description.text.fonts", NULL}, /* dup */
747 {"collections.group.parts.part.description.images", NULL}, /* dup */
748 {"collections.group.parts.part.description.images.set", ob_images_set}, /* dup */
749 {"collections.group.parts.part.description.images.set.image", ob_images_set_image}, /* dup */
750 {"collections.group.parts.part.description.fonts", NULL}, /* dup */
751 {"collections.group.parts.part.description.styles", NULL}, /* dup */
752 {"collections.group.parts.part.description.styles.style", ob_styles_style}, /* dup */
753 {"collections.group.parts.part.description.box", NULL},
754 {"collections.group.parts.part.description.table", NULL},
755 {"collections.group.parts.part.description.map", NULL},
756 {"collections.group.parts.part.description.map.rotation", NULL},
757 {"collections.group.parts.part.description.perspective", NULL},
758 {"collections.group.parts.part.description.params", NULL},
759 {"collections.group.parts.part.description.color_classes", NULL}, /* dup */
760 {"collections.group.parts.part.description.color_classes.color_class", ob_color_class}, /* dup */
761 {"collections.group.parts.part.description.program", ob_collections_group_programs_program}, /* dup */
762 {"collections.group.parts.part.description.program.script", ob_collections_group_programs_program_script}, /* dup */
763 {"collections.group.parts.part.description.programs", NULL}, /* dup */
764 {"collections.group.parts.part.description.programs.set", ob_images_set}, /* dup */
765 {"collections.group.parts.part.description.programs.set.image", ob_images_set_image}, /* dup */
766 {"collections.group.parts.part.description.programs.images", NULL}, /* dup */
767 {"collections.group.parts.part.description.programs.images.set", ob_images_set},
768 {"collections.group.parts.part.description.programs.images.set.image", ob_images_set_image}, /* dup */
769 {"collections.group.parts.part.description.programs.fonts", NULL}, /* dup */
770 {"collections.group.parts.part.description.programs.program", ob_collections_group_programs_program}, /* dup */
771 {"collections.group.parts.part.description.programs.program.script", ob_collections_group_programs_program_script}, /* dup */
772 {"collections.group.parts.part.description.script", ob_collections_group_script}, /* dup */
773 {"collections.group.parts.part.program", ob_collections_group_programs_program}, /* dup */
774 {"collections.group.parts.part.program.script", ob_collections_group_programs_program_script}, /* dup */
775 {"collections.group.parts.part.programs", NULL}, /* dup */
776 {"collections.group.parts.part.programs.set", ob_images_set}, /* dup */
777 {"collections.group.parts.part.programs.set.image", ob_images_set_image}, /* dup */
778 {"collections.group.parts.part.programs.images", NULL}, /* dup */
779 {"collections.group.parts.part.programs.images.set", ob_images_set}, /* dup */
780 {"collections.group.parts.part.programs.images.set.image", ob_images_set_image}, /* dup */
781 {"collections.group.parts.part.programs.fonts", NULL}, /* dup */
782 {"collections.group.parts.part.programs.program", ob_collections_group_programs_program}, /* dup */
783 {"collections.group.parts.part.programs.program.script", ob_collections_group_programs_program_script}, /* dup */
784 {"collections.group.parts.part.script", ob_collections_group_script}, /* dup */
785 {"collections.group.parts.program", ob_collections_group_programs_program}, /* dup */
786 {"collections.group.parts.program.script", ob_collections_group_programs_program_script}, /* dup */
787 {"collections.group.parts.programs", NULL}, /* dup */
788 {"collections.group.parts.programs.set", ob_images_set}, /* dup */
789 {"collections.group.parts.programs.set.image", ob_images_set_image}, /* dup */
790 {"collections.group.parts.programs.images", NULL}, /* dup */
791 {"collections.group.parts.programs.images.set", ob_images_set}, /* dup */
792 {"collections.group.parts.programs.images.set.image", ob_images_set_image}, /* dup */
793 {"collections.group.parts.programs.fonts", NULL}, /* dup */
794 {"collections.group.parts.programs.program", ob_collections_group_programs_program}, /* dup */
795 {"collections.group.parts.programs.program.script", ob_collections_group_programs_program_script}, /* dup */
796 {"collections.group.parts.script", ob_collections_group_script}, /* dup */
797 {"collections.group.program", ob_collections_group_programs_program}, /* dup */
798 {"collections.group.program.script", ob_collections_group_programs_program_script}, /* dup */
799 {"collections.group.programs", NULL},
800 {"collections.group.programs.set", ob_images_set}, /* dup */
801 {"collections.group.programs.set.image", ob_images_set_image}, /* dup */
802 {"collections.group.programs.images", NULL}, /* dup */
803 {"collections.group.programs.images.set", ob_images_set}, /* dup */
804 {"collections.group.programs.images.set.image", ob_images_set_image}, /* dup */
805 {"collections.group.programs.fonts", NULL}, /* dup */
806 {"collections.group.programs.program", ob_collections_group_programs_program},
807 {"collections.group.programs.program.script", ob_collections_group_programs_program_script},
808 {"collections.group.programs.script", ob_collections_group_script} /* dup */
814 object_handler_num(void)
816 return sizeof(object_handlers) / sizeof (New_Object_Handler);
820 statement_handler_num(void)
822 return sizeof(statement_handlers) / sizeof (New_Object_Handler);
826 _edje_part_description_fill(Edje_Part_Description_Spec_Fill *fill)
829 fill->pos_rel_x = FROM_DOUBLE(0.0);
831 fill->rel_x = FROM_DOUBLE(1.0);
833 fill->pos_rel_y = FROM_DOUBLE(0.0);
835 fill->rel_y = FROM_DOUBLE(1.0);
839 fill->type = EDJE_FILL_TYPE_SCALE;
843 _edje_part_description_image_remove(Edje_Part_Description_Image *ed)
849 data_queue_image_remove(&(ed->image.id), &(ed->image.set));
851 for (j = 0; j < ed->image.tweens_count; ++j)
852 data_queue_image_remove(&(ed->image.tweens[j]->id),
853 &(ed->image.tweens[j]->set));
857 part_description_image_cleanup(Edje_Part *ep)
859 Edje_Part_Description_Image *ed;
862 if (ep->type != EDJE_PART_TYPE_IMAGE)
865 ed = (Edje_Part_Description_Image*) ep->default_desc;
866 _edje_part_description_image_remove(ed);
868 for (j = 0; j < ep->other.desc_count; j++)
870 ed = (Edje_Part_Description_Image*) ep->other.desc[j];
871 _edje_part_description_image_remove(ed);
875 static Edje_Part_Description_Common *
876 _edje_part_description_alloc(unsigned char type, const char *collection, const char *part)
878 Edje_Part_Description_Common *result = NULL;
882 case EDJE_PART_TYPE_SPACER:
883 case EDJE_PART_TYPE_RECTANGLE:
884 case EDJE_PART_TYPE_SWALLOW:
885 case EDJE_PART_TYPE_GROUP:
886 result = mem_alloc(SZ(Edje_Part_Description_Common));
888 case EDJE_PART_TYPE_TEXT:
889 case EDJE_PART_TYPE_TEXTBLOCK:
891 Edje_Part_Description_Text *ed;
893 ed = mem_alloc(SZ(Edje_Part_Description_Text));
895 ed->text.color3.r = 0;
896 ed->text.color3.g = 0;
897 ed->text.color3.b = 0;
898 ed->text.color3.a = 128;
899 ed->text.align.x = FROM_DOUBLE(0.5);
900 ed->text.align.y = FROM_DOUBLE(0.5);
901 ed->text.id_source = -1;
902 ed->text.id_text_source = -1;
904 result = &ed->common;
907 case EDJE_PART_TYPE_IMAGE:
909 Edje_Part_Description_Image *ed;
911 ed = mem_alloc(SZ(Edje_Part_Description_Image));
915 _edje_part_description_fill(&ed->image.fill);
917 result = &ed->common;
920 case EDJE_PART_TYPE_PROXY:
922 Edje_Part_Description_Proxy *ed;
924 ed = mem_alloc(SZ(Edje_Part_Description_Proxy));
928 _edje_part_description_fill(&ed->proxy.fill);
930 result = &ed->common;
933 case EDJE_PART_TYPE_BOX:
935 Edje_Part_Description_Box *ed;
937 ed = mem_alloc(SZ(Edje_Part_Description_Box));
939 ed->box.layout = NULL;
940 ed->box.alt_layout = NULL;
941 ed->box.align.x = FROM_DOUBLE(0.5);
942 ed->box.align.y = FROM_DOUBLE(0.5);
943 ed->box.padding.x = 0;
944 ed->box.padding.y = 0;
946 result = &ed->common;
949 case EDJE_PART_TYPE_TABLE:
951 Edje_Part_Description_Table *ed;
953 ed = mem_alloc(SZ(Edje_Part_Description_Table));
955 ed->table.homogeneous = EDJE_OBJECT_TABLE_HOMOGENEOUS_NONE;
956 ed->table.align.x = FROM_DOUBLE(0.5);
957 ed->table.align.y = FROM_DOUBLE(0.5);
958 ed->table.padding.x = 0;
959 ed->table.padding.y = 0;
961 result = &ed->common;
964 case EDJE_PART_TYPE_EXTERNAL:
966 Edje_Part_Description_External *ed;
968 ed = mem_alloc(SZ(Edje_Part_Description_External));
970 ed->external_params = NULL;
972 result = &ed->common;
979 ERR("Unknown type %i of part %s in collection %s.",
980 type, part, collection);
988 _edje_program_check(const char *name, Edje_Program *me, Edje_Program **pgrms, unsigned int count)
990 Edje_Part_Collection *pc;
992 Edje_Program_Parser *epp;
994 pc = eina_list_data_get(eina_list_last(edje_collections));
996 for (i = 0; i < count; ++i)
998 if (pgrms[i] != me && (!strcmp(name, pgrms[i]->name)))
1000 epp = (Edje_Program_Parser *)pgrms[i];
1001 if (!epp->can_override)
1003 ERR("parse error %s:%i. There is already a program of the name %s",
1004 file_in, line - 1, name);
1009 _edje_program_remove(pc, me);
1010 current_program = pgrms[i];
1011 epp->can_override = EINA_FALSE;
1018 _edje_program_copy(Edje_Program *ep, Edje_Program *ep2)
1020 Edje_Part_Collection *pc;
1021 Edje_Program_Target *et, *et2;
1022 Edje_Program_After *pa, *pa2;
1023 Edje_Program_Parser *epp;
1028 pc = eina_list_data_get(eina_list_last(edje_collections));
1030 #define STRDUP(x) x ? strdup(x) : NULL
1031 ep->name = STRDUP(ep2->name);
1033 _edje_program_remove(pc, current_program);
1034 ep->signal = STRDUP(ep2->signal);
1035 ep->source = STRDUP(ep2->source);
1036 _edje_program_insert(pc, current_program);
1038 ep->filter.part = STRDUP(ep2->filter.part);
1039 ep->filter.state = STRDUP(ep2->filter.state);
1040 ep->in.from = ep2->in.from;
1041 ep->in.range = ep2->in.range;
1042 ep->action = ep2->action;
1043 ep->state = STRDUP(ep2->state);
1044 ep->state2 = STRDUP(ep2->state2);
1045 ep->value = ep2->value;
1046 ep->value2 = ep2->value2;
1047 ep->tween.mode = ep2->tween.mode;
1048 ep->tween.time = ep2->tween.time;
1049 ep->tween.v1 = ep2->tween.v1;
1050 ep->tween.v2 = ep2->tween.v2;
1051 ep->sample_name = STRDUP(ep2->sample_name);
1052 ep->tone_name = STRDUP(ep2->tone_name);
1053 ep->duration = ep2->duration;
1054 ep->speed = ep2->speed;
1056 EINA_LIST_FOREACH(ep2->targets, l, et2)
1058 name = (char*) (et2 + 1);
1059 et = mem_alloc(SZ(Edje_Program_Target) + strlen(name) + 1);
1060 ep->targets = eina_list_append(ep->targets, et);
1061 copy = (char*) (et + 1);
1063 memcpy(copy, name, strlen(name) + 1);
1065 if (ep2->action == EDJE_ACTION_TYPE_STATE_SET)
1066 data_queue_copied_part_lookup(pc, &(et2->id), &(et->id));
1067 else if (ep2->action == EDJE_ACTION_TYPE_ACTION_STOP)
1068 data_queue_copied_program_lookup(pc, &(et2->id), &(et->id));
1069 else if (ep2->action == EDJE_ACTION_TYPE_SCRIPT)
1070 data_queue_copied_program_lookup(pc, &(et2->id), &(et->id));
1071 else if (ep2->action == EDJE_ACTION_TYPE_DRAG_VAL_SET)
1072 data_queue_copied_part_lookup(pc, &(et2->id), &(et->id));
1073 else if (ep2->action == EDJE_ACTION_TYPE_DRAG_VAL_STEP)
1074 data_queue_copied_part_lookup(pc, &(et2->id), &(et->id));
1075 else if (ep2->action == EDJE_ACTION_TYPE_DRAG_VAL_PAGE)
1076 data_queue_copied_part_lookup(pc, &(et2->id), &(et->id));
1077 else if (ep2->action == EDJE_ACTION_TYPE_FOCUS_SET)
1079 data_queue_copied_part_lookup(pc, &(et2->id), &(et->id));
1080 else if (ep2->action == EDJE_ACTION_TYPE_FOCUS_OBJECT)
1081 data_queue_copied_part_lookup(pc, &(et2->id), &(et->id));
1084 ERR("parse error %s:%i. target may only be used after action",
1090 EINA_LIST_FOREACH(ep2->after, l, pa2)
1092 name = (char*) (pa2 + 1);
1093 pa = mem_alloc(SZ(Edje_Program_After) + strlen(name) + 1);
1094 ep->after = eina_list_append(ep->after, pa);
1095 copy = (char*) (pa + 1);
1096 memcpy(copy, name, strlen(name) + 1);
1097 data_queue_copied_program_lookup(pc, &(pa2->id), &(pa->id));
1100 ep->api.name = STRDUP(ep2->api.name);
1101 ep->api.description = STRDUP(ep2->api.description);
1102 data_queue_copied_part_lookup(pc, &(ep2->param.src), &(ep->param.src));
1103 data_queue_copied_part_lookup(pc, &(ep2->param.dst), &(ep->param.dst));
1105 epp = (Edje_Program_Parser *)ep;
1106 epp->can_override = EINA_TRUE;
1114 @edcsection{toplevel,Top-Level blocks}
1127 The "externals" block is used to list each external module file that will be used in others
1136 Used to add a file to the externals list.
1140 st_externals_external(void)
1146 if (!edje_file->external_dir)
1147 edje_file->external_dir = mem_alloc(SZ(Edje_External_Directory));
1149 ex = mem_alloc(SZ(External));
1150 ex->name = parse_str(0);
1155 EINA_LIST_FOREACH(externals, l, lex)
1157 if (!strcmp(lex->name, ex->name))
1165 externals = eina_list_append(externals, ex);
1167 if (edje_file->external_dir)
1169 edje_file->external_dir->entries_count++;
1170 edje_file->external_dir->entries = realloc(edje_file->external_dir->entries,
1171 sizeof (Edje_External_Directory) * edje_file->external_dir->entries_count);
1172 memset(edje_file->external_dir->entries + edje_file->external_dir->entries_count - 1,
1173 0, sizeof (Edje_External_Directory));
1174 if (!edje_file->external_dir->entries)
1176 ERR("not enough memory");
1180 edje_file->external_dir->entries[edje_file->external_dir->entries_count - 1].entry = mem_strdup(ex->name);
1191 image: "filename1.ext" COMP;
1192 image: "filename2.ext" LOSSY 99;
1194 name: "image_name_used";
1196 image: "filename3.ext" LOSSY 90;
1197 size: 201 201 500 500;
1200 image: "filename4.ext" COMP;
1201 size: 51 51 200 200;
1204 image: "filename5.ext" COMP;
1208 image: "filename6.ext" RAW;
1215 The "images" block is used to list each image file that will be used in
1216 the theme along with its compression method (if any).
1217 Besides the document's root, additional "images" blocks can be
1218 included inside other blocks, normally "collections", "group" and
1219 "part", easing maintenance of the file list when the theme is split
1220 among multiple files.
1226 [image file] [compression method] (compression level)
1228 Used to include each image file. The full path to the directory holding
1229 the images can be defined later with edje_cc's "-id" option.
1230 Compression methods:
1231 @li RAW: Uncompressed.
1232 @li COMP: Lossless compression.
1233 @li LOSSY [0-100]: Lossy compression with quality from 0 to 100.
1234 @li USER: Do not embed the file, refer to the external file instead.
1238 st_images_image(void)
1240 Edje_Image_Directory_Entry *img;
1245 if (!edje_file->image_dir)
1246 edje_file->image_dir = mem_alloc(SZ(Edje_Image_Directory));
1250 for (i = 0; i < edje_file->image_dir->entries_count; ++i)
1251 if (!strcmp(edje_file->image_dir->entries[i].entry, tmp))
1257 edje_file->image_dir->entries_count++;
1258 edje_file->image_dir->entries = realloc(edje_file->image_dir->entries,
1259 sizeof (Edje_Image_Directory_Entry) * edje_file->image_dir->entries_count);
1260 memset(edje_file->image_dir->entries + edje_file->image_dir->entries_count - 1,
1261 0, sizeof (Edje_Image_Directory_Entry));
1262 if (!edje_file->image_dir->entries)
1264 ERR("No enough memory.");
1268 img = edje_file->image_dir->entries + edje_file->image_dir->entries_count - 1;
1271 img->id = edje_file->image_dir->entries_count - 1;
1280 img->source_type = EDJE_IMAGE_SOURCE_TYPE_INLINE_PERFECT;
1281 img->source_param = 0;
1285 img->source_type = EDJE_IMAGE_SOURCE_TYPE_INLINE_PERFECT;
1286 img->source_param = 1;
1290 img->source_type = EDJE_IMAGE_SOURCE_TYPE_INLINE_LOSSY;
1291 img->source_param = 0;
1295 img->source_type = EDJE_IMAGE_SOURCE_TYPE_EXTERNAL;
1296 img->source_param = 0;
1298 if (img->source_type != EDJE_IMAGE_SOURCE_TYPE_INLINE_LOSSY)
1302 img->source_param = parse_int_range(2, 0, 100);
1314 name: "image_name_used";
1316 image: "filename3.ext" LOSSY 90;
1317 size: 201 201 500 500;
1320 image: "filename4.ext" COMP;
1321 size: 51 51 200 200;
1324 image: "filename5.ext" COMP;
1328 image: "filename6.ext" RAW;
1333 The "set" block is used to define an image with different content depending on their size.
1334 Besides the document's root, additional "set" blocks can be
1335 included inside other blocks, normally "collections", "group" and
1336 "part", easing maintenance of the file list when the theme is split
1337 among multiple files.
1343 if (!edje_file->image_dir)
1344 edje_file->image_dir = mem_alloc(SZ(Edje_Image_Directory));
1346 edje_file->image_dir->sets_count++;
1347 edje_file->image_dir->sets = realloc(edje_file->image_dir->sets,
1348 sizeof (Edje_Image_Directory_Set) * edje_file->image_dir->sets_count);
1349 memset(edje_file->image_dir->sets + edje_file->image_dir->sets_count - 1,
1350 0, sizeof (Edje_Image_Directory_Set));
1351 if (!edje_file->image_dir->sets)
1353 ERR("Not enough memory.");
1356 edje_file->image_dir->sets[edje_file->image_dir->sets_count - 1].id = edje_file->image_dir->sets_count - 1;
1367 Define the name that refer to this image description.
1371 st_images_set_name(void)
1375 edje_file->image_dir->sets[edje_file->image_dir->sets_count - 1].name = parse_str(0);
1384 The "image" block inside a "set" block define the characteristic of an image.
1385 Every block will describe one image and the size rule to use it.
1389 ob_images_set_image(void)
1391 Edje_Image_Directory_Set_Entry *entry;
1392 Edje_Image_Directory_Set *set;
1394 set = edje_file->image_dir->sets + edje_file->image_dir->sets_count - 1;
1396 entry = mem_alloc(SZ(Edje_Image_Directory_Set_Entry));
1398 set->entries = eina_list_append(set->entries, entry);
1407 [image file] [compression method] (compression level)
1409 Used to include each image file. The full path to the directory holding
1410 the images can be defined later with edje_cc's "-id" option.
1411 Compression methods:
1412 @li RAW: Uncompressed.
1413 @li COMP: Lossless compression.
1414 @li LOSSY [0-100]: Lossy compression with quality from 0 to 100.
1415 @li USER: Do not embed the file, refer to the external file instead.
1419 st_images_set_image_image(void)
1421 Edje_Image_Directory_Set_Entry *entry;
1422 Edje_Image_Directory_Set *set;
1425 set = edje_file->image_dir->sets + edje_file->image_dir->sets_count - 1;
1426 entry = eina_list_data_get(eina_list_last(set->entries));
1428 /* Add the image to the global pool with the same syntax. */
1431 entry->name = parse_str(0);
1433 for (i = 0; i < edje_file->image_dir->entries_count; ++i)
1434 if (!strcmp(edje_file->image_dir->entries[i].entry, entry->name))
1447 [minw minh maxw mawh]
1449 Define the minimal and maximal size that will select the specified image.
1453 st_images_set_image_size(void)
1455 Edje_Image_Directory_Set_Entry *entry;
1456 Edje_Image_Directory_Set *set;
1458 set = edje_file->image_dir->sets + edje_file->image_dir->sets_count - 1;
1459 entry = eina_list_data_get(eina_list_last(set->entries));
1461 entry->size.min.w = parse_int(0);
1462 entry->size.min.h = parse_int(1);
1463 entry->size.max.w = parse_int(2);
1464 entry->size.max.h = parse_int(3);
1466 if (entry->size.min.w > entry->size.max.w
1467 || entry->size.min.h > entry->size.max.h)
1469 ERR("parse error %s:%i. Image min and max size are not in the right order ([%i, %i] < [%i, %i])",
1471 entry->size.min.w, entry->size.min.h,
1472 entry->size.max.w, entry->size.max.h);
1484 font: "filename1.ext" "fontname";
1485 font: "filename2.ext" "otherfontname";
1489 The "fonts" block is used to list each font file with an alias used later
1490 in the theme. As with the "images" block, additional "fonts" blocks can
1491 be included inside other blocks.
1497 [font filename] [font alias]
1499 Defines each font "file" and "alias", the full path to the directory
1500 holding the font files can be defined with edje_cc's "-fd" option.
1510 if (!edje_file->fonts)
1511 edje_file->fonts = eina_hash_string_small_new(free);
1513 fn = mem_alloc(SZ(Font));
1514 fn->file = parse_str(0);
1515 fn->name = parse_str(1);
1517 if (eina_hash_find(edje_file->fonts, fn->name))
1525 eina_hash_direct_add(edje_file->fonts, fn->name, fn);
1534 item: "key" "value";
1535 file: "otherkey" "filename.ext";
1539 The "data" block is used to pass arbitrary parameters from the theme to
1540 the application. Unlike the "images" and "fonts" blocks, additional
1541 "data" blocks can only be included inside the "group" block.
1547 [parameter name] [parameter value]
1549 Defines a new parameter, the value will be the string specified next to
1563 es = mem_alloc(SZ(Edje_String));
1564 es->str = parse_str(1);
1566 if (!edje_file->data)
1567 edje_file->data = eina_hash_string_small_new(free);
1569 /* FIXME: check if data already exist */
1570 eina_hash_direct_add(edje_file->data, key, es);
1578 [parameter name] [parameter filename]
1580 Defines a new parameter, the value will be the contents of the
1581 specified file formated as a single string of text. This property only
1582 works with plain text files.
1602 es = mem_alloc(SZ(Edje_String));
1603 filename = parse_str(1);
1605 fd = open(filename, O_RDONLY | O_BINARY, S_IRUSR | S_IWUSR);
1608 char path[PATH_MAX], *dir;
1610 EINA_LIST_FOREACH(data_dirs, l, dir)
1612 snprintf(path, sizeof(path), "%s/%s", dir, filename);
1613 fd = open(path, O_RDONLY | O_BINARY, S_IRUSR | S_IWUSR);
1620 ERR("%s:%i when opening file \"%s\": \"%s\"",
1621 file_in, line, filename, strerror(errno));
1626 if (fstat(fd, &buf))
1628 ERR("%s:%i when stating file \"%s\": \"%s\"",
1629 file_in, line, filename, strerror(errno));
1633 data = mmap(NULL, buf.st_size, PROT_READ, MAP_SHARED, fd, 0);
1634 if (data == MAP_FAILED)
1636 ERR("%s:%i when mapping file \"%s\": \"%s\"",
1637 file_in, line, filename, strerror(errno));
1642 for (i = 0; i < buf.st_size; ++i, ++over)
1645 ERR("%s:%i file \"%s\" is a binary file.", file_in, line, filename);
1649 value = malloc(sizeof (char) * buf.st_size + 1);
1650 snprintf(value, buf.st_size + 1, "%s", data);
1652 munmap((void*)data, buf.st_size);
1657 if (!edje_file->data)
1658 edje_file->data = eina_hash_string_small_new(free);
1660 eina_hash_direct_add(edje_file->data, key, es);
1672 name: "colorclassname";
1673 color: [0-255] [0-255] [0-255] [0-255];
1674 color2: [0-255] [0-255] [0-255] [0-255];
1675 color3: [0-255] [0-255] [0-255] [0-255]
1680 The "color_classes" block contains a list of one or more "color_class"
1681 blocks. Each "color_class" allows the designer to name an arbitrary
1682 group of colors to be used in the theme, the application can use that
1683 name to alter the color values at runtime.
1687 ob_color_class(void)
1689 Edje_Color_Class *cc;
1691 cc = mem_alloc(SZ(Edje_Color_Class));
1692 edje_file->color_classes = eina_list_append(edje_file->color_classes, cc);
1716 Sets the name for the color class, used as reference by both the theme
1717 and the application.
1721 st_color_class_name(void)
1723 Edje_Color_Class *cc, *tcc;
1726 cc = eina_list_data_get(eina_list_last(edje_file->color_classes));
1727 cc->name = parse_str(0);
1728 EINA_LIST_FOREACH(edje_file->color_classes, l, tcc)
1730 if ((cc != tcc) && (!strcmp(cc->name, tcc->name)))
1732 ERR("parse error %s:%i. There is already a color class named \"%s\"",
1733 file_in, line - 1, cc->name);
1744 [red] [green] [blue] [alpha]
1750 st_color_class_color(void)
1752 Edje_Color_Class *cc;
1756 cc = eina_list_data_get(eina_list_last(edje_file->color_classes));
1757 cc->r = parse_int_range(0, 0, 255);
1758 cc->g = parse_int_range(1, 0, 255);
1759 cc->b = parse_int_range(2, 0, 255);
1760 cc->a = parse_int_range(3, 0, 255);
1768 [red] [green] [blue] [alpha]
1770 Used as shadow in text and textblock parts.
1774 st_color_class_color2(void)
1776 Edje_Color_Class *cc;
1780 cc = eina_list_data_get(eina_list_last(edje_file->color_classes));
1781 cc->r2 = parse_int_range(0, 0, 255);
1782 cc->g2 = parse_int_range(1, 0, 255);
1783 cc->b2 = parse_int_range(2, 0, 255);
1784 cc->a2 = parse_int_range(3, 0, 255);
1792 [red] [green] [blue] [alpha]
1794 Used as outline in text and textblock parts.
1798 st_color_class_color3(void)
1800 Edje_Color_Class *cc;
1804 cc = eina_list_data_get(eina_list_last(edje_file->color_classes));
1805 cc->r3 = parse_int_range(0, 0, 255);
1806 cc->g3 = parse_int_range(1, 0, 255);
1807 cc->b3 = parse_int_range(2, 0, 255);
1808 cc->a3 = parse_int_range(3, 0, 255);
1819 base: "..default style properties..";
1821 tag: "tagname" "..style properties..";
1827 The "styles" block contains a list of one or more "style" blocks. A
1828 "style" block is used to create style \<tags\> for advanced TEXTBLOCK
1833 ob_styles_style(void)
1837 stl = mem_alloc(SZ(Edje_Style));
1838 edje_file->styles = eina_list_append(edje_file->styles, stl);
1848 The name of the style to be used as reference later in the theme.
1852 st_styles_style_name(void)
1854 Edje_Style *stl, *tstl;
1857 stl = eina_list_data_get(eina_list_last(edje_file->styles));
1858 stl->name = parse_str(0);
1859 EINA_LIST_FOREACH(edje_file->styles, l, tstl)
1861 if (stl->name && tstl->name && (stl != tstl) && (!strcmp(stl->name, tstl->name)))
1863 ERR("parse error %s:%i. There is already a style named \"%s\"",
1864 file_in, line - 1, stl->name);
1875 [style properties string]
1877 The default style properties that will be applied to the complete
1882 st_styles_style_base(void)
1885 Edje_Style_Tag *tag;
1887 stl = eina_list_data_get(eina_list_last(edje_file->styles));
1890 ERR("parse error %s:%i. There is already a basic format for the style",
1894 tag = mem_alloc(SZ(Edje_Style_Tag));
1895 tag->key = mem_strdup("DEFAULT");
1896 tag->value = parse_str(0);
1897 stl->tags = eina_list_append(stl->tags, tag);
1905 [tag name] [style properties string]
1907 Style to be applied only to text between style \<tags\>..\</tags\>.
1908 When creating "paired" tags, like \<bold\>\</bold\>, A '+' should be added at the start of the style properties of the first part (\<bold\>).
1909 If the second part (\</bold\>) is also defined, a '-' should be prepended to it's style properties.
1910 This only applies to paired tags; Single tags, like \<tab\>, must not include a starting '+'.
1914 st_styles_style_tag(void)
1917 Edje_Style_Tag *tag;
1919 stl = eina_list_data_get(eina_list_last(edje_file->styles));
1920 tag = mem_alloc(SZ(Edje_Style_Tag));
1921 tag->key = parse_str(0);
1922 tag->value = parse_str(1);
1923 stl->tags = eina_list_append(stl->tags, tag);
1939 The "collections" block is used to list the groups that compose the
1940 theme. Additional "collections" blocks do not prevent overriding group
1941 names. The "sounds" block comprises of all sound definitions.
1945 ob_collections(void)
1947 if (!edje_file->collection)
1948 edje_file->collection = eina_hash_string_small_new(NULL);
1958 name: "sound_file1" COMP;
1959 source: "sound_file1.wav";
1962 name: "sound_file2" LOSSY 0.4;
1963 source: "sound_file2.wav";
1965 tone: "tone-1" 2300;
1969 The "sounds" block contains a list of one or more sound sample and tones items.
1975 name: "sound_file1" RAW;
1976 source: "sound_file1.wav";
1979 name: "sound_file2" LOSSY 0.5;
1980 source: "sound_file2.wav";
1983 name: "sound_file3" COMP;
1984 source: "sound_file3.wav";
1987 name: "sound_file4" AS_IS;
1988 source: "sound_file1.wav";
1991 The sample block defines the sound sample.
1996 [sample name] [compression type] [if lossy, then quality]
1998 Used to include each sound file. The full path to the directory holding
1999 the sounds can be defined later with edje_cc's "-sd" option.
2000 @li RAW: Uncompressed.
2001 @li COMP: Lossless compression.
2002 @li LOSSY [-0.1 - 1.0]: Lossy compression with quality from 0 to 1.0.
2003 @li AS_IS: Check for re-encoding, no compression/encoding, just write the file information as it is.
2008 st_collections_group_sound_sample_name(void)
2010 Edje_Sound_Sample *sample;
2014 if (!edje_file->sound_dir)
2015 edje_file->sound_dir = mem_alloc(SZ(Edje_Sound_Directory));
2019 for (i = 0; i < edje_file->sound_dir->samples_count; i++)
2021 if (!strcmp(edje_file->sound_dir->samples[i].name, tmp))
2028 edje_file->sound_dir->samples_count++;
2029 edje_file->sound_dir->samples =
2030 realloc(edje_file->sound_dir->samples,
2031 sizeof(Edje_Sound_Sample) *
2032 edje_file->sound_dir->samples_count);
2034 if (!edje_file->sound_dir->samples)
2036 ERR("No enough memory.");
2041 edje_file->sound_dir->samples +
2042 edje_file->sound_dir->samples_count - 1;
2043 memset(sample, 0, sizeof (Edje_Sound_Sample));
2046 sample->id = edje_file->sound_dir->samples_count - 1;
2047 sample->compression = parse_enum(1,
2048 "RAW", EDJE_SOUND_SOURCE_TYPE_INLINE_RAW,
2049 "COMP", EDJE_SOUND_SOURCE_TYPE_INLINE_COMP,
2050 "LOSSY", EDJE_SOUND_SOURCE_TYPE_INLINE_LOSSY,
2051 "AS_IS", EDJE_SOUND_SOURCE_TYPE_INLINE_AS_IS,
2054 if (sample->compression == EDJE_SOUND_SOURCE_TYPE_INLINE_LOSSY)
2056 sample->quality = parse_float_range(2, 45.0, 1000.0);
2071 The Sound source file name (Source can be mono/stereo WAV file.
2072 Only files with 44.1 KHz sample rate supported now)
2077 st_collections_group_sound_sample_source(void)
2079 Edje_Sound_Sample *sample;
2081 if (!edje_file->sound_dir->samples)
2083 ERR("Invalid sound sample source definition.");
2088 edje_file->sound_dir->samples +
2089 edje_file->sound_dir->samples_count - 1;
2093 ERR("Invalid sound sample source definition.");
2096 sample->snd_src = parse_str(0);
2105 [tone name] [frequency]
2107 sound of specific frequency
2112 st_collections_group_sound_tone(void)
2114 Edje_Sound_Tone *tone;
2121 if (!edje_file->sound_dir)
2122 edje_file->sound_dir = mem_alloc(SZ(Edje_Sound_Directory));
2125 /* Audible range 20 to 20KHz */
2126 value = parse_int_range(1, 20, 20000);
2128 /* Check for Tone duplication */
2129 for (i = 0; i < edje_file->sound_dir->tones_count; i++)
2131 if (!strcmp(edje_file->sound_dir->tones[i].name, tmp))
2133 ERR("Tone name: %s already exist.", tmp);
2137 if (edje_file->sound_dir->tones[i].value == value)
2139 ERR("Tone name %s with same frequency %d exist.",
2140 edje_file->sound_dir->tones[i].name, value);
2144 edje_file->sound_dir->tones_count++;
2145 edje_file->sound_dir->tones =
2146 realloc(edje_file->sound_dir->tones,
2147 sizeof (Edje_Sound_Tone) *
2148 edje_file->sound_dir->tones_count);
2150 if (!edje_file->sound_dir->tones)
2152 ERR("No enough memory.");
2156 tone = edje_file->sound_dir->tones + edje_file->sound_dir->tones_count - 1;
2157 memset(tone, 0, sizeof (Edje_Sound_Tone));
2160 tone->value = value;
2161 tone->id = edje_file->sound_dir->tones_count - 1;
2165 @edcsection{group,Group sub blocks}
2176 name: "nameusedbytheapplication";
2177 alias: "anothername";
2189 A "group" block contains the list of parts and programs that compose a
2194 ob_collections_group(void)
2196 Edje_Part_Collection *pc;
2199 if (current_de && !current_de->entry)
2201 ERR("A collection without a name was detected, that's not allowed.");
2205 current_de = mem_alloc(SZ(Edje_Part_Collection_Directory_Entry));
2206 current_de->id = eina_list_count(edje_collections);
2208 pc = mem_alloc(SZ(Edje_Part_Collection));
2209 edje_collections = eina_list_append(edje_collections, pc);
2210 pc->id = current_de->id;
2211 pc->broadcast_signal = EINA_TRUE; /* This was the behaviour by default in Edje 1.1 */
2213 cd = mem_alloc(SZ(Code));
2214 codes = eina_list_append(codes, cd);
2224 The name that will be used by the application to load the resulting
2225 Edje object and to identify the group to swallow in a GROUP part. If a
2226 group with the same name exists already it will be completely overriden
2231 st_collections_group_name(void)
2233 Edje_Part_Collection_Directory_Entry *alias;
2234 Edje_Part_Collection_Directory_Entry *older;
2235 Edje_Part_Collection *current_pc;
2236 Eina_List *l = NULL;
2240 current_pc = eina_list_data_get(eina_list_last(edje_collections));
2242 current_de->entry = parse_str(0);
2243 current_pc->part = current_de->entry;
2245 older = eina_hash_find(edje_file->collection, current_de->entry);
2246 if (older) eina_hash_del(edje_file->collection, current_de->entry, older);
2247 eina_hash_direct_add(edje_file->collection, current_de->entry, current_de);
2250 EINA_LIST_FOREACH(aliases, l, alias)
2251 if (strcmp(alias->entry, current_de->entry) == 0)
2253 Edje_Part_Collection *pc;
2255 pc = eina_list_nth(edje_collections, older->id);
2256 INF("overriding alias ('%s' => '%s') by group '%s'",
2257 alias->entry, pc->part,
2259 aliases = eina_list_remove_list(aliases, l);
2266 typedef struct _Edje_List_Foreach_Data Edje_List_Foreach_Data;
2267 struct _Edje_List_Foreach_Data
2273 _edje_data_item_list_foreach(const Eina_Hash *hash __UNUSED__, const void *key, void *data __UNUSED__, void *fdata)
2275 Edje_List_Foreach_Data *fd;
2278 fd->list = eina_list_append(fd->list, strdup(key));
2290 Parent group name for inheritance.
2291 Group "inherit" is used to inherit any predefined group and change
2292 some property which belongs to "part", "description", "items" or "program".
2293 The child group has the same property as parent group. If you specify the
2294 type again in an inherited part, it will cause an error (unless you plan
2300 st_collections_group_inherit(void)
2302 Edje_Part_Collection *pc, *pc2;
2303 Edje_Part *ep, *ep2;
2304 Edje_Part_Parser *epp, *epp2;
2305 Edje_Pack_Element *item, *item2;
2306 Edje_Pack_Element_Parser *pitem;
2307 Edje_Part_Description_Common *ed, *ed2;
2308 Edje_List_Foreach_Data fdata;
2315 pc = eina_list_data_get(eina_list_last(edje_collections));
2317 parent_name = parse_str(0);
2319 EINA_LIST_FOREACH(edje_collections, l, pc2)
2321 if (!strcmp(parent_name, pc2->part))
2326 ERR("parse error %s:%i. There isn't a group with the name %s",
2327 file_in, line - 1, parent_name);
2332 ERR("parse error %s:%i. You are trying to inherit '%s' from itself. That's not possible."
2333 "If there is another group of the same name, you want to inherit from that group and have the"
2334 "same name as that group, there is a trick ! Just put the inherit before the directive that set"
2335 "the name !", file_in, line - 1, parent_name);
2343 memset(&fdata, 0, sizeof(Edje_List_Foreach_Data));
2344 eina_hash_foreach(pc2->data,
2345 _edje_data_item_list_foreach, &fdata);
2347 if (!pc->data) pc->data = eina_hash_string_small_new(free);
2348 EINA_LIST_FREE(fdata.list, key)
2350 data = eina_hash_find(pc2->data, key);
2351 eina_hash_direct_add(pc->data, key, data);
2359 memset(&fdata, 0, sizeof(Edje_List_Foreach_Data));
2360 eina_hash_foreach(pc2->alias,
2361 _edje_data_item_list_foreach, &fdata);
2362 if (!pc->alias) pc->alias = eina_hash_string_small_new(free);
2363 EINA_LIST_FREE(fdata.list, key)
2365 alias = eina_hash_find(pc2->alias, key);
2366 eina_hash_direct_add(pc->alias, key, alias);
2371 char *key, *aliased;
2373 memset(&fdata, 0, sizeof(Edje_List_Foreach_Data));
2374 eina_hash_foreach(pc2->aliased,
2375 _edje_data_item_list_foreach, &fdata);
2376 if (!pc->aliased) pc->aliased = eina_hash_string_small_new(free);
2377 EINA_LIST_FREE(fdata.list, key)
2379 aliased = eina_hash_find(pc2->aliased, key);
2380 eina_hash_direct_add(pc->aliased, key, aliased);
2384 pc->prop.min.w = pc2->prop.min.w;
2385 pc->prop.min.h = pc2->prop.min.h;
2386 pc->prop.orientation = pc2->prop.orientation;
2388 pc->lua_script_only = pc2->lua_script_only;
2390 #define STRDUP(x) x ? strdup(x) : NULL
2391 for (i = 0 ; i < pc2->parts_count ; i++)
2394 ob_collections_group_parts_part();
2396 ep2 = pc2->parts[i];
2397 ep->name = STRDUP(ep2->name);
2398 ep->source = STRDUP(ep2->source);
2399 ep->source2 = STRDUP(ep2->source2);
2400 ep->source3 = STRDUP(ep2->source3);
2401 ep->source4 = STRDUP(ep2->source4);
2402 ep->source5 = STRDUP(ep2->source5);
2403 ep->source6 = STRDUP(ep2->source6);
2405 data_queue_copied_part_lookup(pc, &(ep2->clip_to_id), &(ep->clip_to_id));
2407 ep->type = ep2->type;
2408 ep->mouse_events = ep2->mouse_events;
2409 ep->repeat_events = ep2->repeat_events;
2410 ep->ignore_flags = ep2->ignore_flags;
2411 ep->scale = ep2->scale;
2412 ep->pointer_mode = ep2->pointer_mode;
2413 ep->precise_is_inside = ep2->precise_is_inside;
2414 ep->use_alternate_font_metrics = ep2->use_alternate_font_metrics;
2415 ep->effect = ep2->effect;
2416 ep->entry_mode = ep2->entry_mode;
2417 ep->select_mode = ep2->select_mode;
2418 ep->cursor_mode = ep2->cursor_mode;
2419 ep->multiline = ep2->multiline;
2420 ep->access = ep2->access;
2421 ep->dragable.x = ep2->dragable.x;
2422 ep->dragable.step_x = ep2->dragable.step_x;
2423 ep->dragable.count_x = ep2->dragable.count_x;
2424 ep->dragable.y = ep2->dragable.y;
2425 ep->dragable.step_y = ep2->dragable.step_y;
2426 ep->dragable.count_y = ep2->dragable.count_y;
2428 data_queue_copied_part_lookup(pc, &(ep2->dragable.confine_id), &(ep->dragable.confine_id));
2429 data_queue_copied_part_lookup(pc, &(ep2->dragable.event_id), &(ep->dragable.event_id));
2431 epp = (Edje_Part_Parser *)ep;
2432 epp2 = (Edje_Part_Parser *)ep2;
2433 epp->reorder.insert_before = STRDUP(epp2->reorder.insert_before);
2434 epp->reorder.insert_after = STRDUP(epp2->reorder.insert_after);
2435 epp->can_override = EINA_TRUE;
2437 for (j = 0 ; j < ep2->items_count ; j++)
2439 ob_collections_group_parts_part_box_items_item();
2440 item = ep->items[j];
2441 item2 = ep2->items[j];
2442 item->type = item2->type;
2443 item->name = STRDUP(item2->name);
2444 item->source = STRDUP(item2->source);
2445 item->min.w = item2->min.w;
2446 item->min.h = item2->min.h;
2447 item->prefer.w = item2->prefer.w;
2448 item->prefer.h = item2->prefer.h;
2449 item->max.w = item2->max.w;
2450 item->max.h = item2->max.h;
2451 item->padding.l = item2->padding.l;
2452 item->padding.r = item2->padding.r;
2453 item->padding.t = item2->padding.t;
2454 item->padding.b = item2->padding.b;
2455 item->align.x = item2->align.x;
2456 item->align.y = item2->align.y;
2457 item->weight.x = item2->weight.x;
2458 item->weight.y = item2->weight.y;
2459 item->aspect.w = item2->aspect.w;
2460 item->aspect.h = item2->aspect.h;
2461 item->aspect.mode = item2->aspect.mode;
2462 item->options = STRDUP(item2->options);
2463 item->col = item2->col;
2464 item->row = item2->row;
2465 item->colspan = item2->colspan;
2466 item->rowspan = item2->rowspan;
2468 pitem = (Edje_Pack_Element_Parser *)item;
2469 pitem->can_override = EINA_TRUE;
2472 ep->api.name = STRDUP(ep2->api.name);
2473 if (ep2->api.description) ep->api.description = STRDUP(ep2->api.description);
2475 // copy default description
2476 ob_collections_group_parts_part_description();
2477 ed = ep->default_desc;
2478 parent_desc = ed2 = ep2->default_desc;
2479 ed->state.name = STRDUP(ed2->state.name);
2480 ed->state.value = ed2->state.value;
2481 st_collections_group_parts_part_description_inherit();
2484 // copy other description
2485 for (j = 0 ; j < ep2->other.desc_count ; j++)
2487 ob_collections_group_parts_part_description();
2488 ed = ep->other.desc[j];
2489 parent_desc = ed2 = ep2->other.desc[j];
2490 ed->state.name = STRDUP(ed2->state.name);
2491 ed->state.value = ed2->state.value;
2492 st_collections_group_parts_part_description_inherit();
2498 for (j = 0 ; j < pc2->programs.fnmatch_count ; j++)
2500 ob_collections_group_programs_program();
2501 _edje_program_copy(current_program, pc2->programs.fnmatch[j]);
2503 for (j = 0 ; j < pc2->programs.strcmp_count ; j++)
2505 ob_collections_group_programs_program();
2506 _edje_program_copy(current_program, pc2->programs.strcmp[j]);
2508 for (j = 0 ; j < pc2->programs.strncmp_count ; j++)
2510 ob_collections_group_programs_program();
2511 _edje_program_copy(current_program, pc2->programs.strncmp[j]);
2513 for (j = 0 ; j < pc2->programs.strrncmp_count ; j++)
2515 ob_collections_group_programs_program();
2516 _edje_program_copy(current_program, pc2->programs.strrncmp[j]);
2518 for (j = 0 ; j < pc2->programs.nocmp_count ; j++)
2520 ob_collections_group_programs_program();
2521 _edje_program_copy(current_program, pc2->programs.nocmp[j]);
2525 Code_Program *cp, *cp2;
2526 Edje_Part_Collection_Directory_Entry *de;
2528 de = eina_hash_find(edje_file->collection, pc2->part);
2529 cd2 = eina_list_nth(codes, de->id);
2530 cd = eina_list_data_get(eina_list_last(codes));
2532 EINA_LIST_FOREACH(cd2->programs, l, cp2)
2534 cp = mem_alloc(SZ(Code_Program));
2538 cp->script = STRDUP(cp2->script);
2539 cd->is_lua = cd2->is_lua;
2540 cd->shared = cd2->shared;
2541 cd->programs = eina_list_append(cd->programs, cp);
2542 data_queue_copied_anonymous_lookup(pc, &(cp2->id), &(cp->id));
2556 The flag (on/off) as to if this group is defined ONLY by script
2557 callbacks such as init(), resize() and shutdown()
2561 st_collections_group_script_only(void)
2563 Edje_Part_Collection *pc;
2567 pc = eina_list_data_get(eina_list_last(edje_collections));
2568 pc->lua_script_only = parse_bool(0);
2576 [aditional group name]
2578 Additional name to serve as identifier. Defining multiple aliases is
2583 st_collections_group_alias(void)
2585 Edje_Part_Collection_Directory_Entry *alias;
2586 Edje_Part_Collection_Directory_Entry *tmp;
2591 alias = mem_alloc(SZ(Edje_Part_Collection_Directory_Entry));
2592 alias->id = current_de->id;
2593 alias->entry = parse_str(0);
2595 EINA_LIST_FOREACH(aliases, l, tmp)
2596 if (strcmp(alias->entry, tmp->entry) == 0)
2598 Edje_Part_Collection *pc;
2600 pc = eina_list_nth(edje_collections, tmp->id);
2601 INF("overriding alias ('%s' => '%s') to ('%s' => '%s')",
2602 tmp->entry, pc->part,
2603 alias->entry, current_de->entry);
2604 aliases = eina_list_remove_list(aliases, l);
2609 aliases = eina_list_append(aliases, alias);
2619 The minimum size for the container defined by the composition of the
2620 parts. It is not enforced.
2624 st_collections_group_min(void)
2626 Edje_Part_Collection *pc;
2630 pc = eina_list_data_get(eina_list_last(edje_collections));
2631 pc->prop.min.w = parse_int_range(0, 0, 0x7fffffff);
2632 pc->prop.min.h = parse_int_range(1, 0, 0x7fffffff);
2642 The maximum size for the container defined by the totality of the
2643 parts. It is not enforced.
2647 st_collections_group_max(void)
2649 Edje_Part_Collection *pc;
2653 pc = eina_list_data_get(eina_list_last(edje_collections));
2654 pc->prop.max.w = parse_int_range(0, 0, 0x7fffffff);
2655 pc->prop.max.h = parse_int_range(1, 0, 0x7fffffff);
2665 Signal got automatically broadcasted to all sub group part. Default to
2670 st_collections_group_broadcast_signal(void)
2672 Edje_Part_Collection *pc;
2676 pc = eina_list_data_get(eina_list_last(edje_collections));
2677 pc->broadcast_signal = parse_bool(0);
2700 This block is used to "inject" embryo scripts to a given Edje theme and
2701 it functions in two modalities. When it's included inside a "program"
2702 block, the script will be executed every time the program is run, on
2703 the other hand, when included directly into a "group", "part" or
2704 "description" block, it will be executed once at load time, in the
2709 ob_collections_group_script(void)
2713 cd = eina_list_data_get(eina_list_last(codes));
2715 if (!is_verbatim()) track_verbatim(1);
2723 cd->l1 = get_verbatim_line1();
2724 cd->l2 = get_verbatim_line2();
2727 ERR("parse error %s:%i. There is already an existing script section for the group",
2732 cd->original = strdup(s);
2734 set_verbatim(NULL, 0, 0);
2740 ob_collections_group_lua_script(void)
2744 cd = eina_list_data_get(eina_list_last(codes));
2746 if (!is_verbatim()) track_verbatim(1);
2754 cd->l1 = get_verbatim_line1();
2755 cd->l2 = get_verbatim_line2();
2758 ERR("parse error %s:%i. There is already an existing script section for the group",
2764 set_verbatim(NULL, 0, 0);
2770 st_collections_group_data_item(void)
2772 Edje_Part_Collection *pc;
2778 pc = eina_list_data_get(eina_list_last(edje_collections));
2781 pc->data = eina_hash_string_small_new(free);
2785 es = mem_alloc(SZ(Edje_String));
2786 es->str = parse_str(1);
2788 if (eina_hash_find(pc->data, key))
2789 eina_hash_modify(pc->data, key, es);
2791 eina_hash_direct_add(pc->data, key, es);
2801 This defines GROUP orientation.
2802 This is useful if you want match interface orientation with language.
2803 AUTO - Follow system defs.
2804 LTR - suitable for Left To Right Languages (latin)
2805 RTL - suitable for Right To Left Languages (Hebrew, Arabic interface)
2809 st_collections_group_orientation(void)
2811 Edje_Part_Collection *pc;
2815 pc = eina_list_data_get(eina_list_last(edje_collections));
2816 pc->prop.orientation = parse_enum(0,
2817 "AUTO", EDJE_ORIENTATION_AUTO,
2818 "LTR", EDJE_ORIENTATION_LTR,
2819 "RTL", EDJE_ORIENTATION_RTL,
2830 vertical: "limit_name" height_barrier;
2831 horizontal: "limit_name" width_barrier;
2838 This block is used to trigger some signal when the Edje object is resized.
2845 [name] [height barrier]
2847 It will send a signal: "limit,name,over" when the object is resized and pass
2848 the limit by growing over it. And it will send: "limit,name,below" when
2849 it pass below that limit.
2850 This limit will be applied on the y absis and is expressed in pixels.
2854 st_collections_group_limits_vertical(void)
2856 Edje_Part_Collection *pc;
2861 el = mem_alloc(SZ(Edje_Limit));
2863 pc = eina_list_data_get(eina_list_last(edje_collections));
2864 pc->limits.vertical_count++;
2865 pc->limits.vertical = realloc(pc->limits.vertical, pc->limits.vertical_count * sizeof (Edje_Limit *));
2866 if (!pc->limits.vertical || !el)
2868 ERR("Not enough memory.");
2872 pc->limits.vertical[pc->limits.vertical_count - 1] = el;
2874 el->name = parse_str(0);
2875 el->value = parse_int_range(1, 1, 0xffff);
2883 [name] [width barrier]
2885 It will send a signal: "limit,name,over" when the object is resized and pass
2886 the limit by growing over it. And it will send: "limit,name,below" when
2887 it pass below that limit.
2888 This limit will be applied on the x absis and is expressed in pixels.
2892 st_collections_group_limits_horizontal(void)
2894 Edje_Part_Collection *pc;
2899 el = mem_alloc(SZ(Edje_Limit));
2901 pc = eina_list_data_get(eina_list_last(edje_collections));
2902 pc->limits.horizontal_count++;
2903 pc->limits.horizontal = realloc(pc->limits.horizontal, pc->limits.horizontal_count * sizeof (Edje_Limit *));
2904 if (!pc->limits.horizontal || !el)
2906 ERR("Not enough memory.");
2910 pc->limits.horizontal[pc->limits.horizontal_count - 1] = el;
2912 el->name = parse_str(0);
2913 el->value = parse_int_range(1, 1, 0xffff);
2923 alias: "theme_part_path" "real_part_path";
2928 Alias of part give a chance to let the designer put the real one
2929 in a box or reuse one from a GROUP or inside a BOX.
2933 st_collections_group_parts_alias(void)
2935 Edje_Part_Collection *pc;
2937 const char *aliased;
2941 pc = eina_list_data_get(eina_list_last(edje_collections));
2943 alias = parse_str(0);
2944 aliased = parse_str(1);
2946 if (!pc->alias) pc->alias = eina_hash_string_small_new(NULL);
2947 eina_hash_add(pc->alias, alias, aliased);
2949 if (!pc->aliased) pc->aliased = eina_hash_string_small_new(NULL);
2950 eina_hash_add(pc->aliased, aliased, alias);
2968 clip_to: "anotherpart";
2969 source: "groupname";
2970 pointer_mode: AUTOGRAB;
2971 use_alternate_font_metrics: 0;
2981 Parts are used to represent the most basic design elements of the
2982 theme, for example, a part can represent a line in a border or a label
2987 ob_collections_group_parts_part(void)
2989 Edje_Part_Collection *pc;
2991 Edje_Part_Parser *epp;
2993 ep = mem_alloc(SZ(Edje_Part_Parser));
2995 pc = eina_list_data_get(eina_list_last(edje_collections));
2997 pc->parts = realloc(pc->parts, pc->parts_count * sizeof (Edje_Part *));
3000 ERR("Not enough memory.");
3003 current_part = pc->parts[pc->parts_count - 1] = ep;
3005 ep->id = pc->parts_count - 1;
3006 ep->type = EDJE_PART_TYPE_IMAGE;
3007 ep->mouse_events = 1;
3008 ep->repeat_events = 0;
3009 ep->ignore_flags = EVAS_EVENT_FLAG_NONE;
3011 ep->pointer_mode = EVAS_OBJECT_POINTER_MODE_AUTOGRAB;
3012 ep->precise_is_inside = 0;
3013 ep->use_alternate_font_metrics = 0;
3015 ep->clip_to_id = -1;
3016 ep->dragable.confine_id = -1;
3017 ep->dragable.event_id = -1;
3020 epp = (Edje_Part_Parser *)ep;
3021 epp->reorder.insert_before = NULL;
3022 epp->reorder.insert_after = NULL;
3023 epp->reorder.before = NULL;
3024 epp->reorder.after = NULL;
3025 epp->reorder.linked_prev = 0;
3026 epp->reorder.linked_next = 0;
3027 epp->reorder.done = EINA_FALSE;
3028 epp->can_override = EINA_FALSE;
3038 The part's name will be used as reference in the theme's relative
3039 positioning system, by programs and in some cases by the application.
3040 It must be unique within the group.
3044 st_collections_group_parts_part_name(void)
3046 Edje_Part_Collection *pc;
3048 Edje_Part_Parser *epp;
3052 pc = eina_list_data_get(eina_list_last(edje_collections));
3054 ep->name = parse_str(0);
3060 for (i = 0; i < (pc->parts_count - 1); i++)
3062 if (pc->parts[i]->name && (!strcmp(pc->parts[i]->name, ep->name)))
3064 epp = (Edje_Part_Parser *)pc->parts[i];
3065 if (!epp->can_override)
3067 ERR("parse error %s:%i. There is already a part of the name %s",
3068 file_in, line - 1, ep->name);
3075 pc->parts = realloc(pc->parts, pc->parts_count * sizeof (Edje_Part *));
3076 ep = current_part = pc->parts[i];
3077 epp->can_override = EINA_FALSE;
3092 Set the type (all caps) from among the available types, it's set to
3093 IMAGE by default. Valid types:
3108 st_collections_group_parts_part_type(void)
3114 type = parse_enum(0,
3115 "NONE", EDJE_PART_TYPE_NONE,
3116 "RECT", EDJE_PART_TYPE_RECTANGLE,
3117 "TEXT", EDJE_PART_TYPE_TEXT,
3118 "IMAGE", EDJE_PART_TYPE_IMAGE,
3119 "SWALLOW", EDJE_PART_TYPE_SWALLOW,
3120 "TEXTBLOCK", EDJE_PART_TYPE_TEXTBLOCK,
3121 "GROUP", EDJE_PART_TYPE_GROUP,
3122 "BOX", EDJE_PART_TYPE_BOX,
3123 "TABLE", EDJE_PART_TYPE_TABLE,
3124 "EXTERNAL", EDJE_PART_TYPE_EXTERNAL,
3125 "PROXY", EDJE_PART_TYPE_PROXY,
3126 "SPACER", EDJE_PART_TYPE_SPACER,
3129 /* handle type change of inherited part */
3130 if (type != current_part->type)
3132 Edje_Part_Description_Common *new, *previous;
3133 Edje_Part_Collection *pc;
3137 /* we don't free old part as we don't remove all reference to them */
3138 part_description_image_cleanup(current_part);
3140 pc = eina_list_data_get(eina_list_last(edje_collections));
3143 previous = ep->default_desc;
3146 new = _edje_part_description_alloc(type, pc->part, ep->name);
3147 memcpy(new, previous, sizeof (Edje_Part_Description_Common));
3149 ep->default_desc = new;
3152 for (i = 0; i < ep->other.desc_count; i++)
3154 previous = ep->other.desc[i];
3155 new = _edje_part_description_alloc(type, pc->part, ep->name);
3156 memcpy(new, previous, sizeof (Edje_Part_Description_Common));
3157 ep->other.desc[i] = new;
3161 current_part->type = type;
3169 [another part's name]
3171 The part's name which this part is inserted before. One part cannot
3172 have both insert_before and insert_after. One part cannot refer
3173 more than one by insert_before.
3178 st_collections_group_parts_part_insert_before(void)
3180 Edje_Part_Parser *epp;
3183 epp = (Edje_Part_Parser *)current_part;
3184 epp->reorder.insert_before = parse_str(0);
3192 [another part's name]
3194 The part's name which this part is inserted after. One part cannot
3195 have both insert_before and insert_after. One part cannot refer
3196 more than one by insert_after.
3201 st_collections_group_parts_part_insert_after(void)
3203 Edje_Part_Parser *epp;
3206 epp = (Edje_Part_Parser *)current_part;
3207 epp->reorder.insert_after = parse_str(0);
3217 Specifies whether the part will emit signals, although it is named
3218 "mouse_events", disabling it (0) will prevent the part from emitting
3219 any type of signal at all. It's set to 1 by default.
3223 st_collections_group_parts_part_mouse_events(void)
3227 current_part->mouse_events = parse_bool(0);
3237 Specifies whether a part echoes a mouse event to other parts below the
3238 pointer (1), or not (0). It's set to 0 by default.
3242 st_collections_group_parts_part_repeat_events(void)
3246 current_part->repeat_events = parse_bool(0);
3256 Specifies whether events with the given flags should be ignored,
3257 i.e., will not have the signals emitted to the parts. Multiple flags
3258 must be separated by spaces, the effect will be ignoring all events
3259 with one of the flags specified. Possible flags:
3260 @li NONE (default value, no event will be ignored)
3265 st_collections_group_parts_part_ignore_flags(void)
3267 check_min_arg_count(1);
3269 current_part->ignore_flags = parse_flags(0,
3270 "NONE", EVAS_EVENT_FLAG_NONE,
3271 "ON_HOLD", EVAS_EVENT_FLAG_ON_HOLD,
3282 Specifies whether the part will scale its size with an edje scaling
3283 factor. By default scale is off (0) and the default scale factor is
3284 1.0 - that means no scaling. This would be used to scale properties
3285 such as font size, min/max size of the part, and possibly can be used
3286 to scale based on DPI of the target device. The reason to be selective
3287 is that some things work well being scaled, others do not, so the
3288 designer gets to choose what works best.
3292 st_collections_group_parts_part_scale(void)
3296 current_part->scale = parse_bool(0);
3306 Sets the mouse pointer behavior for a given part. The default value is
3307 AUTOGRAB. Aviable modes:
3308 @li AUTOGRAB, when the part is clicked and the button remains
3309 pressed, the part will be the source of all future mouse
3310 signals emitted, even outside the object, until the button is
3312 @li NOGRAB, the effect will be limited to the part's container.
3316 st_collections_group_parts_part_pointer_mode(void)
3320 current_part->pointer_mode = parse_enum(0,
3321 "AUTOGRAB", EVAS_OBJECT_POINTER_MODE_AUTOGRAB,
3322 "NOGRAB", EVAS_OBJECT_POINTER_MODE_NOGRAB,
3333 Enables precise point collision detection for the part, which is more
3334 resource intensive. Disabled by default.
3338 st_collections_group_parts_part_precise_is_inside(void)
3342 current_part->precise_is_inside = parse_bool(0);
3348 use_alternate_font_metrics
3352 Only affects text and textblock parts, when enabled Edje will use
3353 different size measurement functions. Disabled by default. (note from
3354 the author: I don't know what this is exactly useful for?)
3358 st_collections_group_parts_part_use_alternate_font_metrics(void)
3362 current_part->use_alternate_font_metrics = parse_bool(0);
3370 [another part's name]
3372 Only renders the area of part that coincides with another part's
3373 container. Overflowing content will not be displayed. Note that
3374 the part being clipped to can only be a rectangle part.
3378 st_collections_group_parts_part_clip_to_id(void)
3380 Edje_Part_Collection *pc;
3384 pc = eina_list_data_get(eina_list_last(edje_collections));
3388 name = parse_str(0);
3389 data_queue_part_lookup(pc, name, &(current_part->clip_to_id));
3399 [another group's name]
3401 Only available to GROUP or TEXTBLOCK parts. Swallows the specified
3402 group into the part's container if a GROUP. If TEXTBLOCK it is used
3403 for the group to be loaded and used for selection display UNDER the
3404 selected text. source2 is used for on top of the selected text, if
3405 source2 is specified.
3409 st_collections_group_parts_part_source(void)
3413 //FIXME: validate this somehow (need to decide on the format also)
3414 current_part->source = parse_str(0);
3415 data_queue_group_lookup(current_part->source, current_part);
3423 [another group's name]
3425 Only available to TEXTBLOCK parts. It is used for the group to be
3426 loaded and used for selection display OVER the selected text. source
3427 is used for under of the selected text, if source is specified.
3431 st_collections_group_parts_part_source2(void)
3435 //FIXME: validate this somehow (need to decide on the format also)
3436 current_part->source2 = parse_str(0);
3437 data_queue_group_lookup(current_part->source2, current_part);
3445 [another group's name]
3447 Only available to TEXTBLOCK parts. It is used for the group to be
3448 loaded and used for cursor display UNDER the cursor position. source4
3449 is used for over the cursor text, if source4 is specified.
3453 st_collections_group_parts_part_source3(void)
3457 //FIXME: validate this somehow (need to decide on the format also)
3458 current_part->source3 = parse_str(0);
3459 data_queue_group_lookup(current_part->source3, current_part);
3467 [another group's name]
3469 Only available to TEXTBLOCK parts. It is used for the group to be
3470 loaded and used for cursor display OVER the cursor position. source3
3471 is used for under the cursor text, if source4 is specified.
3475 st_collections_group_parts_part_source4(void)
3479 //FIXME: validate this somehow (need to decide on the format also)
3480 current_part->source4 = parse_str(0);
3481 data_queue_group_lookup(current_part->source4, current_part);
3489 [another group's name]
3491 Only available to TEXTBLOCK parts. It is used for the group to be
3492 loaded and used for anchors display UNDER the anchor position. source6
3493 is used for over the anchors text, if source6 is specified.
3497 st_collections_group_parts_part_source5(void)
3501 //FIXME: validate this somehow (need to decide on the format also)
3502 current_part->source5 = parse_str(0);
3503 data_queue_group_lookup(current_part->source5, current_part);
3511 [another group's name]
3513 Only available to TEXTBLOCK parts. It is used for the group to be
3514 loaded and used for anchor display OVER the anchor position. source5
3515 is used for under the anchor text, if source6 is specified.
3519 st_collections_group_parts_part_source6(void)
3523 //FIXME: validate this somehow (need to decide on the format also)
3524 current_part->source6 = parse_str(0);
3525 data_queue_group_lookup(current_part->source6, current_part);
3535 (optional) [SHADOW DIRECTION]
3537 Causes Edje to draw the selected effect among:
3544 @li OUTLINE_SOFT_SHADOW
3549 Shadow directions (default if not given is BOTTOM_RIGHT):
3561 st_collections_group_parts_part_effect(void)
3563 check_min_arg_count(1);
3565 current_part->effect = parse_enum(0,
3566 "NONE", EDJE_TEXT_EFFECT_NONE,
3567 "PLAIN", EDJE_TEXT_EFFECT_PLAIN,
3568 "OUTLINE", EDJE_TEXT_EFFECT_OUTLINE,
3569 "SOFT_OUTLINE", EDJE_TEXT_EFFECT_SOFT_OUTLINE,
3570 "SHADOW", EDJE_TEXT_EFFECT_SHADOW,
3571 "SOFT_SHADOW", EDJE_TEXT_EFFECT_SOFT_SHADOW,
3572 "OUTLINE_SHADOW", EDJE_TEXT_EFFECT_OUTLINE_SHADOW,
3573 "OUTLINE_SOFT_SHADOW", EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW,
3574 "FAR_SHADOW", EDJE_TEXT_EFFECT_FAR_SHADOW,
3575 "FAR_SOFT_SHADOW", EDJE_TEXT_EFFECT_FAR_SOFT_SHADOW,
3576 "GLOW", EDJE_TEXT_EFFECT_GLOW,
3578 if (get_arg_count() >= 2)
3580 unsigned char shadow;
3582 shadow = parse_enum(1,
3583 "BOTTOM_RIGHT", EDJE_TEXT_EFFECT_SHADOW_DIRECTION_BOTTOM_RIGHT,
3584 "BOTTOM", EDJE_TEXT_EFFECT_SHADOW_DIRECTION_BOTTOM,
3585 "BOTTOM_LEFT", EDJE_TEXT_EFFECT_SHADOW_DIRECTION_BOTTOM_LEFT,
3586 "LEFT", EDJE_TEXT_EFFECT_SHADOW_DIRECTION_LEFT,
3587 "TOP_LEFT", EDJE_TEXT_EFFECT_SHADOW_DIRECTION_TOP_LEFT,
3588 "TOP", EDJE_TEXT_EFFECT_SHADOW_DIRECTION_TOP,
3589 "TOP_RIGHT", EDJE_TEXT_EFFECT_SHADOW_DIRECTION_TOP_RIGHT,
3590 "RIGHT", EDJE_TEXT_EFFECT_SHADOW_DIRECTION_RIGHT,
3592 EDJE_TEXT_EFFECT_SHADOW_DIRECTION_SET(current_part->effect, shadow);
3603 Sets the edit mode for a textblock part to one of:
3608 It causes the part be editable if the edje object has the keyboard
3609 focus AND the part has the edje focus (or selectable always
3610 regardless of focus) and in the event of password mode, not
3611 selectable and all text chars replaced with *'s but editable and
3616 st_collections_group_parts_part_entry_mode(void)
3620 current_part->entry_mode = parse_enum(0,
3621 "NONE", EDJE_ENTRY_EDIT_MODE_NONE,
3622 "PLAIN", EDJE_ENTRY_EDIT_MODE_SELECTABLE,
3623 "EDITABLE", EDJE_ENTRY_EDIT_MODE_EDITABLE,
3624 "PASSWORD", EDJE_ENTRY_EDIT_MODE_PASSWORD,
3635 Sets the selection mode for a textblock part to one of:
3636 @li DEFAULT selection mode is what you would expect on any desktop. Press
3637 mouse, drag and release to end.
3638 @li EXPLICIT mode requires the application
3639 controlling the edje object has to explicitly begin and end selection
3640 modes, and the selection itself is dragable at both ends.
3641 @li BLOCK_HANDLE mode is the same as DEFAULT, it is for backward-compatibility.
3645 st_collections_group_parts_part_select_mode(void)
3649 current_part->select_mode = parse_enum(0,
3650 "DEFAULT", EDJE_ENTRY_SELECTION_MODE_DEFAULT,
3651 "EXPLICIT", EDJE_ENTRY_SELECTION_MODE_EXPLICIT,
3652 "BLOCK_HANDLE", EDJE_ENTRY_SELECTION_MODE_DEFAULT,
3663 Sets the cursor mode for a textblock part to one of:
3664 @li UNDER cursor mode means the cursor will draw below the character pointed
3665 at. That's the default.
3666 @li BEFORE cursor mode means the cursor is drawn as a vertical line before
3667 the current character, just like many other GUI toolkits handle it.
3671 st_collections_group_parts_part_cursor_mode(void)
3675 current_part->cursor_mode = parse_enum(0,
3676 "UNDER", EDJE_ENTRY_CURSOR_MODE_UNDER,
3677 "BEFORE", EDJE_ENTRY_CURSOR_MODE_BEFORE,
3688 It causes a textblock that is editable to allow multiple lines for
3693 st_collections_group_parts_part_multiline(void)
3697 current_part->multiline = parse_bool(0);
3707 Specifies whether the part will use accessibility feature (1),
3708 or not (0). It's set to 0 by default.
3712 st_collections_group_parts_part_access(void)
3716 current_part->access = parse_bool(0);
3727 confine: "another part";
3728 events: "another dragable part";
3735 When this block is used the resulting part can be dragged around the
3736 interface, do not confuse with external drag & drop. By default Edje
3737 (and most applications) will attempt to use the minimal size possible
3738 for a dragable part. If the min property is not set in the description
3739 the part will be (most likely) set to 0px width and 0px height, thus
3746 [enable/disable] [step] [count]
3748 Used to setup dragging events for the X axis. The first parameter is
3749 used to enable (1 or -1) and disable (0) dragging along the axis. When
3750 enabled, 1 will set the starting point at 0.0 and -1 at 1.0. The second
3751 parameter takes any integer and will limit movement to values
3752 divisible by it, causing the part to jump from position to position.
3753 The third parameter, (question from the author: What is count for?).
3757 st_collections_group_parts_part_dragable_x(void)
3761 current_part->dragable.x = parse_int_range(0, -1, 1);
3762 current_part->dragable.step_x = parse_int_range(1, 0, 0x7fffffff);
3763 current_part->dragable.count_x = parse_int_range(2, 0, 0x7fffffff);
3771 [enable/disable] [step] [count]
3773 Used to setup dragging events for the Y axis. The first parameter is
3774 used to enable (1 or -1) and disable (0) dragging along the axis. When
3775 enabled, 1 will set the starting point at 0.0 and -1 at 1.0. The second
3776 parameter takes any integer and will limit movement to values
3777 divisibles by it, causing the part to jump from position to position.
3778 The third parameter, (question from the author: What is count for?).
3782 st_collections_group_parts_part_dragable_y(void)
3786 current_part->dragable.y = parse_int_range(0, -1, 1);
3787 current_part->dragable.step_y = parse_int_range(1, 0, 0x7fffffff);
3788 current_part->dragable.count_y = parse_int_range(2, 0, 0x7fffffff);
3796 [another part's name]
3798 When set, limits the movement of the dragged part to another part's
3799 container. When you use confine don't forget to set a min size for the
3800 part, or the draggie will not show up.
3804 st_collections_group_parts_part_dragable_confine(void)
3806 Edje_Part_Collection *pc;
3810 pc = eina_list_data_get(eina_list_last(edje_collections));
3814 name = parse_str(0);
3815 data_queue_part_lookup(pc, name, &(current_part->dragable.confine_id));
3825 [another dragable part's name]
3827 It causes the part to forward the drag events to another part, thus
3828 ignoring them for itself.
3832 st_collections_group_parts_part_dragable_events(void)
3834 Edje_Part_Collection *pc;
3838 pc = eina_list_data_get(eina_list_last(edje_collections));
3842 name = parse_str(0);
3843 data_queue_part_lookup(pc, name, &(current_part->dragable.event_id));
3859 source: "some source";
3866 source: "some other source";
3876 On a part of type BOX, this block can be used to set other groups
3877 as elements of the box. These can be mixed with external objects set
3878 by the application through the edje_object_part_box_* API.
3881 static void ob_collections_group_parts_part_box_items_item(void)
3884 Edje_Pack_Element *item;
3885 Edje_Pack_Element_Parser *pitem;
3889 if ((ep->type != EDJE_PART_TYPE_BOX) && (ep->type != EDJE_PART_TYPE_TABLE))
3891 ERR("parse error %s:%i. box attributes in non-BOX or TABLE part.",
3897 ep->items = realloc(ep->items, sizeof (Edje_Pack_Element*) * ep->items_count);
3900 ERR("Not enough memory.");
3904 item = mem_alloc(SZ(Edje_Pack_Element_Parser));
3905 current_item = ep->items[ep->items_count - 1] = item;
3906 item->type = EDJE_PART_TYPE_GROUP;
3908 item->source = NULL;
3915 item->padding.l = 0;
3916 item->padding.r = 0;
3917 item->padding.t = 0;
3918 item->padding.b = 0;
3919 item->align.x = FROM_DOUBLE(0.5);
3920 item->align.y = FROM_DOUBLE(0.5);
3921 item->weight.x = FROM_DOUBLE(0.0);
3922 item->weight.y = FROM_DOUBLE(0.0);
3925 item->aspect.mode = EDJE_ASPECT_CONTROL_NONE;
3926 item->options = NULL;
3931 pitem = (Edje_Pack_Element_Parser *)item;
3932 pitem->can_override = EINA_FALSE;
3940 Only GROUP for now (defaults to it)
3942 Sets the type of the object this item will hold.
3945 static void st_collections_group_parts_part_box_items_item_type(void)
3953 if (strcmp(s, "GROUP"))
3955 ERR("parse error %s:%i. token %s not one of: GROUP.",
3956 file_in, line - 1, s);
3959 /* FIXME: handle the enum, once everything else is supported */
3960 current_item->type = EDJE_PART_TYPE_GROUP;
3969 [name for the object]
3971 Sets the name of the object via evas_object_name_set().
3974 static void st_collections_group_parts_part_box_items_item_name(void)
3977 Edje_Pack_Element *item;
3978 Edje_Pack_Element_Parser *pitem;
3983 item = ep->items[ep->items_count - 1];
3985 item->name = parse_str(0);
3990 for (i = 0; i < ep->items_count - 1; ++i)
3992 if (ep->items[i]->name && (!strcmp(ep->items[i]->name, item->name)))
3994 pitem = (Edje_Pack_Element_Parser *)ep->items[i];
3995 if (!pitem->can_override)
3997 ERR("parse error %s:%i. There is already a item of the name %s",
3998 file_in, line - 1, item->name);
4005 ep->items = realloc(ep->items, ep->items_count * sizeof (Edje_Pack_Element *));
4006 current_item = ep->items[i];
4007 pitem->can_override = EINA_FALSE;
4019 [another group's name]
4021 Sets the group this object will be made from.
4024 static void st_collections_group_parts_part_box_items_item_source(void)
4028 current_item->source = parse_str(0);
4029 data_queue_group_lookup(current_item->source, current_part);
4039 Sets the minimum size hints for this object.
4042 static void st_collections_group_parts_part_box_items_item_min(void)
4046 current_item->min.w = parse_int_range(0, 0, 0x7ffffff);
4047 current_item->min.h = parse_int_range(1, 0, 0x7ffffff);
4057 Sets the preferred size hints for this object.
4060 static void st_collections_group_parts_part_box_items_item_prefer(void)
4064 current_item->prefer.w = parse_int_range(0, 0, 0x7ffffff);
4065 current_item->prefer.h = parse_int_range(1, 0, 0x7ffffff);
4074 Sets the maximum size hints for this object.
4077 static void st_collections_group_parts_part_box_items_item_max(void)
4081 current_item->max.w = parse_int_range(0, 0, 0x7ffffff);
4082 current_item->max.h = parse_int_range(1, 0, 0x7ffffff);
4090 [left] [right] [top] [bottom]
4092 Sets the padding hints for this object.
4095 static void st_collections_group_parts_part_box_items_item_padding(void)
4099 current_item->padding.l = parse_int_range(0, 0, 0x7ffffff);
4100 current_item->padding.r = parse_int_range(1, 0, 0x7ffffff);
4101 current_item->padding.t = parse_int_range(2, 0, 0x7ffffff);
4102 current_item->padding.b = parse_int_range(3, 0, 0x7ffffff);
4112 Sets the alignment hints for this object.
4115 static void st_collections_group_parts_part_box_items_item_align(void)
4119 current_item->align.x = FROM_DOUBLE(parse_float_range(0, -1.0, 1.0));
4120 current_item->align.y = FROM_DOUBLE(parse_float_range(1, -1.0, 1.0));
4130 Sets the weight hints for this object.
4133 static void st_collections_group_parts_part_box_items_item_weight(void)
4137 current_item->weight.x = FROM_DOUBLE(parse_float_range(0, 0.0, 99999.99));
4138 current_item->weight.y = FROM_DOUBLE(parse_float_range(1, 0.0, 99999.99));
4148 Sets the aspect width and height hints for this object.
4151 static void st_collections_group_parts_part_box_items_item_aspect(void)
4155 current_item->aspect.w = parse_int_range(0, 0, 0x7fffffff);
4156 current_item->aspect.h = parse_int_range(1, 0, 0x7fffffff);
4164 NONE, NEITHER, HORIZONTAL, VERTICAL, BOTH
4166 Sets the aspect control hints for this object.
4169 static void st_collections_group_parts_part_box_items_item_aspect_mode(void)
4173 current_item->aspect.mode = parse_enum(0,
4174 "NONE", EDJE_ASPECT_CONTROL_NONE,
4175 "NEITHER", EDJE_ASPECT_CONTROL_NEITHER,
4176 "HORIZONTAL", EDJE_ASPECT_CONTROL_HORIZONTAL,
4177 "VERTICAL", EDJE_ASPECT_CONTROL_VERTICAL,
4178 "BOTH", EDJE_ASPECT_CONTROL_BOTH,
4189 Sets extra options for the object. Unused for now.
4192 static void st_collections_group_parts_part_box_items_item_options(void)
4196 current_item->options = parse_str(0);
4206 Sets the position this item will have in the table.
4207 This is required for parts of type TABLE.
4210 static void st_collections_group_parts_part_table_items_item_position(void)
4214 if (current_part->type != EDJE_PART_TYPE_TABLE)
4216 ERR("parse error %s:%i. table attributes in non-TABLE part.",
4221 current_item->col = parse_int_range(0, 0, 0xffff);
4222 current_item->row = parse_int_range(1, 0, 0xffff);
4232 Sets how many columns/rows this item will use.
4236 static void st_collections_group_parts_part_table_items_item_span(void)
4240 if (current_part->type != EDJE_PART_TYPE_TABLE)
4242 ERR("parse error %s:%i. table attributes in non-TABLE part.",
4247 current_item->colspan = parse_int_range(0, 1, 0xffff);
4248 current_item->rowspan = parse_int_range(1, 1, 0xffff);
4252 @edcsection{description,State description sub blocks}
4261 inherit: "another_description" INDEX;
4262 state: "description_name" INDEX;
4280 Every part can have one or more description blocks. Each description is
4281 used to define style and layout properties of a part in a given
4286 ob_collections_group_parts_part_description(void)
4288 Edje_Part_Collection *pc;
4290 Edje_Part_Description_Common *ed;
4292 pc = eina_list_data_get(eina_list_last(edje_collections));
4295 ed = _edje_part_description_alloc(ep->type, pc->part, ep->name);
4297 if (!ep->default_desc)
4299 current_desc = ep->default_desc = ed;
4303 ep->other.desc_count++;
4304 ep->other.desc = realloc(ep->other.desc,
4305 sizeof (Edje_Part_Description_Common*) * ep->other.desc_count);
4306 current_desc = ep->other.desc[ep->other.desc_count - 1] = ed;
4311 ed->align.x = FROM_DOUBLE(0.5);
4312 ed->align.y = FROM_DOUBLE(0.5);
4319 ed->rel1.relative_x = FROM_DOUBLE(0.0);
4320 ed->rel1.relative_y = FROM_DOUBLE(0.0);
4321 ed->rel1.offset_x = 0;
4322 ed->rel1.offset_y = 0;
4325 ed->rel2.relative_x = FROM_DOUBLE(1.0);
4326 ed->rel2.relative_y = FROM_DOUBLE(1.0);
4327 ed->rel2.offset_x = -1;
4328 ed->rel2.offset_y = -1;
4331 ed->color_class = NULL;
4340 ed->map.id_persp = -1;
4341 ed->map.id_light = -1;
4342 ed->map.rot.id_center = -1;
4343 ed->map.rot.x = FROM_DOUBLE(0.0);
4344 ed->map.rot.y = FROM_DOUBLE(0.0);
4345 ed->map.rot.z = FROM_DOUBLE(0.0);
4349 ed->map.backcull = 0;
4350 ed->map.persp_on = 0;
4351 ed->persp.zplane = 0;
4352 ed->persp.focal = 1000;
4353 ed->minmul.have = 1;
4354 ed->minmul.w = FROM_INT(1);
4355 ed->minmul.h = FROM_INT(1);
4363 [another description's name] [another description's index]
4365 When set, the description will inherit all the properties from the
4366 named description. The properties defined in this part will override
4367 the inherited properties, reducing the amount of necessary code for
4368 simple state changes. Note: inheritance in Edje is single level only.
4372 st_collections_group_parts_part_description_inherit(void)
4374 Edje_Part_Collection *pc;
4376 Edje_Part_Description_Common *ed, *parent = NULL;
4377 Edje_Part_Image_Id *iid;
4379 const char *state_name;
4380 double parent_val, state_val;
4382 pc = eina_list_data_get(eina_list_last(edje_collections));
4386 if (!ed->state.name)
4388 ERR("parse error %s:%i. inherit may only be used after state",
4393 parent = parent_desc;
4396 check_min_arg_count(1);
4398 /* inherit may not be used in the default description */
4399 if (!ep->other.desc_count)
4401 ERR("parse error %s:%i. "
4402 "inherit may not be used in the default description",
4407 /* find the description that we inherit from */
4408 parent_name = parse_str(0);
4409 if (get_arg_count() == 2)
4410 parent_val = parse_float_range(1, 0.0, 1.0);
4414 if (!strcmp (parent_name, "default") && parent_val == 0.0)
4415 parent = ep->default_desc;
4418 Edje_Part_Description_Common *d;
4419 double min_dst = 999.0;
4422 if (!strcmp(parent_name, "default"))
4424 parent = ep->default_desc;
4425 min_dst = ABS(ep->default_desc->state.value - parent_val);
4428 for (i = 0; i < ep->other.desc_count; ++i)
4430 d = ep->other.desc[i];
4432 if (!strcmp (d->state.name, parent_name))
4437 dst = ABS(d->state.value - parent_val);
4449 ERR("parse error %s:%i. "
4450 "cannot find referenced part %s state %s %lf",
4451 file_in, line - 1, ep->name, parent_name, parent_val);
4457 /* now do a full copy, only state info will be kept */
4458 state_name = ed->state.name;
4459 state_val = ed->state.value;
4463 ed->state.name = state_name;
4464 ed->state.value = state_val;
4466 data_queue_copied_part_lookup(pc, &parent->rel1.id_x, &ed->rel1.id_x);
4467 data_queue_copied_part_lookup(pc, &parent->rel1.id_y, &ed->rel1.id_y);
4468 data_queue_copied_part_lookup(pc, &parent->rel2.id_x, &ed->rel2.id_x);
4469 data_queue_copied_part_lookup(pc, &parent->rel2.id_y, &ed->rel2.id_y);
4471 data_queue_copied_part_lookup(pc, &parent->map.id_persp, &ed->map.id_persp);
4472 data_queue_copied_part_lookup(pc, &parent->map.id_light, &ed->map.id_light);
4473 data_queue_copied_part_lookup(pc, &parent->map.rot.id_center, &ed->map.rot.id_center);
4475 /* make sure all the allocated memory is getting copied, not just
4478 #define STRDUP(x) x ? strdup(x) : NULL
4480 ed->color_class = STRDUP(ed->color_class);
4483 case EDJE_PART_TYPE_SPACER:
4484 case EDJE_PART_TYPE_RECTANGLE:
4485 case EDJE_PART_TYPE_SWALLOW:
4486 case EDJE_PART_TYPE_GROUP:
4487 /* Nothing todo, this part only have a common description. */
4489 case EDJE_PART_TYPE_TEXT:
4490 case EDJE_PART_TYPE_TEXTBLOCK:
4492 Edje_Part_Description_Text *ted = (Edje_Part_Description_Text*) ed;
4493 Edje_Part_Description_Text *tparent = (Edje_Part_Description_Text*) parent;
4495 ted->text = tparent->text;
4497 ted->text.text.str = STRDUP(ted->text.text.str);
4498 ted->text.text_class = STRDUP(ted->text.text_class);
4499 ted->text.font.str = STRDUP(ted->text.font.str);
4501 data_queue_copied_part_lookup(pc, &(tparent->text.id_source), &(ted->text.id_source));
4502 data_queue_copied_part_lookup(pc, &(tparent->text.id_text_source), &(ted->text.id_text_source));
4506 case EDJE_PART_TYPE_IMAGE:
4508 Edje_Part_Description_Image *ied = (Edje_Part_Description_Image *) ed;
4509 Edje_Part_Description_Image *iparent = (Edje_Part_Description_Image *) parent;
4512 ied->image = iparent->image;
4514 data_queue_image_remove(&ied->image.id, &ied->image.set);
4515 data_queue_copied_image_lookup(&iparent->image.id, &ied->image.id, &ied->image.set);
4517 ied->image.tweens = calloc(iparent->image.tweens_count,
4518 sizeof (Edje_Part_Image_Id*));
4519 for (i = 0; i < iparent->image.tweens_count; i++)
4521 Edje_Part_Image_Id *iid_new;
4523 iid = iparent->image.tweens[i];
4525 iid_new = mem_alloc(SZ(Edje_Part_Image_Id));
4526 data_queue_image_remove(&ied->image.id, &ied->image.set);
4527 data_queue_copied_image_lookup(&(iid->id), &(iid_new->id), &(iid_new->set));
4528 ied->image.tweens[i] = iid_new;
4533 case EDJE_PART_TYPE_PROXY:
4535 Edje_Part_Description_Proxy *ped = (Edje_Part_Description_Proxy*) ed;
4536 Edje_Part_Description_Proxy *pparent = (Edje_Part_Description_Proxy*) parent;
4538 data_queue_copied_part_lookup(pc, &(pparent->proxy.id), &(ped->proxy.id));
4542 case EDJE_PART_TYPE_BOX:
4544 Edje_Part_Description_Box *bed = (Edje_Part_Description_Box *) ed;
4545 Edje_Part_Description_Box *bparent = (Edje_Part_Description_Box *) parent;
4547 bed->box = bparent->box;
4551 case EDJE_PART_TYPE_TABLE:
4553 Edje_Part_Description_Table *ted = (Edje_Part_Description_Table *) ed;
4554 Edje_Part_Description_Table *tparent = (Edje_Part_Description_Table *) parent;
4556 ted->table = tparent->table;
4560 case EDJE_PART_TYPE_EXTERNAL:
4562 Edje_Part_Description_External *eed = (Edje_Part_Description_External *) ed;
4563 Edje_Part_Description_External *eparent = (Edje_Part_Description_External *) parent;
4565 if (eparent->external_params)
4568 Edje_External_Param *param, *new_param;
4570 eed->external_params = NULL;
4571 EINA_LIST_FOREACH(eparent->external_params, l, param)
4573 new_param = mem_alloc(SZ(Edje_External_Param));
4574 *new_param = *param;
4575 eed->external_params = eina_list_append(eed->external_params, new_param);
4591 [another part's name]
4593 Causes the part to use another part content as the content of this part.
4594 Only work with PROXY part.
4598 st_collections_group_parts_part_description_source(void)
4600 Edje_Part_Collection *pc;
4601 Edje_Part_Description_Proxy *ed;
4606 pc = eina_list_data_get(eina_list_last(edje_collections));
4608 if (current_part->type != EDJE_PART_TYPE_PROXY)
4610 ERR("parse error %s:%i. source attributes in non-PROXY part.",
4615 ed = (Edje_Part_Description_Proxy*) current_desc;
4617 name = parse_str(0);
4619 data_queue_part_lookup(pc, name, &(ed->proxy.id));
4628 [a name for the description] [an index]
4630 Sets a name used to identify a description inside a given part.
4631 Multiple descriptions are used to declare different states of the same
4632 part, like "clicked" or "invisible". All states declarations are also
4633 coupled with an index number between 0.0 and 1.0. All parts must have
4634 at least one description named "default 0.0".
4638 st_collections_group_parts_part_description_state(void)
4641 Edje_Part_Description_Common *ed;
4644 check_min_arg_count(1);
4648 ed = ep->default_desc;
4649 if (ep->other.desc_count) ed = ep->other.desc[ep->other.desc_count - 1];
4652 if (!strcmp (s, "custom"))
4654 ERR("parse error %s:%i. invalid state name: '%s'.",
4655 file_in, line - 1, s);
4660 if (get_arg_count() == 1)
4661 ed->state.value = 0.0;
4663 ed->state.value = parse_float_range(1, 0.0, 1.0);
4665 if (ed != ep->default_desc)
4667 if ((ep->default_desc->state.name && !strcmp(s, ep->default_desc->state.name) && ed->state.value == ep->default_desc->state.value) ||
4668 (!ep->default_desc->state.name && !strcmp(s, "default") && ed->state.value == ep->default_desc->state.value))
4670 if (ep->type == EDJE_PART_TYPE_IMAGE)
4671 _edje_part_description_image_remove((Edje_Part_Description_Image*) ed);
4674 ep->other.desc_count--;
4675 ep->other.desc = realloc(ep->other.desc,
4676 sizeof (Edje_Part_Description_Common*) * ep->other.desc_count);
4677 current_desc = ep->default_desc;
4679 else if (ep->other.desc_count)
4682 for (i = 0; i < ep->other.desc_count - 1; ++i)
4684 if (!strcmp(s, ep->other.desc[i]->state.name) && ed->state.value == ep->other.desc[i]->state.value)
4686 if (ep->type == EDJE_PART_TYPE_IMAGE)
4687 _edje_part_description_image_remove((Edje_Part_Description_Image*) ed);
4690 ep->other.desc_count--;
4691 ep->other.desc = realloc(ep->other.desc,
4692 sizeof (Edje_Part_Description_Common*) * ep->other.desc_count);
4693 current_desc = ep->other.desc[i];
4708 Takes a boolean value specifying whether part is visible (1) or not
4709 (0). Non-visible parts do not emit signals. The default value is 1.
4713 st_collections_group_parts_part_description_visible(void)
4717 if (current_part->type == EDJE_PART_TYPE_SPACER)
4719 ERR("parse error %s:%i. SPACER part can't have a visibility defined",
4724 current_desc->visible = parse_bool(0);
4731 [NONE, WIDTH, HEIGHT or BOTH]
4733 Emit a signal when the part size change from zero or to a zero size
4734 ('limit,width,over', 'limit,width,zero'). By default no signal are
4740 st_collections_group_parts_part_description_limit(void)
4744 current_desc->limit = parse_enum(0,
4750 if (current_desc->limit)
4752 Edje_Part_Collection *pc;
4755 pc = eina_list_data_get(eina_list_last(edje_collections));
4756 count = pc->limits.parts_count++;
4757 pc->limits.parts = realloc(pc->limits.parts,
4758 pc->limits.parts_count * sizeof (Edje_Part_Limit));
4759 data_queue_part_lookup(pc, current_part->name,
4760 &(pc->limits.parts[count].part));
4771 When the displayed object's size is smaller than its container, this
4772 property moves it relatively along both axis inside its container. The
4773 default value is "0.5 0.5".
4777 st_collections_group_parts_part_description_align(void)
4781 current_desc->align.x = FROM_DOUBLE(parse_float_range(0, 0.0, 1.0));
4782 current_desc->align.y = FROM_DOUBLE(parse_float_range(1, 0.0, 1.0));
4790 [width, 0 or 1] [height, 0 or 1]
4792 This affects the minimum size calculation. See
4793 edje_object_size_min_calc() and edje_object_size_min_restricted_calc().
4794 This tells the min size calculation routine that this part does not
4795 change size in width or height (1 for it doesn't, 0 for it does), so
4796 the routine should not try and expand or contract the part.
4800 st_collections_group_parts_part_description_fixed(void)
4804 current_desc->fixed.w = parse_float_range(0, 0, 1);
4805 current_desc->fixed.h = parse_float_range(1, 0, 1);
4813 [width] [height] or SOURCE
4815 The minimum size of the state.
4817 When min is defined to SOURCE, it will look at the original
4818 image size and enforce it minimal size to match at least the
4819 original one. The part must be an IMAGE or a GROUP part.
4823 st_collections_group_parts_part_description_min(void)
4825 check_min_arg_count(1);
4828 current_desc->min.w = parse_float_range(0, 0, 0x7fffffff);
4829 current_desc->min.h = parse_float_range(1, 0, 0x7fffffff);
4834 if ((current_part->type != EDJE_PART_TYPE_IMAGE && current_part->type != EDJE_PART_TYPE_GROUP) ||
4835 !tmp || strcmp(tmp, "SOURCE") != 0)
4837 ERR("parse error %s:%i. "
4838 "Only IMAGE and GROUP part can have a min: SOURCE; defined",
4843 current_desc->min.limit = EINA_TRUE;
4852 [width multipler] [height multiplier]
4854 A multiplier FORCIBLY applied to whatever minimum size is only during
4855 minimum size calculation.
4860 st_collections_group_parts_part_description_minmul(void)
4864 current_desc->minmul.w = FROM_DOUBLE(parse_float_range(0, 0, 999999));
4865 current_desc->minmul.h = FROM_DOUBLE(parse_float_range(1, 0, 999999));
4873 [width] [height] or SOURCE
4875 The maximum size of the state. A size of -1.0 means that it will be ignored in one direction.
4877 When max is set to SOURCE, edje will enforce the part to be
4878 not more than the original image size. The part must be an
4883 st_collections_group_parts_part_description_max(void)
4885 check_min_arg_count(1);
4888 current_desc->max.w = parse_float_range(0, -1.0, 0x7fffffff);
4889 current_desc->max.h = parse_float_range(1, -1.0, 0x7fffffff);
4894 if (current_part->type != EDJE_PART_TYPE_IMAGE ||
4895 !tmp || strcmp(tmp, "SOURCE") != 0)
4897 ERR("parse error %s:%i. "
4898 "Only IMAGE part can have a max: SOURCE; defined",
4903 current_desc->max.limit = EINA_TRUE;
4914 Restricts resizing of each dimension to values divisibles by its value.
4915 This causes the part to jump from value to value while resizing. The
4916 default value is "0 0" disabling stepping.
4920 st_collections_group_parts_part_description_step(void)
4924 current_desc->step.x = parse_float_range(0, 0, 0x7fffffff);
4925 current_desc->step.y = parse_float_range(1, 0, 0x7fffffff);
4935 Normally width and height can be resized to any values independently.
4936 The aspect property forces the width to height ratio to be kept between
4937 the minimum and maximum set. For example, "1.0 1.0" will increase the
4938 width a pixel for every pixel added to height. The default value is
4939 "0.0 0.0" disabling aspect.
4943 st_collections_group_parts_part_description_aspect(void)
4947 current_desc->aspect.min = FROM_DOUBLE(parse_float_range(0, 0.0, 999999999.0));
4948 current_desc->aspect.max = FROM_DOUBLE(parse_float_range(1, 0.0, 999999999.0));
4958 Sets the scope of the "aspect" property to a given dimension. Available
4959 options are BOTH, VERTICAL, HORIZONTAL, SOURCE and NONE
4963 st_collections_group_parts_part_description_aspect_preference(void)
4967 current_desc->aspect.prefer = parse_enum(0,
4968 "NONE", EDJE_ASPECT_PREFER_NONE,
4969 "VERTICAL", EDJE_ASPECT_PREFER_VERTICAL,
4970 "HORIZONTAL", EDJE_ASPECT_PREFER_HORIZONTAL,
4971 "BOTH", EDJE_ASPECT_PREFER_BOTH,
4972 "SOURCE", EDJE_ASPECT_PREFER_SOURCE,
4983 The part will use the color values of the named color_class, these
4984 values can be overrided by the "color", "color2" and "color3"
4985 properties set below.
4989 st_collections_group_parts_part_description_color_class(void)
4993 if (current_part->type == EDJE_PART_TYPE_SPACER)
4995 ERR("parse error %s:%i. SPACER part can't have a color defined",
5000 current_desc->color_class = parse_str(0);
5008 [red] [green] [blue] [alpha]
5010 Sets the main color to the specified values (between 0 and 255).
5014 st_collections_group_parts_part_description_color(void)
5018 if (current_part->type == EDJE_PART_TYPE_SPACER)
5020 ERR("parse error %s:%i. SPACER part can't have a color defined",
5025 current_desc->color.r = parse_int_range(0, 0, 255);
5026 current_desc->color.g = parse_int_range(1, 0, 255);
5027 current_desc->color.b = parse_int_range(2, 0, 255);
5028 current_desc->color.a = parse_int_range(3, 0, 255);
5036 [red] [green] [blue] [alpha]
5038 Sets the text shadow color to the specified values (0 to 255).
5042 st_collections_group_parts_part_description_color2(void)
5046 if (current_part->type == EDJE_PART_TYPE_SPACER)
5048 ERR("parse error %s:%i. SPACER part can't have a color defined",
5053 current_desc->color2.r = parse_int_range(0, 0, 255);
5054 current_desc->color2.g = parse_int_range(1, 0, 255);
5055 current_desc->color2.b = parse_int_range(2, 0, 255);
5056 current_desc->color2.a = parse_int_range(3, 0, 255);
5064 [red] [green] [blue] [alpha]
5066 Sets the text outline color to the specified values (0 to 255).
5070 st_collections_group_parts_part_description_color3(void)
5072 Edje_Part_Collection *pc;
5073 Edje_Part_Description_Text *ed;
5077 pc = eina_list_data_get(eina_list_last(edje_collections));
5079 if (current_part->type != EDJE_PART_TYPE_TEXT
5080 && current_part->type != EDJE_PART_TYPE_TEXTBLOCK)
5082 ERR("Setting color3 in part %s from %s not of type TEXT or TEXTBLOCK.",
5083 current_part->name, pc->part);
5087 ed = (Edje_Part_Description_Text*)current_desc;
5089 ed->text.color3.r = parse_int_range(0, 0, 255);
5090 ed->text.color3.g = parse_int_range(1, 0, 255);
5091 ed->text.color3.b = parse_int_range(2, 0, 255);
5092 ed->text.color3.a = parse_int_range(3, 0, 255);
5114 The rel1 and rel2 blocks are used to define the position of each corner
5115 of the part's container. With rel1 being the left-up corner and rel2
5116 being the right-down corner.
5124 Moves a corner to a relative position inside the container of the
5125 relative "to" part. Values from 0.0 (0%, beginning) to 1.0 (100%, end)
5130 st_collections_group_parts_part_description_rel1_relative(void)
5134 current_desc->rel1.relative_x = FROM_DOUBLE(parse_float(0));
5135 current_desc->rel1.relative_y = FROM_DOUBLE(parse_float(1));
5145 Affects the corner position a fixed number of pixels along each axis.
5149 st_collections_group_parts_part_description_rel1_offset(void)
5153 current_desc->rel1.offset_x = parse_int(0);
5154 current_desc->rel1.offset_y = parse_int(1);
5162 [another part's name]
5164 Causes a corner to be positioned relatively to another part's
5165 container. Setting to "" will un-set this value for inherited
5170 st_collections_group_parts_part_description_rel1_to(void)
5172 Edje_Part_Collection *pc;
5176 pc = eina_list_data_get(eina_list_last(edje_collections));
5181 name = parse_str(0);
5182 data_queue_part_lookup(pc, name, &(current_desc->rel1.id_x));
5183 data_queue_part_lookup(pc, name, &(current_desc->rel1.id_y));
5193 [another part's name]
5195 Causes a corner to be positioned relatively to the X axis of another
5196 part's container. Simply put affects the first parameter of "relative".
5197 Setting to "" will un-set this value for inherited parts.
5201 st_collections_group_parts_part_description_rel1_to_x(void)
5203 Edje_Part_Collection *pc;
5207 pc = eina_list_data_get(eina_list_last(edje_collections));
5212 name = parse_str(0);
5213 data_queue_part_lookup(pc, name, &(current_desc->rel1.id_x));
5223 [another part's name]
5225 Causes a corner to be positioned relatively to the Y axis of another
5226 part's container. Simply put, affects the second parameter of
5227 "relative". Setting to "" will un-set this value for inherited parts.
5231 st_collections_group_parts_part_description_rel1_to_y(void)
5233 Edje_Part_Collection *pc;
5237 pc = eina_list_data_get(eina_list_last(edje_collections));
5242 name = parse_str(0);
5243 data_queue_part_lookup(pc, name, &(current_desc->rel1.id_y));
5249 st_collections_group_parts_part_description_rel2_relative(void)
5253 current_desc->rel2.relative_x = FROM_DOUBLE(parse_float(0));
5254 current_desc->rel2.relative_y = FROM_DOUBLE(parse_float(1));
5258 st_collections_group_parts_part_description_rel2_offset(void)
5262 current_desc->rel2.offset_x = parse_int(0);
5263 current_desc->rel2.offset_y = parse_int(1);
5267 st_collections_group_parts_part_description_rel2_to(void)
5269 Edje_Part_Collection *pc;
5273 pc = eina_list_data_get(eina_list_last(edje_collections));
5278 name = parse_str(0);
5279 data_queue_part_lookup(pc, name, &(current_desc->rel2.id_x));
5280 data_queue_part_lookup(pc, name, &(current_desc->rel2.id_y));
5286 st_collections_group_parts_part_description_rel2_to_x(void)
5288 Edje_Part_Collection *pc;
5292 pc = eina_list_data_get(eina_list_last(edje_collections));
5297 name = parse_str(0);
5298 data_queue_part_lookup(pc, name, &(current_desc->rel2.id_x));
5304 st_collections_group_parts_part_description_rel2_to_y(void)
5306 Edje_Part_Collection *pc;
5310 pc = eina_list_data_get(eina_list_last(edje_collections));
5315 name = parse_str(0);
5316 data_queue_part_lookup(pc, name, &(current_desc->rel2.id_y));
5322 @edcsection{description_image,Image state description sub blocks}
5333 normal: "filename.ext";
5334 tween: "filename2.ext";
5336 tween: "filenameN.ext";
5337 border: left right top bottom;
5338 middle: 0/1/NONE/DEFAULT/SOLID;
5350 Name of image to be used as previously declared in the images block.
5351 In an animation, this is the first and last image displayed. It's
5352 required in any image part
5356 st_collections_group_parts_part_description_image_normal(void)
5358 Edje_Part_Description_Image *ed;
5362 if (current_part->type != EDJE_PART_TYPE_IMAGE)
5364 ERR("parse error %s:%i. "
5365 "image attributes in non-IMAGE part.",
5370 ed = (Edje_Part_Description_Image*) current_desc;
5375 name = parse_str(0);
5376 data_queue_image_remove(&(ed->image.id), &(ed->image.set));
5377 data_queue_image_lookup(name, &(ed->image.id), &(ed->image.set));
5389 Name of an image to be used in an animation loop, an image block can
5390 have none, one or multiple tween declarations. Images are displayed in
5391 the order they are listed, during the transition to the state they are
5392 declared in; the "normal" image is the final state.
5396 st_collections_group_parts_part_description_image_tween(void)
5398 Edje_Part_Description_Image *ed;
5402 if (current_part->type != EDJE_PART_TYPE_IMAGE)
5404 ERR("parse error %s:%i. image attributes in non-IMAGE part.",
5409 ed = (Edje_Part_Description_Image*) current_desc;
5413 Edje_Part_Image_Id *iid;
5415 iid = mem_alloc(SZ(Edje_Part_Image_Id));
5416 ed->image.tweens_count++;
5417 ed->image.tweens = realloc(ed->image.tweens,
5418 sizeof (Edje_Part_Image_Id*) * ed->image.tweens_count);
5419 ed->image.tweens[ed->image.tweens_count - 1] = iid;
5420 name = parse_str(0);
5421 data_queue_image_remove(&(iid->id), &(iid->set));
5422 data_queue_image_lookup(name, &(iid->id), &(iid->set));
5432 [left] [right] [top] [bottom]
5434 If set, the area (in pixels) of each side of the image will be
5435 displayed as a fixed size border, from the side -> inwards, preventing
5436 the corners from being changed on a resize.
5440 st_collections_group_parts_part_description_image_border(void)
5442 Edje_Part_Description_Image *ed;
5446 if (current_part->type != EDJE_PART_TYPE_IMAGE)
5448 ERR("parse error %s:%i. image attributes in non-IMAGE part.",
5453 ed = (Edje_Part_Description_Image*) current_desc;
5455 ed->image.border.l = parse_int_range(0, 0, 0x7fffffff);
5456 ed->image.border.r = parse_int_range(1, 0, 0x7fffffff);
5457 ed->image.border.t = parse_int_range(2, 0, 0x7fffffff);
5458 ed->image.border.b = parse_int_range(3, 0, 0x7fffffff);
5466 0, 1, NONE, DEFAULT, SOLID
5468 If border is set, this value tells Edje if the rest of the
5469 image (not covered by the defined border) will be displayed or not
5470 or be assumed to be solid (without alpha). The default is 1/DEFAULT.
5474 st_collections_group_parts_part_description_image_middle(void)
5476 Edje_Part_Description_Image *ed;
5480 if (current_part->type != EDJE_PART_TYPE_IMAGE)
5482 ERR("parse error %s:%i. image attributes in non-IMAGE part.",
5487 ed = (Edje_Part_Description_Image*) current_desc;
5489 ed->image.border.no_fill = parse_enum(0,
5503 0.0 or bigger (0.0 or 1.0 to turn it off)
5505 If border scaling is enabled then normally the OUTPUT border sizes
5506 (e.g. if 3 pixels on the left edge are set as a border, then normally
5507 at scale 1.0, those 3 columns will always be the exact 3 columns of
5508 output, or at scale 2.0 they will be 6 columns, or 0.33 they will merge
5509 into a single column). This property multiplies the input scale
5510 factor by this multiplier, allowing the creation of "supersampled"
5511 borders to make much higher resolution outputs possible by always using
5512 the highest resolution artwork and then runtime scaling it down.
5516 st_collections_group_parts_part_description_image_border_scale_by(void)
5518 Edje_Part_Description_Image *ed;
5522 if (current_part->type != EDJE_PART_TYPE_IMAGE)
5524 ERR("parse error %s:%i. image attributes in non-IMAGE part.",
5529 ed = (Edje_Part_Description_Image*) current_desc;
5531 ed->image.border.scale_by = FROM_DOUBLE(parse_float_range(0, 0.0, 999999999.0));
5541 If border is set, this value tells Edje if the border should be scaled
5542 by the object/global edje scale factors
5546 st_collections_group_parts_part_description_image_border_scale(void)
5548 Edje_Part_Description_Image *ed;
5552 if (current_part->type != EDJE_PART_TYPE_IMAGE)
5554 ERR("parse error %s:%i. image attributes in non-IMAGE part.",
5559 ed = (Edje_Part_Description_Image*) current_desc;
5561 ed->image.border.scale = parse_enum(0,
5572 0, NONE, DYNAMIC, STATIC
5574 Sets the evas image scale hint letting the engine more effectively save
5575 cached copies of the scaled image if it makes sense
5579 st_collections_group_parts_part_description_image_scale_hint(void)
5581 Edje_Part_Description_Image *ed;
5585 if (current_part->type != EDJE_PART_TYPE_IMAGE)
5587 ERR("parse error %s:%i. image attributes in non-IMAGE part.",
5592 ed = (Edje_Part_Description_Image*) current_desc;
5594 ed->image.scale_hint = parse_enum(0,
5595 "NONE", EVAS_IMAGE_SCALE_HINT_NONE,
5596 "DYNAMIC", EVAS_IMAGE_SCALE_HINT_DYNAMIC,
5597 "STATIC", EVAS_IMAGE_SCALE_HINT_STATIC,
5598 "0", EVAS_IMAGE_SCALE_HINT_NONE,
5612 relative: X-axis Y-axis;
5613 offset: X-axis Y-axis;
5616 relative: width height;
5617 offset: width height;
5623 The fill method is an optional block that defines the way an IMAGE part
5624 is going to be displayed inside its container.
5625 It can be used for tiling (repeating the image) or displaying only
5626 part of an image. See @ref evas_object_image_fill_set() documentation
5635 The smooth property takes a boolean value to decide if the image will
5636 be smoothed on scaling (1) or not (0). The default value is 1.
5640 st_collections_group_parts_part_description_fill_smooth(void)
5642 Edje_Part_Description_Spec_Fill *fill;
5646 switch (current_part->type)
5648 case EDJE_PART_TYPE_IMAGE:
5650 Edje_Part_Description_Image *ed;
5652 ed = (Edje_Part_Description_Image*) current_desc;
5654 fill = &ed->image.fill;
5657 case EDJE_PART_TYPE_PROXY:
5659 Edje_Part_Description_Proxy *ed;
5661 ed = (Edje_Part_Description_Proxy*) current_desc;
5663 fill = &ed->proxy.fill;
5668 ERR("parse error %s:%i. "
5669 "image and proxy attributes in non-IMAGE, non-PROXY `%s` part (%i).",
5670 file_in, line - 1, current_part->name, current_part->type);
5675 fill->smooth = parse_bool(0);
5690 st_collections_group_parts_part_description_fill_spread(void)
5693 Edje_Part_Collection *pc;
5695 Edje_Part_Description_Image *ed;
5700 /* XXX this will need to include IMAGES when spread support is added to evas images */
5702 ERR("parse error %s:%i. fill.spread not supported yet.",
5708 pc = eina_list_data_get(eina_list_last(edje_collections));
5710 ep = pc->parts[pc->parts_count - 1];
5712 if (ep->type != EDJE_PART_TYPE_IMAGE)
5714 ERR("parse error %s:%i. image attributes in non-IMAGE part.",
5719 ed = (Edje_Part_Description_Image*) ep->default_desc;
5720 if (ep->other.desc_count) ed = (Edje_Part_Description_Image*) ep->other.desc[ep->other.desc_count - 1];
5722 ed->image.fill.spread = parse_int_range(0, 0, 1);
5738 st_collections_group_parts_part_description_fill_type(void)
5740 Edje_Part_Description_Spec_Fill *fill;
5744 switch (current_part->type)
5746 case EDJE_PART_TYPE_IMAGE:
5748 Edje_Part_Description_Image *ed;
5750 ed = (Edje_Part_Description_Image*) current_desc;
5752 fill = &ed->image.fill;
5755 case EDJE_PART_TYPE_PROXY:
5757 Edje_Part_Description_Proxy *ed;
5759 ed = (Edje_Part_Description_Proxy*) current_desc;
5761 fill = &ed->proxy.fill;
5766 ERR("parse error %s:%i. "
5767 "image and proxy attributes in non-IMAGE, non-PROXY part.",
5773 fill->type = parse_enum(0,
5774 "SCALE", EDJE_FILL_TYPE_SCALE,
5775 "TILE", EDJE_FILL_TYPE_TILE,
5797 The origin block is used to place the starting point, inside the
5798 displayed element, that will be used to render the tile. By default,
5799 the origin is set at the element's left-up corner.
5807 Sets the starting point relatively to displayed element's content.
5811 st_collections_group_parts_part_description_fill_origin_relative(void)
5813 Edje_Part_Description_Spec_Fill *fill;
5817 switch (current_part->type)
5819 case EDJE_PART_TYPE_IMAGE:
5821 Edje_Part_Description_Image *ed;
5823 ed = (Edje_Part_Description_Image*) current_desc;
5825 fill = &ed->image.fill;
5828 case EDJE_PART_TYPE_PROXY:
5830 Edje_Part_Description_Proxy *ed;
5832 ed = (Edje_Part_Description_Proxy*) current_desc;
5834 fill = &ed->proxy.fill;
5839 ERR("parse error %s:%i. "
5840 "image and proxy attributes in non-IMAGE, non-PROXY part.",
5846 fill->pos_rel_x = FROM_DOUBLE(parse_float_range(0, -999999999.0, 999999999.0));
5847 fill->pos_rel_y = FROM_DOUBLE(parse_float_range(1, -999999999.0, 999999999.0));
5857 Affects the starting point a fixed number of pixels along each axis.
5861 st_collections_group_parts_part_description_fill_origin_offset(void)
5863 Edje_Part_Description_Spec_Fill *fill;
5867 switch (current_part->type)
5869 case EDJE_PART_TYPE_IMAGE:
5871 Edje_Part_Description_Image *ed;
5873 ed = (Edje_Part_Description_Image*) current_desc;
5875 fill = &ed->image.fill;
5878 case EDJE_PART_TYPE_PROXY:
5880 Edje_Part_Description_Proxy *ed;
5882 ed = (Edje_Part_Description_Proxy*) current_desc;
5884 fill = &ed->proxy.fill;
5889 ERR("parse error %s:%i. "
5890 "image and proxy attributes in non-IMAGE, non-PROXY part.",
5896 fill->pos_abs_x = parse_int(0);
5897 fill->pos_abs_y = parse_int(1);
5918 The size block defines the tile size of the content that will be
5927 Takes a pair of decimal values that represent the percentual value
5928 of the original size of the element. For example, "0.5 0.5" represents
5929 half the size, while "2.0 2.0" represents the double. The default
5934 st_collections_group_parts_part_description_fill_size_relative(void)
5936 Edje_Part_Description_Spec_Fill *fill;
5940 switch (current_part->type)
5942 case EDJE_PART_TYPE_IMAGE:
5944 Edje_Part_Description_Image *ed;
5946 ed = (Edje_Part_Description_Image*) current_desc;
5948 fill = &ed->image.fill;
5951 case EDJE_PART_TYPE_PROXY:
5953 Edje_Part_Description_Proxy *ed;
5955 ed = (Edje_Part_Description_Proxy*) current_desc;
5957 fill = &ed->proxy.fill;
5962 ERR("parse error %s:%i. "
5963 "image and proxy attributes in non-IMAGE, non-PROXY part.",
5969 fill->rel_x = FROM_DOUBLE(parse_float_range(0, 0.0, 999999999.0));
5970 fill->rel_y = FROM_DOUBLE(parse_float_range(1, 0.0, 999999999.0));
5980 Affects the size of the tile a fixed number of pixels along each axis.
5984 st_collections_group_parts_part_description_fill_size_offset(void)
5986 Edje_Part_Description_Spec_Fill *fill;
5990 switch (current_part->type)
5992 case EDJE_PART_TYPE_IMAGE:
5994 Edje_Part_Description_Image *ed;
5996 ed = (Edje_Part_Description_Image*) current_desc;
5998 fill = &ed->image.fill;
6001 case EDJE_PART_TYPE_PROXY:
6003 Edje_Part_Description_Proxy *ed;
6005 ed = (Edje_Part_Description_Proxy*) current_desc;
6007 fill = &ed->proxy.fill;
6012 ERR("parse error %s:%i. "
6013 "image and proxy attributes in non-IMAGE, non-PROXY part.",
6019 fill->abs_x = parse_int(0);
6020 fill->abs_y = parse_int(1);
6025 @edcsection{description_text,Text state description sub blocks}
6038 text: "some string of text to display";
6041 text_class: "class_name";
6042 fit: horizontal vertical;
6043 min: horizontal vertical;
6044 max: horizontal vertical;
6045 align: X-axis Y-axis;
6046 source: "part_name";
6047 text_source: "text_part_name";
6060 [a string of text, or nothing]
6062 Sets the default content of a text part, normally the application is
6063 the one changing its value.
6067 st_collections_group_parts_part_description_text_text(void)
6069 Edje_Part_Description_Text *ed;
6073 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6074 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6076 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6081 ed = (Edje_Part_Description_Text*) current_desc;
6087 if (!is_param(i)) break;
6092 str = realloc(str, strlen(str) + strlen(s) + 1);
6097 ed->text.text.str = str;
6108 Similar to color_class, this is the name used by the application
6109 to alter the font family and size at runtime.
6113 st_collections_group_parts_part_description_text_text_class(void)
6115 Edje_Part_Description_Text *ed;
6119 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6120 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6122 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6127 ed = (Edje_Part_Description_Text*) current_desc;
6129 ed->text.text_class = parse_str(0);
6140 This sets the font family to one of the aliases set up in the "fonts"
6141 block. Can be overrided by the application.
6145 st_collections_group_parts_part_description_text_font(void)
6147 Edje_Part_Description_Text *ed;
6151 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6152 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6154 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6159 ed = (Edje_Part_Description_Text*) current_desc;
6161 ed->text.font.str = parse_str(0);
6172 Causes the part to use the default style and tags defined in the
6173 "style" block with the specified name.
6177 st_collections_group_parts_part_description_text_style(void)
6179 Edje_Part_Description_Text *ed;
6183 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6184 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6186 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6191 ed = (Edje_Part_Description_Text*) current_desc;
6193 ed->text.style.str = parse_str(0);
6202 [the replacement character string]
6204 If this is a textblock and is in PASSWORD mode this string is used
6205 to replace every character to hide the details of the entry. Normally
6206 you would use a "*", but you can use anything you like.
6210 st_collections_group_parts_part_description_text_repch(void)
6212 Edje_Part_Description_Text *ed;
6216 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6217 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6219 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6224 ed = (Edje_Part_Description_Text*) current_desc;
6226 ed->text.repch.str = parse_str(0);
6235 [font size in points (pt)]
6237 Sets the default font size for the text part. Can be overrided by the
6242 st_collections_group_parts_part_description_text_size(void)
6244 Edje_Part_Description_Text *ed;
6248 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6249 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6251 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6256 ed = (Edje_Part_Description_Text*)current_desc;
6258 ed->text.size = parse_int_range(0, 0, 255);
6267 [font min size in points (pt)] [font max size in points (pt)]
6269 Sets the allowed font size for the text part. Setting min and max to 0
6270 means we won't restrict the sizing (default).
6275 st_collections_group_parts_part_description_text_size_range(void)
6277 Edje_Part_Description_Text *ed;
6281 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6282 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6284 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6289 ed = (Edje_Part_Description_Text*) current_desc;
6291 ed->text.size_range_min = parse_int_range(0, 0, 255);
6292 ed->text.size_range_max = parse_int_range(1, 0, 255);
6293 if (ed->text.size_range_min > ed->text.size_range_max)
6295 ERR("parse error %s:%i. min size is bigger than max size.",
6307 [horizontal] [vertical]
6309 When any of the parameters is set to 1 edje will resize the text for it
6310 to fit in it's container. Both are disabled by default.
6314 st_collections_group_parts_part_description_text_fit(void)
6316 Edje_Part_Description_Text *ed;
6320 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6321 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6323 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6328 ed = (Edje_Part_Description_Text*) current_desc;
6330 ed->text.fit_x = parse_bool(0);
6331 ed->text.fit_y = parse_bool(1);
6340 [horizontal] [vertical]
6342 When any of the parameters is enabled (1) it forces the minimum size of
6343 the container to be equal to the minimum size of the text. The default
6348 st_collections_group_parts_part_description_text_min(void)
6350 Edje_Part_Description_Text *ed;
6354 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6355 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6357 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6362 ed = (Edje_Part_Description_Text*)current_desc;
6364 ed->text.min_x = parse_bool(0);
6365 ed->text.min_y = parse_bool(1);
6374 [horizontal] [vertical]
6376 When any of the parameters is enabled (1) it forces the maximum size of
6377 the container to be equal to the maximum size of the text. The default
6382 st_collections_group_parts_part_description_text_max(void)
6384 Edje_Part_Description_Text *ed;
6388 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6389 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6391 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6396 ed = (Edje_Part_Description_Text*) current_desc;
6398 ed->text.max_x = parse_bool(0);
6399 ed->text.max_y = parse_bool(1);
6408 [horizontal] [vertical]
6410 Change the position of the point of balance inside the container. The
6411 default value is 0.5 0.5.
6415 st_collections_group_parts_part_description_text_align(void)
6417 Edje_Part_Description_Text *ed;
6421 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6422 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6424 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6429 ed = (Edje_Part_Description_Text*) current_desc;
6431 ed->text.align.x = FROM_DOUBLE(parse_float_range(0, -1.0, 1.0));
6432 ed->text.align.y = FROM_DOUBLE(parse_float_range(1, 0.0, 1.0));
6441 [another TEXT part's name]
6443 Causes the part to use the text properties (like font and size) of
6444 another part and update them as they change.
6448 st_collections_group_parts_part_description_text_source(void)
6450 Edje_Part_Collection *pc;
6451 Edje_Part_Description_Text *ed;
6455 pc = eina_list_data_get(eina_list_last(edje_collections));
6457 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6458 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6460 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6465 ed = (Edje_Part_Description_Text*) current_desc;
6470 name = parse_str(0);
6471 data_queue_part_lookup(pc, name, &(ed->text.id_source));
6482 [another TEXT part's name]
6484 Causes the part to display the text content of another part and update
6485 them as they change.
6489 st_collections_group_parts_part_description_text_text_source(void)
6491 Edje_Part_Collection *pc;
6492 Edje_Part_Description_Text *ed;
6496 pc = eina_list_data_get(eina_list_last(edje_collections));
6498 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6499 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6501 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6506 ed = (Edje_Part_Description_Text*) current_desc;
6511 name = parse_str(0);
6512 data_queue_part_lookup(pc, name, &(ed->text.id_text_source));
6525 Used to balance the text in a relative point from 0.0 to 1.0, this
6526 point is the last section of the string to be cut out in case of a
6527 resize that is smaller than the text itself. The default value is 0.0.
6531 st_collections_group_parts_part_description_text_elipsis(void)
6533 Edje_Part_Description_Text *ed;
6537 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6538 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6540 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6545 ed = (Edje_Part_Description_Text*) current_desc;
6547 ed->text.elipsis = parse_float_range(0, 0.0, 1.0);
6552 @edcsection{description_box,Box state description sub blocks}
6574 A box block can contain other objects and display them in different
6575 layouts, any of the predefined set, or a custom one, set by the
6582 [primary layout] [fallback layout]
6584 Sets the layout for the box:
6585 @li horizontal (default)
6587 @li horizontal_homogeneous
6588 @li vertical_homogeneous
6589 @li horizontal_max (homogeneous to the max sized child)
6594 @li some_other_custom_layout_set_by_the_application
6595 You could set a custom layout as fallback, it makes very
6596 very little sense though, and if that one fails, it will
6597 default to horizontal.
6603 [horizontal] [vertical]
6605 Change the position of the point of balance inside the container. The
6606 default value is 0.5 0.5.
6612 [horizontal] [vertical]
6614 Sets the space between cells in pixels. Defaults to 0 0.
6620 [horizontal] [vertical]
6622 When any of the parameters is enabled (1) it forces the minimum size of
6623 the box to be equal to the minimum size of the items. The default
6627 static void st_collections_group_parts_part_description_box_layout(void)
6629 Edje_Part_Description_Box *ed;
6631 check_min_arg_count(1);
6633 if (current_part->type != EDJE_PART_TYPE_BOX)
6635 ERR("parse error %s:%i. box attributes in non-BOX part.",
6640 ed = (Edje_Part_Description_Box*) current_desc;
6642 ed->box.layout = parse_str(0);
6644 ed->box.alt_layout = parse_str(1);
6647 static void st_collections_group_parts_part_description_box_align(void)
6649 Edje_Part_Description_Box *ed;
6653 if (current_part->type != EDJE_PART_TYPE_BOX)
6655 ERR("parse error %s:%i. box attributes in non-BOX part.",
6660 ed = (Edje_Part_Description_Box*) current_desc;
6662 ed->box.align.x = FROM_DOUBLE(parse_float_range(0, -1.0, 1.0));
6663 ed->box.align.y = FROM_DOUBLE(parse_float_range(1, -1.0, 1.0));
6666 static void st_collections_group_parts_part_description_box_padding(void)
6668 Edje_Part_Description_Box *ed;
6672 if (current_part->type != EDJE_PART_TYPE_BOX)
6674 ERR("parse error %s:%i. box attributes in non-BOX part.",
6679 ed = (Edje_Part_Description_Box*) current_desc;
6681 ed->box.padding.x = parse_int_range(0, 0, 0x7fffffff);
6682 ed->box.padding.y = parse_int_range(1, 0, 0x7fffffff);
6686 st_collections_group_parts_part_description_box_min(void)
6688 Edje_Part_Description_Box *ed;
6692 if (current_part->type != EDJE_PART_TYPE_BOX)
6694 ERR("parse error %s:%i. box attributes in non-BOX part.",
6699 ed = (Edje_Part_Description_Box*) current_desc;
6701 ed->box.min.h = parse_bool(0);
6702 ed->box.min.v = parse_bool(1);
6707 @edcsection{description_table,Table state description sub blocks}
6729 A table block can contain other objects packed in multiple columns
6730 and rows, and each item can span across more than one column and/or
6739 Sets the homogeneous mode for the table:
6748 [horizontal] [vertical]
6750 Change the position of the point of balance inside the container. The
6751 default value is 0.5 0.5.
6757 [horizontal] [vertical]
6759 Sets the space between cells in pixels. Defaults to 0 0.
6765 [horizontal] [vertical]
6767 When any of the parameters is enabled (1) it forces the minimum size of
6768 the table to be equal to the minimum size of the items. The default
6772 static void st_collections_group_parts_part_description_table_homogeneous(void)
6774 Edje_Part_Description_Table *ed;
6776 check_min_arg_count(1);
6778 if (current_part->type != EDJE_PART_TYPE_TABLE)
6780 ERR("parse error %s:%i. table attributes in non-TABLE part.",
6785 ed = (Edje_Part_Description_Table*) current_desc;
6787 ed->table.homogeneous = parse_enum(0,
6788 "NONE", EDJE_OBJECT_TABLE_HOMOGENEOUS_NONE,
6789 "TABLE", EDJE_OBJECT_TABLE_HOMOGENEOUS_TABLE,
6790 "ITEM", EDJE_OBJECT_TABLE_HOMOGENEOUS_ITEM,
6794 static void st_collections_group_parts_part_description_table_align(void)
6796 Edje_Part_Description_Table *ed;
6800 if (current_part->type != EDJE_PART_TYPE_TABLE)
6802 ERR("parse error %s:%i. table attributes in non-TABLE part.",
6807 ed = (Edje_Part_Description_Table*) current_desc;
6809 ed->table.align.x = FROM_DOUBLE(parse_float_range(0, -1.0, 1.0));
6810 ed->table.align.y = FROM_DOUBLE(parse_float_range(1, -1.0, 1.0));
6813 static void st_collections_group_parts_part_description_table_padding(void)
6815 Edje_Part_Description_Table *ed;
6819 if (current_part->type != EDJE_PART_TYPE_TABLE)
6821 ERR("parse error %s:%i. table attributes in non-TABLE part.",
6826 ed = (Edje_Part_Description_Table*) current_desc;
6828 ed->table.padding.x = parse_int_range(0, 0, 0x7fffffff);
6829 ed->table.padding.y = parse_int_range(1, 0, 0x7fffffff);
6833 st_collections_group_parts_part_description_table_min(void)
6835 Edje_Part_Description_Table *ed;
6839 if (current_part->type != EDJE_PART_TYPE_TABLE)
6841 ERR("parse error %s:%i. box attributes in non-TABLE part.",
6846 ed = (Edje_Part_Description_Table*) current_desc;
6848 ed->table.min.h = parse_bool(0);
6849 ed->table.min.v = parse_bool(1);
6853 @edcsection{description_map,Map state description sub blocks}
6864 perspective: "name";
6885 [another part's name]
6887 This sets the part that is used as the "perspective point" for giving
6888 a part a "3d look". The perspective point should have a perspective
6889 section that provides zplane and focal properties. The center of this
6890 part will be used as the focal point, so size, color and visibility
6891 etc. are not relevant just center point, zplane and focal are used.
6892 This also implicitly enables perspective transforms (see the on
6893 parameter for the map section).
6897 st_collections_group_parts_part_description_map_perspective(void)
6899 Edje_Part_Collection *pc;
6903 pc = eina_list_data_get(eina_list_last(edje_collections));
6908 name = parse_str(0);
6909 data_queue_part_lookup(pc, name, &(current_desc->map.id_persp));
6913 current_desc->map.persp_on = 1;
6921 [another part's name]
6923 This sets the part that is used as the "light" for calculating the
6924 brightness (based on how directly the part's surface is facing the
6925 light source point). Like the perspective point part, the center point
6926 is used and zplane is used for the z position (0 being the zero-plane
6927 where all 2D objects normally live) and positive values being further
6928 away into the distance. The light part color is used as the light
6929 color (alpha not used for light color). The color2 color is used for
6930 the ambient lighting when calculating brightness (alpha also not
6935 st_collections_group_parts_part_description_map_light(void)
6937 Edje_Part_Collection *pc;
6941 pc = eina_list_data_get(eina_list_last(edje_collections));
6946 name = parse_str(0);
6947 data_queue_part_lookup(pc, name, &(current_desc->map.id_light));
6959 This enables mapping for the part. Default is 0.
6963 st_collections_group_parts_part_description_map_on(void)
6967 current_desc->map.on = parse_bool(0);
6977 This enable smooth map rendering. This may be linear interpolation,
6978 anisotropic filtering or anything the engine decides is "smooth".
6979 This is a best-effort hint and may not produce precisely the same
6980 results in all engines and situations. Default is 1
6984 st_collections_group_parts_part_description_map_smooth(void)
6988 current_desc->map.smooth = parse_bool(0);
6998 This enable alpha channel when map rendering. Default is 1.
7002 st_collections_group_parts_part_description_map_alpha(void)
7006 current_desc->map.alpha = parse_bool(0);
7016 This enables backface culling (when the rotated part that normally
7017 faces the camera is facing away after being rotated etc.). This means
7018 that the object will be hidden when "backface culled".
7022 st_collections_group_parts_part_description_map_backface_cull(void)
7026 current_desc->map.backcull = parse_bool(0);
7036 Enable perspective when rotating even without a perspective point object.
7037 This would use perspective set for the object itself or for the
7038 canvas as a whole as the global perspective with
7039 edje_perspective_set() and edje_perspective_global_set().
7043 st_collections_group_parts_part_description_map_perspective_on(void)
7047 current_desc->map.persp_on = parse_bool(0);
7065 Rotates the part, optionally with the center on another part.
7071 [another part's name]
7073 This sets the part that is used as the center of rotation when
7074 rotating the part with this description. The part's center point
7075 is used as the rotation center when applying rotation around the
7076 x, y and z axes. If no center is given, the parts original center
7077 itself is used for the rotation center.
7081 st_collections_group_parts_part_description_map_rotation_center(void)
7083 Edje_Part_Collection *pc;
7087 pc = eina_list_data_get(eina_list_last(edje_collections));
7092 name = parse_str(0);
7093 data_queue_part_lookup(pc, name, &(current_desc->map.rot.id_center));
7105 This sets the rotation around the x axis of the part considering
7106 the center set. In degrees.
7110 st_collections_group_parts_part_description_map_rotation_x(void)
7114 current_desc->map.rot.x = FROM_DOUBLE(parse_float(0));
7124 This sets the rotation around the y axis of the part considering
7125 the center set. In degrees.
7129 st_collections_group_parts_part_description_map_rotation_y(void)
7133 current_desc->map.rot.y = FROM_DOUBLE(parse_float(0));
7143 This sets the rotation around the z axis of the part considering
7144 the center set. In degrees.
7148 st_collections_group_parts_part_description_map_rotation_z(void)
7152 current_desc->map.rot.z = FROM_DOUBLE(parse_float(0));
7169 Adds focal and plane perspective to the part. Active if perspective_on is true.
7170 Must be provided if the part is being used by other part as it's perspective target.
7178 This sets the z value that will not be scaled. Normally this is 0 as
7179 that is the z distance that all objects are at normally.
7183 st_collections_group_parts_part_description_perspective_zplane(void)
7187 current_desc->persp.zplane = parse_int(0);
7198 This sets the distance from the focal z plane (zplane) and the
7199 camera - i.e. very much equating to focal length of the camera
7203 st_collections_group_parts_part_description_perspective_focal(void)
7207 current_desc->persp.focal = parse_int_range(0, 1, 0x7fffffff);
7212 @edcsection{description_params,Params state description sub blocks}
7224 double: "other_name" 0.0;
7225 string: "another_name" "some text";
7227 choice: "some_name" "value";
7232 Set parameters for EXTERNAL parts. The value overwrites previous
7233 definitions with the same name.
7237 _st_collections_group_parts_part_description_params(Edje_External_Param_Type type)
7239 Edje_Part_Description_External *ed;
7240 Edje_External_Param *param;
7247 if (current_part->type != EDJE_PART_TYPE_EXTERNAL)
7249 ERR("parse error %s:%i. params in non-EXTERNAL part.",
7254 ed = (Edje_Part_Description_External*) current_desc;
7256 name = parse_str(0);
7258 /* if a param with this name already exists, overwrite it */
7259 EINA_LIST_FOREACH(ed->external_params, l, param)
7261 if (!strcmp(param->name, name))
7270 param = mem_alloc(SZ(Edje_External_Param));
7281 case EDJE_EXTERNAL_PARAM_TYPE_BOOL:
7282 case EDJE_EXTERNAL_PARAM_TYPE_INT:
7283 param->i = parse_int(1);
7285 case EDJE_EXTERNAL_PARAM_TYPE_DOUBLE:
7286 param->d = parse_float(1);
7288 case EDJE_EXTERNAL_PARAM_TYPE_CHOICE:
7289 case EDJE_EXTERNAL_PARAM_TYPE_STRING:
7290 param->s = parse_str(1);
7293 ERR("parse error %s:%i. Invalid param type.",
7299 ed->external_params = eina_list_append(ed->external_params, param);
7307 [param_name] [int_value]
7309 Adds an integer parameter for an external object
7313 st_collections_group_parts_part_description_params_int(void)
7315 _st_collections_group_parts_part_description_params(EDJE_EXTERNAL_PARAM_TYPE_INT);
7323 [param_name] [double_value]
7325 Adds a double parameter for an external object
7329 st_collections_group_parts_part_description_params_double(void)
7331 _st_collections_group_parts_part_description_params(EDJE_EXTERNAL_PARAM_TYPE_DOUBLE);
7339 [param_name] [string_value]
7341 Adds a string parameter for an external object
7345 st_collections_group_parts_part_description_params_string(void)
7347 _st_collections_group_parts_part_description_params(EDJE_EXTERNAL_PARAM_TYPE_STRING);
7355 [param_name] [bool_value]
7357 Adds an boolean parameter for an external object. Value must be 0 or 1.
7361 st_collections_group_parts_part_description_params_bool(void)
7363 _st_collections_group_parts_part_description_params(EDJE_EXTERNAL_PARAM_TYPE_BOOL);
7371 [param_name] [choice_string]
7373 Adds a choice parameter for an external object. The possible
7374 choice values are defined by external type at their register time
7375 and will be validated at runtime.
7379 st_collections_group_parts_part_description_params_choice(void)
7381 _st_collections_group_parts_part_description_params(EDJE_EXTERNAL_PARAM_TYPE_CHOICE);
7386 @edcsection{program, Program block}
7398 name: "programname";
7399 signal: "signalname";
7401 filter: "partname" "statename";
7403 action: STATE_SET "statename" state_value;
7404 transition: LINEAR 0.5;
7406 target: "anotherpart";
7407 after: "programname";
7408 after: "anotherprogram";
7414 Programs define how your interface reacts to events.
7415 Programs can change the state of parts, react to events or trigger
7420 ob_collections_group_programs_program(void)
7422 Edje_Part_Collection *pc;
7424 Edje_Program_Parser *epp;
7426 pc = eina_list_data_get(eina_list_last(edje_collections));
7428 ep = mem_alloc(SZ(Edje_Program_Parser));
7430 ep->tween.mode = EDJE_TWEEN_MODE_LINEAR;
7432 epp = (Edje_Program_Parser *)ep;
7433 epp->can_override = EINA_FALSE;
7435 _edje_program_insert(pc, ep);
7437 current_program = ep;
7447 Symbolic name of program as a unique identifier.
7451 st_collections_group_programs_program_name(void)
7453 Edje_Part_Collection *pc;
7457 pc = eina_list_data_get(eina_list_last(edje_collections));
7458 current_program->name = parse_str(0);
7460 _edje_program_check(current_program->name, current_program, pc->programs.fnmatch, pc->programs.fnmatch_count);
7461 _edje_program_check(current_program->name, current_program, pc->programs.strcmp, pc->programs.strcmp_count);
7462 _edje_program_check(current_program->name, current_program, pc->programs.strncmp, pc->programs.strncmp_count);
7463 _edje_program_check(current_program->name, current_program, pc->programs.strrncmp, pc->programs.strrncmp_count);
7464 _edje_program_check(current_program->name, current_program, pc->programs.nocmp, pc->programs.nocmp_count);
7474 Specifies signal(s) that should cause the program to run. The signal
7475 received must match the specified source to run.
7476 Signals may be globbed, but only one signal keyword per program
7477 may be used. ex: signal: "mouse,clicked,*"; (clicking any mouse button
7478 that matches source starts program).
7482 st_collections_group_programs_program_signal(void)
7484 Edje_Part_Collection *pc;
7488 pc = eina_list_data_get(eina_list_last(edje_collections));
7490 _edje_program_remove(pc, current_program);
7491 current_program->signal = parse_str(0);
7492 _edje_program_insert(pc, current_program);
7502 Source of accepted signal. Sources may be globbed, but only one source
7503 keyword per program may be used. ex:source: "button-*"; (Signals from
7504 any part or program named "button-*" are accepted).
7508 st_collections_group_programs_program_source(void)
7510 Edje_Part_Collection *pc;
7514 pc = eina_list_data_get(eina_list_last(edje_collections));
7516 _edje_program_remove(pc, current_program);
7517 current_program->source = parse_str(0);
7518 _edje_program_insert(pc, current_program);
7528 Filter signals to be only accepted if the part [part] is in state named [state].
7529 Only one filter per program can be used. If [state] is not given, the source of
7530 the event will be used instead.
7534 st_collections_group_programs_program_filter(void)
7536 check_min_arg_count(1);
7539 current_program->filter.part = parse_str(0);
7540 current_program->filter.state = parse_str(1);
7542 current_program->filter.state = parse_str(0);
7553 Wait 'from' seconds before executing the program. And add a random
7554 number of seconds (from 0 to 'range') to the total waiting time.
7558 st_collections_group_programs_program_in(void)
7562 current_program->in.from = parse_float_range(0, 0.0, 999999999.0);
7563 current_program->in.range = parse_float_range(1, 0.0, 999999999.0);
7571 [type] [param1] [param2]
7573 Action to be performed by the program. Valid actions are: STATE_SET,
7574 ACTION_STOP, SIGNAL_EMIT, DRAG_VAL_SET, DRAG_VAL_STEP, DRAG_VAL_PAGE,
7575 FOCUS_SET, PARAM_COPY, PARAM_SET, PLAY_SAMPLE, PLAY_TONE
7576 Only one action can be specified per program. Examples:\n
7577 action: STATE_SET "statename" 0.5;\n
7578 action: ACTION_STOP;\n
7579 action: SIGNAL_EMIT "signalname" "emitter";\n
7580 action: DRAG_VAL_SET 0.5 0.0;\n
7581 action: DRAG_VAL_STEP 1.0 0.0;\n
7582 action: DRAG_VAL_PAGE 0.0 0.0;\n
7583 action: FOCUS_SET;\n
7584 action: FOCUS_OBJECT;\n
7585 action: PARAM_COPY "src_part" "src_param" "dst_part" "dst_param";\n
7586 action: PARAM_SET "part" "param" "value";\n
7587 action: PLAY_SAMPLE "sample name";\n
7588 action: PLAY_TONE "tone name" duration in seconds ( Range 0.1 to 10.0 );\n
7592 st_collections_group_programs_program_action(void)
7594 Edje_Part_Collection *pc;
7598 pc = eina_list_data_get(eina_list_last(edje_collections));
7599 ep = current_program;
7600 ep->action = parse_enum(0,
7601 "STATE_SET", EDJE_ACTION_TYPE_STATE_SET,
7602 "ACTION_STOP", EDJE_ACTION_TYPE_ACTION_STOP,
7603 "SIGNAL_EMIT", EDJE_ACTION_TYPE_SIGNAL_EMIT,
7604 "DRAG_VAL_SET", EDJE_ACTION_TYPE_DRAG_VAL_SET,
7605 "DRAG_VAL_STEP", EDJE_ACTION_TYPE_DRAG_VAL_STEP,
7606 "DRAG_VAL_PAGE", EDJE_ACTION_TYPE_DRAG_VAL_PAGE,
7607 "SCRIPT", EDJE_ACTION_TYPE_SCRIPT,
7608 "FOCUS_SET", EDJE_ACTION_TYPE_FOCUS_SET,
7609 "FOCUS_OBJECT", EDJE_ACTION_TYPE_FOCUS_OBJECT,
7610 "PARAM_COPY", EDJE_ACTION_TYPE_PARAM_COPY,
7611 "PARAM_SET", EDJE_ACTION_TYPE_PARAM_SET,
7612 "PLAY_SAMPLE", EDJE_ACTION_TYPE_SOUND_SAMPLE,
7613 "PLAY_TONE", EDJE_ACTION_TYPE_SOUND_TONE,
7615 if (ep->action == EDJE_ACTION_TYPE_STATE_SET)
7617 ep->state = parse_str(1);
7618 if (get_arg_count() == 1)
7621 ep->value = parse_float_range(2, 0.0, 1.0);
7623 else if (ep->action == EDJE_ACTION_TYPE_SIGNAL_EMIT)
7625 ep->state = parse_str(1);
7626 ep->state2 = parse_str(2);
7628 else if (ep->action == EDJE_ACTION_TYPE_SOUND_SAMPLE)
7630 ep->sample_name = parse_str(1);
7631 for (i = 0; i < (int)edje_file->sound_dir->samples_count; i++)
7633 if (!strcmp(edje_file->sound_dir->samples[i].name, ep->sample_name))
7635 if (i == (int)(edje_file->sound_dir->samples_count - 1))
7637 ERR("No Sample name %s exist.", ep->sample_name);
7641 ep->speed = parse_float_range(2, 0.0, 10.0);
7643 else if (ep->action == EDJE_ACTION_TYPE_SOUND_TONE)
7645 ep->tone_name = parse_str(1);
7646 for (i = 0; i < (int)edje_file->sound_dir->tones_count; i++)
7648 if (!strcmp(edje_file->sound_dir->tones[i].name, ep->tone_name))
7650 if (i == (int)(edje_file->sound_dir->tones_count - 1))
7652 ERR("No Tone name %s exist.", ep->tone_name);
7656 ep->duration = parse_float_range(2, 0.1, 10.0);
7658 else if (ep->action == EDJE_ACTION_TYPE_DRAG_VAL_SET)
7660 ep->value = parse_float(1);
7661 ep->value2 = parse_float(2);
7663 else if (ep->action == EDJE_ACTION_TYPE_DRAG_VAL_STEP)
7665 ep->value = parse_float(1);
7666 ep->value2 = parse_float(2);
7668 else if (ep->action == EDJE_ACTION_TYPE_DRAG_VAL_PAGE)
7670 ep->value = parse_float(1);
7671 ep->value2 = parse_float(2);
7673 else if (ep->action == EDJE_ACTION_TYPE_PARAM_COPY)
7675 char *src_part, *dst_part;
7677 src_part = parse_str(1);
7678 ep->state = parse_str(2);
7679 dst_part = parse_str(3);
7680 ep->state2 = parse_str(4);
7682 data_queue_part_lookup(pc, src_part, &(ep->param.src));
7683 data_queue_part_lookup(pc, dst_part, &(ep->param.dst));
7688 else if (ep->action == EDJE_ACTION_TYPE_PARAM_SET)
7692 part = parse_str(1);
7693 ep->state = parse_str(2);
7694 ep->state2 = parse_str(3);
7696 data_queue_part_lookup(pc, part, &(ep->param.dst));
7702 case EDJE_ACTION_TYPE_ACTION_STOP:
7705 case EDJE_ACTION_TYPE_SCRIPT:
7706 /* this is implicitly set by script {} so this is here just for
7709 case EDJE_ACTION_TYPE_FOCUS_OBJECT:
7710 case EDJE_ACTION_TYPE_FOCUS_SET:
7713 case EDJE_ACTION_TYPE_PARAM_COPY:
7716 case EDJE_ACTION_TYPE_PARAM_SET:
7719 case EDJE_ACTION_TYPE_SOUND_SAMPLE:
7722 case EDJE_ACTION_TYPE_SOUND_TONE:
7735 [type] [length] [[interp val 1]] [[interp val 2]] [[option]]
7737 Defines how transitions occur using STATE_SET action.\n
7738 Where 'type' is the style of the transition and 'length' is a double
7739 specifying the number of seconds in which to preform the transition.\n
7740 Valid types are: LIN or LINEAR, SIN or SINUSOIDAL,
7741 ACCEL or ACCELERATE, DECEL or DECELERATE,
7742 ACCEL_FAC or ACCELERATE_FACTOR, DECEL_FAC or DECELERATE_FACTOR,
7743 SIN_FAC or SINUSOIDAL_FACTOR, DIVIS or DIVISOR_INTERP,
7746 ACCEL_FAC, DECEL_FAC and SIN_FAC need the extra optional
7747 "interp val 1" to determine the "factor" of curviness. 1.0 is the same
7748 as their non-factor counterparts, where 0.0 is equal to linear.
7749 Numbers higher than one make the curve angles steeper with a more
7750 pronounced curve point.
7752 DIVIS, BOUNCE and SPRING also require "interp val 2" in addition
7755 DIVIS uses val 1 as the initial gradient start
7756 (0.0 is horizontal, 1.0 is diagonal (linear), 2.0 is twice the
7757 gradient of linear etc.). val 2 is interpreted as an integer factor
7758 defining how much the value swings "outside" the gradient only to come
7759 back to the final resting spot at the end. 0.0 for val 2 is equivalent
7760 to linear interpolation. Note that DIVIS can exceed 1.0
7762 BOUNCE uses val 2 as the number of bounces (so its rounded down to
7763 the nearest integer value), with val 1 determining how much the
7764 bounce decays, with 0.0 giving linear decay per bounce, and higher
7765 values giving much more decay.
7767 SPRING is similar to bounce, where val 2 specifies the number of
7768 spring "swings" and val 1 specifies the decay, but it can exceed 1.0
7769 on the outer swings.
7771 Valid option is CURRENT.
7773 CURRENT is the option which causes the edje object to move from its current position.
7774 It can be used as the last parameter of any transition type. (@since 1.1.0)
7779 st_collections_group_programs_program_transition(void)
7781 check_min_arg_count(2);
7783 current_program->tween.mode = parse_enum(0,
7785 "LIN", EDJE_TWEEN_MODE_LINEAR,
7786 "SIN", EDJE_TWEEN_MODE_SINUSOIDAL,
7787 "ACCEL", EDJE_TWEEN_MODE_ACCELERATE,
7788 "DECEL", EDJE_TWEEN_MODE_DECELERATE,
7789 "ACCEL_FAC", EDJE_TWEEN_MODE_ACCELERATE_FACTOR,
7790 "DECEL_FAC", EDJE_TWEEN_MODE_DECELERATE_FACTOR,
7791 "SIN_FAC", EDJE_TWEEN_MODE_SINUSOIDAL_FACTOR,
7792 "DIVIS", EDJE_TWEEN_MODE_DIVISOR_INTERP,
7795 "LINEAR", EDJE_TWEEN_MODE_LINEAR,
7796 "SINUSOIDAL", EDJE_TWEEN_MODE_SINUSOIDAL,
7797 "ACCELERATE", EDJE_TWEEN_MODE_ACCELERATE,
7798 "DECELERATE", EDJE_TWEEN_MODE_DECELERATE,
7799 "ACCELERATE_FACTOR", EDJE_TWEEN_MODE_ACCELERATE_FACTOR,
7800 "DECELERATE_FACTOR", EDJE_TWEEN_MODE_DECELERATE_FACTOR,
7801 "SINUSOIDAL_FACTOR", EDJE_TWEEN_MODE_SINUSOIDAL_FACTOR,
7802 "DIVISOR_INTERP", EDJE_TWEEN_MODE_DIVISOR_INTERP,
7804 // long/full is short enough
7805 "BOUNCE", EDJE_TWEEN_MODE_BOUNCE,
7806 "SPRING", EDJE_TWEEN_MODE_SPRING,
7808 current_program->tween.time = FROM_DOUBLE(parse_float_range(1, 0.0, 999999999.0));
7809 if ((current_program->tween.mode >= EDJE_TWEEN_MODE_LINEAR) &&
7810 (current_program->tween.mode <= EDJE_TWEEN_MODE_DECELERATE))
7812 if ((get_arg_count() == 3) && (!strcmp(parse_str(2), "CURRENT")))
7813 current_program->tween.mode |= EDJE_TWEEN_MODE_OPT_FROM_CURRENT;
7814 else if (get_arg_count() != 2)
7816 ERR("parse error %s:%i. Need 2rd parameter to set time",
7821 // the following need v1
7822 // EDJE_TWEEN_MODE_ACCELERATE_FACTOR
7823 // EDJE_TWEEN_MODE_DECELERATE_FACTOR
7824 // EDJE_TWEEN_MODE_SINUSOIDAL_FACTOR
7825 // current_program->tween.v1
7826 else if ((current_program->tween.mode >= EDJE_TWEEN_MODE_ACCELERATE_FACTOR) &&
7827 (current_program->tween.mode <= EDJE_TWEEN_MODE_SINUSOIDAL_FACTOR))
7829 if ((get_arg_count() == 4) && (!strcmp(parse_str(3), "CURRENT")))
7830 current_program->tween.mode |= EDJE_TWEEN_MODE_OPT_FROM_CURRENT;
7831 else if (get_arg_count() != 3)
7833 ERR("parse error %s:%i. Need 3rd parameter to set factor",
7837 current_program->tween.v1 = FROM_DOUBLE(parse_float_range(2, 0.0, 999999999.0));
7839 // the followjng also need v2
7840 // EDJE_TWEEN_MODE_DIVISOR_INTERP
7841 // EDJE_TWEEN_MODE_BOUNCE
7842 // EDJE_TWEEN_MODE_SPRING
7843 // current_program->tween.v2
7844 else if ((current_program->tween.mode >= EDJE_TWEEN_MODE_DIVISOR_INTERP) &&
7845 (current_program->tween.mode <= EDJE_TWEEN_MODE_SPRING))
7847 if ((get_arg_count() == 5) && (!strcmp(parse_str(4), "CURRENT")))
7848 current_program->tween.mode |= EDJE_TWEEN_MODE_OPT_FROM_CURRENT;
7849 else if (get_arg_count() != 4)
7851 ERR("parse error %s:%i. "
7852 "Need 3rd and 4th parameters to set factor and counts",
7856 current_program->tween.v1 = FROM_DOUBLE(parse_float_range(2, 0.0, 999999999.0));
7857 current_program->tween.v2 = FROM_DOUBLE(parse_float_range(3, 0.0, 999999999.0));
7868 Program or part on which the specified action acts. Multiple target
7869 keywords may be specified, one per target. SIGNAL_EMITs do not have
7874 st_collections_group_programs_program_target(void)
7876 Edje_Part_Collection *pc;
7881 pc = eina_list_data_get(eina_list_last(edje_collections));
7882 ep = current_program;
7884 Edje_Program_Target *et;
7885 Edje_Program_Target *etw;
7890 name = parse_str(0);
7892 EINA_LIST_FOREACH(ep->targets, l, etw)
7894 if (!strcmp(name, (char*) (etw + 1)))
7901 et = mem_alloc(SZ(Edje_Program_Target) + strlen(name) + 1);
7902 ep->targets = eina_list_append(ep->targets, et);
7903 copy = (char*) (et + 1);
7905 memcpy(copy, name, strlen(name) + 1);
7907 if (ep->action == EDJE_ACTION_TYPE_STATE_SET)
7908 data_queue_part_lookup(pc, name, &(et->id));
7909 else if (ep->action == EDJE_ACTION_TYPE_ACTION_STOP)
7910 data_queue_program_lookup(pc, name, &(et->id));
7911 else if (ep->action == EDJE_ACTION_TYPE_DRAG_VAL_SET)
7912 data_queue_part_lookup(pc, name, &(et->id));
7913 else if (ep->action == EDJE_ACTION_TYPE_DRAG_VAL_STEP)
7914 data_queue_part_lookup(pc, name, &(et->id));
7915 else if (ep->action == EDJE_ACTION_TYPE_DRAG_VAL_PAGE)
7916 data_queue_part_lookup(pc, name, &(et->id));
7917 else if (ep->action == EDJE_ACTION_TYPE_FOCUS_SET)
7918 data_queue_part_lookup(pc, name, &(et->id));
7919 else if (ep->action == EDJE_ACTION_TYPE_FOCUS_OBJECT)
7920 data_queue_part_lookup(pc, name, &(et->id));
7923 ERR("parse error %s:%i. target may only be used after action",
7938 Specifies a program to run after the current program completes. The
7939 source and signal parameters of a program run as an "after" are ignored.
7940 Multiple "after" statements can be specified per program.
7944 st_collections_group_programs_program_after(void)
7946 Edje_Part_Collection *pc;
7951 pc = eina_list_data_get(eina_list_last(edje_collections));
7952 ep = current_program;
7954 Edje_Program_After *pa;
7955 Edje_Program_After *pa2;
7960 name = parse_str(0);
7962 EINA_LIST_FOREACH(ep->after, l, pa2)
7964 if (!strcmp(name, (char*) (pa2 + 1)))
7971 pa = mem_alloc(SZ(Edje_Program_After) + strlen(name) + 1);
7973 ep->after = eina_list_append(ep->after, pa);
7974 copy = (char*)(pa + 1);
7975 memcpy(copy, name, strlen(name) + 1);
7976 data_queue_program_lookup(pc, name, &(pa->id));
7986 [name] [description]
7988 Specifies a hint to let applications (or IDE's) know how to bind
7989 things. The parameter name should contain the name of the function that
7990 the application should use, and description describes how it should
7995 st_collections_group_programs_program_api(void)
7997 check_min_arg_count(1);
7999 current_program->api.name = parse_str(0);
8004 current_program->api.description = parse_str(1);
8009 st_collections_group_parts_part_api(void)
8011 check_min_arg_count(1);
8013 current_part->api.name = parse_str(0);
8017 current_part->api.description = parse_str(1);
8022 ob_collections_group_programs_program_script(void)
8024 Edje_Part_Collection *pc;
8027 pc = eina_list_data_get(eina_list_last(edje_collections));
8028 cd = eina_list_data_get(eina_list_last(codes));
8030 if (!is_verbatim()) track_verbatim(1);
8033 Eina_Bool empty = EINA_TRUE;
8042 /* FIXME: Need to store the script somewhere to be restored when using edje_edit API */
8043 cp = mem_alloc(SZ(Code_Program));
8044 cp->l1 = get_verbatim_line1();
8045 cp->l2 = get_verbatim_line2();
8047 cp->original = strdup(s);
8048 if (cd->shared && cd->is_lua)
8050 ERR("parse error %s:%i. You're trying to mix Embryo and Lua scripting in the same group",
8056 len = strlen(cp->script);
8057 for (i = 0; i < len; i++)
8059 if (((cp->script[i] > 'a') && (cp->script[i] < 'z')) ||
8060 ((cp->script[i] > 'A') && (cp->script[i] < 'Z')) ||
8061 ((cp->script[i] > '0') && (cp->script[i] < '9')))
8067 cd->programs = eina_list_append(cd->programs, cp);
8068 data_queue_anonymous_lookup(pc, current_program, &(cp->id));
8069 current_program->action = EDJE_ACTION_TYPE_SCRIPT;
8073 data_queue_anonymous_lookup(pc, current_program, NULL);
8078 set_verbatim(NULL, 0, 0);