[multibuttonentry] enable to change label size and guidetext sizedynamically
authorHyunsil Park <hyunsil.park@samsung.com>
Thu, 20 Jan 2011 09:10:36 +0000 (18:10 +0900)
committerHyunsil Park <hyunsil.park@samsung.com>
Thu, 20 Jan 2011 09:10:36 +0000 (18:10 +0900)
src/lib/elm_multibuttonentry.c

index 9c8907c..28e364b 100644 (file)
@@ -68,7 +68,7 @@ static void _changed_size_hint_cb(void *data, Evas *evas, Evas_Object *obj, void
 static void _resize_cb(void *data, Evas *evas, Evas_Object *obj, void *event);\r
 static void   _event_init(Evas_Object *obj);\r
 static void _contracted_state_set(Evas_Object *obj, int contracted);\r
-static void _view_update(Evas_Object *obj, Eina_Bool focused);\r
+static void _view_update(Evas_Object *obj);\r
 static void   _set_label(Evas_Object *obj, const char* str);\r
 static void _change_current_button_state(Evas_Object *obj, Multibuttonentry_Button_State state);\r
 static void   _change_current_button(Evas_Object *obj, Evas_Object *btn);\r
@@ -80,8 +80,6 @@ static Elm_Multibuttonentry_Item* _add_button_item(Evas_Object *obj, const char
 static void   _add_button(Evas_Object *obj, char *str);\r
 static void   _evas_key_up_cb(void *data, Evas *e , Evas_Object *obj , void *event_info );\r
 static void   _view_init(Evas_Object *obj);\r
-//static void _entry_focused(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__);\r
-//static void _entry_unfocused(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__);\r
 \r
 static void\r
 _del_hook(Evas_Object *obj)\r
@@ -140,7 +138,8 @@ _on_focus_hook(void *data __UNUSED__, Evas_Object *obj)
 \r
    if (!elm_widget_focus_get(obj) && !(elm_widget_disabled_get(obj)))\r
      {\r
-        _view_update(obj, EINA_FALSE);\r
+        wd->focused = EINA_FALSE;\r
+        _view_update(obj);\r
         evas_object_smart_callback_call(obj, "unfocused", NULL);\r
      }\r
 }\r
@@ -177,7 +176,8 @@ _signal_mouse_clicked(void *data, Evas_Object *obj, const char *emission, const
    Widget_Data *wd = elm_widget_data_get(data);\r
    if(!wd || !wd->base) return;\r
 \r
-   _view_update(data, EINA_TRUE);\r
+   wd->focused = EINA_TRUE;\r
+   _view_update(data);\r
    evas_object_smart_callback_call(data, "clicked", NULL);\r
 }\r
 \r
@@ -206,7 +206,7 @@ _resize_cb(void *data, Evas *evas, Evas_Object *obj, void *event)
    wd->w_box = w;\r
    wd->h_box = h;\r
 \r
-   //_view_update(data, EINA_FALSE);\r
+   _view_update(data);\r
 }\r
 \r
 static void\r
@@ -226,14 +226,6 @@ _event_init(Evas_Object *obj)
         evas_object_event_callback_add(wd->box, EVAS_CALLBACK_RESIZE, _resize_cb, obj);\r
         evas_object_event_callback_add(wd->box, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hint_cb, obj);\r
      }\r
-\r
-/*\r
-   if (wd->entry)\r
-   {\r
-      evas_object_smart_callback_add(wd->entry, "focused", _entry_focused, obj);\r
-      evas_object_smart_callback_add(wd->entry, "unfocused", _entry_unfocused, obj);\r
-   }\r
-*/\r
 }\r
 \r
 static void\r
@@ -363,22 +355,48 @@ _contracted_state_set(Evas_Object *obj, int contracted)
 }\r
 \r
 static void \r
