[multibuttonentry] fix the bug of label set
authorHyunsil Park <hyunsil.park@samsung.com>
Wed, 9 Feb 2011 13:31:26 +0000 (22:31 +0900)
committerHyunsil Park <hyunsil.park@samsung.com>
Wed, 9 Feb 2011 13:31:26 +0000 (22:31 +0900)
src/lib/elm_multibuttonentry.c

index 28e364b..04bfbc8 100644 (file)
@@ -604,13 +604,42 @@ _del_button(Evas_Object *obj)
      }\r
 }\r
 \r
+static void\r
+_resize_button(Evas_Object *btn, Evas_Object *label, Evas_Coord *realw, Evas_Coord *vieww)\r
+{\r
+   Evas_Coord rw, vw;\r
+   Evas_Coord w_label, h_label, w_btn, h_btn, padding_outer, padding_inner;\r
+\r
+   // decide the size of button\r
+   evas_object_size_hint_min_get(label, &w_label, &h_label);\r
+   edje_object_part_geometry_get(btn, "elm.base", NULL, NULL, NULL, &h_btn);\r
+   edje_object_part_geometry_get(btn, "left.padding", NULL, NULL, &padding_outer, NULL);\r
+   edje_object_part_geometry_get(btn, "left.inner.padding", NULL, NULL, &padding_inner, NULL);    \r
+   w_btn = w_label + 2*padding_outer + 2*padding_inner;   \r
+\r
+   rw = w_btn;\r
+   vw =(MAX_W_BTN < w_btn) ? MAX_W_BTN : w_btn;    \r
+\r
+   //resize btn and label\r
+   evas_object_resize(btn, vw, h_btn);\r
+   evas_object_size_hint_min_set(btn, vw, h_btn);\r
+   if ( (rw != vw) &&  (vw - 2*padding_outer - 2*padding_inner >=0))\r
+     {\r
+        evas_object_resize(label, vw - 2*padding_outer - 2*padding_inner, h_label);   \r
+        elm_label_wrap_width_set(label, vw - 2*padding_outer - 2*padding_inner ); \r
+     }\r
+\r
+   if(realw) *realw = rw;\r
+   if(vieww) *vieww = vw;\r
+}\r
+\r
 static Elm_Multibuttonentry_Item*\r
 _add_button_item(Evas_Object *obj, const char *str, Multibuttonentry_Pos pos, const Elm_Multibuttonentry_Item *reference, void *data)\r
 {\r
    Elm_Multibuttonentry_Item *item;\r
    Evas_Object *btn;\r
    Evas_Object *label;\r
-   Evas_Coord w_label, h_label, w_btn, h_btn, padding_outer, padding_inner;\r
+   //Evas_Coord w_label, h_label, w_btn, h_btn, padding_outer, padding_inner;\r
    Widget_Data *wd = elm_widget_data_get(obj);\r
    if (!wd || !wd->box || !wd->entry) return NULL;\r
 \r
@@ -630,23 +659,19 @@ _add_button_item(Evas_Object *obj, const char *str, Multibuttonentry_Pos pos, co
    elm_label_ellipsis_set(label, EINA_TRUE);\r
    edje_object_part_swallow(btn, "elm.label", label);\r
 \r
-   // decide the size of button\r
-   evas_object_size_hint_min_get(label, &w_label, &h_label);\r
-   edje_object_part_geometry_get(btn, "elm.base", NULL, NULL, NULL, &h_btn);\r
-   edje_object_part_geometry_get(btn, "left.padding", NULL, NULL, &padding_outer, NULL);\r
-   edje_object_part_geometry_get(btn, "left.inner.padding", NULL, NULL, &padding_inner, NULL);    \r
-   w_btn = w_label + 2*padding_outer + 2*padding_inner;   \r
-\r
    // append item list\r
    item = ELM_NEW(Elm_Multibuttonentry_Item);\r
    if (item) \r
      {\r
+        Evas_Coord rw, vw;\r
+        _resize_button(btn, label, &rw, &vw);\r
+\r
         item->multibuttonentry = obj;\r
         item->button = btn;\r
         item->label = label;\r
         item->data = data;\r
-        item->rw = w_btn;\r
-        item->vw =(MAX_W_BTN < w_btn) ? MAX_W_BTN : w_btn;      \r
+        item->rw = rw;\r
+        item->vw = vw;      \r
         item->visible = EINA_TRUE;\r
         \r
         switch(pos)\r
@@ -695,15 +720,6 @@ _add_button_item(Evas_Object *obj, const char *str, Multibuttonentry_Pos pos, co
           }\r
      }\r
 \r
-   //resize btn and label\r
-   evas_object_resize(btn, item->vw, h_btn);\r
-   evas_object_size_hint_min_set(btn, item->vw, h_btn);\r
-   if ( (item->rw != item->vw) &&  (item->vw - 2*padding_outer - 2*padding_inner >=0))\r
-     {\r
-        evas_object_resize(label, item->vw - 2*padding_outer - 2*padding_inner, h_label);   \r
-        elm_label_wrap_width_set(label, item->vw - 2*padding_outer - 2*padding_inner ); \r
-     }\r
-\r
    evas_object_smart_callback_call(obj, "added", item); // will be removed!\r
    evas_object_smart_callback_call(obj, "item,added", item);\r
 \r
@@ -1264,6 +1280,7 @@ elm_multibuttonentry_item_label_set(Elm_Multibuttonentry_Item *item, const char
         {\r
            Evas_Object *label = edje_object_part_swallow_get(_item->button, "elm.label");\r
            if (label)   elm_label_label_set (label, str);\r
+           _resize_button(_item->button, label, &_item->rw, &_item->vw);\r
            break;\r
         }\r
 }\r