rimmed pushed a commit to branch master.

http://git.enlightenment.org/tools/eflete.git/commit/?id=0277ffe3353be8dcf0bf7de2315b42b814fa003f

commit 0277ffe3353be8dcf0bf7de2315b42b814fa003f
Author: Vitalii Vorobiov <vi.vorob...@samsung.com>
Date:   Fri Mar 18 09:27:38 2016 +0200

    demo_group: update program list on program changes
    
    add program when source name and signal name is not NULL
    on any changes of them, poke demo_group to check if program should be added 
into
    group
    
    Fixes T3223
---
 src/bin/common/signals.h          |  8 ++++
 src/bin/ui/property_group.c       |  4 ++
 src/bin/ui/workspace/demo_group.c | 79 +++++++++++++++++++++++++++++++++++++++
 src/bin/ui/workspace/demo_group.h |  6 +++
 4 files changed, 97 insertions(+)

diff --git a/src/bin/common/signals.h b/src/bin/common/signals.h
index a632461..c741554 100644
--- a/src/bin/common/signals.h
+++ b/src/bin/common/signals.h
@@ -217,6 +217,14 @@ typedef struct {
 #define SIGNAL_EDITOR_PROGRAM_ADDED "SIGNAL_EDITOR_PROGRAM_ADDED"
 
 /**
+ * emited when program is being changed from property.
+ * eventinfo - stringshare with programs name
+ *
+ * @ingroup Window
+ */
+#define SIGNAL_EDITOR_PROGRAM_UPDATE "SIGNAL_EDITOR_PROGRAM_UPDATE"
+
+/**
  * emited *before* program will be deleted in editor.
  * eventinfo - stringshare with programs name
  *
diff --git a/src/bin/ui/property_group.c b/src/bin/ui/property_group.c
index 99cb1c9..d8897be 100644
--- a/src/bin/ui/property_group.c
+++ b/src/bin/ui/property_group.c
@@ -1013,9 +1013,13 @@ _on_editor_attribute_changed(void *data,
          break;
       case ATTRIBUTE_PROGRAM_SIGNAL:
          prop_program_signal_update(pd);
+         evas_object_smart_callback_call(ap.win, SIGNAL_EDITOR_PROGRAM_UPDATE, 
(void *)eina_stringshare_add(pd->attributes.program.program));
+         eina_stringshare_del(pd->attributes.program.program);
          break;
       case ATTRIBUTE_PROGRAM_SOURCE:
          prop_program_source_update(pd);
+         evas_object_smart_callback_call(ap.win, SIGNAL_EDITOR_PROGRAM_UPDATE, 
(void *)eina_stringshare_add(pd->attributes.program.program));
+         eina_stringshare_del(pd->attributes.program.program);
          break;
       case ATTRIBUTE_PROGRAM_ACTION:
          prop_program_action_update(pd);
diff --git a/src/bin/ui/workspace/demo_group.c 
b/src/bin/ui/workspace/demo_group.c
index 7b7f543..4edbae6 100644
--- a/src/bin/ui/workspace/demo_group.c
+++ b/src/bin/ui/workspace/demo_group.c
@@ -43,6 +43,9 @@ static Elm_Genlist_Item_Class *itc_part;
 static Elm_Genlist_Item_Class *itc_part_selected;
 static Elm_Genlist_Item_Class *itc_signals;
 
+static void
+_program_item_del(Elm_Object_Item *pl, Demo_Signal *part);
+
 #define CAPTION_GENLIST_ITEM_TEXT_GET(TYPE, TITLE) \
 static char * \
 _##TYPE##_label_cb(void *data, \
@@ -220,6 +223,79 @@ _content_get(void *data __UNUSED__,
    return button;
 }
 
+void
+_program_add(void *data,
+             Evas_Object *obj __UNUSED__,
+             void *ei)
+{
+   Part_Demo_List *pl = data;
+   Demo_Signal *demo_sig, *pr;
+   Eina_Stringshare *sig_name, *source_name;
+   Eina_Stringshare *program_name = ei;
+   Eina_Bool correct = false;
+   Elm_Object_Item *part_item;
+   const Eina_List *part_items;
+
+   assert(pl);
+
+   part_items = elm_genlist_item_subitems_get(pl->it_signal);
+   part_item = eina_list_data_get(part_items);
+   pr = elm_object_item_data_get(part_item);
+
+   /* find program */
+   while ((pr) && (pr->prog_name != program_name))
+     {
+        part_items = eina_list_next(part_items);
+        part_item = eina_list_data_get(part_items);
+        pr = elm_object_item_data_get(part_item);
+     }
+
+   sig_name = edje_edit_program_signal_get(pl->group->edit_object, 
program_name);
+   source_name = edje_edit_program_source_get(pl->group->edit_object, 
program_name);
+   if (!source_name) source_name = eina_stringshare_add("");
+   if ((sig_name) && (strcmp(sig_name, "drag") != 0) &&
+       (strncmp(sig_name, "mouse", strlen("mouse")) != 0))
+     correct = true;
+
+   /* if program is not exist */
+   if ((!part_item) && (correct))
+     {
+        demo_sig = mem_calloc(1, sizeof(Demo_Part));
+        demo_sig->prog_name = eina_stringshare_add(program_name);
+        demo_sig->sig_name = eina_stringshare_add(sig_name);
+        demo_sig->source_name = eina_stringshare_add(source_name);
+        pl->signal_list = eina_list_append(pl->signal_list, demo_sig);
+        elm_genlist_item_append(pl->genlist,
+                                itc_signals,
+                                demo_sig,
+                                pl->it_signal,
+                                ELM_GENLIST_ITEM_NONE,
+                                NULL,
+                                NULL);
+     }
+   else if ((part_item) && (correct)) /* if program exist and data is correct 
*/
+     {
+        eina_stringshare_del(pr->prog_name);
+        eina_stringshare_del(pr->sig_name);
+        eina_stringshare_del(pr->source_name);
+        pr->prog_name = eina_stringshare_add(program_name);
+        pr->sig_name = eina_stringshare_add(sig_name);
+        pr->source_name = eina_stringshare_add(source_name);
+        elm_genlist_item_update(part_item);
+     }
+   else if ((part_item) && (!correct)) /* if exists and data is NOT correct */
+     {
+        pl->signal_list = eina_list_remove(pl->signal_list, pr);
+        _program_item_del(pl->it_signal, pr);
+        eina_stringshare_del(pr->prog_name);
+        eina_stringshare_del(pr->sig_name);
+        eina_stringshare_del(pr->source_name);
+        free(pr);
+        elm_object_item_del(part_item);
+     }
+}
+
+
 static void
 _part_renamed(void *data,
               Evas_Object *obj __UNUSED__,
@@ -340,7 +416,10 @@ demo_group_add(Group *group)
    elm_scroller_policy_set(pl->genlist, ELM_SCROLLER_POLICY_OFF, 
ELM_SCROLLER_POLICY_AUTO);
    evas_object_show(pl->genlist);
    elm_object_content_set(pl->layout, pl->genlist);
+
    evas_object_smart_callback_add(ap.win, SIGNAL_PART_RENAMED, _part_renamed, 
pl);
+   evas_object_smart_callback_add(ap.win, SIGNAL_EDITOR_PROGRAM_UPDATE, 
_program_add, pl);
+
    evas_object_smart_callback_add(pl->genlist, "clicked,double", 
_on_clicked_double, pl);
    evas_object_smart_callback_add(pl->genlist, "expand,request", 
_expand_request_cb, pl);
    evas_object_smart_callback_add(pl->genlist, "contract,request", 
_contract_request_cb, pl);
diff --git a/src/bin/ui/workspace/demo_group.h 
b/src/bin/ui/workspace/demo_group.h
index d9a120f..b181a4e 100644
--- a/src/bin/ui/workspace/demo_group.h
+++ b/src/bin/ui/workspace/demo_group.h
@@ -123,6 +123,12 @@ demo_group_program_del(Evas_Object *demo, Eina_Stringshare 
*program_name);
  * @ingroup DemoGroup
  */
 void
+demo_group_program_add(Evas_Object *demo, Eina_Stringshare *program_name);
+
+/**
+ * @ingroup DemoGroup
+ */
+void
 demo_group_demo_update(Evas_Object *demo);
 
 #endif /* DEMO_GROUP_H */

-- 


Reply via email to