radio buttons: GET IN MAH MENUS!!!!
authordiscomfitor <discomfitor@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Tue, 26 Jul 2011 01:17:09 +0000 (01:17 +0000)
committerMike McCormack <mj.mccormack@samsung.com>
Mon, 14 Nov 2011 04:27:14 +0000 (13:27 +0900)
added elm_menu_item_add_object which allows a user to directly add an arbitrary evas_object to be swallowed as a menu item, added radio item as test

git-svn-id: https://svn.enlightenment.org/svn/e/trunk/elementary@61717 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

src/bin/test_menu.c
src/lib/Elementary.h.in
src/lib/elm_menu.c

index 2c7dcf8..b880994 100644 (file)
@@ -70,11 +70,17 @@ _populate_2(Elm_Menu_Item *item)
 }
 
 static void
-_populate_1(Elm_Menu_Item *item)
+_populate_1(Evas_Object *win, Elm_Menu_Item *item)
 {
-   Elm_Menu_Item *item2;
+   Elm_Menu_Item *item2, *item3;
+   Evas_Object *radio;
 
+   radio = elm_radio_add(win);
+   elm_radio_state_value_set(radio, 0);
+   elm_radio_value_set(radio, 0);
+   elm_object_text_set(radio, "radio in menu");
    item2 = elm_menu_item_add(menu, item, "object-rotate-left", "menu 1", NULL, NULL);
+   item3 = elm_menu_item_add_object(menu, item, radio, NULL, NULL);
 
    _populate_2(item2);
 }
@@ -102,7 +108,7 @@ test_menu(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info _
    elm_menu_item_add(menu, NULL, NULL, "first item", NULL, NULL);
 
    item = elm_menu_item_add(menu, NULL, "mail-reply-all", "second item", NULL, NULL);
-   _populate_1(item);
+   _populate_1(win, item);
 
    elm_menu_item_add(menu, item, "window-new", "sub menu", NULL, NULL);
 
index ccd2056..ae57377 100644 (file)
@@ -15856,6 +15856,7 @@ extern "C" {
     * @return Returns the new item.
     */
    EAPI Elm_Menu_Item     *elm_menu_item_add(Evas_Object *obj, Elm_Menu_Item *parent, const char *icon, const char *label, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1);
+   EAPI Elm_Menu_Item     *elm_menu_item_add_object(Evas_Object *obj, Elm_Menu_Item *parent, Evas_Object *subobj, Evas_Smart_Cb func, const void *data) EINA_ARG_NONNULL(1);
    /**
     * @brief Set the label of a menu item
     *
index d81716b..c05937d 100644 (file)
@@ -20,7 +20,8 @@ struct _Elm_Menu_Item
 
    Eina_Bool separator : 1;
    Eina_Bool disabled : 1;
-   Eina_Bool selected: 1;
+   Eina_Bool selected : 1;
+   Eina_Bool object_item : 1;
 };
 
 struct _Widget_Data
@@ -624,6 +625,52 @@ elm_menu_item_add(Evas_Object *obj, Elm_Menu_Item *parent, const char *icon, con
    return subitem;
 }
 
+EAPI Elm_Menu_Item *
+elm_menu_item_add_object(Evas_Object *obj, Elm_Menu_Item *parent, Evas_Object *subobj, Evas_Smart_Cb func, const void *data)
+{
+   Elm_Menu_Item *subitem;
+   ELM_CHECK_WIDTYPE(obj, widtype) NULL;
+   Widget_Data *wd = elm_widget_data_get(obj);
+
+   if (!wd) return NULL;
+   subitem = elm_widget_item_new(obj, Elm_Menu_Item);
+   if (!subitem) return NULL;
+
+   subitem->base.data = data;
+   subitem->func = func;
+   subitem->parent = parent;
+   subitem->object_item = EINA_TRUE;
+   subitem->icon = subobj;
+
+   _item_obj_create(subitem);
+
+   elm_widget_sub_object_add(subitem->base.widget, subitem->icon);
+   edje_object_part_swallow(subitem->base.view, "elm.swallow.content", subobj);
+   _sizing_eval(subitem->base.widget);
+
+   if (parent)
+     {
+        if (!parent->submenu.bx) _item_submenu_obj_create(parent);
+        elm_box_pack_end(parent->submenu.bx, subitem->base.view);
+        parent->submenu.items = eina_list_append(parent->submenu.items, subitem);
+     }
+   else
+     {
+        elm_box_pack_end(wd->bx, subitem->base.view);
+        wd->items = eina_list_append(wd->items, subitem);
+     }
+
+   _sizing_eval(obj);
+   return subitem;
+}
+
+EAPI unsigned int
+elm_menu_item_index_get(const Elm_Menu_Item *item)
+{
+   ELM_WIDGET_ITEM_WIDTYPE_CHECK_OR_RETURN(item, 0);
+   return item->idx;
+}
+
 EAPI void
 elm_menu_item_label_set(Elm_Menu_Item *item, const char *label)
 {