beginning of the list widget - includes a scroller and items inside. not
authorCarsten Haitzler <raster@rasterman.com>
Wed, 7 Jan 2009 13:49:08 +0000 (13:49 +0000)
committerCarsten Haitzler <raster@rasterman.com>
Wed, 7 Jan 2009 13:49:08 +0000 (13:49 +0000)
meant for long long long lists of lots of items. not complete yet.

SVN revision: 38488

data/themes/Makefile.am
data/themes/default.edc
data/themes/ilist_1.png [new file with mode: 0644]
data/themes/ilist_2.png [new file with mode: 0644]
data/themes/ilist_item_shadow.png [new file with mode: 0644]
src/bin/test.c
src/lib/Elementary.h.in
src/lib/Makefile.am
src/lib/elc_hoversel.c
src/lib/elm_list.c [new file with mode: 0644]

index 54a075a..f53c664 100644 (file)
@@ -94,7 +94,10 @@ toolbar_sel.png \
 icon_chat.png \
 icon_clock.png \
 icon_delete.png \
-icon_edit.png
+icon_edit.png \
+ilist_1.png \
+ilist_2.png \
+ilist_item_shadow.png
 
 default.edj: Makefile $(EXTRA_DIST)
        $(EDJE_CC) $(EDJE_FLAGS) \
index 93aba0c..90c6fbc 100644 (file)
@@ -4798,4 +4798,383 @@ collections {
       }
    }
 
