rimmed pushed a commit to branch master.

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

commit f2316206baac0bfb78c42c476465aba33ad69617
Author: Mykyta Biliavskyi <m.biliavs...@samsung.com>
Date:   Fri Jan 6 10:39:56 2017 +0200

    Image helper: add suport of the images set.
    
    Added display functionality for the images sets inside image helper.
    From now it is possible to set the images sets as value for image
    .normal attruibute.
---
 src/bin/resource_manager/resource_manager_react.c |   3 +
 src/bin/ui/popup.c                                | 122 +++++++++++++++++++++-
 2 files changed, 122 insertions(+), 3 deletions(-)

diff --git a/src/bin/resource_manager/resource_manager_react.c 
b/src/bin/resource_manager/resource_manager_react.c
index f1d6f99..4b93896 100644
--- a/src/bin/resource_manager/resource_manager_react.c
+++ b/src/bin/resource_manager/resource_manager_react.c
@@ -297,9 +297,12 @@ _property_attribute_changed(void *data,
               _resource_usage_resource_del(state, old_source);
            }
          TODO("Support some image sets here");
+
          if (change->value && strcmp(change->value, EFLETE_DUMMY_IMAGE_NAME))
            {
               source = resource_manager_find(pro->RM.images, change->value);
+              if (!source)
+                source = resource_manager_find(pro->RM.image_sets, 
change->value);
               _resource_usage_resource_add(state, source);
            }
          eina_stringshare_del(((State2 *)state)->normal);
diff --git a/src/bin/ui/popup.c b/src/bin/ui/popup.c
index 29809e2..ac724ef 100644
--- a/src/bin/ui/popup.c
+++ b/src/bin/ui/popup.c
@@ -50,9 +50,11 @@ struct _Item
 {
    const char* image_name;
    const char* source;
+   Image_Instance_Type type;
 };
 typedef struct _Item Item;
 static Elm_Gengrid_Item_Class *gic = NULL;
+static Elm_Gengrid_Item_Class *gic_set = NULL;
 
 static void
 _delete_object_job(void *data)
@@ -720,6 +722,7 @@ _image_gengrid_init(Helper_Data *helper_data)
    Eina_List *images = NULL;
    int counter = 0;
    Image2 *res;
+   Image_Set2 *image_set = NULL;
 
    images = ap.project->RM.images;
 
@@ -744,11 +747,31 @@ _image_gengrid_init(Helper_Data *helper_data)
               it = (Item *)mem_malloc(sizeof(Item));
               it->image_name = eina_stringshare_add(res->common.name);
               it->source = eina_stringshare_add(res->source);
+              it->type = SINGLE_IMAGE;
               elm_gengrid_item_append(helper_data->gengrid, gic, it, NULL, 
NULL);
            }
          
elm_gengrid_item_bring_in(elm_gengrid_first_item_get(helper_data->gengrid),
                                    ELM_GENGRID_ITEM_SCROLLTO_TOP);
      }
+
+   counter = 0;
+   EINA_LIST_FOREACH(ap.project->RM.image_sets, l, image_set)
+     {
+        counter++;
+        if (!image_set->common.name)
+          {
+             ERR("name not found for image #%d",counter);
+             continue;
+          }
+
+        it = (Item *)mem_malloc(sizeof(Item));
+        it->image_name = eina_stringshare_add(image_set->common.name);
+        res = eina_list_data_get(image_set->common.uses___);
+        it->source = eina_stringshare_add(res->source);
+        it->type = IMAGE_SET;
+        elm_gengrid_item_append(helper_data->gengrid, gic_set, it, NULL, NULL);
+     }
+
    elm_scroller_policy_set(helper_data->gengrid, ELM_SCROLLER_POLICY_OFF,
                            ELM_SCROLLER_POLICY_AUTO);
    evas_object_smart_calculate(helper_data->gengrid);
