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 ERR("%s:%i when opening file \"%s\": \"%s\"",
1609 file_in, line, filename, strerror(errno));
1613 if (fstat(fd, &buf))
1615 ERR("%s:%i when stating file \"%s\": \"%s\"",
1616 file_in, line, filename, strerror(errno));
1620 data = mmap(NULL, buf.st_size, PROT_READ, MAP_SHARED, fd, 0);
1621 if (data == MAP_FAILED)
1623 ERR("%s:%i when mapping file \"%s\": \"%s\"",
1624 file_in, line, filename, strerror(errno));
1629 for (i = 0; i < buf.st_size; ++i, ++over)
1632 ERR("%s:%i file \"%s\" is a binary file.", file_in, line, filename);
1636 value = malloc(sizeof (char) * buf.st_size + 1);
1637 snprintf(value, buf.st_size + 1, "%s", data);
1639 munmap((void*)data, buf.st_size);
1644 eina_hash_direct_add(edje_file->data, key, es);
1656 name: "colorclassname";
1657 color: [0-255] [0-255] [0-255] [0-255];
1658 color2: [0-255] [0-255] [0-255] [0-255];
1659 color3: [0-255] [0-255] [0-255] [0-255]
1664 The "color_classes" block contains a list of one or more "color_class"
1665 blocks. Each "color_class" allows the designer to name an arbitrary
1666 group of colors to be used in the theme, the application can use that
1667 name to alter the color values at runtime.
1671 ob_color_class(void)
1673 Edje_Color_Class *cc;
1675 cc = mem_alloc(SZ(Edje_Color_Class));
1676 edje_file->color_classes = eina_list_append(edje_file->color_classes, cc);
1700 Sets the name for the color class, used as reference by both the theme
1701 and the application.
1705 st_color_class_name(void)
1707 Edje_Color_Class *cc, *tcc;
1710 cc = eina_list_data_get(eina_list_last(edje_file->color_classes));
1711 cc->name = parse_str(0);
1712 EINA_LIST_FOREACH(edje_file->color_classes, l, tcc)
1714 if ((cc != tcc) && (!strcmp(cc->name, tcc->name)))
1716 ERR("parse error %s:%i. There is already a color class named \"%s\"",
1717 file_in, line - 1, cc->name);
1728 [red] [green] [blue] [alpha]
1734 st_color_class_color(void)
1736 Edje_Color_Class *cc;
1740 cc = eina_list_data_get(eina_list_last(edje_file->color_classes));
1741 cc->r = parse_int_range(0, 0, 255);
1742 cc->g = parse_int_range(1, 0, 255);
1743 cc->b = parse_int_range(2, 0, 255);
1744 cc->a = parse_int_range(3, 0, 255);
1752 [red] [green] [blue] [alpha]
1754 Used as shadow in text and textblock parts.
1758 st_color_class_color2(void)
1760 Edje_Color_Class *cc;
1764 cc = eina_list_data_get(eina_list_last(edje_file->color_classes));
1765 cc->r2 = parse_int_range(0, 0, 255);
1766 cc->g2 = parse_int_range(1, 0, 255);
1767 cc->b2 = parse_int_range(2, 0, 255);
1768 cc->a2 = parse_int_range(3, 0, 255);
1776 [red] [green] [blue] [alpha]
1778 Used as outline in text and textblock parts.
1782 st_color_class_color3(void)
1784 Edje_Color_Class *cc;
1788 cc = eina_list_data_get(eina_list_last(edje_file->color_classes));
1789 cc->r3 = parse_int_range(0, 0, 255);
1790 cc->g3 = parse_int_range(1, 0, 255);
1791 cc->b3 = parse_int_range(2, 0, 255);
1792 cc->a3 = parse_int_range(3, 0, 255);
1803 base: "..default style properties..";
1805 tag: "tagname" "..style properties..";
1811 The "styles" block contains a list of one or more "style" blocks. A
1812 "style" block is used to create style \<tags\> for advanced TEXTBLOCK
1817 ob_styles_style(void)
1821 stl = mem_alloc(SZ(Edje_Style));
1822 edje_file->styles = eina_list_append(edje_file->styles, stl);
1832 The name of the style to be used as reference later in the theme.
1836 st_styles_style_name(void)
1838 Edje_Style *stl, *tstl;
1841 stl = eina_list_data_get(eina_list_last(edje_file->styles));
1842 stl->name = parse_str(0);
1843 EINA_LIST_FOREACH(edje_file->styles, l, tstl)
1845 if (stl->name && tstl->name && (stl != tstl) && (!strcmp(stl->name, tstl->name)))
1847 ERR("parse error %s:%i. There is already a style named \"%s\"",
1848 file_in, line - 1, stl->name);
1859 [style properties string]
1861 The default style properties that will be applied to the complete
1866 st_styles_style_base(void)
1869 Edje_Style_Tag *tag;
1871 stl = eina_list_data_get(eina_list_last(edje_file->styles));
1874 ERR("parse error %s:%i. There is already a basic format for the style",
1878 tag = mem_alloc(SZ(Edje_Style_Tag));
1879 tag->key = mem_strdup("DEFAULT");
1880 tag->value = parse_str(0);
1881 stl->tags = eina_list_append(stl->tags, tag);
1889 [tag name] [style properties string]
1891 Style to be applied only to text between style \<tags\>..\</tags\>.
1892 When creating "paired" tags, like \<bold\>\</bold\>, A '+' should be added at the start of the style properties of the first part (\<bold\>).
1893 If the second part (\</bold\>) is also defined, a '-' should be prepended to it's style properties.
1894 This only applies to paired tags; Single tags, like \<tab\>, must not include a starting '+'.
1898 st_styles_style_tag(void)
1901 Edje_Style_Tag *tag;
1903 stl = eina_list_data_get(eina_list_last(edje_file->styles));
1904 tag = mem_alloc(SZ(Edje_Style_Tag));
1905 tag->key = parse_str(0);
1906 tag->value = parse_str(1);
1907 stl->tags = eina_list_append(stl->tags, tag);
1923 The "collections" block is used to list the groups that compose the
1924 theme. Additional "collections" blocks do not prevent overriding group
1925 names. The "sounds" block comprises of all sound definitions.
1929 ob_collections(void)
1931 if (!edje_file->collection)
1932 edje_file->collection = eina_hash_string_small_new(NULL);
1942 name: "sound_file1" COMP;
1943 source: "sound_file1.wav";
1946 name: "sound_file2" LOSSY 0.4;
1947 source: "sound_file2.wav";
1949 tone: "tone-1" 2300;
1953 The "sounds" block contains a list of one or more sound sample and tones items.
1959 name: "sound_file1" RAW;
1960 source: "sound_file1.wav";
1963 name: "sound_file2" LOSSY 0.5;
1964 source: "sound_file2.wav";
1967 name: "sound_file3" COMP;
1968 source: "sound_file3.wav";
1971 name: "sound_file4" AS_IS;
1972 source: "sound_file1.wav";
1975 The sample block defines the sound sample.
1980 [sample name] [compression type] [if lossy, then quality]
1982 Used to include each sound file. The full path to the directory holding
1983 the sounds can be defined later with edje_cc's "-sd" option.
1984 @li RAW: Uncompressed.
1985 @li COMP: Lossless compression.
1986 @li LOSSY [-0.1 - 1.0]: Lossy compression with quality from 0 to 1.0.
1987 @li AS_IS: Check for re-encoding, no compression/encoding, just write the file information as it is.
1992 st_collections_group_sound_sample_name(void)
1994 Edje_Sound_Sample *sample;
1998 if (!edje_file->sound_dir)
1999 edje_file->sound_dir = mem_alloc(SZ(Edje_Sound_Directory));
2003 for (i = 0; i < edje_file->sound_dir->samples_count; i++)
2005 if (!strcmp(edje_file->sound_dir->samples[i].name, tmp))
2012 edje_file->sound_dir->samples_count++;
2013 edje_file->sound_dir->samples =
2014 realloc(edje_file->sound_dir->samples,
2015 sizeof(Edje_Sound_Sample) *
2016 edje_file->sound_dir->samples_count);
2018 if (!edje_file->sound_dir->samples)
2020 ERR("No enough memory.");
2025 edje_file->sound_dir->samples +
2026 edje_file->sound_dir->samples_count - 1;
2027 memset(sample, 0, sizeof (Edje_Sound_Sample));
2030 sample->id = edje_file->sound_dir->samples_count - 1;
2031 sample->compression = parse_enum(1,
2032 "RAW", EDJE_SOUND_SOURCE_TYPE_INLINE_RAW,
2033 "COMP", EDJE_SOUND_SOURCE_TYPE_INLINE_COMP,
2034 "LOSSY", EDJE_SOUND_SOURCE_TYPE_INLINE_LOSSY,
2035 "AS_IS", EDJE_SOUND_SOURCE_TYPE_INLINE_AS_IS,
2038 if (sample->compression == EDJE_SOUND_SOURCE_TYPE_INLINE_LOSSY)
2040 sample->quality = parse_float_range(2, 45.0, 1000.0);
2055 The Sound source file name (Source can be mono/stereo WAV file.
2056 Only files with 44.1 KHz sample rate supported now)
2061 st_collections_group_sound_sample_source(void)
2063 Edje_Sound_Sample *sample;
2065 if (!edje_file->sound_dir->samples)
2067 ERR("Invalid sound sample source definition.");
2072 edje_file->sound_dir->samples +
2073 edje_file->sound_dir->samples_count - 1;
2077 ERR("Invalid sound sample source definition.");
2080 sample->snd_src = parse_str(0);
2089 [tone name] [frequency]
2091 sound of specific frequency
2096 st_collections_group_sound_tone(void)
2098 Edje_Sound_Tone *tone;
2105 if (!edje_file->sound_dir)
2106 edje_file->sound_dir = mem_alloc(SZ(Edje_Sound_Directory));
2109 /* Audible range 20 to 20KHz */
2110 value = parse_int_range(1, 20, 20000);
2112 /* Check for Tone duplication */
2113 for (i = 0; i < edje_file->sound_dir->tones_count; i++)
2115 if (!strcmp(edje_file->sound_dir->tones[i].name, tmp))
2117 ERR("Tone name: %s already exist.", tmp);
2121 if (edje_file->sound_dir->tones[i].value == value)
2123 ERR("Tone name %s with same frequency %d exist.",
2124 edje_file->sound_dir->tones[i].name, value);
2128 edje_file->sound_dir->tones_count++;
2129 edje_file->sound_dir->tones =
2130 realloc(edje_file->sound_dir->tones,
2131 sizeof (Edje_Sound_Tone) *
2132 edje_file->sound_dir->tones_count);
2134 if (!edje_file->sound_dir->tones)
2136 ERR("No enough memory.");
2140 tone = edje_file->sound_dir->tones + edje_file->sound_dir->tones_count - 1;
2141 memset(tone, 0, sizeof (Edje_Sound_Tone));
2144 tone->value = value;
2145 tone->id = edje_file->sound_dir->tones_count - 1;
2149 @edcsection{group,Group sub blocks}
2160 name: "nameusedbytheapplication";
2161 alias: "anothername";
2173 A "group" block contains the list of parts and programs that compose a
2178 ob_collections_group(void)
2180 Edje_Part_Collection *pc;
2183 if (current_de && !current_de->entry)
2185 ERR("A collection without a name was detected, that's not allowed.");
2189 current_de = mem_alloc(SZ(Edje_Part_Collection_Directory_Entry));
2190 current_de->id = eina_list_count(edje_collections);
2192 pc = mem_alloc(SZ(Edje_Part_Collection));
2193 edje_collections = eina_list_append(edje_collections, pc);
2194 pc->id = current_de->id;
2195 pc->broadcast_signal = EINA_TRUE; /* This was the behaviour by default in Edje 1.1 */
2197 cd = mem_alloc(SZ(Code));
2198 codes = eina_list_append(codes, cd);
2208 The name that will be used by the application to load the resulting
2209 Edje object and to identify the group to swallow in a GROUP part. If a
2210 group with the same name exists already it will be completely overriden
2215 st_collections_group_name(void)
2217 Edje_Part_Collection_Directory_Entry *alias;
2218 Edje_Part_Collection_Directory_Entry *older;
2219 Edje_Part_Collection *current_pc;
2220 Eina_List *l = NULL;
2224 current_pc = eina_list_data_get(eina_list_last(edje_collections));
2226 current_de->entry = parse_str(0);
2227 current_pc->part = current_de->entry;
2229 older = eina_hash_find(edje_file->collection, current_de->entry);
2230 if (older) eina_hash_del(edje_file->collection, current_de->entry, older);
2231 eina_hash_direct_add(edje_file->collection, current_de->entry, current_de);
2234 EINA_LIST_FOREACH(aliases, l, alias)
2235 if (strcmp(alias->entry, current_de->entry) == 0)
2237 Edje_Part_Collection *pc;
2239 pc = eina_list_nth(edje_collections, older->id);
2240 INF("overriding alias ('%s' => '%s') by group '%s'",
2241 alias->entry, pc->part,
2243 aliases = eina_list_remove_list(aliases, l);
2250 typedef struct _Edje_List_Foreach_Data Edje_List_Foreach_Data;
2251 struct _Edje_List_Foreach_Data
2257 _edje_data_item_list_foreach(const Eina_Hash *hash __UNUSED__, const void *key, void *data __UNUSED__, void *fdata)
2259 Edje_List_Foreach_Data *fd;
2262 fd->list = eina_list_append(fd->list, strdup(key));
2274 Parent group name for inheritance.
2275 Group "inherit" is used to inherit any predefined group and change
2276 some property which belongs to "part", "description", "items" or "program".
2277 The child group has the same property as parent group. If you specify the
2278 type again in an inherited part, it will cause an error (unless you plan
2284 st_collections_group_inherit(void)
2286 Edje_Part_Collection *pc, *pc2;
2287 Edje_Part *ep, *ep2;
2288 Edje_Part_Parser *epp, *epp2;
2289 Edje_Pack_Element *item, *item2;
2290 Edje_Pack_Element_Parser *pitem;
2291 Edje_Part_Description_Common *ed, *ed2;
2292 Edje_List_Foreach_Data fdata;
2299 pc = eina_list_data_get(eina_list_last(edje_collections));
2301 parent_name = parse_str(0);
2303 EINA_LIST_FOREACH(edje_collections, l, pc2)
2305 if (!strcmp(parent_name, pc2->part))
2310 ERR("parse error %s:%i. There isn't a group with the name %s",
2311 file_in, line - 1, parent_name);
2316 ERR("parse error %s:%i. You are trying to inherit '%s' from itself. That's not possible."
2317 "If there is another group of the same name, you want to inherit from that group and have the"
2318 "same name as that group, there is a trick ! Just put the inherit before the directive that set"
2319 "the name !", file_in, line - 1, parent_name);
2327 memset(&fdata, 0, sizeof(Edje_List_Foreach_Data));
2328 eina_hash_foreach(pc2->data,
2329 _edje_data_item_list_foreach, &fdata);
2331 if (!pc->data) pc->data = eina_hash_string_small_new(free);
2332 EINA_LIST_FREE(fdata.list, key)
2334 data = eina_hash_find(pc2->data, key);
2335 eina_hash_direct_add(pc->data, key, data);
2343 memset(&fdata, 0, sizeof(Edje_List_Foreach_Data));
2344 eina_hash_foreach(pc2->alias,
2345 _edje_data_item_list_foreach, &fdata);
2346 if (!pc->alias) pc->alias = eina_hash_string_small_new(free);
2347 EINA_LIST_FREE(fdata.list, key)
2349 alias = eina_hash_find(pc2->alias, key);
2350 eina_hash_direct_add(pc->alias, key, alias);
2355 char *key, *aliased;
2357 memset(&fdata, 0, sizeof(Edje_List_Foreach_Data));
2358 eina_hash_foreach(pc2->aliased,
2359 _edje_data_item_list_foreach, &fdata);
2360 if (!pc->aliased) pc->aliased = eina_hash_string_small_new(free);
2361 EINA_LIST_FREE(fdata.list, key)
2363 aliased = eina_hash_find(pc2->aliased, key);
2364 eina_hash_direct_add(pc->aliased, key, aliased);
2368 pc->prop.min.w = pc2->prop.min.w;
2369 pc->prop.min.h = pc2->prop.min.h;
2370 pc->prop.orientation = pc2->prop.orientation;
2372 pc->lua_script_only = pc2->lua_script_only;
2374 #define STRDUP(x) x ? strdup(x) : NULL
2375 for (i = 0 ; i < pc2->parts_count ; i++)
2378 ob_collections_group_parts_part();
2380 ep2 = pc2->parts[i];
2381 ep->name = STRDUP(ep2->name);
2382 ep->source = STRDUP(ep2->source);
2383 ep->source2 = STRDUP(ep2->source2);
2384 ep->source3 = STRDUP(ep2->source3);
2385 ep->source4 = STRDUP(ep2->source4);
2386 ep->source5 = STRDUP(ep2->source5);
2387 ep->source6 = STRDUP(ep2->source6);
2389 data_queue_copied_part_lookup(pc, &(ep2->clip_to_id), &(ep->clip_to_id));
2391 ep->type = ep2->type;
2392 ep->mouse_events = ep2->mouse_events;
2393 ep->repeat_events = ep2->repeat_events;
2394 ep->ignore_flags = ep2->ignore_flags;
2395 ep->scale = ep2->scale;
2396 ep->pointer_mode = ep2->pointer_mode;
2397 ep->precise_is_inside = ep2->precise_is_inside;
2398 ep->use_alternate_font_metrics = ep2->use_alternate_font_metrics;
2399 ep->effect = ep2->effect;
2400 ep->entry_mode = ep2->entry_mode;
2401 ep->select_mode = ep2->select_mode;
2402 ep->cursor_mode = ep2->cursor_mode;
2403 ep->multiline = ep2->multiline;
2404 ep->access = ep2->access;
2405 ep->dragable.x = ep2->dragable.x;
2406 ep->dragable.step_x = ep2->dragable.step_x;
2407 ep->dragable.count_x = ep2->dragable.count_x;
2408 ep->dragable.y = ep2->dragable.y;
2409 ep->dragable.step_y = ep2->dragable.step_y;
2410 ep->dragable.count_y = ep2->dragable.count_y;
2412 data_queue_copied_part_lookup(pc, &(ep2->dragable.confine_id), &(ep->dragable.confine_id));
2413 data_queue_copied_part_lookup(pc, &(ep2->dragable.event_id), &(ep->dragable.event_id));
2415 epp = (Edje_Part_Parser *)ep;
2416 epp2 = (Edje_Part_Parser *)ep2;
2417 epp->reorder.insert_before = STRDUP(epp2->reorder.insert_before);
2418 epp->reorder.insert_after = STRDUP(epp2->reorder.insert_after);
2419 epp->can_override = EINA_TRUE;
2421 for (j = 0 ; j < ep2->items_count ; j++)
2423 ob_collections_group_parts_part_box_items_item();
2424 item = ep->items[j];
2425 item2 = ep2->items[j];
2426 item->type = item2->type;
2427 item->name = STRDUP(item2->name);
2428 item->source = STRDUP(item2->source);
2429 item->min.w = item2->min.w;
2430 item->min.h = item2->min.h;
2431 item->prefer.w = item2->prefer.w;
2432 item->prefer.h = item2->prefer.h;
2433 item->max.w = item2->max.w;
2434 item->max.h = item2->max.h;
2435 item->padding.l = item2->padding.l;
2436 item->padding.r = item2->padding.r;
2437 item->padding.t = item2->padding.t;
2438 item->padding.b = item2->padding.b;
2439 item->align.x = item2->align.x;
2440 item->align.y = item2->align.y;
2441 item->weight.x = item2->weight.x;
2442 item->weight.y = item2->weight.y;
2443 item->aspect.w = item2->aspect.w;
2444 item->aspect.h = item2->aspect.h;
2445 item->aspect.mode = item2->aspect.mode;
2446 item->options = STRDUP(item2->options);
2447 item->col = item2->col;
2448 item->row = item2->row;
2449 item->colspan = item2->colspan;
2450 item->rowspan = item2->rowspan;
2452 pitem = (Edje_Pack_Element_Parser *)item;
2453 pitem->can_override = EINA_TRUE;
2456 ep->api.name = STRDUP(ep2->api.name);
2457 if (ep2->api.description) ep->api.description = STRDUP(ep2->api.description);
2459 // copy default description
2460 ob_collections_group_parts_part_description();
2461 ed = ep->default_desc;
2462 parent_desc = ed2 = ep2->default_desc;
2463 ed->state.name = STRDUP(ed2->state.name);
2464 ed->state.value = ed2->state.value;
2465 st_collections_group_parts_part_description_inherit();
2468 // copy other description
2469 for (j = 0 ; j < ep2->other.desc_count ; j++)
2471 ob_collections_group_parts_part_description();
2472 ed = ep->other.desc[j];
2473 parent_desc = ed2 = ep2->other.desc[j];
2474 ed->state.name = STRDUP(ed2->state.name);
2475 ed->state.value = ed2->state.value;
2476 st_collections_group_parts_part_description_inherit();
2482 for (j = 0 ; j < pc2->programs.fnmatch_count ; j++)
2484 ob_collections_group_programs_program();
2485 _edje_program_copy(current_program, pc2->programs.fnmatch[j]);
2487 for (j = 0 ; j < pc2->programs.strcmp_count ; j++)
2489 ob_collections_group_programs_program();
2490 _edje_program_copy(current_program, pc2->programs.strcmp[j]);
2492 for (j = 0 ; j < pc2->programs.strncmp_count ; j++)
2494 ob_collections_group_programs_program();
2495 _edje_program_copy(current_program, pc2->programs.strncmp[j]);
2497 for (j = 0 ; j < pc2->programs.strrncmp_count ; j++)
2499 ob_collections_group_programs_program();
2500 _edje_program_copy(current_program, pc2->programs.strrncmp[j]);
2502 for (j = 0 ; j < pc2->programs.nocmp_count ; j++)
2504 ob_collections_group_programs_program();
2505 _edje_program_copy(current_program, pc2->programs.nocmp[j]);
2509 Code_Program *cp, *cp2;
2510 Edje_Part_Collection_Directory_Entry *de;
2512 de = eina_hash_find(edje_file->collection, pc2->part);
2513 cd2 = eina_list_nth(codes, de->id);
2514 cd = eina_list_data_get(eina_list_last(codes));
2516 EINA_LIST_FOREACH(cd2->programs, l, cp2)
2518 cp = mem_alloc(SZ(Code_Program));
2522 cp->script = STRDUP(cp2->script);
2523 cd->is_lua = cd2->is_lua;
2524 cd->shared = cd2->shared;
2525 cd->programs = eina_list_append(cd->programs, cp);
2526 data_queue_copied_anonymous_lookup(pc, &(cp2->id), &(cp->id));
2540 The flag (on/off) as to if this group is defined ONLY by script
2541 callbacks such as init(), resize() and shutdown()
2545 st_collections_group_script_only(void)
2547 Edje_Part_Collection *pc;
2551 pc = eina_list_data_get(eina_list_last(edje_collections));
2552 pc->lua_script_only = parse_bool(0);
2560 [aditional group name]
2562 Additional name to serve as identifier. Defining multiple aliases is
2567 st_collections_group_alias(void)
2569 Edje_Part_Collection_Directory_Entry *alias;
2570 Edje_Part_Collection_Directory_Entry *tmp;
2575 alias = mem_alloc(SZ(Edje_Part_Collection_Directory_Entry));
2576 alias->id = current_de->id;
2577 alias->entry = parse_str(0);
2579 EINA_LIST_FOREACH(aliases, l, tmp)
2580 if (strcmp(alias->entry, tmp->entry) == 0)
2582 Edje_Part_Collection *pc;
2584 pc = eina_list_nth(edje_collections, tmp->id);
2585 INF("overriding alias ('%s' => '%s') to ('%s' => '%s')",
2586 tmp->entry, pc->part,
2587 alias->entry, current_de->entry);
2588 aliases = eina_list_remove_list(aliases, l);
2593 aliases = eina_list_append(aliases, alias);
2603 The minimum size for the container defined by the composition of the
2604 parts. It is not enforced.
2608 st_collections_group_min(void)
2610 Edje_Part_Collection *pc;
2614 pc = eina_list_data_get(eina_list_last(edje_collections));
2615 pc->prop.min.w = parse_int_range(0, 0, 0x7fffffff);
2616 pc->prop.min.h = parse_int_range(1, 0, 0x7fffffff);
2626 The maximum size for the container defined by the totality of the
2627 parts. It is not enforced.
2631 st_collections_group_max(void)
2633 Edje_Part_Collection *pc;
2637 pc = eina_list_data_get(eina_list_last(edje_collections));
2638 pc->prop.max.w = parse_int_range(0, 0, 0x7fffffff);
2639 pc->prop.max.h = parse_int_range(1, 0, 0x7fffffff);
2649 Signal got automatically broadcasted to all sub group part. Default to
2654 st_collections_group_broadcast_signal(void)
2656 Edje_Part_Collection *pc;
2660 pc = eina_list_data_get(eina_list_last(edje_collections));
2661 pc->broadcast_signal = parse_bool(0);
2684 This block is used to "inject" embryo scripts to a given Edje theme and
2685 it functions in two modalities. When it's included inside a "program"
2686 block, the script will be executed every time the program is run, on
2687 the other hand, when included directly into a "group", "part" or
2688 "description" block, it will be executed once at load time, in the
2693 ob_collections_group_script(void)
2697 cd = eina_list_data_get(eina_list_last(codes));
2699 if (!is_verbatim()) track_verbatim(1);
2707 cd->l1 = get_verbatim_line1();
2708 cd->l2 = get_verbatim_line2();
2711 ERR("parse error %s:%i. There is already an existing script section for the group",
2716 cd->original = strdup(s);
2718 set_verbatim(NULL, 0, 0);
2724 ob_collections_group_lua_script(void)
2728 cd = eina_list_data_get(eina_list_last(codes));
2730 if (!is_verbatim()) track_verbatim(1);
2738 cd->l1 = get_verbatim_line1();
2739 cd->l2 = get_verbatim_line2();
2742 ERR("parse error %s:%i. There is already an existing script section for the group",
2748 set_verbatim(NULL, 0, 0);
2754 st_collections_group_data_item(void)
2756 Edje_Part_Collection *pc;
2762 pc = eina_list_data_get(eina_list_last(edje_collections));
2765 pc->data = eina_hash_string_small_new(free);
2769 es = mem_alloc(SZ(Edje_String));
2770 es->str = parse_str(1);
2772 if (eina_hash_find(pc->data, key))
2773 eina_hash_modify(pc->data, key, es);
2775 eina_hash_direct_add(pc->data, key, es);
2785 This defines GROUP orientation.
2786 This is useful if you want match interface orientation with language.
2787 AUTO - Follow system defs.
2788 LTR - suitable for Left To Right Languages (latin)
2789 RTL - suitable for Right To Left Languages (Hebrew, Arabic interface)
2793 st_collections_group_orientation(void)
2795 Edje_Part_Collection *pc;
2799 pc = eina_list_data_get(eina_list_last(edje_collections));
2800 pc->prop.orientation = parse_enum(0,
2801 "AUTO", EDJE_ORIENTATION_AUTO,
2802 "LTR", EDJE_ORIENTATION_LTR,
2803 "RTL", EDJE_ORIENTATION_RTL,
2814 vertical: "limit_name" height_barrier;
2815 horizontal: "limit_name" width_barrier;
2822 This block is used to trigger some signal when the Edje object is resized.
2829 [name] [height barrier]
2831 It will send a signal: "limit,name,over" when the object is resized and pass
2832 the limit by growing over it. And it will send: "limit,name,below" when
2833 it pass below that limit.
2834 This limit will be applied on the y absis and is expressed in pixels.
2838 st_collections_group_limits_vertical(void)
2840 Edje_Part_Collection *pc;
2845 el = mem_alloc(SZ(Edje_Limit));
2847 pc = eina_list_data_get(eina_list_last(edje_collections));
2848 pc->limits.vertical_count++;
2849 pc->limits.vertical = realloc(pc->limits.vertical, pc->limits.vertical_count * sizeof (Edje_Limit *));
2850 if (!pc->limits.vertical || !el)
2852 ERR("Not enough memory.");
2856 pc->limits.vertical[pc->limits.vertical_count - 1] = el;
2858 el->name = parse_str(0);
2859 el->value = parse_int_range(1, 1, 0xffff);
2867 [name] [width barrier]
2869 It will send a signal: "limit,name,over" when the object is resized and pass
2870 the limit by growing over it. And it will send: "limit,name,below" when
2871 it pass below that limit.
2872 This limit will be applied on the x absis and is expressed in pixels.
2876 st_collections_group_limits_horizontal(void)
2878 Edje_Part_Collection *pc;
2883 el = mem_alloc(SZ(Edje_Limit));
2885 pc = eina_list_data_get(eina_list_last(edje_collections));
2886 pc->limits.horizontal_count++;
2887 pc->limits.horizontal = realloc(pc->limits.horizontal, pc->limits.horizontal_count * sizeof (Edje_Limit *));
2888 if (!pc->limits.horizontal || !el)
2890 ERR("Not enough memory.");
2894 pc->limits.horizontal[pc->limits.horizontal_count - 1] = el;
2896 el->name = parse_str(0);
2897 el->value = parse_int_range(1, 1, 0xffff);
2907 alias: "theme_part_path" "real_part_path";
2912 Alias of part give a chance to let the designer put the real one
2913 in a box or reuse one from a GROUP or inside a BOX.
2917 st_collections_group_parts_alias(void)
2919 Edje_Part_Collection *pc;
2921 const char *aliased;
2925 pc = eina_list_data_get(eina_list_last(edje_collections));
2927 alias = parse_str(0);
2928 aliased = parse_str(1);
2930 if (!pc->alias) pc->alias = eina_hash_string_small_new(NULL);
2931 eina_hash_add(pc->alias, alias, aliased);
2933 if (!pc->aliased) pc->aliased = eina_hash_string_small_new(NULL);
2934 eina_hash_add(pc->aliased, aliased, alias);
2952 clip_to: "anotherpart";
2953 source: "groupname";
2954 pointer_mode: AUTOGRAB;
2955 use_alternate_font_metrics: 0;
2965 Parts are used to represent the most basic design elements of the
2966 theme, for example, a part can represent a line in a border or a label
2971 ob_collections_group_parts_part(void)
2973 Edje_Part_Collection *pc;
2975 Edje_Part_Parser *epp;
2977 ep = mem_alloc(SZ(Edje_Part_Parser));
2979 pc = eina_list_data_get(eina_list_last(edje_collections));
2981 pc->parts = realloc(pc->parts, pc->parts_count * sizeof (Edje_Part *));
2984 ERR("Not enough memory.");
2987 current_part = pc->parts[pc->parts_count - 1] = ep;
2989 ep->id = pc->parts_count - 1;
2990 ep->type = EDJE_PART_TYPE_IMAGE;
2991 ep->mouse_events = 1;
2992 ep->repeat_events = 0;
2993 ep->ignore_flags = EVAS_EVENT_FLAG_NONE;
2995 ep->pointer_mode = EVAS_OBJECT_POINTER_MODE_AUTOGRAB;
2996 ep->precise_is_inside = 0;
2997 ep->use_alternate_font_metrics = 0;
2999 ep->clip_to_id = -1;
3000 ep->dragable.confine_id = -1;
3001 ep->dragable.event_id = -1;
3004 epp = (Edje_Part_Parser *)ep;
3005 epp->reorder.insert_before = NULL;
3006 epp->reorder.insert_after = NULL;
3007 epp->reorder.before = NULL;
3008 epp->reorder.after = NULL;
3009 epp->reorder.linked_prev = 0;
3010 epp->reorder.linked_next = 0;
3011 epp->reorder.done = EINA_FALSE;
3012 epp->can_override = EINA_FALSE;
3022 The part's name will be used as reference in the theme's relative
3023 positioning system, by programs and in some cases by the application.
3024 It must be unique within the group.
3028 st_collections_group_parts_part_name(void)
3030 Edje_Part_Collection *pc;
3032 Edje_Part_Parser *epp;
3036 pc = eina_list_data_get(eina_list_last(edje_collections));
3038 ep->name = parse_str(0);
3044 for (i = 0; i < (pc->parts_count - 1); i++)
3046 if (pc->parts[i]->name && (!strcmp(pc->parts[i]->name, ep->name)))
3048 epp = (Edje_Part_Parser *)pc->parts[i];
3049 if (!epp->can_override)
3051 ERR("parse error %s:%i. There is already a part of the name %s",
3052 file_in, line - 1, ep->name);
3059 pc->parts = realloc(pc->parts, pc->parts_count * sizeof (Edje_Part *));
3060 ep = current_part = pc->parts[i];
3061 epp->can_override = EINA_FALSE;
3076 Set the type (all caps) from among the available types, it's set to
3077 IMAGE by default. Valid types:
3092 st_collections_group_parts_part_type(void)
3098 type = parse_enum(0,
3099 "NONE", EDJE_PART_TYPE_NONE,
3100 "RECT", EDJE_PART_TYPE_RECTANGLE,
3101 "TEXT", EDJE_PART_TYPE_TEXT,
3102 "IMAGE", EDJE_PART_TYPE_IMAGE,
3103 "SWALLOW", EDJE_PART_TYPE_SWALLOW,
3104 "TEXTBLOCK", EDJE_PART_TYPE_TEXTBLOCK,
3105 "GROUP", EDJE_PART_TYPE_GROUP,
3106 "BOX", EDJE_PART_TYPE_BOX,
3107 "TABLE", EDJE_PART_TYPE_TABLE,
3108 "EXTERNAL", EDJE_PART_TYPE_EXTERNAL,
3109 "PROXY", EDJE_PART_TYPE_PROXY,
3110 "SPACER", EDJE_PART_TYPE_SPACER,
3113 /* handle type change of inherited part */
3114 if (type != current_part->type)
3116 Edje_Part_Description_Common *new, *previous;
3117 Edje_Part_Collection *pc;
3121 /* we don't free old part as we don't remove all reference to them */
3122 part_description_image_cleanup(current_part);
3124 pc = eina_list_data_get(eina_list_last(edje_collections));
3127 previous = ep->default_desc;
3130 new = _edje_part_description_alloc(type, pc->part, ep->name);
3131 memcpy(new, previous, sizeof (Edje_Part_Description_Common));
3133 ep->default_desc = new;
3136 for (i = 0; i < ep->other.desc_count; i++)
3138 previous = ep->other.desc[i];
3139 new = _edje_part_description_alloc(type, pc->part, ep->name);
3140 memcpy(new, previous, sizeof (Edje_Part_Description_Common));
3141 ep->other.desc[i] = new;
3145 current_part->type = type;
3153 [another part's name]
3155 The part's name which this part is inserted before. One part cannot
3156 have both insert_before and insert_after. One part cannot refer
3157 more than one by insert_before.
3162 st_collections_group_parts_part_insert_before(void)
3164 Edje_Part_Parser *epp;
3167 epp = (Edje_Part_Parser *)current_part;
3168 epp->reorder.insert_before = parse_str(0);
3176 [another part's name]
3178 The part's name which this part is inserted after. One part cannot
3179 have both insert_before and insert_after. One part cannot refer
3180 more than one by insert_after.
3185 st_collections_group_parts_part_insert_after(void)
3187 Edje_Part_Parser *epp;
3190 epp = (Edje_Part_Parser *)current_part;
3191 epp->reorder.insert_after = parse_str(0);
3201 Specifies whether the part will emit signals, although it is named
3202 "mouse_events", disabling it (0) will prevent the part from emitting
3203 any type of signal at all. It's set to 1 by default.
3207 st_collections_group_parts_part_mouse_events(void)
3211 current_part->mouse_events = parse_bool(0);
3221 Specifies whether a part echoes a mouse event to other parts below the
3222 pointer (1), or not (0). It's set to 0 by default.
3226 st_collections_group_parts_part_repeat_events(void)
3230 current_part->repeat_events = parse_bool(0);
3240 Specifies whether events with the given flags should be ignored,
3241 i.e., will not have the signals emitted to the parts. Multiple flags
3242 must be separated by spaces, the effect will be ignoring all events
3243 with one of the flags specified. Possible flags:
3244 @li NONE (default value, no event will be ignored)
3249 st_collections_group_parts_part_ignore_flags(void)
3251 check_min_arg_count(1);
3253 current_part->ignore_flags = parse_flags(0,
3254 "NONE", EVAS_EVENT_FLAG_NONE,
3255 "ON_HOLD", EVAS_EVENT_FLAG_ON_HOLD,
3266 Specifies whether the part will scale its size with an edje scaling
3267 factor. By default scale is off (0) and the default scale factor is
3268 1.0 - that means no scaling. This would be used to scale properties
3269 such as font size, min/max size of the part, and possibly can be used
3270 to scale based on DPI of the target device. The reason to be selective
3271 is that some things work well being scaled, others do not, so the
3272 designer gets to choose what works best.
3276 st_collections_group_parts_part_scale(void)
3280 current_part->scale = parse_bool(0);
3290 Sets the mouse pointer behavior for a given part. The default value is
3291 AUTOGRAB. Aviable modes:
3292 @li AUTOGRAB, when the part is clicked and the button remains
3293 pressed, the part will be the source of all future mouse
3294 signals emitted, even outside the object, until the button is
3296 @li NOGRAB, the effect will be limited to the part's container.
3300 st_collections_group_parts_part_pointer_mode(void)
3304 current_part->pointer_mode = parse_enum(0,
3305 "AUTOGRAB", EVAS_OBJECT_POINTER_MODE_AUTOGRAB,
3306 "NOGRAB", EVAS_OBJECT_POINTER_MODE_NOGRAB,
3317 Enables precise point collision detection for the part, which is more
3318 resource intensive. Disabled by default.
3322 st_collections_group_parts_part_precise_is_inside(void)
3326 current_part->precise_is_inside = parse_bool(0);
3332 use_alternate_font_metrics
3336 Only affects text and textblock parts, when enabled Edje will use
3337 different size measurement functions. Disabled by default. (note from
3338 the author: I don't know what this is exactly useful for?)
3342 st_collections_group_parts_part_use_alternate_font_metrics(void)
3346 current_part->use_alternate_font_metrics = parse_bool(0);
3354 [another part's name]
3356 Only renders the area of part that coincides with another part's
3357 container. Overflowing content will not be displayed. Note that
3358 the part being clipped to can only be a rectangle part.
3362 st_collections_group_parts_part_clip_to_id(void)
3364 Edje_Part_Collection *pc;
3368 pc = eina_list_data_get(eina_list_last(edje_collections));
3372 name = parse_str(0);
3373 data_queue_part_lookup(pc, name, &(current_part->clip_to_id));
3383 [another group's name]
3385 Only available to GROUP or TEXTBLOCK parts. Swallows the specified
3386 group into the part's container if a GROUP. If TEXTBLOCK it is used
3387 for the group to be loaded and used for selection display UNDER the
3388 selected text. source2 is used for on top of the selected text, if
3389 source2 is specified.
3393 st_collections_group_parts_part_source(void)
3397 //FIXME: validate this somehow (need to decide on the format also)
3398 current_part->source = parse_str(0);
3399 data_queue_group_lookup(current_part->source, current_part);
3407 [another group's name]
3409 Only available to TEXTBLOCK parts. It is used for the group to be
3410 loaded and used for selection display OVER the selected text. source
3411 is used for under of the selected text, if source is specified.
3415 st_collections_group_parts_part_source2(void)
3419 //FIXME: validate this somehow (need to decide on the format also)
3420 current_part->source2 = parse_str(0);
3421 data_queue_group_lookup(current_part->source2, current_part);
3429 [another group's name]
3431 Only available to TEXTBLOCK parts. It is used for the group to be
3432 loaded and used for cursor display UNDER the cursor position. source4
3433 is used for over the cursor text, if source4 is specified.
3437 st_collections_group_parts_part_source3(void)
3441 //FIXME: validate this somehow (need to decide on the format also)
3442 current_part->source3 = parse_str(0);
3443 data_queue_group_lookup(current_part->source3, current_part);
3451 [another group's name]
3453 Only available to TEXTBLOCK parts. It is used for the group to be
3454 loaded and used for cursor display OVER the cursor position. source3
3455 is used for under the cursor text, if source4 is specified.
3459 st_collections_group_parts_part_source4(void)
3463 //FIXME: validate this somehow (need to decide on the format also)
3464 current_part->source4 = parse_str(0);
3465 data_queue_group_lookup(current_part->source4, current_part);
3473 [another group's name]
3475 Only available to TEXTBLOCK parts. It is used for the group to be
3476 loaded and used for anchors display UNDER the anchor position. source6
3477 is used for over the anchors text, if source6 is specified.
3481 st_collections_group_parts_part_source5(void)
3485 //FIXME: validate this somehow (need to decide on the format also)
3486 current_part->source5 = parse_str(0);
3487 data_queue_group_lookup(current_part->source5, current_part);
3495 [another group's name]
3497 Only available to TEXTBLOCK parts. It is used for the group to be
3498 loaded and used for anchor display OVER the anchor position. source5
3499 is used for under the anchor text, if source6 is specified.
3503 st_collections_group_parts_part_source6(void)
3507 //FIXME: validate this somehow (need to decide on the format also)
3508 current_part->source6 = parse_str(0);
3509 data_queue_group_lookup(current_part->source6, current_part);
3519 (optional) [SHADOW DIRECTION]
3521 Causes Edje to draw the selected effect among:
3528 @li OUTLINE_SOFT_SHADOW
3533 Shadow directions (default if not given is BOTTOM_RIGHT):
3545 st_collections_group_parts_part_effect(void)
3547 check_min_arg_count(1);
3549 current_part->effect = parse_enum(0,
3550 "NONE", EDJE_TEXT_EFFECT_NONE,
3551 "PLAIN", EDJE_TEXT_EFFECT_PLAIN,
3552 "OUTLINE", EDJE_TEXT_EFFECT_OUTLINE,
3553 "SOFT_OUTLINE", EDJE_TEXT_EFFECT_SOFT_OUTLINE,
3554 "SHADOW", EDJE_TEXT_EFFECT_SHADOW,
3555 "SOFT_SHADOW", EDJE_TEXT_EFFECT_SOFT_SHADOW,
3556 "OUTLINE_SHADOW", EDJE_TEXT_EFFECT_OUTLINE_SHADOW,
3557 "OUTLINE_SOFT_SHADOW", EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW,
3558 "FAR_SHADOW", EDJE_TEXT_EFFECT_FAR_SHADOW,
3559 "FAR_SOFT_SHADOW", EDJE_TEXT_EFFECT_FAR_SOFT_SHADOW,
3560 "GLOW", EDJE_TEXT_EFFECT_GLOW,
3562 if (get_arg_count() >= 2)
3564 unsigned char shadow;
3566 shadow = parse_enum(1,
3567 "BOTTOM_RIGHT", EDJE_TEXT_EFFECT_SHADOW_DIRECTION_BOTTOM_RIGHT,
3568 "BOTTOM", EDJE_TEXT_EFFECT_SHADOW_DIRECTION_BOTTOM,
3569 "BOTTOM_LEFT", EDJE_TEXT_EFFECT_SHADOW_DIRECTION_BOTTOM_LEFT,
3570 "LEFT", EDJE_TEXT_EFFECT_SHADOW_DIRECTION_LEFT,
3571 "TOP_LEFT", EDJE_TEXT_EFFECT_SHADOW_DIRECTION_TOP_LEFT,
3572 "TOP", EDJE_TEXT_EFFECT_SHADOW_DIRECTION_TOP,
3573 "TOP_RIGHT", EDJE_TEXT_EFFECT_SHADOW_DIRECTION_TOP_RIGHT,
3574 "RIGHT", EDJE_TEXT_EFFECT_SHADOW_DIRECTION_RIGHT,
3576 EDJE_TEXT_EFFECT_SHADOW_DIRECTION_SET(current_part->effect, shadow);
3587 Sets the edit mode for a textblock part to one of:
3592 It causes the part be editable if the edje object has the keyboard
3593 focus AND the part has the edje focus (or selectable always
3594 regardless of focus) and in the event of password mode, not
3595 selectable and all text chars replaced with *'s but editable and
3600 st_collections_group_parts_part_entry_mode(void)
3604 current_part->entry_mode = parse_enum(0,
3605 "NONE", EDJE_ENTRY_EDIT_MODE_NONE,
3606 "PLAIN", EDJE_ENTRY_EDIT_MODE_SELECTABLE,
3607 "EDITABLE", EDJE_ENTRY_EDIT_MODE_EDITABLE,
3608 "PASSWORD", EDJE_ENTRY_EDIT_MODE_PASSWORD,
3619 Sets the selection mode for a textblock part to one of:
3620 @li DEFAULT selection mode is what you would expect on any desktop. Press
3621 mouse, drag and release to end.
3622 @li EXPLICIT mode requires the application
3623 controlling the edje object has to explicitly begin and end selection
3624 modes, and the selection itself is dragable at both ends.
3625 @li BLOCK_HANDLE mode is the same as DEFAULT, it is for backward-compatibility.
3629 st_collections_group_parts_part_select_mode(void)
3633 current_part->select_mode = parse_enum(0,
3634 "DEFAULT", EDJE_ENTRY_SELECTION_MODE_DEFAULT,
3635 "EXPLICIT", EDJE_ENTRY_SELECTION_MODE_EXPLICIT,
3636 "BLOCK_HANDLE", EDJE_ENTRY_SELECTION_MODE_DEFAULT,
3647 Sets the cursor mode for a textblock part to one of:
3648 @li UNDER cursor mode means the cursor will draw below the character pointed
3649 at. That's the default.
3650 @li BEFORE cursor mode means the cursor is drawn as a vertical line before
3651 the current character, just like many other GUI toolkits handle it.
3655 st_collections_group_parts_part_cursor_mode(void)
3659 current_part->cursor_mode = parse_enum(0,
3660 "UNDER", EDJE_ENTRY_CURSOR_MODE_UNDER,
3661 "BEFORE", EDJE_ENTRY_CURSOR_MODE_BEFORE,
3672 It causes a textblock that is editable to allow multiple lines for
3677 st_collections_group_parts_part_multiline(void)
3681 current_part->multiline = parse_bool(0);
3691 Specifies whether the part will use accessibility feature (1),
3692 or not (0). It's set to 0 by default.
3696 st_collections_group_parts_part_access(void)
3700 current_part->access = parse_bool(0);
3711 confine: "another part";
3712 events: "another dragable part";
3719 When this block is used the resulting part can be dragged around the
3720 interface, do not confuse with external drag & drop. By default Edje
3721 (and most applications) will attempt to use the minimal size possible
3722 for a dragable part. If the min property is not set in the description
3723 the part will be (most likely) set to 0px width and 0px height, thus
3730 [enable/disable] [step] [count]
3732 Used to setup dragging events for the X axis. The first parameter is
3733 used to enable (1 or -1) and disable (0) dragging along the axis. When
3734 enabled, 1 will set the starting point at 0.0 and -1 at 1.0. The second
3735 parameter takes any integer and will limit movement to values
3736 divisible by it, causing the part to jump from position to position.
3737 The third parameter, (question from the author: What is count for?).
3741 st_collections_group_parts_part_dragable_x(void)
3745 current_part->dragable.x = parse_int_range(0, -1, 1);
3746 current_part->dragable.step_x = parse_int_range(1, 0, 0x7fffffff);
3747 current_part->dragable.count_x = parse_int_range(2, 0, 0x7fffffff);
3755 [enable/disable] [step] [count]
3757 Used to setup dragging events for the Y axis. The first parameter is
3758 used to enable (1 or -1) and disable (0) dragging along the axis. When
3759 enabled, 1 will set the starting point at 0.0 and -1 at 1.0. The second
3760 parameter takes any integer and will limit movement to values
3761 divisibles by it, causing the part to jump from position to position.
3762 The third parameter, (question from the author: What is count for?).
3766 st_collections_group_parts_part_dragable_y(void)
3770 current_part->dragable.y = parse_int_range(0, -1, 1);
3771 current_part->dragable.step_y = parse_int_range(1, 0, 0x7fffffff);
3772 current_part->dragable.count_y = parse_int_range(2, 0, 0x7fffffff);
3780 [another part's name]
3782 When set, limits the movement of the dragged part to another part's
3783 container. When you use confine don't forget to set a min size for the
3784 part, or the draggie will not show up.
3788 st_collections_group_parts_part_dragable_confine(void)
3790 Edje_Part_Collection *pc;
3794 pc = eina_list_data_get(eina_list_last(edje_collections));
3798 name = parse_str(0);
3799 data_queue_part_lookup(pc, name, &(current_part->dragable.confine_id));
3809 [another dragable part's name]
3811 It causes the part to forward the drag events to another part, thus
3812 ignoring them for itself.
3816 st_collections_group_parts_part_dragable_events(void)
3818 Edje_Part_Collection *pc;
3822 pc = eina_list_data_get(eina_list_last(edje_collections));
3826 name = parse_str(0);
3827 data_queue_part_lookup(pc, name, &(current_part->dragable.event_id));
3843 source: "some source";
3850 source: "some other source";
3860 On a part of type BOX, this block can be used to set other groups
3861 as elements of the box. These can be mixed with external objects set
3862 by the application through the edje_object_part_box_* API.
3865 static void ob_collections_group_parts_part_box_items_item(void)
3868 Edje_Pack_Element *item;
3869 Edje_Pack_Element_Parser *pitem;
3873 if ((ep->type != EDJE_PART_TYPE_BOX) && (ep->type != EDJE_PART_TYPE_TABLE))
3875 ERR("parse error %s:%i. box attributes in non-BOX or TABLE part.",
3881 ep->items = realloc(ep->items, sizeof (Edje_Pack_Element*) * ep->items_count);
3884 ERR("Not enough memory.");
3888 item = mem_alloc(SZ(Edje_Pack_Element_Parser));
3889 current_item = ep->items[ep->items_count - 1] = item;
3890 item->type = EDJE_PART_TYPE_GROUP;
3892 item->source = NULL;
3899 item->padding.l = 0;
3900 item->padding.r = 0;
3901 item->padding.t = 0;
3902 item->padding.b = 0;
3903 item->align.x = FROM_DOUBLE(0.5);
3904 item->align.y = FROM_DOUBLE(0.5);
3905 item->weight.x = FROM_DOUBLE(0.0);
3906 item->weight.y = FROM_DOUBLE(0.0);
3909 item->aspect.mode = EDJE_ASPECT_CONTROL_NONE;
3910 item->options = NULL;
3915 pitem = (Edje_Pack_Element_Parser *)item;
3916 pitem->can_override = EINA_FALSE;
3924 Only GROUP for now (defaults to it)
3926 Sets the type of the object this item will hold.
3929 static void st_collections_group_parts_part_box_items_item_type(void)
3937 if (strcmp(s, "GROUP"))
3939 ERR("parse error %s:%i. token %s not one of: GROUP.",
3940 file_in, line - 1, s);
3943 /* FIXME: handle the enum, once everything else is supported */
3944 current_item->type = EDJE_PART_TYPE_GROUP;
3953 [name for the object]
3955 Sets the name of the object via evas_object_name_set().
3958 static void st_collections_group_parts_part_box_items_item_name(void)
3961 Edje_Pack_Element *item;
3962 Edje_Pack_Element_Parser *pitem;
3967 item = ep->items[ep->items_count - 1];
3969 item->name = parse_str(0);
3974 for (i = 0; i < ep->items_count - 1; ++i)
3976 if (ep->items[i]->name && (!strcmp(ep->items[i]->name, item->name)))
3978 pitem = (Edje_Pack_Element_Parser *)ep->items[i];
3979 if (!pitem->can_override)
3981 ERR("parse error %s:%i. There is already a item of the name %s",
3982 file_in, line - 1, item->name);
3989 ep->items = realloc(ep->items, ep->items_count * sizeof (Edje_Pack_Element *));
3990 current_item = ep->items[i];
3991 pitem->can_override = EINA_FALSE;
4003 [another group's name]
4005 Sets the group this object will be made from.
4008 static void st_collections_group_parts_part_box_items_item_source(void)
4012 current_item->source = parse_str(0);
4013 data_queue_group_lookup(current_item->source, current_part);
4023 Sets the minimum size hints for this object.
4026 static void st_collections_group_parts_part_box_items_item_min(void)
4030 current_item->min.w = parse_int_range(0, 0, 0x7ffffff);
4031 current_item->min.h = parse_int_range(1, 0, 0x7ffffff);
4041 Sets the preferred size hints for this object.
4044 static void st_collections_group_parts_part_box_items_item_prefer(void)
4048 current_item->prefer.w = parse_int_range(0, 0, 0x7ffffff);
4049 current_item->prefer.h = parse_int_range(1, 0, 0x7ffffff);
4058 Sets the maximum size hints for this object.
4061 static void st_collections_group_parts_part_box_items_item_max(void)
4065 current_item->max.w = parse_int_range(0, 0, 0x7ffffff);
4066 current_item->max.h = parse_int_range(1, 0, 0x7ffffff);
4074 [left] [right] [top] [bottom]
4076 Sets the padding hints for this object.
4079 static void st_collections_group_parts_part_box_items_item_padding(void)
4083 current_item->padding.l = parse_int_range(0, 0, 0x7ffffff);
4084 current_item->padding.r = parse_int_range(1, 0, 0x7ffffff);
4085 current_item->padding.t = parse_int_range(2, 0, 0x7ffffff);
4086 current_item->padding.b = parse_int_range(3, 0, 0x7ffffff);
4096 Sets the alignment hints for this object.
4099 static void st_collections_group_parts_part_box_items_item_align(void)
4103 current_item->align.x = FROM_DOUBLE(parse_float_range(0, -1.0, 1.0));
4104 current_item->align.y = FROM_DOUBLE(parse_float_range(1, -1.0, 1.0));
4114 Sets the weight hints for this object.
4117 static void st_collections_group_parts_part_box_items_item_weight(void)
4121 current_item->weight.x = FROM_DOUBLE(parse_float_range(0, 0.0, 99999.99));
4122 current_item->weight.y = FROM_DOUBLE(parse_float_range(1, 0.0, 99999.99));
4132 Sets the aspect width and height hints for this object.
4135 static void st_collections_group_parts_part_box_items_item_aspect(void)
4139 current_item->aspect.w = parse_int_range(0, 0, 0x7fffffff);
4140 current_item->aspect.h = parse_int_range(1, 0, 0x7fffffff);
4148 NONE, NEITHER, HORIZONTAL, VERTICAL, BOTH
4150 Sets the aspect control hints for this object.
4153 static void st_collections_group_parts_part_box_items_item_aspect_mode(void)
4157 current_item->aspect.mode = parse_enum(0,
4158 "NONE", EDJE_ASPECT_CONTROL_NONE,
4159 "NEITHER", EDJE_ASPECT_CONTROL_NEITHER,
4160 "HORIZONTAL", EDJE_ASPECT_CONTROL_HORIZONTAL,
4161 "VERTICAL", EDJE_ASPECT_CONTROL_VERTICAL,
4162 "BOTH", EDJE_ASPECT_CONTROL_BOTH,
4173 Sets extra options for the object. Unused for now.
4176 static void st_collections_group_parts_part_box_items_item_options(void)
4180 current_item->options = parse_str(0);
4190 Sets the position this item will have in the table.
4191 This is required for parts of type TABLE.
4194 static void st_collections_group_parts_part_table_items_item_position(void)
4198 if (current_part->type != EDJE_PART_TYPE_TABLE)
4200 ERR("parse error %s:%i. table attributes in non-TABLE part.",
4205 current_item->col = parse_int_range(0, 0, 0xffff);
4206 current_item->row = parse_int_range(1, 0, 0xffff);
4216 Sets how many columns/rows this item will use.
4220 static void st_collections_group_parts_part_table_items_item_span(void)
4224 if (current_part->type != EDJE_PART_TYPE_TABLE)
4226 ERR("parse error %s:%i. table attributes in non-TABLE part.",
4231 current_item->colspan = parse_int_range(0, 1, 0xffff);
4232 current_item->rowspan = parse_int_range(1, 1, 0xffff);
4236 @edcsection{description,State description sub blocks}
4245 inherit: "another_description" INDEX;
4246 state: "description_name" INDEX;
4264 Every part can have one or more description blocks. Each description is
4265 used to define style and layout properties of a part in a given
4270 ob_collections_group_parts_part_description(void)
4272 Edje_Part_Collection *pc;
4274 Edje_Part_Description_Common *ed;
4276 pc = eina_list_data_get(eina_list_last(edje_collections));
4279 ed = _edje_part_description_alloc(ep->type, pc->part, ep->name);
4281 if (!ep->default_desc)
4283 current_desc = ep->default_desc = ed;
4287 ep->other.desc_count++;
4288 ep->other.desc = realloc(ep->other.desc,
4289 sizeof (Edje_Part_Description_Common*) * ep->other.desc_count);
4290 current_desc = ep->other.desc[ep->other.desc_count - 1] = ed;
4295 ed->align.x = FROM_DOUBLE(0.5);
4296 ed->align.y = FROM_DOUBLE(0.5);
4303 ed->rel1.relative_x = FROM_DOUBLE(0.0);
4304 ed->rel1.relative_y = FROM_DOUBLE(0.0);
4305 ed->rel1.offset_x = 0;
4306 ed->rel1.offset_y = 0;
4309 ed->rel2.relative_x = FROM_DOUBLE(1.0);
4310 ed->rel2.relative_y = FROM_DOUBLE(1.0);
4311 ed->rel2.offset_x = -1;
4312 ed->rel2.offset_y = -1;
4315 ed->color_class = NULL;
4324 ed->map.id_persp = -1;
4325 ed->map.id_light = -1;
4326 ed->map.rot.id_center = -1;
4327 ed->map.rot.x = FROM_DOUBLE(0.0);
4328 ed->map.rot.y = FROM_DOUBLE(0.0);
4329 ed->map.rot.z = FROM_DOUBLE(0.0);
4333 ed->map.backcull = 0;
4334 ed->map.persp_on = 0;
4335 ed->persp.zplane = 0;
4336 ed->persp.focal = 1000;
4337 ed->minmul.have = 1;
4338 ed->minmul.w = FROM_INT(1);
4339 ed->minmul.h = FROM_INT(1);
4347 [another description's name] [another description's index]
4349 When set, the description will inherit all the properties from the
4350 named description. The properties defined in this part will override
4351 the inherited properties, reducing the amount of necessary code for
4352 simple state changes. Note: inheritance in Edje is single level only.
4356 st_collections_group_parts_part_description_inherit(void)
4358 Edje_Part_Collection *pc;
4360 Edje_Part_Description_Common *ed, *parent = NULL;
4361 Edje_Part_Image_Id *iid;
4363 const char *state_name;
4364 double parent_val, state_val;
4366 pc = eina_list_data_get(eina_list_last(edje_collections));
4370 if (!ed->state.name)
4372 ERR("parse error %s:%i. inherit may only be used after state",
4377 parent = parent_desc;
4380 check_min_arg_count(1);
4382 /* inherit may not be used in the default description */
4383 if (!ep->other.desc_count)
4385 ERR("parse error %s:%i. "
4386 "inherit may not be used in the default description",
4391 /* find the description that we inherit from */
4392 parent_name = parse_str(0);
4393 if (get_arg_count() == 2)
4394 parent_val = parse_float_range(1, 0.0, 1.0);
4398 if (!strcmp (parent_name, "default") && parent_val == 0.0)
4399 parent = ep->default_desc;
4402 Edje_Part_Description_Common *d;
4403 double min_dst = 999.0;
4406 if (!strcmp(parent_name, "default"))
4408 parent = ep->default_desc;
4409 min_dst = ABS(ep->default_desc->state.value - parent_val);
4412 for (i = 0; i < ep->other.desc_count; ++i)
4414 d = ep->other.desc[i];
4416 if (!strcmp (d->state.name, parent_name))
4421 dst = ABS(d->state.value - parent_val);
4433 ERR("parse error %s:%i. "
4434 "cannot find referenced part %s state %s %lf",
4435 file_in, line - 1, ep->name, parent_name, parent_val);
4441 /* now do a full copy, only state info will be kept */
4442 state_name = ed->state.name;
4443 state_val = ed->state.value;
4447 ed->state.name = state_name;
4448 ed->state.value = state_val;
4450 data_queue_copied_part_lookup(pc, &parent->rel1.id_x, &ed->rel1.id_x);
4451 data_queue_copied_part_lookup(pc, &parent->rel1.id_y, &ed->rel1.id_y);
4452 data_queue_copied_part_lookup(pc, &parent->rel2.id_x, &ed->rel2.id_x);
4453 data_queue_copied_part_lookup(pc, &parent->rel2.id_y, &ed->rel2.id_y);
4455 data_queue_copied_part_lookup(pc, &parent->map.id_persp, &ed->map.id_persp);
4456 data_queue_copied_part_lookup(pc, &parent->map.id_light, &ed->map.id_light);
4457 data_queue_copied_part_lookup(pc, &parent->map.rot.id_center, &ed->map.rot.id_center);
4459 /* make sure all the allocated memory is getting copied, not just
4462 #define STRDUP(x) x ? strdup(x) : NULL
4464 ed->color_class = STRDUP(ed->color_class);
4467 case EDJE_PART_TYPE_SPACER:
4468 case EDJE_PART_TYPE_RECTANGLE:
4469 case EDJE_PART_TYPE_SWALLOW:
4470 case EDJE_PART_TYPE_GROUP:
4471 /* Nothing todo, this part only have a common description. */
4473 case EDJE_PART_TYPE_TEXT:
4474 case EDJE_PART_TYPE_TEXTBLOCK:
4476 Edje_Part_Description_Text *ted = (Edje_Part_Description_Text*) ed;
4477 Edje_Part_Description_Text *tparent = (Edje_Part_Description_Text*) parent;
4479 ted->text = tparent->text;
4481 ted->text.text.str = STRDUP(ted->text.text.str);
4482 ted->text.text_class = STRDUP(ted->text.text_class);
4483 ted->text.font.str = STRDUP(ted->text.font.str);
4485 data_queue_copied_part_lookup(pc, &(tparent->text.id_source), &(ted->text.id_source));
4486 data_queue_copied_part_lookup(pc, &(tparent->text.id_text_source), &(ted->text.id_text_source));
4490 case EDJE_PART_TYPE_IMAGE:
4492 Edje_Part_Description_Image *ied = (Edje_Part_Description_Image *) ed;
4493 Edje_Part_Description_Image *iparent = (Edje_Part_Description_Image *) parent;
4496 ied->image = iparent->image;
4498 data_queue_image_remove(&ied->image.id, &ied->image.set);
4499 data_queue_copied_image_lookup(&iparent->image.id, &ied->image.id, &ied->image.set);
4501 ied->image.tweens = calloc(iparent->image.tweens_count,
4502 sizeof (Edje_Part_Image_Id*));
4503 for (i = 0; i < iparent->image.tweens_count; i++)
4505 Edje_Part_Image_Id *iid_new;
4507 iid = iparent->image.tweens[i];
4509 iid_new = mem_alloc(SZ(Edje_Part_Image_Id));
4510 data_queue_image_remove(&ied->image.id, &ied->image.set);
4511 data_queue_copied_image_lookup(&(iid->id), &(iid_new->id), &(iid_new->set));
4512 ied->image.tweens[i] = iid_new;
4517 case EDJE_PART_TYPE_PROXY:
4519 Edje_Part_Description_Proxy *ped = (Edje_Part_Description_Proxy*) ed;
4520 Edje_Part_Description_Proxy *pparent = (Edje_Part_Description_Proxy*) parent;
4522 data_queue_copied_part_lookup(pc, &(pparent->proxy.id), &(ped->proxy.id));
4526 case EDJE_PART_TYPE_BOX:
4528 Edje_Part_Description_Box *bed = (Edje_Part_Description_Box *) ed;
4529 Edje_Part_Description_Box *bparent = (Edje_Part_Description_Box *) parent;
4531 bed->box = bparent->box;
4535 case EDJE_PART_TYPE_TABLE:
4537 Edje_Part_Description_Table *ted = (Edje_Part_Description_Table *) ed;
4538 Edje_Part_Description_Table *tparent = (Edje_Part_Description_Table *) parent;
4540 ted->table = tparent->table;
4544 case EDJE_PART_TYPE_EXTERNAL:
4546 Edje_Part_Description_External *eed = (Edje_Part_Description_External *) ed;
4547 Edje_Part_Description_External *eparent = (Edje_Part_Description_External *) parent;
4549 if (eparent->external_params)
4552 Edje_External_Param *param, *new_param;
4554 eed->external_params = NULL;
4555 EINA_LIST_FOREACH(eparent->external_params, l, param)
4557 new_param = mem_alloc(SZ(Edje_External_Param));
4558 *new_param = *param;
4559 eed->external_params = eina_list_append(eed->external_params, new_param);
4575 [another part's name]
4577 Causes the part to use another part content as the content of this part.
4578 Only work with PROXY part.
4582 st_collections_group_parts_part_description_source(void)
4584 Edje_Part_Collection *pc;
4585 Edje_Part_Description_Proxy *ed;
4590 pc = eina_list_data_get(eina_list_last(edje_collections));
4592 if (current_part->type != EDJE_PART_TYPE_PROXY)
4594 ERR("parse error %s:%i. source attributes in non-PROXY part.",
4599 ed = (Edje_Part_Description_Proxy*) current_desc;
4601 name = parse_str(0);
4603 data_queue_part_lookup(pc, name, &(ed->proxy.id));
4612 [a name for the description] [an index]
4614 Sets a name used to identify a description inside a given part.
4615 Multiple descriptions are used to declare different states of the same
4616 part, like "clicked" or "invisible". All states declarations are also
4617 coupled with an index number between 0.0 and 1.0. All parts must have
4618 at least one description named "default 0.0".
4622 st_collections_group_parts_part_description_state(void)
4625 Edje_Part_Description_Common *ed;
4628 check_min_arg_count(1);
4632 ed = ep->default_desc;
4633 if (ep->other.desc_count) ed = ep->other.desc[ep->other.desc_count - 1];
4636 if (!strcmp (s, "custom"))
4638 ERR("parse error %s:%i. invalid state name: '%s'.",
4639 file_in, line - 1, s);
4644 if (get_arg_count() == 1)
4645 ed->state.value = 0.0;
4647 ed->state.value = parse_float_range(1, 0.0, 1.0);
4649 if (ed != ep->default_desc)
4651 if ((ep->default_desc->state.name && !strcmp(s, ep->default_desc->state.name) && ed->state.value == ep->default_desc->state.value) ||
4652 (!ep->default_desc->state.name && !strcmp(s, "default") && ed->state.value == ep->default_desc->state.value))
4654 if (ep->type == EDJE_PART_TYPE_IMAGE)
4655 _edje_part_description_image_remove((Edje_Part_Description_Image*) ed);
4658 ep->other.desc_count--;
4659 ep->other.desc = realloc(ep->other.desc,
4660 sizeof (Edje_Part_Description_Common*) * ep->other.desc_count);
4661 current_desc = ep->default_desc;
4663 else if (ep->other.desc_count)
4666 for (i = 0; i < ep->other.desc_count - 1; ++i)
4668 if (!strcmp(s, ep->other.desc[i]->state.name) && ed->state.value == ep->other.desc[i]->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->other.desc[i];
4692 Takes a boolean value specifying whether part is visible (1) or not
4693 (0). Non-visible parts do not emit signals. The default value is 1.
4697 st_collections_group_parts_part_description_visible(void)
4701 if (current_part->type == EDJE_PART_TYPE_SPACER)
4703 ERR("parse error %s:%i. SPACER part can't have a visibility defined",
4708 current_desc->visible = parse_bool(0);
4715 [NONE, WIDTH, HEIGHT or BOTH]
4717 Emit a signal when the part size change from zero or to a zero size
4718 ('limit,width,over', 'limit,width,zero'). By default no signal are
4724 st_collections_group_parts_part_description_limit(void)
4728 current_desc->limit = parse_enum(0,
4734 if (current_desc->limit)
4736 Edje_Part_Collection *pc;
4739 pc = eina_list_data_get(eina_list_last(edje_collections));
4740 count = pc->limits.parts_count++;
4741 pc->limits.parts = realloc(pc->limits.parts,
4742 pc->limits.parts_count * sizeof (Edje_Part_Limit));
4743 data_queue_part_lookup(pc, current_part->name,
4744 &(pc->limits.parts[count].part));
4755 When the displayed object's size is smaller than its container, this
4756 property moves it relatively along both axis inside its container. The
4757 default value is "0.5 0.5".
4761 st_collections_group_parts_part_description_align(void)
4765 current_desc->align.x = FROM_DOUBLE(parse_float_range(0, 0.0, 1.0));
4766 current_desc->align.y = FROM_DOUBLE(parse_float_range(1, 0.0, 1.0));
4774 [width, 0 or 1] [height, 0 or 1]
4776 This affects the minimum size calculation. See
4777 edje_object_size_min_calc() and edje_object_size_min_restricted_calc().
4778 This tells the min size calculation routine that this part does not
4779 change size in width or height (1 for it doesn't, 0 for it does), so
4780 the routine should not try and expand or contract the part.
4784 st_collections_group_parts_part_description_fixed(void)
4788 current_desc->fixed.w = parse_float_range(0, 0, 1);
4789 current_desc->fixed.h = parse_float_range(1, 0, 1);
4797 [width] [height] or SOURCE
4799 The minimum size of the state.
4801 When min is defined to SOURCE, it will look at the original
4802 image size and enforce it minimal size to match at least the
4803 original one. The part must be an IMAGE or a GROUP part.
4807 st_collections_group_parts_part_description_min(void)
4809 check_min_arg_count(1);
4812 current_desc->min.w = parse_float_range(0, 0, 0x7fffffff);
4813 current_desc->min.h = parse_float_range(1, 0, 0x7fffffff);
4818 if ((current_part->type != EDJE_PART_TYPE_IMAGE && current_part->type != EDJE_PART_TYPE_GROUP) ||
4819 !tmp || strcmp(tmp, "SOURCE") != 0)
4821 ERR("parse error %s:%i. "
4822 "Only IMAGE and GROUP part can have a min: SOURCE; defined",
4827 current_desc->min.limit = EINA_TRUE;
4836 [width multipler] [height multiplier]
4838 A multiplier FORCIBLY applied to whatever minimum size is only during
4839 minimum size calculation.
4844 st_collections_group_parts_part_description_minmul(void)
4848 current_desc->minmul.w = FROM_DOUBLE(parse_float_range(0, 0, 999999));
4849 current_desc->minmul.h = FROM_DOUBLE(parse_float_range(1, 0, 999999));
4857 [width] [height] or SOURCE
4859 The maximum size of the state. A size of -1.0 means that it will be ignored in one direction.
4861 When max is set to SOURCE, edje will enforce the part to be
4862 not more than the original image size. The part must be an
4867 st_collections_group_parts_part_description_max(void)
4869 check_min_arg_count(1);
4872 current_desc->max.w = parse_float_range(0, -1.0, 0x7fffffff);
4873 current_desc->max.h = parse_float_range(1, -1.0, 0x7fffffff);
4878 if (current_part->type != EDJE_PART_TYPE_IMAGE ||
4879 !tmp || strcmp(tmp, "SOURCE") != 0)
4881 ERR("parse error %s:%i. "
4882 "Only IMAGE part can have a max: SOURCE; defined",
4887 current_desc->max.limit = EINA_TRUE;
4898 Restricts resizing of each dimension to values divisibles by its value.
4899 This causes the part to jump from value to value while resizing. The
4900 default value is "0 0" disabling stepping.
4904 st_collections_group_parts_part_description_step(void)
4908 current_desc->step.x = parse_float_range(0, 0, 0x7fffffff);
4909 current_desc->step.y = parse_float_range(1, 0, 0x7fffffff);
4919 Normally width and height can be resized to any values independently.
4920 The aspect property forces the width to height ratio to be kept between
4921 the minimum and maximum set. For example, "1.0 1.0" will increase the
4922 width a pixel for every pixel added to height. The default value is
4923 "0.0 0.0" disabling aspect.
4927 st_collections_group_parts_part_description_aspect(void)
4931 current_desc->aspect.min = FROM_DOUBLE(parse_float_range(0, 0.0, 999999999.0));
4932 current_desc->aspect.max = FROM_DOUBLE(parse_float_range(1, 0.0, 999999999.0));
4942 Sets the scope of the "aspect" property to a given dimension. Available
4943 options are BOTH, VERTICAL, HORIZONTAL, SOURCE and NONE
4947 st_collections_group_parts_part_description_aspect_preference(void)
4951 current_desc->aspect.prefer = parse_enum(0,
4952 "NONE", EDJE_ASPECT_PREFER_NONE,
4953 "VERTICAL", EDJE_ASPECT_PREFER_VERTICAL,
4954 "HORIZONTAL", EDJE_ASPECT_PREFER_HORIZONTAL,
4955 "BOTH", EDJE_ASPECT_PREFER_BOTH,
4956 "SOURCE", EDJE_ASPECT_PREFER_SOURCE,
4967 The part will use the color values of the named color_class, these
4968 values can be overrided by the "color", "color2" and "color3"
4969 properties set below.
4973 st_collections_group_parts_part_description_color_class(void)
4977 if (current_part->type == EDJE_PART_TYPE_SPACER)
4979 ERR("parse error %s:%i. SPACER part can't have a color defined",
4984 current_desc->color_class = parse_str(0);
4992 [red] [green] [blue] [alpha]
4994 Sets the main color to the specified values (between 0 and 255).
4998 st_collections_group_parts_part_description_color(void)
5002 if (current_part->type == EDJE_PART_TYPE_SPACER)
5004 ERR("parse error %s:%i. SPACER part can't have a color defined",
5009 current_desc->color.r = parse_int_range(0, 0, 255);
5010 current_desc->color.g = parse_int_range(1, 0, 255);
5011 current_desc->color.b = parse_int_range(2, 0, 255);
5012 current_desc->color.a = parse_int_range(3, 0, 255);
5020 [red] [green] [blue] [alpha]
5022 Sets the text shadow color to the specified values (0 to 255).
5026 st_collections_group_parts_part_description_color2(void)
5030 if (current_part->type == EDJE_PART_TYPE_SPACER)
5032 ERR("parse error %s:%i. SPACER part can't have a color defined",
5037 current_desc->color2.r = parse_int_range(0, 0, 255);
5038 current_desc->color2.g = parse_int_range(1, 0, 255);
5039 current_desc->color2.b = parse_int_range(2, 0, 255);
5040 current_desc->color2.a = parse_int_range(3, 0, 255);
5048 [red] [green] [blue] [alpha]
5050 Sets the text outline color to the specified values (0 to 255).
5054 st_collections_group_parts_part_description_color3(void)
5056 Edje_Part_Collection *pc;
5057 Edje_Part_Description_Text *ed;
5061 pc = eina_list_data_get(eina_list_last(edje_collections));
5063 if (current_part->type != EDJE_PART_TYPE_TEXT
5064 && current_part->type != EDJE_PART_TYPE_TEXTBLOCK)
5066 ERR("Setting color3 in part %s from %s not of type TEXT or TEXTBLOCK.",
5067 current_part->name, pc->part);
5071 ed = (Edje_Part_Description_Text*)current_desc;
5073 ed->text.color3.r = parse_int_range(0, 0, 255);
5074 ed->text.color3.g = parse_int_range(1, 0, 255);
5075 ed->text.color3.b = parse_int_range(2, 0, 255);
5076 ed->text.color3.a = parse_int_range(3, 0, 255);
5098 The rel1 and rel2 blocks are used to define the position of each corner
5099 of the part's container. With rel1 being the left-up corner and rel2
5100 being the right-down corner.
5108 Moves a corner to a relative position inside the container of the
5109 relative "to" part. Values from 0.0 (0%, beginning) to 1.0 (100%, end)
5114 st_collections_group_parts_part_description_rel1_relative(void)
5118 current_desc->rel1.relative_x = FROM_DOUBLE(parse_float(0));
5119 current_desc->rel1.relative_y = FROM_DOUBLE(parse_float(1));
5129 Affects the corner position a fixed number of pixels along each axis.
5133 st_collections_group_parts_part_description_rel1_offset(void)
5137 current_desc->rel1.offset_x = parse_int(0);
5138 current_desc->rel1.offset_y = parse_int(1);
5146 [another part's name]
5148 Causes a corner to be positioned relatively to another part's
5149 container. Setting to "" will un-set this value for inherited
5154 st_collections_group_parts_part_description_rel1_to(void)
5156 Edje_Part_Collection *pc;
5160 pc = eina_list_data_get(eina_list_last(edje_collections));
5165 name = parse_str(0);
5166 data_queue_part_lookup(pc, name, &(current_desc->rel1.id_x));
5167 data_queue_part_lookup(pc, name, &(current_desc->rel1.id_y));
5177 [another part's name]
5179 Causes a corner to be positioned relatively to the X axis of another
5180 part's container. Simply put affects the first parameter of "relative".
5181 Setting to "" will un-set this value for inherited parts.
5185 st_collections_group_parts_part_description_rel1_to_x(void)
5187 Edje_Part_Collection *pc;
5191 pc = eina_list_data_get(eina_list_last(edje_collections));
5196 name = parse_str(0);
5197 data_queue_part_lookup(pc, name, &(current_desc->rel1.id_x));
5207 [another part's name]
5209 Causes a corner to be positioned relatively to the Y axis of another
5210 part's container. Simply put, affects the second parameter of
5211 "relative". Setting to "" will un-set this value for inherited parts.
5215 st_collections_group_parts_part_description_rel1_to_y(void)
5217 Edje_Part_Collection *pc;
5221 pc = eina_list_data_get(eina_list_last(edje_collections));
5226 name = parse_str(0);
5227 data_queue_part_lookup(pc, name, &(current_desc->rel1.id_y));
5233 st_collections_group_parts_part_description_rel2_relative(void)
5237 current_desc->rel2.relative_x = FROM_DOUBLE(parse_float(0));
5238 current_desc->rel2.relative_y = FROM_DOUBLE(parse_float(1));
5242 st_collections_group_parts_part_description_rel2_offset(void)
5246 current_desc->rel2.offset_x = parse_int(0);
5247 current_desc->rel2.offset_y = parse_int(1);
5251 st_collections_group_parts_part_description_rel2_to(void)
5253 Edje_Part_Collection *pc;
5257 pc = eina_list_data_get(eina_list_last(edje_collections));
5262 name = parse_str(0);
5263 data_queue_part_lookup(pc, name, &(current_desc->rel2.id_x));
5264 data_queue_part_lookup(pc, name, &(current_desc->rel2.id_y));
5270 st_collections_group_parts_part_description_rel2_to_x(void)
5272 Edje_Part_Collection *pc;
5276 pc = eina_list_data_get(eina_list_last(edje_collections));
5281 name = parse_str(0);
5282 data_queue_part_lookup(pc, name, &(current_desc->rel2.id_x));
5288 st_collections_group_parts_part_description_rel2_to_y(void)
5290 Edje_Part_Collection *pc;
5294 pc = eina_list_data_get(eina_list_last(edje_collections));
5299 name = parse_str(0);
5300 data_queue_part_lookup(pc, name, &(current_desc->rel2.id_y));
5306 @edcsection{description_image,Image state description sub blocks}
5317 normal: "filename.ext";
5318 tween: "filename2.ext";
5320 tween: "filenameN.ext";
5321 border: left right top bottom;
5322 middle: 0/1/NONE/DEFAULT/SOLID;
5334 Name of image to be used as previously declared in the images block.
5335 In an animation, this is the first and last image displayed. It's
5336 required in any image part
5340 st_collections_group_parts_part_description_image_normal(void)
5342 Edje_Part_Description_Image *ed;
5346 if (current_part->type != EDJE_PART_TYPE_IMAGE)
5348 ERR("parse error %s:%i. "
5349 "image attributes in non-IMAGE part.",
5354 ed = (Edje_Part_Description_Image*) current_desc;
5359 name = parse_str(0);
5360 data_queue_image_remove(&(ed->image.id), &(ed->image.set));
5361 data_queue_image_lookup(name, &(ed->image.id), &(ed->image.set));
5373 Name of an image to be used in an animation loop, an image block can
5374 have none, one or multiple tween declarations. Images are displayed in
5375 the order they are listed, during the transition to the state they are
5376 declared in; the "normal" image is the final state.
5380 st_collections_group_parts_part_description_image_tween(void)
5382 Edje_Part_Description_Image *ed;
5386 if (current_part->type != EDJE_PART_TYPE_IMAGE)
5388 ERR("parse error %s:%i. image attributes in non-IMAGE part.",
5393 ed = (Edje_Part_Description_Image*) current_desc;
5397 Edje_Part_Image_Id *iid;
5399 iid = mem_alloc(SZ(Edje_Part_Image_Id));
5400 ed->image.tweens_count++;
5401 ed->image.tweens = realloc(ed->image.tweens,
5402 sizeof (Edje_Part_Image_Id*) * ed->image.tweens_count);
5403 ed->image.tweens[ed->image.tweens_count - 1] = iid;
5404 name = parse_str(0);
5405 data_queue_image_remove(&(iid->id), &(iid->set));
5406 data_queue_image_lookup(name, &(iid->id), &(iid->set));
5416 [left] [right] [top] [bottom]
5418 If set, the area (in pixels) of each side of the image will be
5419 displayed as a fixed size border, from the side -> inwards, preventing
5420 the corners from being changed on a resize.
5424 st_collections_group_parts_part_description_image_border(void)
5426 Edje_Part_Description_Image *ed;
5430 if (current_part->type != EDJE_PART_TYPE_IMAGE)
5432 ERR("parse error %s:%i. image attributes in non-IMAGE part.",
5437 ed = (Edje_Part_Description_Image*) current_desc;
5439 ed->image.border.l = parse_int_range(0, 0, 0x7fffffff);
5440 ed->image.border.r = parse_int_range(1, 0, 0x7fffffff);
5441 ed->image.border.t = parse_int_range(2, 0, 0x7fffffff);
5442 ed->image.border.b = parse_int_range(3, 0, 0x7fffffff);
5450 0, 1, NONE, DEFAULT, SOLID
5452 If border is set, this value tells Edje if the rest of the
5453 image (not covered by the defined border) will be displayed or not
5454 or be assumed to be solid (without alpha). The default is 1/DEFAULT.
5458 st_collections_group_parts_part_description_image_middle(void)
5460 Edje_Part_Description_Image *ed;
5464 if (current_part->type != EDJE_PART_TYPE_IMAGE)
5466 ERR("parse error %s:%i. image attributes in non-IMAGE part.",
5471 ed = (Edje_Part_Description_Image*) current_desc;
5473 ed->image.border.no_fill = parse_enum(0,
5487 0.0 or bigger (0.0 or 1.0 to turn it off)
5489 If border scaling is enabled then normally the OUTPUT border sizes
5490 (e.g. if 3 pixels on the left edge are set as a border, then normally
5491 at scale 1.0, those 3 columns will always be the exact 3 columns of
5492 output, or at scale 2.0 they will be 6 columns, or 0.33 they will merge
5493 into a single column). This property multiplies the input scale
5494 factor by this multiplier, allowing the creation of "supersampled"
5495 borders to make much higher resolution outputs possible by always using
5496 the highest resolution artwork and then runtime scaling it down.
5500 st_collections_group_parts_part_description_image_border_scale_by(void)
5502 Edje_Part_Description_Image *ed;
5506 if (current_part->type != EDJE_PART_TYPE_IMAGE)
5508 ERR("parse error %s:%i. image attributes in non-IMAGE part.",
5513 ed = (Edje_Part_Description_Image*) current_desc;
5515 ed->image.border.scale_by = FROM_DOUBLE(parse_float_range(0, 0.0, 999999999.0));
5525 If border is set, this value tells Edje if the border should be scaled
5526 by the object/global edje scale factors
5530 st_collections_group_parts_part_description_image_border_scale(void)
5532 Edje_Part_Description_Image *ed;
5536 if (current_part->type != EDJE_PART_TYPE_IMAGE)
5538 ERR("parse error %s:%i. image attributes in non-IMAGE part.",
5543 ed = (Edje_Part_Description_Image*) current_desc;
5545 ed->image.border.scale = parse_enum(0,
5556 0, NONE, DYNAMIC, STATIC
5558 Sets the evas image scale hint letting the engine more effectively save
5559 cached copies of the scaled image if it makes sense
5563 st_collections_group_parts_part_description_image_scale_hint(void)
5565 Edje_Part_Description_Image *ed;
5569 if (current_part->type != EDJE_PART_TYPE_IMAGE)
5571 ERR("parse error %s:%i. image attributes in non-IMAGE part.",
5576 ed = (Edje_Part_Description_Image*) current_desc;
5578 ed->image.scale_hint = parse_enum(0,
5579 "NONE", EVAS_IMAGE_SCALE_HINT_NONE,
5580 "DYNAMIC", EVAS_IMAGE_SCALE_HINT_DYNAMIC,
5581 "STATIC", EVAS_IMAGE_SCALE_HINT_STATIC,
5582 "0", EVAS_IMAGE_SCALE_HINT_NONE,
5596 relative: X-axis Y-axis;
5597 offset: X-axis Y-axis;
5600 relative: width height;
5601 offset: width height;
5607 The fill method is an optional block that defines the way an IMAGE part
5608 is going to be displayed inside its container.
5609 It can be used for tiling (repeating the image) or displaying only
5610 part of an image. See @ref evas_object_image_fill_set() documentation
5619 The smooth property takes a boolean value to decide if the image will
5620 be smoothed on scaling (1) or not (0). The default value is 1.
5624 st_collections_group_parts_part_description_fill_smooth(void)
5626 Edje_Part_Description_Spec_Fill *fill;
5630 switch (current_part->type)
5632 case EDJE_PART_TYPE_IMAGE:
5634 Edje_Part_Description_Image *ed;
5636 ed = (Edje_Part_Description_Image*) current_desc;
5638 fill = &ed->image.fill;
5641 case EDJE_PART_TYPE_PROXY:
5643 Edje_Part_Description_Proxy *ed;
5645 ed = (Edje_Part_Description_Proxy*) current_desc;
5647 fill = &ed->proxy.fill;
5652 ERR("parse error %s:%i. "
5653 "image and proxy attributes in non-IMAGE, non-PROXY `%s` part (%i).",
5654 file_in, line - 1, current_part->name, current_part->type);
5659 fill->smooth = parse_bool(0);
5674 st_collections_group_parts_part_description_fill_spread(void)
5677 Edje_Part_Collection *pc;
5679 Edje_Part_Description_Image *ed;
5684 /* XXX this will need to include IMAGES when spread support is added to evas images */
5686 ERR("parse error %s:%i. fill.spread not supported yet.",
5692 pc = eina_list_data_get(eina_list_last(edje_collections));
5694 ep = pc->parts[pc->parts_count - 1];
5696 if (ep->type != EDJE_PART_TYPE_IMAGE)
5698 ERR("parse error %s:%i. image attributes in non-IMAGE part.",
5703 ed = (Edje_Part_Description_Image*) ep->default_desc;
5704 if (ep->other.desc_count) ed = (Edje_Part_Description_Image*) ep->other.desc[ep->other.desc_count - 1];
5706 ed->image.fill.spread = parse_int_range(0, 0, 1);
5722 st_collections_group_parts_part_description_fill_type(void)
5724 Edje_Part_Description_Spec_Fill *fill;
5728 switch (current_part->type)
5730 case EDJE_PART_TYPE_IMAGE:
5732 Edje_Part_Description_Image *ed;
5734 ed = (Edje_Part_Description_Image*) current_desc;
5736 fill = &ed->image.fill;
5739 case EDJE_PART_TYPE_PROXY:
5741 Edje_Part_Description_Proxy *ed;
5743 ed = (Edje_Part_Description_Proxy*) current_desc;
5745 fill = &ed->proxy.fill;
5750 ERR("parse error %s:%i. "
5751 "image and proxy attributes in non-IMAGE, non-PROXY part.",
5757 fill->type = parse_enum(0,
5758 "SCALE", EDJE_FILL_TYPE_SCALE,
5759 "TILE", EDJE_FILL_TYPE_TILE,
5781 The origin block is used to place the starting point, inside the
5782 displayed element, that will be used to render the tile. By default,
5783 the origin is set at the element's left-up corner.
5791 Sets the starting point relatively to displayed element's content.
5795 st_collections_group_parts_part_description_fill_origin_relative(void)
5797 Edje_Part_Description_Spec_Fill *fill;
5801 switch (current_part->type)
5803 case EDJE_PART_TYPE_IMAGE:
5805 Edje_Part_Description_Image *ed;
5807 ed = (Edje_Part_Description_Image*) current_desc;
5809 fill = &ed->image.fill;
5812 case EDJE_PART_TYPE_PROXY:
5814 Edje_Part_Description_Proxy *ed;
5816 ed = (Edje_Part_Description_Proxy*) current_desc;
5818 fill = &ed->proxy.fill;
5823 ERR("parse error %s:%i. "
5824 "image and proxy attributes in non-IMAGE, non-PROXY part.",
5830 fill->pos_rel_x = FROM_DOUBLE(parse_float_range(0, -999999999.0, 999999999.0));
5831 fill->pos_rel_y = FROM_DOUBLE(parse_float_range(1, -999999999.0, 999999999.0));
5841 Affects the starting point a fixed number of pixels along each axis.
5845 st_collections_group_parts_part_description_fill_origin_offset(void)
5847 Edje_Part_Description_Spec_Fill *fill;
5851 switch (current_part->type)
5853 case EDJE_PART_TYPE_IMAGE:
5855 Edje_Part_Description_Image *ed;
5857 ed = (Edje_Part_Description_Image*) current_desc;
5859 fill = &ed->image.fill;
5862 case EDJE_PART_TYPE_PROXY:
5864 Edje_Part_Description_Proxy *ed;
5866 ed = (Edje_Part_Description_Proxy*) current_desc;
5868 fill = &ed->proxy.fill;
5873 ERR("parse error %s:%i. "
5874 "image and proxy attributes in non-IMAGE, non-PROXY part.",
5880 fill->pos_abs_x = parse_int(0);
5881 fill->pos_abs_y = parse_int(1);
5902 The size block defines the tile size of the content that will be
5911 Takes a pair of decimal values that represent the percentual value
5912 of the original size of the element. For example, "0.5 0.5" represents
5913 half the size, while "2.0 2.0" represents the double. The default
5918 st_collections_group_parts_part_description_fill_size_relative(void)
5920 Edje_Part_Description_Spec_Fill *fill;
5924 switch (current_part->type)
5926 case EDJE_PART_TYPE_IMAGE:
5928 Edje_Part_Description_Image *ed;
5930 ed = (Edje_Part_Description_Image*) current_desc;
5932 fill = &ed->image.fill;
5935 case EDJE_PART_TYPE_PROXY:
5937 Edje_Part_Description_Proxy *ed;
5939 ed = (Edje_Part_Description_Proxy*) current_desc;
5941 fill = &ed->proxy.fill;
5946 ERR("parse error %s:%i. "
5947 "image and proxy attributes in non-IMAGE, non-PROXY part.",
5953 fill->rel_x = FROM_DOUBLE(parse_float_range(0, 0.0, 999999999.0));
5954 fill->rel_y = FROM_DOUBLE(parse_float_range(1, 0.0, 999999999.0));
5964 Affects the size of the tile a fixed number of pixels along each axis.
5968 st_collections_group_parts_part_description_fill_size_offset(void)
5970 Edje_Part_Description_Spec_Fill *fill;
5974 switch (current_part->type)
5976 case EDJE_PART_TYPE_IMAGE:
5978 Edje_Part_Description_Image *ed;
5980 ed = (Edje_Part_Description_Image*) current_desc;
5982 fill = &ed->image.fill;
5985 case EDJE_PART_TYPE_PROXY:
5987 Edje_Part_Description_Proxy *ed;
5989 ed = (Edje_Part_Description_Proxy*) current_desc;
5991 fill = &ed->proxy.fill;
5996 ERR("parse error %s:%i. "
5997 "image and proxy attributes in non-IMAGE, non-PROXY part.",
6003 fill->abs_x = parse_int(0);
6004 fill->abs_y = parse_int(1);
6009 @edcsection{description_text,Text state description sub blocks}
6022 text: "some string of text to display";
6025 text_class: "class_name";
6026 fit: horizontal vertical;
6027 min: horizontal vertical;
6028 max: horizontal vertical;
6029 align: X-axis Y-axis;
6030 source: "part_name";
6031 text_source: "text_part_name";
6044 [a string of text, or nothing]
6046 Sets the default content of a text part, normally the application is
6047 the one changing its value.
6051 st_collections_group_parts_part_description_text_text(void)
6053 Edje_Part_Description_Text *ed;
6057 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6058 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6060 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6065 ed = (Edje_Part_Description_Text*) current_desc;
6071 if (!is_param(i)) break;
6076 str = realloc(str, strlen(str) + strlen(s) + 1);
6081 ed->text.text.str = str;
6092 Similar to color_class, this is the name used by the application
6093 to alter the font family and size at runtime.
6097 st_collections_group_parts_part_description_text_text_class(void)
6099 Edje_Part_Description_Text *ed;
6103 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6104 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6106 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6111 ed = (Edje_Part_Description_Text*) current_desc;
6113 ed->text.text_class = parse_str(0);
6124 This sets the font family to one of the aliases set up in the "fonts"
6125 block. Can be overrided by the application.
6129 st_collections_group_parts_part_description_text_font(void)
6131 Edje_Part_Description_Text *ed;
6135 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6136 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6138 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6143 ed = (Edje_Part_Description_Text*) current_desc;
6145 ed->text.font.str = parse_str(0);
6156 Causes the part to use the default style and tags defined in the
6157 "style" block with the specified name.
6161 st_collections_group_parts_part_description_text_style(void)
6163 Edje_Part_Description_Text *ed;
6167 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6168 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6170 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6175 ed = (Edje_Part_Description_Text*) current_desc;
6177 ed->text.style.str = parse_str(0);
6186 [the replacement character string]
6188 If this is a textblock and is in PASSWORD mode this string is used
6189 to replace every character to hide the details of the entry. Normally
6190 you would use a "*", but you can use anything you like.
6194 st_collections_group_parts_part_description_text_repch(void)
6196 Edje_Part_Description_Text *ed;
6200 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6201 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6203 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6208 ed = (Edje_Part_Description_Text*) current_desc;
6210 ed->text.repch.str = parse_str(0);
6219 [font size in points (pt)]
6221 Sets the default font size for the text part. Can be overrided by the
6226 st_collections_group_parts_part_description_text_size(void)
6228 Edje_Part_Description_Text *ed;
6232 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6233 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6235 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6240 ed = (Edje_Part_Description_Text*)current_desc;
6242 ed->text.size = parse_int_range(0, 0, 255);
6251 [font min size in points (pt)] [font max size in points (pt)]
6253 Sets the allowed font size for the text part. Setting min and max to 0
6254 means we won't restrict the sizing (default).
6259 st_collections_group_parts_part_description_text_size_range(void)
6261 Edje_Part_Description_Text *ed;
6265 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6266 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6268 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6273 ed = (Edje_Part_Description_Text*) current_desc;
6275 ed->text.size_range_min = parse_int_range(0, 0, 255);
6276 ed->text.size_range_max = parse_int_range(1, 0, 255);
6277 if (ed->text.size_range_min > ed->text.size_range_max)
6279 ERR("parse error %s:%i. min size is bigger than max size.",
6291 [horizontal] [vertical]
6293 When any of the parameters is set to 1 edje will resize the text for it
6294 to fit in it's container. Both are disabled by default.
6298 st_collections_group_parts_part_description_text_fit(void)
6300 Edje_Part_Description_Text *ed;
6304 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6305 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6307 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6312 ed = (Edje_Part_Description_Text*) current_desc;
6314 ed->text.fit_x = parse_bool(0);
6315 ed->text.fit_y = parse_bool(1);
6324 [horizontal] [vertical]
6326 When any of the parameters is enabled (1) it forces the minimum size of
6327 the container to be equal to the minimum size of the text. The default
6332 st_collections_group_parts_part_description_text_min(void)
6334 Edje_Part_Description_Text *ed;
6338 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6339 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6341 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6346 ed = (Edje_Part_Description_Text*)current_desc;
6348 ed->text.min_x = parse_bool(0);
6349 ed->text.min_y = parse_bool(1);
6358 [horizontal] [vertical]
6360 When any of the parameters is enabled (1) it forces the maximum size of
6361 the container to be equal to the maximum size of the text. The default
6366 st_collections_group_parts_part_description_text_max(void)
6368 Edje_Part_Description_Text *ed;
6372 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6373 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6375 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6380 ed = (Edje_Part_Description_Text*) current_desc;
6382 ed->text.max_x = parse_bool(0);
6383 ed->text.max_y = parse_bool(1);
6392 [horizontal] [vertical]
6394 Change the position of the point of balance inside the container. The
6395 default value is 0.5 0.5.
6399 st_collections_group_parts_part_description_text_align(void)
6401 Edje_Part_Description_Text *ed;
6405 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6406 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6408 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6413 ed = (Edje_Part_Description_Text*) current_desc;
6415 ed->text.align.x = FROM_DOUBLE(parse_float_range(0, -1.0, 1.0));
6416 ed->text.align.y = FROM_DOUBLE(parse_float_range(1, 0.0, 1.0));
6425 [another TEXT part's name]
6427 Causes the part to use the text properties (like font and size) of
6428 another part and update them as they change.
6432 st_collections_group_parts_part_description_text_source(void)
6434 Edje_Part_Collection *pc;
6435 Edje_Part_Description_Text *ed;
6439 pc = eina_list_data_get(eina_list_last(edje_collections));
6441 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6442 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6444 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6449 ed = (Edje_Part_Description_Text*) current_desc;
6454 name = parse_str(0);
6455 data_queue_part_lookup(pc, name, &(ed->text.id_source));
6466 [another TEXT part's name]
6468 Causes the part to display the text content of another part and update
6469 them as they change.
6473 st_collections_group_parts_part_description_text_text_source(void)
6475 Edje_Part_Collection *pc;
6476 Edje_Part_Description_Text *ed;
6480 pc = eina_list_data_get(eina_list_last(edje_collections));
6482 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6483 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6485 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6490 ed = (Edje_Part_Description_Text*) current_desc;
6495 name = parse_str(0);
6496 data_queue_part_lookup(pc, name, &(ed->text.id_text_source));
6509 Used to balance the text in a relative point from 0.0 to 1.0, this
6510 point is the last section of the string to be cut out in case of a
6511 resize that is smaller than the text itself. The default value is 0.0.
6515 st_collections_group_parts_part_description_text_elipsis(void)
6517 Edje_Part_Description_Text *ed;
6521 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6522 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6524 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6529 ed = (Edje_Part_Description_Text*) current_desc;
6531 ed->text.elipsis = parse_float_range(0, 0.0, 1.0);
6536 @edcsection{description_box,Box state description sub blocks}
6558 A box block can contain other objects and display them in different
6559 layouts, any of the predefined set, or a custom one, set by the
6566 [primary layout] [fallback layout]
6568 Sets the layout for the box:
6569 @li horizontal (default)
6571 @li horizontal_homogeneous
6572 @li vertical_homogeneous
6573 @li horizontal_max (homogeneous to the max sized child)
6578 @li some_other_custom_layout_set_by_the_application
6579 You could set a custom layout as fallback, it makes very
6580 very little sense though, and if that one fails, it will
6581 default to horizontal.
6587 [horizontal] [vertical]
6589 Change the position of the point of balance inside the container. The
6590 default value is 0.5 0.5.
6596 [horizontal] [vertical]
6598 Sets the space between cells in pixels. Defaults to 0 0.
6604 [horizontal] [vertical]
6606 When any of the parameters is enabled (1) it forces the minimum size of
6607 the box to be equal to the minimum size of the items. The default
6611 static void st_collections_group_parts_part_description_box_layout(void)
6613 Edje_Part_Description_Box *ed;
6615 check_min_arg_count(1);
6617 if (current_part->type != EDJE_PART_TYPE_BOX)
6619 ERR("parse error %s:%i. box attributes in non-BOX part.",
6624 ed = (Edje_Part_Description_Box*) current_desc;
6626 ed->box.layout = parse_str(0);
6628 ed->box.alt_layout = parse_str(1);
6631 static void st_collections_group_parts_part_description_box_align(void)
6633 Edje_Part_Description_Box *ed;
6637 if (current_part->type != EDJE_PART_TYPE_BOX)
6639 ERR("parse error %s:%i. box attributes in non-BOX part.",
6644 ed = (Edje_Part_Description_Box*) current_desc;
6646 ed->box.align.x = FROM_DOUBLE(parse_float_range(0, -1.0, 1.0));
6647 ed->box.align.y = FROM_DOUBLE(parse_float_range(1, -1.0, 1.0));
6650 static void st_collections_group_parts_part_description_box_padding(void)
6652 Edje_Part_Description_Box *ed;
6656 if (current_part->type != EDJE_PART_TYPE_BOX)
6658 ERR("parse error %s:%i. box attributes in non-BOX part.",
6663 ed = (Edje_Part_Description_Box*) current_desc;
6665 ed->box.padding.x = parse_int_range(0, 0, 0x7fffffff);
6666 ed->box.padding.y = parse_int_range(1, 0, 0x7fffffff);
6670 st_collections_group_parts_part_description_box_min(void)
6672 Edje_Part_Description_Box *ed;
6676 if (current_part->type != EDJE_PART_TYPE_BOX)
6678 ERR("parse error %s:%i. box attributes in non-BOX part.",
6683 ed = (Edje_Part_Description_Box*) current_desc;
6685 ed->box.min.h = parse_bool(0);
6686 ed->box.min.v = parse_bool(1);
6691 @edcsection{description_table,Table state description sub blocks}
6713 A table block can contain other objects packed in multiple columns
6714 and rows, and each item can span across more than one column and/or
6723 Sets the homogeneous mode for the table:
6732 [horizontal] [vertical]
6734 Change the position of the point of balance inside the container. The
6735 default value is 0.5 0.5.
6741 [horizontal] [vertical]
6743 Sets the space between cells in pixels. Defaults to 0 0.
6749 [horizontal] [vertical]
6751 When any of the parameters is enabled (1) it forces the minimum size of
6752 the table to be equal to the minimum size of the items. The default
6756 static void st_collections_group_parts_part_description_table_homogeneous(void)
6758 Edje_Part_Description_Table *ed;
6760 check_min_arg_count(1);
6762 if (current_part->type != EDJE_PART_TYPE_TABLE)
6764 ERR("parse error %s:%i. table attributes in non-TABLE part.",
6769 ed = (Edje_Part_Description_Table*) current_desc;
6771 ed->table.homogeneous = parse_enum(0,
6772 "NONE", EDJE_OBJECT_TABLE_HOMOGENEOUS_NONE,
6773 "TABLE", EDJE_OBJECT_TABLE_HOMOGENEOUS_TABLE,
6774 "ITEM", EDJE_OBJECT_TABLE_HOMOGENEOUS_ITEM,
6778 static void st_collections_group_parts_part_description_table_align(void)
6780 Edje_Part_Description_Table *ed;
6784 if (current_part->type != EDJE_PART_TYPE_TABLE)
6786 ERR("parse error %s:%i. table attributes in non-TABLE part.",
6791 ed = (Edje_Part_Description_Table*) current_desc;
6793 ed->table.align.x = FROM_DOUBLE(parse_float_range(0, -1.0, 1.0));
6794 ed->table.align.y = FROM_DOUBLE(parse_float_range(1, -1.0, 1.0));
6797 static void st_collections_group_parts_part_description_table_padding(void)
6799 Edje_Part_Description_Table *ed;
6803 if (current_part->type != EDJE_PART_TYPE_TABLE)
6805 ERR("parse error %s:%i. table attributes in non-TABLE part.",
6810 ed = (Edje_Part_Description_Table*) current_desc;
6812 ed->table.padding.x = parse_int_range(0, 0, 0x7fffffff);
6813 ed->table.padding.y = parse_int_range(1, 0, 0x7fffffff);
6817 st_collections_group_parts_part_description_table_min(void)
6819 Edje_Part_Description_Table *ed;
6823 if (current_part->type != EDJE_PART_TYPE_TABLE)
6825 ERR("parse error %s:%i. box attributes in non-TABLE part.",
6830 ed = (Edje_Part_Description_Table*) current_desc;
6832 ed->table.min.h = parse_bool(0);
6833 ed->table.min.v = parse_bool(1);
6837 @edcsection{description_map,Map state description sub blocks}
6848 perspective: "name";
6869 [another part's name]
6871 This sets the part that is used as the "perspective point" for giving
6872 a part a "3d look". The perspective point should have a perspective
6873 section that provides zplane and focal properties. The center of this
6874 part will be used as the focal point, so size, color and visibility
6875 etc. are not relevant just center point, zplane and focal are used.
6876 This also implicitly enables perspective transforms (see the on
6877 parameter for the map section).
6881 st_collections_group_parts_part_description_map_perspective(void)
6883 Edje_Part_Collection *pc;
6887 pc = eina_list_data_get(eina_list_last(edje_collections));
6892 name = parse_str(0);
6893 data_queue_part_lookup(pc, name, &(current_desc->map.id_persp));
6897 current_desc->map.persp_on = 1;
6905 [another part's name]
6907 This sets the part that is used as the "light" for calculating the
6908 brightness (based on how directly the part's surface is facing the
6909 light source point). Like the perspective point part, the center point
6910 is used and zplane is used for the z position (0 being the zero-plane
6911 where all 2D objects normally live) and positive values being further
6912 away into the distance. The light part color is used as the light
6913 color (alpha not used for light color). The color2 color is used for
6914 the ambient lighting when calculating brightness (alpha also not
6919 st_collections_group_parts_part_description_map_light(void)
6921 Edje_Part_Collection *pc;
6925 pc = eina_list_data_get(eina_list_last(edje_collections));
6930 name = parse_str(0);
6931 data_queue_part_lookup(pc, name, &(current_desc->map.id_light));
6943 This enables mapping for the part. Default is 0.
6947 st_collections_group_parts_part_description_map_on(void)
6951 current_desc->map.on = parse_bool(0);
6961 This enable smooth map rendering. This may be linear interpolation,
6962 anisotropic filtering or anything the engine decides is "smooth".
6963 This is a best-effort hint and may not produce precisely the same
6964 results in all engines and situations. Default is 1
6968 st_collections_group_parts_part_description_map_smooth(void)
6972 current_desc->map.smooth = parse_bool(0);
6982 This enable alpha channel when map rendering. Default is 1.
6986 st_collections_group_parts_part_description_map_alpha(void)
6990 current_desc->map.alpha = parse_bool(0);
7000 This enables backface culling (when the rotated part that normally
7001 faces the camera is facing away after being rotated etc.). This means
7002 that the object will be hidden when "backface culled".
7006 st_collections_group_parts_part_description_map_backface_cull(void)
7010 current_desc->map.backcull = parse_bool(0);
7020 Enable perspective when rotating even without a perspective point object.
7021 This would use perspective set for the object itself or for the
7022 canvas as a whole as the global perspective with
7023 edje_perspective_set() and edje_perspective_global_set().
7027 st_collections_group_parts_part_description_map_perspective_on(void)
7031 current_desc->map.persp_on = parse_bool(0);
7049 Rotates the part, optionally with the center on another part.
7055 [another part's name]
7057 This sets the part that is used as the center of rotation when
7058 rotating the part with this description. The part's center point
7059 is used as the rotation center when applying rotation around the
7060 x, y and z axes. If no center is given, the parts original center
7061 itself is used for the rotation center.
7065 st_collections_group_parts_part_description_map_rotation_center(void)
7067 Edje_Part_Collection *pc;
7071 pc = eina_list_data_get(eina_list_last(edje_collections));
7076 name = parse_str(0);
7077 data_queue_part_lookup(pc, name, &(current_desc->map.rot.id_center));
7089 This sets the rotation around the x axis of the part considering
7090 the center set. In degrees.
7094 st_collections_group_parts_part_description_map_rotation_x(void)
7098 current_desc->map.rot.x = FROM_DOUBLE(parse_float(0));
7108 This sets the rotation around the y axis of the part considering
7109 the center set. In degrees.
7113 st_collections_group_parts_part_description_map_rotation_y(void)
7117 current_desc->map.rot.y = FROM_DOUBLE(parse_float(0));
7127 This sets the rotation around the z axis of the part considering
7128 the center set. In degrees.
7132 st_collections_group_parts_part_description_map_rotation_z(void)
7136 current_desc->map.rot.z = FROM_DOUBLE(parse_float(0));
7153 Adds focal and plane perspective to the part. Active if perspective_on is true.
7154 Must be provided if the part is being used by other part as it's perspective target.
7162 This sets the z value that will not be scaled. Normally this is 0 as
7163 that is the z distance that all objects are at normally.
7167 st_collections_group_parts_part_description_perspective_zplane(void)
7171 current_desc->persp.zplane = parse_int(0);
7182 This sets the distance from the focal z plane (zplane) and the
7183 camera - i.e. very much equating to focal length of the camera
7187 st_collections_group_parts_part_description_perspective_focal(void)
7191 current_desc->persp.focal = parse_int_range(0, 1, 0x7fffffff);
7196 @edcsection{description_params,Params state description sub blocks}
7208 double: "other_name" 0.0;
7209 string: "another_name" "some text";
7211 choice: "some_name" "value";
7216 Set parameters for EXTERNAL parts. The value overwrites previous
7217 definitions with the same name.
7221 _st_collections_group_parts_part_description_params(Edje_External_Param_Type type)
7223 Edje_Part_Description_External *ed;
7224 Edje_External_Param *param;
7231 if (current_part->type != EDJE_PART_TYPE_EXTERNAL)
7233 ERR("parse error %s:%i. params in non-EXTERNAL part.",
7238 ed = (Edje_Part_Description_External*) current_desc;
7240 name = parse_str(0);
7242 /* if a param with this name already exists, overwrite it */
7243 EINA_LIST_FOREACH(ed->external_params, l, param)
7245 if (!strcmp(param->name, name))
7254 param = mem_alloc(SZ(Edje_External_Param));
7265 case EDJE_EXTERNAL_PARAM_TYPE_BOOL:
7266 case EDJE_EXTERNAL_PARAM_TYPE_INT:
7267 param->i = parse_int(1);
7269 case EDJE_EXTERNAL_PARAM_TYPE_DOUBLE:
7270 param->d = parse_float(1);
7272 case EDJE_EXTERNAL_PARAM_TYPE_CHOICE:
7273 case EDJE_EXTERNAL_PARAM_TYPE_STRING:
7274 param->s = parse_str(1);
7277 ERR("parse error %s:%i. Invalid param type.",
7283 ed->external_params = eina_list_append(ed->external_params, param);
7291 [param_name] [int_value]
7293 Adds an integer parameter for an external object
7297 st_collections_group_parts_part_description_params_int(void)
7299 _st_collections_group_parts_part_description_params(EDJE_EXTERNAL_PARAM_TYPE_INT);
7307 [param_name] [double_value]
7309 Adds a double parameter for an external object
7313 st_collections_group_parts_part_description_params_double(void)
7315 _st_collections_group_parts_part_description_params(EDJE_EXTERNAL_PARAM_TYPE_DOUBLE);
7323 [param_name] [string_value]
7325 Adds a string parameter for an external object
7329 st_collections_group_parts_part_description_params_string(void)
7331 _st_collections_group_parts_part_description_params(EDJE_EXTERNAL_PARAM_TYPE_STRING);
7339 [param_name] [bool_value]
7341 Adds an boolean parameter for an external object. Value must be 0 or 1.
7345 st_collections_group_parts_part_description_params_bool(void)
7347 _st_collections_group_parts_part_description_params(EDJE_EXTERNAL_PARAM_TYPE_BOOL);
7355 [param_name] [choice_string]
7357 Adds a choice parameter for an external object. The possible
7358 choice values are defined by external type at their register time
7359 and will be validated at runtime.
7363 st_collections_group_parts_part_description_params_choice(void)
7365 _st_collections_group_parts_part_description_params(EDJE_EXTERNAL_PARAM_TYPE_CHOICE);
7370 @edcsection{program, Program block}
7382 name: "programname";
7383 signal: "signalname";
7385 filter: "partname" "statename";
7387 action: STATE_SET "statename" state_value;
7388 transition: LINEAR 0.5;
7390 target: "anotherpart";
7391 after: "programname";
7392 after: "anotherprogram";
7398 Programs define how your interface reacts to events.
7399 Programs can change the state of parts, react to events or trigger
7404 ob_collections_group_programs_program(void)
7406 Edje_Part_Collection *pc;
7408 Edje_Program_Parser *epp;
7410 pc = eina_list_data_get(eina_list_last(edje_collections));
7412 ep = mem_alloc(SZ(Edje_Program_Parser));
7414 ep->tween.mode = EDJE_TWEEN_MODE_LINEAR;
7416 epp = (Edje_Program_Parser *)ep;
7417 epp->can_override = EINA_FALSE;
7419 _edje_program_insert(pc, ep);
7421 current_program = ep;
7431 Symbolic name of program as a unique identifier.
7435 st_collections_group_programs_program_name(void)
7437 Edje_Part_Collection *pc;
7441 pc = eina_list_data_get(eina_list_last(edje_collections));
7442 current_program->name = parse_str(0);
7444 _edje_program_check(current_program->name, current_program, pc->programs.fnmatch, pc->programs.fnmatch_count);
7445 _edje_program_check(current_program->name, current_program, pc->programs.strcmp, pc->programs.strcmp_count);
7446 _edje_program_check(current_program->name, current_program, pc->programs.strncmp, pc->programs.strncmp_count);
7447 _edje_program_check(current_program->name, current_program, pc->programs.strrncmp, pc->programs.strrncmp_count);
7448 _edje_program_check(current_program->name, current_program, pc->programs.nocmp, pc->programs.nocmp_count);
7458 Specifies signal(s) that should cause the program to run. The signal
7459 received must match the specified source to run.
7460 Signals may be globbed, but only one signal keyword per program
7461 may be used. ex: signal: "mouse,clicked,*"; (clicking any mouse button
7462 that matches source starts program).
7466 st_collections_group_programs_program_signal(void)
7468 Edje_Part_Collection *pc;
7472 pc = eina_list_data_get(eina_list_last(edje_collections));
7474 _edje_program_remove(pc, current_program);
7475 current_program->signal = parse_str(0);
7476 _edje_program_insert(pc, current_program);
7486 Source of accepted signal. Sources may be globbed, but only one source
7487 keyword per program may be used. ex:source: "button-*"; (Signals from
7488 any part or program named "button-*" are accepted).
7492 st_collections_group_programs_program_source(void)
7494 Edje_Part_Collection *pc;
7498 pc = eina_list_data_get(eina_list_last(edje_collections));
7500 _edje_program_remove(pc, current_program);
7501 current_program->source = parse_str(0);
7502 _edje_program_insert(pc, current_program);
7512 Filter signals to be only accepted if the part [part] is in state named [state].
7513 Only one filter per program can be used. If [state] is not given, the source of
7514 the event will be used instead.
7518 st_collections_group_programs_program_filter(void)
7520 check_min_arg_count(1);
7523 current_program->filter.part = parse_str(0);
7524 current_program->filter.state = parse_str(1);
7526 current_program->filter.state = parse_str(0);
7537 Wait 'from' seconds before executing the program. And add a random
7538 number of seconds (from 0 to 'range') to the total waiting time.
7542 st_collections_group_programs_program_in(void)
7546 current_program->in.from = parse_float_range(0, 0.0, 999999999.0);
7547 current_program->in.range = parse_float_range(1, 0.0, 999999999.0);
7555 [type] [param1] [param2]
7557 Action to be performed by the program. Valid actions are: STATE_SET,
7558 ACTION_STOP, SIGNAL_EMIT, DRAG_VAL_SET, DRAG_VAL_STEP, DRAG_VAL_PAGE,
7559 FOCUS_SET, PARAM_COPY, PARAM_SET, PLAY_SAMPLE, PLAY_TONE
7560 Only one action can be specified per program. Examples:\n
7561 action: STATE_SET "statename" 0.5;\n
7562 action: ACTION_STOP;\n
7563 action: SIGNAL_EMIT "signalname" "emitter";\n
7564 action: DRAG_VAL_SET 0.5 0.0;\n
7565 action: DRAG_VAL_STEP 1.0 0.0;\n
7566 action: DRAG_VAL_PAGE 0.0 0.0;\n
7567 action: FOCUS_SET;\n
7568 action: FOCUS_OBJECT;\n
7569 action: PARAM_COPY "src_part" "src_param" "dst_part" "dst_param";\n
7570 action: PARAM_SET "part" "param" "value";\n
7571 action: PLAY_SAMPLE "sample name";\n
7572 action: PLAY_TONE "tone name" duration in seconds ( Range 0.1 to 10.0 );\n
7576 st_collections_group_programs_program_action(void)
7578 Edje_Part_Collection *pc;
7582 pc = eina_list_data_get(eina_list_last(edje_collections));
7583 ep = current_program;
7584 ep->action = parse_enum(0,
7585 "STATE_SET", EDJE_ACTION_TYPE_STATE_SET,
7586 "ACTION_STOP", EDJE_ACTION_TYPE_ACTION_STOP,
7587 "SIGNAL_EMIT", EDJE_ACTION_TYPE_SIGNAL_EMIT,
7588 "DRAG_VAL_SET", EDJE_ACTION_TYPE_DRAG_VAL_SET,
7589 "DRAG_VAL_STEP", EDJE_ACTION_TYPE_DRAG_VAL_STEP,
7590 "DRAG_VAL_PAGE", EDJE_ACTION_TYPE_DRAG_VAL_PAGE,
7591 "SCRIPT", EDJE_ACTION_TYPE_SCRIPT,
7592 "FOCUS_SET", EDJE_ACTION_TYPE_FOCUS_SET,
7593 "FOCUS_OBJECT", EDJE_ACTION_TYPE_FOCUS_OBJECT,
7594 "PARAM_COPY", EDJE_ACTION_TYPE_PARAM_COPY,
7595 "PARAM_SET", EDJE_ACTION_TYPE_PARAM_SET,
7596 "PLAY_SAMPLE", EDJE_ACTION_TYPE_SOUND_SAMPLE,
7597 "PLAY_TONE", EDJE_ACTION_TYPE_SOUND_TONE,
7599 if (ep->action == EDJE_ACTION_TYPE_STATE_SET)
7601 ep->state = parse_str(1);
7602 if (get_arg_count() == 1)
7605 ep->value = parse_float_range(2, 0.0, 1.0);
7607 else if (ep->action == EDJE_ACTION_TYPE_SIGNAL_EMIT)
7609 ep->state = parse_str(1);
7610 ep->state2 = parse_str(2);
7612 else if (ep->action == EDJE_ACTION_TYPE_SOUND_SAMPLE)
7614 ep->sample_name = parse_str(1);
7615 for (i = 0; i < (int)edje_file->sound_dir->samples_count; i++)
7617 if (!strcmp(edje_file->sound_dir->samples[i].name, ep->sample_name))
7619 if (i == (int)(edje_file->sound_dir->samples_count - 1))
7621 ERR("No Sample name %s exist.", ep->sample_name);
7625 ep->speed = parse_float_range(2, 0.0, 10.0);
7627 else if (ep->action == EDJE_ACTION_TYPE_SOUND_TONE)
7629 ep->tone_name = parse_str(1);
7630 for (i = 0; i < (int)edje_file->sound_dir->tones_count; i++)
7632 if (!strcmp(edje_file->sound_dir->tones[i].name, ep->tone_name))
7634 if (i == (int)(edje_file->sound_dir->tones_count - 1))
7636 ERR("No Tone name %s exist.", ep->tone_name);
7640 ep->duration = parse_float_range(2, 0.1, 10.0);
7642 else if (ep->action == EDJE_ACTION_TYPE_DRAG_VAL_SET)
7644 ep->value = parse_float(1);
7645 ep->value2 = parse_float(2);
7647 else if (ep->action == EDJE_ACTION_TYPE_DRAG_VAL_STEP)
7649 ep->value = parse_float(1);
7650 ep->value2 = parse_float(2);
7652 else if (ep->action == EDJE_ACTION_TYPE_DRAG_VAL_PAGE)
7654 ep->value = parse_float(1);
7655 ep->value2 = parse_float(2);
7657 else if (ep->action == EDJE_ACTION_TYPE_PARAM_COPY)
7659 char *src_part, *dst_part;
7661 src_part = parse_str(1);
7662 ep->state = parse_str(2);
7663 dst_part = parse_str(3);
7664 ep->state2 = parse_str(4);
7666 data_queue_part_lookup(pc, src_part, &(ep->param.src));
7667 data_queue_part_lookup(pc, dst_part, &(ep->param.dst));
7672 else if (ep->action == EDJE_ACTION_TYPE_PARAM_SET)
7676 part = parse_str(1);
7677 ep->state = parse_str(2);
7678 ep->state2 = parse_str(3);
7680 data_queue_part_lookup(pc, part, &(ep->param.dst));
7686 case EDJE_ACTION_TYPE_ACTION_STOP:
7689 case EDJE_ACTION_TYPE_SCRIPT:
7690 /* this is implicitly set by script {} so this is here just for
7693 case EDJE_ACTION_TYPE_FOCUS_OBJECT:
7694 case EDJE_ACTION_TYPE_FOCUS_SET:
7697 case EDJE_ACTION_TYPE_PARAM_COPY:
7700 case EDJE_ACTION_TYPE_PARAM_SET:
7703 case EDJE_ACTION_TYPE_SOUND_SAMPLE:
7706 case EDJE_ACTION_TYPE_SOUND_TONE:
7719 [type] [length] [[interp val 1]] [[interp val 2]] [[option]]
7721 Defines how transitions occur using STATE_SET action.\n
7722 Where 'type' is the style of the transition and 'length' is a double
7723 specifying the number of seconds in which to preform the transition.\n
7724 Valid types are: LIN or LINEAR, SIN or SINUSOIDAL,
7725 ACCEL or ACCELERATE, DECEL or DECELERATE,
7726 ACCEL_FAC or ACCELERATE_FACTOR, DECEL_FAC or DECELERATE_FACTOR,
7727 SIN_FAC or SINUSOIDAL_FACTOR, DIVIS or DIVISOR_INTERP,
7730 ACCEL_FAC, DECEL_FAC and SIN_FAC need the extra optional
7731 "interp val 1" to determine the "factor" of curviness. 1.0 is the same
7732 as their non-factor counterparts, where 0.0 is equal to linear.
7733 Numbers higher than one make the curve angles steeper with a more
7734 pronounced curve point.
7736 DIVIS, BOUNCE and SPRING also require "interp val 2" in addition
7739 DIVIS uses val 1 as the initial gradient start
7740 (0.0 is horizontal, 1.0 is diagonal (linear), 2.0 is twice the
7741 gradient of linear etc.). val 2 is interpreted as an integer factor
7742 defining how much the value swings "outside" the gradient only to come
7743 back to the final resting spot at the end. 0.0 for val 2 is equivalent
7744 to linear interpolation. Note that DIVIS can exceed 1.0
7746 BOUNCE uses val 2 as the number of bounces (so its rounded down to
7747 the nearest integer value), with val 1 determining how much the
7748 bounce decays, with 0.0 giving linear decay per bounce, and higher
7749 values giving much more decay.
7751 SPRING is similar to bounce, where val 2 specifies the number of
7752 spring "swings" and val 1 specifies the decay, but it can exceed 1.0
7753 on the outer swings.
7755 Valid option is CURRENT.
7757 CURRENT is the option which causes the edje object to move from its current position.
7758 It can be used as the last parameter of any transition type. (@since 1.1.0)
7763 st_collections_group_programs_program_transition(void)
7765 check_min_arg_count(2);
7767 current_program->tween.mode = parse_enum(0,
7769 "LIN", EDJE_TWEEN_MODE_LINEAR,
7770 "SIN", EDJE_TWEEN_MODE_SINUSOIDAL,
7771 "ACCEL", EDJE_TWEEN_MODE_ACCELERATE,
7772 "DECEL", EDJE_TWEEN_MODE_DECELERATE,
7773 "ACCEL_FAC", EDJE_TWEEN_MODE_ACCELERATE_FACTOR,
7774 "DECEL_FAC", EDJE_TWEEN_MODE_DECELERATE_FACTOR,
7775 "SIN_FAC", EDJE_TWEEN_MODE_SINUSOIDAL_FACTOR,
7776 "DIVIS", EDJE_TWEEN_MODE_DIVISOR_INTERP,
7779 "LINEAR", EDJE_TWEEN_MODE_LINEAR,
7780 "SINUSOIDAL", EDJE_TWEEN_MODE_SINUSOIDAL,
7781 "ACCELERATE", EDJE_TWEEN_MODE_ACCELERATE,
7782 "DECELERATE", EDJE_TWEEN_MODE_DECELERATE,
7783 "ACCELERATE_FACTOR", EDJE_TWEEN_MODE_ACCELERATE_FACTOR,
7784 "DECELERATE_FACTOR", EDJE_TWEEN_MODE_DECELERATE_FACTOR,
7785 "SINUSOIDAL_FACTOR", EDJE_TWEEN_MODE_SINUSOIDAL_FACTOR,
7786 "DIVISOR_INTERP", EDJE_TWEEN_MODE_DIVISOR_INTERP,
7788 // long/full is short enough
7789 "BOUNCE", EDJE_TWEEN_MODE_BOUNCE,
7790 "SPRING", EDJE_TWEEN_MODE_SPRING,
7792 current_program->tween.time = FROM_DOUBLE(parse_float_range(1, 0.0, 999999999.0));
7793 if ((current_program->tween.mode >= EDJE_TWEEN_MODE_LINEAR) &&
7794 (current_program->tween.mode <= EDJE_TWEEN_MODE_DECELERATE))
7796 if ((get_arg_count() == 3) && (!strcmp(parse_str(2), "CURRENT")))
7797 current_program->tween.mode |= EDJE_TWEEN_MODE_OPT_FROM_CURRENT;
7798 else if (get_arg_count() != 2)
7800 ERR("parse error %s:%i. Need 2rd parameter to set time",
7805 // the following need v1
7806 // EDJE_TWEEN_MODE_ACCELERATE_FACTOR
7807 // EDJE_TWEEN_MODE_DECELERATE_FACTOR
7808 // EDJE_TWEEN_MODE_SINUSOIDAL_FACTOR
7809 // current_program->tween.v1
7810 else if ((current_program->tween.mode >= EDJE_TWEEN_MODE_ACCELERATE_FACTOR) &&
7811 (current_program->tween.mode <= EDJE_TWEEN_MODE_SINUSOIDAL_FACTOR))
7813 if ((get_arg_count() == 4) && (!strcmp(parse_str(3), "CURRENT")))
7814 current_program->tween.mode |= EDJE_TWEEN_MODE_OPT_FROM_CURRENT;
7815 else if (get_arg_count() != 3)
7817 ERR("parse error %s:%i. Need 3rd parameter to set factor",
7821 current_program->tween.v1 = FROM_DOUBLE(parse_float_range(2, 0.0, 999999999.0));
7823 // the followjng also need v2
7824 // EDJE_TWEEN_MODE_DIVISOR_INTERP
7825 // EDJE_TWEEN_MODE_BOUNCE
7826 // EDJE_TWEEN_MODE_SPRING
7827 // current_program->tween.v2
7828 else if ((current_program->tween.mode >= EDJE_TWEEN_MODE_DIVISOR_INTERP) &&
7829 (current_program->tween.mode <= EDJE_TWEEN_MODE_SPRING))
7831 if ((get_arg_count() == 5) && (!strcmp(parse_str(4), "CURRENT")))
7832 current_program->tween.mode |= EDJE_TWEEN_MODE_OPT_FROM_CURRENT;
7833 else if (get_arg_count() != 4)
7835 ERR("parse error %s:%i. "
7836 "Need 3rd and 4th parameters to set factor and counts",
7840 current_program->tween.v1 = FROM_DOUBLE(parse_float_range(2, 0.0, 999999999.0));
7841 current_program->tween.v2 = FROM_DOUBLE(parse_float_range(3, 0.0, 999999999.0));
7852 Program or part on which the specified action acts. Multiple target
7853 keywords may be specified, one per target. SIGNAL_EMITs do not have
7858 st_collections_group_programs_program_target(void)
7860 Edje_Part_Collection *pc;
7865 pc = eina_list_data_get(eina_list_last(edje_collections));
7866 ep = current_program;
7868 Edje_Program_Target *et;
7869 Edje_Program_Target *etw;
7874 name = parse_str(0);
7876 EINA_LIST_FOREACH(ep->targets, l, etw)
7878 if (!strcmp(name, (char*) (etw + 1)))
7885 et = mem_alloc(SZ(Edje_Program_Target) + strlen(name) + 1);
7886 ep->targets = eina_list_append(ep->targets, et);
7887 copy = (char*) (et + 1);
7889 memcpy(copy, name, strlen(name) + 1);
7891 if (ep->action == EDJE_ACTION_TYPE_STATE_SET)
7892 data_queue_part_lookup(pc, name, &(et->id));
7893 else if (ep->action == EDJE_ACTION_TYPE_ACTION_STOP)
7894 data_queue_program_lookup(pc, name, &(et->id));
7895 else if (ep->action == EDJE_ACTION_TYPE_DRAG_VAL_SET)
7896 data_queue_part_lookup(pc, name, &(et->id));
7897 else if (ep->action == EDJE_ACTION_TYPE_DRAG_VAL_STEP)
7898 data_queue_part_lookup(pc, name, &(et->id));
7899 else if (ep->action == EDJE_ACTION_TYPE_DRAG_VAL_PAGE)
7900 data_queue_part_lookup(pc, name, &(et->id));
7901 else if (ep->action == EDJE_ACTION_TYPE_FOCUS_SET)
7902 data_queue_part_lookup(pc, name, &(et->id));
7903 else if (ep->action == EDJE_ACTION_TYPE_FOCUS_OBJECT)
7904 data_queue_part_lookup(pc, name, &(et->id));
7907 ERR("parse error %s:%i. target may only be used after action",
7922 Specifies a program to run after the current program completes. The
7923 source and signal parameters of a program run as an "after" are ignored.
7924 Multiple "after" statements can be specified per program.
7928 st_collections_group_programs_program_after(void)
7930 Edje_Part_Collection *pc;
7935 pc = eina_list_data_get(eina_list_last(edje_collections));
7936 ep = current_program;
7938 Edje_Program_After *pa;
7939 Edje_Program_After *pa2;
7944 name = parse_str(0);
7946 EINA_LIST_FOREACH(ep->after, l, pa2)
7948 if (!strcmp(name, (char*) (pa2 + 1)))
7955 pa = mem_alloc(SZ(Edje_Program_After) + strlen(name) + 1);
7957 ep->after = eina_list_append(ep->after, pa);
7958 copy = (char*)(pa + 1);
7959 memcpy(copy, name, strlen(name) + 1);
7960 data_queue_program_lookup(pc, name, &(pa->id));
7970 [name] [description]
7972 Specifies a hint to let applications (or IDE's) know how to bind
7973 things. The parameter name should contain the name of the function that
7974 the application should use, and description describes how it should
7979 st_collections_group_programs_program_api(void)
7981 check_min_arg_count(1);
7983 current_program->api.name = parse_str(0);
7988 current_program->api.description = parse_str(1);
7993 st_collections_group_parts_part_api(void)
7995 check_min_arg_count(1);
7997 current_part->api.name = parse_str(0);
8001 current_part->api.description = parse_str(1);
8006 ob_collections_group_programs_program_script(void)
8008 Edje_Part_Collection *pc;
8011 pc = eina_list_data_get(eina_list_last(edje_collections));
8012 cd = eina_list_data_get(eina_list_last(codes));
8014 if (!is_verbatim()) track_verbatim(1);
8017 Eina_Bool empty = EINA_TRUE;
8026 /* FIXME: Need to store the script somewhere to be restored when using edje_edit API */
8027 cp = mem_alloc(SZ(Code_Program));
8028 cp->l1 = get_verbatim_line1();
8029 cp->l2 = get_verbatim_line2();
8031 cp->original = strdup(s);
8032 if (cd->shared && cd->is_lua)
8034 ERR("parse error %s:%i. You're trying to mix Embryo and Lua scripting in the same group",
8040 len = strlen(cp->script);
8041 for (i = 0; i < len; i++)
8043 if (((cp->script[i] > 'a') && (cp->script[i] < 'z')) ||
8044 ((cp->script[i] > 'A') && (cp->script[i] < 'Z')) ||
8045 ((cp->script[i] > '0') && (cp->script[i] < '9')))
8051 cd->programs = eina_list_append(cd->programs, cp);
8052 data_queue_anonymous_lookup(pc, current_program, &(cp->id));
8053 current_program->action = EDJE_ACTION_TYPE_SCRIPT;
8057 data_queue_anonymous_lookup(pc, current_program, NULL);
8062 set_verbatim(NULL, 0, 0);