+///////////////////////////////////////////////////////////////////////////////
+   group { name: "elm/list/item/default";
+      data.item: "stacking" "above";
+      data.item: "selectraise" "on";
+      images {
+         image: "bt_sm_base1.png" COMP;
+         image: "bt_sm_shine.png" COMP;
+         image: "bt_sm_hilight.png" COMP;
+         image: "ilist_1.png" COMP;
+         image: "ilist_item_shadow.png" COMP;
+      }
+      parts {
+         part {
+            name: "base_sh";
+            mouse_events: 0;
+            description {
+               state: "default" 0.0;
+//               aspect: 6.4 6.4;
+//               aspect_preference: HORIZONTAL;
+               align: 0.0 0.0;
+               min: 0 10;
+               rel1 {
+                  to: "base";
+                  relative: 0.0 1.0;
+                  offset: 0 0;
+               }
+               rel2 {
+                  to: "base";
+                  relative: 1.0 1.0;
+                  offset: -1 0;
+               }
+               image {
+                  normal: "ilist_item_shadow.png";
+               }
+               fill.smooth: 0;
+            }
+         }
+         part {
+            name: "base";
+            mouse_events: 0;
+            description {
+               state: "default" 0.0;
+               image {
+                  normal: "ilist_1.png";
+                  border: 2 2 2 2;
+               }
+               fill.smooth: 0;
+            }
+         }
+         part { name: "bg";
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               visible: 0;
+               color: 255 255 255 0;
+               rel1 {
+                  relative: 0.0 0.0;
+                  offset: -5 -5;
+               }
+               rel2 {
+                  relative: 1.0 1.0;
+                  offset: 4 4;
+               }
+               image {
+                  normal: "bt_sm_base1.png";
+                  border: 6 6 6 6;
+               }
+            }
+            description { state: "selected" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               color: 255 255 255 255;
+               rel1 {
+                  relative: 0.0 0.0;
+                  offset: -2 -2;
+               }
+               rel2 {
+                  relative: 1.0 1.0;
+                  offset: 1 1;
+               }
+            }
+         }
+         part {
+            name:          "elm.swallow.icon";
+            type:          SWALLOW;
+            description {
+               state:    "default" 0.0;
+               align:    0.0 0.5;
+               aspect:   1.0 1.0;
+               aspect_preference: VERTICAL;
+               rel1 {
+                  relative: 0.0  0.0;
+                  offset:   4    4;
+               }
+               rel2 {
+                  relative: 0.0  1.0;
+                  offset:   4   -5;
+               }
+            }
+         }
+         part {
+            name:           "elm.text";
+            type:           TEXT;
+            effect:         SOFT_SHADOW;
+            mouse_events:   0;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min:      16 16;
+               rel1 {
+                  to_x:     "elm.swallow.icon";
+                  relative: 1.0  0.0;
+                  offset:   4 4;
+               }
+               rel2 {
+                  relative: 1.0  1.0;
+                  offset:   -5 -5;
+               }
+               color: 0 0 0 255;
+               color3: 0 0 0 0;
+               text {
+                  font: "Sans";
+                  size: 10;
+                  min: 1 1;
+//                  min: 0 1;
+                  align: 0.0 0.5;
+               }
+            }
+            description { state: "selected" 0.0;
+               inherit: "default" 0.0;
+               color: 224 224 224 255;
+               color3: 0 0 0 64;
+            }
+         }
+         part { name: "fg1";
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               visible: 0;
+               color: 255 255 255 0;
+               rel1.to: "bg";
+               rel2.relative: 1.0 0.5;
+               rel2.to: "bg";
+               image {
+                  normal: "bt_sm_hilight.png";
+                  border: 6 6 6 0;
+               }
+            }
+            description { state: "selected" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               color: 255 255 255 255;
+            }
+         }
+         part { name: "fg2";
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               visible: 0;
+               color: 255 255 255 0;
+               rel1.to: "bg";
+               rel2.to: "bg";
+               image {
+                  normal: "bt_sm_shine.png";
+                  border: 6 6 6 0;
+               }
+            }
+            description { state: "selected" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               color: 255 255 255 255;
+            }
+         }
+         part {
+            name:           "event";
+            type:           RECT;
+            description {
+               state: "default" 0.0;
+               color: 0 0 0 0;
+            }
+         }
+      }
+      programs {
+         program {
+            name:    "go_active";
+            signal:  "elm,state,selected";
+            source:  "elm";
+            action:  STATE_SET "selected" 0.0;
+            target:  "bg";
+            target:  "fg1";
+            target:  "fg2";
+            target:  "elm.text";
+         }
+         program {
+            name:    "go_passive";
+            signal:  "elm,state,unselected";
+            source:  "elm";
+            action:  STATE_SET "default" 0.0;
+            target:  "bg";
+            target:  "fg1";
+            target:  "fg2";
+            target:  "elm.text";
+            transition: LINEAR 0.1;
+         }
+      }
+   }
+   group { name: "elm/list/item_odd/default";
+      data.item: "stacking" "below";
+      data.item: "selectraise" "on";
+      images {
+         image: "bt_sm_base1.png" COMP;
+         image: "bt_sm_shine.png" COMP;
+         image: "bt_sm_hilight.png" COMP;
+         image: "ilist_2.png" COMP;
+      }
+      parts {
+         part {
+            name: "base";
+            mouse_events: 0;
+            description {
+               state: "default" 0.0;
+               image {
+                  normal: "ilist_2.png";
+                  border: 2 2 2 2;
+               }
+            }
+         }
+         part { name: "bg";
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               visible: 0;
+               color: 255 255 255 0;
+               rel1 {
+                  relative: 0.0 0.0;
+                  offset: -5 -5;
+               }
+               rel2 {
+                  relative: 1.0 1.0;
+                  offset: 4 4;
+               }
+               image {
+                  normal: "bt_sm_base1.png";
+                  border: 6 6 6 6;
+               }
+               fill.smooth: 0;
+            }
+            description { state: "selected" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               color: 255 255 255 255;
+               rel1 {
+                  relative: 0.0 0.0;
+                  offset: -2 -2;
+               }
+               rel2 {
+                  relative: 1.0 1.0;
+                  offset: 1 1;
+               }
+            }
+         }
+         part {
+            name:          "elm.swallow.icon";
+            type:          SWALLOW;
+            description {
+               state:    "default" 0.0;
+               align:    0.0 0.5;
+               aspect:   1.0 1.0;
+               aspect_preference: VERTICAL;
+               rel1 {
+                  relative: 0.0  0.0;
+                  offset:   4    4;
+               }
+               rel2 {
+                  relative: 0.0  1.0;
+                  offset:   4   -5;
+               }
+            }
+         }
+         part {
+            name:           "elm.text";
+            type:           TEXT;
+            effect:         SOFT_SHADOW;
+            mouse_events:   0;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min:      16 16;
+               rel1 {
+                  to_x:     "elm.swallow.icon";
+                  relative: 1.0  0.0;
+                  offset:   4 4;
+               }
+               rel2 {
+                  relative: 1.0  1.0;
+                  offset:   -5 -5;
+               }
+               color: 0 0 0 255;
+               color3: 0 0 0 0;
+               text {
+                  font: "Sans";
+                  size: 10;
+                  min: 1 1;
+//                  min: 0 1;
+                  align: 0.0 0.5;
+               }
+            }
+            description { state: "selected" 0.0;
+               inherit: "default" 0.0;
+               color: 224 224 224 255;
+               color3: 0 0 0 64;
+            }
+         }
+         part { name: "fg1";
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               visible: 0;
+               color: 255 255 255 0;
+               rel1.to: "bg";
+               rel2.relative: 1.0 0.5;
+               rel2.to: "bg";
+               image {
+                  normal: "bt_sm_hilight.png";
+                  border: 6 6 6 0;
+               }
+            }
+            description { state: "selected" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               color: 255 255 255 255;
+            }
+         }
+         part { name: "fg2";
+            mouse_events: 0;
+            description { state: "default" 0.0;
+               visible: 0;
+               color: 255 255 255 0;
+               rel1.to: "bg";
+               rel2.to: "bg";
+               image {
+                  normal: "bt_sm_shine.png";
+                  border: 6 6 6 0;
+               }
+            }
+            description { state: "selected" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               color: 255 255 255 255;
+            }
+         }
+         part {
+            name:           "event";
+            type:           RECT;
+            description {
+               state: "default" 0.0;
+               color: 0 0 0 0;
+            }
+         }
+      }
+      programs {
+         program {
+            name:    "go_active";
+            signal:  "elm,state,selected";
+            source:  "elm";
+            action:  STATE_SET "selected" 0.0;
+            target:  "bg";
+            target:  "fg1";
+            target:  "fg2";
+            target:  "elm.text";
+         }
+         program {
+            name:    "go_passive";
+            signal:  "elm,state,unselected";
+            source:  "elm";
+            action:  STATE_SET "default" 0.0;
+            target:  "bg";
+            target:  "fg1";
+            target:  "fg2";
+            target:  "elm.text";
+            transition: LINEAR 0.1;
+         }
+      }
+   }
 }
