New embryo function: get_program_id 46/8246/1 accepted/tizen/ivi/genivi accepted/tizen/mobile tizen_ivi_genivi accepted/tizen/20130912.083346 accepted/tizen/20130912.090231 accepted/tizen/20130912.093149 accepted/tizen/generic/20140106.140254 accepted/tizen/ivi/20131219.023421 accepted/tizen/ivi/20131220.020832 accepted/tizen/ivi/genivi/20140131.030537 accepted/tizen/mobile/20131218.175215 accepted/tizen/mobile/20131223.191753 ivi_oct_m2 submit/tizen/20130912.075725 submit/tizen/20131218.100641 submit/tizen/20131220.014222 submit/tizen_ivi_genivi/20140131.024741
authorEduardo Lima (Etrunko) <eduardo.lima@intel.com>
Tue, 4 Dec 2012 20:21:59 +0000 (20:21 +0000)
committerEduardo Lima (Etrunko) <eduardo.lima@intel.com>
Tue, 13 Aug 2013 20:58:57 +0000 (17:58 -0300)
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) <eduardo.lima@intel.com>
data/include/edje.inc
src/lib/edje_embryo.c

index dfa5416..a3995cf 100644 (file)
@@ -84,6 +84,7 @@ native       cancel_anim(id);
  */
 native       emit             (sig[], src[]);
 native       get_part_id      (part[]);
+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);
index 9d85738..b242348 100644 (file)
@@ -828,6 +828,29 @@ _edje_embryo_fn_get_part_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)
 {
@@ -3024,6 +3047,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_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);