-_view_update(Evas_Object *obj, Eina_Bool focused)\r
-{   \r
+_view_update(Evas_Object *obj)\r
+{\r
+   Evas_Coord room = 0, w = 0;\r
    Widget_Data *wd = elm_widget_data_get(obj);   \r
-   if (!wd || !wd->box || !wd->entry) return;\r
+   if (!wd || !wd->box || !wd->entry || !(wd->w_box > 0)) return;\r
 \r
+   room = wd->w_box;\r
+   room -= MIN_W_ENTRY;\r
+   \r
+   if (wd->rect)\r
+        {\r
+           evas_object_size_hint_min_get (wd->rect, &w, NULL);\r
+        room -= w;\r
+     }\r
+   \r
+   // update label\r
+   if (wd->label)\r
+        {\r
+        elm_box_unpack(wd->box, wd->label);\r
+           if (wd->rect) elm_box_pack_after (wd->box, wd->label, wd->rect);\r
+        else elm_box_pack_start(wd->box, wd->label);\r
+        evas_object_show(wd->label);\r
+        elm_label_wrap_width_set(wd->label, room);     \r
+        evas_object_size_hint_min_get(wd->label, &w, NULL);\r
+        room -= w;\r
+        }\r
+\r
+   if (wd->guidetext)\r
+      evas_object_size_hint_min_set(wd->guidetext, room, 0);   \r
+   \r
+   // update buttons in contracted mode\r
    if (wd->contracted == 1)\r
      {\r
         _contracted_state_set(obj, 0);\r
         _contracted_state_set(obj, 1);\r
      }\r
 \r
+   // update guidetext\r
    if (wd->contracted != 1)\r
      {\r
-        if (wd->guidetext && !eina_list_count (wd->items) && !elm_widget_focus_get(obj) && !focused)\r
-          {\r
-             \r
+        if (wd->guidetext && !eina_list_count (wd->items) && !elm_widget_focus_get(obj) && !wd->focused)\r
+          {            \r
              elm_box_unpack(wd->box, wd->guidetext);\r
              elm_box_unpack(wd->box, wd->entry);\r
              evas_object_hide(wd->entry);\r
@@ -393,66 +411,11 @@ _view_update(Evas_Object *obj, Eina_Bool focused)
              elm_box_pack_end(wd->box, wd->entry);\r
              evas_object_show(wd->entry);\r
 \r
-             if(elm_widget_focus_get(obj) || focused)\r
+             if(elm_widget_focus_get(obj) || wd->focused)\r
                 elm_object_focus(wd->entry);\r
           }\r
      }\r
-   \r
-#if 0\r
-   if (wd->guidetext && (wd->contracted != 1))\r
-     {\r
-        if (!eina_list_count (wd->items))\r
-          {\r
-             if (elm_widget_focus_get (obj) || focused)\r
-               {\r
-                  elm_box_unpack(wd->box, wd->entry);\r
-                  elm_box_unpack(wd->box, wd->guidetext);\r
-                  evas_object_hide(wd->guidetext);\r
-                           \r
-                  elm_box_pack_end(wd->box, wd->entry);\r
-                  evas_object_show(wd->entry);\r
-                  \r
-                  elm_object_focus(wd->entry);\r
-                  //elm_widget_focus_set(wd->entry, EINA_TRUE);   //FIXME\r
-               }\r
-             else\r
-               {\r
-                  elm_box_unpack(wd->box, wd->guidetext);\r
-                  elm_box_unpack(wd->box, wd->entry);\r
-                  evas_object_hide(wd->entry);\r
-\r
-                  elm_box_pack_end(wd->box, wd->guidetext);                     \r
-                  evas_object_show(wd->guidetext);\r
-               }\r
-          }\r
-        else\r
-          {\r
-             elm_box_unpack(wd->box, wd->entry);\r
-             elm_box_unpack(wd->box, wd->guidetext);\r
-             evas_object_hide(wd->guidetext);\r
-                      \r
-             elm_box_pack_end(wd->box, wd->entry);\r
-             evas_object_show(wd->entry);\r
-          }\r
-     }\r
-#endif\r
-}\r
-\r
-/*\r
-static void\r
-_entry_focused(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)\r
-{\r
-   printf("\n>>>>>>[%s][%d]\n", __FUNCTION__, __LINE__);\r
-   //if (data) _view_update (data);\r
-}\r
-\r
-static void\r
-_entry_unfocused(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)\r
-{\r
-   printf("\n>>>>>>[%s][%d]\n", __FUNCTION__, __LINE__);\r
-   //if (data) _view_update (data);\r
 }\r
-*/\r
 \r
 static void\r
 _set_label(Evas_Object *obj, const char* str)\r
@@ -465,20 +428,13 @@ _set_label(Evas_Object *obj, const char* str)
         if (! (wd->label = elm_label_add (obj))) return;\r
         elm_object_style_set(wd->label, "extended/multibuttonentry_default");\r
         elm_label_ellipsis_set(wd->label, EINA_TRUE);\r
-        elm_label_wrap_width_set(wd->label, 180);\r
         elm_label_text_align_set(wd->label, "left");\r
         evas_object_size_hint_weight_set(wd->label, 0.0, EVAS_HINT_EXPAND);\r
         evas_object_size_hint_align_set(wd->label, EVAS_HINT_FILL, EVAS_HINT_FILL);\r
-        if (wd->box)\r
-          {\r
-             if (wd->rect) elm_box_pack_after (wd->box, wd->label, wd->rect);\r
-             else elm_box_pack_start(wd->box, wd->label);\r
-          }\r
-        evas_object_show(wd->label);\r
      }\r
 \r
-   elm_label_label_set(wd->label, str);\r
-   _view_update(obj, EINA_FALSE);\r
+   if (wd->label) elm_label_label_set(wd->label, str);\r
+   _view_update(obj);\r
 }\r
 \r
 static void\r
