rimmed pushed a commit to branch master.

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

commit c0471f1d99a057af34d75e20570ef6c28ab10ab9
Author: Mykyta Biliavskyi <m.biliavs...@samsung.com>
Date:   Wed Jan 11 16:03:39 2017 +0200

    Property: use filter for image properies.
    
    This commit add ability to use genlist filter for image properties. In
    image manger already presents three different types of image: usual
    image, images set and image form images set. Each of this tyoe had uniqe
    attributes. Using filters inside image properties make possible to
    demonstrate only that attributes, which are related to selected image.
    
    T5065
---
 src/bin/ui/property/property.c         |   2 +-
 src/bin/ui/property/property_image.c   | 411 ++++++++++++++++++++++++++-------
 src/bin/ui/property/property_private.h |  59 ++++-
 3 files changed, 374 insertions(+), 98 deletions(-)

diff --git a/src/bin/ui/property/property.c b/src/bin/ui/property/property.c
index 90ef278..3d253e9 100644
--- a/src/bin/ui/property/property.c
+++ b/src/bin/ui/property/property.c
@@ -279,7 +279,7 @@ property_add(Evas_Object *parent, Property_Mode mode)
 #ifdef HAVE_TIZEN
          elm_layout_signal_emit(pd->layout, "elm,state,tizen,set", "elm");
 #endif
-         property_image_manager_init();
+         property_image_manager_init(pd);
          items = property_image_manager_items_get();
          break;
       case PROPERTY_MODE_SOUND:
diff --git a/src/bin/ui/property/property_image.c 
b/src/bin/ui/property/property_image.c
index 95f5623..9f31607 100644
--- a/src/bin/ui/property/property_image.c
+++ b/src/bin/ui/property/property_image.c
@@ -24,16 +24,14 @@
 
 #define EMPTY_VALUE " - "
 
+#define IMAGE_MASK(TYPE) (1u << TYPE)
+#define IMAGE_NORMAL_TYPE IMAGE_MASK(SINGLE_IMAGE)
+#define IMAGE_SET_TYPE IMAGE_MASK(IMAGE_SET)
+#define IMAGE_SET_IMAGE_TYPE IMAGE_MASK(IMAGE_SET_ITEM)
+
 typedef struct {
-   Property_Attribute item_name;
-   Property_Attribute item_location;
-   Property_Attribute item_type;
-   Property_Attribute item_image_compression;
-   Property_Attribute item_image_quality;
-   Property_Attribute item_width;
-   Property_Attribute item_height;
-
-   Image_Item *image;
+   Image_Item *img;
+   Property_Attribute items[PROPERTY_IMAGE_ITEM_LAST];
 } Property_Image_Data;
 
 /* accroding to Edje_Edit.h */
@@ -45,7 +43,15 @@ static const char *edje_image_compression[] = { "RAW",
                                                 "LOSSY_ETC2",
                                                 NULL};
 
-static Property_Image_Data image_data;
+static Property_Image_Data image_pd;
+
+struct _Property_Image_Update_Info {
+   Property_Attribute *pa;
+   Property_Action *action;
+};
+typedef struct _Property_Image_Update_Info Property_Image_Update_Info;
+
+static Property_Image_Update_Info attribute_map[ATTRIBUTE_IMAGE_ITEM_LAST];
 
 static void
 _image_info_type_setup(Property_Action *action, const char *image_name)
@@ -54,6 +60,12 @@ _image_info_type_setup(Property_Action *action, const char 
*image_name)
 
    assert(image_name != NULL);
 
