2 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 using System.Collections.Generic;
30 public class ListItemEventArgs : EventArgs
32 public ListItem Item { get; set; }
33 internal static ListItemEventArgs CreateFromSmartEvent(IntPtr data, IntPtr obj, IntPtr info)
35 ListItem item = ItemObject.GetItemByHandle(info) as ListItem;
36 return new ListItemEventArgs() { Item = item };
40 public class List : Layout
42 HashSet<ListItem> _children = new HashSet<ListItem>();
43 Interop.SmartEvent<ListItemEventArgs> _selected;
44 Interop.SmartEvent<ListItemEventArgs> _unselected;
45 Interop.SmartEvent<ListItemEventArgs> _doubleClicked;
46 Interop.SmartEvent<ListItemEventArgs> _longpressed;
47 Interop.SmartEvent<ListItemEventArgs> _activated;
49 public List(EvasObject parent) : base(parent)
51 _selected = new Interop.SmartEvent<ListItemEventArgs>(this, Handle, "selected", ListItemEventArgs.CreateFromSmartEvent);
52 _unselected = new Interop.SmartEvent<ListItemEventArgs>(this, Handle, "unselected", ListItemEventArgs.CreateFromSmartEvent);
53 _doubleClicked = new Interop.SmartEvent<ListItemEventArgs>(this, Handle, "clicked,double", ListItemEventArgs.CreateFromSmartEvent);
54 _longpressed = new Interop.SmartEvent<ListItemEventArgs>(this, Handle, "longpressed", ListItemEventArgs.CreateFromSmartEvent);
55 _activated = new Interop.SmartEvent<ListItemEventArgs>(this, Handle, "activated", ListItemEventArgs.CreateFromSmartEvent);
56 _selected.On += (s, e) => { ItemSelected?.Invoke(this, e); };
57 _unselected.On += (s, e) => { ItemUnselected?.Invoke(this, e); };
58 _doubleClicked.On += (s, e) => { ItemDoubleClicked?.Invoke(this, e); };
59 _longpressed.On += (s, e) => { ItemLongPressed?.Invoke(this, e); };
60 _activated.On += (s, e) => { ItemActivated?.Invoke(this, e); };
67 return (ListMode)Interop.Elementary.elm_list_mode_get(Handle);
71 Interop.Elementary.elm_list_mode_set(Handle, (Interop.Elementary.Elm_List_Mode)value);
75 public ListItem SelectedItem
79 IntPtr item = Interop.Elementary.elm_list_selected_item_get(Handle);
80 return ItemObject.GetItemByHandle(item) as ListItem;
84 public event EventHandler<ListItemEventArgs> ItemSelected;
85 public event EventHandler<ListItemEventArgs> ItemUnselected;
86 public event EventHandler<ListItemEventArgs> ItemDoubleClicked;
87 public event EventHandler<ListItemEventArgs> ItemLongPressed;
88 public event EventHandler<ListItemEventArgs> ItemActivated;
92 Interop.Elementary.elm_list_go(Handle);
95 public ListItem Append(string label)
97 return Append(label, null, null);
100 public ListItem Append(string label, EvasObject leftIcon, EvasObject rightIcon)
102 ListItem item = new ListItem(label, leftIcon, rightIcon);
103 item.Handle = Interop.Elementary.elm_list_item_append(Handle, label, leftIcon, rightIcon, null, (IntPtr)item.Id);
108 public ListItem Prepend(string label)
110 return Prepend(label, null, null);
113 public ListItem Prepend(string label, EvasObject leftIcon, EvasObject rigthIcon)
115 ListItem item = new ListItem(label, leftIcon, rigthIcon);
116 item.Handle = Interop.Elementary.elm_list_item_prepend(Handle, label, leftIcon, rigthIcon, null, (IntPtr)item.Id);
123 Interop.Elementary.elm_list_clear(Handle);
124 foreach (var item in _children)
126 item.Deleted -= Item_Deleted;
131 protected override IntPtr CreateHandle(EvasObject parent)
133 return Interop.Elementary.elm_list_add(parent);
136 void AddInternal(ListItem item)
139 item.Deleted += Item_Deleted;
142 void Item_Deleted(object sender, EventArgs e)
144 _children.Remove((ListItem)sender);