@@ -762,9 +785,23 @@ _grid_label_get(void *data,
                 const char  *part __UNUSED__)
 {
    const Item *it = data;
-   if (strcmp(it->image_name, EFLETE_DUMMY_IMAGE_NAME) == 0)
-     return strdup("None");
-   return strdup(it->image_name);
+   Resource2 *res;
+
+   if (!strcmp(part, "elm.text.count"))
+     {
+        res = resource_manager_find(ap.project->RM.image_sets, it->image_name);
+        int count = eina_list_count(res->common.uses___);
+        if (count <= 4) return strdup("");
+        char buf[256];
+        snprintf(buf, 256, "%d", count);
+        return strdup(buf);
+     }
+   else
+     {
+        if (strcmp(it->image_name, EFLETE_DUMMY_IMAGE_NAME) == 0)
+          return strdup("None");
+        return strdup(it->image_name);
+     }
 }
 
 /* icon fetching callback */
@@ -812,6 +849,75 @@ _grid_content_get(void *data,
 }
 #undef MAX_ICON_SIZE
 
+/* icon fetching callback */
+static Evas_Object *
+_grid_image_set_content_get(void *data,
+                            Evas_Object *obj,
+                            const char  *part)
+{
+   Item *it = data;
+   Evas_Object *image_obj = NULL;
+   Evas_Object *grid = (Evas_Object *)obj;
+   Resource2 *res;
+   Image2 *img_res = NULL;
+
+   assert(it != NULL);
+   assert(grid != NULL);
+
+   if (!strcmp(part, "elm.swallow.end") && (strcmp(it->image_name, 
EFLETE_DUMMY_IMAGE_NAME) != 0))
+     {
+        res = resource_manager_find(ap.project->RM.image_sets, it->image_name);
+        if (!res->common.used_in)
+          {
+             image_obj = elm_icon_add(grid);
+             elm_image_file_set(image_obj, ap.path.theme_edj, 
"elm/image/icon/attention");
+             evas_object_show(image_obj);
+          }
+     }
+   else
+     {
+#ifndef _WIN32
+        image_obj = elm_thumb_add(grid);
+#else
+        image_obj = elm_image_add(grid);
+#endif /* _win32 */
+        elm_object_style_set(image_obj, "noframe");
+        res = resource_manager_find(ap.project->RM.image_sets, it->image_name);
+        int count = eina_list_count(res->common.uses___);
+
+        if (!strcmp(part, "elm.swallow.first"))
+          {
+             img_res = (Image2 *)(eina_list_nth(res->common.uses___, 0));
+          }
+        else if (!strcmp(part, "elm.swallow.second"))
+          {
+             img_res = (Image2 *)(eina_list_nth(res->common.uses___, 1));
+          }
+        else if (!strcmp(part, "elm.swallow.third"))
+          {
+             img_res = (Image2 *)(eina_list_nth(res->common.uses___, 2));
+          }
+        else if (!strcmp(part, "elm.swallow.fouth"))
+          {
+             if (count > 4) goto empty_content;
+             img_res = (Image2 *)(eina_list_nth(res->common.uses___, 3));
+          }
+        if (!img_res) goto empty_content;
+#ifndef _WIN32
+        elm_thumb_file_set(image_obj, img_res->source, NULL);
+#else
+        elm_image_file_set(image_obj, img_res->source, NULL);
+#endif /* _WIN32 */
+        elm_object_style_set(image_obj, "noframe");
+        evas_object_show(image_obj);
+     }
+   return image_obj;
+
+empty_content:
+   evas_object_del(image_obj);
+   return NULL;
+}
+
 ITEM_SEARCH_FUNC(gengrid, ELM_GENGRID_ITEM_SCROLLTO_MIDDLE, NULL)
 
 static void
@@ -920,6 +1026,16 @@ popup_gengrid_image_helper(const char *title, Evas_Object 
*follow_up,
         gic->func.del = _grid_del;
      }
 
+   if (!gic_set)
+     {
+        gic_set = elm_gengrid_item_class_new();
+        gic_set->item_style = "image_set";
+        gic_set->func.text_get = _grid_label_get;
+        gic_set->func.content_get = _grid_image_set_content_get;
+        gic_set->func.del = _grid_del;
+     }
+
+
    _image_gengrid_init(helper_data);
 
    ENTRY_ADD(fs, entry, true);

-- 


Reply via email to