+   if (image_pd.img->type == IMAGE_SET)
+     {
+        elm_object_text_set(action->control, _("Set of images"));
+        return;
+     }
+
    const char *dot = strrchr(image_name, '.');
    if ((!dot) || (dot == image_name))
      {
@@ -88,117 +100,348 @@ _update_cb(Property_Attribute *pa __UNUSED__, 
Property_Action *action)
 {
    Eina_Stringshare *str;
 
-   if (!image_data.image)
-     {
-        elm_object_text_set(action->control, EMPTY_VALUE);
-        return true;
-     }
 
    switch (action->type.attribute_image)
      {
-      case PROPERTY_IMAGE_CONTROL_NAME:
-         elm_object_text_set(action->control, image_data.image->image_name);
+      case ATTRIBUTE_IMAGE_ITEM_NAME:
+         elm_object_text_set(action->control, image_pd.img->image_name);
+         break;
+      case ATTRIBUTE_IMAGE_ITEM_TYPE:
+         _image_info_type_setup(action, image_pd.img->image_name);
          break;
-      case PROPERTY_IMAGE_CONTROL_LOCATION:
-         if (image_data.image->comp_type != EDJE_EDIT_IMAGE_COMP_USER)
+      case ATTRIBUTE_IMAGE_ITEM_LOCATION:
+         if (image_pd.img->comp_type != EDJE_EDIT_IMAGE_COMP_USER)
            {
-              str = eina_stringshare_printf("edje/images/%i", 
image_data.image->id);
+              str = eina_stringshare_printf("edje/images/%i", 
image_pd.img->id);
               elm_object_text_set(action->control, str);
               eina_stringshare_del(str);
            }
          else
-           elm_object_text_set(action->control, image_data.image->image_name);
+           elm_object_text_set(action->control, image_pd.img->image_name);
          break;
-      case PROPERTY_IMAGE_CONTROL_TYPE:
-         _image_info_type_setup(action, image_data.image->image_name);
-         break;
-      case PROPERTY_IMAGE_CONTROL_COMPRESSION:
+      case ATTRIBUTE_IMAGE_ITEM_COMPRESSION:
          elm_object_text_set(action->control,
-                             
edje_image_compression[image_data.image->comp_type]);
+                             edje_image_compression[image_pd.img->comp_type]);
          break;
-      case PROPERTY_IMAGE_CONTROL_QUALITY:
-         if (image_data.image->comp_type == EDJE_EDIT_IMAGE_COMP_LOSSY)
+      case ATTRIBUTE_IMAGE_ITEM_QUALITY:
+         if (image_pd.img->comp_type == EDJE_EDIT_IMAGE_COMP_LOSSY)
            {
-              str = eina_stringshare_printf("%i", image_data.image->quality);
+              str = eina_stringshare_printf("%i", image_pd.img->quality);
               elm_object_text_set(action->control, str);
               eina_stringshare_del(str);
            }
          else
            elm_object_text_set(action->control, EMPTY_VALUE);
          break;
-      case PROPERTY_IMAGE_CONTROL_WIDTH:
-         str = eina_stringshare_printf("%d", image_data.image->width);
+      case ATTRIBUTE_IMAGE_ITEM_WIDTH:
+         str = eina_stringshare_printf("%d", image_pd.img->width);
          elm_object_text_set(action->control, str);
          eina_stringshare_del(str);
          break;
-      case PROPERTY_IMAGE_CONTROL_HEIGHT:
-         str = eina_stringshare_printf("%d", image_data.image->height);
+      case ATTRIBUTE_IMAGE_ITEM_HEIGHT:
+         str = eina_stringshare_printf("%d", image_pd.img->height);
          elm_object_text_set(action->control, str);
          eina_stringshare_del(str);
          break;
+      case ATTRIBUTE_IMAGE_ITEM_BORDER_L:
+         elm_spinner_value_set(action->control, image_pd.img->border_l);
+         break;
+      case ATTRIBUTE_IMAGE_ITEM_BORDER_R:
+         elm_spinner_value_set(action->control, image_pd.img->border_r);
+         break;
+      case ATTRIBUTE_IMAGE_ITEM_BORDER_T:
+         elm_spinner_value_set(action->control, image_pd.img->border_t);
+         break;
+      case ATTRIBUTE_IMAGE_ITEM_BORDER_B:
+         elm_spinner_value_set(action->control, image_pd.img->border_b);
+         break;
+      case ATTRIBUTE_IMAGE_ITEM_MIN_W:
+         elm_spinner_value_set(action->control, image_pd.img->min_w);
+         break;
+      case ATTRIBUTE_IMAGE_ITEM_MIN_H:
+         elm_spinner_value_set(action->control, image_pd.img->min_h);
+         break;
+      case ATTRIBUTE_IMAGE_ITEM_MAX_W:
+         elm_spinner_value_set(action->control, image_pd.img->max_w);
+         break;
+      case ATTRIBUTE_IMAGE_ITEM_MAX_H:
+         elm_spinner_value_set(action->control, image_pd.img->max_h);
+         break;
+      case ATTRIBUTE_IMAGE_ITEM_BORDER_SCALE:
+         elm_spinner_value_set(action->control, image_pd.img->border_scale);
+         break;
       default:
+         CRIT("Failed to update attribute [%s]", action->name ? action->name : 
"unknown");
+         abort();
          break;
      }
    return true;
 }
 
 static void