diff --git a/data/themes/ilist_1.png b/data/themes/ilist_1.png
new file mode 100644 (file)
index 0000000..40a3238
Binary files /dev/null and b/data/themes/ilist_1.png differ
diff --git a/data/themes/ilist_2.png b/data/themes/ilist_2.png
new file mode 100644 (file)
index 0000000..ee69f15
Binary files /dev/null and b/data/themes/ilist_2.png differ
diff --git a/data/themes/ilist_item_shadow.png b/data/themes/ilist_item_shadow.png
new file mode 100644 (file)
index 0000000..bffa9dc
Binary files /dev/null and b/data/themes/ilist_item_shadow.png differ
index d9e5589..f1ff1bf 100644 (file)
@@ -1484,6 +1484,42 @@ my_bt_19(void *data, Evas_Object *obj, void *event_info)
 }
 
 static void
+my_bt_20(void *data, Evas_Object *obj, void *event_info)
+{
+   Evas_Object *win, *bg, *li;
+   char buf[PATH_MAX];
+   
+   win = elm_win_add(NULL, "list", ELM_WIN_BASIC);
+   elm_win_title_set(win, "List");
+   elm_win_autodel_set(win, 1);
+
+   bg = elm_bg_add(win);
+   elm_win_resize_object_add(win, bg);
+   evas_object_size_hint_weight_set(bg, 1.0, 1.0);
+   evas_object_show(bg);
+
+   li = elm_list_add(win);
+   elm_win_resize_object_add(win, li);
+   evas_object_size_hint_weight_set(li, 1.0, 1.0);
+
+   elm_list_item_append(li, "Hello", NULL, NULL, NULL,  NULL, NULL);
+   elm_list_item_append(li, "World", NULL, NULL, NULL,  NULL, NULL);
+   elm_list_item_append(li, "How", NULL, NULL, NULL,  NULL, NULL);
+   elm_list_item_append(li, "Are", NULL, NULL, NULL,  NULL, NULL);
+   elm_list_item_append(li, "You", NULL, NULL, NULL,  NULL, NULL);
+   elm_list_item_append(li, "Doing", NULL, NULL, NULL,  NULL, NULL);
+   elm_list_item_append(li, "Out", NULL, NULL, NULL,  NULL, NULL);
+   elm_list_item_append(li, "There", NULL, NULL, NULL,  NULL, NULL);
+   elm_list_item_append(li, "?", NULL, NULL, NULL,  NULL, NULL);
+   elm_list_item_append(li, "Is this label long enough?", NULL, NULL, NULL,  NULL, NULL);
+   
+   evas_object_show(li);
+   
+   evas_object_resize(win, 320, 300);
+   evas_object_show(win);
+}
+
+static void
 my_win_main(void)
 {
   Evas_Object *win, *bg, *bx0, *lb, *bx, *bt, *sc, *fr;
@@ -1709,6 +1745,13 @@ my_win_main(void)
   elm_box_pack_end(bx, bt);
   evas_object_show(bt);
   
+  bt = elm_button_add(win);
+  elm_button_label_set(bt, "List");
+  evas_object_smart_callback_add(bt, "clicked", my_bt_20, NULL);
+  evas_object_size_hint_align_set(bt, -1.0, 0.0);
+  elm_box_pack_end(bx, bt);
+  evas_object_show(bt);
+  
   /* set an initial window size */
   evas_object_resize(win, 320, 520);
   /* show the window */
index 8154d73..671ae72 100644 (file)
@@ -400,6 +400,19 @@ extern "C" {
     * "clicked" - when the user clicks on a toolbar item and becomes selected
     */
 
+   typedef enum _Elementary_List_Mode
+     {
+        ELM_LIST_COMPRESS,
+        ELM_LIST_SCROLL,
+        ELM_LIST_LIMIT
+     } Elementary_List_Mode;
+   typedef struct _Elm_List_Item Elm_List_Item;
+   EAPI Evas_Object *elm_list_add(Evas_Object *parent);
+   EAPI Elm_List_Item *elm_list_item_append(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *indicator, Evas_Object *end, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data);
+   /* smart callbacks called:
+    * "clicked" - when the user double-clicked an item
+    */
+       
   ////////////////////////////////////////////////////////////////////////////
  /// FIXME: TODO LIST ///////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////////
index d15d8b1..dfbd393 100644 (file)
@@ -40,6 +40,7 @@ elm_entry.c \
 elm_bubble.c \
 elm_photo.c \
 elm_toolbar.c \
+elm_list.c \
 \
 elc_notepad.c \
 elc_anchorview.c \
index 83225bc..d238d8b 100644 (file)
@@ -8,7 +8,7 @@ struct _Widget_Data
 {
    Evas_Object *btn, *hover;
    Evas_Object *hover_parent;
-   Evas_List *items;
+   Eina_List *items;
 };
 
 struct _Item
diff --git a/src/lib/elm_list.c b/src/lib/elm_list.c
new file mode 100644 (file)
index 0000000..e79feec
--- /dev/null
@@ -0,0 +1,298 @@
+#include <Elementary.h>
+#include "elm_priv.h"
+
+typedef struct _Widget_Data Widget_Data;
+typedef struct _Item Item;
+
+struct _Widget_Data
+{
+   Evas_Object *scroller, *box;
+   Eina_List *items;
+   Eina_List *selected;
+   Elementary_List_Mode mode;
+   Evas_Bool on_hold : 1;
+};
+
+struct _Item
+{
+   Evas_Object *obj;
+   Evas_Object *base;
+   const char *label;
+   Evas_Object *icon, *indicator, *end;
+   void (*func) (void *data, Evas_Object *obj, void *event_info);
+   const void *data;
+   Evas_Bool even : 1;
+   Evas_Bool is_even : 1;
+   Evas_Bool fixed : 1;
+   Evas_Bool selected : 1;
+};
+
+static void _del_hook(Evas_Object *obj);
+static void _sizing_eval(Evas_Object *obj);
+static void _on_focus_hook(void *data, Evas_Object *obj);
+
+static void
+_del_hook(Evas_Object *obj)
+{
+   Widget_Data *wd = elm_widget_data_get(obj);
+   free(wd);
+}
+
+static void
+_sizing_eval(Evas_Object *obj)
+{
+   Widget_Data *wd = elm_widget_data_get(obj);
+   Evas_Coord minw = -1, minh = -1, maxw = -1, maxh = -1;
+   
+   evas_object_size_hint_min_set(obj, minw, minh);
+   evas_object_size_hint_max_set(obj, maxw, maxh);
+}
+
+static void
+_on_focus_hook(void *data, Evas_Object *obj)
+{
+   Widget_Data *wd = elm_widget_data_get(obj);
+//   if (elm_widget_focus_get(obj))
+//     elm_widget_focus_steal(wd->entry);
+}
+
+static void
+_mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+   Item *it = data;
+   Widget_Data *wd = elm_widget_data_get(it->obj);
+   Evas_Event_Mouse_Down *ev = event_info;
+   if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) wd->on_hold = 1;
+   else wd->on_hold = 0;
+   if (ev->flags & EVAS_BUTTON_DOUBLE_CLICK)
+     evas_object_smart_callback_call(it->obj, "clicked", it);
+}
+
+static void
+_item_select(Item *it)
+{
+   const char *selectraise;
+   if (it->selected) return;
+   edje_object_signal_emit(it->base, "elm,state,selected", "elm");
+   selectraise = edje_object_data_get(it->base, "selectraise");
+   if ((selectraise) && (!strcmp(selectraise, "on")))
+     evas_object_raise(it->base);
+   it->selected = 1;
+   if (it->func) it->func(it->data, it->obj, it);
+}
+
+static void
+_item_unselect(Item *it)
+{
+   const char *stacking, *selectraise;
+   if (!it->selected) return;
+   edje_object_signal_emit(it->base, "elm,state,unselected", "elm");
+   stacking = edje_object_data_get(it->base, "stacking");
+   selectraise = edje_object_data_get(it->base, "selectraise");
+   if ((selectraise) && (!strcmp(selectraise, "on")))
+     {
+        if ((stacking) && (!strcmp(stacking, "below")))
+          evas_object_lower(it->base);
+     }
+   it->selected = 0;
+}
+
+static void
+_mouse_up(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+   Item *it = data;
+   Widget_Data *wd = elm_widget_data_get(it->obj);
+   Evas_Event_Mouse_Up *ev = event_info;
+   Eina_List *l;
+   if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) wd->on_hold = 1;
+   else wd->on_hold = 0;
+   if (wd->on_hold)
+     {
+        wd->on_hold = 0;
+        return;
+     }
+   for (l = wd->items; l; l = l->next)
+     {
+        Item *it2 = l->data;
+        if ((it2 != it) && (it2->selected)) _item_unselect(it2);
+     }
+   if (!it->selected) _item_select(it);
+}
+
+static Item *
+_item_new(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *indicator, Evas_Object *end, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data)
+{
+   Widget_Data *wd = elm_widget_data_get(obj);
+   Item *it;
+   
+   it = calloc(1, sizeof(Item));
+   it->obj = obj;
+   it->label = eina_stringshare_add(label);
+   it->icon = icon;
+   it->indicator = indicator;
+   it->end = end;
+   it->func = func;
+   it->data = data;
+   it->base = edje_object_add(evas_object_evas_get(obj));
+   evas_object_event_callback_add(it->base, EVAS_CALLBACK_MOUSE_DOWN,
+                                  _mouse_down, it);
+   evas_object_event_callback_add(it->base, EVAS_CALLBACK_MOUSE_UP,
+                                  _mouse_up, it);
+   evas_object_size_hint_weight_set(it->base, 1.0, 1.0);
+   evas_object_size_hint_align_set(it->base, -1.0, -1.0);
+   return it;
+}
+
+static void
+_fix_items(Evas_Object *obj)
+{
+   Widget_Data *wd = elm_widget_data_get(obj);
+   Eina_List *l;
+   int i;
+   
+   for (i = 0, l = wd->items; l; l = l->next, i++)
+     {
+        Item *it = l->data;
+        it->even = i & 0x1;
+        if ((it->even != it->is_even) || (!it->fixed))
+          {
+             const char *stacking;
+             if (it->even)
+               _elm_theme_set(it->base, "list", "item", "default");
+             else
+               _elm_theme_set(it->base, "list", "item_odd", "default");
+             stacking = edje_object_data_get(it->base, "stacking");
+             if (stacking)
+               {
+                  if (!strcmp(stacking, "below"))
+                    evas_object_lower(it->base);
+                  else if (!strcmp(stacking, "above"))
+                    evas_object_raise(it->base);
+               }
+             edje_object_part_text_set(it->base, "elm.text", it->label);
+             if (!it->fixed)
+               {
+                  Evas_Coord minw, minh;
+                   
+                  edje_object_message_signal_process(it->base);
+                  edje_object_size_min_calc(it->base, &minw, &minh);
+                  if (wd->mode == ELM_LIST_COMPRESS) minw = 0;
+                  evas_object_size_hint_min_set(it->base, minw, minh);
+                  evas_object_show(it->base);
+               }
+             it->fixed = 1;
+             it->is_even = it->even;
+          }
+     }
+   _sizing_eval(obj);
+}
+
+EAPI Evas_Object *
+elm_list_add(Evas_Object *parent)
+{
+   Evas_Object *obj;
+   Evas *e;
+   Widget_Data *wd;
+   
+   wd = ELM_NEW(Widget_Data);
+   e = evas_object_evas_get(parent);
+   obj = elm_widget_add(e);
+   elm_widget_on_focus_hook_set(obj, _on_focus_hook, NULL);
+   elm_widget_data_set(obj, wd);
+   elm_widget_del_hook_set(obj, _del_hook);
+   elm_widget_can_focus_set(obj, 1);
+   
+   wd->scroller = elm_scroller_add(parent);
+   elm_widget_resize_object_set(obj, wd->scroller);
+   
+   wd->box = elm_box_add(parent);
+   
+   evas_object_size_hint_weight_set(wd->box, 1.0, 0.0);
+   evas_object_size_hint_align_set(wd->box, -1.0, 0.0);
+   elm_scroller_content_set(wd->scroller, wd->box);
+   evas_object_show(wd->box);
+
+   wd->mode = ELM_LIST_COMPRESS;
+   
+   _sizing_eval(obj);
+   return obj;
+}
+
+EAPI Elm_List_Item *
+elm_list_item_append(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *indicator, Evas_Object *end, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data)
+{
+   Widget_Data *wd = elm_widget_data_get(obj);
+   Item *it = _item_new(obj, label, icon, indicator, end, func, data);
+   wd->items = eina_list_append(wd->items, it);
+   elm_box_pack_end(wd->box, it->base);
+   _fix_items(obj);
+   return (Elm_List_Item *)it;
+}
+
+EAPI Elm_List_Item *
+elm_list_item_prepend(Evas_Object *obj, const char *label, Evas_Object *icon, Evas_Object *indicator, Evas_Object *end, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data)
+{
+   Widget_Data *wd = elm_widget_data_get(obj);
+   return NULL;
+}
+
+EAPI Elm_List_Item *
+elm_list_item_insert_before(Evas_Object *obj, Elm_List_Item *before, const char *label, Evas_Object *icon, Evas_Object *indicator, Evas_Object *end, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data)
+{
+   Widget_Data *wd = elm_widget_data_get(obj);
+   return NULL;
+}
+
+EAPI Elm_List_Item *
+elm_list_item_insert_after(Evas_Object *obj, Elm_List_Item *after, const char *label, Evas_Object *icon, Evas_Object *indicator, Evas_Object *end, void (*func) (void *data, Evas_Object *obj, void *event_info), const void *data)
+{
+   Widget_Data *wd = elm_widget_data_get(obj);
+   return NULL;
+}
+
+EAPI void
+elm_list_multi_select_set(Evas_Object *obj, Evas_Bool multi)
+{
+   Widget_Data *wd = elm_widget_data_get(obj);
+}
+
+EAPI void
+elm_list_horizontal_mode_set(Evas_Object *obj, Elementary_List_Mode mode)
+{
+   Widget_Data *wd = elm_widget_data_get(obj);
+}
+
+EAPI const Elm_List_Item *
+elm_list_selected_item_get(Evas_Object *obj)
+{
+   Widget_Data *wd = elm_widget_data_get(obj);
+   return NULL;
+}
+
+EAPI const Eina_List *
+elm_list_items_get(Evas_Object *obj)
+{
+   Widget_Data *wd = elm_widget_data_get(obj);
+   return NULL;
+}
+
+EAPI void
+elm_list_item_selected_set(Elm_List_Item *item, Evas_Bool selected)
+{
+}
+
+EAPI void
+elm_list_item_show(Elm_List_Item *item)
+{
+}
+
+EAPI void
+elm_list_item_del(Elm_List_Item *item)
+{
+}
+
+EAPI const void *
+elm_list_item_data_get(Elm_List_Item *item)
+{
+   return NULL;
+}