rimmed pushed a commit to branch master.

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

commit 02a0bb447e226196ec7a9f53f00334205c72ac14
Author: Mykyta Biliavskyi <m.biliavs...@samsung.com>
Date:   Fri Dec 30 09:59:05 2016 +0200

    image manager: add basic view for image set.
    
    Image sets will shown as a gengrid item, that splitted into 4 pieces. In
    case if image set contain more that 4 images,amount of images in set
    will be displayed in right bottom part.
    Currently view and info area doesn't changed for image sets.
    
    @feature
---
 src/bin/ui/image_manager.c | 140 ++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 138 insertions(+), 2 deletions(-)

diff --git a/src/bin/ui/image_manager.c b/src/bin/ui/image_manager.c
index e824cd7..bd9da04 100644
--- a/src/bin/ui/image_manager.c
+++ b/src/bin/ui/image_manager.c
@@ -68,6 +68,7 @@ struct _Image_Manager
 
 static Image_Manager mng;
 static Elm_Gengrid_Item_Class *gic = NULL;
+static Elm_Gengrid_Item_Class *gic_set = NULL;
 
 static char *
 _grid_label_get(void *data,
@@ -75,7 +76,21 @@ _grid_label_get(void *data,
                 const char  *part __UNUSED__)
 {
    const Image_Item *it = data;
-   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
+     {
+        return strdup(it->image_name);
+     }
 }
 
 static void
@@ -166,6 +181,77 @@ _grid_content_get(void *data,
    return image_obj;
 }
 
+/* icon fetching callback */
+static Evas_Object *
+_grid_image_set_content_get(void *data,
+                            Evas_Object *obj,
+                            const char  *part)
+{
+   Image_Item *it = data;
+   Evas_Object *image_obj = NULL;
+   Evas_Object *grid = (Evas_Object *)obj;
+   Resource2 *res;
+   const char *source = NULL;
+   Image2 *img_res = NULL;
+
+   assert(it != NULL);
+   assert(grid != NULL);
+
+   elm_object_style_set(image_obj, "noframe");
+   if (!strcmp(part, "elm.swallow.end"))
+     {
+        it->is_used = true;
+        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);
+             it->is_used = false;
+          }
+     }
+   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___);
+        source = it->source;
+
+        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;
+        it->source = img_res->source;
+        _image_manager_image_setup(image_obj, it);
+        it->source = source;
+        evas_object_show(image_obj);
+     }
+   return image_obj;
+
+empty_content:
+   evas_object_del(image_obj);
+   return NULL;
+}
+
 /* deletion callback */
 static void
 _grid_del(void *data,
@@ -253,6 +339,32 @@ _grid_sel_cb(void *data __UNUSED__,
 }
 
 static inline Image_Item *
+_image_manager_gengrid_item_data_set_create(Evas_Object *edje_edit_obj,
+                                            Image_Set2 *res)
+{
+   Evas_Object *img;
+
+   assert(edje_edit_obj != NULL);
+   assert(res != NULL);
+
+   Image_Item *it = (Image_Item *)mem_malloc(sizeof(Image_Item));
+   it->image_name = eina_stringshare_add(res->common.name);
+   it->id = edje_edit_image_set_id_get(edje_edit_obj, it->image_name);
+   it->comp_type = 0;
+   it->quality = 0;
+
+   Image2 *res_image = NULL;
+   res_image = eina_list_data_get(res->common.uses___);
+   it->source = eina_stringshare_add(res_image->source);
+
+   img = _image_manager_image_create(ap.project->global_object, it);
+   elm_image_object_size_get(img, &it->width, &it->height);
+   evas_object_del(img);
+
+   return it;
+}
+
+static inline Image_Item *
 _image_manager_gengrid_item_data_create(Evas_Object *edje_edit_obj,
                                        Image2 *res)
 {
@@ -450,7 +562,8 @@ _image_manager_init(void)
    Image_Item *it = NULL;
    Eina_List *images = NULL;
    int counter = 0;
-   Image2 *res;
+   Image2 *res = NULL;
+   Image_Set2 *image_set = NULL;
 
    images = ap.project->RM.images;
 
@@ -471,6 +584,20 @@ _image_manager_init(void)
          elm_gengrid_item_bring_in(elm_gengrid_first_item_get(mng.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 = 
_image_manager_gengrid_item_data_set_create(ap.project->global_object, 
image_set);
+        elm_gengrid_item_append(mng.gengrid, gic_set, it, _grid_sel_cb, NULL);
+     }
+
    evas_object_smart_callback_call(ap.win, SIGNAL_IMAGE_SELECTED, NULL);
    return true;
 }
@@ -578,6 +705,15 @@ image_manager_add(void)
         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;
+     }
+
    mng.gengrid = elm_gengrid_add(mng.layout);
    elm_object_part_content_set(mng.layout, "elm.swallow.list", mng.gengrid);
    elm_gengrid_item_size_set(mng.gengrid, ITEM_WIDTH, ITEM_HEIGHT);

-- 


Reply via email to