-_on_image_selected(void *data __UNUSED__,
+_on_image_selected(void *data,
                    Evas_Object *obj __UNUSED__,
                    void *event_info)
 {
+   Property_Data *pd = (Property_Data *)data;
    Image_Item *image = (Image_Item *)event_info;
 
-   image_data.image = image;
+   image_pd.img = image;
+   if (!image) return;
 
-   _update_cb(NULL, &image_data.item_name.action1);
-   _update_cb(NULL, &image_data.item_type.action1);
-   _update_cb(NULL, &image_data.item_location.action1);
-   _update_cb(NULL, &image_data.item_image_compression.action1);
-   _update_cb(NULL, &image_data.item_image_quality.action1);
-   _update_cb(NULL, &image_data.item_width.action1);
-   _update_cb(NULL, &image_data.item_height.action1);
+   GENLIST_FILTER_APPLY(pd->genlist);
+   
property_item_update_recursively(&image_pd.items[PROPERTY_IMAGE_ITEM_INFO_TITLE]);
+   
property_item_update_recursively(&image_pd.items[PROPERTY_IMAGE_ITEM_IMAGE_PROPERTY_TITLE]);
+   
property_item_update_recursively(&image_pd.items[PROPERTY_IMAGE_ITEM_SET_IMAGE_PROPERTY_TITLE]);
+}
+
+static void
+_init_cb(Property_Attribute *pa, Property_Action *action)
+{
+   assert(pa != NULL);
+   assert(action != NULL);
+   assert(action->control != NULL);
+
+   switch (action->type.attribute_image)
+     {
+      case ATTRIBUTE_IMAGE_ITEM_NAME:
+      case ATTRIBUTE_IMAGE_ITEM_TYPE:
+      case ATTRIBUTE_IMAGE_ITEM_LOCATION:
+      case ATTRIBUTE_IMAGE_ITEM_COMPRESSION:
+      case ATTRIBUTE_IMAGE_ITEM_QUALITY:
+      case ATTRIBUTE_IMAGE_ITEM_WIDTH:
+      case ATTRIBUTE_IMAGE_ITEM_HEIGHT:
+         break;
+      case ATTRIBUTE_IMAGE_ITEM_BORDER_L:
+      case ATTRIBUTE_IMAGE_ITEM_BORDER_R:
+      case ATTRIBUTE_IMAGE_ITEM_BORDER_T:
+      case ATTRIBUTE_IMAGE_ITEM_BORDER_B:
+      case ATTRIBUTE_IMAGE_ITEM_MIN_W:
+      case ATTRIBUTE_IMAGE_ITEM_MIN_H:
+      case ATTRIBUTE_IMAGE_ITEM_MAX_W:
+      case ATTRIBUTE_IMAGE_ITEM_MAX_H:
+      case ATTRIBUTE_IMAGE_ITEM_BORDER_SCALE:
+         elm_spinner_value_set(action->control, 0);
+         elm_object_disabled_set(action->control, true);
+         break;
+      case ATTRIBUTE_IMAGE_ITEM_LAST:
+         break;
+      default:
+         CRIT("Failed to init attribute [%s]", action->name ? action->name : 
"unknown");
+         abort();
+         break;
+     }
+}
+
+/* blocks */
+static inline void
+_action_internal(Property_Action *action, const char *name, const char *units,
+                 Property_Control control_type, Attribute_Image_Item attribute,
+                 const char *tooltip)
+{
+   /* check that we haven't inited this action already */
+   assert(action->update_cb == NULL);
+
+   action->name = name;
+   action->units = units;
+   action->tooltip = eina_stringshare_add(tooltip);
+   action->control_type = control_type;
+   action->type.attribute_image = attribute;
+   action->update_cb = _update_cb;
+   action->init_cb = _init_cb;
+}
+
+static inline void
+_action1(Property_Attribute *pa, const char *name, const char *units,
+         Property_Control control_type, Attribute_Image_Item attribute,
+         const char *tooltip)
+{
+   _action_internal(&pa->action1, name, units, control_type, attribute, 
tooltip);
+
+   assert(attribute_map[attribute].pa == NULL);
+   assert(attribute_map[attribute].action == NULL);
+
+   attribute_map[attribute].pa = pa;
+   attribute_map[attribute].action = &pa->action1;
+}
+
+static inline void
+_action2(Property_Attribute *pa, const char *name, const char *units,
+         Property_Control control_type, Attribute_Image_Item attribute,
+         const char *tooltip)
+{
+   _action_internal(&pa->action2, name, units, control_type, attribute, 
tooltip);
+
+   assert(attribute_map[attribute].pa == NULL);
+   assert(attribute_map[attribute].action == NULL);
+
+   attribute_map[attribute].pa = pa;
+   attribute_map[attribute].action = &pa->action2;
+}
+
+static Eina_List *
+_subitems_get(Property_Attribute *pa)
+{
+   Eina_List *items = NULL;
+
+   assert(pa != NULL);
+#define APPEND(TYPE) items = eina_list_append(items, &image_pd.items[TYPE]);
+   switch (pa->type.image_item)
+     {
+      case PROPERTY_IMAGE_ITEM_INFO_TITLE:
+         APPEND(PROPERTY_IMAGE_ITEM_NAME);
+         APPEND(PROPERTY_IMAGE_ITEM_TYPE);
+         break;
+      case PROPERTY_IMAGE_ITEM_IMAGE_PROPERTY_TITLE:
+         APPEND(PROPERTY_IMAGE_ITEM_LOCATION);
+         APPEND(PROPERTY_IMAGE_ITEM_COMPRESSION);
+         APPEND(PROPERTY_IMAGE_ITEM_QUALITY);
+         APPEND(PROPERTY_IMAGE_ITEM_WIDTH);
+         APPEND(PROPERTY_IMAGE_ITEM_HEIGHT);
+         break;
+      case PROPERTY_IMAGE_ITEM_SET_IMAGE_PROPERTY_TITLE:
+         APPEND(PROPERTY_IMAGE_ITEM_BORDER_H);
+         APPEND(PROPERTY_IMAGE_ITEM_BORDER_V);
+         APPEND(PROPERTY_IMAGE_ITEM_MIN);
+         APPEND(PROPERTY_IMAGE_ITEM_MAX);
+         APPEND(PROPERTY_IMAGE_ITEM_BORDER_SCALE);
+         break;
+      default:
+         CRIT("items callbase not found for %s", pa->name);
+         abort();
+     }
+#undef APPEND
+   return items;
+}
+
+static Eina_Bool
+_filter_cb(Property_Attribute *pa)
+{
+   assert(pa != NULL);
+
+   if (image_pd.img)
+     {
+        if (pa->filter_data.image_types & IMAGE_MASK(image_pd.img->type))
+          return true;
+     }
+   return false;
+}
+
+static void
+_init_items()
+{
+   Property_Image_Item it;
+#define IT image_pd.items[it]
+   for (it = 0; it < PROPERTY_IMAGE_ITEM_LAST; it++)
+     {
+        IT.type.image_item = it;
+        IT.filter_cb = _filter_cb;
+
+        IT.filter_data.image_types = ~0u;
+        switch(it)
+          {
+           case PROPERTY_IMAGE_ITEM_INFO_TITLE:
+              IT.name = _("Item info");
+              IT.expandable = true;
+              IT.expanded = true;
+              IT.expand_cb = _subitems_get;
+              IT.filter_data.image_types = IMAGE_NORMAL_TYPE | IMAGE_SET_TYPE 
| IMAGE_SET_IMAGE_TYPE;
+              break;
+           case PROPERTY_IMAGE_ITEM_NAME:
+              IT.name = _("Name");
+              _action1(&IT, NULL, NULL, PROPERTY_CONTROL_LABEL, 
ATTRIBUTE_IMAGE_ITEM_NAME, NULL);
+              IT.filter_data.image_types = IMAGE_NORMAL_TYPE | IMAGE_SET_TYPE 
| IMAGE_SET_IMAGE_TYPE;
+              break;
+           case PROPERTY_IMAGE_ITEM_TYPE:
+              IT.name = _("Type");
+              _action1(&IT, NULL, NULL, PROPERTY_CONTROL_LABEL, 
ATTRIBUTE_IMAGE_ITEM_TYPE, NULL);
+              IT.filter_data.image_types = IMAGE_NORMAL_TYPE | IMAGE_SET_TYPE 
| IMAGE_SET_IMAGE_TYPE;
+              break;
+           case PROPERTY_IMAGE_ITEM_IMAGE_PROPERTY_TITLE:
+              IT.name = _("Image info");
+              IT.expandable = true;
+              IT.expanded = true;
+              IT.expand_cb = _subitems_get;
+              IT.filter_data.image_types = IMAGE_NORMAL_TYPE | 
IMAGE_SET_IMAGE_TYPE;
+              break;
+            case PROPERTY_IMAGE_ITEM_LOCATION:
+              IT.name = _("Location");
+              _action1(&IT, NULL, NULL, PROPERTY_CONTROL_LABEL, 
ATTRIBUTE_IMAGE_ITEM_LOCATION, NULL);
+              IT.filter_data.image_types = IMAGE_NORMAL_TYPE;
+              break;
+           case PROPERTY_IMAGE_ITEM_COMPRESSION:
+              IT.name = _("Image compression");
+              _action1(&IT, NULL, NULL, PROPERTY_CONTROL_LABEL, 
ATTRIBUTE_IMAGE_ITEM_COMPRESSION, NULL);
+              IT.filter_data.image_types = IMAGE_NORMAL_TYPE | 
IMAGE_SET_IMAGE_TYPE;
+              break;
+           case PROPERTY_IMAGE_ITEM_QUALITY:
+              IT.name = _("Image quality");
+              _action1(&IT, NULL, NULL, PROPERTY_CONTROL_LABEL, 
ATTRIBUTE_IMAGE_ITEM_QUALITY, NULL);
+              IT.filter_data.image_types = IMAGE_NORMAL_TYPE | 
IMAGE_SET_IMAGE_TYPE;
+              break;
+           case PROPERTY_IMAGE_ITEM_WIDTH:
+              IT.name = _("Width");
+              _action1(&IT, NULL, NULL, PROPERTY_CONTROL_LABEL, 
ATTRIBUTE_IMAGE_ITEM_WIDTH, NULL);
+              IT.filter_data.image_types = IMAGE_NORMAL_TYPE | 
IMAGE_SET_IMAGE_TYPE;
+              break;
+           case PROPERTY_IMAGE_ITEM_HEIGHT:
+              IT.name = _("Height");
+              _action1(&IT, NULL, NULL, PROPERTY_CONTROL_LABEL, 
ATTRIBUTE_IMAGE_ITEM_HEIGHT, NULL);
+              IT.filter_data.image_types = IMAGE_NORMAL_TYPE | 
IMAGE_SET_IMAGE_TYPE;
+              break;
+           case PROPERTY_IMAGE_ITEM_SET_IMAGE_PROPERTY_TITLE:
+              IT.name = _("Set image info");
+              IT.expandable = true;
+              IT.expanded = true;
+              IT.expand_cb = _subitems_get;
+              IT.filter_data.image_types = IMAGE_SET_IMAGE_TYPE;
+              break;
+            case PROPERTY_IMAGE_ITEM_BORDER_H:
+              IT.name = _("Border");
+              _action1(&IT, _("left:"), _("px"), PROPERTY_CONTROL_SPINNER, 
ATTRIBUTE_IMAGE_ITEM_BORDER_L, NULL);
+              _action2(&IT, _("right:"), _("px"), PROPERTY_CONTROL_SPINNER, 
ATTRIBUTE_IMAGE_ITEM_BORDER_R, NULL);
+              IT.filter_data.image_types = IMAGE_SET_IMAGE_TYPE;
+              break;
+           case PROPERTY_IMAGE_ITEM_BORDER_V:
+              IT.name = "";
+              _action1(&IT, _("top:"), _("px"), PROPERTY_CONTROL_SPINNER, 
ATTRIBUTE_IMAGE_ITEM_BORDER_T, NULL);
+              _action2(&IT, _("bottom:"), _("px"), PROPERTY_CONTROL_SPINNER, 
ATTRIBUTE_IMAGE_ITEM_BORDER_B, NULL);
+              IT.filter_data.image_types = IMAGE_SET_IMAGE_TYPE;
+              break;
+           case PROPERTY_IMAGE_ITEM_MIN:
+              IT.name = _("Minimum size");
+              _action1(&IT, _("width:"), _("px"), PROPERTY_CONTROL_SPINNER, 
ATTRIBUTE_IMAGE_ITEM_MIN_W, NULL);
+              _action2(&IT, _("height:"), _("px"), PROPERTY_CONTROL_SPINNER, 
ATTRIBUTE_IMAGE_ITEM_MIN_H, NULL);
+              IT.filter_data.image_types = IMAGE_SET_IMAGE_TYPE;
+              break;
+           case PROPERTY_IMAGE_ITEM_MAX:
+              IT.name = _("Maximum size");
+              _action1(&IT, _("width:"), _("px"), PROPERTY_CONTROL_SPINNER, 
ATTRIBUTE_IMAGE_ITEM_MAX_W, NULL);
+              _action2(&IT, _("height:"), _("px"), PROPERTY_CONTROL_SPINNER, 
ATTRIBUTE_IMAGE_ITEM_MAX_H, NULL);
+              IT.filter_data.image_types = IMAGE_SET_IMAGE_TYPE;
+              break;
+           case PROPERTY_IMAGE_ITEM_BORDER_SCALE:
+              IT.name = _("Border scale");
+              _action1(&IT, NULL, NULL, PROPERTY_CONTROL_SPINNER, 
ATTRIBUTE_IMAGE_ITEM_BORDER_SCALE, NULL);
+              IT.filter_data.image_types = IMAGE_SET_IMAGE_TYPE;
+              break;
+           default:
+              CRIT("Failed to init item with type [%d]", it);
+              abort();
+              break;
+          }
+     }
+#undef IT
 }
 
 void
-property_image_manager_init()
+property_image_manager_init(Property_Data *pd)
 {
-   image_data.item_name.name = "Name";
-   image_data.item_name.action1.control_type = PROPERTY_CONTROL_LABEL;
-   image_data.item_name.action1.update_cb = _update_cb;
-   image_data.item_name.action1.type.attribute_image = 
PROPERTY_IMAGE_CONTROL_NAME;
-
-   image_data.item_location.name = "Location";
-   image_data.item_location.action1.control_type = PROPERTY_CONTROL_LABEL;
-   image_data.item_location.action1.update_cb = _update_cb;
-   image_data.item_location.action1.type.attribute_image = 
PROPERTY_IMAGE_CONTROL_LOCATION;
-
-   image_data.item_type.name = "Type";
-   image_data.item_type.action1.control_type = PROPERTY_CONTROL_LABEL;
-   image_data.item_type.action1.update_cb = _update_cb;
-   image_data.item_type.action1.type.attribute_image = 
PROPERTY_IMAGE_CONTROL_TYPE;
-
-   image_data.item_image_compression.name = "Image compression";
-   image_data.item_image_compression.action1.control_type = 
PROPERTY_CONTROL_LABEL;
-   image_data.item_image_compression.action1.update_cb = _update_cb;
-   image_data.item_image_compression.action1.type.attribute_image = 
PROPERTY_IMAGE_CONTROL_COMPRESSION;
-
-   image_data.item_image_quality.name = "Image quality";
-   image_data.item_image_quality.action1.control_type = PROPERTY_CONTROL_LABEL;
-   image_data.item_image_quality.action1.update_cb = _update_cb;
-   image_data.item_image_quality.action1.type.attribute_image = 
PROPERTY_IMAGE_CONTROL_QUALITY;
-
-   image_data.item_width.name = "Width";
-   image_data.item_width.action1.control_type = PROPERTY_CONTROL_LABEL;
-   image_data.item_width.action1.update_cb = _update_cb;
-   image_data.item_width.action1.type.attribute_image = 
PROPERTY_IMAGE_CONTROL_WIDTH;
-
-   image_data.item_height.name = "Height";
-   image_data.item_height.action1.control_type = PROPERTY_CONTROL_LABEL;
-   image_data.item_height.action1.update_cb = _update_cb;
-   image_data.item_height.action1.type.attribute_image = 
PROPERTY_IMAGE_CONTROL_HEIGHT;
-
-   evas_object_smart_callback_add(ap.win, SIGNAL_IMAGE_SELECTED, 
_on_image_selected, NULL);
+   assert(pd != NULL);
+
+   _init_items();
+
+   evas_object_smart_callback_add(ap.win, SIGNAL_IMAGE_SELECTED, 
_on_image_selected, pd);
 }
 
 Eina_List *
@@ -206,13 +449,9 @@ property_image_manager_items_get()
 {
    Eina_List *items = NULL;
 
-   items = eina_list_append(items, &image_data.item_name);
-   items = eina_list_append(items, &image_data.item_location);
-   items = eina_list_append(items, &image_data.item_type);
-   items = eina_list_append(items, &image_data.item_image_compression);
-   items = eina_list_append(items, &image_data.item_image_quality);
-   items = eina_list_append(items, &image_data.item_width);
-   items = eina_list_append(items, &image_data.item_height);
+   items = eina_list_append(items, 
&image_pd.items[PROPERTY_IMAGE_ITEM_INFO_TITLE]);
+   items = eina_list_append(items, 
&image_pd.items[PROPERTY_IMAGE_ITEM_IMAGE_PROPERTY_TITLE]);
+   items = eina_list_append(items, 
&image_pd.items[PROPERTY_IMAGE_ITEM_SET_IMAGE_PROPERTY_TITLE]);
 
    return items;
 }
diff --git a/src/bin/ui/property/property_private.h 
b/src/bin/ui/property/property_private.h
index 13fbc07..19d6aae 100644
--- a/src/bin/ui/property/property_private.h
+++ b/src/bin/ui/property/property_private.h
@@ -91,15 +91,27 @@ typedef Eina_List * (* Property_Expand_Cb) 
(Property_Attribute *);
 #pragma GCC poison elm_genlist_filter_set
 
 typedef enum {
-   PROPERTY_IMAGE_CONTROL_NAME,
-   PROPERTY_IMAGE_CONTROL_LOCATION,
-   PROPERTY_IMAGE_CONTROL_TYPE,
-   PROPERTY_IMAGE_CONTROL_COMPRESSION,
-   PROPERTY_IMAGE_CONTROL_QUALITY,
-   PROPERTY_IMAGE_CONTROL_WIDTH,
-   PROPERTY_IMAGE_CONTROL_HEIGHT,
-   PROPERTY_IMAGE_CONTROL_LAST
-} Attribute_Image;
+   ATTRIBUTE_IMAGE_ITEM_NAME,
+   ATTRIBUTE_IMAGE_ITEM_TYPE,
+
+   ATTRIBUTE_IMAGE_ITEM_LOCATION,
+   ATTRIBUTE_IMAGE_ITEM_COMPRESSION,
+   ATTRIBUTE_IMAGE_ITEM_QUALITY,
+   ATTRIBUTE_IMAGE_ITEM_WIDTH,
+   ATTRIBUTE_IMAGE_ITEM_HEIGHT,
+
+   ATTRIBUTE_IMAGE_ITEM_BORDER_L,
+   ATTRIBUTE_IMAGE_ITEM_BORDER_R,
+   ATTRIBUTE_IMAGE_ITEM_BORDER_T,
+   ATTRIBUTE_IMAGE_ITEM_BORDER_B,
+   ATTRIBUTE_IMAGE_ITEM_MIN_W,
+   ATTRIBUTE_IMAGE_ITEM_MIN_H,
+   ATTRIBUTE_IMAGE_ITEM_MAX_W,
+   ATTRIBUTE_IMAGE_ITEM_MAX_H,
+   ATTRIBUTE_IMAGE_ITEM_BORDER_SCALE,
+
+   ATTRIBUTE_IMAGE_ITEM_LAST
+} Attribute_Image_Item;
 
 typedef enum {
    ATTRIBUTE_DEMO_ITEM_TEXT_NAME,
@@ -173,7 +185,7 @@ struct _Property_Action {
    Eina_Stringshare *tooltip;
    union {
       Attribute attribute; /**< type for group properties */
-      Attribute_Image attribute_image; /**< type for group properties */
+      Attribute_Image_Item attribute_image; /**< type for group properties */
       Attribute_Demo_Item attribute_demo; /**< type for demo properties */
       Attribute_Textblock_Item attribute_textblock; /**< type for textblock 
properties */
    } type; /**< submodule-specific enums */
@@ -387,6 +399,29 @@ typedef enum {
    PROPERTY_SOUND_ITEM_LAST
 } Property_Sound_Item;
 
+/* Enum of property_image items. */
+typedef enum {
+     PROPERTY_IMAGE_ITEM_INFO_TITLE,
+     PROPERTY_IMAGE_ITEM_NAME,
+     PROPERTY_IMAGE_ITEM_TYPE,
+
+     PROPERTY_IMAGE_ITEM_IMAGE_PROPERTY_TITLE,
+     PROPERTY_IMAGE_ITEM_LOCATION,
+     PROPERTY_IMAGE_ITEM_COMPRESSION,
+     PROPERTY_IMAGE_ITEM_QUALITY,
+     PROPERTY_IMAGE_ITEM_WIDTH,
+     PROPERTY_IMAGE_ITEM_HEIGHT,
+
+     PROPERTY_IMAGE_ITEM_SET_IMAGE_PROPERTY_TITLE,
+     PROPERTY_IMAGE_ITEM_BORDER_H,
+     PROPERTY_IMAGE_ITEM_BORDER_V,
+     PROPERTY_IMAGE_ITEM_BORDER_SCALE,
+     PROPERTY_IMAGE_ITEM_MIN,
+     PROPERTY_IMAGE_ITEM_MAX,
+
+     PROPERTY_IMAGE_ITEM_LAST
+} Property_Image_Item;
+
 /* Enum of property_demo items. */
 typedef enum {
    PROPERTY_DEMO_ITEM_TEXT_TITLE,
@@ -460,6 +495,7 @@ struct _Property_Attribute {
    union {
       Property_Group_Item group_item;
       Property_Sound_Item sound_item;
+      Property_Image_Item image_item;
       Property_Demo_Item demo_item;
       Property_Textblock_Item textblock_item;
    } type;
@@ -474,6 +510,7 @@ struct _Property_Attribute {
    union {
       unsigned int part_types;
       unsigned int sound_types;
+      unsigned int image_types;
       unsigned int action_types;
       unsigned int demo_types;
       unsigned int textblock_types;
@@ -554,7 +591,7 @@ property_color_class_manager_items_get(void);
 
 /* image manager submodule */
 void
-property_image_manager_init(void);
+property_image_manager_init(Property_Data *pd);
 
 Eina_List *
 property_image_manager_items_get(void);

-- 


Reply via email to