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 pa = mem_alloc(SZ(Edje_Program_After));
1093 ep->after = eina_list_append(ep->after, pa);
1095 data_queue_copied_program_lookup(pc, &(pa2->id), &(pa->id));
1098 ep->api.name = STRDUP(ep2->api.name);
1099 ep->api.description = STRDUP(ep2->api.description);
1100 data_queue_copied_part_lookup(pc, &(ep2->param.src), &(ep->param.src));
1101 data_queue_copied_part_lookup(pc, &(ep2->param.dst), &(ep->param.dst));
1103 epp = (Edje_Program_Parser *)ep;
1104 epp->can_override = EINA_TRUE;
1112 @edcsection{toplevel,Top-Level blocks}
1125 The "externals" block is used to list each external module file that will be used in others
1134 Used to add a file to the externals list.
1138 st_externals_external(void)
1144 if (!edje_file->external_dir)
1145 edje_file->external_dir = mem_alloc(SZ(Edje_External_Directory));
1147 ex = mem_alloc(SZ(External));
1148 ex->name = parse_str(0);
1153 EINA_LIST_FOREACH(externals, l, lex)
1155 if (!strcmp(lex->name, ex->name))
1163 externals = eina_list_append(externals, ex);
1165 if (edje_file->external_dir)
1167 edje_file->external_dir->entries_count++;
1168 edje_file->external_dir->entries = realloc(edje_file->external_dir->entries,
1169 sizeof (Edje_External_Directory) * edje_file->external_dir->entries_count);
1170 memset(edje_file->external_dir->entries + edje_file->external_dir->entries_count - 1,
1171 0, sizeof (Edje_External_Directory));
1172 if (!edje_file->external_dir->entries)
1174 ERR("not enough memory");
1178 edje_file->external_dir->entries[edje_file->external_dir->entries_count - 1].entry = mem_strdup(ex->name);
1189 image: "filename1.ext" COMP;
1190 image: "filename2.ext" LOSSY 99;
1192 name: "image_name_used";
1194 image: "filename3.ext" LOSSY 90;
1195 size: 201 201 500 500;
1198 image: "filename4.ext" COMP;
1199 size: 51 51 200 200;
1202 image: "filename5.ext" COMP;
1206 image: "filename6.ext" RAW;
1213 The "images" block is used to list each image file that will be used in
1214 the theme along with its compression method (if any).
1215 Besides the document's root, additional "images" blocks can be
1216 included inside other blocks, normally "collections", "group" and
1217 "part", easing maintenance of the file list when the theme is split
1218 among multiple files.
1224 [image file] [compression method] (compression level)
1226 Used to include each image file. The full path to the directory holding
1227 the images can be defined later with edje_cc's "-id" option.
1228 Compression methods:
1229 @li RAW: Uncompressed.
1230 @li COMP: Lossless compression.
1231 @li LOSSY [0-100]: Lossy compression with quality from 0 to 100.
1232 @li USER: Do not embed the file, refer to the external file instead.
1236 st_images_image(void)
1238 Edje_Image_Directory_Entry *img;
1243 if (!edje_file->image_dir)
1244 edje_file->image_dir = mem_alloc(SZ(Edje_Image_Directory));
1248 for (i = 0; i < edje_file->image_dir->entries_count; ++i)
1249 if (!strcmp(edje_file->image_dir->entries[i].entry, tmp))
1255 edje_file->image_dir->entries_count++;
1256 edje_file->image_dir->entries = realloc(edje_file->image_dir->entries,
1257 sizeof (Edje_Image_Directory_Entry) * edje_file->image_dir->entries_count);
1258 memset(edje_file->image_dir->entries + edje_file->image_dir->entries_count - 1,
1259 0, sizeof (Edje_Image_Directory_Entry));
1260 if (!edje_file->image_dir->entries)
1262 ERR("No enough memory.");
1266 img = edje_file->image_dir->entries + edje_file->image_dir->entries_count - 1;
1269 img->id = edje_file->image_dir->entries_count - 1;
1278 img->source_type = EDJE_IMAGE_SOURCE_TYPE_INLINE_PERFECT;
1279 img->source_param = 0;
1283 img->source_type = EDJE_IMAGE_SOURCE_TYPE_INLINE_PERFECT;
1284 img->source_param = 1;
1288 img->source_type = EDJE_IMAGE_SOURCE_TYPE_INLINE_LOSSY;
1289 img->source_param = 0;
1293 img->source_type = EDJE_IMAGE_SOURCE_TYPE_EXTERNAL;
1294 img->source_param = 0;
1296 if (img->source_type != EDJE_IMAGE_SOURCE_TYPE_INLINE_LOSSY)
1300 img->source_param = parse_int_range(2, 0, 100);
1312 name: "image_name_used";
1314 image: "filename3.ext" LOSSY 90;
1315 size: 201 201 500 500;
1318 image: "filename4.ext" COMP;
1319 size: 51 51 200 200;
1322 image: "filename5.ext" COMP;
1326 image: "filename6.ext" RAW;
1331 The "set" block is used to define an image with different content depending on their size.
1332 Besides the document's root, additional "set" blocks can be
1333 included inside other blocks, normally "collections", "group" and
1334 "part", easing maintenance of the file list when the theme is split
1335 among multiple files.
1341 if (!edje_file->image_dir)
1342 edje_file->image_dir = mem_alloc(SZ(Edje_Image_Directory));
1344 edje_file->image_dir->sets_count++;
1345 edje_file->image_dir->sets = realloc(edje_file->image_dir->sets,
1346 sizeof (Edje_Image_Directory_Set) * edje_file->image_dir->sets_count);
1347 memset(edje_file->image_dir->sets + edje_file->image_dir->sets_count - 1,
1348 0, sizeof (Edje_Image_Directory_Set));
1349 if (!edje_file->image_dir->sets)
1351 ERR("Not enough memory.");
1354 edje_file->image_dir->sets[edje_file->image_dir->sets_count - 1].id = edje_file->image_dir->sets_count - 1;
1365 Define the name that refer to this image description.
1369 st_images_set_name(void)
1373 edje_file->image_dir->sets[edje_file->image_dir->sets_count - 1].name = parse_str(0);
1382 The "image" block inside a "set" block define the characteristic of an image.
1383 Every block will describe one image and the size rule to use it.
1387 ob_images_set_image(void)
1389 Edje_Image_Directory_Set_Entry *entry;
1390 Edje_Image_Directory_Set *set;
1392 set = edje_file->image_dir->sets + edje_file->image_dir->sets_count - 1;
1394 entry = mem_alloc(SZ(Edje_Image_Directory_Set_Entry));
1396 set->entries = eina_list_append(set->entries, entry);
1405 [image file] [compression method] (compression level)
1407 Used to include each image file. The full path to the directory holding
1408 the images can be defined later with edje_cc's "-id" option.
1409 Compression methods:
1410 @li RAW: Uncompressed.
1411 @li COMP: Lossless compression.
1412 @li LOSSY [0-100]: Lossy compression with quality from 0 to 100.
1413 @li USER: Do not embed the file, refer to the external file instead.
1417 st_images_set_image_image(void)
1419 Edje_Image_Directory_Set_Entry *entry;
1420 Edje_Image_Directory_Set *set;
1423 set = edje_file->image_dir->sets + edje_file->image_dir->sets_count - 1;
1424 entry = eina_list_data_get(eina_list_last(set->entries));
1426 /* Add the image to the global pool with the same syntax. */
1429 entry->name = parse_str(0);
1431 for (i = 0; i < edje_file->image_dir->entries_count; ++i)
1432 if (!strcmp(edje_file->image_dir->entries[i].entry, entry->name))
1445 [minw minh maxw mawh]
1447 Define the minimal and maximal size that will select the specified image.
1451 st_images_set_image_size(void)
1453 Edje_Image_Directory_Set_Entry *entry;
1454 Edje_Image_Directory_Set *set;
1456 set = edje_file->image_dir->sets + edje_file->image_dir->sets_count - 1;
1457 entry = eina_list_data_get(eina_list_last(set->entries));
1459 entry->size.min.w = parse_int(0);
1460 entry->size.min.h = parse_int(1);
1461 entry->size.max.w = parse_int(2);
1462 entry->size.max.h = parse_int(3);
1464 if (entry->size.min.w > entry->size.max.w
1465 || entry->size.min.h > entry->size.max.h)
1467 ERR("parse error %s:%i. Image min and max size are not in the right order ([%i, %i] < [%i, %i])",
1469 entry->size.min.w, entry->size.min.h,
1470 entry->size.max.w, entry->size.max.h);
1482 font: "filename1.ext" "fontname";
1483 font: "filename2.ext" "otherfontname";
1487 The "fonts" block is used to list each font file with an alias used later
1488 in the theme. As with the "images" block, additional "fonts" blocks can
1489 be included inside other blocks.
1495 [font filename] [font alias]
1497 Defines each font "file" and "alias", the full path to the directory
1498 holding the font files can be defined with edje_cc's "-fd" option.
1508 if (!edje_file->fonts)
1509 edje_file->fonts = eina_hash_string_small_new(free);
1511 fn = mem_alloc(SZ(Font));
1512 fn->file = parse_str(0);
1513 fn->name = parse_str(1);
1515 if (eina_hash_find(edje_file->fonts, fn->name))
1523 eina_hash_direct_add(edje_file->fonts, fn->name, fn);
1532 item: "key" "value";
1533 file: "otherkey" "filename.ext";
1537 The "data" block is used to pass arbitrary parameters from the theme to
1538 the application. Unlike the "images" and "fonts" blocks, additional
1539 "data" blocks can only be included inside the "group" block.
1545 [parameter name] [parameter value]
1547 Defines a new parameter, the value will be the string specified next to
1561 es = mem_alloc(SZ(Edje_String));
1562 es->str = parse_str(1);
1564 if (!edje_file->data)
1565 edje_file->data = eina_hash_string_small_new(free);
1567 /* FIXME: check if data already exist */
1568 eina_hash_direct_add(edje_file->data, key, es);
1576 [parameter name] [parameter filename]
1578 Defines a new parameter, the value will be the contents of the
1579 specified file formated as a single string of text. This property only
1580 works with plain text files.
1600 es = mem_alloc(SZ(Edje_String));
1601 filename = parse_str(1);
1603 fd = open(filename, O_RDONLY | O_BINARY, S_IRUSR | S_IWUSR);
1606 ERR("%s:%i when opening file \"%s\": \"%s\"",
1607 file_in, line, filename, strerror(errno));
1611 if (fstat(fd, &buf))
1613 ERR("%s:%i when stating file \"%s\": \"%s\"",
1614 file_in, line, filename, strerror(errno));
1618 data = mmap(NULL, buf.st_size, PROT_READ, MAP_SHARED, fd, 0);
1619 if (data == MAP_FAILED)
1621 ERR("%s:%i when mapping file \"%s\": \"%s\"",
1622 file_in, line, filename, strerror(errno));
1627 for (i = 0; i < buf.st_size; ++i, ++over)
1630 ERR("%s:%i file \"%s\" is a binary file.", file_in, line, filename);
1634 value = malloc(sizeof (char) * buf.st_size + 1);
1635 snprintf(value, buf.st_size + 1, "%s", data);
1637 munmap((void*)data, buf.st_size);
1642 eina_hash_direct_add(edje_file->data, key, es);
1654 name: "colorclassname";
1655 color: [0-255] [0-255] [0-255] [0-255];
1656 color2: [0-255] [0-255] [0-255] [0-255];
1657 color3: [0-255] [0-255] [0-255] [0-255]
1662 The "color_classes" block contains a list of one or more "color_class"
1663 blocks. Each "color_class" allows the designer to name an arbitrary
1664 group of colors to be used in the theme, the application can use that
1665 name to alter the color values at runtime.
1669 ob_color_class(void)
1671 Edje_Color_Class *cc;
1673 cc = mem_alloc(SZ(Edje_Color_Class));
1674 edje_file->color_classes = eina_list_append(edje_file->color_classes, cc);
1698 Sets the name for the color class, used as reference by both the theme
1699 and the application.
1703 st_color_class_name(void)
1705 Edje_Color_Class *cc, *tcc;
1708 cc = eina_list_data_get(eina_list_last(edje_file->color_classes));
1709 cc->name = parse_str(0);
1710 EINA_LIST_FOREACH(edje_file->color_classes, l, tcc)
1712 if ((cc != tcc) && (!strcmp(cc->name, tcc->name)))
1714 ERR("parse error %s:%i. There is already a color class named \"%s\"",
1715 file_in, line - 1, cc->name);
1726 [red] [green] [blue] [alpha]
1732 st_color_class_color(void)
1734 Edje_Color_Class *cc;
1738 cc = eina_list_data_get(eina_list_last(edje_file->color_classes));
1739 cc->r = parse_int_range(0, 0, 255);
1740 cc->g = parse_int_range(1, 0, 255);
1741 cc->b = parse_int_range(2, 0, 255);
1742 cc->a = parse_int_range(3, 0, 255);
1750 [red] [green] [blue] [alpha]
1752 Used as shadow in text and textblock parts.
1756 st_color_class_color2(void)
1758 Edje_Color_Class *cc;
1762 cc = eina_list_data_get(eina_list_last(edje_file->color_classes));
1763 cc->r2 = parse_int_range(0, 0, 255);
1764 cc->g2 = parse_int_range(1, 0, 255);
1765 cc->b2 = parse_int_range(2, 0, 255);
1766 cc->a2 = parse_int_range(3, 0, 255);
1774 [red] [green] [blue] [alpha]
1776 Used as outline in text and textblock parts.
1780 st_color_class_color3(void)
1782 Edje_Color_Class *cc;
1786 cc = eina_list_data_get(eina_list_last(edje_file->color_classes));
1787 cc->r3 = parse_int_range(0, 0, 255);
1788 cc->g3 = parse_int_range(1, 0, 255);
1789 cc->b3 = parse_int_range(2, 0, 255);
1790 cc->a3 = parse_int_range(3, 0, 255);
1801 base: "..default style properties..";
1803 tag: "tagname" "..style properties..";
1809 The "styles" block contains a list of one or more "style" blocks. A
1810 "style" block is used to create style \<tags\> for advanced TEXTBLOCK
1815 ob_styles_style(void)
1819 stl = mem_alloc(SZ(Edje_Style));
1820 edje_file->styles = eina_list_append(edje_file->styles, stl);
1830 The name of the style to be used as reference later in the theme.
1834 st_styles_style_name(void)
1836 Edje_Style *stl, *tstl;
1839 stl = eina_list_data_get(eina_list_last(edje_file->styles));
1840 stl->name = parse_str(0);
1841 EINA_LIST_FOREACH(edje_file->styles, l, tstl)
1843 if (stl->name && tstl->name && (stl != tstl) && (!strcmp(stl->name, tstl->name)))
1845 ERR("parse error %s:%i. There is already a style named \"%s\"",
1846 file_in, line - 1, stl->name);
1857 [style properties string]
1859 The default style properties that will be applied to the complete
1864 st_styles_style_base(void)
1867 Edje_Style_Tag *tag;
1869 stl = eina_list_data_get(eina_list_last(edje_file->styles));
1872 ERR("parse error %s:%i. There is already a basic format for the style",
1876 tag = mem_alloc(SZ(Edje_Style_Tag));
1877 tag->key = mem_strdup("DEFAULT");
1878 tag->value = parse_str(0);
1879 stl->tags = eina_list_append(stl->tags, tag);
1887 [tag name] [style properties string]
1889 Style to be applied only to text between style \<tags\>..\</tags\>.
1890 When creating "paired" tags, like \<bold\>\</bold\>, A '+' should be added at the start of the style properties of the first part (\<bold\>).
1891 If the second part (\</bold\>) is also defined, a '-' should be prepended to it's style properties.
1892 This only applies to paired tags; Single tags, like \<tab\>, must not include a starting '+'.
1896 st_styles_style_tag(void)
1899 Edje_Style_Tag *tag;
1901 stl = eina_list_data_get(eina_list_last(edje_file->styles));
1902 tag = mem_alloc(SZ(Edje_Style_Tag));
1903 tag->key = parse_str(0);
1904 tag->value = parse_str(1);
1905 stl->tags = eina_list_append(stl->tags, tag);
1921 The "collections" block is used to list the groups that compose the
1922 theme. Additional "collections" blocks do not prevent overriding group
1923 names. The "sounds" block comprises of all sound definitions.
1927 ob_collections(void)
1929 if (!edje_file->collection)
1930 edje_file->collection = eina_hash_string_small_new(NULL);
1940 name: "sound_file1" COMP;
1941 source: "sound_file1.wav";
1944 name: "sound_file2" LOSSY 0.4;
1945 source: "sound_file2.wav";
1947 tone: "tone-1" 2300;
1951 The "sounds" block contains a list of one or more sound sample and tones items.
1957 name: "sound_file1" RAW;
1958 source: "sound_file1.wav";
1961 name: "sound_file2" LOSSY 0.5;
1962 source: "sound_file2.wav";
1965 name: "sound_file3" COMP;
1966 source: "sound_file3.wav";
1969 name: "sound_file4" AS_IS;
1970 source: "sound_file1.wav";
1973 The sample block defines the sound sample.
1978 [sample name] [compression type] [if lossy, then quality]
1980 Used to include each sound file. The full path to the directory holding
1981 the sounds can be defined later with edje_cc's "-sd" option.
1982 @li RAW: Uncompressed.
1983 @li COMP: Lossless compression.
1984 @li LOSSY [-0.1 - 1.0]: Lossy compression with quality from 0 to 1.0.
1985 @li AS_IS: Check for re-encoding, no compression/encoding, just write the file information as it is.
1990 st_collections_group_sound_sample_name(void)
1992 Edje_Sound_Sample *sample;
1996 if (!edje_file->sound_dir)
1997 edje_file->sound_dir = mem_alloc(SZ(Edje_Sound_Directory));
2001 for (i = 0; i < edje_file->sound_dir->samples_count; i++)
2003 if (!strcmp(edje_file->sound_dir->samples[i].name, tmp))
2010 edje_file->sound_dir->samples_count++;
2011 edje_file->sound_dir->samples =
2012 realloc(edje_file->sound_dir->samples,
2013 sizeof(Edje_Sound_Sample) *
2014 edje_file->sound_dir->samples_count);
2016 if (!edje_file->sound_dir->samples)
2018 ERR("No enough memory.");
2023 edje_file->sound_dir->samples +
2024 edje_file->sound_dir->samples_count - 1;
2025 memset(sample, 0, sizeof (Edje_Sound_Sample));
2028 sample->id = edje_file->sound_dir->samples_count - 1;
2029 sample->compression = parse_enum(1,
2030 "RAW", EDJE_SOUND_SOURCE_TYPE_INLINE_RAW,
2031 "COMP", EDJE_SOUND_SOURCE_TYPE_INLINE_COMP,
2032 "LOSSY", EDJE_SOUND_SOURCE_TYPE_INLINE_LOSSY,
2033 "AS_IS", EDJE_SOUND_SOURCE_TYPE_INLINE_AS_IS,
2036 if (sample->compression == EDJE_SOUND_SOURCE_TYPE_INLINE_LOSSY)
2038 sample->quality = parse_float_range(2, 45.0, 1000.0);
2053 The Sound source file name (Source can be mono/stereo WAV file.
2054 Only files with 44.1 KHz sample rate supported now)
2059 st_collections_group_sound_sample_source(void)
2061 Edje_Sound_Sample *sample;
2063 if (!edje_file->sound_dir->samples)
2065 ERR("Invalid sound sample source definition.");
2070 edje_file->sound_dir->samples +
2071 edje_file->sound_dir->samples_count - 1;
2075 ERR("Invalid sound sample source definition.");
2078 sample->snd_src = parse_str(0);
2087 [tone name] [frequency]
2089 sound of specific frequency
2094 st_collections_group_sound_tone(void)
2096 Edje_Sound_Tone *tone;
2103 if (!edje_file->sound_dir)
2104 edje_file->sound_dir = mem_alloc(SZ(Edje_Sound_Directory));
2107 /* Audible range 20 to 20KHz */
2108 value = parse_int_range(1, 20, 20000);
2110 /* Check for Tone duplication */
2111 for (i = 0; i < edje_file->sound_dir->tones_count; i++)
2113 if (!strcmp(edje_file->sound_dir->tones[i].name, tmp))
2115 ERR("Tone name: %s already exist.", tmp);
2119 if (edje_file->sound_dir->tones[i].value == value)
2121 ERR("Tone name %s with same frequency %d exist.",
2122 edje_file->sound_dir->tones[i].name, value);
2126 edje_file->sound_dir->tones_count++;
2127 edje_file->sound_dir->tones =
2128 realloc(edje_file->sound_dir->tones,
2129 sizeof (Edje_Sound_Tone) *
2130 edje_file->sound_dir->tones_count);
2132 if (!edje_file->sound_dir->tones)
2134 ERR("No enough memory.");
2138 tone = edje_file->sound_dir->tones + edje_file->sound_dir->tones_count - 1;
2139 memset(tone, 0, sizeof (Edje_Sound_Tone));
2142 tone->value = value;
2143 tone->id = edje_file->sound_dir->tones_count - 1;
2147 @edcsection{group,Group sub blocks}
2158 name: "nameusedbytheapplication";
2159 alias: "anothername";
2171 A "group" block contains the list of parts and programs that compose a
2176 ob_collections_group(void)
2178 Edje_Part_Collection *pc;
2181 if (current_de && !current_de->entry)
2183 ERR("A collection without a name was detected, that's not allowed.");
2187 current_de = mem_alloc(SZ(Edje_Part_Collection_Directory_Entry));
2188 current_de->id = eina_list_count(edje_collections);
2190 pc = mem_alloc(SZ(Edje_Part_Collection));
2191 edje_collections = eina_list_append(edje_collections, pc);
2192 pc->id = current_de->id;
2193 pc->broadcast_signal = EINA_TRUE; /* This was the behaviour by default in Edje 1.1 */
2195 cd = mem_alloc(SZ(Code));
2196 codes = eina_list_append(codes, cd);
2206 The name that will be used by the application to load the resulting
2207 Edje object and to identify the group to swallow in a GROUP part. If a
2208 group with the same name exists already it will be completely overriden
2213 st_collections_group_name(void)
2215 Edje_Part_Collection_Directory_Entry *alias;
2216 Edje_Part_Collection_Directory_Entry *older;
2217 Edje_Part_Collection *current_pc;
2218 Eina_List *l = NULL;
2222 current_pc = eina_list_data_get(eina_list_last(edje_collections));
2224 current_de->entry = parse_str(0);
2225 current_pc->part = current_de->entry;
2227 older = eina_hash_find(edje_file->collection, current_de->entry);
2228 if (older) eina_hash_del(edje_file->collection, current_de->entry, older);
2229 eina_hash_direct_add(edje_file->collection, current_de->entry, current_de);
2232 EINA_LIST_FOREACH(aliases, l, alias)
2233 if (strcmp(alias->entry, current_de->entry) == 0)
2235 Edje_Part_Collection *pc;
2237 pc = eina_list_nth(edje_collections, older->id);
2238 INF("overriding alias ('%s' => '%s') by group '%s'",
2239 alias->entry, pc->part,
2241 aliases = eina_list_remove_list(aliases, l);
2248 typedef struct _Edje_List_Foreach_Data Edje_List_Foreach_Data;
2249 struct _Edje_List_Foreach_Data
2255 _edje_data_item_list_foreach(const Eina_Hash *hash __UNUSED__, const void *key, void *data __UNUSED__, void *fdata)
2257 Edje_List_Foreach_Data *fd;
2260 fd->list = eina_list_append(fd->list, strdup(key));
2272 Parent group name for inheritance.
2273 Group "inherit" is used to inherit any predefined group and change
2274 some property which belongs to "part", "description", "items" or "program".
2275 The child group has the same property as parent group. If you specify the
2276 type again in an inherited part, it will cause an error (unless you plan
2282 st_collections_group_inherit(void)
2284 Edje_Part_Collection *pc, *pc2;
2285 Edje_Part *ep, *ep2;
2286 Edje_Part_Parser *epp, *epp2;
2287 Edje_Pack_Element *item, *item2;
2288 Edje_Pack_Element_Parser *pitem;
2289 Edje_Part_Description_Common *ed, *ed2;
2290 Edje_List_Foreach_Data fdata;
2297 pc = eina_list_data_get(eina_list_last(edje_collections));
2299 parent_name = parse_str(0);
2301 EINA_LIST_FOREACH(edje_collections, l, pc2)
2303 if (!strcmp(parent_name, pc2->part))
2308 ERR("parse error %s:%i. There isn't a group with the name %s",
2309 file_in, line - 1, parent_name);
2314 ERR("parse error %s:%i. You are trying to inherit '%s' from itself. That's not possible."
2315 "If there is another group of the same name, you want to inherit from that group and have the"
2316 "same name as that group, there is a trick ! Just put the inherit before the directive that set"
2317 "the name !", file_in, line - 1, parent_name);
2325 memset(&fdata, 0, sizeof(Edje_List_Foreach_Data));
2326 eina_hash_foreach(pc2->data,
2327 _edje_data_item_list_foreach, &fdata);
2329 if (!pc->data) pc->data = eina_hash_string_small_new(free);
2330 EINA_LIST_FREE(fdata.list, key)
2332 data = eina_hash_find(pc2->data, key);
2333 eina_hash_direct_add(pc->data, key, data);
2341 memset(&fdata, 0, sizeof(Edje_List_Foreach_Data));
2342 eina_hash_foreach(pc2->alias,
2343 _edje_data_item_list_foreach, &fdata);
2344 if (!pc->alias) pc->alias = eina_hash_string_small_new(free);
2345 EINA_LIST_FREE(fdata.list, key)
2347 alias = eina_hash_find(pc2->alias, key);
2348 eina_hash_direct_add(pc->alias, key, alias);
2353 char *key, *aliased;
2355 memset(&fdata, 0, sizeof(Edje_List_Foreach_Data));
2356 eina_hash_foreach(pc2->aliased,
2357 _edje_data_item_list_foreach, &fdata);
2358 if (!pc->aliased) pc->aliased = eina_hash_string_small_new(free);
2359 EINA_LIST_FREE(fdata.list, key)
2361 aliased = eina_hash_find(pc2->aliased, key);
2362 eina_hash_direct_add(pc->aliased, key, aliased);
2366 pc->prop.min.w = pc2->prop.min.w;
2367 pc->prop.min.h = pc2->prop.min.h;
2368 pc->prop.orientation = pc2->prop.orientation;
2370 pc->lua_script_only = pc2->lua_script_only;
2372 #define STRDUP(x) x ? strdup(x) : NULL
2373 for (i = 0 ; i < pc2->parts_count ; i++)
2376 ob_collections_group_parts_part();
2378 ep2 = pc2->parts[i];
2379 ep->name = STRDUP(ep2->name);
2380 ep->source = STRDUP(ep2->source);
2381 ep->source2 = STRDUP(ep2->source2);
2382 ep->source3 = STRDUP(ep2->source3);
2383 ep->source4 = STRDUP(ep2->source4);
2384 ep->source5 = STRDUP(ep2->source5);
2385 ep->source6 = STRDUP(ep2->source6);
2387 data_queue_copied_part_lookup(pc, &(ep2->clip_to_id), &(ep->clip_to_id));
2389 ep->type = ep2->type;
2390 ep->mouse_events = ep2->mouse_events;
2391 ep->repeat_events = ep2->repeat_events;
2392 ep->ignore_flags = ep2->ignore_flags;
2393 ep->scale = ep2->scale;
2394 ep->pointer_mode = ep2->pointer_mode;
2395 ep->precise_is_inside = ep2->precise_is_inside;
2396 ep->use_alternate_font_metrics = ep2->use_alternate_font_metrics;
2397 ep->effect = ep2->effect;
2398 ep->entry_mode = ep2->entry_mode;
2399 ep->select_mode = ep2->select_mode;
2400 ep->cursor_mode = ep2->cursor_mode;
2401 ep->multiline = ep2->multiline;
2402 ep->access = ep2->access;
2403 ep->dragable.x = ep2->dragable.x;
2404 ep->dragable.step_x = ep2->dragable.step_x;
2405 ep->dragable.count_x = ep2->dragable.count_x;
2406 ep->dragable.y = ep2->dragable.y;
2407 ep->dragable.step_y = ep2->dragable.step_y;
2408 ep->dragable.count_y = ep2->dragable.count_y;
2410 data_queue_copied_part_lookup(pc, &(ep2->dragable.confine_id), &(ep->dragable.confine_id));
2411 data_queue_copied_part_lookup(pc, &(ep2->dragable.event_id), &(ep->dragable.event_id));
2413 epp = (Edje_Part_Parser *)ep;
2414 epp2 = (Edje_Part_Parser *)ep2;
2415 epp->reorder.insert_before = STRDUP(epp2->reorder.insert_before);
2416 epp->reorder.insert_after = STRDUP(epp2->reorder.insert_after);
2417 epp->can_override = EINA_TRUE;
2419 for (j = 0 ; j < ep2->items_count ; j++)
2421 ob_collections_group_parts_part_box_items_item();
2422 item = ep->items[j];
2423 item2 = ep2->items[j];
2424 item->type = item2->type;
2425 item->name = STRDUP(item2->name);
2426 item->source = STRDUP(item2->source);
2427 item->min.w = item2->min.w;
2428 item->min.h = item2->min.h;
2429 item->prefer.w = item2->prefer.w;
2430 item->prefer.h = item2->prefer.h;
2431 item->max.w = item2->max.w;
2432 item->max.h = item2->max.h;
2433 item->padding.l = item2->padding.l;
2434 item->padding.r = item2->padding.r;
2435 item->padding.t = item2->padding.t;
2436 item->padding.b = item2->padding.b;
2437 item->align.x = item2->align.x;
2438 item->align.y = item2->align.y;
2439 item->weight.x = item2->weight.x;
2440 item->weight.y = item2->weight.y;
2441 item->aspect.w = item2->aspect.w;
2442 item->aspect.h = item2->aspect.h;
2443 item->aspect.mode = item2->aspect.mode;
2444 item->options = STRDUP(item2->options);
2445 item->col = item2->col;
2446 item->row = item2->row;
2447 item->colspan = item2->colspan;
2448 item->rowspan = item2->rowspan;
2450 pitem = (Edje_Pack_Element_Parser *)item;
2451 pitem->can_override = EINA_TRUE;
2454 ep->api.name = STRDUP(ep2->api.name);
2455 if (ep2->api.description) ep->api.description = STRDUP(ep2->api.description);
2457 // copy default description
2458 ob_collections_group_parts_part_description();
2459 ed = ep->default_desc;
2460 parent_desc = ed2 = ep2->default_desc;
2461 ed->state.name = STRDUP(ed2->state.name);
2462 ed->state.value = ed2->state.value;
2463 st_collections_group_parts_part_description_inherit();
2466 // copy other description
2467 for (j = 0 ; j < ep2->other.desc_count ; j++)
2469 ob_collections_group_parts_part_description();
2470 ed = ep->other.desc[j];
2471 parent_desc = ed2 = ep2->other.desc[j];
2472 ed->state.name = STRDUP(ed2->state.name);
2473 ed->state.value = ed2->state.value;
2474 st_collections_group_parts_part_description_inherit();
2480 for (j = 0 ; j < pc2->programs.fnmatch_count ; j++)
2482 ob_collections_group_programs_program();
2483 _edje_program_copy(current_program, pc2->programs.fnmatch[j]);
2485 for (j = 0 ; j < pc2->programs.strcmp_count ; j++)
2487 ob_collections_group_programs_program();
2488 _edje_program_copy(current_program, pc2->programs.strcmp[j]);
2490 for (j = 0 ; j < pc2->programs.strncmp_count ; j++)
2492 ob_collections_group_programs_program();
2493 _edje_program_copy(current_program, pc2->programs.strncmp[j]);
2495 for (j = 0 ; j < pc2->programs.strrncmp_count ; j++)
2497 ob_collections_group_programs_program();
2498 _edje_program_copy(current_program, pc2->programs.strrncmp[j]);
2500 for (j = 0 ; j < pc2->programs.nocmp_count ; j++)
2502 ob_collections_group_programs_program();
2503 _edje_program_copy(current_program, pc2->programs.nocmp[j]);
2507 Code_Program *cp, *cp2;
2508 Edje_Part_Collection_Directory_Entry *de;
2510 de = eina_hash_find(edje_file->collection, pc2->part);
2511 cd2 = eina_list_nth(codes, de->id);
2512 cd = eina_list_data_get(eina_list_last(codes));
2514 EINA_LIST_FOREACH(cd2->programs, l, cp2)
2516 cp = mem_alloc(SZ(Code_Program));
2520 cp->script = STRDUP(cp2->script);
2521 cd->is_lua = cd2->is_lua;
2522 cd->shared = cd2->shared;
2523 cd->programs = eina_list_append(cd->programs, cp);
2524 data_queue_copied_anonymous_lookup(pc, &(cp2->id), &(cp->id));
2538 The flag (on/off) as to if this group is defined ONLY by script
2539 callbacks such as init(), resize() and shutdown()
2543 st_collections_group_script_only(void)
2545 Edje_Part_Collection *pc;
2549 pc = eina_list_data_get(eina_list_last(edje_collections));
2550 pc->lua_script_only = parse_bool(0);
2558 [aditional group name]
2560 Additional name to serve as identifier. Defining multiple aliases is
2565 st_collections_group_alias(void)
2567 Edje_Part_Collection_Directory_Entry *alias;
2568 Edje_Part_Collection_Directory_Entry *tmp;
2573 alias = mem_alloc(SZ(Edje_Part_Collection_Directory_Entry));
2574 alias->id = current_de->id;
2575 alias->entry = parse_str(0);
2577 EINA_LIST_FOREACH(aliases, l, tmp)
2578 if (strcmp(alias->entry, tmp->entry) == 0)
2580 Edje_Part_Collection *pc;
2582 pc = eina_list_nth(edje_collections, tmp->id);
2583 INF("overriding alias ('%s' => '%s') to ('%s' => '%s')",
2584 tmp->entry, pc->part,
2585 alias->entry, current_de->entry);
2586 aliases = eina_list_remove_list(aliases, l);
2591 aliases = eina_list_append(aliases, alias);
2601 The minimum size for the container defined by the composition of the
2602 parts. It is not enforced.
2606 st_collections_group_min(void)
2608 Edje_Part_Collection *pc;
2612 pc = eina_list_data_get(eina_list_last(edje_collections));
2613 pc->prop.min.w = parse_int_range(0, 0, 0x7fffffff);
2614 pc->prop.min.h = parse_int_range(1, 0, 0x7fffffff);
2624 The maximum size for the container defined by the totality of the
2625 parts. It is not enforced.
2629 st_collections_group_max(void)
2631 Edje_Part_Collection *pc;
2635 pc = eina_list_data_get(eina_list_last(edje_collections));
2636 pc->prop.max.w = parse_int_range(0, 0, 0x7fffffff);
2637 pc->prop.max.h = parse_int_range(1, 0, 0x7fffffff);
2647 Signal got automatically broadcasted to all sub group part. Default to
2652 st_collections_group_broadcast_signal(void)
2654 Edje_Part_Collection *pc;
2658 pc = eina_list_data_get(eina_list_last(edje_collections));
2659 pc->broadcast_signal = parse_bool(0);
2682 This block is used to "inject" embryo scripts to a given Edje theme and
2683 it functions in two modalities. When it's included inside a "program"
2684 block, the script will be executed every time the program is run, on
2685 the other hand, when included directly into a "group", "part" or
2686 "description" block, it will be executed once at load time, in the
2691 ob_collections_group_script(void)
2695 cd = eina_list_data_get(eina_list_last(codes));
2697 if (!is_verbatim()) track_verbatim(1);
2705 cd->l1 = get_verbatim_line1();
2706 cd->l2 = get_verbatim_line2();
2709 ERR("parse error %s:%i. There is already an existing script section for the group",
2714 cd->original = strdup(s);
2716 set_verbatim(NULL, 0, 0);
2722 ob_collections_group_lua_script(void)
2726 cd = eina_list_data_get(eina_list_last(codes));
2728 if (!is_verbatim()) track_verbatim(1);
2736 cd->l1 = get_verbatim_line1();
2737 cd->l2 = get_verbatim_line2();
2740 ERR("parse error %s:%i. There is already an existing script section for the group",
2746 set_verbatim(NULL, 0, 0);
2752 st_collections_group_data_item(void)
2754 Edje_Part_Collection *pc;
2760 pc = eina_list_data_get(eina_list_last(edje_collections));
2763 pc->data = eina_hash_string_small_new(free);
2767 es = mem_alloc(SZ(Edje_String));
2768 es->str = parse_str(1);
2770 if (eina_hash_find(pc->data, key))
2771 eina_hash_modify(pc->data, key, es);
2773 eina_hash_direct_add(pc->data, key, es);
2783 This defines GROUP orientation.
2784 This is useful if you want match interface orientation with language.
2785 AUTO - Follow system defs.
2786 LTR - suitable for Left To Right Languages (latin)
2787 RTL - suitable for Right To Left Languages (Hebrew, Arabic interface)
2791 st_collections_group_orientation(void)
2793 Edje_Part_Collection *pc;
2797 pc = eina_list_data_get(eina_list_last(edje_collections));
2798 pc->prop.orientation = parse_enum(0,
2799 "AUTO", EDJE_ORIENTATION_AUTO,
2800 "LTR", EDJE_ORIENTATION_LTR,
2801 "RTL", EDJE_ORIENTATION_RTL,
2812 vertical: "limit_name" height_barrier;
2813 horizontal: "limit_name" width_barrier;
2820 This block is used to trigger some signal when the Edje object is resized.
2827 [name] [height barrier]
2829 It will send a signal: "limit,name,over" when the object is resized and pass
2830 the limit by growing over it. And it will send: "limit,name,below" when
2831 it pass below that limit.
2832 This limit will be applied on the y absis and is expressed in pixels.
2836 st_collections_group_limits_vertical(void)
2838 Edje_Part_Collection *pc;
2843 el = mem_alloc(SZ(Edje_Limit));
2845 pc = eina_list_data_get(eina_list_last(edje_collections));
2846 pc->limits.vertical_count++;
2847 pc->limits.vertical = realloc(pc->limits.vertical, pc->limits.vertical_count * sizeof (Edje_Limit *));
2848 if (!pc->limits.vertical || !el)
2850 ERR("Not enough memory.");
2854 pc->limits.vertical[pc->limits.vertical_count - 1] = el;
2856 el->name = parse_str(0);
2857 el->value = parse_int_range(1, 1, 0xffff);
2865 [name] [width barrier]
2867 It will send a signal: "limit,name,over" when the object is resized and pass
2868 the limit by growing over it. And it will send: "limit,name,below" when
2869 it pass below that limit.
2870 This limit will be applied on the x absis and is expressed in pixels.
2874 st_collections_group_limits_horizontal(void)
2876 Edje_Part_Collection *pc;
2881 el = mem_alloc(SZ(Edje_Limit));
2883 pc = eina_list_data_get(eina_list_last(edje_collections));
2884 pc->limits.horizontal_count++;
2885 pc->limits.horizontal = realloc(pc->limits.horizontal, pc->limits.horizontal_count * sizeof (Edje_Limit *));
2886 if (!pc->limits.horizontal || !el)
2888 ERR("Not enough memory.");
2892 pc->limits.horizontal[pc->limits.horizontal_count - 1] = el;
2894 el->name = parse_str(0);
2895 el->value = parse_int_range(1, 1, 0xffff);
2905 alias: "theme_part_path" "real_part_path";
2910 Alias of part give a chance to let the designer put the real one
2911 in a box or reuse one from a GROUP or inside a BOX.
2915 st_collections_group_parts_alias(void)
2917 Edje_Part_Collection *pc;
2919 const char *aliased;
2923 pc = eina_list_data_get(eina_list_last(edje_collections));
2925 alias = parse_str(0);
2926 aliased = parse_str(1);
2928 if (!pc->alias) pc->alias = eina_hash_string_small_new(NULL);
2929 eina_hash_add(pc->alias, alias, aliased);
2931 if (!pc->aliased) pc->aliased = eina_hash_string_small_new(NULL);
2932 eina_hash_add(pc->aliased, aliased, alias);
2950 clip_to: "anotherpart";
2951 source: "groupname";
2952 pointer_mode: AUTOGRAB;
2953 use_alternate_font_metrics: 0;
2963 Parts are used to represent the most basic design elements of the
2964 theme, for example, a part can represent a line in a border or a label
2969 ob_collections_group_parts_part(void)
2971 Edje_Part_Collection *pc;
2973 Edje_Part_Parser *epp;
2975 ep = mem_alloc(SZ(Edje_Part_Parser));
2977 pc = eina_list_data_get(eina_list_last(edje_collections));
2979 pc->parts = realloc(pc->parts, pc->parts_count * sizeof (Edje_Part *));
2982 ERR("Not enough memory.");
2985 current_part = pc->parts[pc->parts_count - 1] = ep;
2987 ep->id = pc->parts_count - 1;
2988 ep->type = EDJE_PART_TYPE_IMAGE;
2989 ep->mouse_events = 1;
2990 ep->repeat_events = 0;
2991 ep->ignore_flags = EVAS_EVENT_FLAG_NONE;
2993 ep->pointer_mode = EVAS_OBJECT_POINTER_MODE_AUTOGRAB;
2994 ep->precise_is_inside = 0;
2995 ep->use_alternate_font_metrics = 0;
2997 ep->clip_to_id = -1;
2998 ep->dragable.confine_id = -1;
2999 ep->dragable.event_id = -1;
3002 epp = (Edje_Part_Parser *)ep;
3003 epp->reorder.insert_before = NULL;
3004 epp->reorder.insert_after = NULL;
3005 epp->reorder.before = NULL;
3006 epp->reorder.after = NULL;
3007 epp->reorder.linked_prev = 0;
3008 epp->reorder.linked_next = 0;
3009 epp->reorder.done = EINA_FALSE;
3010 epp->can_override = EINA_FALSE;
3020 The part's name will be used as reference in the theme's relative
3021 positioning system, by programs and in some cases by the application.
3022 It must be unique within the group.
3026 st_collections_group_parts_part_name(void)
3028 Edje_Part_Collection *pc;
3030 Edje_Part_Parser *epp;
3034 pc = eina_list_data_get(eina_list_last(edje_collections));
3036 ep->name = parse_str(0);
3042 for (i = 0; i < (pc->parts_count - 1); i++)
3044 if (pc->parts[i]->name && (!strcmp(pc->parts[i]->name, ep->name)))
3046 epp = (Edje_Part_Parser *)pc->parts[i];
3047 if (!epp->can_override)
3049 ERR("parse error %s:%i. There is already a part of the name %s",
3050 file_in, line - 1, ep->name);
3057 pc->parts = realloc(pc->parts, pc->parts_count * sizeof (Edje_Part *));
3058 ep = current_part = pc->parts[i];
3059 epp->can_override = EINA_FALSE;
3074 Set the type (all caps) from among the available types, it's set to
3075 IMAGE by default. Valid types:
3090 st_collections_group_parts_part_type(void)
3096 type = parse_enum(0,
3097 "NONE", EDJE_PART_TYPE_NONE,
3098 "RECT", EDJE_PART_TYPE_RECTANGLE,
3099 "TEXT", EDJE_PART_TYPE_TEXT,
3100 "IMAGE", EDJE_PART_TYPE_IMAGE,
3101 "SWALLOW", EDJE_PART_TYPE_SWALLOW,
3102 "TEXTBLOCK", EDJE_PART_TYPE_TEXTBLOCK,
3103 "GROUP", EDJE_PART_TYPE_GROUP,
3104 "BOX", EDJE_PART_TYPE_BOX,
3105 "TABLE", EDJE_PART_TYPE_TABLE,
3106 "EXTERNAL", EDJE_PART_TYPE_EXTERNAL,
3107 "PROXY", EDJE_PART_TYPE_PROXY,
3108 "SPACER", EDJE_PART_TYPE_SPACER,
3111 /* handle type change of inherited part */
3112 if (type != current_part->type)
3114 Edje_Part_Description_Common *new, *previous;
3115 Edje_Part_Collection *pc;
3119 /* we don't free old part as we don't remove all reference to them */
3120 part_description_image_cleanup(current_part);
3122 pc = eina_list_data_get(eina_list_last(edje_collections));
3125 previous = ep->default_desc;
3128 new = _edje_part_description_alloc(type, pc->part, ep->name);
3129 memcpy(new, previous, sizeof (Edje_Part_Description_Common));
3131 ep->default_desc = new;
3134 for (i = 0; i < ep->other.desc_count; i++)
3136 previous = ep->other.desc[i];
3137 new = _edje_part_description_alloc(type, pc->part, ep->name);
3138 memcpy(new, previous, sizeof (Edje_Part_Description_Common));
3139 ep->other.desc[i] = new;
3143 current_part->type = type;
3151 [another part's name]
3153 The part's name which this part is inserted before. One part cannot
3154 have both insert_before and insert_after. One part cannot refer
3155 more than one by insert_before.
3160 st_collections_group_parts_part_insert_before(void)
3162 Edje_Part_Parser *epp;
3165 epp = (Edje_Part_Parser *)current_part;
3166 epp->reorder.insert_before = parse_str(0);
3174 [another part's name]
3176 The part's name which this part is inserted after. One part cannot
3177 have both insert_before and insert_after. One part cannot refer
3178 more than one by insert_after.
3183 st_collections_group_parts_part_insert_after(void)
3185 Edje_Part_Parser *epp;
3188 epp = (Edje_Part_Parser *)current_part;
3189 epp->reorder.insert_after = parse_str(0);
3199 Specifies whether the part will emit signals, although it is named
3200 "mouse_events", disabling it (0) will prevent the part from emitting
3201 any type of signal at all. It's set to 1 by default.
3205 st_collections_group_parts_part_mouse_events(void)
3209 current_part->mouse_events = parse_bool(0);
3219 Specifies whether a part echoes a mouse event to other parts below the
3220 pointer (1), or not (0). It's set to 0 by default.
3224 st_collections_group_parts_part_repeat_events(void)
3228 current_part->repeat_events = parse_bool(0);
3238 Specifies whether events with the given flags should be ignored,
3239 i.e., will not have the signals emitted to the parts. Multiple flags
3240 must be separated by spaces, the effect will be ignoring all events
3241 with one of the flags specified. Possible flags:
3242 @li NONE (default value, no event will be ignored)
3247 st_collections_group_parts_part_ignore_flags(void)
3249 check_min_arg_count(1);
3251 current_part->ignore_flags = parse_flags(0,
3252 "NONE", EVAS_EVENT_FLAG_NONE,
3253 "ON_HOLD", EVAS_EVENT_FLAG_ON_HOLD,
3264 Specifies whether the part will scale its size with an edje scaling
3265 factor. By default scale is off (0) and the default scale factor is
3266 1.0 - that means no scaling. This would be used to scale properties
3267 such as font size, min/max size of the part, and possibly can be used
3268 to scale based on DPI of the target device. The reason to be selective
3269 is that some things work well being scaled, others do not, so the
3270 designer gets to choose what works best.
3274 st_collections_group_parts_part_scale(void)
3278 current_part->scale = parse_bool(0);
3288 Sets the mouse pointer behavior for a given part. The default value is
3289 AUTOGRAB. Aviable modes:
3290 @li AUTOGRAB, when the part is clicked and the button remains
3291 pressed, the part will be the source of all future mouse
3292 signals emitted, even outside the object, until the button is
3294 @li NOGRAB, the effect will be limited to the part's container.
3298 st_collections_group_parts_part_pointer_mode(void)
3302 current_part->pointer_mode = parse_enum(0,
3303 "AUTOGRAB", EVAS_OBJECT_POINTER_MODE_AUTOGRAB,
3304 "NOGRAB", EVAS_OBJECT_POINTER_MODE_NOGRAB,
3315 Enables precise point collision detection for the part, which is more
3316 resource intensive. Disabled by default.
3320 st_collections_group_parts_part_precise_is_inside(void)
3324 current_part->precise_is_inside = parse_bool(0);
3330 use_alternate_font_metrics
3334 Only affects text and textblock parts, when enabled Edje will use
3335 different size measurement functions. Disabled by default. (note from
3336 the author: I don't know what this is exactly useful for?)
3340 st_collections_group_parts_part_use_alternate_font_metrics(void)
3344 current_part->use_alternate_font_metrics = parse_bool(0);
3352 [another part's name]
3354 Only renders the area of part that coincides with another part's
3355 container. Overflowing content will not be displayed. Note that
3356 the part being clipped to can only be a rectangle part.
3360 st_collections_group_parts_part_clip_to_id(void)
3362 Edje_Part_Collection *pc;
3366 pc = eina_list_data_get(eina_list_last(edje_collections));
3370 name = parse_str(0);
3371 data_queue_part_lookup(pc, name, &(current_part->clip_to_id));
3381 [another group's name]
3383 Only available to GROUP or TEXTBLOCK parts. Swallows the specified
3384 group into the part's container if a GROUP. If TEXTBLOCK it is used
3385 for the group to be loaded and used for selection display UNDER the
3386 selected text. source2 is used for on top of the selected text, if
3387 source2 is specified.
3391 st_collections_group_parts_part_source(void)
3395 //FIXME: validate this somehow (need to decide on the format also)
3396 current_part->source = parse_str(0);
3397 data_queue_group_lookup(current_part->source, current_part);
3405 [another group's name]
3407 Only available to TEXTBLOCK parts. It is used for the group to be
3408 loaded and used for selection display OVER the selected text. source
3409 is used for under of the selected text, if source is specified.
3413 st_collections_group_parts_part_source2(void)
3417 //FIXME: validate this somehow (need to decide on the format also)
3418 current_part->source2 = parse_str(0);
3419 data_queue_group_lookup(current_part->source2, current_part);
3427 [another group's name]
3429 Only available to TEXTBLOCK parts. It is used for the group to be
3430 loaded and used for cursor display UNDER the cursor position. source4
3431 is used for over the cursor text, if source4 is specified.
3435 st_collections_group_parts_part_source3(void)
3439 //FIXME: validate this somehow (need to decide on the format also)
3440 current_part->source3 = parse_str(0);
3441 data_queue_group_lookup(current_part->source3, current_part);
3449 [another group's name]
3451 Only available to TEXTBLOCK parts. It is used for the group to be
3452 loaded and used for cursor display OVER the cursor position. source3
3453 is used for under the cursor text, if source4 is specified.
3457 st_collections_group_parts_part_source4(void)
3461 //FIXME: validate this somehow (need to decide on the format also)
3462 current_part->source4 = parse_str(0);
3463 data_queue_group_lookup(current_part->source4, current_part);
3471 [another group's name]
3473 Only available to TEXTBLOCK parts. It is used for the group to be
3474 loaded and used for anchors display UNDER the anchor position. source6
3475 is used for over the anchors text, if source6 is specified.
3479 st_collections_group_parts_part_source5(void)
3483 //FIXME: validate this somehow (need to decide on the format also)
3484 current_part->source5 = parse_str(0);
3485 data_queue_group_lookup(current_part->source5, current_part);
3493 [another group's name]
3495 Only available to TEXTBLOCK parts. It is used for the group to be
3496 loaded and used for anchor display OVER the anchor position. source5
3497 is used for under the anchor text, if source6 is specified.
3501 st_collections_group_parts_part_source6(void)
3505 //FIXME: validate this somehow (need to decide on the format also)
3506 current_part->source6 = parse_str(0);
3507 data_queue_group_lookup(current_part->source6, current_part);
3517 (optional) [SHADOW DIRECTION]
3519 Causes Edje to draw the selected effect among:
3526 @li OUTLINE_SOFT_SHADOW
3531 Shadow directions (default if not given is BOTTOM_RIGHT):
3543 st_collections_group_parts_part_effect(void)
3545 check_min_arg_count(1);
3547 current_part->effect = parse_enum(0,
3548 "NONE", EDJE_TEXT_EFFECT_NONE,
3549 "PLAIN", EDJE_TEXT_EFFECT_PLAIN,
3550 "OUTLINE", EDJE_TEXT_EFFECT_OUTLINE,
3551 "SOFT_OUTLINE", EDJE_TEXT_EFFECT_SOFT_OUTLINE,
3552 "SHADOW", EDJE_TEXT_EFFECT_SHADOW,
3553 "SOFT_SHADOW", EDJE_TEXT_EFFECT_SOFT_SHADOW,
3554 "OUTLINE_SHADOW", EDJE_TEXT_EFFECT_OUTLINE_SHADOW,
3555 "OUTLINE_SOFT_SHADOW", EDJE_TEXT_EFFECT_OUTLINE_SOFT_SHADOW,
3556 "FAR_SHADOW", EDJE_TEXT_EFFECT_FAR_SHADOW,
3557 "FAR_SOFT_SHADOW", EDJE_TEXT_EFFECT_FAR_SOFT_SHADOW,
3558 "GLOW", EDJE_TEXT_EFFECT_GLOW,
3560 if (get_arg_count() >= 2)
3562 unsigned char shadow;
3564 shadow = parse_enum(1,
3565 "BOTTOM_RIGHT", EDJE_TEXT_EFFECT_SHADOW_DIRECTION_BOTTOM_RIGHT,
3566 "BOTTOM", EDJE_TEXT_EFFECT_SHADOW_DIRECTION_BOTTOM,
3567 "BOTTOM_LEFT", EDJE_TEXT_EFFECT_SHADOW_DIRECTION_BOTTOM_LEFT,
3568 "LEFT", EDJE_TEXT_EFFECT_SHADOW_DIRECTION_LEFT,
3569 "TOP_LEFT", EDJE_TEXT_EFFECT_SHADOW_DIRECTION_TOP_LEFT,
3570 "TOP", EDJE_TEXT_EFFECT_SHADOW_DIRECTION_TOP,
3571 "TOP_RIGHT", EDJE_TEXT_EFFECT_SHADOW_DIRECTION_TOP_RIGHT,
3572 "RIGHT", EDJE_TEXT_EFFECT_SHADOW_DIRECTION_RIGHT,
3574 EDJE_TEXT_EFFECT_SHADOW_DIRECTION_SET(current_part->effect, shadow);
3585 Sets the edit mode for a textblock part to one of:
3590 It causes the part be editable if the edje object has the keyboard
3591 focus AND the part has the edje focus (or selectable always
3592 regardless of focus) and in the event of password mode, not
3593 selectable and all text chars replaced with *'s but editable and
3598 st_collections_group_parts_part_entry_mode(void)
3602 current_part->entry_mode = parse_enum(0,
3603 "NONE", EDJE_ENTRY_EDIT_MODE_NONE,
3604 "PLAIN", EDJE_ENTRY_EDIT_MODE_SELECTABLE,
3605 "EDITABLE", EDJE_ENTRY_EDIT_MODE_EDITABLE,
3606 "PASSWORD", EDJE_ENTRY_EDIT_MODE_PASSWORD,
3617 Sets the selection mode for a textblock part to one of:
3618 @li DEFAULT selection mode is what you would expect on any desktop. Press
3619 mouse, drag and release to end.
3620 @li EXPLICIT mode requires the application
3621 controlling the edje object has to explicitly begin and end selection
3622 modes, and the selection itself is dragable at both ends.
3623 @li BLOCK_HANDLE mode is the same as DEFAULT, it is for backward-compatibility.
3627 st_collections_group_parts_part_select_mode(void)
3631 current_part->select_mode = parse_enum(0,
3632 "DEFAULT", EDJE_ENTRY_SELECTION_MODE_DEFAULT,
3633 "EXPLICIT", EDJE_ENTRY_SELECTION_MODE_EXPLICIT,
3634 "BLOCK_HANDLE", EDJE_ENTRY_SELECTION_MODE_DEFAULT,
3645 Sets the cursor mode for a textblock part to one of:
3646 @li UNDER cursor mode means the cursor will draw below the character pointed
3647 at. That's the default.
3648 @li BEFORE cursor mode means the cursor is drawn as a vertical line before
3649 the current character, just like many other GUI toolkits handle it.
3653 st_collections_group_parts_part_cursor_mode(void)
3657 current_part->cursor_mode = parse_enum(0,
3658 "UNDER", EDJE_ENTRY_CURSOR_MODE_UNDER,
3659 "BEFORE", EDJE_ENTRY_CURSOR_MODE_BEFORE,
3670 It causes a textblock that is editable to allow multiple lines for
3675 st_collections_group_parts_part_multiline(void)
3679 current_part->multiline = parse_bool(0);
3689 Specifies whether the part will use accessibility feature (1),
3690 or not (0). It's set to 0 by default.
3694 st_collections_group_parts_part_access(void)
3698 current_part->access = parse_bool(0);
3709 confine: "another part";
3710 events: "another dragable part";
3717 When this block is used the resulting part can be dragged around the
3718 interface, do not confuse with external drag & drop. By default Edje
3719 (and most applications) will attempt to use the minimal size possible
3720 for a dragable part. If the min property is not set in the description
3721 the part will be (most likely) set to 0px width and 0px height, thus
3728 [enable/disable] [step] [count]
3730 Used to setup dragging events for the X axis. The first parameter is
3731 used to enable (1 or -1) and disable (0) dragging along the axis. When
3732 enabled, 1 will set the starting point at 0.0 and -1 at 1.0. The second
3733 parameter takes any integer and will limit movement to values
3734 divisible by it, causing the part to jump from position to position.
3735 The third parameter, (question from the author: What is count for?).
3739 st_collections_group_parts_part_dragable_x(void)
3743 current_part->dragable.x = parse_int_range(0, -1, 1);
3744 current_part->dragable.step_x = parse_int_range(1, 0, 0x7fffffff);
3745 current_part->dragable.count_x = parse_int_range(2, 0, 0x7fffffff);
3753 [enable/disable] [step] [count]
3755 Used to setup dragging events for the Y axis. The first parameter is
3756 used to enable (1 or -1) and disable (0) dragging along the axis. When
3757 enabled, 1 will set the starting point at 0.0 and -1 at 1.0. The second
3758 parameter takes any integer and will limit movement to values
3759 divisibles by it, causing the part to jump from position to position.
3760 The third parameter, (question from the author: What is count for?).
3764 st_collections_group_parts_part_dragable_y(void)
3768 current_part->dragable.y = parse_int_range(0, -1, 1);
3769 current_part->dragable.step_y = parse_int_range(1, 0, 0x7fffffff);
3770 current_part->dragable.count_y = parse_int_range(2, 0, 0x7fffffff);
3778 [another part's name]
3780 When set, limits the movement of the dragged part to another part's
3781 container. When you use confine don't forget to set a min size for the
3782 part, or the draggie will not show up.
3786 st_collections_group_parts_part_dragable_confine(void)
3788 Edje_Part_Collection *pc;
3792 pc = eina_list_data_get(eina_list_last(edje_collections));
3796 name = parse_str(0);
3797 data_queue_part_lookup(pc, name, &(current_part->dragable.confine_id));
3807 [another dragable part's name]
3809 It causes the part to forward the drag events to another part, thus
3810 ignoring them for itself.
3814 st_collections_group_parts_part_dragable_events(void)
3816 Edje_Part_Collection *pc;
3820 pc = eina_list_data_get(eina_list_last(edje_collections));
3824 name = parse_str(0);
3825 data_queue_part_lookup(pc, name, &(current_part->dragable.event_id));
3841 source: "some source";
3848 source: "some other source";
3858 On a part of type BOX, this block can be used to set other groups
3859 as elements of the box. These can be mixed with external objects set
3860 by the application through the edje_object_part_box_* API.
3863 static void ob_collections_group_parts_part_box_items_item(void)
3866 Edje_Pack_Element *item;
3867 Edje_Pack_Element_Parser *pitem;
3871 if ((ep->type != EDJE_PART_TYPE_BOX) && (ep->type != EDJE_PART_TYPE_TABLE))
3873 ERR("parse error %s:%i. box attributes in non-BOX or TABLE part.",
3879 ep->items = realloc(ep->items, sizeof (Edje_Pack_Element*) * ep->items_count);
3882 ERR("Not enough memory.");
3886 item = mem_alloc(SZ(Edje_Pack_Element_Parser));
3887 current_item = ep->items[ep->items_count - 1] = item;
3888 item->type = EDJE_PART_TYPE_GROUP;
3890 item->source = NULL;
3897 item->padding.l = 0;
3898 item->padding.r = 0;
3899 item->padding.t = 0;
3900 item->padding.b = 0;
3901 item->align.x = FROM_DOUBLE(0.5);
3902 item->align.y = FROM_DOUBLE(0.5);
3903 item->weight.x = FROM_DOUBLE(0.0);
3904 item->weight.y = FROM_DOUBLE(0.0);
3907 item->aspect.mode = EDJE_ASPECT_CONTROL_NONE;
3908 item->options = NULL;
3913 pitem = (Edje_Pack_Element_Parser *)item;
3914 pitem->can_override = EINA_FALSE;
3922 Only GROUP for now (defaults to it)
3924 Sets the type of the object this item will hold.
3927 static void st_collections_group_parts_part_box_items_item_type(void)
3935 if (strcmp(s, "GROUP"))
3937 ERR("parse error %s:%i. token %s not one of: GROUP.",
3938 file_in, line - 1, s);
3941 /* FIXME: handle the enum, once everything else is supported */
3942 current_item->type = EDJE_PART_TYPE_GROUP;
3951 [name for the object]
3953 Sets the name of the object via evas_object_name_set().
3956 static void st_collections_group_parts_part_box_items_item_name(void)
3959 Edje_Pack_Element *item;
3960 Edje_Pack_Element_Parser *pitem;
3965 item = ep->items[ep->items_count - 1];
3967 item->name = parse_str(0);
3972 for (i = 0; i < ep->items_count - 1; ++i)
3974 if (ep->items[i]->name && (!strcmp(ep->items[i]->name, item->name)))
3976 pitem = (Edje_Pack_Element_Parser *)ep->items[i];
3977 if (!pitem->can_override)
3979 ERR("parse error %s:%i. There is already a item of the name %s",
3980 file_in, line - 1, item->name);
3987 ep->items = realloc(ep->items, ep->items_count * sizeof (Edje_Pack_Element *));
3988 current_item = ep->items[i];
3989 pitem->can_override = EINA_FALSE;
4001 [another group's name]
4003 Sets the group this object will be made from.
4006 static void st_collections_group_parts_part_box_items_item_source(void)
4010 current_item->source = parse_str(0);
4011 data_queue_group_lookup(current_item->source, current_part);
4021 Sets the minimum size hints for this object.
4024 static void st_collections_group_parts_part_box_items_item_min(void)
4028 current_item->min.w = parse_int_range(0, 0, 0x7ffffff);
4029 current_item->min.h = parse_int_range(1, 0, 0x7ffffff);
4039 Sets the preferred size hints for this object.
4042 static void st_collections_group_parts_part_box_items_item_prefer(void)
4046 current_item->prefer.w = parse_int_range(0, 0, 0x7ffffff);
4047 current_item->prefer.h = parse_int_range(1, 0, 0x7ffffff);
4056 Sets the maximum size hints for this object.
4059 static void st_collections_group_parts_part_box_items_item_max(void)
4063 current_item->max.w = parse_int_range(0, 0, 0x7ffffff);
4064 current_item->max.h = parse_int_range(1, 0, 0x7ffffff);
4072 [left] [right] [top] [bottom]
4074 Sets the padding hints for this object.
4077 static void st_collections_group_parts_part_box_items_item_padding(void)
4081 current_item->padding.l = parse_int_range(0, 0, 0x7ffffff);
4082 current_item->padding.r = parse_int_range(1, 0, 0x7ffffff);
4083 current_item->padding.t = parse_int_range(2, 0, 0x7ffffff);
4084 current_item->padding.b = parse_int_range(3, 0, 0x7ffffff);
4094 Sets the alignment hints for this object.
4097 static void st_collections_group_parts_part_box_items_item_align(void)
4101 current_item->align.x = FROM_DOUBLE(parse_float_range(0, -1.0, 1.0));
4102 current_item->align.y = FROM_DOUBLE(parse_float_range(1, -1.0, 1.0));
4112 Sets the weight hints for this object.
4115 static void st_collections_group_parts_part_box_items_item_weight(void)
4119 current_item->weight.x = FROM_DOUBLE(parse_float_range(0, 0.0, 99999.99));
4120 current_item->weight.y = FROM_DOUBLE(parse_float_range(1, 0.0, 99999.99));
4130 Sets the aspect width and height hints for this object.
4133 static void st_collections_group_parts_part_box_items_item_aspect(void)
4137 current_item->aspect.w = parse_int_range(0, 0, 0x7fffffff);
4138 current_item->aspect.h = parse_int_range(1, 0, 0x7fffffff);
4146 NONE, NEITHER, HORIZONTAL, VERTICAL, BOTH
4148 Sets the aspect control hints for this object.
4151 static void st_collections_group_parts_part_box_items_item_aspect_mode(void)
4155 current_item->aspect.mode = parse_enum(0,
4156 "NONE", EDJE_ASPECT_CONTROL_NONE,
4157 "NEITHER", EDJE_ASPECT_CONTROL_NEITHER,
4158 "HORIZONTAL", EDJE_ASPECT_CONTROL_HORIZONTAL,
4159 "VERTICAL", EDJE_ASPECT_CONTROL_VERTICAL,
4160 "BOTH", EDJE_ASPECT_CONTROL_BOTH,
4171 Sets extra options for the object. Unused for now.
4174 static void st_collections_group_parts_part_box_items_item_options(void)
4178 current_item->options = parse_str(0);
4188 Sets the position this item will have in the table.
4189 This is required for parts of type TABLE.
4192 static void st_collections_group_parts_part_table_items_item_position(void)
4196 if (current_part->type != EDJE_PART_TYPE_TABLE)
4198 ERR("parse error %s:%i. table attributes in non-TABLE part.",
4203 current_item->col = parse_int_range(0, 0, 0xffff);
4204 current_item->row = parse_int_range(1, 0, 0xffff);
4214 Sets how many columns/rows this item will use.
4218 static void st_collections_group_parts_part_table_items_item_span(void)
4222 if (current_part->type != EDJE_PART_TYPE_TABLE)
4224 ERR("parse error %s:%i. table attributes in non-TABLE part.",
4229 current_item->colspan = parse_int_range(0, 1, 0xffff);
4230 current_item->rowspan = parse_int_range(1, 1, 0xffff);
4234 @edcsection{description,State description sub blocks}
4243 inherit: "another_description" INDEX;
4244 state: "description_name" INDEX;
4262 Every part can have one or more description blocks. Each description is
4263 used to define style and layout properties of a part in a given
4268 ob_collections_group_parts_part_description(void)
4270 Edje_Part_Collection *pc;
4272 Edje_Part_Description_Common *ed;
4274 pc = eina_list_data_get(eina_list_last(edje_collections));
4277 ed = _edje_part_description_alloc(ep->type, pc->part, ep->name);
4279 if (!ep->default_desc)
4281 current_desc = ep->default_desc = ed;
4285 ep->other.desc_count++;
4286 ep->other.desc = realloc(ep->other.desc,
4287 sizeof (Edje_Part_Description_Common*) * ep->other.desc_count);
4288 current_desc = ep->other.desc[ep->other.desc_count - 1] = ed;
4293 ed->align.x = FROM_DOUBLE(0.5);
4294 ed->align.y = FROM_DOUBLE(0.5);
4301 ed->rel1.relative_x = FROM_DOUBLE(0.0);
4302 ed->rel1.relative_y = FROM_DOUBLE(0.0);
4303 ed->rel1.offset_x = 0;
4304 ed->rel1.offset_y = 0;
4307 ed->rel2.relative_x = FROM_DOUBLE(1.0);
4308 ed->rel2.relative_y = FROM_DOUBLE(1.0);
4309 ed->rel2.offset_x = -1;
4310 ed->rel2.offset_y = -1;
4313 ed->color_class = NULL;
4322 ed->map.id_persp = -1;
4323 ed->map.id_light = -1;
4324 ed->map.rot.id_center = -1;
4325 ed->map.rot.x = FROM_DOUBLE(0.0);
4326 ed->map.rot.y = FROM_DOUBLE(0.0);
4327 ed->map.rot.z = FROM_DOUBLE(0.0);
4331 ed->map.backcull = 0;
4332 ed->map.persp_on = 0;
4333 ed->persp.zplane = 0;
4334 ed->persp.focal = 1000;
4335 ed->minmul.have = 1;
4336 ed->minmul.w = FROM_INT(1);
4337 ed->minmul.h = FROM_INT(1);
4345 [another description's name] [another description's index]
4347 When set, the description will inherit all the properties from the
4348 named description. The properties defined in this part will override
4349 the inherited properties, reducing the amount of necessary code for
4350 simple state changes. Note: inheritance in Edje is single level only.
4354 st_collections_group_parts_part_description_inherit(void)
4356 Edje_Part_Collection *pc;
4358 Edje_Part_Description_Common *ed, *parent = NULL;
4359 Edje_Part_Image_Id *iid;
4361 const char *state_name;
4362 double parent_val, state_val;
4364 pc = eina_list_data_get(eina_list_last(edje_collections));
4368 if (!ed->state.name)
4370 ERR("parse error %s:%i. inherit may only be used after state",
4375 parent = parent_desc;
4378 check_min_arg_count(1);
4380 /* inherit may not be used in the default description */
4381 if (!ep->other.desc_count)
4383 ERR("parse error %s:%i. "
4384 "inherit may not be used in the default description",
4389 /* find the description that we inherit from */
4390 parent_name = parse_str(0);
4391 if (get_arg_count() == 2)
4392 parent_val = parse_float_range(1, 0.0, 1.0);
4396 if (!strcmp (parent_name, "default") && parent_val == 0.0)
4397 parent = ep->default_desc;
4400 Edje_Part_Description_Common *d;
4401 double min_dst = 999.0;
4404 if (!strcmp(parent_name, "default"))
4406 parent = ep->default_desc;
4407 min_dst = ABS(ep->default_desc->state.value - parent_val);
4410 for (i = 0; i < ep->other.desc_count; ++i)
4412 d = ep->other.desc[i];
4414 if (!strcmp (d->state.name, parent_name))
4419 dst = ABS(d->state.value - parent_val);
4431 ERR("parse error %s:%i. "
4432 "cannot find referenced part %s state %s %lf",
4433 file_in, line - 1, ep->name, parent_name, parent_val);
4439 /* now do a full copy, only state info will be kept */
4440 state_name = ed->state.name;
4441 state_val = ed->state.value;
4445 ed->state.name = state_name;
4446 ed->state.value = state_val;
4448 data_queue_copied_part_lookup(pc, &parent->rel1.id_x, &ed->rel1.id_x);
4449 data_queue_copied_part_lookup(pc, &parent->rel1.id_y, &ed->rel1.id_y);
4450 data_queue_copied_part_lookup(pc, &parent->rel2.id_x, &ed->rel2.id_x);
4451 data_queue_copied_part_lookup(pc, &parent->rel2.id_y, &ed->rel2.id_y);
4453 data_queue_copied_part_lookup(pc, &parent->map.id_persp, &ed->map.id_persp);
4454 data_queue_copied_part_lookup(pc, &parent->map.id_light, &ed->map.id_light);
4455 data_queue_copied_part_lookup(pc, &parent->map.rot.id_center, &ed->map.rot.id_center);
4457 /* make sure all the allocated memory is getting copied, not just
4460 #define STRDUP(x) x ? strdup(x) : NULL
4462 ed->color_class = STRDUP(ed->color_class);
4465 case EDJE_PART_TYPE_SPACER:
4466 case EDJE_PART_TYPE_RECTANGLE:
4467 case EDJE_PART_TYPE_SWALLOW:
4468 case EDJE_PART_TYPE_GROUP:
4469 /* Nothing todo, this part only have a common description. */
4471 case EDJE_PART_TYPE_TEXT:
4472 case EDJE_PART_TYPE_TEXTBLOCK:
4474 Edje_Part_Description_Text *ted = (Edje_Part_Description_Text*) ed;
4475 Edje_Part_Description_Text *tparent = (Edje_Part_Description_Text*) parent;
4477 ted->text = tparent->text;
4479 ted->text.text.str = STRDUP(ted->text.text.str);
4480 ted->text.text_class = STRDUP(ted->text.text_class);
4481 ted->text.font.str = STRDUP(ted->text.font.str);
4483 data_queue_copied_part_lookup(pc, &(tparent->text.id_source), &(ted->text.id_source));
4484 data_queue_copied_part_lookup(pc, &(tparent->text.id_text_source), &(ted->text.id_text_source));
4488 case EDJE_PART_TYPE_IMAGE:
4490 Edje_Part_Description_Image *ied = (Edje_Part_Description_Image *) ed;
4491 Edje_Part_Description_Image *iparent = (Edje_Part_Description_Image *) parent;
4494 ied->image = iparent->image;
4496 data_queue_image_remove(&ied->image.id, &ied->image.set);
4497 data_queue_copied_image_lookup(&iparent->image.id, &ied->image.id, &ied->image.set);
4499 ied->image.tweens = calloc(iparent->image.tweens_count,
4500 sizeof (Edje_Part_Image_Id*));
4501 for (i = 0; i < iparent->image.tweens_count; i++)
4503 Edje_Part_Image_Id *iid_new;
4505 iid = iparent->image.tweens[i];
4507 iid_new = mem_alloc(SZ(Edje_Part_Image_Id));
4508 data_queue_image_remove(&ied->image.id, &ied->image.set);
4509 data_queue_copied_image_lookup(&(iid->id), &(iid_new->id), &(iid_new->set));
4510 ied->image.tweens[i] = iid_new;
4515 case EDJE_PART_TYPE_PROXY:
4517 Edje_Part_Description_Proxy *ped = (Edje_Part_Description_Proxy*) ed;
4518 Edje_Part_Description_Proxy *pparent = (Edje_Part_Description_Proxy*) parent;
4520 data_queue_copied_part_lookup(pc, &(pparent->proxy.id), &(ped->proxy.id));
4524 case EDJE_PART_TYPE_BOX:
4526 Edje_Part_Description_Box *bed = (Edje_Part_Description_Box *) ed;
4527 Edje_Part_Description_Box *bparent = (Edje_Part_Description_Box *) parent;
4529 bed->box = bparent->box;
4533 case EDJE_PART_TYPE_TABLE:
4535 Edje_Part_Description_Table *ted = (Edje_Part_Description_Table *) ed;
4536 Edje_Part_Description_Table *tparent = (Edje_Part_Description_Table *) parent;
4538 ted->table = tparent->table;
4542 case EDJE_PART_TYPE_EXTERNAL:
4544 Edje_Part_Description_External *eed = (Edje_Part_Description_External *) ed;
4545 Edje_Part_Description_External *eparent = (Edje_Part_Description_External *) parent;
4547 if (eparent->external_params)
4550 Edje_External_Param *param, *new_param;
4552 eed->external_params = NULL;
4553 EINA_LIST_FOREACH(eparent->external_params, l, param)
4555 new_param = mem_alloc(SZ(Edje_External_Param));
4556 *new_param = *param;
4557 eed->external_params = eina_list_append(eed->external_params, new_param);
4573 [another part's name]
4575 Causes the part to use another part content as the content of this part.
4576 Only work with PROXY part.
4580 st_collections_group_parts_part_description_source(void)
4582 Edje_Part_Collection *pc;
4583 Edje_Part_Description_Proxy *ed;
4588 pc = eina_list_data_get(eina_list_last(edje_collections));
4590 if (current_part->type != EDJE_PART_TYPE_PROXY)
4592 ERR("parse error %s:%i. source attributes in non-PROXY part.",
4597 ed = (Edje_Part_Description_Proxy*) current_desc;
4599 name = parse_str(0);
4601 data_queue_part_lookup(pc, name, &(ed->proxy.id));
4610 [a name for the description] [an index]
4612 Sets a name used to identify a description inside a given part.
4613 Multiple descriptions are used to declare different states of the same
4614 part, like "clicked" or "invisible". All states declarations are also
4615 coupled with an index number between 0.0 and 1.0. All parts must have
4616 at least one description named "default 0.0".
4620 st_collections_group_parts_part_description_state(void)
4623 Edje_Part_Description_Common *ed;
4626 check_min_arg_count(1);
4630 ed = ep->default_desc;
4631 if (ep->other.desc_count) ed = ep->other.desc[ep->other.desc_count - 1];
4634 if (!strcmp (s, "custom"))
4636 ERR("parse error %s:%i. invalid state name: '%s'.",
4637 file_in, line - 1, s);
4642 if (get_arg_count() == 1)
4643 ed->state.value = 0.0;
4645 ed->state.value = parse_float_range(1, 0.0, 1.0);
4647 if (ed != ep->default_desc)
4649 if ((ep->default_desc->state.name && !strcmp(s, ep->default_desc->state.name) && ed->state.value == ep->default_desc->state.value) ||
4650 (!ep->default_desc->state.name && !strcmp(s, "default") && ed->state.value == ep->default_desc->state.value))
4652 if (ep->type == EDJE_PART_TYPE_IMAGE)
4653 _edje_part_description_image_remove((Edje_Part_Description_Image*) ed);
4656 ep->other.desc_count--;
4657 ep->other.desc = realloc(ep->other.desc,
4658 sizeof (Edje_Part_Description_Common*) * ep->other.desc_count);
4659 current_desc = ep->default_desc;
4661 else if (ep->other.desc_count)
4664 for (i = 0; i < ep->other.desc_count - 1; ++i)
4666 if (!strcmp(s, ep->other.desc[i]->state.name) && ed->state.value == ep->other.desc[i]->state.value)
4668 if (ep->type == EDJE_PART_TYPE_IMAGE)
4669 _edje_part_description_image_remove((Edje_Part_Description_Image*) ed);
4672 ep->other.desc_count--;
4673 ep->other.desc = realloc(ep->other.desc,
4674 sizeof (Edje_Part_Description_Common*) * ep->other.desc_count);
4675 current_desc = ep->other.desc[i];
4690 Takes a boolean value specifying whether part is visible (1) or not
4691 (0). Non-visible parts do not emit signals. The default value is 1.
4695 st_collections_group_parts_part_description_visible(void)
4699 if (current_part->type == EDJE_PART_TYPE_SPACER)
4701 ERR("parse error %s:%i. SPACER part can't have a visibility defined",
4706 current_desc->visible = parse_bool(0);
4713 [NONE, WIDTH, HEIGHT or BOTH]
4715 Emit a signal when the part size change from zero or to a zero size
4716 ('limit,width,over', 'limit,width,zero'). By default no signal are
4722 st_collections_group_parts_part_description_limit(void)
4726 current_desc->limit = parse_enum(0,
4732 if (current_desc->limit)
4734 Edje_Part_Collection *pc;
4737 pc = eina_list_data_get(eina_list_last(edje_collections));
4738 count = pc->limits.parts_count++;
4739 pc->limits.parts = realloc(pc->limits.parts,
4740 pc->limits.parts_count * sizeof (Edje_Part_Limit));
4741 data_queue_part_lookup(pc, current_part->name,
4742 &(pc->limits.parts[count].part));
4753 When the displayed object's size is smaller than its container, this
4754 property moves it relatively along both axis inside its container. The
4755 default value is "0.5 0.5".
4759 st_collections_group_parts_part_description_align(void)
4763 current_desc->align.x = FROM_DOUBLE(parse_float_range(0, 0.0, 1.0));
4764 current_desc->align.y = FROM_DOUBLE(parse_float_range(1, 0.0, 1.0));
4772 [width, 0 or 1] [height, 0 or 1]
4774 This affects the minimum size calculation. See
4775 edje_object_size_min_calc() and edje_object_size_min_restricted_calc().
4776 This tells the min size calculation routine that this part does not
4777 change size in width or height (1 for it doesn't, 0 for it does), so
4778 the routine should not try and expand or contract the part.
4782 st_collections_group_parts_part_description_fixed(void)
4786 current_desc->fixed.w = parse_float_range(0, 0, 1);
4787 current_desc->fixed.h = parse_float_range(1, 0, 1);
4795 [width] [height] or SOURCE
4797 The minimum size of the state.
4799 When min is defined to SOURCE, it will look at the original
4800 image size and enforce it minimal size to match at least the
4801 original one. The part must be an IMAGE or a GROUP part.
4805 st_collections_group_parts_part_description_min(void)
4807 check_min_arg_count(1);
4810 current_desc->min.w = parse_float_range(0, 0, 0x7fffffff);
4811 current_desc->min.h = parse_float_range(1, 0, 0x7fffffff);
4816 if ((current_part->type != EDJE_PART_TYPE_IMAGE && current_part->type != EDJE_PART_TYPE_GROUP) ||
4817 !tmp || strcmp(tmp, "SOURCE") != 0)
4819 ERR("parse error %s:%i. "
4820 "Only IMAGE and GROUP part can have a min: SOURCE; defined",
4825 current_desc->min.limit = EINA_TRUE;
4834 [width multipler] [height multiplier]
4836 A multiplier FORCIBLY applied to whatever minimum size is only during
4837 minimum size calculation.
4842 st_collections_group_parts_part_description_minmul(void)
4846 current_desc->minmul.w = FROM_DOUBLE(parse_float_range(0, 0, 999999));
4847 current_desc->minmul.h = FROM_DOUBLE(parse_float_range(1, 0, 999999));
4855 [width] [height] or SOURCE
4857 The maximum size of the state. A size of -1.0 means that it will be ignored in one direction.
4859 When max is set to SOURCE, edje will enforce the part to be
4860 not more than the original image size. The part must be an
4865 st_collections_group_parts_part_description_max(void)
4867 check_min_arg_count(1);
4870 current_desc->max.w = parse_float_range(0, -1.0, 0x7fffffff);
4871 current_desc->max.h = parse_float_range(1, -1.0, 0x7fffffff);
4876 if (current_part->type != EDJE_PART_TYPE_IMAGE ||
4877 !tmp || strcmp(tmp, "SOURCE") != 0)
4879 ERR("parse error %s:%i. "
4880 "Only IMAGE part can have a max: SOURCE; defined",
4885 current_desc->max.limit = EINA_TRUE;
4896 Restricts resizing of each dimension to values divisibles by its value.
4897 This causes the part to jump from value to value while resizing. The
4898 default value is "0 0" disabling stepping.
4902 st_collections_group_parts_part_description_step(void)
4906 current_desc->step.x = parse_float_range(0, 0, 0x7fffffff);
4907 current_desc->step.y = parse_float_range(1, 0, 0x7fffffff);
4917 Normally width and height can be resized to any values independently.
4918 The aspect property forces the width to height ratio to be kept between
4919 the minimum and maximum set. For example, "1.0 1.0" will increase the
4920 width a pixel for every pixel added to height. The default value is
4921 "0.0 0.0" disabling aspect.
4925 st_collections_group_parts_part_description_aspect(void)
4929 current_desc->aspect.min = FROM_DOUBLE(parse_float_range(0, 0.0, 999999999.0));
4930 current_desc->aspect.max = FROM_DOUBLE(parse_float_range(1, 0.0, 999999999.0));
4940 Sets the scope of the "aspect" property to a given dimension. Available
4941 options are BOTH, VERTICAL, HORIZONTAL, SOURCE and NONE
4945 st_collections_group_parts_part_description_aspect_preference(void)
4949 current_desc->aspect.prefer = parse_enum(0,
4950 "NONE", EDJE_ASPECT_PREFER_NONE,
4951 "VERTICAL", EDJE_ASPECT_PREFER_VERTICAL,
4952 "HORIZONTAL", EDJE_ASPECT_PREFER_HORIZONTAL,
4953 "BOTH", EDJE_ASPECT_PREFER_BOTH,
4954 "SOURCE", EDJE_ASPECT_PREFER_SOURCE,
4965 The part will use the color values of the named color_class, these
4966 values can be overrided by the "color", "color2" and "color3"
4967 properties set below.
4971 st_collections_group_parts_part_description_color_class(void)
4975 if (current_part->type == EDJE_PART_TYPE_SPACER)
4977 ERR("parse error %s:%i. SPACER part can't have a color defined",
4982 current_desc->color_class = parse_str(0);
4990 [red] [green] [blue] [alpha]
4992 Sets the main color to the specified values (between 0 and 255).
4996 st_collections_group_parts_part_description_color(void)
5000 if (current_part->type == EDJE_PART_TYPE_SPACER)
5002 ERR("parse error %s:%i. SPACER part can't have a color defined",
5007 current_desc->color.r = parse_int_range(0, 0, 255);
5008 current_desc->color.g = parse_int_range(1, 0, 255);
5009 current_desc->color.b = parse_int_range(2, 0, 255);
5010 current_desc->color.a = parse_int_range(3, 0, 255);
5018 [red] [green] [blue] [alpha]
5020 Sets the text shadow color to the specified values (0 to 255).
5024 st_collections_group_parts_part_description_color2(void)
5028 if (current_part->type == EDJE_PART_TYPE_SPACER)
5030 ERR("parse error %s:%i. SPACER part can't have a color defined",
5035 current_desc->color2.r = parse_int_range(0, 0, 255);
5036 current_desc->color2.g = parse_int_range(1, 0, 255);
5037 current_desc->color2.b = parse_int_range(2, 0, 255);
5038 current_desc->color2.a = parse_int_range(3, 0, 255);
5046 [red] [green] [blue] [alpha]
5048 Sets the text outline color to the specified values (0 to 255).
5052 st_collections_group_parts_part_description_color3(void)
5054 Edje_Part_Collection *pc;
5055 Edje_Part_Description_Text *ed;
5059 pc = eina_list_data_get(eina_list_last(edje_collections));
5061 if (current_part->type != EDJE_PART_TYPE_TEXT
5062 && current_part->type != EDJE_PART_TYPE_TEXTBLOCK)
5064 ERR("Setting color3 in part %s from %s not of type TEXT or TEXTBLOCK.",
5065 current_part->name, pc->part);
5069 ed = (Edje_Part_Description_Text*)current_desc;
5071 ed->text.color3.r = parse_int_range(0, 0, 255);
5072 ed->text.color3.g = parse_int_range(1, 0, 255);
5073 ed->text.color3.b = parse_int_range(2, 0, 255);
5074 ed->text.color3.a = parse_int_range(3, 0, 255);
5096 The rel1 and rel2 blocks are used to define the position of each corner
5097 of the part's container. With rel1 being the left-up corner and rel2
5098 being the right-down corner.
5106 Moves a corner to a relative position inside the container of the
5107 relative "to" part. Values from 0.0 (0%, beginning) to 1.0 (100%, end)
5112 st_collections_group_parts_part_description_rel1_relative(void)
5116 current_desc->rel1.relative_x = FROM_DOUBLE(parse_float(0));
5117 current_desc->rel1.relative_y = FROM_DOUBLE(parse_float(1));
5127 Affects the corner position a fixed number of pixels along each axis.
5131 st_collections_group_parts_part_description_rel1_offset(void)
5135 current_desc->rel1.offset_x = parse_int(0);
5136 current_desc->rel1.offset_y = parse_int(1);
5144 [another part's name]
5146 Causes a corner to be positioned relatively to another part's
5147 container. Setting to "" will un-set this value for inherited
5152 st_collections_group_parts_part_description_rel1_to(void)
5154 Edje_Part_Collection *pc;
5158 pc = eina_list_data_get(eina_list_last(edje_collections));
5163 name = parse_str(0);
5164 data_queue_part_lookup(pc, name, &(current_desc->rel1.id_x));
5165 data_queue_part_lookup(pc, name, &(current_desc->rel1.id_y));
5175 [another part's name]
5177 Causes a corner to be positioned relatively to the X axis of another
5178 part's container. Simply put affects the first parameter of "relative".
5179 Setting to "" will un-set this value for inherited parts.
5183 st_collections_group_parts_part_description_rel1_to_x(void)
5185 Edje_Part_Collection *pc;
5189 pc = eina_list_data_get(eina_list_last(edje_collections));
5194 name = parse_str(0);
5195 data_queue_part_lookup(pc, name, &(current_desc->rel1.id_x));
5205 [another part's name]
5207 Causes a corner to be positioned relatively to the Y axis of another
5208 part's container. Simply put, affects the second parameter of
5209 "relative". Setting to "" will un-set this value for inherited parts.
5213 st_collections_group_parts_part_description_rel1_to_y(void)
5215 Edje_Part_Collection *pc;
5219 pc = eina_list_data_get(eina_list_last(edje_collections));
5224 name = parse_str(0);
5225 data_queue_part_lookup(pc, name, &(current_desc->rel1.id_y));
5231 st_collections_group_parts_part_description_rel2_relative(void)
5235 current_desc->rel2.relative_x = FROM_DOUBLE(parse_float(0));
5236 current_desc->rel2.relative_y = FROM_DOUBLE(parse_float(1));
5240 st_collections_group_parts_part_description_rel2_offset(void)
5244 current_desc->rel2.offset_x = parse_int(0);
5245 current_desc->rel2.offset_y = parse_int(1);
5249 st_collections_group_parts_part_description_rel2_to(void)
5251 Edje_Part_Collection *pc;
5255 pc = eina_list_data_get(eina_list_last(edje_collections));
5260 name = parse_str(0);
5261 data_queue_part_lookup(pc, name, &(current_desc->rel2.id_x));
5262 data_queue_part_lookup(pc, name, &(current_desc->rel2.id_y));
5268 st_collections_group_parts_part_description_rel2_to_x(void)
5270 Edje_Part_Collection *pc;
5274 pc = eina_list_data_get(eina_list_last(edje_collections));
5279 name = parse_str(0);
5280 data_queue_part_lookup(pc, name, &(current_desc->rel2.id_x));
5286 st_collections_group_parts_part_description_rel2_to_y(void)
5288 Edje_Part_Collection *pc;
5292 pc = eina_list_data_get(eina_list_last(edje_collections));
5297 name = parse_str(0);
5298 data_queue_part_lookup(pc, name, &(current_desc->rel2.id_y));
5304 @edcsection{description_image,Image state description sub blocks}
5315 normal: "filename.ext";
5316 tween: "filename2.ext";
5318 tween: "filenameN.ext";
5319 border: left right top bottom;
5320 middle: 0/1/NONE/DEFAULT/SOLID;
5332 Name of image to be used as previously declared in the images block.
5333 In an animation, this is the first and last image displayed. It's
5334 required in any image part
5338 st_collections_group_parts_part_description_image_normal(void)
5340 Edje_Part_Description_Image *ed;
5344 if (current_part->type != EDJE_PART_TYPE_IMAGE)
5346 ERR("parse error %s:%i. "
5347 "image attributes in non-IMAGE part.",
5352 ed = (Edje_Part_Description_Image*) current_desc;
5357 name = parse_str(0);
5358 data_queue_image_remove(&(ed->image.id), &(ed->image.set));
5359 data_queue_image_lookup(name, &(ed->image.id), &(ed->image.set));
5371 Name of an image to be used in an animation loop, an image block can
5372 have none, one or multiple tween declarations. Images are displayed in
5373 the order they are listed, during the transition to the state they are
5374 declared in; the "normal" image is the final state.
5378 st_collections_group_parts_part_description_image_tween(void)
5380 Edje_Part_Description_Image *ed;
5384 if (current_part->type != EDJE_PART_TYPE_IMAGE)
5386 ERR("parse error %s:%i. image attributes in non-IMAGE part.",
5391 ed = (Edje_Part_Description_Image*) current_desc;
5395 Edje_Part_Image_Id *iid;
5397 iid = mem_alloc(SZ(Edje_Part_Image_Id));
5398 ed->image.tweens_count++;
5399 ed->image.tweens = realloc(ed->image.tweens,
5400 sizeof (Edje_Part_Image_Id*) * ed->image.tweens_count);
5401 ed->image.tweens[ed->image.tweens_count - 1] = iid;
5402 name = parse_str(0);
5403 data_queue_image_remove(&(iid->id), &(iid->set));
5404 data_queue_image_lookup(name, &(iid->id), &(iid->set));
5414 [left] [right] [top] [bottom]
5416 If set, the area (in pixels) of each side of the image will be
5417 displayed as a fixed size border, from the side -> inwards, preventing
5418 the corners from being changed on a resize.
5422 st_collections_group_parts_part_description_image_border(void)
5424 Edje_Part_Description_Image *ed;
5428 if (current_part->type != EDJE_PART_TYPE_IMAGE)
5430 ERR("parse error %s:%i. image attributes in non-IMAGE part.",
5435 ed = (Edje_Part_Description_Image*) current_desc;
5437 ed->image.border.l = parse_int_range(0, 0, 0x7fffffff);
5438 ed->image.border.r = parse_int_range(1, 0, 0x7fffffff);
5439 ed->image.border.t = parse_int_range(2, 0, 0x7fffffff);
5440 ed->image.border.b = parse_int_range(3, 0, 0x7fffffff);
5448 0, 1, NONE, DEFAULT, SOLID
5450 If border is set, this value tells Edje if the rest of the
5451 image (not covered by the defined border) will be displayed or not
5452 or be assumed to be solid (without alpha). The default is 1/DEFAULT.
5456 st_collections_group_parts_part_description_image_middle(void)
5458 Edje_Part_Description_Image *ed;
5462 if (current_part->type != EDJE_PART_TYPE_IMAGE)
5464 ERR("parse error %s:%i. image attributes in non-IMAGE part.",
5469 ed = (Edje_Part_Description_Image*) current_desc;
5471 ed->image.border.no_fill = parse_enum(0,
5485 0.0 or bigger (0.0 or 1.0 to turn it off)
5487 If border scaling is enabled then normally the OUTPUT border sizes
5488 (e.g. if 3 pixels on the left edge are set as a border, then normally
5489 at scale 1.0, those 3 columns will always be the exact 3 columns of
5490 output, or at scale 2.0 they will be 6 columns, or 0.33 they will merge
5491 into a single column). This property multiplies the input scale
5492 factor by this multiplier, allowing the creation of "supersampled"
5493 borders to make much higher resolution outputs possible by always using
5494 the highest resolution artwork and then runtime scaling it down.
5498 st_collections_group_parts_part_description_image_border_scale_by(void)
5500 Edje_Part_Description_Image *ed;
5504 if (current_part->type != EDJE_PART_TYPE_IMAGE)
5506 ERR("parse error %s:%i. image attributes in non-IMAGE part.",
5511 ed = (Edje_Part_Description_Image*) current_desc;
5513 ed->image.border.scale_by = FROM_DOUBLE(parse_float_range(0, 0.0, 999999999.0));
5523 If border is set, this value tells Edje if the border should be scaled
5524 by the object/global edje scale factors
5528 st_collections_group_parts_part_description_image_border_scale(void)
5530 Edje_Part_Description_Image *ed;
5534 if (current_part->type != EDJE_PART_TYPE_IMAGE)
5536 ERR("parse error %s:%i. image attributes in non-IMAGE part.",
5541 ed = (Edje_Part_Description_Image*) current_desc;
5543 ed->image.border.scale = parse_enum(0,
5554 0, NONE, DYNAMIC, STATIC
5556 Sets the evas image scale hint letting the engine more effectively save
5557 cached copies of the scaled image if it makes sense
5561 st_collections_group_parts_part_description_image_scale_hint(void)
5563 Edje_Part_Description_Image *ed;
5567 if (current_part->type != EDJE_PART_TYPE_IMAGE)
5569 ERR("parse error %s:%i. image attributes in non-IMAGE part.",
5574 ed = (Edje_Part_Description_Image*) current_desc;
5576 ed->image.scale_hint = parse_enum(0,
5577 "NONE", EVAS_IMAGE_SCALE_HINT_NONE,
5578 "DYNAMIC", EVAS_IMAGE_SCALE_HINT_DYNAMIC,
5579 "STATIC", EVAS_IMAGE_SCALE_HINT_STATIC,
5580 "0", EVAS_IMAGE_SCALE_HINT_NONE,
5594 relative: X-axis Y-axis;
5595 offset: X-axis Y-axis;
5598 relative: width height;
5599 offset: width height;
5605 The fill method is an optional block that defines the way an IMAGE part
5606 is going to be displayed inside its container.
5607 It can be used for tiling (repeating the image) or displaying only
5608 part of an image. See @ref evas_object_image_fill_set() documentation
5617 The smooth property takes a boolean value to decide if the image will
5618 be smoothed on scaling (1) or not (0). The default value is 1.
5622 st_collections_group_parts_part_description_fill_smooth(void)
5624 Edje_Part_Description_Spec_Fill *fill;
5628 switch (current_part->type)
5630 case EDJE_PART_TYPE_IMAGE:
5632 Edje_Part_Description_Image *ed;
5634 ed = (Edje_Part_Description_Image*) current_desc;
5636 fill = &ed->image.fill;
5639 case EDJE_PART_TYPE_PROXY:
5641 Edje_Part_Description_Proxy *ed;
5643 ed = (Edje_Part_Description_Proxy*) current_desc;
5645 fill = &ed->proxy.fill;
5650 ERR("parse error %s:%i. "
5651 "image and proxy attributes in non-IMAGE, non-PROXY `%s` part (%i).",
5652 file_in, line - 1, current_part->name, current_part->type);
5657 fill->smooth = parse_bool(0);
5672 st_collections_group_parts_part_description_fill_spread(void)
5675 Edje_Part_Collection *pc;
5677 Edje_Part_Description_Image *ed;
5682 /* XXX this will need to include IMAGES when spread support is added to evas images */
5684 ERR("parse error %s:%i. fill.spread not supported yet.",
5690 pc = eina_list_data_get(eina_list_last(edje_collections));
5692 ep = pc->parts[pc->parts_count - 1];
5694 if (ep->type != EDJE_PART_TYPE_IMAGE)
5696 ERR("parse error %s:%i. image attributes in non-IMAGE part.",
5701 ed = (Edje_Part_Description_Image*) ep->default_desc;
5702 if (ep->other.desc_count) ed = (Edje_Part_Description_Image*) ep->other.desc[ep->other.desc_count - 1];
5704 ed->image.fill.spread = parse_int_range(0, 0, 1);
5720 st_collections_group_parts_part_description_fill_type(void)
5722 Edje_Part_Description_Spec_Fill *fill;
5726 switch (current_part->type)
5728 case EDJE_PART_TYPE_IMAGE:
5730 Edje_Part_Description_Image *ed;
5732 ed = (Edje_Part_Description_Image*) current_desc;
5734 fill = &ed->image.fill;
5737 case EDJE_PART_TYPE_PROXY:
5739 Edje_Part_Description_Proxy *ed;
5741 ed = (Edje_Part_Description_Proxy*) current_desc;
5743 fill = &ed->proxy.fill;
5748 ERR("parse error %s:%i. "
5749 "image and proxy attributes in non-IMAGE, non-PROXY part.",
5755 fill->type = parse_enum(0,
5756 "SCALE", EDJE_FILL_TYPE_SCALE,
5757 "TILE", EDJE_FILL_TYPE_TILE,
5779 The origin block is used to place the starting point, inside the
5780 displayed element, that will be used to render the tile. By default,
5781 the origin is set at the element's left-up corner.
5789 Sets the starting point relatively to displayed element's content.
5793 st_collections_group_parts_part_description_fill_origin_relative(void)
5795 Edje_Part_Description_Spec_Fill *fill;
5799 switch (current_part->type)
5801 case EDJE_PART_TYPE_IMAGE:
5803 Edje_Part_Description_Image *ed;
5805 ed = (Edje_Part_Description_Image*) current_desc;
5807 fill = &ed->image.fill;
5810 case EDJE_PART_TYPE_PROXY:
5812 Edje_Part_Description_Proxy *ed;
5814 ed = (Edje_Part_Description_Proxy*) current_desc;
5816 fill = &ed->proxy.fill;
5821 ERR("parse error %s:%i. "
5822 "image and proxy attributes in non-IMAGE, non-PROXY part.",
5828 fill->pos_rel_x = FROM_DOUBLE(parse_float_range(0, -999999999.0, 999999999.0));
5829 fill->pos_rel_y = FROM_DOUBLE(parse_float_range(1, -999999999.0, 999999999.0));
5839 Affects the starting point a fixed number of pixels along each axis.
5843 st_collections_group_parts_part_description_fill_origin_offset(void)
5845 Edje_Part_Description_Spec_Fill *fill;
5849 switch (current_part->type)
5851 case EDJE_PART_TYPE_IMAGE:
5853 Edje_Part_Description_Image *ed;
5855 ed = (Edje_Part_Description_Image*) current_desc;
5857 fill = &ed->image.fill;
5860 case EDJE_PART_TYPE_PROXY:
5862 Edje_Part_Description_Proxy *ed;
5864 ed = (Edje_Part_Description_Proxy*) current_desc;
5866 fill = &ed->proxy.fill;
5871 ERR("parse error %s:%i. "
5872 "image and proxy attributes in non-IMAGE, non-PROXY part.",
5878 fill->pos_abs_x = parse_int(0);
5879 fill->pos_abs_y = parse_int(1);
5900 The size block defines the tile size of the content that will be
5909 Takes a pair of decimal values that represent the percentual value
5910 of the original size of the element. For example, "0.5 0.5" represents
5911 half the size, while "2.0 2.0" represents the double. The default
5916 st_collections_group_parts_part_description_fill_size_relative(void)
5918 Edje_Part_Description_Spec_Fill *fill;
5922 switch (current_part->type)
5924 case EDJE_PART_TYPE_IMAGE:
5926 Edje_Part_Description_Image *ed;
5928 ed = (Edje_Part_Description_Image*) current_desc;
5930 fill = &ed->image.fill;
5933 case EDJE_PART_TYPE_PROXY:
5935 Edje_Part_Description_Proxy *ed;
5937 ed = (Edje_Part_Description_Proxy*) current_desc;
5939 fill = &ed->proxy.fill;
5944 ERR("parse error %s:%i. "
5945 "image and proxy attributes in non-IMAGE, non-PROXY part.",
5951 fill->rel_x = FROM_DOUBLE(parse_float_range(0, 0.0, 999999999.0));
5952 fill->rel_y = FROM_DOUBLE(parse_float_range(1, 0.0, 999999999.0));
5962 Affects the size of the tile a fixed number of pixels along each axis.
5966 st_collections_group_parts_part_description_fill_size_offset(void)
5968 Edje_Part_Description_Spec_Fill *fill;
5972 switch (current_part->type)
5974 case EDJE_PART_TYPE_IMAGE:
5976 Edje_Part_Description_Image *ed;
5978 ed = (Edje_Part_Description_Image*) current_desc;
5980 fill = &ed->image.fill;
5983 case EDJE_PART_TYPE_PROXY:
5985 Edje_Part_Description_Proxy *ed;
5987 ed = (Edje_Part_Description_Proxy*) current_desc;
5989 fill = &ed->proxy.fill;
5994 ERR("parse error %s:%i. "
5995 "image and proxy attributes in non-IMAGE, non-PROXY part.",
6001 fill->abs_x = parse_int(0);
6002 fill->abs_y = parse_int(1);
6007 @edcsection{description_text,Text state description sub blocks}
6020 text: "some string of text to display";
6023 text_class: "class_name";
6024 fit: horizontal vertical;
6025 min: horizontal vertical;
6026 max: horizontal vertical;
6027 align: X-axis Y-axis;
6028 source: "part_name";
6029 text_source: "text_part_name";
6042 [a string of text, or nothing]
6044 Sets the default content of a text part, normally the application is
6045 the one changing its value.
6049 st_collections_group_parts_part_description_text_text(void)
6051 Edje_Part_Description_Text *ed;
6055 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6056 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6058 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6063 ed = (Edje_Part_Description_Text*) current_desc;
6069 if (!is_param(i)) break;
6074 str = realloc(str, strlen(str) + strlen(s) + 1);
6079 ed->text.text.str = str;
6090 Similar to color_class, this is the name used by the application
6091 to alter the font family and size at runtime.
6095 st_collections_group_parts_part_description_text_text_class(void)
6097 Edje_Part_Description_Text *ed;
6101 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6102 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6104 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6109 ed = (Edje_Part_Description_Text*) current_desc;
6111 ed->text.text_class = parse_str(0);
6122 This sets the font family to one of the aliases set up in the "fonts"
6123 block. Can be overrided by the application.
6127 st_collections_group_parts_part_description_text_font(void)
6129 Edje_Part_Description_Text *ed;
6133 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6134 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6136 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6141 ed = (Edje_Part_Description_Text*) current_desc;
6143 ed->text.font.str = parse_str(0);
6154 Causes the part to use the default style and tags defined in the
6155 "style" block with the specified name.
6159 st_collections_group_parts_part_description_text_style(void)
6161 Edje_Part_Description_Text *ed;
6165 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6166 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6168 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6173 ed = (Edje_Part_Description_Text*) current_desc;
6175 ed->text.style.str = parse_str(0);
6184 [the replacement character string]
6186 If this is a textblock and is in PASSWORD mode this string is used
6187 to replace every character to hide the details of the entry. Normally
6188 you would use a "*", but you can use anything you like.
6192 st_collections_group_parts_part_description_text_repch(void)
6194 Edje_Part_Description_Text *ed;
6198 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6199 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6201 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6206 ed = (Edje_Part_Description_Text*) current_desc;
6208 ed->text.repch.str = parse_str(0);
6217 [font size in points (pt)]
6219 Sets the default font size for the text part. Can be overrided by the
6224 st_collections_group_parts_part_description_text_size(void)
6226 Edje_Part_Description_Text *ed;
6230 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6231 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6233 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6238 ed = (Edje_Part_Description_Text*)current_desc;
6240 ed->text.size = parse_int_range(0, 0, 255);
6249 [font min size in points (pt)] [font max size in points (pt)]
6251 Sets the allowed font size for the text part. Setting min and max to 0
6252 means we won't restrict the sizing (default).
6257 st_collections_group_parts_part_description_text_size_range(void)
6259 Edje_Part_Description_Text *ed;
6263 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6264 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6266 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6271 ed = (Edje_Part_Description_Text*) current_desc;
6273 ed->text.size_range_min = parse_int_range(0, 0, 255);
6274 ed->text.size_range_max = parse_int_range(1, 0, 255);
6275 if (ed->text.size_range_min > ed->text.size_range_max)
6277 ERR("parse error %s:%i. min size is bigger than max size.",
6289 [horizontal] [vertical]
6291 When any of the parameters is set to 1 edje will resize the text for it
6292 to fit in it's container. Both are disabled by default.
6296 st_collections_group_parts_part_description_text_fit(void)
6298 Edje_Part_Description_Text *ed;
6302 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6303 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6305 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6310 ed = (Edje_Part_Description_Text*) current_desc;
6312 ed->text.fit_x = parse_bool(0);
6313 ed->text.fit_y = parse_bool(1);
6322 [horizontal] [vertical]
6324 When any of the parameters is enabled (1) it forces the minimum size of
6325 the container to be equal to the minimum size of the text. The default
6330 st_collections_group_parts_part_description_text_min(void)
6332 Edje_Part_Description_Text *ed;
6336 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6337 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6339 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6344 ed = (Edje_Part_Description_Text*)current_desc;
6346 ed->text.min_x = parse_bool(0);
6347 ed->text.min_y = parse_bool(1);
6356 [horizontal] [vertical]
6358 When any of the parameters is enabled (1) it forces the maximum size of
6359 the container to be equal to the maximum size of the text. The default
6364 st_collections_group_parts_part_description_text_max(void)
6366 Edje_Part_Description_Text *ed;
6370 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6371 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6373 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6378 ed = (Edje_Part_Description_Text*) current_desc;
6380 ed->text.max_x = parse_bool(0);
6381 ed->text.max_y = parse_bool(1);
6390 [horizontal] [vertical]
6392 Change the position of the point of balance inside the container. The
6393 default value is 0.5 0.5.
6397 st_collections_group_parts_part_description_text_align(void)
6399 Edje_Part_Description_Text *ed;
6403 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6404 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6406 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6411 ed = (Edje_Part_Description_Text*) current_desc;
6413 ed->text.align.x = FROM_DOUBLE(parse_float_range(0, -1.0, 1.0));
6414 ed->text.align.y = FROM_DOUBLE(parse_float_range(1, 0.0, 1.0));
6423 [another TEXT part's name]
6425 Causes the part to use the text properties (like font and size) of
6426 another part and update them as they change.
6430 st_collections_group_parts_part_description_text_source(void)
6432 Edje_Part_Collection *pc;
6433 Edje_Part_Description_Text *ed;
6437 pc = eina_list_data_get(eina_list_last(edje_collections));
6439 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6440 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6442 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6447 ed = (Edje_Part_Description_Text*) current_desc;
6452 name = parse_str(0);
6453 data_queue_part_lookup(pc, name, &(ed->text.id_source));
6464 [another TEXT part's name]
6466 Causes the part to display the text content of another part and update
6467 them as they change.
6471 st_collections_group_parts_part_description_text_text_source(void)
6473 Edje_Part_Collection *pc;
6474 Edje_Part_Description_Text *ed;
6478 pc = eina_list_data_get(eina_list_last(edje_collections));
6480 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6481 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6483 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6488 ed = (Edje_Part_Description_Text*) current_desc;
6493 name = parse_str(0);
6494 data_queue_part_lookup(pc, name, &(ed->text.id_text_source));
6507 Used to balance the text in a relative point from 0.0 to 1.0, this
6508 point is the last section of the string to be cut out in case of a
6509 resize that is smaller than the text itself. The default value is 0.0.
6513 st_collections_group_parts_part_description_text_elipsis(void)
6515 Edje_Part_Description_Text *ed;
6519 if ((current_part->type != EDJE_PART_TYPE_TEXT) &&
6520 (current_part->type != EDJE_PART_TYPE_TEXTBLOCK))
6522 ERR("parse error %s:%i. text attributes in non-TEXT part.",
6527 ed = (Edje_Part_Description_Text*) current_desc;
6529 ed->text.elipsis = parse_float_range(0, 0.0, 1.0);
6534 @edcsection{description_box,Box state description sub blocks}
6556 A box block can contain other objects and display them in different
6557 layouts, any of the predefined set, or a custom one, set by the
6564 [primary layout] [fallback layout]
6566 Sets the layout for the box:
6567 @li horizontal (default)
6569 @li horizontal_homogeneous
6570 @li vertical_homogeneous
6571 @li horizontal_max (homogeneous to the max sized child)
6576 @li some_other_custom_layout_set_by_the_application
6577 You could set a custom layout as fallback, it makes very
6578 very little sense though, and if that one fails, it will
6579 default to horizontal.
6585 [horizontal] [vertical]
6587 Change the position of the point of balance inside the container. The
6588 default value is 0.5 0.5.
6594 [horizontal] [vertical]
6596 Sets the space between cells in pixels. Defaults to 0 0.
6602 [horizontal] [vertical]
6604 When any of the parameters is enabled (1) it forces the minimum size of
6605 the box to be equal to the minimum size of the items. The default
6609 static void st_collections_group_parts_part_description_box_layout(void)
6611 Edje_Part_Description_Box *ed;
6613 check_min_arg_count(1);
6615 if (current_part->type != EDJE_PART_TYPE_BOX)
6617 ERR("parse error %s:%i. box attributes in non-BOX part.",
6622 ed = (Edje_Part_Description_Box*) current_desc;
6624 ed->box.layout = parse_str(0);
6626 ed->box.alt_layout = parse_str(1);
6629 static void st_collections_group_parts_part_description_box_align(void)
6631 Edje_Part_Description_Box *ed;
6635 if (current_part->type != EDJE_PART_TYPE_BOX)
6637 ERR("parse error %s:%i. box attributes in non-BOX part.",
6642 ed = (Edje_Part_Description_Box*) current_desc;
6644 ed->box.align.x = FROM_DOUBLE(parse_float_range(0, -1.0, 1.0));
6645 ed->box.align.y = FROM_DOUBLE(parse_float_range(1, -1.0, 1.0));
6648 static void st_collections_group_parts_part_description_box_padding(void)
6650 Edje_Part_Description_Box *ed;
6654 if (current_part->type != EDJE_PART_TYPE_BOX)
6656 ERR("parse error %s:%i. box attributes in non-BOX part.",
6661 ed = (Edje_Part_Description_Box*) current_desc;
6663 ed->box.padding.x = parse_int_range(0, 0, 0x7fffffff);
6664 ed->box.padding.y = parse_int_range(1, 0, 0x7fffffff);
6668 st_collections_group_parts_part_description_box_min(void)
6670 Edje_Part_Description_Box *ed;
6674 if (current_part->type != EDJE_PART_TYPE_BOX)
6676 ERR("parse error %s:%i. box attributes in non-BOX part.",
6681 ed = (Edje_Part_Description_Box*) current_desc;
6683 ed->box.min.h = parse_bool(0);
6684 ed->box.min.v = parse_bool(1);
6689 @edcsection{description_table,Table state description sub blocks}
6711 A table block can contain other objects packed in multiple columns
6712 and rows, and each item can span across more than one column and/or
6721 Sets the homogeneous mode for the table:
6730 [horizontal] [vertical]
6732 Change the position of the point of balance inside the container. The
6733 default value is 0.5 0.5.
6739 [horizontal] [vertical]
6741 Sets the space between cells in pixels. Defaults to 0 0.
6747 [horizontal] [vertical]
6749 When any of the parameters is enabled (1) it forces the minimum size of
6750 the table to be equal to the minimum size of the items. The default
6754 static void st_collections_group_parts_part_description_table_homogeneous(void)
6756 Edje_Part_Description_Table *ed;
6758 check_min_arg_count(1);
6760 if (current_part->type != EDJE_PART_TYPE_TABLE)
6762 ERR("parse error %s:%i. table attributes in non-TABLE part.",
6767 ed = (Edje_Part_Description_Table*) current_desc;
6769 ed->table.homogeneous = parse_enum(0,
6770 "NONE", EDJE_OBJECT_TABLE_HOMOGENEOUS_NONE,
6771 "TABLE", EDJE_OBJECT_TABLE_HOMOGENEOUS_TABLE,
6772 "ITEM", EDJE_OBJECT_TABLE_HOMOGENEOUS_ITEM,
6776 static void st_collections_group_parts_part_description_table_align(void)
6778 Edje_Part_Description_Table *ed;
6782 if (current_part->type != EDJE_PART_TYPE_TABLE)
6784 ERR("parse error %s:%i. table attributes in non-TABLE part.",
6789 ed = (Edje_Part_Description_Table*) current_desc;
6791 ed->table.align.x = FROM_DOUBLE(parse_float_range(0, -1.0, 1.0));
6792 ed->table.align.y = FROM_DOUBLE(parse_float_range(1, -1.0, 1.0));
6795 static void st_collections_group_parts_part_description_table_padding(void)
6797 Edje_Part_Description_Table *ed;
6801 if (current_part->type != EDJE_PART_TYPE_TABLE)
6803 ERR("parse error %s:%i. table attributes in non-TABLE part.",
6808 ed = (Edje_Part_Description_Table*) current_desc;
6810 ed->table.padding.x = parse_int_range(0, 0, 0x7fffffff);
6811 ed->table.padding.y = parse_int_range(1, 0, 0x7fffffff);
6815 st_collections_group_parts_part_description_table_min(void)
6817 Edje_Part_Description_Table *ed;
6821 if (current_part->type != EDJE_PART_TYPE_TABLE)
6823 ERR("parse error %s:%i. box attributes in non-TABLE part.",
6828 ed = (Edje_Part_Description_Table*) current_desc;
6830 ed->table.min.h = parse_bool(0);
6831 ed->table.min.v = parse_bool(1);
6835 @edcsection{description_map,Map state description sub blocks}
6846 perspective: "name";
6867 [another part's name]
6869 This sets the part that is used as the "perspective point" for giving
6870 a part a "3d look". The perspective point should have a perspective
6871 section that provides zplane and focal properties. The center of this
6872 part will be used as the focal point, so size, color and visibility
6873 etc. are not relevant just center point, zplane and focal are used.
6874 This also implicitly enables perspective transforms (see the on
6875 parameter for the map section).
6879 st_collections_group_parts_part_description_map_perspective(void)
6881 Edje_Part_Collection *pc;
6885 pc = eina_list_data_get(eina_list_last(edje_collections));
6890 name = parse_str(0);
6891 data_queue_part_lookup(pc, name, &(current_desc->map.id_persp));
6895 current_desc->map.persp_on = 1;
6903 [another part's name]
6905 This sets the part that is used as the "light" for calculating the
6906 brightness (based on how directly the part's surface is facing the
6907 light source point). Like the perspective point part, the center point
6908 is used and zplane is used for the z position (0 being the zero-plane
6909 where all 2D objects normally live) and positive values being further
6910 away into the distance. The light part color is used as the light
6911 color (alpha not used for light color). The color2 color is used for
6912 the ambient lighting when calculating brightness (alpha also not
6917 st_collections_group_parts_part_description_map_light(void)
6919 Edje_Part_Collection *pc;
6923 pc = eina_list_data_get(eina_list_last(edje_collections));
6928 name = parse_str(0);
6929 data_queue_part_lookup(pc, name, &(current_desc->map.id_light));
6941 This enables mapping for the part. Default is 0.
6945 st_collections_group_parts_part_description_map_on(void)
6949 current_desc->map.on = parse_bool(0);
6959 This enable smooth map rendering. This may be linear interpolation,
6960 anisotropic filtering or anything the engine decides is "smooth".
6961 This is a best-effort hint and may not produce precisely the same
6962 results in all engines and situations. Default is 1
6966 st_collections_group_parts_part_description_map_smooth(void)
6970 current_desc->map.smooth = parse_bool(0);
6980 This enable alpha channel when map rendering. Default is 1.
6984 st_collections_group_parts_part_description_map_alpha(void)
6988 current_desc->map.alpha = parse_bool(0);
6998 This enables backface culling (when the rotated part that normally
6999 faces the camera is facing away after being rotated etc.). This means
7000 that the object will be hidden when "backface culled".
7004 st_collections_group_parts_part_description_map_backface_cull(void)
7008 current_desc->map.backcull = parse_bool(0);
7018 Enable perspective when rotating even without a perspective point object.
7019 This would use perspective set for the object itself or for the
7020 canvas as a whole as the global perspective with
7021 edje_perspective_set() and edje_perspective_global_set().
7025 st_collections_group_parts_part_description_map_perspective_on(void)
7029 current_desc->map.persp_on = parse_bool(0);
7047 Rotates the part, optionally with the center on another part.
7053 [another part's name]
7055 This sets the part that is used as the center of rotation when
7056 rotating the part with this description. The part's center point
7057 is used as the rotation center when applying rotation around the
7058 x, y and z axes. If no center is given, the parts original center
7059 itself is used for the rotation center.
7063 st_collections_group_parts_part_description_map_rotation_center(void)
7065 Edje_Part_Collection *pc;
7069 pc = eina_list_data_get(eina_list_last(edje_collections));
7074 name = parse_str(0);
7075 data_queue_part_lookup(pc, name, &(current_desc->map.rot.id_center));
7087 This sets the rotation around the x axis of the part considering
7088 the center set. In degrees.
7092 st_collections_group_parts_part_description_map_rotation_x(void)
7096 current_desc->map.rot.x = FROM_DOUBLE(parse_float(0));
7106 This sets the rotation around the y axis of the part considering
7107 the center set. In degrees.
7111 st_collections_group_parts_part_description_map_rotation_y(void)
7115 current_desc->map.rot.y = FROM_DOUBLE(parse_float(0));
7125 This sets the rotation around the z axis of the part considering
7126 the center set. In degrees.
7130 st_collections_group_parts_part_description_map_rotation_z(void)
7134 current_desc->map.rot.z = FROM_DOUBLE(parse_float(0));
7151 Adds focal and plane perspective to the part. Active if perspective_on is true.
7152 Must be provided if the part is being used by other part as it's perspective target.
7160 This sets the z value that will not be scaled. Normally this is 0 as
7161 that is the z distance that all objects are at normally.
7165 st_collections_group_parts_part_description_perspective_zplane(void)
7169 current_desc->persp.zplane = parse_int(0);
7180 This sets the distance from the focal z plane (zplane) and the
7181 camera - i.e. very much equating to focal length of the camera
7185 st_collections_group_parts_part_description_perspective_focal(void)
7189 current_desc->persp.focal = parse_int_range(0, 1, 0x7fffffff);
7194 @edcsection{description_params,Params state description sub blocks}
7206 double: "other_name" 0.0;
7207 string: "another_name" "some text";
7209 choice: "some_name" "value";
7214 Set parameters for EXTERNAL parts. The value overwrites previous
7215 definitions with the same name.
7219 _st_collections_group_parts_part_description_params(Edje_External_Param_Type type)
7221 Edje_Part_Description_External *ed;
7222 Edje_External_Param *param;
7229 if (current_part->type != EDJE_PART_TYPE_EXTERNAL)
7231 ERR("parse error %s:%i. params in non-EXTERNAL part.",
7236 ed = (Edje_Part_Description_External*) current_desc;
7238 name = parse_str(0);
7240 /* if a param with this name already exists, overwrite it */
7241 EINA_LIST_FOREACH(ed->external_params, l, param)
7243 if (!strcmp(param->name, name))
7252 param = mem_alloc(SZ(Edje_External_Param));
7263 case EDJE_EXTERNAL_PARAM_TYPE_BOOL:
7264 case EDJE_EXTERNAL_PARAM_TYPE_INT:
7265 param->i = parse_int(1);
7267 case EDJE_EXTERNAL_PARAM_TYPE_DOUBLE:
7268 param->d = parse_float(1);
7270 case EDJE_EXTERNAL_PARAM_TYPE_CHOICE:
7271 case EDJE_EXTERNAL_PARAM_TYPE_STRING:
7272 param->s = parse_str(1);
7275 ERR("parse error %s:%i. Invalid param type.",
7281 ed->external_params = eina_list_append(ed->external_params, param);
7289 [param_name] [int_value]
7291 Adds an integer parameter for an external object
7295 st_collections_group_parts_part_description_params_int(void)
7297 _st_collections_group_parts_part_description_params(EDJE_EXTERNAL_PARAM_TYPE_INT);
7305 [param_name] [double_value]
7307 Adds a double parameter for an external object
7311 st_collections_group_parts_part_description_params_double(void)
7313 _st_collections_group_parts_part_description_params(EDJE_EXTERNAL_PARAM_TYPE_DOUBLE);
7321 [param_name] [string_value]
7323 Adds a string parameter for an external object
7327 st_collections_group_parts_part_description_params_string(void)
7329 _st_collections_group_parts_part_description_params(EDJE_EXTERNAL_PARAM_TYPE_STRING);
7337 [param_name] [bool_value]
7339 Adds an boolean parameter for an external object. Value must be 0 or 1.
7343 st_collections_group_parts_part_description_params_bool(void)
7345 _st_collections_group_parts_part_description_params(EDJE_EXTERNAL_PARAM_TYPE_BOOL);
7353 [param_name] [choice_string]
7355 Adds a choice parameter for an external object. The possible
7356 choice values are defined by external type at their register time
7357 and will be validated at runtime.
7361 st_collections_group_parts_part_description_params_choice(void)
7363 _st_collections_group_parts_part_description_params(EDJE_EXTERNAL_PARAM_TYPE_CHOICE);
7368 @edcsection{program, Program block}
7380 name: "programname";
7381 signal: "signalname";
7383 filter: "partname" "statename";
7385 action: STATE_SET "statename" state_value;
7386 transition: LINEAR 0.5;
7388 target: "anotherpart";
7389 after: "programname";
7390 after: "anotherprogram";
7396 Programs define how your interface reacts to events.
7397 Programs can change the state of parts, react to events or trigger
7402 ob_collections_group_programs_program(void)
7404 Edje_Part_Collection *pc;
7406 Edje_Program_Parser *epp;
7408 pc = eina_list_data_get(eina_list_last(edje_collections));
7410 ep = mem_alloc(SZ(Edje_Program_Parser));
7412 ep->tween.mode = EDJE_TWEEN_MODE_LINEAR;
7414 epp = (Edje_Program_Parser *)ep;
7415 epp->can_override = EINA_FALSE;
7417 _edje_program_insert(pc, ep);
7419 current_program = ep;
7429 Symbolic name of program as a unique identifier.
7433 st_collections_group_programs_program_name(void)
7435 Edje_Part_Collection *pc;
7439 pc = eina_list_data_get(eina_list_last(edje_collections));
7440 current_program->name = parse_str(0);
7442 _edje_program_check(current_program->name, current_program, pc->programs.fnmatch, pc->programs.fnmatch_count);
7443 _edje_program_check(current_program->name, current_program, pc->programs.strcmp, pc->programs.strcmp_count);
7444 _edje_program_check(current_program->name, current_program, pc->programs.strncmp, pc->programs.strncmp_count);
7445 _edje_program_check(current_program->name, current_program, pc->programs.strrncmp, pc->programs.strrncmp_count);
7446 _edje_program_check(current_program->name, current_program, pc->programs.nocmp, pc->programs.nocmp_count);
7456 Specifies signal(s) that should cause the program to run. The signal
7457 received must match the specified source to run.
7458 Signals may be globbed, but only one signal keyword per program
7459 may be used. ex: signal: "mouse,clicked,*"; (clicking any mouse button
7460 that matches source starts program).
7464 st_collections_group_programs_program_signal(void)
7466 Edje_Part_Collection *pc;
7470 pc = eina_list_data_get(eina_list_last(edje_collections));
7472 _edje_program_remove(pc, current_program);
7473 current_program->signal = parse_str(0);
7474 _edje_program_insert(pc, current_program);
7484 Source of accepted signal. Sources may be globbed, but only one source
7485 keyword per program may be used. ex:source: "button-*"; (Signals from
7486 any part or program named "button-*" are accepted).
7490 st_collections_group_programs_program_source(void)
7492 Edje_Part_Collection *pc;
7496 pc = eina_list_data_get(eina_list_last(edje_collections));
7498 _edje_program_remove(pc, current_program);
7499 current_program->source = parse_str(0);
7500 _edje_program_insert(pc, current_program);
7510 Filter signals to be only accepted if the part [part] is in state named [state].
7511 Only one filter per program can be used. If [state] is not given, the source of
7512 the event will be used instead.
7516 st_collections_group_programs_program_filter(void)
7518 check_min_arg_count(1);
7521 current_program->filter.part = parse_str(0);
7522 current_program->filter.state = parse_str(1);
7524 current_program->filter.state = parse_str(0);
7535 Wait 'from' seconds before executing the program. And add a random
7536 number of seconds (from 0 to 'range') to the total waiting time.
7540 st_collections_group_programs_program_in(void)
7544 current_program->in.from = parse_float_range(0, 0.0, 999999999.0);
7545 current_program->in.range = parse_float_range(1, 0.0, 999999999.0);
7553 [type] [param1] [param2]
7555 Action to be performed by the program. Valid actions are: STATE_SET,
7556 ACTION_STOP, SIGNAL_EMIT, DRAG_VAL_SET, DRAG_VAL_STEP, DRAG_VAL_PAGE,
7557 FOCUS_SET, PARAM_COPY, PARAM_SET, PLAY_SAMPLE, PLAY_TONE
7558 Only one action can be specified per program. Examples:\n
7559 action: STATE_SET "statename" 0.5;\n
7560 action: ACTION_STOP;\n
7561 action: SIGNAL_EMIT "signalname" "emitter";\n
7562 action: DRAG_VAL_SET 0.5 0.0;\n
7563 action: DRAG_VAL_STEP 1.0 0.0;\n
7564 action: DRAG_VAL_PAGE 0.0 0.0;\n
7565 action: FOCUS_SET;\n
7566 action: FOCUS_OBJECT;\n
7567 action: PARAM_COPY "src_part" "src_param" "dst_part" "dst_param";\n
7568 action: PARAM_SET "part" "param" "value";\n
7569 action: PLAY_SAMPLE "sample name";\n
7570 action: PLAY_TONE "tone name" duration in seconds ( Range 0.1 to 10.0 );\n
7574 st_collections_group_programs_program_action(void)
7576 Edje_Part_Collection *pc;
7580 pc = eina_list_data_get(eina_list_last(edje_collections));
7581 ep = current_program;
7582 ep->action = parse_enum(0,
7583 "STATE_SET", EDJE_ACTION_TYPE_STATE_SET,
7584 "ACTION_STOP", EDJE_ACTION_TYPE_ACTION_STOP,
7585 "SIGNAL_EMIT", EDJE_ACTION_TYPE_SIGNAL_EMIT,
7586 "DRAG_VAL_SET", EDJE_ACTION_TYPE_DRAG_VAL_SET,
7587 "DRAG_VAL_STEP", EDJE_ACTION_TYPE_DRAG_VAL_STEP,
7588 "DRAG_VAL_PAGE", EDJE_ACTION_TYPE_DRAG_VAL_PAGE,
7589 "SCRIPT", EDJE_ACTION_TYPE_SCRIPT,
7590 "FOCUS_SET", EDJE_ACTION_TYPE_FOCUS_SET,
7591 "FOCUS_OBJECT", EDJE_ACTION_TYPE_FOCUS_OBJECT,
7592 "PARAM_COPY", EDJE_ACTION_TYPE_PARAM_COPY,
7593 "PARAM_SET", EDJE_ACTION_TYPE_PARAM_SET,
7594 "PLAY_SAMPLE", EDJE_ACTION_TYPE_SOUND_SAMPLE,
7595 "PLAY_TONE", EDJE_ACTION_TYPE_SOUND_TONE,
7597 if (ep->action == EDJE_ACTION_TYPE_STATE_SET)
7599 ep->state = parse_str(1);
7600 if (get_arg_count() == 1)
7603 ep->value = parse_float_range(2, 0.0, 1.0);
7605 else if (ep->action == EDJE_ACTION_TYPE_SIGNAL_EMIT)
7607 ep->state = parse_str(1);
7608 ep->state2 = parse_str(2);
7610 else if (ep->action == EDJE_ACTION_TYPE_SOUND_SAMPLE)
7612 ep->sample_name = parse_str(1);
7613 for (i = 0; i < (int)edje_file->sound_dir->samples_count; i++)
7615 if (!strcmp(edje_file->sound_dir->samples[i].name, ep->sample_name))
7617 if (i == (int)(edje_file->sound_dir->samples_count - 1))
7619 ERR("No Sample name %s exist.", ep->sample_name);
7623 ep->speed = parse_float_range(2, 0.0, 10.0);
7625 else if (ep->action == EDJE_ACTION_TYPE_SOUND_TONE)
7627 ep->tone_name = parse_str(1);
7628 for (i = 0; i < (int)edje_file->sound_dir->tones_count; i++)
7630 if (!strcmp(edje_file->sound_dir->tones[i].name, ep->tone_name))
7632 if (i == (int)(edje_file->sound_dir->tones_count - 1))
7634 ERR("No Tone name %s exist.", ep->tone_name);
7638 ep->duration = parse_float_range(2, 0.1, 10.0);
7640 else if (ep->action == EDJE_ACTION_TYPE_DRAG_VAL_SET)
7642 ep->value = parse_float(1);
7643 ep->value2 = parse_float(2);
7645 else if (ep->action == EDJE_ACTION_TYPE_DRAG_VAL_STEP)
7647 ep->value = parse_float(1);
7648 ep->value2 = parse_float(2);
7650 else if (ep->action == EDJE_ACTION_TYPE_DRAG_VAL_PAGE)
7652 ep->value = parse_float(1);
7653 ep->value2 = parse_float(2);
7655 else if (ep->action == EDJE_ACTION_TYPE_PARAM_COPY)
7657 char *src_part, *dst_part;
7659 src_part = parse_str(1);
7660 ep->state = parse_str(2);
7661 dst_part = parse_str(3);
7662 ep->state2 = parse_str(4);
7664 data_queue_part_lookup(pc, src_part, &(ep->param.src));
7665 data_queue_part_lookup(pc, dst_part, &(ep->param.dst));
7670 else if (ep->action == EDJE_ACTION_TYPE_PARAM_SET)
7674 part = parse_str(1);
7675 ep->state = parse_str(2);
7676 ep->state2 = parse_str(3);
7678 data_queue_part_lookup(pc, part, &(ep->param.dst));
7684 case EDJE_ACTION_TYPE_ACTION_STOP:
7687 case EDJE_ACTION_TYPE_SCRIPT:
7688 /* this is implicitly set by script {} so this is here just for
7691 case EDJE_ACTION_TYPE_FOCUS_OBJECT:
7692 case EDJE_ACTION_TYPE_FOCUS_SET:
7695 case EDJE_ACTION_TYPE_PARAM_COPY:
7698 case EDJE_ACTION_TYPE_PARAM_SET:
7701 case EDJE_ACTION_TYPE_SOUND_SAMPLE:
7704 case EDJE_ACTION_TYPE_SOUND_TONE:
7717 [type] [length] [[interp val 1]] [[interp val 2]] [[option]]
7719 Defines how transitions occur using STATE_SET action.\n
7720 Where 'type' is the style of the transition and 'length' is a double
7721 specifying the number of seconds in which to preform the transition.\n
7722 Valid types are: LIN or LINEAR, SIN or SINUSOIDAL,
7723 ACCEL or ACCELERATE, DECEL or DECELERATE,
7724 ACCEL_FAC or ACCELERATE_FACTOR, DECEL_FAC or DECELERATE_FACTOR,
7725 SIN_FAC or SINUSOIDAL_FACTOR, DIVIS or DIVISOR_INTERP,
7728 ACCEL_FAC, DECEL_FAC and SIN_FAC need the extra optional
7729 "interp val 1" to determine the "factor" of curviness. 1.0 is the same
7730 as their non-factor counterparts, where 0.0 is equal to linear.
7731 Numbers higher than one make the curve angles steeper with a more
7732 pronounced curve point.
7734 DIVIS, BOUNCE and SPRING also require "interp val 2" in addition
7737 DIVIS uses val 1 as the initial gradient start
7738 (0.0 is horizontal, 1.0 is diagonal (linear), 2.0 is twice the
7739 gradient of linear etc.). val 2 is interpreted as an integer factor
7740 defining how much the value swings "outside" the gradient only to come
7741 back to the final resting spot at the end. 0.0 for val 2 is equivalent
7742 to linear interpolation. Note that DIVIS can exceed 1.0
7744 BOUNCE uses val 2 as the number of bounces (so its rounded down to
7745 the nearest integer value), with val 1 determining how much the
7746 bounce decays, with 0.0 giving linear decay per bounce, and higher
7747 values giving much more decay.
7749 SPRING is similar to bounce, where val 2 specifies the number of
7750 spring "swings" and val 1 specifies the decay, but it can exceed 1.0
7751 on the outer swings.
7753 Valid option is CURRENT.
7755 CURRENT is the option which causes the edje object to move from its current position.
7756 It can be used as the last parameter of any transition type. (@since 1.1.0)
7761 st_collections_group_programs_program_transition(void)
7763 check_min_arg_count(2);
7765 current_program->tween.mode = parse_enum(0,
7767 "LIN", EDJE_TWEEN_MODE_LINEAR,
7768 "SIN", EDJE_TWEEN_MODE_SINUSOIDAL,
7769 "ACCEL", EDJE_TWEEN_MODE_ACCELERATE,
7770 "DECEL", EDJE_TWEEN_MODE_DECELERATE,
7771 "ACCEL_FAC", EDJE_TWEEN_MODE_ACCELERATE_FACTOR,
7772 "DECEL_FAC", EDJE_TWEEN_MODE_DECELERATE_FACTOR,
7773 "SIN_FAC", EDJE_TWEEN_MODE_SINUSOIDAL_FACTOR,
7774 "DIVIS", EDJE_TWEEN_MODE_DIVISOR_INTERP,
7777 "LINEAR", EDJE_TWEEN_MODE_LINEAR,
7778 "SINUSOIDAL", EDJE_TWEEN_MODE_SINUSOIDAL,
7779 "ACCELERATE", EDJE_TWEEN_MODE_ACCELERATE,
7780 "DECELERATE", EDJE_TWEEN_MODE_DECELERATE,
7781 "ACCELERATE_FACTOR", EDJE_TWEEN_MODE_ACCELERATE_FACTOR,
7782 "DECELERATE_FACTOR", EDJE_TWEEN_MODE_DECELERATE_FACTOR,
7783 "SINUSOIDAL_FACTOR", EDJE_TWEEN_MODE_SINUSOIDAL_FACTOR,
7784 "DIVISOR_INTERP", EDJE_TWEEN_MODE_DIVISOR_INTERP,
7786 // long/full is short enough
7787 "BOUNCE", EDJE_TWEEN_MODE_BOUNCE,
7788 "SPRING", EDJE_TWEEN_MODE_SPRING,
7790 current_program->tween.time = FROM_DOUBLE(parse_float_range(1, 0.0, 999999999.0));
7791 if ((current_program->tween.mode >= EDJE_TWEEN_MODE_LINEAR) &&
7792 (current_program->tween.mode <= EDJE_TWEEN_MODE_DECELERATE))
7794 if ((get_arg_count() == 3) && (!strcmp(parse_str(2), "CURRENT")))
7795 current_program->tween.mode |= EDJE_TWEEN_MODE_OPT_FROM_CURRENT;
7796 else if (get_arg_count() != 2)
7798 ERR("parse error %s:%i. Need 2rd parameter to set time",
7803 // the following need v1
7804 // EDJE_TWEEN_MODE_ACCELERATE_FACTOR
7805 // EDJE_TWEEN_MODE_DECELERATE_FACTOR
7806 // EDJE_TWEEN_MODE_SINUSOIDAL_FACTOR
7807 // current_program->tween.v1
7808 else if ((current_program->tween.mode >= EDJE_TWEEN_MODE_ACCELERATE_FACTOR) &&
7809 (current_program->tween.mode <= EDJE_TWEEN_MODE_SINUSOIDAL_FACTOR))
7811 if ((get_arg_count() == 4) && (!strcmp(parse_str(3), "CURRENT")))
7812 current_program->tween.mode |= EDJE_TWEEN_MODE_OPT_FROM_CURRENT;
7813 else if (get_arg_count() != 3)
7815 ERR("parse error %s:%i. Need 3rd parameter to set factor",
7819 current_program->tween.v1 = FROM_DOUBLE(parse_float_range(2, 0.0, 999999999.0));
7821 // the followjng also need v2
7822 // EDJE_TWEEN_MODE_DIVISOR_INTERP
7823 // EDJE_TWEEN_MODE_BOUNCE
7824 // EDJE_TWEEN_MODE_SPRING
7825 // current_program->tween.v2
7826 else if ((current_program->tween.mode >= EDJE_TWEEN_MODE_DIVISOR_INTERP) &&
7827 (current_program->tween.mode <= EDJE_TWEEN_MODE_SPRING))
7829 if ((get_arg_count() == 5) && (!strcmp(parse_str(4), "CURRENT")))
7830 current_program->tween.mode |= EDJE_TWEEN_MODE_OPT_FROM_CURRENT;
7831 else if (get_arg_count() != 4)
7833 ERR("parse error %s:%i. "
7834 "Need 3rd and 4th parameters to set factor and counts",
7838 current_program->tween.v1 = FROM_DOUBLE(parse_float_range(2, 0.0, 999999999.0));
7839 current_program->tween.v2 = FROM_DOUBLE(parse_float_range(3, 0.0, 999999999.0));
7850 Program or part on which the specified action acts. Multiple target
7851 keywords may be specified, one per target. SIGNAL_EMITs do not have
7856 st_collections_group_programs_program_target(void)
7858 Edje_Part_Collection *pc;
7863 pc = eina_list_data_get(eina_list_last(edje_collections));
7864 ep = current_program;
7866 Edje_Program_Target *et;
7867 Edje_Program_Target *etw;
7872 name = parse_str(0);
7874 EINA_LIST_FOREACH(ep->targets, l, etw)
7876 if (!strcmp(name, (char*) (etw + 1)))
7883 et = mem_alloc(SZ(Edje_Program_Target) + strlen(name) + 1);
7884 ep->targets = eina_list_append(ep->targets, et);
7885 copy = (char*) (et + 1);
7887 memcpy(copy, name, strlen(name) + 1);
7889 if (ep->action == EDJE_ACTION_TYPE_STATE_SET)
7890 data_queue_part_lookup(pc, name, &(et->id));
7891 else if (ep->action == EDJE_ACTION_TYPE_ACTION_STOP)
7892 data_queue_program_lookup(pc, name, &(et->id));
7893 else if (ep->action == EDJE_ACTION_TYPE_DRAG_VAL_SET)
7894 data_queue_part_lookup(pc, name, &(et->id));
7895 else if (ep->action == EDJE_ACTION_TYPE_DRAG_VAL_STEP)
7896 data_queue_part_lookup(pc, name, &(et->id));
7897 else if (ep->action == EDJE_ACTION_TYPE_DRAG_VAL_PAGE)
7898 data_queue_part_lookup(pc, name, &(et->id));
7899 else if (ep->action == EDJE_ACTION_TYPE_FOCUS_SET)
7900 data_queue_part_lookup(pc, name, &(et->id));
7901 else if (ep->action == EDJE_ACTION_TYPE_FOCUS_OBJECT)
7902 data_queue_part_lookup(pc, name, &(et->id));
7905 ERR("parse error %s:%i. target may only be used after action",
7920 Specifies a program to run after the current program completes. The
7921 source and signal parameters of a program run as an "after" are ignored.
7922 Multiple "after" statements can be specified per program.
7926 st_collections_group_programs_program_after(void)
7928 Edje_Part_Collection *pc;
7933 pc = eina_list_data_get(eina_list_last(edje_collections));
7934 ep = current_program;
7936 Edje_Program_After *pa;
7939 name = parse_str(0);
7941 pa = mem_alloc(SZ(Edje_Program_After));
7943 ep->after = eina_list_append(ep->after, pa);
7945 data_queue_program_lookup(pc, name, &(pa->id));
7955 [name] [description]
7957 Specifies a hint to let applications (or IDE's) know how to bind
7958 things. The parameter name should contain the name of the function that
7959 the application should use, and description describes how it should
7964 st_collections_group_programs_program_api(void)
7966 check_min_arg_count(1);
7968 current_program->api.name = parse_str(0);
7973 current_program->api.description = parse_str(1);
7978 st_collections_group_parts_part_api(void)
7980 check_min_arg_count(1);
7982 current_part->api.name = parse_str(0);
7986 current_part->api.description = parse_str(1);
7991 ob_collections_group_programs_program_script(void)
7993 Edje_Part_Collection *pc;
7996 pc = eina_list_data_get(eina_list_last(edje_collections));
7997 cd = eina_list_data_get(eina_list_last(codes));
7999 if (!is_verbatim()) track_verbatim(1);
8002 Eina_Bool empty = EINA_TRUE;
8011 /* FIXME: Need to store the script somewhere to be restored when using edje_edit API */
8012 cp = mem_alloc(SZ(Code_Program));
8013 cp->l1 = get_verbatim_line1();
8014 cp->l2 = get_verbatim_line2();
8016 cp->original = strdup(s);
8017 if (cd->shared && cd->is_lua)
8019 ERR("parse error %s:%i. You're trying to mix Embryo and Lua scripting in the same group",
8025 len = strlen(cp->script);
8026 for (i = 0; i < len; i++)
8028 if (((cp->script[i] > 'a') && (cp->script[i] < 'z')) ||
8029 ((cp->script[i] > 'A') && (cp->script[i] < 'Z')) ||
8030 ((cp->script[i] > '0') && (cp->script[i] < '9')))
8036 cd->programs = eina_list_append(cd->programs, cp);
8037 data_queue_anonymous_lookup(pc, current_program, &(cp->id));
8038 current_program->action = EDJE_ACTION_TYPE_SCRIPT;
8042 data_queue_anonymous_lookup(pc, current_program, NULL);
8047 set_verbatim(NULL, 0, 0);