@@ -491,13 +447,12 @@ _set_guidetext(Evas_Object *obj, const char* str)
      {\r
         if (! (wd->guidetext = edje_object_add (evas_object_evas_get (obj)))) return;\r
         _elm_theme_object_set(obj, wd->guidetext, "multibuttonentry", "guidetext", elm_widget_style_get(obj));\r
-        evas_object_size_hint_min_set(wd->guidetext, 280, 0);\r
         evas_object_size_hint_weight_set(wd->guidetext, 0.0, EVAS_HINT_EXPAND);\r
         evas_object_size_hint_align_set(wd->guidetext, EVAS_HINT_FILL, EVAS_HINT_FILL);\r
      }\r
 \r
    if (wd->guidetext) edje_object_part_text_set (wd->guidetext, "elm.text", str);\r
-   _view_update(obj, EINA_FALSE);\r
+   _view_update(obj);\r
 }\r
 \r
 static void\r
@@ -701,11 +656,11 @@ _add_button_item(Evas_Object *obj, const char *str, Multibuttonentry_Pos pos, co
                 if(wd->label) elm_box_pack_after(wd->box, btn, wd->label);\r
                 else if(wd->rect) elm_box_pack_after(wd->box, btn, wd->rect);\r
                 else elm_box_pack_start(wd->box, btn);\r
-                _view_update(obj, EINA_FALSE);\r
+                _view_update(obj);\r
                 break;\r
              case MULTIBUTONENTRY_POS_END:\r
                 wd->items = eina_list_append(wd->items, item);\r
-                _view_update(obj, EINA_FALSE);\r
+                _view_update(obj);\r
                 elm_box_pack_before(wd->box, btn, wd->entry);\r
                 break;\r
              case MULTIBUTONENTRY_POS_BEFORE:\r
@@ -713,12 +668,12 @@ _add_button_item(Evas_Object *obj, const char *str, Multibuttonentry_Pos pos, co
                   {   \r
                      wd->items = eina_list_prepend_relative(wd->items, item, reference);\r
                      elm_box_pack_before(wd->box, btn, reference->button);\r
-                     _view_update(obj, EINA_FALSE);\r
+                     _view_update(obj);\r
                   }\r
                 else\r
                   {\r
                      wd->items = eina_list_append(wd->items, item);\r
-                     _view_update(obj, EINA_FALSE);\r
+                     _view_update(obj);\r
                      elm_box_pack_before(wd->box, btn, wd->entry);\r
                   }\r
                 break;\r
@@ -727,11 +682,11 @@ _add_button_item(Evas_Object *obj, const char *str, Multibuttonentry_Pos pos, co
                   {   \r
                      wd->items = eina_list_append_relative(wd->items, item, reference);\r
                      elm_box_pack_after(wd->box, btn, reference->button);\r
-                     _view_update(obj, EINA_FALSE);                  }\r
+                     _view_update(obj);                  }\r
                 else\r
                   {   \r
                      wd->items = eina_list_append(wd->items, item);\r
-                     _view_update(obj, EINA_FALSE);\r
+                     _view_update(obj);\r
                      elm_box_pack_before(wd->box, btn, wd->entry);\r
                   }\r
                 break;\r
@@ -882,6 +837,7 @@ elm_multibuttonentry_add(Evas_Object *parent)
    elm_widget_resize_object_set(obj, wd->base);\r
    \r
    wd->contracted = 0;\r
+   wd->focused = EINA_FALSE;\r
    wd->n_str = 0;\r
    \r
    _view_init(obj);\r