From 5081d36996876f722d8bea0e5ea8612ef09b26fb Mon Sep 17 00:00:00 2001 From: "Eduardo Lima (Etrunko)" Date: Tue, 4 Dec 2012 20:21:59 +0000 Subject: [PATCH] New embryo function: get_program_id It is now you can run programs with names generated dinamically. Say that you have 10 programs indexed somehow. You can now call them using the following snippet: script { new program_id[15], i; for (i = 0; i < 10; i++) { snprintf(program_id, 15, "my_program_%d", i+1); run_program(get_program_id(program_id)); } } Signed-off-by: Eduardo Lima (Etrunko) SVN revision: 80199 --- legacy/edje/ChangeLog | 4 ++++ legacy/edje/data/include/edje.inc | 1 + legacy/edje/src/lib/edje_embryo.c | 24 ++++++++++++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/legacy/edje/ChangeLog b/legacy/edje/ChangeLog index 3b2e13c53c..1fcc946aa4 100644 --- a/legacy/edje/ChangeLog +++ b/legacy/edje/ChangeLog @@ -683,3 +683,7 @@ 2012-11-23 Bruno Dilly * Support message sending on edje player. + +2012-11-23 Eduardo Lima (Etrunko) + + * Add embryo function get_program_id diff --git a/legacy/edje/data/include/edje.inc b/legacy/edje/data/include/edje.inc index 55eb9ee7ae..50f2bbed63 100644 --- a/legacy/edje/data/include/edje.inc +++ b/legacy/edje/data/include/edje.inc @@ -85,6 +85,7 @@ native cancel_anim(id); native emit (sig[], src[]); native get_part_id (part[]); native get_image_id (image[]); +native get_program_id (program[]); native set_state (part_id, state[], Float:state_val); native get_state (part_id, dst[], maxlen, &Float:val); native set_tween_state (part_id, Float:tween, state1[], Float:state1_val, state2[], Float:state2_val); diff --git a/legacy/edje/src/lib/edje_embryo.c b/legacy/edje/src/lib/edje_embryo.c index 1522dbb0a0..77f23b17b2 100644 --- a/legacy/edje/src/lib/edje_embryo.c +++ b/legacy/edje/src/lib/edje_embryo.c @@ -855,6 +855,29 @@ _edje_embryo_fn_get_image_id(Embryo_Program *ep, Embryo_Cell *params) return -1; } +/* get_program_id(program[]) */ +static Embryo_Cell +_edje_embryo_fn_get_program_id(Embryo_Program *ep, Embryo_Cell *params) +{ + Edje *ed; + Edje_Program **prog; + char *p; + int i; + + CHKPARAM(1); + ed = embryo_program_data_get(ep); + GETSTR(p, params[1]); + if (!p) return -1; + prog = ed->table_programs; + if (!prog) return -1; + for (i = 0; i < ed->table_programs_size; i++, prog++) + { + if (!(*prog)->name) continue; + if (!strcmp((*prog)->name, p)) return (*prog)->id; + } + return -1; +} + static Embryo_Cell _edje_embryo_fn_play_sample(Embryo_Program *ep, Embryo_Cell *params) { @@ -3050,6 +3073,7 @@ _edje_embryo_script_init(Edje_Part_Collection *edc) embryo_program_native_call_add(ep, "emit", _edje_embryo_fn_emit); embryo_program_native_call_add(ep, "get_part_id", _edje_embryo_fn_get_part_id); embryo_program_native_call_add(ep, "get_image_id", _edje_embryo_fn_get_image_id); + embryo_program_native_call_add(ep, "get_program_id", _edje_embryo_fn_get_program_id); embryo_program_native_call_add(ep, "set_state", _edje_embryo_fn_set_state); embryo_program_native_call_add(ep, "get_state", _edje_embryo_fn_get_state); embryo_program_native_call_add(ep, "set_tween_state", _edje_embryo_fn_set_tween_state);