[multibuttonentry] new feature is added: contracted state, guide text
authorHyunsil <hyunsil.park@samsung.com>
Mon, 8 Nov 2010 06:58:04 +0000 (15:58 +0900)
committerHyunsil <hyunsil.park@samsung.com>
Mon, 8 Nov 2010 06:58:04 +0000 (15:58 +0900)
src/lib/Elementary.h.in
src/lib/elm_multibuttonentry.c

index 5cfacb7..7dbfdfc 100644 (file)
@@ -2517,6 +2517,10 @@ extern "C" {
    EAPI const char                *elm_multibuttonentry_label_get(Evas_Object *obj);
    EAPI void                       elm_multibuttonentry_label_set(Evas_Object *obj, const char *label);
    EAPI Evas_Object               *elm_multibuttonentry_entry_get(Evas_Object *obj);
+   EAPI const char *               elm_multibuttonentry_guide_text_get(Evas_Object *obj);
+   EAPI void                       elm_multibuttonentry_guide_text_set(Evas_Object *obj, const char *guidetext);
+   EAPI int                        elm_multibuttonentry_contracted_state_get(Evas_Object *obj);
+   EAPI void                       elm_multibuttonentry_contracted_state_set(Evas_Object *obj, int contracted);
    EAPI Elm_Multibuttonentry_Item *elm_multibuttonentry_item_add_start(Evas_Object *obj, const char *label, void *data);
    EAPI Elm_Multibuttonentry_Item *elm_multibuttonentry_item_add_end(Evas_Object *obj, const char *label, void *data);
    EAPI Elm_Multibuttonentry_Item *elm_multibuttonentry_item_add_before(Evas_Object *obj, const char *label, Elm_Multibuttonentry_Item *before, void *data);
@@ -2541,6 +2545,7 @@ extern "C" {
     * "deleted" - when an item of multibuttonentry is deleted. 
     * "expanded" - when the multibuttonentry is expanded. 
     * "contracted" - when the multibuttonentry is contracted. 
+    * "contracted,state,changed" - when the contracted state of multibuttonentry is changed. 
     */
    /* available styles:
     * default
index b865ae4..a87e0b0 100644 (file)
@@ -11,6 +11,7 @@
 \r
 #define MAX_STR 256            \r
 #define MAX_W_BTN 200          \r
+#define MIN_W_ENTRY 20 \r
 \r
 \r
 typedef enum _Multibuttonentry_Pos\r
@@ -36,6 +37,7 @@ struct _Multibuttonentry_Item {
        Evas_Object *label;\r
        void *data;\r
        Evas_Coord vw, rw; // vw: visual width, real width\r
+       Eina_Bool  visible: 1;  \r
 };\r
 \r
 typedef struct _Widget_Data Widget_Data;\r
@@ -44,30 +46,43 @@ struct _Widget_Data {
        Evas_Object *box;\r
        Evas_Object *entry;\r
        Evas_Object *label;\r
+       Evas_Object *guidetext;\r
+       Evas_Object *end;       // used to represent the total number of invisible buttons\r
 \r
        Eina_List *items;\r
        Eina_List *current;\r
 \r
+       int n_str;\r
+\r
        Evas_Coord w_box, h_box;\r
+       int  contracted;        \r
+       Eina_Bool  focused: 1;  \r
 };\r
 \r
 static const char *widtype = NULL;\r
 \r
 static void _del_hook(Evas_Object *obj);\r
 static void _theme_hook(Evas_Object *obj);\r
+static void _on_focus_hook(void *data __UNUSED__, Evas_Object *obj);\r
 static void _sizing_eval(Evas_Object *obj);\r
+static void _changed_size_hint_cb(void *data, Evas *evas, Evas_Object *obj, void *event);\r
 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);\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
 static void    _button_clicked(void *data, Evas_Object *obj, const char *emission, const char *source);\r
 static void    _del_button_obj(Evas_Object *obj, Evas_Object *btn);\r
 static void    _del_button_item(Elm_Multibuttonentry_Item *item);\r
 static void    _del_button(Evas_Object *obj);\r
-static Elm_Multibuttonentry_Item*      _add_button_item(Evas_Object *obj, const char *str, Multibuttonentry_Pos pos, const Elm_Multibuttonentry_Item *reference, void *data);\r
+static Elm_Multibuttonentry_Item* _add_button_item(Evas_Object *obj, const char *str, Multibuttonentry_Pos pos, const Elm_Multibuttonentry_Item *reference, void *data);\r
 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
 \r
 static void\r
@@ -109,22 +124,23 @@ _theme_hook(Evas_Object *obj)
 }\r
 \r
 static void\r
+_on_focus_hook(void *data __UNUSED__, Evas_Object *obj)\r
+{\r
+   Widget_Data *wd = elm_widget_data_get(obj);\r
+   if (!wd) return;\r
+\r
+   _view_update(obj);\r
+}\r
+\r
+static void\r
 _sizing_eval(Evas_Object *obj)\r
 {\r
        Widget_Data *wd = elm_widget_data_get(obj);\r
        Evas_Coord minw = -1, minh = -1;\r
-       //Evas_Coord w, h;\r
        if (!wd) return;\r
 \r
-       //edje_object_size_min_restricted_calc(wd->base, &minw, &minh, minw, minh);\r
-       //evas_object_size_hint_min_get(obj, &w, &h);\r
-       \r
        evas_object_size_hint_min_get(wd->box, &minw, &minh);\r
        evas_object_size_hint_min_set(obj, minw, minh);\r
-\r
-       //if (w > minw) minw = w;\r
-       //if (h > minh) minh = h;\r
-       //evas_object_size_hint_min_set(obj, minw, minh);\r
 }\r
 \r
 static void \r
@@ -152,6 +168,8 @@ _resize_cb(void *data, Evas *evas, Evas_Object *obj, void *event)
 \r
        wd->w_box = w;\r
        wd->h_box = h;\r
+\r
+       _view_update(data);\r
 }\r
 \r
 static void\r
@@ -160,14 +178,175 @@ _event_init(Evas_Object *obj)
        Widget_Data *wd = elm_widget_data_get(obj);\r
        if(!wd || !wd->base)    return;\r
 \r
-       if(wd->box)\r
-       {\r
+       if(wd->box){\r
                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
+               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
+_contracted_state_set(Evas_Object *obj, int contracted)\r
+{\r
+       Widget_Data *wd = elm_widget_data_get(obj);\r
+       Eina_List *l;\r
+       Elm_Multibuttonentry_Item *item;\r
+       if (!wd || !wd->box) return;\r
+\r
+       if(wd->contracted == contracted) return;\r
+\r
+       elm_scrolled_entry_entry_set(wd->entry, "");\r
+\r
+       if(contracted == 1){            \r
+               Evas_Coord w=0, w_label=0;\r
+               \r
+               // unpack all items and entry\r
+               EINA_LIST_FOREACH(wd->items, l, item) {\r
+                       if (item) {\r
+                               elm_box_unpack(wd->box, item->button);\r
+                               evas_object_hide(item->button);\r
+                               item->visible = EINA_FALSE;\r
+                       }\r
+               }\r
+               elm_box_unpack(wd->box, wd->entry);\r
+               evas_object_hide(wd->entry);\r
+\r
+               \r
+               // pack buttons only 1line\r
+               w = wd->w_box;\r
+\r
+               // w -= w_label\r
+               if(wd->label) \r
+                       evas_object_geometry_get(wd->label, NULL, NULL, &w_label, NULL);\r
+               w -= w_label;\r
+\r
+               // w -= w_btns          \r
+               item = NULL;\r
+               int count = eina_list_count(wd->items);\r
+               EINA_LIST_FOREACH(wd->items, l, item) {\r
+                       if (item) {\r
+                               int w_label_count = 0;\r
+                               char buf[MAX_STR] = {0,};\r
+\r
+                               elm_box_pack_end(wd->box, item->button);\r
+                               evas_object_show(item->button);\r
+                               item->visible = EINA_TRUE;\r
+                               \r
+                               w -= item->vw;\r
+                               count--;\r
+                               \r
+                               if(count > 0){\r
+                                       snprintf(buf, sizeof(buf), "... + %d", count);\r
+                                       elm_label_label_set(wd->end, buf);\r
+                                       evas_object_size_hint_min_get(wd->end, &w_label_count, NULL);\r
+                               }\r
+\r
+                               if(w < 0 || w < w_label_count){\r
+                                       elm_box_unpack(wd->box, item->button);\r
+                                       evas_object_hide(item->button);\r
+                                       item->visible = EINA_FALSE;\r
+\r
+                                       count++;\r
+                                       snprintf(buf, sizeof(buf), "... + %d", count);\r
+                                       elm_label_label_set(wd->end, buf);\r
+                                       evas_object_size_hint_min_get(wd->end, &w_label_count, NULL);\r
+\r
+                                       elm_box_pack_end(wd->box, wd->end);\r
+                                       evas_object_show(wd->end);\r
+\r
+                                       break;\r
+                               }\r
+                       }\r
+               }\r
+\r
+       }else{\r
+               // unpack last label\r
+               elm_box_unpack(wd->box, wd->end);\r
+               evas_object_hide(wd->end);\r
+\r
+               // pack remain btns\r
+               item = NULL;\r
+               EINA_LIST_FOREACH(wd->items, l, item) {\r
+                       if (item && !item->visible){\r
+                               elm_box_pack_end(wd->box, item->button);\r
+                               evas_object_show(item->button);\r
+                       }\r
+               }\r
+\r
+               // pack entry\r
+               elm_box_pack_end(wd->box, wd->entry);\r
+               evas_object_show(wd->entry);\r
+       }\r
+\r
+       wd->contracted = contracted;\r
+       evas_object_smart_callback_call(obj, "contracted,state,changed", wd->contracted);\r
+}\r
+\r
+static void \r
+_view_update(Evas_Object *obj)\r
+{      \r
+       Widget_Data *wd = elm_widget_data_get(obj);     \r
+       Evas_Coord w_label = 0, h_label = 0, w = 0, h = 0;\r
+       if (!wd || !wd->box || !wd->entry) return;\r
+\r
+       if(wd->contracted == 1){\r
+               _contracted_state_set(obj, 0);\r
+               _contracted_state_set(obj, 1);\r
+       }\r
+\r
+       if (wd->guidetext && (wd->contracted != 1)){\r
+               if(!eina_list_count(wd->items)){\r
+                       if(elm_widget_focus_get(obj)){\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_widget_focus_set(wd->entry, EINA_TRUE);   //FIXME\r
+                       }else{\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
+               }else{\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
+}\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
 {\r
        Widget_Data *wd = elm_widget_data_get(obj);\r
@@ -175,17 +354,36 @@ _set_label(Evas_Object *obj, const char* str)
 \r
        if(!wd->label){\r
                if(!(wd->label = elm_label_add(obj))) return;\r
-               elm_object_style_set(wd->label, "extended/multibuttonentry_mainlabel");\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, 100);\r
                elm_label_text_align_set(wd->label, "left");\r
-               evas_object_size_hint_weight_set(wd->label, 0.0, 0.0);\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)     elm_box_pack_start(wd->box, wd->label);\r
                evas_object_show(wd->label);\r
        }\r
 \r
        elm_label_label_set(wd->label, str);\r
+       _view_update(obj);\r
+}\r
+\r
+static void\r
+_set_guidetext(Evas_Object *obj, const char* str)\r
+{\r
+       Widget_Data *wd = elm_widget_data_get(obj);\r
+       if(!wd || !str) return;\r
+\r
+       if(!wd->guidetext){\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, 350, 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);\r
 }\r
 \r
 static void\r
@@ -329,6 +527,8 @@ _add_button_item(Evas_Object *obj, const char *str, Multibuttonentry_Pos pos, co
        Widget_Data *wd = elm_widget_data_get(obj);\r
        if(!wd || !wd->box || !wd->entry) return NULL;\r
 \r
+       if(wd->contracted == 1) return NULL;\r
+\r
        // add button\r
        btn = edje_object_add(evas_object_evas_get(obj));\r
        _elm_theme_object_set(obj, btn, "multibuttonentry", "btn", elm_widget_style_get(obj));\r
@@ -338,7 +538,7 @@ _add_button_item(Evas_Object *obj, const char *str, Multibuttonentry_Pos pos, co
 \r
        // add label\r
        label = elm_label_add(obj);\r
-       elm_object_style_set(label, "extended/multibuttonentry_buttonlabel");\r
+       elm_object_style_set(label, "extended/multibuttonentry_button");\r
        elm_label_label_set(label, str);\r
        elm_label_ellipsis_set(label, EINA_TRUE);\r
        edje_object_part_swallow(btn, "elm.label", label);\r
@@ -359,32 +559,39 @@ _add_button_item(Evas_Object *obj, const char *str, Multibuttonentry_Pos pos, co
                item->data = data;\r
                item->rw = w_btn;\r
                item->vw =(MAX_W_BTN < w_btn) ? MAX_W_BTN : w_btn;              \r
+               item->visible = EINA_TRUE;\r
                \r
                switch(pos){\r
                        case MULTIBUTONENTRY_POS_START:\r
-                               elm_box_pack_after(wd->box, btn, wd->label);\r
                                wd->items = eina_list_prepend(wd->items, item);\r
+                               _view_update(obj);\r
+                               elm_box_pack_after(wd->box, btn, wd->label);\r
                                break;\r
                        case MULTIBUTONENTRY_POS_END:\r
-                               elm_box_pack_before(wd->box, btn, wd->entry);\r
                                wd->items = eina_list_append(wd->items, item);\r
+                               _view_update(obj);\r
+                               elm_box_pack_before(wd->box, btn, wd->entry);\r
                                break;\r
                        case MULTIBUTONENTRY_POS_BEFORE:\r
                                if(reference){  \r
-                                       elm_box_pack_before(wd->box, btn, reference->button);\r
                                        wd->items = eina_list_prepend_relative(wd->items, item, reference);\r
+                                       _view_update(obj);\r
+                                       elm_box_pack_before(wd->box, btn, reference->button);\r
                                }else{\r
-                                       elm_box_pack_before(wd->box, btn, wd->entry);\r
                                        wd->items = eina_list_append(wd->items, item);\r
+                                       _view_update(obj);\r
+                                       elm_box_pack_before(wd->box, btn, wd->entry);\r
                                }\r
                                break;\r
                        case MULTIBUTONENTRY_POS_AFTER:\r
                                if(reference){  \r
-                                       elm_box_pack_after(wd->box, btn, reference->button);\r
                                        wd->items = eina_list_append_relative(wd->items, item, reference);\r
+                                       _view_update(obj);\r
+                                       elm_box_pack_after(wd->box, btn, reference->button);\r
                                }else{  \r
-                                       elm_box_pack_before(wd->box, btn, wd->entry);\r
                                        wd->items = eina_list_append(wd->items, item);\r
+                                       _view_update(obj);\r
+                                       elm_box_pack_before(wd->box, btn, wd->entry);\r
                                }\r
                                break;\r
                        default:\r
@@ -429,13 +636,17 @@ _evas_key_up_cb(void *data, Evas *e , Evas_Object *obj , void *event_info )
        strncpy(str, elm_scrolled_entry_entry_get(wd->entry), MAX_STR);\r
        str[MAX_STR - 1]= 0;\r
 \r
-       if((strcmp(str, "") == 0) && ((strcmp(ev->keyname, "BackSpace") == 0)||(strcmp(ev->keyname, "BackSpace(") == 0))){ \r
+       if((wd->n_str == 0) && (strcmp(str, "") == 0) && ((strcmp(ev->keyname, "BackSpace") == 0)||(strcmp(ev->keyname, "BackSpace(") == 0))){ \r
                _del_button(data);      \r
        }else if((strcmp(str, "") != 0) && (strcmp(ev->keyname, "KP_Enter") == 0 ||strcmp(ev->keyname, "Return") == 0 )){\r
                _add_button(data, str);\r
+               wd->n_str = 0;\r
+               return;\r
        }else{\r
                //\r
        }\r
+\r
+       wd->n_str = strlen(str); \r
 }\r
 \r
 static void \r
@@ -457,12 +668,18 @@ _view_init(Evas_Object *obj)
                elm_scrolled_entry_single_line_set(wd->entry, EINA_TRUE);\r
                elm_scrolled_entry_entry_set(wd->entry, "");\r
                elm_scrolled_entry_cursor_end_set(wd->entry);\r
+               evas_object_size_hint_min_set(wd->entry, MIN_W_ENTRY, 0);\r
                evas_object_event_callback_add(wd->entry, EVAS_CALLBACK_KEY_UP, _evas_key_up_cb, obj);\r
                evas_object_size_hint_weight_set(wd->entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);\r
                evas_object_size_hint_align_set(wd->entry, EVAS_HINT_FILL, EVAS_HINT_FILL);\r
                elm_box_pack_end(wd->box, wd->entry);\r
                evas_object_show(wd->entry);\r
        }\r
+\r
+       if(!wd->end){\r
+               if(!(wd->end = elm_label_add(obj))) return;\r
+               elm_object_style_set(wd->end, "extended/multibuttonentry_default");\r
+       }\r
 }\r
 \r
 /**\r
@@ -492,11 +709,15 @@ elm_multibuttonentry_add(Evas_Object *parent)
 \r
        elm_widget_del_hook_set(obj, _del_hook);\r
        elm_widget_theme_hook_set(obj, _theme_hook);\r
+       elm_widget_on_focus_hook_set(obj, _on_focus_hook, NULL);\r
        \r
        wd->base = edje_object_add(e);\r
        _elm_theme_object_set(obj, wd->base, "multibuttonentry", "base", "default");\r
        elm_widget_resize_object_set(obj, wd->base);\r
        \r
+       wd->contracted = 0;\r
+       wd->n_str = 0;\r
+       \r
        _view_init(obj);\r
        _event_init(obj);\r
 \r
@@ -504,6 +725,24 @@ elm_multibuttonentry_add(Evas_Object *parent)
 }\r
 \r
 /**\r
+ * Get the entry of the multibuttonentry object\r
+ *\r
+ * @param obj The multibuttonentry object\r
+ * @return The entry object, or NULL if none\r
+ *\r
+ * @ingroup Multibuttonentry\r
+ */\r
+EAPI Evas_Object *\r
+elm_multibuttonentry_entry_get(Evas_Object *obj)\r
+{\r
+       ELM_CHECK_WIDTYPE(obj, widtype) NULL;\r
+       Widget_Data *wd = elm_widget_data_get(obj);\r
+       if (!wd)        return NULL;\r
+\r
+       return wd->entry;\r
+}\r
+\r
+/**\r
  * Get the label\r
  *\r
  * @param obj The multibuttonentry object\r
@@ -544,21 +783,79 @@ elm_multibuttonentry_label_set(Evas_Object *obj, const char *label)
 }\r
 \r
 /**\r
- * Get the entry of the multibuttonentry object\r
+ * Get the guide text\r
  *\r
  * @param obj The multibuttonentry object\r
- * @return The entry object, or NULL if none\r
+ * @return The guide text, or NULL if none\r
  *\r
  * @ingroup Multibuttonentry\r
  */\r
-EAPI Evas_Object *\r
-elm_multibuttonentry_entry_get(Evas_Object *obj)\r
+EAPI const char *\r
+elm_multibuttonentry_guide_text_get(Evas_Object *obj)\r
 {\r
        ELM_CHECK_WIDTYPE(obj, widtype) NULL;\r
        Widget_Data *wd = elm_widget_data_get(obj);\r
        if (!wd)        return NULL;\r
 \r
-       return wd->entry;\r
+       if(wd->guidetext){\r
+               return elm_label_label_get(wd->guidetext);\r
+       }\r
+\r
+       return NULL;\r
+}\r
+\r
+/**\r
+ * Set the guide text\r
+ *\r
+ * @param obj The multibuttonentry object\r
+ * @param label The guide text string\r
+ *\r
+ * @ingroup Multibuttonentry\r
+ */\r
+EAPI void\r
+elm_multibuttonentry_guide_text_set(Evas_Object *obj, const char *guidetext)\r
+{\r
+       ELM_CHECK_WIDTYPE(obj, widtype);\r
+       Widget_Data *wd = elm_widget_data_get(obj);\r
+       if (!wd || !guidetext) return;\r
+\r
+       _set_guidetext(obj, guidetext); \r
+}\r
+\r
+/**\r
+ * Get the value of contracted state.\r
+ *\r
+ * @param obj The multibuttonentry object\r
+ * @param the value of contracted state. \r
+ *\r
+ * @ingroup Multibuttonentry\r
+ */\r
+EAPI int\r
+elm_multibuttonentry_contracted_state_get(Evas_Object *obj)\r
+{\r
+       ELM_CHECK_WIDTYPE(obj, widtype) -1;\r
+       Widget_Data *wd = elm_widget_data_get(obj);\r
+       if (!wd) return -1;\r
+\r
+       return wd->contracted;\r
+}\r
+\r
+/**\r
+ * Set/Unset the multibuttonentry to contracted state of single line\r
+ *\r
+ * @param obj The multibuttonentry object\r
+ * @param the value of contracted state. set this to 1 to set the multibuttonentry to contracted state of single line. set this to 0 to unset the contracted state. \r
+ *\r
+ * @ingroup Multibuttonentry\r
+ */\r
+EAPI void\r
+elm_multibuttonentry_contracted_state_set(Evas_Object *obj, int contracted)\r
+{\r
+       ELM_CHECK_WIDTYPE(obj, widtype);\r
+       Widget_Data *wd = elm_widget_data_get(obj);\r
+       if (!wd || !wd->box || (wd->contracted == contracted)) return;\r
+\r
+       _contracted_state_set(obj, contracted);\r
 }\r
 \r
 /**\r